Спритний без одиничних тестів


27

Чи має сенс говорити про "спритний розвиток" або стверджувати, що ви застосовуєте "спритну методологію", якщо база коду, над якою ви працюєте, має 0% тестового покриття? (І ви, як команда, нічого не робите з цього приводу).

Щоб було зрозуміло: для мене це не має сенсу. На моєму особистому досвіді я виявив, що одиничні тести - це єдиний інструмент, який дозволяє реально бути "спритними" (тобто реагувати на зміни, вдосконалювати дизайн, ділитися знаннями тощо), а TDD - це єдина практика, яка веде вас туди .

Можливо, є якісь інші способи, але я все ще не бачу, як вони можуть працювати.


14
Agile має набагато більший шанс досягти успіху за допомогою автоматизованого тестування. Мене раніше змушують застосовувати Agile без тестів, і це пастка. Це просто зручний спосіб накопичити технічний борг швидше, ніж раніше.
MetaFight

5
TDD не обов'язково є єдиною практикою, яка веде вас туди. Це звичайне, хоча. Особисто я вважаю BDD більш прагматичним підходом.
MetaFight

6
"Agile має набагато більший шанс досягти успіху за допомогою автоматизованого тестування для резервного копіювання": так це роблять не спритні проекти. Я думаю, що автоматичне тестування є доволі ортогональним до використовуваної методології: це робить вас впевненішими, що ваш код правильний, і допомагає вам утримувати його в чистоті.
Джорджо

До речі, це питання змішало тестовий блок і TDD, ви можете провести одиничний тест без TDD.
Вальфрат

Читаючи відповіді тут, я здивований, як багато чого змінилося, коли я навчився спритно в середині 00-х. TDD та парне програмування вважалися ОСНОВНИми гнучкими методами підтримки високої якості кодом у високому темпі.
номен

Відповіді:


37

Щоб бути педантичним, ніщо в Agile Manifesto або Посібнику з Scrum взагалі не посилається на технічні практики, такі як тестування блоків або TDD. Так, так, теоретично ви могли б поставити рано і часто, зосереджуючись на співпраці та вартості без них і називати себе Agile, ви навіть можете насправді спритність .

Однак на практиці майже неможливо послідовно поставляти вартість ( у виробництво ) кожні кілька тижнів без гарного набору тестів. Сюди входять інтеграційні тести, а також одиничні тести. Одиночні випробування йдуть лише поки. Є причина, що це піраміда, а не прямокутник.

Без тестів, як мереж безпеки, ви або вводите багато регресійних помилок у кожному випуску, або будете боятися рефакторингу. І те, і інше буде сильно впливати на вашу здатність продовжувати працювати стійкими темпами. Якщо ви не можете витримати свій темп або змінити курс (перепроектувати), коли це потрібно, то у вас немає спритності. Адже спритність - це мета, до якої ми прагнемо.


Чи потрібно дотримуватися Agile Manifesto, щоб бути спритним?
JeffO

Ні @JeffO Ви цього не робите, але це, безумовно, допомагає. Я відредагував, щоб уточнити свій намір.
RubberDuck

1
ІМО найбільш спритні програмісти - це ті, хто дуже прагматичний, хоча вони ніколи не чули про маневрений рухливість.
Джорджіо

1
Я не можу погодитися з вами там @Giorgio. Я був у спритній команді років, перш ніж хтось із нас коли-небудь чув про Agile.
RubberDuck

2
@CortAmmon - Якщо ви хочете визначити Agile (великий "A" спритний як у вашій методології), я погодився б з вами, але якщо ви хочете бути спритними (мало "a", як насправді бути спритними, щоб ви могли впоратися зі змінами краще ), тоді вам взагалі не потрібно дотримуватися певної методології. Якщо ви можете зробити водоспад і все-таки впоратися зі змінами (важко, але не неможливо), кого це хвилює?
JeffO

30

Швидкий маніфест просто говорить:

Індивіди та взаємодія над процесами та інструментами

Працює програмне забезпечення над всеосяжною документацією

Співпраця з клієнтами щодо укладання договорів

Відповідаючи на зміни протягом наступного плану

