Search

検索したいワードを入力してください

2019年01月22日

PHPで簡単にテストできるツールと開発時に使うべき理由を紹介

PHPで開発、テストを行う場合、非常に大きな労力がかかります。当記事では、そのテストを自動化する為の手法や、メリット・デメリット、PHPテストツールの紹介を行います。有名なのはPHPUnitですが、それ以外にも多数のツールを紹介しています。

コードのテストとは

端的にいうと、自動的にソースファイル内の関数参照し、値評価を行うコードを作成・利用することで、自動的にテストを行える仕組みの事です。

コードを新しく書くのは大変、面倒くさいといったデメリットもありますが、メリットも非常に大きいです。メリットについては、次でご紹介します。

テストコードを書くメリット

同じテストを自動で繰り返し実行できる

テストというのは、プログラムが修正される度に必ず発生する工程になります。たとえ少量の修正であっても、確認の意味も込めて、全テスト再実施という事態に直面する場面は少なくありません。これは、かなりの労力が必要となります。

しかし、テストコード作成する事で、再テスト実施の際、コマンド一つで必要な全てのテストを実施する事が可能となります。これは、テストにかかる手間を大きく削減する事につながります。

コード変更で機能しなくなることを避けられる

テストでの不具合や仕様変更が発生し、開発中にアプリの修正を行うことは多々あります。その際、少量の修正で済む場合もありますが、その修正が無関係と考えていた個所に影響を与え、思わぬ不具合を与える事もあります。

しかし、テストコード作成すると、コードに記載してある全てのテストを簡単に実施する事が可能となります。

テストコードにより修正箇所以外の無影響確認も簡単に行えるため、コード変更でアプリが機能しなくなるといった事象をテストで発見、改修する事が可能です。

誰でも同じテストを行うことができる

テストの実施を常に同じ人が担当することは無いのが、アプリ開発の現状です。この場合の問題点として、テストの品質が疎らになるというものがあります。

テストの手順が複雑なものは、特に顕著に表れる事象で、手順間違いによるテストミスによる品質低下を招きます。

しかし、テストコードを作成することで、テスト担当者が変更となった場合でも、常に一定の品質を保ったテスト(全く同一のテスト)を行う事が可能です

これは、テストコードに手順や前提条件を記載する事で、テスト実施時には、その手順/前提条件に沿ったテストが自動的に行われるからです。

テスト駆動開発とは

テスト駆動開発(Test Driven Development = TDD)とは、端的に言うとアプリの機能を実装する前に自動テストを書く手法の事です。簡単に手順を以下に記載します。

①新規機能の開発開始
②機能を実装せずに、新規機能に必要なテストコードを作成
③テストを失敗(赤色表示)させる
④テストを成功(緑色表示)させるための最小限の機能を実装
⑤緑色表示になったら、④で作成した機能のコードをリファクタリング
⑥再度テストを実行して機能が正しく実装されたままであることを確認

一般的なウォーターフォール型の開発手法とは異なり、アジャイル的な開発手法に近い開発となっている点に注意してください。

テストコードに関する問題点

テストコードを記述し、自動テストを行うことは、メリットも大きいですが、デメリットもあります。ここでは、デメリットについて説明します。

必要な工期が通常よりも増える

通常のコーディングに加え、テストコードの作成も必要となるので、開発期間が通常よりも増える傾向にあります。また、テストコードの作成に慣れていない人材を担当にする場合、学習コストという点でも、コストの増大に繋がります。

テストコードを保守が必須

ソフト開発では細かな仕様は必ずと言っていいほど変化します。テストコードを使用して、自動テストを行う場合は、仕様変化に合わせて、テストコードを修正していく必要があります。

テストコードの保守は非常に重要な事であり、これをおろそかにした場合、テストそのものの信頼性、品質の担保が不可能となります

テスト範囲の見極めが必要

テストコードを利用したテスト実施が不可能な個所、機能がある場合もあります。テストコード作成に時間をかけて、メリットが薄い場合は、テストそのものを手動で行うといった切り分けが必要となります。

おすすめのPHPテストツール

ここでは、PHPの自動テストツールをいくつかご紹介します。

各テストツールの詳細については、リンク先のページで詳細に説明しているのでご参考までにどうぞ。

PHPUnit

PHPUnitは2014年にSebastian Bergmannが開発した、単体テストをテストするツールの事で、テストコードは、PHPで記述します

メリットとしては以下のようなものがあります。
①クラス、関数単位で動作を確認できる
②コマンドで簡単にテストを実行できる
③Jenkinsと連携する事でテストそのものを自動化できる
④PHPUnitのコードを見る事で、クラス、関数単位の挙動の理解に繋がる
⑤テスト効率の向上
⑥一定したテスト品質の確保が可能

