Моделі життєвого циклу програмного забезпечення (SDLC, версія 3.1)
Модель життєвого циклу розробки програмного забезпечення описує типи дій, що виконуються на кожному етапі проєкту розробки програмного забезпечення, а також те, як дії пов’язані одна з одною логічно та хронологічно. Існує кілька різних моделей життєвого циклу розробки програмного забезпечення, кожна з яких вимагає різних підходів до тестування.
Розробка програмного забезпечення і тестування ПЗ (версія 3.1)
Важливою частиною ролі тестувальника є знайомство із типовими моделями життєвого циклу розробки програмного забезпечення, щоб можна було проводити відповідні тестові дії.
У будь-якій моделі життєвого циклу розробки програмного забезпечення є кілька характеристик якісного тестування:
- Для кожної розробки є відповідна тестова діяльність
- Кожен рівень тестування має цілі тестування, специфічні для цього рівня
- Аналіз і проєктування тестування для заданого рівня тестування починаються під час відповідної діяльності з розробки
- Тестувальники беруть участь в обговореннях, щоб визначити й удосконалити вимоги та дизайн, а також залучаються до перегляду робочих продуктів (наприклад, вимог, історій користувачів тощо).
Незалежно від обраної моделі життєвого циклу розробки програмного забезпечення, тестування має починатися на ранніх стадіях життєвого циклу, дотримуючись принципу раннього тестування.
ISTQB класифікує загальні моделі життєвого циклу розробки програмного забезпечення таким чином:
- Моделі послідовної розробки
- Ітераційні та інкрементальні моделі розробки
Модель послідовної розробки описує процес розробки програмного забезпечення як лінійний послідовний потік дій. Це означає, що будь-яка фаза процесу розробки повинна починатися після завершення попередньої фази. Теоретично фази не збігаються, але на практиці корисно мати ранній зворотній зв’язок із наступної фази.
У моделі Waterfall дії з розробки (наприклад, аналіз вимог, проєктування, кодування, тестування) виконуються одна за одною. У цій моделі тестування відбувається лише після завершення всіх інших дій розробки.
На відміну від моделі Waterfall, V-модель інтегрує процес тестування протягом усього процесу розробки, реалізуючи принцип раннього тестування. Крім того, V-модель включає рівні тестування, пов’язані з кожною відповідною фазою розробки, що додатково підтримує раннє тестування. У цій моделі виконання тестів, пов’язаних з кожним рівнем тестування, відбувається послідовно, але в деяких випадках відбувається накладання.
Моделі послідовної розробки забезпечують програмне забезпечення, яке містить повний набір функцій, але зазвичай потрібні місяці або роки для доставки зацікавленим сторонам і користувачам.
Поступова розробка включає встановлення вимог, проєктування, створення та тестування системи по частинах, що означає, що функції програмного забезпечення розширюються поступово. Розмір цих приростів функцій змінюється, причому деякі методи мають більші частини, а деякі менші. Збільшення функцій може бути невеликим, як одна зміна екрана інтерфейсу користувача або новий параметр запиту.
Ітеративна розробка відбувається, коли групи функцій визначаються, проєктуються, створюються та тестуються разом у серії циклів, часто фіксованої тривалості. Ітерації можуть передбачати зміни функцій, розроблених на попередніх ітераціях, а також зміни обсягу проєкту. Кожна ітерація надає робоче програмне забезпечення, яке є зростаючою підмножиною загального набору функцій, поки не буде доставлено остаточне програмне забезпечення або розробку не буде припинено.
Приклади:
- Раціональний уніфікований процес: кожна ітерація, як правило, є відносно довгою (наприклад, два-три місяці), а кроки функцій відповідно великі, наприклад дві або три групи пов’язаних функцій
- Scrum: кожна ітерація має тенденцію бути відносно короткою (наприклад, години, дні або кілька тижнів), а кроки функцій відповідно невеликі, наприклад, кілька вдосконалень та/або дві-три нові функції
- Kanban: реалізовано з ітераціями фіксованої довжини або без них, які можуть надавати або одне вдосконалення чи функцію після завершення, або можуть групувати функції разом для одночасного випуску
- Спіраль: включає створення експериментальних приростів, деякі з яких можуть бути значно перероблені або навіть залишені в подальших розробках
Компоненти або системи, розроблені за допомогою цих методів, часто передбачають накладання та ітерацію рівнів тестування протягом розробки. В ідеалі кожна функція перевіряється на кількох тестових рівнях, коли вона просувається до доставки. У деяких випадках команди використовують безперервну доставку або безперервне розгортання, обидва з яких передбачають значну автоматизацію кількох рівнів тестування як частину їх конвеєрів доставки. Багато зусиль щодо розробки з використанням цих методів також включають концепцію самоорганізованих команд, які можуть змінити спосіб організації роботи з тестування, а також стосунки між тестувальниками та розробниками.
Ці методи формують зростаючу систему, яка може бути надана кінцевим користувачам на основі функції за функцією, на основі ітерації за ітерацією або більш традиційним способом основного випуску. Незалежно від того, чи випускаються доповнення програмного забезпечення для кінцевих користувачів, регресійне тестування стає все більш важливим із зростанням системи.
На відміну від послідовних моделей, ітераційні та інкрементні моделі можуть надати придатне для використання програмне забезпечення за тижні або навіть дні, але можуть запропонувати повний набір продуктів лише протягом місяців або навіть років.
Моделі SDLC в контексті (версія 3.1)
Моделі життєвого циклу розробки програмного забезпечення повинні бути обрані та адаптовані до контексту проєкту та характеристик продукту. Відповідна модель життєвого циклу розробки програмного забезпечення повинна бути обрана та адаптована на основі мети проєкту, типу продукту, що розробляється, бізнес-пріоритетів (наприклад, час виходу на ринок) і ідентифікованих ризиків продукту та проєкту. Наприклад, розробка та тестування незначної внутрішньої адміністративної системи має відрізнятися від розробки та тестування критично важливої для безпеки системи, такої як система керування гальмами автомобіля. Як інший приклад, у деяких випадках організаційні та культурні проблеми можуть перешкоджати спілкуванню між членами команди, що може перешкоджати ітераційному розвитку.
Залежно від контексту проєкту може виникнути необхідність об’єднати або реорганізувати рівні тестування та/або тестову діяльність. Наприклад, для інтеграції комерційного готового програмного продукту (COTS) у більшу систему покупець може виконати тестування сумісності на рівні тестування системної інтеграції (наприклад, інтеграція з інфраструктурою та іншими системами) та на рівень приймальної перевірки (функціональний і нефункціональний, разом із приймальним тестуванням користувача та робочим приймальним тестуванням).
Крім того, самі моделі життєвого циклу розробки програмного забезпечення можуть бути об’єднані. Наприклад, V-модель може використовуватися для розробки та тестування серверних систем та їх інтеграції, тоді як гнучка модель розробки може використовуватися для розробки та тестування зовнішнього інтерфейсу користувача (UI) та функціональності. Прототипування може використовуватися на ранніх стадіях проєкту з поетапною моделлю розробки, прийнятою після завершення експериментальної фази.
Системи Інтернету речей (IoT), які складаються з багатьох різних об’єктів, таких як пристрої, продукти та послуги, зазвичай застосовують окремі моделі життєвого циклу розробки програмного забезпечення для кожного об’єкта. Це становить особливий виклик для розробки версій системи Інтернету речей. Крім того, життєвий цикл розробки програмного забезпечення для таких об’єктів приділяє більшу увагу пізнішим фазам життєвого циклу розробки програмного забезпечення після їх введення в оперативне використання (наприклад, фази експлуатації, оновлення та виведення з експлуатації).
Причини, чому моделі розробки програмного забезпечення повинні бути адаптовані до контексту проєкту та характеристик продукту, можуть бути:
- Різниця в ризиках продукту систем (складний або простий проєкт)
- Багато бізнес-одиниць можуть бути частиною проєкту чи програми (поєднання послідовної та гнучкої розробки)
- Короткий час доставки продукту на ринок (об’єднання рівнів тестування та/або інтеграція типів тестування в рівні тестування)
Тестування в контексті життєвого циклу розробки ПЗ (версія 4.0)
Модель життєвого циклу розробки програмного забезпечення (SDLC) — це абстрактне високорівневе представлення процесу розробки програмного забезпечення. Модель SDLC визначає, як різні фази розробки та типи дій, що виконуються в рамках цього процесу, співвідносяться один з одним, як логічно, так і хронологічно. Приклади моделей SDLC включають: моделі послідовної розробки (наприклад, модель водоспаду, V-модель), ітераційні моделі розробки (наприклад, спіральна модель, прототипування) та моделі поступової розробки (наприклад, уніфікований процес).
Деякі дії в рамках процесів розробки програмного забезпечення також можна описати більш детальними методами розробки програмного забезпечення та методами Agile. Приклади включають: розробку, керовану приймальним тестуванням (ATDD), розробку, керовану поведінкою (BDD), дизайн, керований доменом (DDD), екстремальне програмування (XP), розробка, керована функціями (FDD), Kanban, Lean IT, Scrum та розробка керована тестами (TDD).
Вплив життєвого циклу програмного забезпечення на тестування (версія 4.0)
Для успіху тестування має бути адаптовано до SDLC. Вибір SDLC впливає на:
- Обсяг і час виконання тестових дій (наприклад, рівні та типи тестів)
- Рівень деталізації тестової документації
- Вибір тестових методик і тестового підходу
- Ступінь автоматизації тестування
- Роль і обов’язки тестувальника
У моделях послідовної розробки на початкових етапах тестувальники зазвичай беруть участь у перегляді вимог, аналізі тестів і дизайні тестів. Виконуваний код зазвичай створюється на пізніших етапах, тому зазвичай динамічне тестування не можна виконати на ранніх стадіях SDLC.
У деяких ітеративних і поетапних моделях розробки передбачається, що кожна ітерація забезпечує робочий прототип або приріст продукту. Це означає, що в кожній ітерації як статичне, так і динамічне тестування можуть виконуватися на всіх рівнях тестування. Часта доставка інкрементів вимагає швидкого зворотного зв’язку та ретельного регресійного тестування.
Гнучка розробка програмного забезпечення передбачає, що зміни можуть відбуватися протягом усього проєкту. Тому в гнучких проєктах перевагу надають спрощеній робочій документації продукту та розширеній автоматизації тестування для полегшення регресійного тестування. Крім того, більшість ручного тестування, як правило, виконується з використанням методів тестування, заснованих на досвіді, які не вимагають ретельного попереднього аналізу та розробки тестів.
SDLC та хороші тестові практики (версія 4.0)
Належні практики тестування, незалежно від обраної моделі SDLC, включають наступне:
- Для кожної діяльності з розробки програмного забезпечення існує відповідна тестова діяльність, тому всі дії з розробки підлягають контролю якості
- Різні рівні тестування мають конкретні та різні цілі тестування, що дозволяє тестуванню бути належним чином повним, уникаючи надмірності
- Аналіз і прєктування тесту для даного рівня тестування починається під час відповідної фази розробки SDLC, щоб тестування могло відповідати принципу раннього тестування
- Тестувальники беруть участь у перевірці робочих продуктів, щойно чернетки цієї документації доступні, щоб це раннє тестування та виявлення дефектів могли підтримувати стратегію зсуву вліво (shift-left approach)
Тестування як драйвер розробки ПЗ (версія 4.0)
TDD, ATDD і BDD є подібними підходами до розробки, де тести визначаються як засіб керування розробкою. Кожен із цих підходів реалізує принцип раннього тестування і дотримується підходу зсуву вліво, оскільки тести визначаються до написання коду. Вони підтримують ітераційну модель розробки. Ці підходи характеризуються наступним чином:
- Розробка на основі тестування (TDD). Направляє кодування через тестові випадки (замість обширного про’ктування програмного забезпечення) (Бек 2003). Спочатку пишуться тести, потім пишеться код, щоб задовольнити тести, а потім тести та код переробляються.
- Розробка на основі приймальних випробувань (ATDD). Виводить тести з критеріїв прийнятності як частину процесу про’ктування системи (Gärtner 2011). Тести пишуться до того, як частина програми розробляється для задоволення тестів
- Розробка на основі поведінки (BDD). Виражає бажану поведінку програми за допомогою тестових випадків, написаних простою природною мовою, яку легко зрозуміти зацікавленим сторонам – зазвичай у форматі Given/When/Then. (Челімський 2010). Потім тестові випадки автоматично перетворюються на виконувані тести.
Для всіх вищевказаних підходів тести можуть зберігатися як автоматизовані тести, щоб гарантувати якість коду в майбутніх адаптаціях.
DevOps та тестування (версія 4.0)
DevOps — це організаційний підхід, спрямований на створення синергії шляхом спільної роботи розробки (включно з тестуванням) і операцій для досягнення набору спільних цілей. DevOps вимагає культурних змін в організації, щоб подолати розрив між розробкою (включно з тестуванням) і операціями, одночасно ставлячись до їхніх функцій рівноцінно. DevOps сприяє автономності команди, швидкому зворотному зв’язку, інтегрованим ланцюжкам інструментів і технічним практикам, таким як безперервна інтеграція (CI) і безперервна доставка (CD). Це дозволяє командам швидше створювати, тестувати та випускати високоякісний код через конвеєр доставки DevOps (Kim 2016).
З точки зору тестування, деякі з переваг DevOps:
- Швидкий відгук про якість коду та те, чи зміни негативно впливають на наявний код
- CI сприяє підходу зсуву вліво в тестуванні, заохочуючи розробників подавати високоякісний код, що супроводжується тестуванням компонентів і статичним аналізом
- Сприяє автоматизованим процесам, таким як CI/CD, які полегшують створення стабільних тестових середовищ
- Покращує погляд на нефункціональні характеристики якості (наприклад, продуктивність, надійність)
- Автоматизація через конвеєр доставки зменшує потребу в повторному ручному тестуванні
- Ризик при регресії зведений до мінімуму завдяки масштабу та діапазону автоматизованих регресійних тестів
DevOps не позбавлений ризиків і викликів, які включають:
- Необхідно визначити та встановити конвеєр доставки DevOps
- Необхідно запровадити та підтримувати інструменти CI/CD (Continuous Integration/ Continuous Development)
- Автоматизація тестування потребує додаткових ресурсів, її може бути важко встановити та підтримувати
Незважаючи на те, що DevOps забезпечує високий рівень автоматизованого тестування, ручне тестування – особливо з точки зору користувача – все одно буде необхідним.
Підхід зсуву вліво (Shift-Left Approach, версія 4.0)
Принцип раннього тестування іноді називають зсувом вліво, оскільки це підхід, коли тестування виконується раніше в SDLC. Зсув вліво зазвичай означає, що тестування слід проводити раніше (наприклад, не чекати, поки код буде реалізовано або компоненти будуть інтегровані), але це не означає, що тестуванням пізніше в SDLC слід нехтувати.
Є кілька хороших практик, які ілюструють, як досягти «зсуву вліво» під час тестування, зокрема:
- Перегляд специфікації з точки зору тестування. Ці перевірки специфікацій часто виявляють потенційні дефекти, такі як двозначність, неповнота та невідповідності
- Написання тестів перед написанням коду та виконання коду в тестовій системі під час впровадження коду
- Використання CI та навіть кращого CD, оскільки він надається зі швидким відгуком і автоматизованими тестами компонентів, які супроводжують вихідний код, коли він надсилається до репозиторія
- Завершення статичного аналізу вихідного коду перед динамічним тестуванням або як частина автоматизованого процесу
- Виконання нефункціонального тестування, починаючи з рівня тестування компонентів, де це можливо. Це форма зсуву вліво, оскільки ці нефункціональні типи тестів зазвичай виконуються пізніше в SDLC, коли доступна повна система та репрезентативне тестове середовище
- Підхід зі зрушенням уліво може призвести до додаткового навчання, зусиль на ранніх етапах процесу, але очікується, що він заощадить зусилля пізніше в процесі.
- Для підходу зрушення вліво важливо, щоб зацікавлені сторони були переконані та підтримали цю концепцію.
Ретроспективи та покращення процесу (версія 4.0)
Ретроспективи (також відомі як «постпроєктні зустрічі» та ретроспективи проєкту) часто проводяться в кінці проєкту або ітерації, на етапі випуску або можуть проводитися за потреби. Час і організація ретроспектив залежать від конкретної моделі SDLC. На цих зустрічах учасники (не лише тестувальники, а й, наприклад, розробники, архітектори, власники продуктів, бізнес-аналітики) обговорюють:
- Що було успішним і що варто зберегти?
- Що не вдалось і можна було б покращити?
- Як запровадити вдосконалення та зберегти успіхи в майбутньому?
Серед типових переваг для тестування виділяють:
- Підвищення результативності/ефективності тестування (наприклад, за допомогою впровадження пропозицій щодо вдосконалення процесу)
- Підвищення якості програмного забезпечення для тестування (наприклад, шляхом спільного перегляду процесів тестування)
- Згуртування команди та навчання (наприклад, у результаті можливості розв’язати проблему та запропонувати покращення)
- Покращена якість тестової бази (наприклад, оскільки недоліки в обсязі та якості вимог можуть бути розглянуті та вирішені) Краща співпраця між розробкою та тестуванням (наприклад, оскільки взаємодія регулярно перевіряється та оптимізується)
В цьому відео починаємо працювати з секцією 2.1.
00:01:11 Моделі життєвого циклу розробки програмного забезпечення (визначення)
00:02:08 Розробка і тестування програмного забезпечення
00:18:09 Моделі життєвого циклу розробки програмного забезпечення в контексті
00:27:18 Тестування в контексті Моделі життєвого циклу розробки програмного забезпечення
00:39:51 Життєвий цикл розробки програмного забезпечення і якісні тестові практики
00:43:07 Тестування як драйвер для Розробки програмного забезпечення
00:50:59 Девопс та тестування
01:00:22 Підхід “зсув-вліво”
01:07:00 Ретроспектива і покращення процесу