Ми витрачаємо більше часу на тестування функціоналу, ніж на реалізацію самої системи, це нормально?


12

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

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

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

Отже, яка цінність у витрачанні більше часу на написання функціонального тесту, ніж на написання системного коду, тестування блоку та виправлення QA-тикетів? Це нормально? Чи не слід ми писати функціональні тести лише для критичних функцій і не дозволяти QA робити тести регресії за відсутністю критичних функцій?

Примітка: ми не розробляємо медичне програмне забезпечення або програмне забезпечення NASA або нічого такого, що є критичним.


14
У нас немає тестів. Ми витрачаємо величезну кількість часу на виправлення речей після факту. "Ви можете мені заплатити зараз, або ви можете пізніше заплатити мені". Це пізніше і не дуже.
MetalMikester

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


Відповіді:


16

Функціональні тести дуже важливі. Так, для написання потрібен час, але якщо ви пишете правильні функціональні тести, вони будуть більш ніж варті.

Існує кілька вагомих причин робити автоматизовані функціональні тести на програму.

  • Коли на ваш веб-сайт додається нова функція, вона повідомляє вас про те, чи зміни, внесені за цією новою функцією, порушують будь-яку іншу функціональність вашого сайту.
  • Це документально підтверджені знання про те, як програма працює і працює разом для досягнення бізнес-потреб.
  • Коли настав час оновити сторонні бібліотеки, ви можете оновити її та запустити свій функціональний тестовий набір, щоб побачити, чи щось порушиться. Замість того, щоб самостійно переглядати кожну сторінку, ви можете змусити комп’ютер зробити це за вас і дати вам список усіх тестів, які зламалися.
  • Тестування навантаження! Ви можете імітувати тисячі одночасно користувачів, які потрапляють на ваш сайт одночасно, і ви можете бачити, де ваш сайт сповільнюється і піддається тиску. Ви можете бачити, як поводиться ваш веб-сайт задовго до того, як ви отримаєте дзвінок пізньої ночі про те, що сайт вийшов з ладу.
  • Функціональне тестування потребує часу вручну. Так, писати справи потрібно багато часу, але якби вам довелося сісти за палітуркою з 500 сторінок тестів, які вам довелося виконати, перш ніж ви могли доставити продукт, який ви хочете, щоб у вас були автоматизовані тести!
  • Документи тестування застаріли швидко. Коли буде додана нова функція, вам потрібно обов’язково оновити документ головного тестування. Якщо хтось пропускає якісь тести, ви раптом отримуєте помилки, що переповзають на сторінки, які "зроблені та перевірені". Зараз я працюю в такому середовищі, і можу вас запевнити, це кошмар.

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

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

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


Дякую за вашу відповідь. Я усвідомлюю важливість та переваги функціональних тестів, моє занепокоєння стосується вартості та вигоди тестування ВСІХ. Ми розробляли функціональний тест протягом останніх трьох років, але зараз у цьому проекті я відчуваю, що вартість впровадження тесту ВСЕ набагато більше, ніж пошук помилки у виробництві, підняття квитка та його виправлення ... Цікаво, чи існують деякі обставини, коли НЕ складати функціональний тест краще (з точки зору витрат і вигод), ніж не робити його, і мені цікаво, чи ми знаходимось у таких обставинах, де краще вибрати розумно, що тестувати.
Пабло Ласкано

@donsenior ~ якщо вам здається, що для тестування потрібно занадто багато часу, то подивіться на інструменти, які ви використовуєте. Ви правильно їх використовуєте? Ви навіть використовуєте засоби економії часу? Написання тестів займає більше часу, ніж написання коду b / c, у вас є більше коду для написання. Така природа тестування. Якщо ви почнете вибирати і вибирати, для чого писати тести, то це дістанеться до того, що ніхто не буде писати тести, інакше ці тести будуть неохайними.
Тіанна

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

@donsenior ~ Звичайно, для перевірки справи потрібно QA 5min, але для тестування комп'ютера потрібно менше секунди. Ви повинні запитати "Чому потрібно написати 2 дні, щоб написати тестування, яке займає 5 хвилин для перевірки вручну"? Ще раз подивіться на свої інструменти. Можливо, QA також повинен писати кілька тестових випадків? Проблема не в написанні тестових випадків для вашої системи, а в тому, як складаються ці тестові випадки.
Тянна

добре цей тест займає набагато більше секунди (пам’ятайте, це функціональні тести, а не одиничні тести). Але це не проблема, вони бігають вночі. Я думаю, ти маєш рацію в тому, що QA також повинен писати кілька тестових справ, але, на жаль, це не рішення, яке я можу прийняти. Дякую за ваші відповіді, я позначив цю як прийняту!
Пабло Ласкано

7

Більше 2 разів ... мені здається трохи набагато. Ви можете проаналізувати причини цього, вони можуть включати:

  • погана підтримка інструментів для створення та обслуговування тестів

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

Поговоріть зі своїми розробниками.

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


Я згоден, можливо, ми не використовуємо правильний інструмент для тестування веб-програми. Проте тестування наших веб-служб не має жодних проблем. У будь-якому разі, окрім правильного чи неправильного в тому, як ми виконуємо тести, мене турбують витрати. Я думаю, що на даний момент краще (з точки зору вартості / вигоди) дозволити пройти тестування для відділу контролю якості та виправити помилки, навіть якщо вони знайдені у виробництві.
Пабло Ласкано

Ви залишили погано розроблені заняття як можливу причину тестування занадто довго. Це, безумовно, найпоширеніша причина, яку я бачу, коли люди вічно тестують свій код.
Данк

4

Чи витрачається більше часу на виконання функціонального тесту, ніж впровадження самої системи?

Абсолютно. Написання справді хороших тестів, ймовірно, займе більшу частину часу у багатьох (хороших) магазинах.
Тож співвідношення 2-1 добре. Менш досвідчені розробники часто не беруть до уваги весь час на тести.


2

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

Тести одиниць - це код, тому вони містять помилки (як і всі інші коди). Виправлення цих помилок потребує часу.

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


1

Йдеться про якість.

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

Але якщо ви знаєте, що ваша слухова система не згасне, ви зробите все, що не можете їх розчарувати. Кожен квиток на помилку знизить вашу репутацію. Уявіть, що одна помилка зніме 50 відсотків вашої репутації, наступна - ще 25 відсотків і так одна. Тож чи може бути занадто багато тестів?


добре, я не дуже впевнений, що в цей момент ми фактично скорочуємо квитки. Можливо, у нас є скорочені (але не дуже) КА квитки, але кількість помилок, виявлених цим тестом, недостатньо велика (на мій погляд), щоб виправдати такі витрати на наявність 2/3 часу програмного забезпечення для розробників функціональних тестів.
Пабло Ласкано

0

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

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

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

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