Тестування та якість програмного забезпечення¶
Лектор: | Биковець Артем Тарасович |
---|
Contents
Лекція 1. Життєвий цикл ПЗ¶
date: 2016-09-08 10:20:00 +0300
Тестування ПЗ – процес, направлений на визначення якості програмного продукту по відношенню до очікувань та вимог замовника.
SDLC¶
Продукт:
SDLC (Software Development Life Cycle)
+---------------+ +----------------------------------+ +-------------------------+
| Idea | 💡 | Analysis | 📚 | Architecture and design | 📄
+---------------+ --> +----------------------------------+ --> +-------------------------+ -->--+
| Product Owner | | Business Analyst; System Analyst | SRS | System Architect | |
+---------------+ +----------------------------------+ BRD +-------------------------+ |
|
+-----------------------------------------------------------------------------------------------+
|
| +------------+ +---------+ +-----------+ new +--------------+
| 📄 | Development|build| Testing |report | Bugfixing |build| Verification | RC Build
+---> +------------+ --> +---------+ ----> +-----------+ --> +--------------+ -->---+
| Developers | | QC / QA | | Developer | | | |
+------------+ +---------+ +-----^-----+ +-------+------+ |
| | |
+-------------------+ |
|
+-----------------------------------------------------------------------------------+
|
| +--------------------+ +---------+ +---------+ +----------+
| | Acceptance Testing | | Release | | Support | | DEATH 💀 |
+---> +--------------------+ -----> +---------+ --> +---------+ --> +----------+
| | | | | | | |
+--------------------+ +---------+ +---------+ +----------+
- SRS – System Requirement Specification
- BRD – Business Requirement Documentation
- QC – Quality Control – валідує / верифікує постфактум
- QA – Quality Assurance – забезпечує якість продукту протягом усього життєвого циклу, здійснюючи превентивні заходи
- SDET – Software Development Engineer in Test – займаються тесуванням на рівні кода (whitebox testing), написання unit-тестів, інтеграційних систем, підтримкою CI-систем та дрібним багфіксингом
- Acceptance Testing – тестування на відповідність вимогам на передрелізній стадії
SDLC по факту можна вважати розширеною моделлю Waterfall
Waterfall¶
Waterfall
^
| ------+
| IDEA | 🐞
| +----------+
| Analysis |
| +-----+
| DEV |
| +---------+
| Testing |
| +---------+
| Release | time
+--------------------------------------------------->
Баг 🐞 на етапі аналізу випливе надто пізно – на етапі тестування і його виправлення займе надто багато часу.
- Verification – перевірка на відповідність формальним критеріям (очікуваний результат завжди строго визначений)
- Validation – перевірка на адекватність (суб’єктивне)
Самостійне опрацювання¶
- Спіральна модель
- V-модель
Лекція 3. Види тестування¶
date: 2016-09-22 10:20:00 +0300
Види тестування¶
Видів тестування є багато, більш того можна вигадувати свої власні. Проте є енна кількість основних, які переважно й використовуються.
Найпростіше види тестування розглядати у розрізі класифікацій.
За способом виконання тесту
Manual – повністю ручне
Auto
Semi-auto – вимагає участі тестувальника, але в основному тести проганяються автоматично.
За стадією проведення
Alpha – проводиться всередині команди розробки
Beta – проводиться тестувальниками зі сторони. Тестувальниками тут можуть бути як спеціально навчені QA, так і замовник або якась цільова група користувачів.
Beta++ – всі подальші тестування.
За доступом до внутрішнього влаштування системи
Black box. Для тестування не використовуються знання про внутрішнє влаштування системи. По-факту перевіряється правильність залежності виводу від вводу.
Gray box. Використовуються незначні деталі внутрішнього влаштування системи. Наприклад, при реєстрації користувача перевіряється наявність відповідного запису в БД, перевіряється, що певні запити були відправлені на сервер.
White box. Тестування безпосередньо по коду.
За виконанням коду
Я не знаю зачем вообще эта классификация есть ©
Static. Тестування без запуску продукту, якість якого перевіряється. Наприклад, тестування вимог.
Dynamic. Тестування із запуском продукту.
За направленістю тестового сценарію
Positive. Перевіряються сценарії ,описані в вимогах.
Negative. Перевіряється поведінка системи у випадках, не описаних в документації.
В першу чергу треба прогнати усі позитивні тести, і тільки як вони пройдуть успішно приступати до негативних. Перевірка негативних сценаріїв без при неробочих позитивних не має сенсу.
- За об’єктом тестування
- Functional. Тестування функціоналу системи.
- Security
- Non-Functional
- UI/GUI
- usability (UX)
- Performance
- Load – перевірка здатності системи витримувати ті чи інші навантаження
- Stress – перевірка того, як система працює при навантаженнях, що перевищують очікувані.
- Stability
- Recoverability – здатність системи відновлюватися після помилок та поломок.
- Volume – перевірка на те, які об’єми дискового простору використовує система.
- l10n (localization), i18n (internationalization)
Також виділяють такі види тестування:
- Regression testing. Тестування того, що вже було протестовано. Проводиться у випадку, коли змінюють старий код, або нові зміни можуть поламати існуючий функціонал.
- Exploratory Testing.
- Smoke testing. – швидке тестування основних моментів ритичного функціоналу.
- Sanity testing. – швидке і глибоке тестування якогось невеличкого шматочку функціоналу
- Acceptance testing
Вимоги до вимог¶
Однозначність.
Требования должны быть одинаково понятны вам, ребеёнку і старушке, впадающей в маразм.
Повнота Вимоги повинні повністю і детально описувати функціонал.
Неперетин
- Одна сутність повинна бути писана в одній вимозі
- Різні вимоги не повинні протирічити одне одному
- Адекватність
- Testability (хз, як перекласти) Здатність з вимоги зрозуміти як перевіряти її виконання.
Лекція 4. Тест-дизайн¶
date: 2016-10-06 10:40:55 +0300
Тест-дизайн – такой инструмент, который помогает не писать тесты ради тестов.
Test liifecycle¶
- Analysis
- Test planning
- Test Design – стадія проектування, написання тестової документації
- Test Execution – стадія виконання тестів
- Acceptance Testing
- Test Closure Activities – згортання тестових активностей – почистити після тестів
- Testing Reportig
Test Design Techniques¶
Інколи виникає бажання якось поміряти ефективність тестів. Існують такі метрики:
- code coverage $$ {code\ coverage} = \frac{lines\ of\ code}{strings\ covered\ by\ tests} \cdot 100 \% $$
- requirements coverage – покриття вимог теста
Методи:
Equivalent partitioning – метод класів еквівалентності. Суть полягає у розділенні вхідних даних на групи (класи еквівалентності), для яких сценарій виконання буде одним і тим же. Тоді достатньо перевірити по одному сценарію з кожного класу еквівалентності і по одному сценарію за межами того класу еквівалентності. Основне призначення цього методу – тестувати швидше і робити менше непотрібних дій.
Boundary values – метод граничних значень. Перевірка коректності роботи програми на даних, що знаходяться на границі класів еквівалентності.
Есть условный PornHub. Допустим, на входе пользователя спрашивают его дату рождения. Если есть 18, то показывать ему взрослый контент, если нет – то не показывать. В этом случае тестированием граничных значением будет проверка разных случаев, когда пользователю ровно 18 лет.
Вточнити границі
a < 1000 ===> b=5
a:[1000;5000] ===> b=10
a>5000 ===> b=15
Визначити величину “кроку” між сусідніми значеннями
a-n, a, a+n, b-n, b, b+n
State-transition technique – аналіз переходів станів системи. Якимось чином малюєте / виписуєте всі стани системи і позначаєте “зеленими стрілочками” всі можливі переходи. Коли це візуалізовано, на кожен стан пишуться тести, потім пишуться позитивні тести на кожну зелену стрілочку і негативні тести на кожну відсутню стрілочку (там де переходів бути не повинно).
Протестуємо світлофор. Маємо такі стани:
- “зелений чоловічок” + “червоний водій”
- “зелений чоловічок миготить”
- “червоний чоловічок” + “червоний або жовтий водій”
- “червоний чоловічок” + “зелений водій”
- “зелений чоловічок миготить” + “червоний або жовтий водій”
Переходи: 1 --> 2 --> 3
Error Guessing – написання тестових сценаріїв на базі вгадування потенційних вразливостей та помилок.
Чтобы найти баг, ты должен думать как баг
Exploratory
Pair-wise testing – Тестування унікальних пар. pairwise.org
OS | win, mac, lin |
Browser | chrome, firefox, safari |
DB | db1, db2, db3 |
Locale | EN, DE, UA |
Total: 81 different env |
Суть у тому, щоб не перебирати усі варіанти, а щоб перебрати таку кількість варіантів, щоб у них була кожна унікальна пара
OS | Browser | DB | Loc |
---|---|---|---|
Win | chrome | db1 | en |
Win | firefox | db2 | de |
Win | safari | db3 | ua |
Mac | chrome | db2 | ua |
Mac | firefox | db3 | en |
Mac | safari | db1 | de |
Lin | chrome | db3 | de |
Lin | firefox | db1 | ua |
Lin | safari | db2 | en |
Таким чином замість 81, ми отримали 9 вибірок
Лекція 5. Тест-план¶
date: 2016-10-13 10:56:04 +0300
Існує стандарт для тестової документації: IEEE829
(Title, Author, Date created, Date modified, Content, Revision history)
- Introduction
- Features to be tested
- launch app
- open doc
- save changes
- fonts
- …
- Features not to be tested
- Test Items – тут декомпозиція того, що ми будемо тестувати. Розглядаємо пункти Features to be tested дуже детально. Наприклад:
- launch app
- launch app on iPhone
- launch app on Android
- launch app on Linux
- …
- open doc
- open doc with double click
- open doc from within app
- …
- …
Test approaches. Детальний опис того, яким чином буде проводитися тестування:
Для кожного білда ми проводитимо smoke-testing. Щоб пришвидшити його, використовуємо автотести на Selenium Web-Driver. Тестуємо black-box способом. Потім додатково проганяємо unit-tests …
Pass/Fail item criteria (acceptance criteria) I.E.
- Tested on no less than 3 platforms;
- All req are covered with all positive and no less than 2 negative tests
- All defects with Blocker, Critical priority are fixed
- No more than 2 medium priority defects
- No more than 5 minor priority defects
- …
- Suspension/Resumption criteria – умови призупинення/продовження тестування.
- Environmental needs
- Staff and training needs
- Tester’s tasks – Задачі тестувальника. Це більше як список обов’язків, яким, якщо що, можна прикрити 5ту точку.
- Test deliverables
- test plan
- test case
- test report
- list of bugreports
- test automation framework
- …
Schedule – графік, що коли треба робити.
stage dates analysis 12/10/16 test planning nov 2016 test design … test execution … regression … acceptance 1/2/2017 - 20/2/2017 reporting … Responsibilities
Who What Responsibilities Zhora manual QA test design, manual testing Vasya middle QA manual testing, reports Sergey QA Automation … Approvals
Name Position Date Sign Vlad PO now vlad Risks Risks and how to deal with them.
- Accepts
- Transfer
- Mitigate
- Avoid
Лекція 6. Тестова документація¶
date: 2016-10-27 10:20:00 +0300
Тестова документація:
- Test plan
- Test report
- Test-case
- Checklist
Test-case¶
Test-case – документ, що містить послідовність кроків для перевірки одного критерію.
Структура документу:
IDEA – власне, мета test-case. Наприклад:
Проверить, как едет себя дверь комнаты 2-13 при попытке открыть её, не открыв замок
Title – коротка назва документу. У зв’язку з тим, що у проектах зазвичай достобіса test-cases, є сенс якось осмислено і структуровано заповнювати це поле.
2-13MDoorLockedOpen
Pre-condition (optional) – описує дії, або умови, які не є частиною тесту, але є необхідними для його виконання
- The door is locked
- User is outside the room
Steps – кроки тесту
- Подойди к двери
- Проверни дверную ручку по часовой
- Потяни дверь на себя
- Посмотри состояние двери
Expected result
Дверь не открылась и осталась целой
(optional) Post-conditions – кроки для “чистки” після тесту
Однією з переваг test-case є простота створення bug-report
Checklist¶
Формат checklist:
ID | Tester actions | System Response (Expected result) |
---|---|---|
1 | Open the home page | Welcome text is displayed on top [menu][user][payments][settings] menu items are present Banner is displayed… |
2 | Click on [User] menu item | Window with buttons [Log In] and [Sign Up] is displayed on screen |
3 | Click on [Sign Up] button | “Registration: Step1” screen is opened; bla bla bla fields are displayed |
4 | Click on [Menu] >> Save as >> Save as pdf | … |
… | … | … |
Лекція 7. Баг-репорт¶
date: 2016-11-10 10:49:37 +0200
Визначення¶
- Bug Report
- документ, який описує дефект у застосунку.
- Дефект/Баг
- невідповідність фактичного результату очікуваному.
Алгоритм поведінки при виявленні дефекту¶
- Занотувати, що відбулося
- Зробити скріншот або зняти невеликий скрінкаст; логи
- відтворити (двічі або тричі) – щоб зрозуміти, як часто відтворюється
- Комунікація з командою (може хтось щось про це знає)
- Пошук дуюблікатів у баг-трекері
- Локалізація дефекту (аналіз потенційних факторів, які впливають на відтворюваність багу)
- Пишемо Summary (заголовок/title). Хороший Summary відповідає на 3 питання:
- Що?
- Де?
- Коли?
- Пишемо Issue Description і заносимо в баг-трекер
Приклад¶
Summary:
Changes in HTML doc currently opened is not saved
when [Save] button is clicked in Text Edit app
Environment:
OS: any (MacOS, Win)
Browser: Chrome, Firefox, Safari, Opera, IE (version any)
Build (version):
Text Edit v1.1.23b
Priority: Medium / Major (пріоритет з точки зору бізнеса)
Severity: Medium (пріоритет з технічної точки зору)
Description:
Pre-condition (optional):
существует файл формата HTML, который коректно открывается
в браузере и он сейчас открыт в браузере в система
Steps To Reproduce:
1. Launch text editor
2. Open any html file that was previously opened in browser
3. Make any changes in content HTML document;
4. Save changes in document
5. Reload page in your browser
6. Observe the result on screen in your browser
Actual result:
Changes are not saved, previous version of HTML doc is displayed.
Expected Result:
The document is displayed without any corruptions
and shows changes made during steps
Additional info:
if user closes browser and then click on [Save] button
in Text Edit app - changes saved successfully.
Лекція 8. Веб-тестування¶
date: 2016-11-17 10:58:13 +0200
На передній план виходять
кросбраузерне тестування
Наявність декількох різних браузерів (IE, Chrome, Firefox, Edge, Opera, Safari …) зумовлює необхідність перевірки коректності роботи функціоалу на різних браузерах
тестування продуктивності (performance testing)
Передача даних по мережі сильно впливає на швидкодію.
тестування безпеки (security testing)
Авторизація/автентикація, передача авторизаційних даних по мережі, права доступу на сервери/до БД/тощо, налаштування файрволів…
Одним із засобів, що використовується для автоматизації веб-тестування є Selenium IDE