- Я говорю про одиничні тести в сенсі TDD. (Не автоматизована "інтеграція", або те, що ви хочете називати це тестами.)
- Старий код як у: (C ++) код без тестів. (див.: Майкл Пірс " Ефективна робота зі спадковим кодексом )"
- Але також застарілий код, як у: Код, з яким працює наша команда останні 10-5 років, тому ми дуже часто маємо досить гарне уявлення про те, куди подіти речі, щоб щось змінити.
- У нас є одиничні тести (через Boost.Test) для деяких модулів, які з’явились пізніше або були "природним" пристосуванням для тестових одиниць (звичайні контейнери, додатки для рядків, мережеві помічники тощо)
- Ми ще не маємо належних автоматизованих тестів на прийняття.
Зараз нещодавно мені випало задоволення реалізувати 3 нові функції, орієнтовані на користувачів.
Кожен з них зайняв у мене приблизно 1-2 години, щоб швидко пройти з кодовими частинами, які мені потрібно було змінити, 1-2 години, щоб реалізувати (маленький) код, який мені потрібно змінити, і ще 1-2 години, щоб переконатися, що додаток побіг правильно після цього і зробив, як це потрібно було зробити.
Тепер я дійсно додав мало коду. (Я думаю, що один метод і кілька ліній дзвінків для кожної функції.)
Розроблення цього коду (за допомогою будь-якого із методів, запропонованих у WEwLC ), так що одиничний тест мав би сенс (а не був повною тавтологією) легко зайняв би ще 2-4 години, якби не більше. Це додало б 50% -100% часу до кожної функції, без негайної вигоди, як
- Мені не потрібен був тестовий пристрій, щоб щось зрозуміти про код
- Тестування вручну - це та ж робота, яку мені ще потрібно перевірити, чи правильно інтегровано код у решту програми.
Зрозуміло, якщо пізніше "хтось" прийшов і торкнувся цього коду, він теоретично міг би мати певну користь від цього тестового одиниці. (Тільки теоретично, як цей тестований острів коду жив би в океані неперевіреного коду.)
Отже, "цього разу" я вирішив не робити важкої роботи над додаванням одиничного тесту: Зміни коду для отримання цих тестів були б значно складнішими, ніж зміни коду для правильної (та чистої) реалізації функції.
Це щось типове для сильно пов'язаного застарілого коду? Я лінивий / чи ми встановлюємо неправильні пріоритети як команда? Або я розсудливий, лише тестую речі, коли накладні витрати не надто великі?