Здравствуйте, landerhigh, Вы писали:
L>Здравствуйте, _hum_, Вы писали:
__>>ну, то есть, у меня вырисовывается картина, что тесты могут избавить от дебагинга в случае, когда
__>>- покрывают код настолько плотно, что юниты получаются очень простыми, а поэтому могут быть проанализированы на предмент ошибки и без дебагинга
L>Совершенно верно.
__>>- тесты настолько специфичные, что по срабатыванию сразу можно сказать, где кроется ошибка в юните
L>Совершенно верно.
спасибо. тогда подход понятен.
__>>только вот, действительно, я не верю, чтобы в концептуально и алгоритмически сложной системе это было возможно.
L>С вопросами веры в другой форум. Код обязан быть простым вне зависимости от сложности системы. Сложный для понимания и тестирования код даже специальное название имеет. Говнокод.
это понятно. вот только декомпозиция для тестирования и для написания кода могут противоречить друг другу (иногда даже большую функцию сложно разбить на подфункции из-за отсутствия подходящих самостоятельных концептов для этих фрагментов).
__>>да и перерасход мысли программиста на создание тестов (а в примере с транспонированием матрицы ваши тесты во много раз по объему и затратам на придумывание превосходят саму реализацию транспонирования) не факт, что окупится.
L>А вот это уже пример так называемого вранья.
L>Есть такое правило — If it worth doing, it worth testing. If it not worth testing, why bother doing it in the first place?
это не совсем верно. ведь на деле исходят из соотношения — прибыль от достижения цели/затраты. и в ряде случаев тестируемый код может оказаться намного более затратным, чем прибыль (например,глупо писать тесты для демонстрационного hello world)
L>Ну и не стоит забывать о такой детали, как "перерасход" мысли всех програмистов, когда из продакшена приходит креш дамп с чертовщиной, которой не может быть никогда, и который после двух недель курения отладчика сведется к инвертированному булевскому условию где-то очень глубоко в недрах программы, который простейший тест отловил бы полгода назад за две миллисекунды.
только в случае, если
1) тесты очень локализирующие;
2) тесты гарантированно ловят все ошибки, что, по-моему, нереально (даже для случая сложения двух чисел невозможно проверить безошибочность работы на всех вариантах входных данных, что уж говорить о более сложных функциях)