Чи повинні розробники нести відповідальність за тести, окрім одиничних тестів, якщо так, то які найпоширеніші?


35

Зараз я працюю над досить великим проектом, і я використовував JUnit та EasyMock для досить широкого функціонування тестових функцій. Мене зараз цікавить, які ще типи тестування мені слід хвилювати. Як розробник, чи є моя відповідальність турбуватися про такі речі, як функціональне чи регресійне тестування? Чи є хороший спосіб інтегрувати їх корисним способом у такі інструменти, як Maven / Ant / Gradle? Чи краще вони підходять для тестера чи бакалавра? Чи є інші корисні види тестування, які мені не вистачає?


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

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

Хороший критерій - наскільки автоматизовані тести. Програмісти добре автоматизують речі з кодом.
rwong

Відповіді:


44

Ви зобов’язані поставити код без дефектів. Вам слід написати, допомогти в написанні або забезпечити написання або виконання тестів, щоб дати вам впевненість у наданому вами коді.

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

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

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


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

10
Це ваша відповідальність , щоб поставити бездефектной код це відповідальність розробника , щоб побудувати те , що просили . Дефекти можуть справлятись із вимогами, що погано зібрані / інтерпретовані, екологічними проблемами в певному розгортанні, конфліктами в ОС тощо. Якщо тільки аналіз корінних причин не проводиться для кожного дефекту, код без дефектів для бізнесу означає, що вони очікують це робити те, що очікує користувач, і все менше - це дефект. Нереально вважати, що розробник може залишатися залученим протягом усього SDLC, щоб просто підвищити довіру; це не буде масштабуватися.
Аарон Маківер

2
"Тестування програм може бути дуже ефективним способом виявити наявність помилок, але це безнадійно недостатньо для показу їх відсутності". - Едсгер У. Дійкстра, "Покірний програміст" (лекція премії Тюрінга), 1972 р.
Джон Р. Стром

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

4
Чи були б щасливіші всі, хто ставить питання з першим реченням цієї відповіді, якби Брайан сказав це "Ваша мета - поставити код без дефектів"?
Carson63000

13

Це може допомогти вам:

Гнучкі квадрати тестування

Q1 написані розробниками.

Q2 автоматизовані розробниками та записуються у співпраці з бізнесом та / або тестерами.


Також розробники часто беруть участь у тестуванні Q4.
neontapir

Зв'язаний файл більше не можна знайти.
Dušan Rychnovský

3

Чи є інші корисні види тестування, які мені не вистачає?

Існує тестування прийняття, для якого я рекомендую рамки в стилі BDD, які використовують мову Gherkin : JBehave (Java), огірок (Ruby), Behat (PHP) тощо. Цей тип тестування має деякі переваги перед одиничними тестами:

  • Тести легко читаються не розробниками, тому ви можете показати їх клієнтам
  • Тести чітко описують бізнес-процеси, не вдаючись до деталей впровадження (я не маю на увазі впровадження не важливе - це, звичайно, - але краще, коли ви відокремлюєте бізнес-вимоги від самого коду)
  • Тести - це те, що робитимуть користувачі за допомогою вашого додатка
  • Їх простіше писати (IMHO, може залежати від мови та рамки): ніяких глузувань, менше технічних деталей

3

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

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

Існує кілька каркасів для такого випробування, ми використовуємо fitnesse з дуже хорошими результатами. Має дуже гарну бібліотеку для тестування веб-сторінок (ми використовуємо її для тестування нашого веб-програми та наших веб-служб), і вона дуже добре інтегрується з Мейвен і Дженкінсом .

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


2

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

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

Але це робота команди, не тільки твоєї.


1

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

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


1

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

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

Якщо ваше питання корисне для відстеження помилок, мені подобаються bugzilla, google docs, zendesk або basecamp з точки зору комунікаційних систем.


1

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

Одне питання - це ефективне використання часу розробників.

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

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

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


0

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


Я думаю, те, що я намагаюся досягти, - це те, що вважається ефективним "забиванням".
Джекі

Це, безумовно, суб'єктивно. Я б сказав, що будь-який тип тесту, який стосується вашого проекту (звичайно, не всі типи тестів стосуються всіх проектів). Ось гідний список: softwaretestinghelp.com/types-of-software-testing . Те, що ви робите самі, і що ви вирішите відмовитися, звичайно, залежить від вашого власного часу, ресурсів та можливостей. Наприклад, ви не зможете виконати тестування прийняття, оскільки існують певні правила, яких тільки користувач знав. Коротше кажучи, зробіть усе, що можливо, у свій час.
Honus Wagner

Для моїх проектів, які в основному є веб-сайтами, я, як правило, намагаюся охопити одиницю, функціональність, зручність використання, регресію, продуктивність незалежно від того. Якщо у мене є час, я заходжу на «Білий ящик», «стрес», «сумісність», навіть прийняття, якщо я знаю достатньо. Мій загальний стиль кодування дуже орієнтований на продуктивність, тому я знижую свій пріоритет. Ніщо з цього не означає, що QA не знайде щось не так у жодному з цих типів тестів, це просто означає, що вони знайдуть менше і зроблять набагато простіший раунд 2.
Honus Wagner

0

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

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

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


1
Єдине, що у мене виникає з цього питання, - це те, що між розробниками та тестувальною командою має бути певна ізоляція, інакше команда тестування загрожує думкою розробника про "код працює". QA та розробники мають протилежні цілі; розробник намагається змусити його працювати, тоді як команда з контролю якості намагається змусити його зламатись, а розробник не завжди має найкращий погляд на актуальність тесту.
Роберт Харві

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

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

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