Ефективне, результативне, витончене тестування
Переклад. Ольга Алифанова
У забезпеченні якості розрізняють перевірки та затвердження. Верифікація відповідає на питання, чи правильно ми створюємо продукт, а валідація - на питання, а чи ми взагалі створюємо, що потрібно. Деякі люди проводять вододіл між забезпеченням якості і тестуванням, виходячи саме з цих визначень.
З моєї точки зору, використання термінів "верифікація" і "валідація" може привести до помилкових дихотомій. Для мене тестування - це діяльність, пов'язана з дизайном. і тому покриває досить широку область. Я вірю, що тести можуть стати таким собі "спільною мовою". Я вірю, що тести можуть безпосередньо кодувати специфікації і вимоги. І я вірю, що тести - це джерело знань про область або продукті. Занадто великий акцент на різницю між верифікацією і валідація - це неефективний і не результативний спосіб зрозуміти, як саме тестування доповнює забезпечення якості.
З моєї точки зору, нездатність сприймати тестування і забезпечення якості, як два різних, що доповнюють один одного процесу - це сприйняття, якому явно не вистачає деякого витонченості.
Насправді я згоден, що відмінності між верифікацією і валідація цілком виправдані. Зрештою, ефективність - це здатність робити щось правильно. Результативність, з іншого боку - це здатність видавати правильний результат. Ефективність сфокусована на процесі і націлена на доведення його до кінця, а результативність - на продукті (тобто, власне, на результаті цього процесу). Можна сказати і так: ефективність концентрується в першу чергу на те, щоб уникнути помилок, а результативність - на успіх незалежно від кількості промахів, допущених по шляху.
Однак мені здається, що є спосіб розрізняти ефективність і результативність, який куди краще розуміння різниці між верифікацією і валідація. Адже тестування прямо-таки вимагає гнучкості та інновацій.
І це саме та точка, в якій виникає цікавий парадокс. Для постійного, безперервного підтримки ефективності вам потрібно пристойний рівень дисципліни і твердості. Однак саме дисципліна і стійкість до змін позбавляють процеси гнучкості! Якщо ви робите одне і те ж однаково раз по раз, вас ніколи не осінить нічим інноваційним.
Так як ефективність в даному контексті пов'язана з верифікацією, це означає, що верифікація може перетворитися в статичну діяльність.
Результативність, навпаки, куди краще адаптується до змін і вимагає більшої гнучкості. Для досягнення хороших результатів потрібно заохочувати інновацію, тому що тоді люди будуть замислюватися про те, що саме вони зараз роблять, і чи варто займатися саме цим в конкретному контексті і при впливі конкретних факторів. Однак ця гнучкість і адаптивність ведуть до надто великого багатства виборів і потенційної нездатності на свідомі рутинні зусилля, які можна буде відтворити і поза поточної ситуації.
Так як ефективність в нашому контексті ув'язана з валідація, все вищесказане означає, що валідація може стати надто динамічним видом діяльності.
І тут-то в гру має вступати витонченість рішень, розриває цей порочне коло і дає вам можливість оцінити свою ефективність і результативність, дивлячись на неї іншими очима. Витонченість рішень не просто відповідає на питання, чи зробили ми щось краще, або подумали ми про щось краще, а скоріше дає відповідь, чи стали ми краще розуміти, що відбувається, створили ми базу для майбутньої діяльності?
Витонченість можна розглядати в тому числі як мінімізацію складності. У світі розробки люди часто ділять складність рішень на обов'язкову і випадкову. Отже, для того, щоб рішення в тестуванні були витонченими, вони повинні складатися тільки з "обов'язкової складності" і практично не містити випадковою. Звучить, напевно, загадково? Так, можливо, так як скільки людей - стільки думок про те, де починається "складність". Для мене складність рішень в тестуванні виникає, коли в системі немає виборів і в наявності висока невизначеність.
Якщо ви дозволяєте тестування бути інноваційним та гнучким (тобто результативним), але при цьому підтримуєте певний рівень жорсткості і дисципліни (ефективність), у вас повинен бути якийсь звід правил щодо того, як управлятися з вибором (в сенсі, як надавати цей вибір) і невизначеністю (як її знищувати).
Не буду зануднічать на цю тему, а просто наведу приклади того, про що я говорю. У своїх прикладах я хочу спробувати змусити команди тестування думати про своїх тестах, використовуючи терміни "ефективність", "результативність" і "витонченість". Почну з деяких аксіом (Не підберу іншого слова) і постараюся зробити свої приклади якомога коротше і зрозуміліше. Є речі, в які повинна вірити вся команда - або, як мінімум, діяти так, як ніби вона в них вірить. І перша ж моя аксіома стверджує те, про що я вище казав!
Ось кілька прикладів, що ілюструють ці положення. Для початку давайте розглянемо всі ці концепції стосовно тесту.
- Ефективний тест повинен концентруватися на вводі, процесі, виведення.
- Результативний тест повинен бути виразним і демонструвати мета тесту.
- Ефективний тест повинен фокусуватися на одному виразному результаті конкретного дії, а не на декількох одночасно.
- Результативний тест групує пов'язані між собою спостереження.
- Ефективний тест дає конкретний приклад потрібних даних.
- Результативний тест розповідає про загальні умови, під які повинні потрапляти тестовані дані.
- Витончений тест описує конкретну поведінку системи і її функціональність.
Тепер давайте застосуємо ці концепції до тест-сьют:
- Ефективний тест-сьют визначає, які дані будуть валідними, а які ні.
- Ефективний тест-сьют перевіряє і валідність, і невалидность дані.
- Результативний тест-сьют групує типи даних в класи.
- Витончений тест-сьют може складатися для досліджень задач бізнесу і його процесів.
І, нарешті, давайте докладемо ці визначення до тестування як виду діяльності:
- Ефективне тестування використовує скрипти, які структурують дослідний процес.
- Результативне тестування застосовує дослідні практики, які привносять в скрипти варіативність.
- Витончене тестування використовує скріптованние дослідні практики, щоб продемонструвати цінність додатки для споживача шляхом вивчення того, як воно використовується.
- Ефективне тестування використовує сценарії, які показують, як продукт реалізує своє призначення.
- Результативне тестування використовує сценарії, які демонструють, що має статися, щоб для користувача потреба була задоволена.
- Витончене тестування описує вимоги і демонструє можливості програми.
Все це важливо усвідомлювати, так як те, що ви робите і те, як саме ви це робите - це основа того, що і як ви будете робити в майбутньому. Це також підтримує групову динаміку і роздуми про вищенаведених концепціях. Ось що я маю на увазі:
Можливо, мені з самого початку варто відзначити, що у мене не було мети виставити себе істиною в останній інстанції в плані відповіді на питання, яке тестування буде ефективним, результативним і витонченим. Я тільки хотів донести свою позицію: я вважаю, що команди тестування, які розуміють різницю між цими концепціями, здатні думати і бачити продукт інакше. Безумовно, це лише моя думка, але я маю намір нести його в маси і далі.