Вартість більш тривалої затримки між розробкою та забезпеченням якості


18

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

Я продовжую гортати свою копію Code Complete, шукаючи фрагмент "Hard Data", який показує, що вартість виправлення дефектів зростає експоненціально, чим довше вона існує. Чи може хтось вказати мені на деякі дослідження, які підтримують цю концепцію? Я намагаюся переконати сили, які полягають у тому, що вузьке місце QA набагато дорожче, ніж вони думають.


Це форма "технічної заборгованості".
Брайан

3
@Brian - Будь ласка, виправте мене, якщо я помиляюся, але ІМО, це не дуже підходить для ТД, оскільки немає жодної заборгованості. Це вузьке місце, яке уповільнює процес, а не «Зробиться на потім»
кандидат наук

7
@Nupul: Візьміть до уваги твердження Ніла, "Коли дев рухається швидше, ніж QA, цей часовий розрив лише збільшиться". Врешті-решт, будуть створені нові функції, які містять приховані залежності від порушеної поведінки. Таким чином, не тільки система стане більш гнучкою, але й зростатиме вартість виправлення цих помилок (виправлення помилки призведе до порушення іншого).
Брайан

@Brian - Зауважив належним чином та поступився :)
Кандидат наук

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

Відповіді:


10

Вам не потрібні посилання, IMHO. Ось що ви могли (скоріше повинні ) зробити:

Кількісно визначте вартість затримки! Припустимо, що для перевірки функції (функцій) потрібно 1 тиждень. Затримка на 2-3 тижні означає, що функція буде доступна щонайменше до 4-го тижня. І це теж при умові 100% успіху. Додайте час фіксації ще тиждень, так що це приблизно 5 тижнів затримки.

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

Яка "вартість компанії" для цього випуску, тобто скільки клієнт розраховує отримати прибуток від цього випуску? Якщо вони очікують 5200 доларів / рік прибутку від цього випуску, то кожен тиждень ковзання коштує їм 100 доларів втраченого доходу. Це перегляд клієнта. Ви можете мати або не мати доступу до цих даних, але варто врахувати та вказати, як затримка може вплинути на відносини.

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

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

Звір удачі! (каламбур призначений :)


6

Я не думаю, що Code Complete є правильним ресурсом для вас тут. Це не проблема коду, це проблема процесу та, можливо, проблема управління.

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

  1. Визначте обмеження.

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

    • Підготовка тестового середовища?
    • Визначення, що тестувати?
    • Функціональні (приймальні) тести?
    • Регресійні тести?
    • Розвідувальне тестування?
    • Повідомлення про помилки / дефекти тестів?
    • Визначення кроків для відтворення помилки?
    • Отримання роз'яснень від розробників чи керівників проектів?
    • Виправлення проблем, виявлених на етапі забезпечення якості?

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

  2. Експлуатувати обмеження.

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

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

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

  3. Підпорядкувати інші дії обмеженню.

    На даний момент тестери настільки ж продуктивні, наскільки можуть бути самі по собі, тому нам потрібно почати запозичувати продуктивність в інших сферах:

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

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

    • Якщо ви покладаєтесь на ручні тестові розгортання, автоматизуйте їх за допомогою сценаріїв безперервної інтеграції та управління конфігурацією.
    • Якщо для тестових планів потрібно тривати довгий час, працюйте над вдосконаленням критеріїв прийняття (наприклад, INVEST ). Більшість організацій спочатку в цьому дуже погані.
    • Якщо приймальні тести забирають занадто довго, починайте автоматизувати їх. Використовуйте такий інструмент, як огірок або FitNesse, або пишіть тести типу xUnit, якщо потрібно. Існують також Selenium, Watij та інші інструменти автоматизації браузера, якщо тестування інтерфейсу користувача триває тривалий час.
    • Якщо регресійні тести тривають занадто довго, автоматизуйте це теж. Якщо його неможливо автоматизувати, зосередьтеся на покращенні якості поза воротами, тобто з ще більшим акцентом на огляді коду, тестуванні блоків, інструментах статичного аналізу тощо. Розробникам слід бути досить впевненими, що дійсних помилок перед тим, як передавати його, дуже мало до якості (дефекти товару - це інша історія).
    • Якщо дослідницьке тестування є вузьким місцем, ви потенційно можете відкласти частину цього лише до моменту випуску, або укласти контракт з тестовою фірмою, щоб зробити дуже паралельні речі, такі як тестування одного і того ж робочого процесу в декількох браузерах.
    • Якщо тестери не зможуть спростити чимало помилок, подумайте про створення середовища для перевірки ємності, щоб мати можливість почати відтворювати періодичні помилки. Або спробуйте просто виконувати автоматизовані тести приймання паралельно та постійно, цілий день, ведучи докладні журнали.
    • Якщо виправляти помилки потрібно занадто багато часу, тоді починайте розділяти проекти та / або серйозно розглянути можливість перестановки ваших рішень. Або, альтернативно, не виправляйте деякі з них; не кожна помилка є критичною, ви маєте змогу надати їм пріоритет разом із функціональними роботами.
    • Якщо все інше не вдається, найміть більше тестерів.
  5. Поверніться до кроку 1.

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

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

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


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

4

На сторінках 29 і 30 можуть бути дані, які ви шукаєте, хоча може знадобитися подальша інформація.

Я вивчив би дослідження, згадані в цьому реченні на сторінці 30:

Десятки компаній виявили, що просто зосередження уваги на виправленні дефектів раніше, ніж пізніше в рамках проекту, може скоротити витрати та графіки розробки на два та більше факторів (McConnell 2004).

До речі, саме ваше питання змусило мене знову забрати книгу, щоб оновити її :-)


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

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

Ви маєте рацію, дані, які ви додали до редагування, можуть бути релевантними.
weronika

3

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

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

У такому сценарії вартість затримки - це вартість зарплати забудовника, оскільки його робота була б марною.

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


3

Я продовжую гортати свою копію Code Complete, шукаючи фрагмент "Hard Data", який показує, що вартість виправлення дефектів зростає експоненціально, чим довше вона існує. Чи може хтось вказати мені на деякі дослідження, які підтримують цю концепцію?

Експоненційна вартість пошуку помилки, здається, базується на дослідженні NIST . Дослідження передбачало, що дослідження передбачає різні етапи водоспаду:

Software Development Stage         | Cost
-----------------------------------+------
Requirements and Design            | 1X
Code and Unit Testing              | 5X
Integration and System Testing     | 10X
Beta Testing                       | 15X
Post Release                       | 30X

( таблиця тут звідси )

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


2

У вашій проблемі немає QA, насправді, якщо ваш QA проводить тестування, затримки майже не менше ваших турбот. Будь ласка, дозвольте мені розгорнути (знову ж таки, як це звичайна помилка в галузі програмування) ... QA Забезпечує якість продукту, контролюючи всю SDLC, від вимог (можливо, раніше), шляхом розробки, перевірки, випуску та підтримки. Тестування забезпечує відсутність явних дефектів у коді. Є дуже велика і важлива різниця. Якби у вас був справжній контроль якості, вони б по всьому відділу тестування та дослідження та запитань запитували, чому вони коштують ділового часу (а отже і грошей) затримки випусків, або повного управління проектом, спричиняючи те, що вони керували належним чином плануванням проектів, або ж над усім керівництвом впевнений, що було достатньо тестерів для виробленого коду тощо ...

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

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

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

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


'' "Завдання відділу тестування - не знаходити дефекти. Їх завдання полягає в тому, щоб виявити відсутні дефекти". Чи можу я вам процитувати це?
sleske
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.