開発中に単体テストを作成すると、開発する時間とメンテナンス作業に費やす時間の影響は何ですか?


24

私はコンサルタントであり、クライアントサイトですべての開発者に単体テストを紹介します。私の目標は、すべての新しいアプリケーションで、作成されたすべてのクラスの単体テストを確実に行うことです。

クライアントには、既存のアプリケーションのバグ修正による高いメンテナンスコストの問題があります。それらのアプリケーションの寿命は5〜15年で、新しい機能が継続的に追加されます。ユニットテストから始めることで、彼らが大いに役立つと確信しています。

開発の時間とコストに対する単体テストの効果に興味があります。

  • 開発プロセスの一環として単体テストを書く時間はどれくらいかかりますか?
  • 適切な単体テストを行うことで、メンテナンスアクティビティ(テストとデバッグ)でどれくらいの時間が節約されますか?

回答:


25

開発中に単体テストを作成する場合、コーディングだけと比較して、アプリケーションの開発にかかる時間について利用可能な統計情報はありますか?

これについては非常に興味深い研究がいくつかあります。次のホワイトペーパーをお読みください。

テスト駆動開発による品質改善の実現:4つの産業チームの結果と経験

著者の1人であるNachi Nagappanのホワイトペーパーおよびその他の研究については、http//research.microsoft.com/en-us/news/features/nagappan-100609.aspxで説明しています。

この研究とその結果は、テスト駆動開発による品質改善の実現というタイトルの論文に発表されました。IBMAlmaden Research CenterのE. Michael MaximilienとNagappanによる4つの産業チームの結果と経験。マイクロソフトの主なソフトウェア開発リーダーであるティルマレシュバート。ノースカロライナ州立大学のローリー・ウィリアムズ。研究チームが発見したのは、TDDチームが、TDD以外のチームよりも欠陥密度の点で60〜90%優れたコードを生成したことです。彼らはまた、TDDチームがプロジェクトを完了するのに15〜35%長くかかったことを発見しました。

「12か月の開発サイクルでは、35パーセントがさらに4か月で、これは巨大です」とNagappan氏は言います。「しかし、トレードオフは、コード品質が非常に優れているため、リリース後のメンテナンスコストを大幅に削減することです。繰り返しますが、これらは管理者が下さなければならない決定です。どこで打撃を受けるべきでしょうか?しかし今、彼らは実際にそれらの決定を行うための定量化されたデータを持っています。」

さらに、Jason Gormanは、今年のSoftware Craftsmanshipカンファレンスでこのような実験提案しています。彼はTDDと非TDDアプローチを使用して同じアプリケーションを作成する実験を試みており、最近彼の結果についてブログに書いています

3回の反復で、TDDなしでカタを完了するのにかかった平均時間は28分40秒でした。TDDの平均時間は25分27秒でした。TDDを使用しない場合、平均で5.7パス(受け入れテストに合格)しました。TDDでは、平均で1.3パスを作成しました(2回の試行で、最初にパスしましたが、1回で2パスかかりました)。

さて、これはもちろん赤ちゃんの実験でした。そして、厳密には実験室の条件ではありません。しかし、私はいくつかの興味深い点に注意しています。すべて同じです。

より多くの人々がそれを実行するとき、この実験の完全な結果を見るのは面白いでしょう。

(良好な)単体テストを行ったときに保守が何時間短縮されるかを示す統計情報はありますか?

上記のホワイトペーパーから:

ケーススタディの結果は、TDDプラクティスを使用しなかった同様のプロジェクトと比較して、4つの製品のリリース前の欠陥密度が40〜90%減少したことを示しています。


私はこの答えが好きです。言語とテストツールもTDD時間に大きな影響を与える可能性があることを付け加えます。NCRUNCHの前のC#のような言語では、TDDの利点にそれほど興奮していませんでした。NCRUNCHを見て使用した後。私の見解では、コードを並列テストする傾向は、このようなツールの有効性の大きな変化です。2008年に基づいた研究は、現在のツールとその有効性を反映していない場合があります。
フィル・ソーディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.