Розробка чи тестування блоку тестування?


24

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

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

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

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

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

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


9
Це важливо?
янніс

5
@YannisRizos З назви, ні. З усього питання це певно здається людині, що задає питання
Людвіг Магнуссон

2
@Rubio З вашого запитання я погоджуюся, що звіти про тести одиниць марні для тестера системи. Блок тестів - корисний інструмент для розробника. Як ваш менеджер тестування мотивує потребу в цих звітах?
Людвіг Магнуссон

2
@LudwigMagnusson Правда, але якщо це має значення лише для запитуючої людини, це занадто локалізовано.
янніс

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

Відповіді:


30

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

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

Це означає, що обов'язки повинні бути такими:

  • Розробники пишуть автоматизовані тести
  • Розробники запускають індивідуальні автоматизовані тести за потребою в рамках робочого процесу їх розробки
  • QA виконує всі автоматизовані тести як один з перших етапів тестування

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


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

4
@dardo: Звичайно, автоматизовані тести - не єдині тести, які слід запустити, інакше ви можете взагалі позбутися QA. Це було б смішно - багато дуже важливих аспектів будь-якого програмного продукту просто неможливо перевірити автоматично. Що я маю на увазі, що зважаючи на наявність автоматизованих тестів, QA не повинно турбуватися про них, крім перевірки виходу сервера збірки; після цього вони роблять свою звичайну справу - ручне та напівавтоматичне тестування на завершеній збірці.
tdammers

Ага так, погодьтесь на 100% начебто на контрольному пункті, чи є вони там, чи проходять вони тощо?
Дардо

@tdammers - Тестування є лише невеликою частиною забезпечення якості.
Меттью Флінн

2
Відмінна відповідь, проте я не згоден, що тести слід розглядати як такі an authoritative source of technical specifications. Тести повинні бути підтвердженням технічних характеристик, але, безумовно, не заміною. Це означає не те, що я виступаю за велику спереду таку, але я вважаю, що ми застосовуємо тести, щоб перевірити те, що ми знаємо про те, як повинна вестись система, а не мати тести визначають поведінку. Педантична відмінність, можливо, але все ж важлива.
S.Robins

10

Я думаю, що для вас найважливішим було б з’ясувати, навіщо їй потрібен цей звіт.

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

  • якщо вона є розумною людиною, просто бажаючи отримати інформацію, щоб допомогти роботі її групи тестування, має сенс дійти до загального розуміння та розробити якесь рішення, яке було б придатне вам обом. Ви можете обговорити з нею природу одиничних тестів та принципову різницю між тестовою одиницею та функціональністю / системою / приймальністю. Сподіваємось, ви зможете зрозуміти, що вони працюють на дуже різних рівнях і не можуть замінити інших.
  • якщо вона є контролером чи бюрократом, вимагаючи звіту лише заради цього, ви можете створити щось, щоб задовольнити її примхи з найменшими зусиллями (наприклад, що запропонував @Doc :-).
  • якщо вона вступає в якусь гру влади, ви можете поставити під сумнів, чи має вона право вимагати звітів у розробників. На мій досвід, розробники, як правило, не повинні звітувати у відділ якості.

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

2
@Rubio, дійсно, вам слід уточнити, що тестові параметри не можуть замінити системні тести. Насправді, високий рівень охоплення тесту для конкретного модуля навіть може бути попереджувальним знаком про те, що цей модуль потребує додаткової уваги під час тестування системи! Якщо розробники взяли додатковий біль, щоб написати багато тестів, код, можливо, був різко змінений / розширений останнім часом та / або повний помилок.
Péter Török

7

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

З цієї причини, наша команда з питань якості не все так сильно піклується про те, що є, а не тестується одиниця, перш ніж розпочати тестування.

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


5

Вона наполягала на тому, щоб розробники звітували про те, що вони перевіряли, як і як вони інтегруються.

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

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


1
Але чи не слід фокусуватись на специфікаціях? Бувають ситуації, коли зміни коду мають несподівані наслідки, і тоді розробникові дуже важливо повідомити, що тестування також повинно охоплювати це і це.
Рубіо

