TDDで記述されたアプリの実際の例と良好なテストカバレッジ?[閉まっている]


17

テスト駆動開発を使用して開発されたオープンソースアプリケーションは、単体テストがどのように機能するかのモデルとして機能しますか?

C#と.NETの例をご覧ください。(ライブラリだけでなく、アプリケーションについても言及していることに注意してください。)

私は、TDDを信じて実践したい中間層のプログラマーです。私が日々の仕事で取り組んでいるアプリはかなり複雑です(約100万行のコード)。さらに単体テストを導入したいと思います。いくつかの単体テストが用意されていますが、TDDでの努力と、既にテスト中のコードの作業は励みになりませんでした。

私の認められた限られた経験では、TDDはデカップリングの名前の多くの複雑さを奨励するようです。テストするのが難しく、偶然にもクリティカルになる傾向があるアプリの一部は、周辺にプッシュされ、統合テストの領域に書き込まれます。(私はここでの通常の容疑者、ファイルシステムへのアクセス、データベースからのオブジェクトのハイドレーション、非同期ウェブコールなどを考えています)

テスト中のコードには、オブジェクト間の多くのコラボレーションが含まれる傾向があり、おそらくいくつかの単純なフローロジックはすべてメモリ内で発生し、すべてを完全に分離する必要がなければ、おそらくよりシンプルで理解しやすい方法で記述できます検査用の。

私は依存関係などをモックするテクニックを理解していますが、私の経験では、モックを多用すると非常に脆弱なテストになります。一連のテストが赤くなるのを見て最初の本能が「すごい、今はすべてのモックを修正しなければならない」という場合、テストはセーフティネットではなくドラッグになっています。

私はこの精神的な障壁を乗り越えようとしていますが、その一環として、マイケルフェザーズの著書「Working Effectively with Legacy Code」を読んでいます。不足しているものの一部を見せてくれることを願っています。

また、コードカバレッジが良好な自明ではない.NETアプリケーション(コンテンツ管理システム、CRUDアプリなど)を調べたいと思います。ボブおじさんが語るFitNesseテストフレームワークは、おそらく検討するものですが、私が最もよく知っている言語で書かれたものを見るといいでしょう。

提案や知恵の言葉は大歓迎です。



2
まったくそうではありません...実世界のアプリケーションの例を見ることに興味があります。その投稿で受け入れられている答えは、テストフレームワークを推奨しています。フレームワークとライブラリの例をいくつか見たことがありますが、それは私の質問に対応していません。
ジョシュアール

@JoshEarl -私は..私は以下の私の答えは、他のポストに関連だっただろうと思ういけない同意
hanzolo

回答:


14

TDDが使用されたかどうかはわかりませんが、テストの優れた例はsqliteで、100%の分岐カバレッジが顕著で、製品コードの1000倍以上のテストコードとスクリプトがあります。


4
テストコードに対するコードの比率が非常に高い場合、これは多大な労力の無駄のように聞こえます
Ryathal

6
@Ryathal:失敗のコストは、テストされたコードの長さではなく、テストの労力を決定します。十分にミッションクリティカルなアプローチで十分に広く使用されていることを考えると、テストは価値があるかもしれません。しかし、SQLiteが無理をしなかったのかどうかは、本当にわかりません。
チトン

3
多くの人にとって、sqliteは間違いなくミッションクリティカルです。使用頻度(OSX、iOS、Android OSなど)に驚くかもしれません。そして、あなたが気付かなければならないのは、これらの行のテストコードとデータの多くはおそらく機械生成されたものだということです。産業強度データベースには、多くのエッジケースがあります。
ブライアンオークリー

10
SQLiteのは地球上で最も広く使用されているSQLデータベース、それのインストールベースは、MySQL、PostgreSQLの、SQL ServerやOracle、DB2よりも大きな大きさの順で組み合わせます。おそらく、最も広く使用されているソフトウェアの1つである期間です。SQLiteにバグがあると、地球上のすべてのスマートフォンが機能しなくなります。それは少し妄想を正当化すると思います。
ヨルグWミットタグ

@JörgWMittagうわー、SQLiteについては知りませんでした。面白い。ありがとう。しかし、テストコードは1000倍です。それは信じられません。
マイクrod歯類

4

Orchardプロジェクトはあなたが探しているものかもしれません。それはかなり複雑ですが、それほど悪くはない.NET / MVC / TDDアプリであり、いくつかの良い習慣とパターンを示しています。

http://orchard.codeplex.com/wikipage?title=solution

そして、私は更新されたリンクを推測します:

http://docs.orchardproject.net/


これは有望に見えます-掘り下げるのを待つことができません。)
ジョシュアール

0

多くのサードパーティのオープンソースライブラリがTDDされています。RhinoMocksやNHibernateなどのRhinosの休止ライブラリは、XUnitを単体テストフレームワークとして使用する開発者によってTDDされています。

現在、OSSを使用すると、通常、製品のすべてがTDDされていることを保証できません。コミュニティにはこのプラクティスを含む標準があり、コードカバレッジメトリックを実行するビルドボットを使用することもありますが、TDDは開発者が購入しなければならないメンタリティであり、一般の人々はオープンにコミットすることができます。 GitHubのようなソースVCSトランク、誰でも任意の量のテストカバレッジで変更をコミットできます(またはカバレッジが必要な場合、事実の後にテストを書くことができますが、これはTDDの精神に違反しますが、実際にはありません)コミット時にキャッチする良い方法です)。

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