Re[11]: Тесты
От: . Великобритания  
Дата: 11.09.13 19:16
Оценка:
Здравствуйте, Sinix, Вы писали:

S>В реальном бизнес-коде польза от тотального покрытия ещё меньше — самые гадкие ошибки возникают при дичайшем стечении обстоятельств, которое в тестах воспроизвести нереально.

S>Из практики — надёжно работают только ассерты, да и то не всегда. Самый простой пример:
S>
S>    static double Sample(double a, double b, double c)
S>    {
S>        if (a > 1) a = 1;
S>        if (b <= 1) b = 1;

S>        Code.AssertState(a != b, "Some detailed message");
S>        return c / (a - b);
S>    }
S>

S>a, b и c считаются в независимых частях кода, каждая часть — примерно 50-100 строк оттестированного кода с подборкой коэффициентов из кучи шкал. Все мыслимые тесты зелёные, интеграционные — тоже (a != b). Благодаря ассерту всё-таки нашлась ошибка, но уже у клиента.
Что-то это меня тоже не убеждает, скорее наоборот, подтверждает значительность первой буковки D в аббревиатуре TDD. Если пишешь X / Y нужно задуматься, а что будет если Y==0... это один из классических крайних случаев, первый кандидат в юнит-тесты. Притом, раз уж ты догадался ассерт вставить, то лучше вместо ассерта уж лучше придумать такой юнит-тест, который воспроизведёт ситуацию. И в этом юнит-тесте будет сразу видно какая конкретная бизнес-ситуация соответствует этому странному стечению обстоятельств, что тоже поможет найти ошибку, но не у клиента, а на этапе написания кода, ещё до публикации коммитов.
А если получается так, что сложно воспроизвести эту ситуацию из-за кучи шкал и прочих "независимых" (хе-хе) частей кода, значит код говно и надо рефакторить этот юнит-переросток, разбивая его на проще тестируемые мелкие юниты.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.