Page 110 - 4190
P. 110
Розроблення через тестування сприяє більш модульному, гнуч-
кому коду і коду, який можна розширювати. Це пов’язано з тим, що
за такої методології програмісту необхідно думати про програму, як
про множину невеликих модулів, які написані та опротестовані неза-
лежно і лише потім з’єднані разом. Це приводить до менших, більш
спеціалізованих класів, зменшення зв’язаності і більш чистих інтер-
фейсів. Використання mock-об’єктів також вносить вклад у модуля-
ризацію коду, оскільки вимагає наявності простого механізму для пе-
реключення між mock- і звичайними класами.
Оскільки пишуть лише той код, який необхідний для проходжен-
ня тесту, автоматизовані тести покривають усі шляхи виконання. На-
приклад, перед використанням нового умовного оператора, програ-
міст повинен написати тест, що мотивує добавлення цього умовного
оператора. У результаті отримаємо при розроблення через тестування
тести достатньо повні. Вони виявляють будь-які непередбачені зміни
поведінки коду.
Тести можуть використовувати як документацію. Добрий код
розкаже про те, як він працює краще від будь-якої документації. До-
кументація і коментарі в коді можуть застаріти. Це може збивати з
толку програмістів, які вивчають код. А оскільки документація, на
відміну від тестів, не може сказати, що вона застаріла, такі ситуації,
коли документація не відповідає дійсності – не рідкість.
Недоліки розроблення через тестування
1. Головним недоліком TDD є те, що до нього важко звикнути.
2. Існують задачі, які неможливо (у крайньому випадку, на поточ-
ний момент) рішити тільки за допомогою тестів. Зокрема, TDD не до-
зволяє механічно продемонструвати адекватність розробленого коду
в області безпеки даних і взаємодії між процесами. Безумовно, безпе-
ка основана на коді, в якому не повинно бути дефектів, Але вона ос-
нована також на участі людини в процедурах захисту даних. Тонкі
проблеми, що виникають в області взаємодії між процесами, немож-
ливо з впевненістю відновити, просто запустивши деякий код.
3. Розроблення через тестування складно застосовувати в тих ви-
падках, коли для тестування необхідне проходження функціональних
тестів. Прикладами може бути: розроблення інтерфейсу користувача,
програм, що працюють з базами даних, а також того, що залежить від
специфічної конфігурації мережі. Розроблення через тестування не
передбачає великого обсягу роботи з тестування для таких прикла-
110