1 フォロワー

テスト

テストはソフトウェア開発の重要な一部です。意識しているかどうかにかかわらず、私たちは継続的にテストを実施しています。たとえば、PHPでクラスを記述するとき、ステップごとにデバッグしたり、単にechoまたはdieステートメントを使用して、実装が当初の計画どおりに動作することを確認したりする場合があります。Webアプリケーションの場合、ページが期待どおりにインタラクトすることを保証するために、フォームにいくつかのテストデータを入力しています。

テストプロセスは自動化できるため、何かを検証する必要があるたびに、それを実行するコードを呼び出すだけで済みます。結果が計画と一致することを確認するコードはテストと呼ばれ、その作成とさらなる実行のプロセスは、自動テストと呼ばれ、このテスト章の主なトピックです。

テスト駆動開発

テスト駆動開発(TDD)とビヘイビア駆動開発(BDD)は、実際のコードを記述する前に、コードの一部または機能全体の動作をシナリオまたはテストのセットとして記述し、これらのテストをパスさせる実装を作成して、意図した動作が達成されたことを確認することによってソフトウェアを開発するアプローチです。

機能を開発するプロセスは次のとおりです。

  • 実装する機能を記述する新しいテストを作成します。
  • 新しいテストを実行し、失敗することを確認します。まだ実装がないため、これは予想どおりです。
  • 新しいテストをパスさせるために簡単なコードを記述します。
  • すべてのテストを実行し、すべてパスすることを確認します。
  • コードを改善し、テストが引き続きOKであることを確認します。

完了したら、別の機能または改善のためにプロセスを繰り返します。既存の機能を変更する場合は、テストも変更する必要があります。

ヒント: 細かい反復作業を繰り返して時間を浪費していると感じたら、テストシナリオでより多くの範囲をカバーするようにして、テストを再実行する前に多くのことを済ませてみてください。デバッグに時間をかけすぎている場合は、その逆を試してみてください。

実装を行う前にテストを作成する理由は、まず何を達成したいのかに集中し、その後「どのように行うか」を深く掘り下げることができるからです。通常、これにより、機能の調整や結合度の低いコンポーネントの場合に、より優れた抽象化と簡単なテストのメンテナンスにつながります。

つまり、このようなアプローチの利点をまとめると、次のようになります。

  • 一度に一つのことに集中できるため、計画と実装が向上します。
  • テストでより多くの機能を詳細にカバーできます。つまり、テストがOKであれば、ほとんどの場合、何も壊れていません。

長期的には、通常、時間の節約効果が得られます。

いつ、どのようにテストするか

上記のテストファーストのアプローチは、長期的で比較的複雑なプロジェクトには理にかなっていますが、より単純なプロジェクトには過剰になる可能性があります。いつそれが適切であるかの指標がいくつかあります。

  • プロジェクトがすでに大規模で複雑である場合。
  • プロジェクトの要件が複雑になり始めている場合。プロジェクトが絶えず成長している場合。
  • プロジェクトが長期的なものである場合。
  • 失敗した場合のコストが非常に高い場合。

既存の実装の動作をカバーするテストを作成することに問題はありません。

  • プロジェクトが徐々に更新されるレガシーなものである場合。
  • 取り組むプロジェクトがあるが、テストがない場合。

場合によっては、どのような形の自動テストも過剰になる可能性があります。

  • プロジェクトがシンプルで、これ以上複雑にならない場合。
  • 今後作業が行われない、一度限りのプロジェクトである場合。

それでも、時間があれば、このような場合でもテストを自動化することをお勧めします。

さらに読む

  • テスト駆動開発: By Example / Kent Beck. ISBN: 0321146530.

誤字脱字を見つけたり、このページを改善する必要があると思いませんか?
githubで編集する !