Домашняя лаборатория мудрого KAA

Юнит-тесты - это боль?

Просмотров: 1504Комментарии: 6
Delphi

Если сравнивать информационную систему с человеческим телом, тесты - это нервная система. Тест, который завершился с ошибкой, - это боль, которую испытывает человек, если ранит свое тело.

Франкенштейн и монстр

Однако существует болезнь, которая делает людей невосприимчивыми к боли. Эта болезнь у человека называется “сенсорно-вегетативная невропатия IV типа”. В сериале “Доктор Хаус” есть серия, посвященная этому недугу. Люди, которые им страдают, должны регулярно осматривать себя на предмет травм и переломов. Но как быть нарушениями внутри тела? Если человек не чувствует боли, как он поймет, что у него лопнул аппендикс?

Наверное, вы уже понимаете, куда я клоню. Любая серьезная система должна иметь механизм контроля своего состояния. Особенно это касается динамически развивающихся систем.

Забавно, но можно сравнить информационную систему с чудовищем Франкенштейна (дальше по тексту Франки), а разработчика - с самим доктором. Разработчик берет куски кода, сшивает их вместе, и получается нечто новое, страшное, но по-своему красивое. Поначалу монстр не хочет оживать, потом ведет себя как ребенок, делает то, что нельзя и не так, как задумано. Но доктор вносит изменения в “конструкцию” и постепенно заставляет свое творение выполнять свою волю.

Итак, представим себе, что:

  • Информационная система - это монстр Франкенштейна, который не чувствует боли.
  • Разработчики - это сумасшедшие ученые и доктора, которые хотят сделать свое творение безупречным и постоянно изменяют и совершенствуют его.

    Вот один из докторов нашел в морге более сильные ноги для своего детища и решил, что нужно улучшить его. Доктора и ученые вместе посидели, подумали и решили, что красивые сильные ноги - это хорошо. Старые ноги отрезали и выкинули, а новые пришили. Вроде, все довольны и счастливы.

    Ноги в мусорной корзине

    После операции монстра выпустили погулять. С виду новые ноги отличные, девушки заглядываются, но как понять, что они работают не хуже тех, что были до них? Со старыми ногами Франки спокойно делал комплекс физических упражнений, пробегал 20 километров, прыгал в высоту на 2 метра и толкал ногами вес в 300 килограмм. Хорошо, что наши педантичные яйцеголовые ученые все записывали. Теперь остается только понять, смогут ли новые ноги сделать то же самое.

    Как вы думаете, новые ноги оказались лучше старых? Несмотря на свою красоту и силу, они потребляли слишком много крови, а сердце и кровеносная система были не приспособлены к таким нагрузкам. В итоге Франки очень быстро пробежал первую четверть дистанции, а потом потерял сознание, сердце его остановилось, и пришлось проводить комплекс реанимационных мероприятий. Причём это случалось регулярно.

    Выяснение подобных последствий и должно было стать целью тестирования. Когда вы улучшаете или изменяете свою систему, вы можете ее “убить”, а вместе с ней убить и свою репутацию.

    Сыграли в русскую рулетку. Получилось жёстко...

    А что тестировщики?

    Тестировщиков можно сравнить с парамедиками, которые осматривают пациента поверхностно, зачастую они не в состоянии увидеть и протестировать внутренние системные процессы. В нашем случае они попросили бы Франки пройтись, пробежаться, подвигать ногами лежа на спине или станцевать стриптиз, и он бы сделал все это превосходно. А вот влияние новых ног на организм в целом должно контролироваться специальной аппаратурой.

    По большому счету тестировщики должны проверять корректность работы бизнес-логики и пригодность системы со стороны пользователя. На этом этапе работа всех функций и методов уже должна быть проверена при помощи юнит-тестов.

    Появление технических ошибок на этом уровне - признак некачественных тестов.

    Если система не умеет тестировать себя сама, необходимо использовать внешнее тестирование, которое позволяет убедиться, что система делает все, как раньше.

    Если система не покрыта тестами, любое изменение - это игра в русскую рулетку.

    Вывод

    Перед изменением любого алгоритма необходимо создать тест, который сможет проверить корректность работы этого алгоритма. Только после этого можно вносить изменения, а затем проверять их корректность при помощи ранее написанных тестов.