web-dev-qa-db-ja.com

テストはアジャイル方法論の必要な部分ですか?

私はアジャイル方法論を実践しようとする数多くのチームに参加しており、これらのチームはテスト中心です。テストはアジャイル方法論を実践する上で必要な部分ですか、それとも単なるXPプラクティスが長年にわたって定着しているのですか?

24
stevebot

アジャイルは漸進的な改善に基づいているため、テストはアジャイルにとって絶対に不可欠です。現在の変更が古いコードにどのように影響するかを確認するのが難しい場合があることは困難です。何かが壊れていないことを確信するための最良の方法は、それをテストし、それをテストする方法を知ることです。そうすれば、古い機能を壊したコードを書いていたときに行ったことを正確に忘れてしまったときに、すぐにバグを見つけることができます。

これがより伝統的なトップダウン設計タイプのプログラミングと異なる理由は、その環境では、a)完成品が得られるまでテストするのが非常に難しいb)理論的には、すべての設計基準を同時に検討している、およびしたがって、以前の設計決定を壊す設計決定を行う可能性が低くなります。

33
Micah

テストがない場合、コードが機能することをどのようにして確認しますか?

編集:テストができないアサーション証明コードが機能することを証明は1つの重要な用語、つまりworksを定義できません。プログラムが機能するとはどういう意味ですか?この用語をあいまいにしておくと、プログラムが機能することを証明したり確認したりする方法はまったくありません。ずっと。

一方、worksを「仕様に従って動作する」として定義できます。これで、テストを使用してコードが機能することを示すことができるだけでなく、テスト自体がコードの動作の実行可能仕様として機能することができます。つまり、適切に記述されたテストスイートは、worksの意味を定義します。

この考え方では、bugの意味を再検討する必要もあります。コードがすべてのテストに合格した場合、コードにバグはありません。それにもかかわらず、システムが正常に動作しない場合、その動作は正しく指定されていません。 I. e。バグは、テストによって定義された仕様にあります。

ソフトウェア開発へのこのアプローチは、システムの機能仕様をその実装から切り離します。これは、世界中のすべてのソフトウェアエンジニアリングブックによれば、非常に良いことです。同時に、このアプローチにより、実装が常に機能仕様に対応することが保証されます。

8
Dima

あなたはおそらく自動テスト、単体テスト、統合テストなどについて話しているでしょう。これらは遅すぎるため、手動テストよりもアジャイルに重要です(テスターなどを使用)。アジャイルは高速で小規模な反復であるため、数時間または数日ではなく数秒または数分で正確性を検証するテストがあると非常に便利です。

8
Karthik T

いいえ、「必要」ではありません

アジャイルの原則 テストについて直接何も言わない

しかし、それは強くお勧めです

持続可能なプロセス、継続的/段階的な配信、およびソフトウェア品質へのアジャイルの取り組みを考えると、自動テストは、ほとんどのプロジェクトで現在利用可能な最良のソリューションです

例外(JörgW Mittagによる指摘)には、証明可能で正しい開発ツール、コードを生成するメタプログラミングシステムなどが含まれます。しかし、これらの種類のシステムはまれです。

5
Steven A. Lowe

アジャイルとXP回避しよう Big Design Up Front 。BDUFでは、要件が収集され、正式な仕様が作成されます次に、コーディングが行われ、その後、テストが行​​われます。これは、明確に定義された、ミッションおよびライフ医療機器、宇宙探査機などの重要なシステム.

アジャイルはこのフローを回避します。これは、明確に定義されていない問題(たとえば、クライアントが今週要求するものは何でも)に対してはうまく機能しないためです。 」まだ正式な仕様が必要なため、何をすべきか、いつ完了するかはわかっていますが、ある種の書面ではなく、codeを使用しています自動テストの形式。

自動化された単体テストは、記述も実行も迅速で、非常にモジュール化/分離されています。これにより、要件を正式に指定および確認するための迅速な方法が実現します。

4
Warbo