Хорошо известно, что байесовские классификаторы являются эффективным способом фильтрации спама. Они могут быть довольно краткими (наш только несколько сотен 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 должен работать с ситуацией такого типа, когда эволюция кода из самого простого кода для прохождения теста не является правильным подходом? (В частности, если заранее известно, что лучшие реализации не могут быть тривиально разработаны).