В цьому відео робиться спроба розібрати кілька десятків питань по другому розділу сілабуса ISTQB CTFL.
Всі питання з відео з правильними відповідями наводяться нижче.
Question 1
Which of the following is a test type?
Component testing
Functional testing
Acceptance testing
System testing
Question 2
Which option best describes objectives for test levels with a life cycle model?
Objectives should be generic for any test level.
Each level has objectives specific to that level.
The objectives of a test level don’t need to be defined in advance.
Objectives are the same for each test level.
Question 3
A regression test:
Will check unchanged areas of the software to see if they have been affected.
Will check changed areas of the software to see if they have been affected.
Will always be automated.
Is only run once.
Question 4
The four test levels defined for a common V-model testing approach are:
Unit, integration, system and maintenance.
Functional, glass box, incremental and maintenance.
Component, integration, system and acceptance.
Unit, component, functional and alpha/beta
Question 5
According to the ISTQB Glossary, regression testing is required for what purpose?
To prevent a task from being incorrectly considered completed.
To motivate better unit testing by the programmers
To ensure that defects have not been introduced by a modification
To verify the success of corrective actions.
Question 6
Beta testing is:
Performed by customers at the software developer’s site.
Useful to test software developed for a specific customer or user.
Performed by an independent test team.
Performed by customers at their own site.
Question 7
Alpha testing is:
Post-release testing by end user representatives at the developer`s site.
Pre-release testing by end user representatives at their sites.
The first testing that is performed.
Pre-release testing by end user representatives at the developer’s site.
Question 8
System Integration testing in the large involves:
Testing the system when combined with other systems.
Testing a system with a large number of users.
Combing software components and testing them in one go.
Testing a sub-system using stubs and drivers.
Question 9
Non-functional testing includes:
Testing a system feature using only the software required for that function.
Testing the quality attributes of the system including reliability and usability.
Testing to see where the system does not function correctly.
Gaining user approval for the system.
Question 10
Component testing may include
Sociability testing.
User acceptance testing.
Beta testing.
The use of stubs and drivers.
Question 11
Regression testing always involves
Executing a large number of different tests.
Using a test automation tool.
Testing whether a known software fault been fixed.
Testing whether modifications have introduced adverse side effects.
Question 12
Regression testing should be performed: I. Every week. II. After the software has changed. III. As often as possible. IV. When the environment has changed. V. When the project manager says.
II, III & IV are true, I & V are false.
II is true, I, III, IV & V are false.
I & II are true, III, IV & V are false.
II & IV are true, I, III & V are false.
Question 13
System testing is:
Used to search for defects in software modules that are separately testable.
The responsibility of the users of a system.
Concerned with the behavior of a whole system/product as defined by the scope of a development project.
Triggered by modifications, migration or retirement of the software system.
Question 14
System testing should investigate
Non-functional requirements or Functional requirements
Non-functional requirements only not Functional requirements
Functional requirements only not non-functional requirements
Non-functional requirements and Functional requirements
Question 15
What are good practices for testing within the development life cycle?
Early test analysis and design.
Different test levels are defined with specific objectives.
Testers will start to get involved as soon as coding is done.
A and B.
Question 16
Validation involves which of the following (i.) Helps to check the Quality of the Built Product. (ii.) Helps to check that we have built the right product. (iii.) Helps in developing the product. (iv.)Monitoring tool wastage and obsoleteness.
i,ii,iii are true and iv is false
Options i,ii,iii,iv are true.
iii is true and i,ii,iv are false.
ii is true and i,iii,iv are false.
Question 17
Verification involves which of the following : (i.) Helps to check the Quality of the built product (ii.) Helps to check that we have built the right product. (iii.) Helps in developing the product (iv.) Monitoring tool wastage and obsoleteness.
ii is true and i,iii,iv are false.
i is true and ii,iii,iv are false
Options i,ii,iii,iv are true.
i,ii,iii are true and iv is false
Question 18
What is the MAIN benefit of designing tests early in the life cycle?
It is cheaper than designing tests during the test phases.
Tests designed early are more effective than tests designed later.
It helps prevent defects from being introduced into the code.
It saves time during the testing phases when testers are busy.
Question 19
When a defect is detected and fixed then the software should be retested to confirm that the original defect has been successfully removed. This is called
Regression testing.
Maintenance testing.
Confirmation testing.
None of the above.
Question 20
Which of the following are characteristic of regression testing? (i) Regression testing is run ONLY once (ii) Regression testing is used after fixes have been made (iii) Regression testing is often automated (iv) Regression tests need not be maintained
i, iii, iv.
ii, iii.
iii.
ii, iv.
Question 21
Which of the following is a nonfunctional quality characteristic?
Usability
Maintenance
Feasibility
Regression
Question 22
Which of the following combinations correctly describes a valid approach to component testing: (i.) Functional testing of the component in isolation. (ii.) Structure-based testing of the code without recording incidents. (iii.) Automated tests that are run until the component passes. (iv.) Functional testing of the interfaces between modules.
iii.
i and ii.
ii and iv
i, ii and iii
Question 23
Which one of the following statements about system testing is NOT true?
End-users should be involved in system tests.
Faults found during system tests can be very expensive to fix.
System tests are often performed by independent teams.
Functional testing is used more than structural testing.
Після розгортання у виробничих середовищах програмне забезпечення та системи потребують обслуговування. Зміни різного роду майже неминучі в наданому програмному забезпеченні та системах, або для виправлення дефектів, виявлених під час оперативного використання, для додавання нових функціональних можливостей, або для видалення чи зміни вже наданих функціональних можливостей. Технічне обслуговування також необхідне для збереження або покращення нефункціональних якісних характеристик компонента або системи протягом терміну служби, особливо продуктивності, сумісності, надійності, безпеки та портативності.
Коли вносяться будь-які зміни в рамках технічного обслуговування, необхідно провести тестування технічного обслуговування, щоб оцінити успішність внесених змін і перевірити можливі побічні ефекти (наприклад, регресії) у частинах системи, які залишаються незмінними (що зазвичай є більшою частиною системи).
Технічне обслуговування може включати заплановані та незаплановані випуски (гарячі виправлення).
Реліз обслуговування може вимагати тестування обслуговування на кількох рівнях тестування з використанням різних типів тестування залежно від його обсягу. Обсяг технічного обслуговування залежить від:
Ступіню ризику зміни, наприклад, ступінь зв’язку зміненої області програмного забезпечення з іншими компонентами чи системами
Розмір існуючої системи
Розмір зміни
Тригери для супроводу
Існує кілька причин, чому технічне обслуговування програмного забезпечення, а отже, тестування супроводу, має місце як для запланованих, так і для незапланованих змін.
Модифікації, такі як заплановані вдосконалення (наприклад, на основі випуску), коригування та екстрені зміни, зміни робочого середовища (наприклад, заплановані оновлення операційної системи або бази даних), оновлення програмного забезпечення COTS та виправлення дефектів і вразливостей
Міграція, наприклад, з однієї платформи на іншу, яка може вимагати операційних тестів нового середовища, а також зміненого програмного забезпечення, або тестів перетворення даних, коли дані з іншої програми будуть перенесені в систему, що обслуговується.
Вихід з експлуатації, наприклад, коли програма досягає кінця свого життя. Якщо програму або систему виведено з експлуатації, це може вимагати тестування міграції даних або архівування, якщо потрібні тривалі періоди зберігання даних.
Також може знадобитися перевірка процедур відновлення після архівування протягом тривалого періоду зберігання.
може знадобитися регресійне тестування, щоб переконатися, що будь-які функції, які залишаються в системі, все ще працюють.
Для систем Інтернету речей тестування технічного обслуговування може бути викликано впровадженням абсолютно нових або модифікованих речей, таких як апаратні пристрої та програмні служби, у загальну систему. Тестування технічного обслуговування для таких систем приділяє особливу увагу тестуванню інтеграції на різних рівнях (наприклад, рівень мережі, рівень програми) та аспектам безпеки, зокрема тим, що стосуються персональних даних.
Аналізу впливу для супроводу
Аналіз впливу оцінює зміни, внесені в релізі для обслуговування, щоб визначити передбачувані наслідки, а також очікувані й можливі побічні ефекти змін, а також визначити області системи, на які вплинуть зміни. Аналіз впливу також може допомогти визначити вплив зміни на існуючі тести. Побічні ефекти та уражені області в системі потрібно перевірити на регресії, можливо, після оновлення будь-яких існуючих тестів, на які вплинула зміна.
Аналіз впливу може бути проведений до внесення змін, щоб допомогти вирішити, чи слід вносити зміни, виходячи з потенційних наслідків в інших областях системи.
Аналіз впливу може бути складним, якщо:
Специфікації (наприклад, бізнес-вимоги, історії користувачів, архітектура) застаріли або відсутні
Тестові випадки не задокументовані або застаріли
Двонаправлена відстежуваність між тестами та тестовою основою не підтримується
Підтримка інструментів слабка або відсутня
Залучені люди не володіють предметними знаннями або знанням системи
Під час розробки недостатньо уваги приділено зручності супроводу програмного забезпечення
Тестування супроводу (версія 4.0)
Існують різні категорії технічного обслуговування, воно може бути коригуючим, адаптованим до змін у середовищі або покращувати продуктивність або зручність обслуговування (ISO/IEC 14764), тому технічне обслуговування може включати заплановані випуски/розгортання та незаплановані випуски/розгортання (гарячі виправлення) . Аналіз впливу може бути проведений до внесення змін, щоб допомогти вирішити, чи слід вносити зміни, виходячи з потенційних наслідків в інших областях системи. Тестування змін у системі в робочому стані включає як оцінку успішності впровадження змін, так і перевірку можливих регресій у частинах системи, які залишаються незмінними (як правило, більша частина системи).
Обсяг технічного обслуговування зазвичай залежить від:
Ступінь ризику зміни
Розмір існуючої системи
Розмір зміни
Тригери для технічного обслуговування та тестування технічного обслуговування можна класифікувати таким чином:
Зміни, такі як заплановані вдосконалення (тобто на основі випуску), коригувальні зміни або гарячі виправлення.
Оновлення або міграція робочого середовища, наприклад, з однієї платформи на іншу, що може вимагати тестування, пов’язаного з новим середовищем, а також зміненого програмного забезпечення, або тестування перетворення даних, коли дані з іншої програми переносяться в систему.
Вихід з експлуатації, наприклад, коли програма досягає кінця свого життя. Коли система виводиться з експлуатації, це може вимагати тестування архівування даних, якщо потрібні тривалі періоди зберігання даних. Тестування процедур відновлення та пошуку після архівування також може знадобитися, якщо під час архівування потрібні певні дані.
В цьому відео починаємо працювати з секцією 2.4. 00:01:26 Тестування підтримки (Maintenance testing) 00:05:46 Тригери для підтримки(обслуговування) Triggers for Maintenance 00:14:14 Аналіз впливу для підтримки (осблуговування) 00:20:09 Maintenance Testing (v 4.0)
Тип тестування — це група тестових дій, спрямованих на перевірку конкретних характеристик програмної системи або частини системи на основі конкретних цілей тестування. Такі цілі можуть включати:
Оцінка характеристик функціональної якості, таких як повнота, правильність і відповідність
Оцінка нефункціональних характеристик якості, таких як надійність, продуктивність, безпека, сумісність і зручність використання
Оцінка того, чи структура або архітектура компонента чи системи є правильною, повною та відповідає вимогам
Оцінка наслідків змін, як-от підтвердження того, що дефекти виправлено (підтверджувальне тестування) та пошук ненавмисних змін у поведінці внаслідок змін програмного забезпечення чи середовища (регресійне тестування)
Функціональне тестування
Функціональне тестування системи включає тести, які оцінюють функції, які система повинна виконувати. Функціональні вимоги можуть бути описані в робочих продуктах, таких як специфікації бізнес-вимог, епіки, історії користувачів, варіанти використання або функціональні специфікації, або вони можуть бути незадокументованими. Функції – це «те, що» повинна робити система.
Функціональні тести слід виконувати на всіх рівнях тестування (наприклад, тести для компонентів можуть базуватися на специфікації компонентів), хоча фокус на кожному рівні різний.
Функціональне тестування розглядає поведінку програмного забезпечення, тому методи чорної скриньки можуть бути використані для отримання умов тестування та тестових випадків для функціональності компонента чи системи.
Ретельність функціонального тестування можна виміряти за допомогою функціонального покриття. Функціональне покриття – це ступінь, до якого певна функціональність була використана тестами, і виражається у відсотках від типу покритого елемента. Наприклад, використовуючи відстежуваність між тестами та функціональними вимогами, можна розрахувати відсоток цих вимог, які охоплюються тестуванням, потенційно виявивши прогалини в покритті.
Розробка та виконання функціональних тестів може вимагати спеціальних навичок або знань, таких як знання конкретної бізнес-проблеми, яку вирішує програмне забезпечення (наприклад, програмне забезпечення для геологічного моделювання для нафтової та газової промисловості).
Нефункціональне тестування
Нефункціональне тестування системи оцінює характеристики систем і програмного забезпечення, такі як зручність використання, ефективність продуктивності або безпека. Нефункціональне тестування — це перевірка того, «наскільки добре» поводиться система.
Всупереч поширеній помилковій думці, нефункціональне тестування можна і часто потрібно проводити на всіх рівнях тестування, і робити це якомога раніше. Пізнє виявлення нефункціональних дефектів може бути надзвичайно небезпечним для успіху проекту.
Методи чорної скриньки можуть бути використані для отримання умов тестування та тестових кейсів для нефункціонального тестування. Наприклад, аналіз граничних значень можна використовувати для визначення умов напруги для тестування продуктивності.
Ретельність нефункціонального тестування можна виміряти за допомогою нефункціонального покриття. Нефункціональне покриття – це ступінь, до якого певний тип нефункціонального елемента перевіряється тестами, і виражається у відсотках від типу покритого елемента. Наприклад, використовуючи відстеження між тестами та підтримуваними пристроями для мобільної програми, можна обчислити відсоток пристроїв, які розглядаються тестуванням на сумісність, потенційно виявивши прогалини в охопленні.
Розробка та виконання нефункціонального тесту може включати спеціальні навички чи знання, такі як знання притаманних недоліків дизайну чи технології (наприклад, уразливості безпеки, пов’язані з певними мовами програмування) або конкретної бази користувачів (наприклад, персоналії користувачів системи управління закладом охорони здоров’я).
Тестування білої скриньки
Тестування білої скриньки виводить тести на основі внутрішньої структури або реалізації системи. Внутрішня структура може включати код, архітектуру, робочі процеси або потоки даних у системі.
Ретельність тестування білої скриньки можна виміряти через структурне покриття. Структурне покриття — це ступінь, до якого певний тип структурного елемента перевірено тестами, і виражається у відсотках від типу охопленого елемента.
На рівні тестування компонентів охоплення коду базується на відсотку перевіреного коду компонента та може вимірюватися з точки зору різних аспектів коду (елементів охоплення), таких як відсоток виконуваних операторів, протестованих у компоненті, або відсоток перевірених результатів рішення. Ці типи покриття разом називають покриттям коду. На рівні тестування інтеграції компонентів тестування білої скриньки може ґрунтуватися на архітектурі системи, наприклад на інтерфейсах між компонентами, а структурне покриття може вимірюватися у відсотках інтерфейсів, які перевіряються тестами.
Розробка та виконання тесту «білої скриньки» може включати спеціальні навички чи знання, наприклад спосіб створення коду, спосіб зберігання даних (наприклад, для оцінки можливих запитів до бази даних), а також те, як використовувати інструменти покриття та правильно інтерпретувати їхні результати.
Тестування пов’язане зі змінами
Коли в систему вносяться зміни або для виправлення дефекту, або через нову чи змінену функціональність, слід провести тестування, щоб підтвердити, що зміни виправили дефект або реалізували функціональні можливості належним чином і не спричинили жодних непередбачуваних несприятливих наслідків.
Підтверджуюче тестування: після усунення дефекту програмне забезпечення можна перевірити за допомогою всіх тестових кейсів, які не пройшли через дефект, які слід повторно виконати на новій версії програмного забезпечення. Програмне забезпечення також може бути перевірено за допомогою нових тестів, щоб охопити зміни, необхідні для усунення дефекту. Щонайменше кроки для відтворення помилок, викликаних дефектом, необхідно виконати повторно в новій версії програмного забезпечення. Метою підтверджувального тесту є підтвердження того, чи було успішно виправлено початковий дефект.
Регресійне тестування: можливо, що зміна, внесена в одну частину коду, будь то виправлення чи зміна іншого типу, може випадково вплинути на поведінку інших частин коду, незалежно від того, в межах того самого компонента, в інших компонентах тій же системі або навіть в інших системах. Зміни можуть включати зміни в середовищі, такі як нова версія операційної системи або системи керування базами даних. Такі ненавмисні побічні ефекти називаються регресією. Регресійне тестування передбачає виконання тестів для виявлення таких небажаних побічних ефектів.
Особливо в ітераційних і поетапних життєвих циклах розробки (наприклад, Agile), нові функції, зміни існуючих функцій і рефакторинг коду призводять до частих змін коду, що також вимагає тестування, пов’язаного зі змінами. Через те, що система розвивається, підтверджуюче та регресійне тестування є дуже важливими. Це особливо важливо для систем Інтернету речей, де окремі об’єкти (наприклад, пристрої) часто оновлюються або замінюються.
Набори регресійних тестів виконуються багато разів і, як правило, розвиваються повільно, тому регресійне тестування є сильним кандидатом на автоматизацію. Автоматизацію цих тестів слід починати на ранніх стадіях проекту.
Тестові типи та тестові рівні
Можна виконати будь-який із зазначених вище типів тестів на будь-якому рівні тестування. Для ілюстрації приклади функціональних, нефункціональних, і тестів білої скриньки, пов’язаних зі змінами, будуть наведені на всіх рівнях тестування для банківської програми, починаючи з функціональних тестів:
Для тестування компонентів тести розроблені на основі того, як компонент має обчислювати складні відсотки.
Для тестування інтеграції компонентів тести розроблені на основі того, як інформація облікового запису, отримана в інтерфейсі користувача, передається до бізнес-логіки.
Для тестування системи тести розроблені на основі того, як власники рахунків можуть подати заявку на отримання кредитної лінії на своїх поточних рахунках.
Для тестування інтеграції системи тести розроблено на основі того, як система використовує зовнішній мікросервіс для перевірки кредитної оцінки власника облікового запису.
Для перевірки приймання тести розроблені на основі того, як банкір розглядає схвалення або відхилення кредитної заявки.
Нижче наведено приклади нефункціональних тестів:
Для тестування компонентів тести продуктивності призначені для оцінки кількості циклів процесора, необхідних для виконання складного розрахунку сумарних відсотків.
Для тестування інтеграції компонентів тести безпеки призначені для вразливості переповнення буфера через дані, що передаються від інтерфейсу користувача до бізнес-логіки.
Для тестування системи тести переносимості призначені для перевірки того, чи рівень презентації працює на всіх підтримуваних браузерах і мобільних пристроях.
Для тестування системної інтеграції тести надійності призначені для оцінки надійності системи, якщо мікросервіс кредитної оцінки не відповідає.
Для приймального тестування тести на зручність використання призначені для оцінки доступності інтерфейсу банківської обробки кредитів для людей з обмеженими можливостями.
Нижче наведено приклади тестів білої скриньки:
Для тестування компонентів тести розроблені для досягнення повного охоплення операторів і рішень для всіх компонентів, які виконують фінансові розрахунки.
Для тестування інтеграції компонентів тести призначені для визначення того, як кожен екран в інтерфейсі браузера передає дані на наступний екран і в бізнес-логіку.
Для тестування системи тести призначені для охоплення послідовностей веб-сторінок, які можуть з’являтися під час подачі заявки на кредитну лінію.
Для тестування системної інтеграції тести розроблені для виконання всіх можливих типів запитів, надісланих до мікросервісу кредитних оцінок.
Для приймального тестування тести розроблено для охоплення всіх підтримуваних структур файлів фінансових даних і діапазонів значень для міжбанківських переказів.
Нижче наведено приклади тестів, пов’язаних зі змінами:
Для тестування компонентів автоматизовані регресійні тести створюються для кожного компонента та включаються в структуру безперервної інтеграції.
Для тестування інтеграції компонентів тести призначені для підтвердження виправлень пов’язаних з інтерфейсом дефектів, коли виправлення перевіряються в сховищі коду.
Для тестування системи всі тести для даного робочого циклу виконуються повторно, якщо будь-який екран цього робочого процесу змінюється.
Для тестування системної інтеграції тести програми, яка взаємодіє з мікросервісом оцінки кредитоспроможності, повторно виконуються щодня в рамках безперервного розгортання цього мікросервісу.
Для приймального тестування всі попередньо невдалі тести виконуються повторно після усунення дефекту, виявленого під час приймального тестування.
Хоча в цьому розділі наведено приклади кожного типу тесту на кожному рівні, для всього програмного забезпечення необов’язково мати кожен тип тесту на кожному рівні. Однак важливо запускати відповідні типи тестів на кожному рівні, якомога раніше.
Типи тестування (версія 4.0)
Існує багато типів тестування, які можна застосовувати в проєктах. У цьому сілабусі розглядаються наступні чотири типи тестів: функціональне тестування, нефункціональне тестування, тестування чорної скриньки, тестування білої скриньки.
Функціональне тестування оцінює функції, які повинен виконувати компонент або система. Функції – це «те, що» повинен робити тестовий об’єкт. Основною метою функціонального тестування є перевірка функціональної повноти, функціональної правильності та функціональної відповідності.
Нефункціональне тестування оцінює атрибути, відмінні від функціональних характеристик компонента або системи. Нефункціональне тестування — це перевірка того, «наскільки добре поводиться система». Основною метою нефункціонального тестування є перевірка характеристик якості нефункціонального програмного забезпечення. Стандарт ISO/IEC 25010 надає таку класифікацію характеристик якості нефункціонального програмного забезпечення:
Ефективність виконання
Сумісність
Зручність використання
Надійність
Безпека
Ремонтопридатність
Портативність
Іноді нефункціональне тестування доцільно розпочинати на ранніх стадіях життєвого циклу (наприклад, як частину перевірки та тестування компонентів або тестування системи). Багато нефункціональних тестів є похідними від функціональних тестів, оскільки вони використовують ті самі функціональні тести, але перевіряють, що під час виконання функції виконується нефункціональне обмеження (наприклад, перевірка того, що функція виконується протягом заданого часу, або функція може перенести на нову платформу). Пізнє виявлення нефункціональних дефектів може становити серйозну загрозу для успіху проєкту. Для нефункціонального тестування іноді потрібне дуже специфічне тестове середовище, наприклад лабораторія зручності використання для тестування зручності використання.
Тестування чорної скриньки базується на специфікаціях і одержує тести з документації щодо об’єкта тестування. Основна мета тестування чорної скриньки — перевірити поведінку системи на відповідність її специфікаціям.
Тестування білої скриньки базується на структурі та виводить тести з реалізації або внутрішньої структури системи (наприклад, коду, архітектури, робочих процесів і потоків даних). Основна мета тестування білої скриньки — охопити базову структуру тестами до прийнятного рівня.
Усі чотири вищезазначені типи тестування можна застосовувати до всіх рівнів тестування, хоча фокус буде різним на кожному рівні. Різні методи тестування можуть бути використані для отримання тестових умов і тестових випадків для всіх згаданих типів тестування.
Тестування і зміни (v 4.0)
Зміни, як правило, вносяться до компонента чи системи, щоб або покращити його, додавши нову функцію, або виправити це, усунувши дефект. Тоді тестування має також включати тестування на підтвердження та регресійне тестування.
Підтверджувальне тестування підтверджує, що початковий дефект було успішно виправлено. Залежно від ризику можна протестувати виправлену версію програмного забезпечення кількома способами, зокрема:
виконання всіх тестових прикладів, які раніше були невдалими через дефект, або також через
додавання нових тестів для покриття будь-яких змін, необхідних для усунення дефекту
Однак, коли для усунення дефектів бракує часу або грошей, перевірка підтвердження може бути обмежена простим виконанням кроків, які повинні відтворити збій, викликаний дефектом, і перевіркою того, що збій не виникає.
Регресійне тестування підтверджує відсутність несприятливих наслідків через зміни, включаючи виправлення, яке вже пройшло підтверджувальне тестування. Ці несприятливі наслідки можуть вплинути на той самий компонент, де було внесено зміни, інші компоненти в тій же системі або навіть інші підключені системи. Регресійне тестування може не обмежуватися самим тестовим об’єктом, але також може бути пов’язане з навколишнім середовищем. Бажано спочатку виконати аналіз впливу, щоб оптимізувати обсяг регресійного тестування. Аналіз впливу показує, на які частини програмного забезпечення це може вплинути.
Набори регресійних тестів виконуються багато разів, і зазвичай кількість регресійних тестів зростатиме з кожною ітерацією або випуском, тому регресійне тестування є сильним кандидатом на автоматизацію. Автоматизацію цих тестів слід починати на ранніх стадіях проєкту. Там, де використовується CI, наприклад у DevOps, доцільно також включити автоматизовані регресійні тести. Залежно від ситуації це може включати регресійні тести на різних рівнях.
Підтверджувальне тестування та регресійне тестування об’єкта тестування необхідно на всіх рівнях тестування, якщо на цих рівнях тестування виправлено дефекти або внесено зміни.
В цьому відео починаємо працювати з секцією 2.3. 00:00:43 Типи тестування 00:03:12 Функціональне тестування 00:07:18 Нефункціональне тестування 00:12:15 Тестування білої скриньки 00:17:04 Тестування пов’язане зі змінами 00:24:35 Типи тестування та Рівні тестування 00:37:39 Типи тестування (v 4.0)
Рівні тестування – це групи тестових дій, які організовуються та керуються разом. Кожен рівень тестування — це екземпляр процесу тестування, що виконується стосовно програмного забезпечення на даному рівні розробки, від окремих одиниць або компонентів до повних систем. Рівні тестування пов’язані з іншими діями в рамках життєвого циклу розробки програмного забезпечення. Виділяють такі рівні тестування:
Тестування компонентів
Інтеграційне тестування
Тестування системи
Приймальне тестування
Рівні тесту характеризуються такими ознаками:
Конкретні цілі
Основа тестування, на яку посилаються для отримання тестових випадків
Тестовий об’єкт (тобто те, що тестується)
Типові дефекти та збої
Специфічні підходи та відповідальність
Для кожного рівня тестування потрібне відповідне тестове середовище. Наприклад, під час приймального тестування ідеальним є тестове середовище, схоже на робоче, тоді як у компонентному тестуванні розробники зазвичай використовують власне середовище розробки.
Component Testing
Цілі компонентного тестування
Тестування компонентів (також відоме як модульне або юніт тестування) зосереджується на компонентах, які можна тестувати окремо. Цілі тестування компонентів включають:
Зменшення ризику
Перевірка того, чи функціональна та нефункціональна поведінка компонента відповідає специфікації
Побудова впевненості в якості компонента
Виявлення дефектів у компоненті
Запобігання виходу дефектів на вищі рівні тестування
У деяких випадках, особливо в поетапних і ітеративних моделях розробки (наприклад, Agile), де тривають зміни коду, автоматизовані регресійні тести компонентів відіграють ключову роль у зміцненні впевненості в тому, що зміни не пошкодили існуючі компоненти.
Тестування компонентів часто виконується ізольовано від решти системи, залежно від моделі життєвого циклу розробки програмного забезпечення та системи, для чого можуть знадобитися макетні об’єкти, віртуалізація служб, джгути, заглушки та драйвери. Тестування компонентів може охоплювати функціональні можливості (наприклад, правильність обчислень), нефункціональні характеристики (наприклад, пошук витоків пам’яті) і структурні властивості (наприклад, тестування рішень).
Тестова база
Приклади робочих продуктів, які можна використовувати як тестову базу для тестування компонентів, включають:
Детальний дизайн
Код
Модель даних
Характеристики компонентів
Об’єкти тестування
Типові тестові об’єкти для тестування компонентів включають:
Компоненти, вузли або модулі
Код і структури даних
Класи
Модулі бази даних
Дефекти, як правило, усуваються відразу після їх виявлення, часто без офіційного управління дефектами. Однак коли розробники повідомляють про дефекти, це надає важливу інформацію для аналізу першопричини та вдосконалення процесу.
Конкретні підходи та відповідальність
Тестування компонентів зазвичай виконує розробник, який написав код, але для цього принаймні потрібен доступ до тестованого коду. Розробники можуть чергувати розробку компонента з пошуком і виправленням дефектів. Розробники часто пишуть і виконують тести після написання коду для компонента. Однак, особливо в гнучкій розробці, написання автоматизованих тестових випадків компонентів може передувати написанню програмного коду.
Наприклад, розглянемо розробку, керовану тестуванням (TDD). Розробка, орієнтована на тестування, є високоітеративною та базується на циклах розробки автоматизованих тестових випадків, потім створення та інтеграції невеликих фрагментів коду, а потім виконання тестів компонентів, виправлення будь-яких проблем і рефакторинг коду. Цей процес триває до тих пір, поки компонент не буде повністю зібрано та всі компоненти не пройдуть тестування. Розробка, орієнтована на тестування, є прикладом підходу «спочатку тестування». Хоча розробка, керована тестуванням, виникла в eXtreme Programming (XP), вона поширилася на інші форми Agile, а також на послідовні життєві цикли.
Integration Testing
Цілі інтеграційного тестування
Інтеграційне тестування фокусується на взаємодії між компонентами або системами. Цілі інтеграційного тестування включають:
Зменшення ризику
Перевірка того, чи функціональна та нефункціональна поведінка інтерфейсів відповідає дизайну та специфікаціям
Побудова впевненості в якості інтерфейсів
Пошук дефектів (які можуть бути в самих інтерфейсах або всередині компонентів чи систем)
Запобігання виходу дефектів на вищі рівні тестування
Як і у випадку з тестуванням компонентів, у деяких випадках автоматизовані регресійні тести інтеграції забезпечують впевненість у тому, що зміни не порушили існуючі інтерфейси, компоненти чи системи.
Виділяють два різних рівня інтеграційного тестування, яке можна проводити на об’єктах тестування різного розміру, як описано нижче:
Тестування інтеграції компонентів фокусується на взаємодії та інтерфейсах між інтегрованими компонентами. Тестування інтеграції компонентів виконується після тестування компонентів і, як правило, автоматизоване. При ітераційній та поетапній розробці тести інтеграції компонентів зазвичай є частиною процесу безперервної інтеграції.
Тестування системної інтеграції фокусується на взаємодії та інтерфейсах між системами, пакетами та мікросервісами. Тестування системної інтеграції також може охоплювати взаємодію із зовнішніми організаціями (наприклад, веб-сервісами) та інтерфейси, які надаються ними. У цьому випадку організація-розробник не контролює зовнішні інтерфейси, що може створювати різні проблеми для тестування (наприклад, забезпечення усунення дефектів блокування тесту в коді зовнішньої організації, організація тестових середовищ тощо). Тестування системної інтеграції може проводитися після тестування системи або паралельно з поточними діями з тестування системи (як у послідовному, так і в ітеративному та поетапному розвитку).
Тестова база
Приклади робочих продуктів, які можна використовувати як тестову основу для інтеграційного тестування, включають:
Проєктування програмного забезпечення та системи
Діаграми послідовності
Специфікації інтерфейсу та протоколу зв’язку
Варіанти використання
Архітектура на рівні компонентів або системи
Робочі процеси
Визначення зовнішнього інтерфейсу
Об’єкти тестування
Типові тестові об’єкти для інтеграційного тестування включають:
Підсистеми
Бази даних
Інфраструктура
Інтерфейси
API
Мікросервіси
Типові дефекти та збої
Приклади типових дефектів і несправностей для тестування інтеграції компонентів включають:
Неправильні дані, відсутні дані або неправильне кодування даних
Неправильна послідовність або час викликів інтерфейсу
Невідповідність інтерфейсу
Збої в зв’язку між компонентами
Необроблені або неправильно оброблені збої зв’язку між компонентами
Неправильні припущення щодо значення, одиниць або меж даних, що передаються між компонентами
Приклади типових дефектів і збоїв для тестування системної інтеграції включають:
Неузгоджені структури повідомлень між системами
Неправильні дані, відсутні дані або неправильне кодування даних
Невідповідність інтерфейсу
Збої в зв’язку між системами
Необроблені або неправильно оброблені збої зв’язку між системами
Неправильні припущення щодо значення, одиниць або меж даних, що передаються між системами
Недотримання обов’язкових правил безпеки
Конкретні підходи та відповідальність
Тести інтеграції компонентів і тести інтеграції системи повинні зосереджуватися на самій інтеграції. Наприклад, у разі інтеграції модуля A з модулем B тести повинні зосереджуватися на зв’язку між модулями, а не на функціональності окремих модулів, оскільки це повинно бути розглянуто під час тестування компонентів. У разі інтеграції системи X із системою Y тести повинні зосереджуватися на зв’язку між системами, а не на функціональності окремих систем, оскільки це повинно бути розглянуто під час тестування системи. Застосовуються функціональні, нефункціональні та структурні типи випробувань.
Тестування інтеграції компонентів часто є обов’язком розробників. Тестування системної інтеграції зазвичай є обов’язком тестувальників. В ідеалі тестувальники, які виконують тестування інтеграції системи, повинні розуміти архітектуру системи та впливати на планування інтеграції.
Якщо інтеграційні тести та стратегія інтеграції плануються до створення компонентів або систем, ці компоненти або системи можна створювати в порядку, необхідному для найбільш ефективного тестування. Стратегії системної інтеграції можуть базуватися на архітектурі системи (наприклад, «зверху вниз» і «знизу вгору»), функціональних завданнях, послідовності обробки транзакцій або деяких інших аспектах системи чи компонентів. Щоб спростити ізоляцію дефектів і виявити дефекти на ранній стадії, інтеграція, як правило, повинна бути поступовою (тобто невелика кількість додаткових компонентів або систем одночасно), а не «великий вибух» (тобто інтеграція всіх компонентів або систем за один крок) . Аналіз ризиків найскладніших інтерфейсів може допомогти зосередити інтеграційне тестування.
Чим ширший обсяг інтеграції, тим важче стає ізолювати дефекти певного компонента чи системи, що може призвести до збільшення ризику та додаткового часу для усунення несправностей. Це одна з причин того, що безперервна інтеграція, коли програмне забезпечення інтегрується покомпонентно (тобто функціональна інтеграція), стала звичайною практикою. Така безперервна інтеграція часто включає автоматичне регресійне тестування, в ідеалі на кількох рівнях тестування.
Системне тестування
Цілі системного тестування
Тестування системи зосереджується на поведінці та можливостях усієї системи або продукту, часто враховуючи наскрізні завдання, які система може виконувати, і нефункціональну поведінку, яку вона демонструє під час виконання цих завдань. Цілі тестування системи включають:
Зменшення ризику
Перевірка того, чи функціональна та нефункціональна поведінка системи відповідає розробленим і специфікованим
Перевірка того, що система повна і працюватиме належним чином
Формування впевненості в якості системи в цілому
Пошук дефектів
Запобігання виходу дефектів на вищі рівні тестування або виробництва
Для певних систем перевірка якості даних також може бути метою. Подібно до тестування компонентів і тестування інтеграції, у деяких випадках автоматичні регресійні тести системи дають впевненість, що зміни не порушили існуючі функції чи наскрізні можливості. Тестування системи часто створює інформацію, яка використовується зацікавленими сторонами для прийняття рішень про випуск. Тестування системи також може задовольняти законодавчі чи нормативні вимоги або стандарти.
Тестове середовище в ідеалі має відповідати кінцевому цільовому або робочому середовищу.
Тестова база
Приклади робочих продуктів, які можна використовувати як тестову основу для тестування системи, включають:
Специфікації вимог до системи та програмного забезпечення (функціональні та нефункціональні)
Звіти про аналіз ризиків
Варіанти використання (Use cases)
Епіки та історії користувачів
Моделі поведінки системи
Діаграми стану
Системні інструкції та посібники користувача
Об’єкти тестування
Типові тестові об’єкти для тестування системи включають:
Додатки
Апаратні/програмні системи
Операційні системи
Система, яка тестується (SUT – System under test)
Конфігурація системи та конфігураційні дані
Типові дефекти та збої
Приклади типових дефектів і збоїв для тестування системи включають:
Неправильні розрахунки
Неправильна або несподівана функціональна або нефункціональна поведінка системи
Неправильний контроль і потоки даних у системі
Нездатність належним чином і повністю виконувати наскрізні функціональні завдання
Збій належної роботи системи в системному середовищі
Помилка роботи системи, порівняно з тим як описано в системній документації чи посібниках користувача
Конкретні підходи та відповідальність
Тестування системи має зосереджуватися на загальній наскрізній поведінці системи в цілому, як функціональної, так і нефункціональної. Тестування системи має використовувати найбільш відповідні методи для аспектів системи, що тестуються. Наприклад, може бути створена таблиця рішень, щоб перевірити, чи відповідає функціональна поведінка, як описано в бізнес-правилах.
Тестування системи зазвичай проводиться незалежними тестувальниками, які значною мірою покладаються на специфікації. Дефекти в специфікаціях (наприклад, відсутність історій користувачів, неправильно сформульовані бізнес-вимоги тощо) можуть призвести до нерозуміння або розбіжностей щодо очікуваної поведінки системи. Такі ситуації можуть спричинити хибні спрацьовування та хибні негативні результати, що витрачає час і знижує ефективність виявлення дефектів відповідно. Раннє залучення тестувальників до вдосконалення історій користувача або діяльності статичного тестування, наприклад оглядів, допомагає зменшити кількість таких ситуацій.
Приймальне тестування
Приймальне тестування, як і тестування системи, зазвичай зосереджується на поведінці та можливостях усієї системи чи продукту. Цілі приймального тестування включають:
Встановлення впевненості в якості системи в цілому
Перевірка того, що система повна і працюватиме належним чином
Перевірка того, що функціональна та нефункціональна поведінка системи відповідає специфікаціям
Приймальні випробування можуть дати інформацію для оцінки готовності системи до розгортання та використання замовником (кінцевим користувачем). Дефекти можуть бути виявлені під час приймального тестування, але виявлення дефектів часто не є метою, а виявлення значної кількості дефектів під час приймального тестування в деяких випадках може вважатися великим ризиком проєкту. Приймальне тестування також може перевіряти відповідність правовим чи нормативним вимогам або стандартам.
Загальні форми приймального тестування включають наступні:
Користувацьке приймальне тестування
Операційне приймальне тестування
Контрактне та регулятивне приймальне тестування
Альфа- і бета-тестування
Користувацьке приймальне тестування (UAT). Перевірка прийнятності системи для користувача зазвичай зосереджена на перевірці придатності системи для використання запланованими користувачами в реальному або змодельованому робочому середовищі. Основною метою є створення впевненості в тому, що користувачі можуть використовувати систему для задоволення своїх потреб, виконання вимог і виконання бізнес-процесів з мінімальними труднощами, витратами та ризиком.
Операційне приймальне тестування (OAT)
Приймальні випробування системи операторами цієї системи або системними адміністраторами, зазвичай їх виконують у (модельованому) виробничому(робочому) середовищі. Тести зосереджуються на робочих аспектах і можуть включати:
Тестування резервного копіювання та відновлення
Встановлення, видалення та оновлення
Аварійне відновлення
Керування користувачами
Завдання з технічного обслуговування
Завдання завантаження та міграції даних
Перевірка наявності вразливостей у безпеці
Тестування продуктивності
Основна мета операційної приймальної перевірки полягає в зміцненні впевненості в тому, що оператори або системні адміністратори можуть підтримувати належну роботу системи для користувачів у робочому середовищі, навіть за виняткових або складних умов.
Контрактне та нормативне приймальне тестування
Тестування прийнятності за контрактом виконується відповідно до критеріїв прийнятності контракту для виробництва програмного забезпечення, розробленого на замовлення. Критерії прийняття повинні бути визначені, коли сторони погоджуються на контракт. Контрактне приймальне тестування часто виконується користувачами або незалежними тестувальниками.
Нормативні приймальні випробування проводяться на відповідність будь-яким нормам, яких необхідно дотримуватися, наприклад державним, правовим нормам або нормам безпеки. Регуляторне приймальне тестування часто виконується користувачами або незалежними тестувальниками, іноді результати перевіряються або перевіряються регуляторними органами.
Основна мета тестування прийнятності за контрактами та нормативними документами полягає в зміцненні впевненості в тому, що було досягнуто відповідності договірним або нормативним вимогам.
Альфа і бета тестування
Альфа- та бета-тестування зазвичай використовують розробники комерційного готового програмного забезпечення (COTS), які хочуть отримати відгуки від потенційних або наявних користувачів, клієнтів та/або операторів до того, як програмний продукт буде випущено на ринок. Альфа-тестування виконується на сайті організації-розробника не командою розробників, а потенційними чи існуючими клієнтами та операторами чи незалежною командою тестування. Бета-тестування виконується потенційними чи існуючими клієнтами та операторами на їхніх власних місцях. Бета-тестування може відбуватися після альфа-тестування або може відбуватися без будь-якого попереднього альфа-тестування.
Однією з цілей альфа- та бета-тестування є формування впевненості серед потенційних або існуючих клієнтів або операторів у тому, що вони можуть використовувати систему в звичайних повсякденних умовах і в робочому середовищі для досягнення своїх цілей з мінімальними труднощами, витратами, і ризиком. Іншою метою може бути виявлення дефектів, пов’язаних з умовами та середовищем, у яких буде використовуватися система, особливо коли ці умови та середовище важко відтворити групі розробників.
Тестова база
Приклади робочих продуктів, які можна використовувати як тестову базу для будь-якої форми приймального тестування, включають:
Бізнес-процеси
Вимоги користувача або бізнесу
Норми, юридичні договори та стандарти
Варіанти використання та історії користувачів
Системні вимоги
Документація щодо системи або користувача
Процедури встановлення
Звіти про аналіз ризиків
Крім того, в якості тестової бази для отримання тестових прикладів для операційної приймальної перевірки можна використовувати один або кілька з наступних робочих продуктів:
Процедури резервного копіювання та відновлення
Процедури аварійного відновлення
Нефункціональні вимоги
Операційна документація
Інструкції з розгортання та встановлення
Цільові показники
Пакети баз даних
Стандарти або правила безпеки
Типові тест-об’єкти
Типові тестові об’єкти для будь-якої форми приймального тестування включають:
Система, яка тестується
Конфігурація системи та конфігураційні дані
Бізнес-процеси для повністю інтегрованої системи
Системи відновлення (для безперервності бізнесу та тестування аварійного відновлення)
Процеси експлуатації та обслуговування
Форми
Звіти
Існуючі та перетворені виробничі дані
Типові дефекти та збої
Приклади типових дефектів для будь-якої форми приймального тестування включають:
Системні робочі процеси не відповідають вимогам бізнесу чи користувача
Бізнес-правила реалізовані неправильно
Система не відповідає договірним або нормативним вимогам
Нефункціональні збої, як-от вразливість системи безпеки, недостатня продуктивність під час високих навантажень або неправильна робота на підтримуваній платформі
Конкретні підходи та відповідальність
Приймальне тестування часто є обов’язком клієнтів, бізнес-користувачів, власників продуктів або операторів системи, а також можуть бути залучені інші зацікавлені сторони.
Приймальне тестування часто розглядається як останній рівень тестування в послідовному життєвому циклі розробки, але воно також може відбуватися в інший час, наприклад:
Приймальні тестування програмного продукту COTS можуть відбуватися після його встановлення або інтеграції
Перед тестуванням системи може проводитися приймальне тестування нового функціонального вдосконалення
При ітераційній розробці команди проєкту можуть використовувати різні форми приймального тестування під час і в кінці кожної ітерації, наприклад ті, які зосереджені на перевірці нової функції за її критеріями прийнятності, і ті, які зосереджені на перевірці того, що нова функція задовольняє потреби користувачів. Крім того, альфа-тести та бета-тести можуть відбуватися в кінці кожної ітерації, після завершення кожної ітерації або після серії ітерацій. Користувацьке приймальне тестування, операційне приймальне тестування, нормативне приймальне тестування також можуть відбуватися наприкінці кожної ітерації, після завершення кожної ітерації або після серії ітерацій.
Тестові рівні (версія 4.0)
У сілабусі описано наступні п’ять рівнів тестування:
Тестування компонентів (також відоме як модульне тестування) зосереджується на тестуванні компонентів окремо. Для цього часто потрібна спеціальна підтримка, наприклад тестові пакети або фреймворки модульного тестування. Тестування компонентів зазвичай виконується розробниками у своїх середовищах розробки.
Тестування інтеграції компонентів (також відоме як тестування інтеграції модулів) зосереджується на тестуванні інтерфейсів і взаємодії між компонентами. Тестування інтеграції компонентів значною мірою залежить від підходів стратегії інтеграції, таких як «знизу вгору», «зверху вниз» або «великий вибух».
Тестування системи зосереджується на загальній поведінці та можливостях усієї системи або продукту, часто включаючи функціональне тестування наскрізних завдань і нефункціональне тестування характеристик якості. Для деяких нефункціональних характеристик якості бажано тестувати їх на повній системі в репрезентативному тестовому середовищі (наприклад, зручність використання). Також можливе використання моделювання підсистем. Тестування системи може виконуватися незалежною групою тестувальників і пов’язане зі специфікаціями системи.
Тестування системної інтеграції зосереджено на тестуванні інтерфейсів тестованої системи та інших систем і зовнішніх служб. Тестування системної інтеграції вимагає відповідних тестових середовищ, бажано подібних до робочого середовища.
Приймальне тестування зосереджено на перевірці та демонстрації готовності до розгортання, що означає, що система відповідає бізнес-потребам користувача. В ідеалі приймальне тестування має виконуватися цільовими користувачами. Основними формами приймального тестування є: приймальне тестування користувача (UAT), операційне приймальне тестування, договірне та нормативне приймальне тестування, альфа-тестування та бета-тестування.
Рівні тестування розрізняються за таким невичерпним списком атрибутів, щоб уникнути дублювання тестових дій:
Тестовий об’єкт
Цілі тестування
Тестова база
Дефекти та збої
Підхід та відповідальність
В цьому відео починаємо працювати з секцією 2.2. 00:01:05 Рівні тестування 00:04:27 Тестування компонентів 00:14:38 Інтеграційне тестування 00:35:59 Системне тестування 00:51:33 Приймальне тестування 01:17:05 Рівні тестування (версія 4.0)