Page 109 - 4190
P. 109
чають, що вони рідше відчувають необхідність використовувати на-
лагодження. Якщо деякі з тестів несподівано перестають проходити,
повернення до останньої версії, яка проходить усі тести, може бути
більш продуктивним, ніж налагодження.
Розробка через тестування пропонує більше, ніж просто перевір-
ку коректності, вона також впливає на дизайн програми. Спочатку
сфокусувавшись на тестах, простіше уявити, яка функціональність
потрібна користувачеві. Таким чином, програміст продумає деталі ін-
терфейсу для реалізації. Тести примушують робити свій код більш
придатним для тестування. Наприклад, відмовлятися від глобальних
змінних одиночок (singletons), робити класи менш зв’язаними і лег-
кими для використання. Сильно зв’язаний код або код, який вимагає
складної ініціалізації, буде складно перебудовувати. Модульне тесту-
вання сприяє формуванню чітких і невеликих інтерфейсів. Кожний
клас буде виконувати певну роль, як правило, невелику. Як наслідок,
залежності між класами будуть понижуватися, а зачеплення – збіль-
шуватися. Контрактне програмування ( design by contract) доповнює
тестування, формуючи необхідні вимоги через ствердження ( design
by contract).
Хоча, при розробленні через тестування необхідно написати зна-
чну довжину коду, загальний час на розроблення, виявляється мен-
шим. Тести захищають від помилок. Тому час, що витрачається на
налагодження, понижується багаторазово. Значна кількість тестів до-
помагає зменшити кількість помилок у коді. Усунення дефектів на
більш ранньому етапі розроблення, перешкоджає появі хронічних і
дорого вартісних помилок, що приводять до тривалого і стомлюва-
льного налагодження в подальшому.
Тести дозволяють проводити рефакторинг коду без ризику його
зламати. При внесенні змін у добре протестований код, ризик появи
нових помилок значно нижчий. Якщо нова функціональність приво-
дить до помилок, тести, якщо вони звичайно є, відразу ж це покажуть.
При роботі з кодом, на якому немає тестів, помилку можна виявити
через певний час, коли з кодом працювати буде набагато складніше.
Добре протестований код легко переносить рефакторинг. Впевненість
у тому, що зміни не зламають існуючу функціональність, надає впев-
неності програмістам і збільшує ефективність їх роботи. Якщо існую-
чий код добре покритий тестами, то програмісти будуть почувати се-
бе вільніше при внесенні архітектурних рішень, які повинні покращи-
ти дизайн коду.
109