Трохи більше року тому мені пощастило взяти 9-місячну перерву в роботі. Я вирішив, що в цей час я відточу свої навички C #. Я почав працювати над купою проектів і змусив наслідувати TDD.
Це був досить просвітницький процес.
Спочатку було важко, але з часом я навчився писати більш тестовий код (який, як виявляється, має тенденцію бути більше ТВОРНОГО коду), і в ході цього процесу я також посилив свої навички дизайну OO.
Зараз я знову в складі робочої сили і помічаю щось дивне.
Я вважаю за краще не слідкувати за TDD.
Я знаходжу, що TDD уповільнює мене і фактично ускладнює розробку чистого додатка.
Натомість я застосував трохи (масово) інший підхід:
- Виберіть вертикальний шматочок роботи
- Розробити функціонуючий прототип
- Рефактор, поки все добре і охайно
- Нехай оцінять прекрасний ТВЕРДИЙ і тестуваний код, який я написав.
Можливо, ви помітили, що крок 1 не "визначає публічну поверхню моєї тестової цілі", а крок 2 не "випробовує бейзус із зазначеної публічної поверхні". Можливо, ви також помітили, що жоден з кроків не включає тестування. Я пишу тестовий код, але не перевіряю його ... поки що.
Тепер я хотів би дати зрозуміти, що насправді я не проходжу жодного виду тестування. Код, який я пишу, працює . Це працює, тому що я тестую його вручну.
Я також хотів би дати зрозуміти, що я також не передую всім автоматизованим тестуванням. Тут мій процес відрізняється. І саме тому я задаю це питання.
TDD в теорії. Не на практиці.
У мене процес трохи розвинувся, і я досяг балансу між TDD і відсутністю тестів, які я вважаю дуже продуктивними, а також досить безпечними. Виходить так:
- Виконайте робочий вертикальний фрагмент роботи, маючи на увазі тестування, але не пишіть жодних тестів.
- Якщо на дорозі (наприклад, через місяць), цей фрагмент потребує модифікації
- Напишіть одиничні тести, інтеграційні тести, тести поведінки тощо, які гарантують правильність роботи
- Змініть код
- Якщо цей фрагмент не потребує модифікації,
- Нічого не робити
Просто переклавши тягар написання тестів з перед написанням коду на до зміни коду, я зміг створити набагато більше робочого коду. І коли я займаюсь написанням тестів, я пишу їх набагато менше, але покриваю майже стільки ж (більша рентабельність).
Мені подобається цей процес, але я переживаю, що він може не мати масштабів. Його успіх залежить від того, щоб розробники старанно писали тести до того, як вони змінили. І це здається досить великим ризиком. Але TDD має такий самий ризик.
Отож, я збираюся в пекло [BT] DD, чи це звичайна форма прагматичного кодування та тестування?
Я хотів би продовжувати працювати таким чином. Що я можу зробити, щоб цей процес працював у довгостроковій перспективі?
Примітка:Я є єдиним розробником своїх проектів і відповідаю за все: збір вимог, дизайн, архітектура, тестування, розгортання тощо. Я підозрюю, що саме тому мій процес працює.
If that slice doesn't need modification
. lizkeogh.com/2012/06/24/beyond-test-driven-development