Ніяких згадок про одиничні тести там немає. Навіть 12 принципів не згадують про тестування.

Отже, технічно можна бути спритною командою без написання одиничних тестів. На практиці, однак, важко зрозуміти, як команда може підтримувати робоче програмне забезпечення у спритному середовищі без тестів, щоб допомогти їм у постійних змінах.


4
Важко зрозуміти, як команда може підтримувати робоче програмне забезпечення в будь-якому середовищі без тестів.
Брайан Оуклі

6
Тільки тому, що щось важко помітити, це не робить неможливим
Ampt

8

Незважаючи на те, що немає прямого слова, що говорить про тестування одиниць, TDD або будь-який тест в маніфесті Agile, як відповіли інші, я вважаю, що хороший майстер Scrum або розробник зміг би розрізнити одне із тверджень у маніфесті.

Працює програмне забезпечення  над всеосяжною документацією.

Як би хтось знав, чи працює програмне забезпечення? У маніфесті не слід чітко вказувати термін тестування. Це лаконічно.

Тестування одиниць (у контексті теми) зробить вашу фазу кодування повільною на ранній стадії, але вона буде вартий того, як ви прогресуєте, зробивши розвиток набагато швидшим. Це дає вам тонкий контроль зерна під час тестування рівня коду, а також робить ваш дизайн масштабованим, що дає вам впевненість у тому, що ваше програмне забезпечення працює і може легко впоратися з регресією; до якого зробить ваш розвиток спритним.


3
Ви можете перевірити це вручну. Для цього вам не потрібні одиничні тести. Вони допомагають. БАГАТО. Вони схожі на головне, що може покращити процес. Але вони аж ніяк не важливі для забезпечення програмного забезпечення.
Т. Сар - Відновлення Моніки

Так, звісно. Я не сказав, що ви не можете це зробити вручну. Я сказала будь-який тест. Я не заявляв жодної форми незгоди на тестуванні. Що ж стосується вашого ручного тестування, то, як ви можете продовжувати бути гнучким, коли ви стикаєтесь з регресіями, справа залежить від вашого погляду на те, як ви можете продовжувати бути спритними.
Аксель

Я розумію вашу точку зору. Однак питання задається про одиничні тести в спеціальних, не зовсім тестах загалом. Читання вашої відповіді в контексті питання змушує розглянути ваше тестування як "одиничне тестування"!
Т. Сар - Відновлення Моніки

Там, вибачте за це.
Аксель

2
@ThalesPereira, юніт тест , який говорить вам , є зміна , яке ви зробили сорок секунд тому зламав що - то набагато більш гнучким , ніж звіту ви отримаєте назад з відділу QA говорить вам , що що - то хто - то змінилося за три дні тому зламав його.
Соломон повільно

2

Це абсолютно має сенс. Agile - це не тестування, як уже згадували інші, а конкретно відповідь на ваше запитання:

Ні, вам взагалі не потрібно тестування.

Ви можете запустити спритний процес лише з інтеграційним тестуванням. Ви можете запускати щомісяця тест автоматизованої інтеграції, наприклад, виправляти помилки, які знайдете наступного дня. Ви можете мати ручний тестер, який постійно виконує інтеграційні тести, якщо хочете. Незалежно від системи, тестування приладів є абсолютно необов’язковим.

Можливо, ви знайдете тестування одиниць, яке допоможе вам розвинутись, і досить справедливо до цього, але є багато речей, які можуть допомогти розробці, якої у вас може не бути.

Вам потрібна певна форма тестування, навіть якщо це старі "бета-тестери" клієнтів. Якщо ваш клієнт сильно задіяний у процесі і не проти знайти помилок, то це може спрацювати - оскільки вони, як правило, знаходять помилки, про які ще ніхто не думав, що були помилками!


Ви можете запустити спритний процес лише з інтеграційним тестуванням. Це теоретично чи говориться з досвіду?
R Sahu

1

Це не потрібно. Тестування чудово, коли у вас є люди, які дійсно знають, як ним користуватися. Коли ви цього не зробите, це не тільки не потрібно, це стає відповідальністю. Я б сказав, що є багато програмістів, які не дуже кваліфіковані в цьому.

