web-dev-qa-db-ja.com

TDDの起源は何ですか?

TDDのさまざまな「起源」を人々が指摘するのを見てきました。 XPを使用した1990年代後半のケントベックの再発見を指摘する人もいます。他のものは、より速くより正確に物事をチェックするためにパンチカードの側面に結果に注釈を付ける1960年代のベストプラクティスに言及します。それでも、1960年代から1990年代までのソフトウェアの信頼性に関するさまざまな書籍を紹介する人もいます。

しかし、ケントベックのXP説明本の前にさかのぼるプロセスの形式化された独創的な論文または本はありますか?トピックを徹底的に研究した誰かがタイムラインを作成できますか?

2
Philippe Fanaro

テスト駆動開発という用語は、XPから借用されたものであり、ケントベックに直接つながります。専門文献を参照すると、[〜#〜] tdd [〜#〜]テスト駆動設計テスト最初のプログラミングと同様の用語はベックの本の後にのみ現れます。

TDDは、1990年代以前にさかのぼるパンチカードまたはソフトウェアの信頼性と品質の慣行に関する注釈とは大きく異なります。ソフトウェア品質のパイオニアは、早期の体系的なテストについて、すでにずっと前から主張しています。しかし、これらの品質志向のアプローチは、せいぜい開発と並行しています。バグの防止、ソフトウェアの検証および検証を行うために実施されます。 「 ソフトウェアテストの成長 」では、D。GelperinとB. Hetzelが、既存の方法の非常に広範な分析に基づいて1988年に説明しています。

ライフサイクルモデルは、テストの焦点をプロジェクトの終わりから最初に移します。この変化により、テストはソフトウェアの実装のみに影響を与える順次的なフェーズではなく、ソフトウェアの要件と設計にも影響を与える並列トラックにあるという見方が生まれます。 。テストは、プロジェクトの最初から、開発活動と強く相互作用していると見なされています。

IBMの「Guide to Testing in Testing in a Complex System Environment」が1974年に指摘しているように、これはテストがソフトウェア設計の改善に貢献できないことを意味しません。

テスト計画は、開発サイクルの早い段階で開始する必要があります(...)。テスターは、開発者とはまったく異なる視点から仕様を調べます。そのため、設計のロジックの欠陥や仕様の不完全さを頻繁に発見できます。これにより、開発者が優れた製品を生産し、実際のプログラム開発を加速することができます。」

しかし、設計と実装との相互作用スポッティングの欠陥はそうではありません運転開発。したがって、まだTDDには程遠い状態でした。 TDDでは、テストの記述が設計に貢献します。

それでも、この考えを念頭に置いていたのはベックだけではありませんでした。たとえば1992年にH.Saiedianが作成した「 CSMAプロトコルのオブジェクト指向シミュレーション 」に関する論文では、複雑なシステムの設計と構築の前にテストを行う必要があると示唆されています。彼の記事はテレコムシステムのシミュレーションに関するものであるため、著者はTDDを発明しませんでした。しかし、TDD原則の出現は明らかに5ページにあります。

(...)オブジェクト指向のこの機能により、重要なオブジェクトと「スタブ」または「ドライバー」として機能するオブジェクト(または一般に、 "placeholder"これは、オブジェクトのインターフェースと相互作用の定義、定式化、およびテストに役立ちます。その後、モデルに変更を加えて、オブジェクトの一部またはすべての制御された段階的な詳細な実装を開発できます。

私見、オブジェクト指向の出現と反復的な開発アプローチがこの種の考え方を刺激したと思います。他のチームがTDDのようなアプローチを使用したことを、決して公開せずに除外したわけではありません。つまり Zeitgeist であろうとなかろうと、ベックはそれから成熟したコンセプトを作った最初の人物です。

3
Christophe