Page 109 - 4190
P. 109

чають, що вони рідше відчувають необхідність використовувати на-
            лагодження. Якщо деякі з тестів несподівано перестають проходити,
            повернення до останньої версії, яка проходить усі тести, може бути
            більш продуктивним, ніж налагодження.

                  Розробка через тестування пропонує більше, ніж просто перевір-
            ку  коректності,  вона  також  впливає  на  дизайн  програми.  Спочатку
            сфокусувавшись  на  тестах,  простіше  уявити,  яка  функціональність

            потрібна користувачеві. Таким чином, програміст продумає деталі ін-
            терфейсу  для  реалізації.  Тести  примушують  робити  свій  код  більш
            придатним для тестування. Наприклад, відмовлятися від глобальних
            змінних одиночок (singletons), робити класи менш зв’язаними і лег-

            кими для використання. Сильно зв’язаний код або код, який вимагає
            складної ініціалізації, буде складно перебудовувати. Модульне тесту-
            вання  сприяє  формуванню  чітких  і  невеликих  інтерфейсів.  Кожний

            клас буде виконувати певну роль, як правило, невелику. Як наслідок,
            залежності між класами будуть понижуватися, а зачеплення – збіль-
            шуватися. Контрактне програмування ( design by contract) доповнює

            тестування, формуючи необхідні вимоги через ствердження ( design
            by contract).
                  Хоча,  при розробленні через тестування необхідно написати зна-

            чну  довжину  коду,  загальний  час на  розроблення, виявляється  мен-
            шим.  Тести  захищають  від  помилок.  Тому  час,  що  витрачається  на
            налагодження, понижується багаторазово. Значна кількість тестів до-
            помагає  зменшити  кількість  помилок  у  коді.  Усунення  дефектів  на

            більш  ранньому  етапі  розроблення,  перешкоджає  появі  хронічних  і
            дорого вартісних помилок, що приводять  до тривалого і стомлюва-
            льного налагодження в подальшому.

                  Тести дозволяють проводити рефакторинг коду без ризику його
            зламати. При внесенні змін у добре протестований код, ризик появи
            нових помилок значно нижчий. Якщо нова функціональність приво-
            дить до помилок, тести, якщо вони звичайно є, відразу ж це покажуть.

            При роботі з кодом, на якому немає тестів, помилку можна виявити
            через певний час, коли з кодом працювати буде набагато складніше.
            Добре протестований код легко переносить рефакторинг. Впевненість

            у тому, що зміни не зламають існуючу функціональність, надає впев-
            неності програмістам і збільшує ефективність їх роботи. Якщо існую-
            чий код добре покритий тестами, то програмісти будуть почувати се-

            бе вільніше при внесенні архітектурних рішень, які повинні покращи-
            ти дизайн коду.

                                                             109
   104   105   106   107   108   109   110   111   112   113   114