Я радий, що у вашому питанні ви визнали, що спритність - це те, як ви насправді випускаєте програмне забезпечення, а не дотримуєтесь певної методології. Agile Manifesto - це приємна довідка, але це не остаточне керівництво. Agile існував і до цього. Існують способи розробки програмного забезпечення, щоб бути "більш спритним", але різні комбінації можна використовувати в різних проектах.

Якщо ви випускаєте нове програмне забезпечення у темпі, прийнятному для клієнта, ви, ймовірно, спритні. Я б також включав не надто багато відштовхування та скарги на зміни функцій розробниками. Виправлення однієї речі лише для того, щоб зламати інше, теж не є ідеальним. Коли у вас декілька версій у оновленнях, ви, мабуть, не дуже спритні, випробовуєте чи ні.


1

Я хотів би протиставити аргументацію (інші відповіді), що маніфест Agile чітко говорить про це, а саме:

Постійна увага до технічної досконалості та гарного дизайну підвищує спритність.

Мені дуже подобається визначення LeSS технічної досконалості, і воно включає тестування одиниць та TDD. Тепер ви можете стверджувати, що для цього вам можуть не знадобитися одиничні тести та TDD, але це найпоширеніший і, мабуть, радний спосіб.

Організаційна спритність обмежена технічною спритністю

Іншими словами, коли ви повільно вносите зміни до свого продукту, то не має значення, як ви структуруєте свої команди, свою організацію чи які рамки ви приймаєте, ви будете повільно реагувати на зміни.

Якщо ви можете запобігти протистоянню змінам свого продукту іншим способом, ви можете стати на правильному шляху, але:

Я винайшов Екстремальне програмування, щоб зробити світ безпечним для програмістів. - Кент Бек

Scrum бракує будь-яких технічних практик, але Джефф сказав про це наступне:

Я ніколи не бачив надвиробничої команди Scrum, яка не використовувала практику розробки Extreme Programming. - Джефф Сазерленд

Цитується з цієї статті: http://ronjeffries.com/articles/017-02ff/gathering2017/

Я б очікував, що команди Scrum без технічної практики зрештою, використовуючи ретроспективи, придумують подібну практику. Ви також хочете бути гіперпродуктивними, чи не так?

Модель Agile fluence згадує її на рівні двох зірок:

Корисні методи включають постійну інтеграцію, тестовий розвиток , програмування пар та колективну власність.

Якщо ви орієнтуєтесь лише на перший рівень Agile fluency, ви можете пропустити практику, але будь-який більший і триваліший продукт повинен як мінімум намагатися досягти рівня двох зірок.

Таким чином, загальний консенсус полягає в тому, що так, не маючи належних тестових одиниць, чистого коду та рефакторних практик, наразі неможливо бути по-справжньому спритним. Це може змінитися в майбутньому, коли з’являться нові технічні практики.

Як ви думаєте, що відповідь буде, якщо ми запитаємо деяких підписантів маніфесту, як Роберт К. Мартін, Мартін Фаулер чи Кент Бек? Можливо, вони скажуть, що це залежить, але, як правило, це потрібно зробити.


1
насправді, це не обов'язково "тест одиниці", ви можете просто провести інтеграційний тест і вважати, що цього достатньо. Однак якщо у вас нічого немає і все випробовуєте вручну, ви, швидше за все, повільно швидко відреагуєте на зміну або на регулярній основі доставите досить багато регресу.
Вальфрат

2
Технічно погоджено, що це не так, але тести на більш високих рівнях часто більш крихкі, складніші в обслуговуванні і, ймовірно, сповільнюють вас у підсумку, якщо вам доведеться їх багато. Мені подобається, як це стверджує Мартін Фаулер: "Якщо ви отримали збій у тесті високого рівня, у вас не просто помилка у вашому функціональному коді, у вас також відсутня або неправильна одинична перевірка". від martinfowler.com/bliki/TestPyramid.html
Niels van Reijmersdal

Тест на вищому рівні не випробовує однакових речей, тому ви пропускаєте дірки, але вважаєте, що наразі ризик досить вартий. Для деяких веб-сайтів, яких може бути достатньо, для критичної фінціальної системи -> ніяк.
Вальфрат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.