ベイジアン分類器がスパムをフィルタリングする効果的な方法であることはよく知られています。これらはかなり簡潔にできますが (私たちのものは数百の LoC にすぎません)、結果を得る前にすべてのコア コードを事前に記述する必要があります。
ただし、TDD アプローチでは、テストに合格するための最小限のコードしか記述できないことが義務付けられているため、次のメソッド シグネチャが与えられます。
bool IsSpam(string text)
次のテキスト文字列は、明らかにスパムです。
"Cheap generic viagra"
私が書くことができるコードの最小量は次のとおりです。
bool IsSpam(string text)
{
return text == "Cheap generic viagra"
}
ここで、別のテスト メッセージを追加するかもしれません。
"Online viagra pharmacy"
コードを次のように変更できます。
bool IsSpam(string text)
{
return text.Contains("viagra");
}
...などなど。ある時点までは、コードは文字列チェックや正規表現などでごちゃごちゃになってしまいます。最初から考えたり、別の方法で書いたりするのではなく、コードを進化させたからです。
では、可能な限り単純なコードからコードを進化させてテストに合格することが適切なアプローチではない、このような状況で TDD はどのように機能するのでしょうか? (特に、最良の実装を自明に進化させることができないことが事前にわかっている場合)。