一般的に広く普及しているPHPのユニットテストツールであり、サポートも充実しているという特徴を持ちます。

導入方法や利用方法については、下記リンクを参照してください。

Cucumber

Cucmberはプレーンなテキストの機能記述を自動テストとして実行するツールであり、Gherkinという言語で記述します

Cucumberの大きな特徴として、ソフトウェア開発者とビジネス・マネージャーの間の橋渡しをする上で役立つテスト・フレームワークだということが挙げられます。

どういうことかと言うと、自然言語で記述された用に見えるテストコードがテストを動かすスクリプトとして機能しているように見えるので、今の動作で仕様を満たしているかどうかということを開発者同士、あるいは開発者とビジネス・マネージャーで共有しやすくなるという事です。

PHPアプリに対するテストで、Cucumberを利用する場合は、Webratというツールを使うことで可能となります。詳細なテストコード記述方法については、下記リンクをご参照ください。

Atoum

Atoumは、スタンドアローンパッケージのPHPのユニットテストフレームワークです。Atoumには理解しやすいメソッド名とメソッドチェーンがあり、可読性の高いテストを記述する事が可能です。このフレームワークは、以下の開発コンセプトを元に開発されています。

・迅速な実装
・テスト開発を簡素化
・信頼性があり、可読性の高い単体テストを書く

Atoumは、単一のPHARアーカイブで提供されており、UnixやWindowsといった環境に左右される事なく既存のプロジェクトへのインストールと利用が簡単に行えます。また、Atoumは、各テストメソッドを独自のPHPプロセスに分離することで、非常に高いレベルのセキュリティを提供します。

また、Atoumは、並列化された環境でテストを実行し、テストそのものを高速に実行します。テスト結果の例や、使用例については、下記を参照してください。

Selenium

Seleniumはブラウザーテストを自動化できるツールです。作成されたテストコードをブラウザーAPIコマンドに変換し、テストの結果を取得、正当性の検証を行うことが可能です。

Seleniumは、ほぼ全てのブラウザーでのテストをサポートしています。また、テストコード実行時には、画面のキャプチャを取得する事が可能です。

Seleniumでは、紹介済みのPHPUnitを拡張機能として使用可能です。
検索してみると有用な記事がいくつかあるので、詳細はそちらをご参照ください。

Dusk

Dusk(ダースク:夕暮れ)は、ブラウザの自動操作/テストAPIを提供するテストフレームワークです。Duskの特徴として、利用する際にJDKやSeleniumのインストールは必要ありません。DuskはJDKやSeleniumの代わりに、スタンドアローンのChromeDriverを使用します。

上述のとおり、テスト実行時、DuskはGoogle ChromeとChromeDriverをブラウザテスト実行に使用しまが、自身でたてたSeleniumサーバ利用する事で、任意のブラウザに対するテストを実行する事も可能となります。

各種設定や、テストコードの記述例については、下記ページをご参照ください。

Kahlan

Kahlanは、PHPテストフレームワークの一つであり、大きな特徴の一つとして「PHPでもsubtestを書けるフレームワーク」という点が挙げられます

本フレームワークを使用する際の推奨されるディレクトリ構造は、プロジェクトの最上位にspecディレクトリを配置する構造です。配置された、specディレクトリの内には、Specファイル₍テストコード₎を配置することができます。

Specファイルは.spec.phpまたはSpec.phpサフィックスを持つべきで、specディレクトリはソースコードディレクトリの構造を反映する必要があります。

PHP_Testability

PHP Testabilityとは、静的分析ツールの一つで、 PHPコードベースのテスト容易性について、問題を分析してレポートを作成します

PHP Testabilityの利用に際し、PHP 7.0以上の利用が必須となります。現時点でタグのついたリリース版は存在しませんが、開発段階のものでも、使用に際し何も問題はありません。

生成された分析結果レポートの記載されている、問題のあるファイルをクリックすると、コードブラウザが表示され、問題のある行が強調表示されます。

下記問題が、問題点として検知されます。
 ・グローバル変数、スーパーグローバルなどへの参照
 ・モックできない関数への呼び出し(静的メソッドやグローバル関数など)
 ・オブジェクトの新しいインスタンス(密結合 - モック/インジェクトすることはできません)

まとめ

開発する機能に対するテストや、一定の品質確保に頭を悩ませるプロジェクトも多くあります。今回ご紹介した各テストツールを使用し、テストを自動化すると一定の品質の確保や、開発した機能の過不足の確認に有効に働きかけます

ただし、それには最初に機能の洗い出しが必須だったり、学習コストを下げるために有効なスキルセットを持った人材を確保したりと課題も多いのも事実です。

ウォーターフォール的な開発よりは、アジャイル的な開発手法の場合に有効な手段ですので、今後の開発の際にご参考にしていただければ幸いです。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related