воскресенье, 15 августа 2010 г.

Стоимость тестирования


О том, что автоматизированное тестирование является важной составляющей процесса разработки программного обеспечения, написано во многих книгах. Вот некоторые свойства тестов, которые помогают нам:

• Скорость выполнения. Автоматизированные тесты выполняются значительно быстрее, чем ручные.
• Быстрое повторное выполнение. Ничто не мешает нам выполнять тесты несколько раз к ряду, если это необходимо.
• Локализация дефектов. Тесты показывают не только наличие дефекта, но и его расположение в коде.
• Тест как документация. Тесты помогают лучше понять код, предоставляя примеры его использования. Новые разработчики могут быстрее втянуться в разработку.
• Тест как страховочная сеть. Мы можем выполнять модификацию кода, без страха сломать работу существующего функционала (быстрое регрессионное тестирование).
• Отсутствие забытых проверок. Однажды добавленный тест не будет забыт, как это часто бывает при ручном тестировании.
• Навязывание дизайна. Внедрение тестов в процесс разработки навязывает нам design for testability, т.е. методы написания кода, который легок не только для тестирования, но и переиспользования, отладки и понимания. Такой код обладает низким связыванием и высоким сцеплением.

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

На самом деле, у меня нет доказательств того, что тесты могут сделать разработку продуктов дешевле. У меня есть лишь гипотеза. Не доказанная, не опровергнутая, но мой личный опыт подсказывает её истинность. Для того чтобы понять, почему тесты делают проект дешевле, а если быть точнее, почему они сокращают время разработки, следует рассмотреть стадии, через которые проходит практически каждый проект:

1. Кодирование функционала.
2. Поиск и устранение дефектов.
3. Добавление нового функционала в существующий код (модернизация, в соответствии с новыми требованиями).

В проекте без автоматизированного тестирование большая часть времени уходит на пункты 2 и 3.



Но если в проект добавить тесты, то на основании их вышеперечисленных особенностей, можно предполагать следующее перераспределение времени:



Стадия кодирования будет увеличена, за счет необходимости написания автоматизированных тестов. Время поиска и устранения ошибок серьезно сократится, так же как и время модернизации, хотя последнее требует изменения кода вместе с тестами. Причина тому - более управляемый и легкий в понимании код, навязанный через design for testability.

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

Ну, я вам желаю легкого тестирования и качественного кода!

Комментариев нет:

Отправить комментарий