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


24

私はアジャイル手法を実践しようとする多くのチームに所属しており、多くの場合、これらのチームはテスト中心です。テストはアジャイル手法を実践するのに必要な部分ですか、それとも長年にわたって定着しているXPの実践ですか?


76
テストは、高品質のソフトウェア開発に必要な部分です。
テラスティン14

2
TDD(テスト駆動開発)を行わなくてもアジャイルなれますか?-あなたは同意できない場合は...私に知らせて
Murph

11
私は複製に同意しません。テストはTDDよりも広範囲であり、より広範な質問にはさまざまな答えがあります。
バートヴァンインゲンシェナウ14

@BartvanIngenSchenauに同意します。テストは、TDDを行うだけでなく、はるかに広範なアクティビティを行うだけでなく、TDDとユニットテストも同じではありません。多くの人が最後の2つを混同していることに驚いています。
アンドレスF. 14

アジャイル/スクラムではコンテキスト依存であることを意味する「Definition of Done」の概念に組み込まれている可能性があります。アジャイルがマーケティング、販売などに適用される場合、ソフトウェアテストと同様の概念はありませんが、それでも「完了の定義」があります。ソフトウェアの場合、「完了の定義」は、最終結果の品質(目に見える品質と内部の両方のコード品質など)、および実行されたテストのレベルを考慮する必要があります。
rwong 14

回答:


33

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

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


2
また、将来のインクリメンタルな変更が以前の機能を壊さないことも重要であり、単体テストはそれをチェックする簡単な方法です。

1
テストはソフトウェア開発に絶対に不可欠だと思います。
アンドレス

@Snowman Testing!=単体テスト。また、単体テスト!= TDD(念のため...)。
アンドレス

@AndresF。事実、私は通常、上記で概説した理由から、単体テストがアジャイルの不可欠な部分であると考えています。読み取りエラー。

8

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


8

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

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

一方、作品を「仕様に従って動作する」と定義できます。これで、テストを使用してコードが機能することを示すことができるだけでなく、テスト自体がコードの動作の実行可能な仕様として機能できます。言い換えれば、うまく書かれたテストスイートは、動作の意味を定義します。

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

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


13
顧客がバグレポートの提出を停止したとき :-)
gbjbaanb 14

3
正しいことを証明できます。クリーンルームソフトウェアエンジニアリングは、実際にはTDDに非常に似ていますが、仕様と証明から生成される統計テストのみを自動的に生成しています。
ヨルグWミットタグ14

1
-1-「テストにより、バグの有無ではなく、存在が示されます。」
テラスティン14

@Telastyn、テストがないことは、ほぼ確実にバグの存在を示しています。一方、よく書かれた一連のテストは、コードが実行する実行可能な仕様を提供します。
ディマ14

私は同意しませんが、テストの量はあなたのコードが機能すること証明しません。
テラスティン

5

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

アジャイル原則は、テストについて直接言及していません。

しかし、それは非常にお勧めです

持続可能なプロセス、継続的/増分的配信、ソフトウェア品質に対するアジャイルのコミットメントを考えると、自動テストはほとんどのプロジェクトで現在利用可能な最良のソリューションです

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


4

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.