2

次のような質問への回答に勇気づけられて、すでに開始したプロジェクトでTDDとBDDを試してみることにしました。 まだ使用していないプロジェクトでTDDを使用し始める必要があります。

私は本当にそれから始めるのに苦労しています。私のプロジェクト(オープンソース、 http://gitorious.org/rubotsでホストされている)はゲームのようなもので、Rubyを使用してラップし、制御サーバーと物理シミュレーション環境に接続します。スクリプトが実行され、GUIが表示され、ユーザーが[開始]をクリックすると、2つの外部c ++プログラムが起動されます。そのうちの1つは物理シミュレーションであり、Rubyバインディングを備えたライブラリによって制御されます。シミュレーションと制御プログラムをリセットする方法はありません。再起動する必要があります。それらを起動し、動作状態にするのに5秒ほどかかります。このコンテキストでは、何かが移動する前に開始フェーズ全体のテストが必要であり、シミュレーションは、提供する必要のある外部構成ファイルに依存します。

テストケースを書き始めることは本当に価値がありますか?どのように?ゲームを開始したり、アプリケーションを起動したりする:beforeなどのすべてのテスト?次に、すべてのテストに少なくとも5秒かかります(コマンドをコミットしてシミュレーションのエンティティが応答するのを待つ必要がある場合は、かなり長くかかります)。

何かが足りません。BDDとTDDだけでなく、この種のアプリケーションのテストユニットもスキップする必要がありますか?

4

2 に答える 2

6

RubyConf 2007で、AtomicObjectのWilliamBerezaが、Rubyによる組み込み開発の強化について講演しました。そこでは、 Atomic Objectが表す原則(アジャイル、BDD、自動テストなど)を自律型ロボットを含む組み込みプロジェクトにどのように適用したかについて説明しています。車両。数ヶ月前、彼はO'ReillyOSCON2007で同じ講演をしました。

Atomic ObjectsのWebサイトには、豊富なリソースがあります。

ウォード・カニンガムと組み込みシステムのTDDについての素晴らしい話もあります。これは、ロバートC.マーチン(「ボブおじさん」)がRailsConf 2009での基調講演で語ったものです(話はおおよそ15:50から17:20になります)。ストーリーは次のようになります。

ボブはウォードを訪ねてきました。ウォードは彼を地下室に連れて行きました。そこで彼は宇宙で最もクールなもののように画面上の小さな円を見つめています。彼はクリスマスに最初の自転車を開梱する小さな子供のように興奮しています。彼がしたことは、デバイスにまったく触れずに、組み込みデバイス(この場合はビデオコンバーター)を完全にTDDする方法を見つけようとしていました。。彼が行ったことは次のとおりです。彼は、モックを使用してJUnitでユニットテストを書き始めました。次に、通常どおりに、そのテストに合格します。次に、すべてのメソッドを、デバイスに適切なアセンブリコードを生成するメソッドに置き換えました。すべてのロジックはJavaで記述(およびテスト)されているため、「リーフ」メソッド自体は非常に単純なメソッドであり、アセンブリの対象となる「intレジスタへの書き込み」や「フラグレジスタからの読み取り」などの非常に単純なことしか実行しませんでした。boolコードは非常に単純だったので、「明らかに正しい」ものでした。

そして、確かに、彼が生成したコードをアセンブルしてデバイスをフラッシュしたとき、彼がデバイスでコードを試したことも、実質的なアセンブリコードを記述したこともなく、初めて機能しました。

つまり、これは2つのアプローチです。AtomicObjectの場合、ソフトウェアをCで記述し、テストをRubyで記述し、Rubyコードからテストを生成しました。Wardの場合、彼はテストとコードをJavaで記述し、Javaコードからコードを生成しました。

于 2009-08-31T12:02:53.390 に答える
2

これがスタブの目的です。基本的に、高価なサービスにアクセスするオブジェクト(あなたの場合のように)または他のことを行うオブジェクトの代わりとなるテストダブルを作成します。これにより、テスト中にオブジェクトを分離し、テストをより高速に実行できます。

それは物事をスピードアップするためだけではありません。Paypalを介してトランザクションを実行するためのミドルウェアコードを作成しているとします。テストの実行中にPaypalサービスを実際に使用したくない場合がありますが、これは(文字通り)高額になる可能性があります。

モカはこういうのにいいです。または、Webサービスオブジェクトのように動作するオブジェクトを作成します(これは、アヒルのように歩く場合はRubyであるため...)。

于 2009-08-31T02:43:36.613 に答える