私はユニットテストをいくつか行い、テストを書く経験がありますが、TDDを設計ツールとして完全に受け入れていません。TDD:最初のテストを開始する場所
私の現在のプロジェクトは、企業の組立プロセスの一部としてシリアル番号を生成する既存のシステムを再作業することです。私は、既存のシステムを見て、現在のプロセスとワークフローを理解しています。また、新しい要件のリストと、それらがどのようにワークフローを変更するのかについてのリストもあります。
私はプログラムを書く準備ができているように感じ、私は最後からTDDを最初から最後まで強制することにしました。
しかし、今どこから始めたらいいのか分かりません。 (私はTDDプロセスを欺いているのだろうか?ユーザーのプログラムフローのアイデアは既に持っているのだろうか?)
ユーザフローは本当にシリアルであり、一連のステップに過ぎない。一例として、最初のステップは次のようになります。
- ユーザは、製造指図番号を送信し、次のステップは、ユーザが開始される材料
の注文紙幣のシリアライズ可能な部品番号のリストを受信します部品番号の1つを選択します。
私はこの最初のステップを出発点として使用できると考えていました。製造指図番号を取り、部品番号のリストを返すコードがほしいと思います。
// This isn't what I'd want my code to end up looking like
// but it is the simplest statement of what I want
IList<string> partNumbers = GetPartNumbersForMfgOrder(string mfgOrder);
ケントベックスの例題の本を読んで、小さなテストを選ぶことについて話します。これは非常に大きなブラックボックスのようです。それはmfgオーダーリポジトリを必要とするため、このmfgオーダーのすべての該当するパーツ番号を見つけるためにプロダクト構造ツリーをクロールしなければならず、コード内にドメインモデルも定義していません。
これは非常に一般的な高水準な機能であり、これは奇妙なスタートのようです。一方、私が低いレベルから始めれば、私は本当に自分が必要と思っているものを推測しているようで、それは反TDDのようです。
これは物語をどのように使うのですか?
私は正直であるために
をシリアル化するかを選ぶことができるようにするためMFG順 上の部品番号のリストを取得したいアセンブラ として、アセンブラはそれを言うことはありません。すべてのアセンブラは望んでいるmfgの順に操作を完了することです:
私はあなたが持っていると思う私はmfgの順
あなたはストーリーの第3の部分を忘れてしまいました。ビジネス上の利点(シリアライズ可能)をもたらさない実装の詳細もそこにあります。 私は、より良い物語は、 "私が在庫システムにリストを送ることができるように、製造注文番号とその注文の部品番号のリストを提出したいと思うユーザのようなものです"と言うでしょう。 –
この文脈ではSerializableは実装ではありません。これは、どのパートにシリアル番号が付いているかを示すドメイン用語ですので、(要件を理解する限り)重要です。 –
これが当てはまる場合は、あなたが正しいです。ドメイン専門知識はすべてです。 –