Не було жодного тестового процесу розробки під час розробки через дуже жорсткі терміни
Це твердження дуже хвилює. Не тому, що це означає, що ви розробили без TDD або тому, що не протестуєте все. Це стосується, адже це показує, що ви думаєте, що TDD сповільнить вас і змусить пропустити термін.
Поки ви бачите це таким чином, ви не готові до TDD. TDD - це не те, до чого можна поступово полегшувати. Ви або знаєте, як це зробити, або не знаєте. Якщо ви спробуєте це зробити на півдорозі, ви збираєтеся це зробити і ви самі виглядаєте погано.
TDD - це те, що слід спочатку практикувати вдома. Навчіться це робити, адже це допомагає вам кодувати зараз . Не тому, що хтось сказав вам це зробити. Не тому, що це допоможе, коли ви внесете зміни пізніше. Коли це стає чимось ти робиш, тому що ти поспішаєш, то ти готовий це зробити професійно.
TDD - це те, що ви можете зробити в будь-якому магазині. Вам навіть не потрібно вводити тестовий код. Ви можете тримати це при собі, якщо інші зневажають тести. Якщо ви зробите це правильно, тести пришвидшують ваш розвиток, навіть якщо ніхто інший не виконує їх.
З іншого боку, якщо інші люблять і запускають ваші тести, ви все одно майте на увазі, що навіть у магазині TDD не ваша робота перевіряти тести. Це створити перевірений робочий код виробництва. Якщо це трапляється перевірити, акуратно.
Якщо ви думаєте, що керівництво має повірити в TDD або що ваші колеги-кодери повинні підтримувати ваші тести, то ви ігноруєте найкраще, що TDD робить для вас. Це швидко показує вам різницю між тим, що, на вашу думку, робить ваш код, і тим, що він насправді робить.
Якщо ви не бачите, як це самостійно може допомогти вам швидше дотриматись терміну, тоді ви не готові до TDD на роботі. Тренуватися потрібно вдома.
З цього приводу, що приємно, коли команда може використовувати ваші тести, щоб допомогти їм прочитати ваш виробничий код і коли керівництво придбає нові пікантні інструменти TDD.
Чи є гарною ідеєю написати всі можливі тестові випадки після перетворення команди на TDD?
Незалежно від того, чим займається команда, не завжди є гарною ідеєю написати всі можливі тестові приклади. Напишіть найкорисніші тестові приклади. 100% покриття коду йде за вартістю. Не ігноруйте закон зменшення прибутку лише тому, що зробити виклик судового рішення важко.
Збережіть енергію тестування на цікаву логіку бізнесу. Те, що приймає рішення та виконує політику. Перевірте чорт із цього. Нудний очевидний легко читається структурний клей-код, який просто з'єднує речі, не потребує тестування майже так само погано.
(1) Чи все-таки добре, чи гарна ідея зупинити більшу частину розробки та почати писати цілі можливі тестові приклади з самого початку, хоча все працює повністю ОКАЙ (поки що!)? Або
Ні. Це "ми зробимо повне перезапис" мислення. Це знищує важко здобуті знання. Не вимагайте в керівництва часу, щоб написати тести. Просто пишіть тести. Як тільки ви дізнаєтеся, чим займаєтесь, тести не сповільнить вас.
(2) краще почекати, коли трапиться щось погане, а потім під час виправлення написати нові тести одиниці, або
(3) навіть забути про попередні коди та просто написати одиничні тести лише для нових кодів і відкласти все на наступний великий рефактор.
Я відповім 2 і 3 так само. Коли ви змінюєте код, з будь-якої причини, це дійсно приємно, якщо ви можете пройти тест. Якщо код є застарілим, він зараз не вітає тест. Що означає, що важко перевірити його, перш ніж змінювати. Ну, оскільки ви все одно змінюєте його, ви можете змінити його на щось тестоване і протестувати.
Це ядерний варіант. Це ризиковано. Ви вносите зміни без тестів. Існує кілька творчих хитрощів, щоб поставити попередній код перед тестом, перш ніж його змінити. Ви шукаєте, як називаються шви, які дозволяють змінити поведінку коду без зміни коду. Ви змінюєте конфігураційні файли, створюєте файли, що б не було потрібно.
Майкл Пірс подарував нам книгу про це: Ефективна робота зі спадковим кодексом . Прочитайте, і ви побачите, що вам не потрібно спалювати все старе, щоб зробити щось нове.