TDD не працює


TDD не працює.
Правда? Дивно. У мене завжди працював добре.
А ось нове дослідження говорить про зворотне.
Нове дослідження?
Так, глуобокое дослідження, повторюючи кроки іншого дослідження, проведеного кілька років тому. Обидва показали, що TDD не працює. Нове дослідження проходило в декількох місцях, використовувало сліпий аналіз. Виглядає переконливо.
Автори вважають його переконливим?
Автори рекомендують проводити нові дослідження. Але вони швидше за все просто скромничає. Результати досить переконливі.
Які результати?
Дослідження показує, що твердження про TDD – брехня. TDD не збільшує швидкість розробки. Не зменшує кількість дефектів. Не допомагає писати більш якісний код.
Дуже дивно. Мені здається, що TDD збільшує мою швидкість, покращує мій код і точність. Я знаю інших людей, які погодяться зі мною. Для мене дивно, що дослідження прийшли до іншого висновку.
Ну, тим не менш. DHH був прав. TDD is Dead.
Хмм. Добре, так що саме зробили автори дослідження? Як вони прийшли до такого висновку?
Я не знаю. Я знаю тільки, що було дослідження.
Як ти дізнався про це дослідження?
Я прочитав про нього блог. В кінці автор сказав, що воно змусило його переосмислити TDD. Він вважав, що TDD працював.
Що ж, добре, давай подивимося на це дослідження. Хмм… Так, тут говориться, що вони порівнювали TDD з TLD.
Що таке TLD?
Test LAST development. Це коли ти пишеш юніт-тести післянаписання коду.
Ну ось! Дослідження показало, що краще писати тести в самому кінці!
Хмм. Ні, здається, це зовсім не те, що показало дослідження. Взагалі-то воно показало, що немає суттєвої різниці.
Ну добре. Тобто якщо я пишу код, а потім пишу тести, то це не гірше, ніж TDD.
Ну, не зовсім. У всякому разі це не те, про що говорить дослідження. У його ході прихильників TLD просили працювати "невеликими шматками".
Невеликими шматками?
Так. Прихильники TLD писали трохи продакшн-коду, а потім трохи тестів.
Ага, зрозумів. Тобто вони писали продакшн-код 10 хвилин, а потім 10 хвилин писали тести, або щось в цьому роді.
Ну, можливо. Але, дивись, тут говориться, що всі учасники мали TDD-підготовку. А потім деякі з них просили робити TLD маленькими шматками.
Ага. ОК. Ну, моє твердження все ще вірно. Вони писали продакшн-код, потім писали юніт-тести. І це ні на що не вплинуло.
Дозволь задати питання: як би ти писав юніт-тести після продакшн-коду, але невеликими шматками.
Я б написав трохи продакшн-коду – достатньо, щоб пройти кілька тестів, а потім би написав ці тести.
Як би ти зрозумів, скільки коду потрібно для задоволення пари тестів?
Я би представив кілька тестів, а потім написав би задовольняє їх код. Потім написав тести.
У тебе є навички TDD; такий стиль мислення був би очевидним для тебе, правда?
Мм… Хмм… Здається, я зрозумів, про що ти. TLD'шники просто робили TDD в голові, а потім реализоывали все в зворотному порядку.
Правильно. Щоб працювати невеликими шматками, їм потрібно було представити тести заздалегідь. Щоб можна було написати піддається тестуванню продакшн-код.
Може бути це дослідження не досліджувала те, що було задумано.
Мені здається вони намагалися дослідити порядок написання тестів, а не сам процес TDD. У спробах зменшити кількість змінних, вони позбавилися від них усіх. Вони змусили TLD-учасників процесTDD короткими циклами. І це змусило учасників працювати над кодом і думати про тестах заздалегідь.
ОК. Може бути. Але все ж ці TLD'шники писали тести в кінці. Тести показали як мінімум те, що не потрібно обов'язково писати тести спочатку – як мінімум якщо робота проходити короткими циклами.
Звичайно. Ефективність TDD залежить від розміру циклу, і меншою мірою від першочерговості тестів. Ми пишемо тести заздалегідь, тому що це підштовхує до скорочення довжини циклів.
тобто це дослідження показало, що люди, які працюють короткими циклами, можуть не хвилюватися про написання тестів заздалегідь. Головне продовжувати працювати короткими циклами.
Схоже на справедливий висновок. Але, поглянь сюди. Учасники працювали над проблемою The Bowling Game. Це дуже маленька завдання. Вони сказали, що на все про все їм знадобилося всього три години.
Це важливо?
Звичайно. Користь у написанні тестів заздалегідь дисципліна. Написання тестів заздалегідь не дає циклу розростатися. Зберігає високу ступінь покриття протягом тривалих періодів часу.
Так, але якщо у тебе досить дисципліни щоб зберігати цикли короткими, то, згідно з дослідженням, без різниці коли писати тести.
Так, але це більше "якщо". Дослідження показує, що якщо взяти групу людей, що мають підготовку в TDD, і сказати їм все робити, в тому числі зберегти цикли розробки, і лише змінити порядок написання тестів, то за три години програмування неможливо помітити ніякої різниці.
Ага. Ага. Дослідження показує саме це.
Так що в реальності дослідження робило відмінність без відмінності.
Ну… Хе-хе, вони не виявили відмінностей, так що, мабуть, так.
тобто дослідження не показало, що TDD не працює, правда?
Ні, мабуть, не показало.
Що ж воно показало?
Думаю, воно показало, що не можна інтерпретувати висновки досліджень прочитання досліджень.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.