1
@Rubio: Звичайно, але з чисто практичної точки зору, спробуйте поглянути на це з її точки зору. Якщо припустити, що всі частини програми не матимуть абсолютно однакової кількості коду, охопленого одиничними тестами, чи не хочете ви присвятити більше ваших обмежених ресурсів частинам програми з меншим покриттям? Для мене це просто питання подивитися на звіт і сказати моїй команді: "Ей, хлопці, здається, що у області X менше коду, покритого тестами, ніж у області Y, давайте спробуємо зосередитись на запущених тестах на області X"
Джейсон

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

2
Що перевіряється: автоматично генерується звіт про покриття коду. Як тестується: читайте код тестового модуля. @gbjbaanb: "Тестова група могла написати тести для команди розробників". З цим твердженням так багато речей, що я не знаю, з чого почати, окрім як сказати, Дуже погана ідея .
BryanH

5

Я не бачу, що це має велике значення.

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

Якщо ви надаєте їх на QA / тестування, а вони не роблять належних тестів ... такий же результат, як якщо б ви їх не надали.

Однак якщо ви надасте їх, вони також можуть порівняти їх із специфікаціями та / або запропонувати, які тести можуть бути помилковими, або потребувати змін, оскільки вони виявили помилку.

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

Devs допускають помилки, QA робить помилки, в ідеалі вони не помиляються на одному предметі ... і якщо вони роблять ... це потенційно аналітик, який кинув м'яч, написавши незрозумілу специфікацію.


2
Мінусом для мене є додаткова робота, яка не надає ніякої або малої вартості.
Рубіо

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

1
Створення звіту про 3500 одиничних тестів / інтеграційних тестів, ймовірно, мало допоможе тестувальникові, навіть якщо тести були названі добре (якими вони повинні бути, але не є). Для того, щоб надати тестерам змістовну інформацію про тестування одиниці, розробнику доведеться переглядати тест блоку, пов'язаний з певною особливістю, і якось повідомляти тестувачу, що насправді тестується і як це стверджується. Це багато роботи.
Рубіо

1
@Rubio - автоматизація - твій друг. Ви можете налаштувати сервер безперервної інтеграції, який надсилатиме повідомлення про повідомлення будь-коли під час реєстрації (це теж допоможе вам). Якщо QA вимагає пояснення тестів і коду, то це здається, що вони вийшли за межі рівня розумності і перейшли в сферу "не в змозі зрозуміти поняття". Якщо вони не можуть чи не прочитають код, то вони марні. У цей момент чат з вашим менеджером був би корисним, і ви можете викласти це так: "QA хоче, щоб я витрачав x% свого часу, допомагаючи їм читати код, це добре?"
BryanH

1
+1 за те, що він не звільняє QA від їхньої відповідальності незалежно перевірити програмне забезпечення.

2

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

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

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


1
Надмірне тестування - це те, що часто використовується як аргумент, а іноді може бути істинним. Однак тестування системи завжди проводиться на всій системі, тоді як тестування блоку / інтеграції фокусується на конкретному блоці. Я бачу тут небезпеку.
Рубіо

2

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

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

Подивіться на такий інструмент, як Sonar, який допоможе вам - він повідомить про рівень покриття коду та результати тестування вашого блоку.


SOX ні, CMMI так. Наші одиничні / інтеграційні тести є частиною процесу перегляду коду, і це не піддається аудиту. Я можу отримати згенерований звіт із тестового запуску одиниці / інтеграції, але це досить загадково для тестера. Покриття також є у звіті, але саме по собі це нічого не означає.
Рубіо

По-перше, не дайте своїм тестам криптовалют. Перевірте dannorth.net/introducing-bdd . По-друге, висвітлення коду може не сказати багато про якість тестів, але, принаймні, це показує, що тестовані одиниці не підриваються, коли виконується більшість усіх кодів.
Меттью Флінн

Гарне посилання, дякую. Я пам'ятаю, як читав чудову статтю журналу, вивчаючи різні способи називати одиничні тести, але не можу на смерть знайти мене зараз. Можливо, це був журнал Visual Studio або Code Magazine.
Рубіо

2

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

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

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


1

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

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


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

1

Варто згадати підхід, обговорений у книзі "Як Google Тестує програмне забезпечення": Тестування та контроль якості - це відповідальність кожного, а стандарти суворі.

Реальна роль , що традиційно називається відділ «Testing», насправді продуктивність праці розробників; тобто автоматизація, щоб організація дозволила економічно досягти необхідного рівня жорсткості.

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