Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/6521| Title: | Автоматизація процесу тестування програмного забезпечення комп'ютерних інформаційних систем |
| Authors: | Уткіна, Тетяна Юріївна Бурим, Ольга Миколаївна |
| Issue Date: | Jun-2025 |
| Abstract: | Метою кваліфікаційної роботи бакалавра є дослідження процесу автоматизованого тестування програмного забезпечення комп’ютерно-інформаційних систем шляхом визначення сучасних технологій, методів та інструментів тестування та розробки розширення для автоматизованого тестування клієнтського додатку, що дозволить підвищити швидкість, ефективність та надійність процесу тестування, забезпечуючи випуск якіснішого та стабільнішого програмного забезпечення. У результаті роботи над дослідженням автоматизації процесу тестування програмного забезпечення комп’ютерних інформаційних систем виконано наступне: − визначено сутність, роль та значення цілей автоматизації процесу тестування програмного забезпечення комп’ютерно-інформаційних систем; − проаналізовано існуючі інструменти та технологій автоматизації, приведено якісні характеристики існуючих аналогів предмету дослідження; − проаналізовано сучасні методи та підходи автоматизаціїпроцесу тестування, визначено переваги і недоліки їх застосування; − розроблено розширення автоматизованого тестування клієнтської частини для виявлення специфічних вразливостей банківських веб-додатків у клієнтському коді; − проведено оцінку ефективності розширення у виявленні вразливостей та сформульовано пропозиції щодо подальшого його вдосконалення; визначено перспективи розвитку автоматизації процесу тестування, враховуючі можливості штучного інтелекту та машинного навчання, розширення використання підходів TestOps для інтеграції тестування в DevOps-практики, розвитку low-code та no-code інструментів, та застосування хмарних рішень. Автоматизація процесу тестування програмного забезпечення є стратегічно важливим кроком для забезпечення високої якості та надійності комп’ютерних інформаційних систем. Незважаючи на певні виклики, переваги автоматизації є очевидними та продовжують зростати з розвитком технологій. Успішне впровадження автоматизованого тестування вимагає ретельного планування, вибору відповідних інструментів та кваліфікованої команди, але в результаті приводить до значного підвищення ефективності розробки та якості кінцевого продукту. Подальший розвиток штучного інтелекту та нових підходів обіцяє зробити автоматизацію тестування ще більш потужним та доступним інструментом у сфері розробки програмного забезпечення. Вибір правильних інструментів та технологій автоматизації є критично важливим для успіху автоматизованого тестування КІС. Ретельний аналіз ключових критеріїв, розуміння можливостей різних категорій інструментів та систематичний процес вибору, включаючи пілотне тестування, дозволять команді обрати найбільш ефективні та відповідні рішення для досягнення поставлених цілей автоматизації. Розробка та підтримка якісних тестових скриптів є ключовим фактором успішної автоматизації тестування КІС. Дотримання принципів розробки, ефективне проходження етапів створення скриптів та впровадження стратегій підтримки забезпечують надійність, гнучкість та довговічність автоматизованих тестів, що сприяє підвищенню якості програмного забезпечення. Аналіз результатів тестування та якісне звітування про виявлені дефекти є невід’ємними складовими процесу забезпечення якості КІС. Ретельний аналіз дозволяє отримати цінну інформацію про стан програмного забезпечення, а ефективне звітування забезпечує чітку комунікацію з командою розробки та сприяє швидкому виправленню виявлених проблем. Застосування правильних принципів та інструментів на цьому етапі є запорукою випуску якісного та надійного програмного забезпечення. Зростання популярності хмарних рішень для автоматизованого тестування є закономірним наслідком загальної тенденції до використання хмарних технологій. Переваги, які надають хмарні платформи в плані масштабованості, економії, доступу до різноманітних середовищ та простоти використання, роблять їх все більш привабливим вибором для компаній, які прагнуть оптимізувати свої процеси тестування та підвищити якість програмного забезпечення. У майбутньому очікується подальше зростання та розвиток цього напрямку. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/6521 |
| Appears in Collections: | 174 Автоматизація, комп'ютерно-інтегровані технології та робототехніка (Автоматизація та комп'ютерно-інтегровані системи та компоненти) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| Б_174_2025_Бурим.pdf Restricted Access | 1.58 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА РОБОТОТЕХНІКИ ТА СПЕЦІАЛІЗОВАНИХ
КОМП’ЮТЕРНИХ СИСТЕМ
ПОЯСНЮВАЛЬНА ЗАПИСКА
до кваліфікаційної роботи
освітнього ступеня «бакалавр»
на тему: Автоматизація процесу тестування програмного
забезпечення комп’ютерних інформаційних систем
Виконала Студентка 4 курсу групи
АКІТС-2109
спеціальності 174 Автоматизація,
комп’ютерно-інтегровані
технології та робототехніка
Ольга БУРИМ
(ім’я та ПРІЗВИЩЕ)
Керівник ТетянаУТКІНА
(ім’я та ПРІЗВИЩЕ)
Рецензент
(ім’я та ПРІЗВИЩЕ)
Захист дозволяю:
зав. кафедри, д.т.н., Валентина ЛУКАШЕНКО
професор
(підпис) (ім’я та ПРІЗВИЩЕ)
Черкаси 2025
2
ЗМІСТ
ЗАГАЛЬНА ХАРАКТЕРИСТИКА РОБОТИ ....................................................... 4
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ................................................................... 7
1.1 Сутність автоматизації процесу тестування .................................................. 7
1.2 Роль та значення цілей автоматизації процесу тестування .......................... 8
1.3 Фактори, що впливають на визначення обсягу автоматизації ..................... 9
1.4 Методології та підходи визначення обсягу автоматизації ......................... 10
1.4.1 Критерії вибору інструментів та технологій автоматизації ................. 11
1.4.2 Вибір інструментів та технологій автоматизації ................................... 12
1.4.3 Розробка та підтримка тестових скриптів .............................................. 14
1.4.4 Виконання автоматизованих тестів ........................................................ 17
1.4.5 Аналіз результатів тестування та звітування про виявлені дефекти ... 19
1.4.6 Інтеграція автоматизованих тестів у процес розробки комп’ютерних
інформаційних систем .............................................................................................. 20
2 СИСТЕМНИЙ АНАЛІЗ ІНСТРУМЕНТІВ ТА ТЕХНОЛОГІЙ
АВТОМАТИЗАЦІЇ ПРОЦЕСУ ТЕСТУВАННЯ ................................................ 23
2.1 Інструменти автоматизації тестування ......................................................... 23
2.2 Мови програмування для написання тестових скриптів ............................ 39
2.3 Вибір мови програмування для тестування ................................................. 43
2.4 Фреймворки автоматизації для організації та підтримки тестового коду 45
3 РОЗРОБКА РОЗШИРЕННЯ ДЛЯ АВТОМАТИЗОВАНОГО
ТЕСТУВАННЯ КЛІЄНТСЬКОЇ ЧАСТИНИ ..................................................... 47
3.1 Розробка архітектури розширення для інтеграції з BurpSuite .................... 47
3.2 Реалізація основних функцій розширення ................................................... 50
3.3 Розробка правил для виявлення специфічних вразливостей банківських
веб-додатків у клієнтському коді ............................................................................ 56
3
4 ОСОБЛИВОСТІ ТЕСТУВАННЯ ТА ОЦІНКА РОЗРОБЛЕНОГО
РОЗШИРЕННЯ........................................................................................................ 61
4.1 Налаштування тестового середовища для банківських веб-додатків ....... 61
4.2 Запуск розробленого розширення та аналіз результатів............................. 64
4.3 Оцінка ефективності розширення у виявленні вразливостей .................... 65
4.4 Аналіз виявлених проблем та формулювання пропозиції щодо
подальшого вдосконалення розширення ................................................................ 67
5 ВИЗНАЧЕННЯ ПЕРСПЕКТИВ РОЗВИТКУ АВТОМАТИЗАЦІЇ
ПРОЦЕСУ ТЕСТУВАННЯ ................................................................................... 68
5.1 Застосування штучного інтелекту та машинного навчання ....................... 68
5.2 Розширення використання підходів TestOps для інтеграції тестування в
DevOps-практики ....................................................................................................... 69
5.3 Розвиток low-code та no-code інструментів для автоматизації
тестування .................................................................................................................. 70
5.4 Застосування хмарних рішень для автоматизації процесу тестування ..... 71
ВИСНОВКИ ............................................................................................................. 73
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ............................................................. 76
ЗАГАЛЬНА ХАРАКТЕРИСТИКА РОБОТИ
У сучасному житті, де комп’ютерні інформаційні системи стали
невід’ємною частиною бізнесу, державного управління, науки та повсякденного
життя, якість програмного забезпечення, що лежить в їх основі, набуває
критичного значення. Навіть незначні дефекти в роботі комп’ютерно-
інтегрованих систем (КІС) можуть призвести до значних фінансових втрат,
порушення бізнес-процесів, загрози безпеці даних та підриву довіри
користувачів. У цьому контексті, забезпечення належного рівня якості
програмного забезпечення є першочерговим завданням розробників та
інженерів з тестування.
У сучасному світі інформаційні технології стали невід’ємною складовою
усіх сфер людської діяльності – від освіти й медицини до промисловості та
оборонної безпеки. Якість програмного забезпечення (ПЗ) є критичним
фактором, що визначає ефективність функціонування КІС, зокрема їх
надійність, стабільність та безпечність. У зв’язку зі зростанням обсягів коду,
швидкістю розробки та складністю архітектур, ручне тестування вже не може
повністю задовольнити вимоги до гнучкого, швидкого й безпомилкового
процесу забезпечення якості.
Актуальність теми. Автоматизація процесу тестування стала сучасним
стандартом у сфері розробки програмного забезпечення, особливо в умовах
DevOps-культури та CI/CD-практик. Вона дозволяє значно зменшити людський
фактор, прискорити релізи, покращити покриття тестами й оперативно
реагувати на зміни в коді. Для реалізації таких можливостей використовуються
потужні інструменти: Selenium – для UI-тестування вебінтерфейсів, JUnit і
TestNG – для модульного тестування Java-додатків, Postman – для API-
тестування, Jenkins – як сервер безперервної інтеграції, а також Allure для
зручного представлення результатів тестування.
Обрана тема є особливо актуальною для підготовки майбутніх фахівців у
галузі інформаційних технологій, оскільки автоматизація тестування це реальна
потреба сучасного ринку праці.
5
Мета і завдання дослідження. Метою кваліфікаційної роботи бакалавра
є дослідження процесу автоматизованого тестування програмного забезпечення
комп’ютерно-інформаційних систем шляхом визначення сучасних технологій,
методів та інструментів тестування та розробки розширення для
автоматизованого тестування клієнтського додатку.
Традиційний підхід до тестування, що базується на ручному виконанні
тестових сценаріїв, зіштовхується зі зростаючими викликами, пов’язаними зі
складністю сучасних КІС, скороченням термінів розробки та необхідністю
проведення всебічного тестування на різних рівнях. Ручне тестування є
трудомістким, схильним до людських помилок, обмеженим у можливості
багаторазового виконання одних і тих же тестів та неефективним при
проведенні регресійного тестування після внесення змін до коду. Саме тому
автоматизація процесу тестування програмного забезпечення стає не просто
бажаним, а необхідним елементом сучасної розробки КІС. Вона являє собою
застосування спеціалізованих інструментів та програмних засобів для
автоматичного виконання тестових сценаріїв, порівняння очікуваних та
фактичних результатів, а також формування звітів про виявлені дефекти.
Впровадження автоматизації дозволяє значно підвищити швидкість,
ефективність та надійність процесу тестування, забезпечуючи випуск
якіснішого та стабільнішого програмного забезпечення.
Для досягнення цієї мети необхідно вирішити наступні завдання:
− визначити сутність, роль та значення цілей автоматизації процесу
тестуванняпрограмного забезпечення комп’ютерно-інформаційних систем;
− проаналізувати існуючіінструменти та технологій автоматизації,
привести якісні характеристики існуючих аналогів предмету дослідження;
− проаналізувати сучасні методи та підходи автоматизаціїпроцесу
тестування,визначити переваги і недоліки їх застосування;
− розробити розширення автоматизованого тестування клієнтської
частини для виявлення специфічних вразливостей банківських веб-додатків у
клієнтському коді;
6
− провести оцінку ефективності розширення у виявленні вразливостей
та сформулювати пропозиції щодо подальшого його вдосконалення;
− визначити перспективи розвитку автоматизації процесу тестування,
враховуючі можливості штучного інтелекту та машинного навчання,
розширення використання підходів TestOps для інтеграції тестування в DevOps-
практики, розвитку low-code та no-code інструментів, та застосування хмарних
рішень.
Об’єкт дослідження – процеси тестування програмного забезпечення в
комп’ютерно-інформаційних системах.
Предмет дослідження – автоматизація процесу тестування програмного
забезпечення комп’ютерних інформаційних систем.
Методи дослідження. Для розв’язання поставлених завдань були
використані: теорії аналізу та синтезу, методи тестування програмного
забезпечення, технологія проектування програмних систем, визначення якості
продукту та автоматизації тест-кейсів.
Апробація результатів роботи. Результати роботи доповідалися й
обговорювалися на студентській науковійконференції:
− дні студентської науки ЧДТУ, 22-24 квітня, м. Черкаси, Україна, 2025.
Публікації. Результати досліджень опубліковані в тезі доповідей:
1. Бурим О. М., Уткіна Т. Ю. Автоматизація процесу тестування
програмного забезпечення комп’ютерних інформаційних систем [Електронний
ресурс] / [упоряд. : Єгорова О. В., Захарова О. В., Кисельов В. Б. та ін.].
Студентська науково-практична конференція ЧДТУ : зб. тез доповідей,
22–24 квітня 2025 р. М-во освіти і науки України, Черкас. держ. технол. ун-т.
Черкаси : ЧДТУ, 2025.
Структура та обсяг кваліфікаційної роботи. Кваліфікаційна робота
складається з загальної характеристики роботи, 5 розділів, висновків та списку
використаних джерел. Робота викладена на 79 сторінках. Ілюстрована
16 рисунками. Таблиць 3. Список використаних джерел містить
26 найменувань.
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ
1.1 Сутність автоматизації процесу тестування
Автоматизоване тестування – це процес виконання тестів програмного
забезпечення за допомогою спеціальних інструментів та скриптів без прямої
участі людини після їх початкового налаштування. Воно охоплює не лише
імітацію дій користувача, але й перевірку внутрішнього стану системи,
продуктивності, безпеки та інших важливих характеристик ПЗ. На відміну
від ручного тестування, автоматизовані тести виконуються швидке та
послідовно, що мінімізує ризик пропуску дефектів через неуважність та
втому.
Автоматизовані тести можуть виконуватися швидше, особливо коли
потрібно багато разів робити повторення. Це дозволяє скоротити час циклу
тестування та прискорити випуск нових версій ПЗ.
Автоматизація дозволяє виконувати значно більшу кількість тестових
сценаріїв, особливо такі,які неможливо відтворити вручну (наприклад, стрес-
тестування, тестування продуктивності під високим навантаженням).
Ефективне регресійне тестування. Після внесення будь-яких змін до
коду ПЗ, необхідно проводити регресійне тестування для перевірки того, що
нові зміни не призвели до нових помилок у вже протестованій
функціональності. Автоматизовані тести ідеально підходять для цієї мети,
дозволяючи швидко та ефективно перевірити стабільність усієї системи.
Покращення якості роботи тестувальників. Автоматизація рутинних
та повторюваних завдань звільняє час кваліфікованих тестувальників для
виконання більш складних та аналітичних завдань, таких як розробка нових
тестових сценаріїв, дослідження проблемних областей та покращення
стратегії тестування.
Детальні етапи процесу автоматизації тестування. Першим кроком є
чітке визначення того, які аспекти процесу тестування будуть
автоматизовані. Це може включати функціональне тестування ключових
8
модулів, тестування інтерфейсу користувача, тестування API, тестування
продуктивності, тестування безпеки тощо.
На таких етапах проводиться аналіз доступних інструментів та
фреймворків автоматизації, їх сумісності з технологіями, що
використовуються в розробці КІС, а також функціональності та вартості.
Після розробки скриптів необхідно налаштувати середовище для
їхвиконання. Це може включати підготовку тестових даних, налаштування
конфігурації системи та інтеграцію з інструментами управління тестами.
Важливо забезпечити можливість паралельного виконання тестів для
скорочення загального часу тестування [1, 9].
1.2 Роль та значення цілей автоматизації процесу тестування
Визначення цілей автоматизації є фундаментальним кроком, що
визначає напрямок процесу впровадження автоматизованих тестів.
Правильно обрані цілі допомагають:
− зосередитися на автоматизації тих аспектів, які принесуть велику
користь для якості програмного забезпечення та ефективності процесу
розробки;
− дає змогу оцінити ефективність впровадження автоматизації та
визначити, чи були досягнуті очікувані результати.
Чітко сформульовані цілі, пов’язані з бізнес-цілями проекту, сприяють
отриманню підтримки від керівництва та інших зацікавлених сторін.
Основні цілі автоматизації тестування КІС можуть включати:
− автоматизовані тести можуть виконуватися значно швидше за
ручні, особливо при регресійному тестуванні;
− тести виконуються за заданим сценарієм, мінімізуючи можливість
помилок, пов’язаних з людською неуважністю;
− регулярне виконання автоматизованих тестів допомагає своєчасно
виявляти помилки, що сприяє підвищенню стабільності та надійності КІС;
9
− тести забезпечують стандартний підхід до тестування, незалежно
від виконавця [3, 25].
1.3 Фактори, що впливають на визначення обсягу автоматизації
Процес визначення доцільного обсягу автоматизації є багатофакторним
і потребує комплексного підходу, оскільки залежить від внутрішніх
характеристик підприємства, та зовнішнього середовища. Автоматизація
виробничих процесів передбачає оптимальне поєднання технічних
можливостей, економічної ефективності та організаційних умов
функціонування підприємства.
До основних факторів, що впливають на визначення обсягу
автоматизації, належать:
1. Ступінь автоматизації значно варіюється залежно від галузі та
специфіки виробничого процесу. Безперервні, масові та серійні виробництва,
зазвичай, мають вищий рівень автоматизації порівняно з одиничним
виробництвом, де більша роль відводиться ручній праці та гнучкості.
2. Висока повторюваність дій створює передумови для раціонального
впровадження автоматизованих систем. Складні або незвичні процеси
можуть вимагати часткової автоматизації.
3. Обсяг інвестицій, потрібних для автоматизації, має відповідати
очікуваним вигодам: зниженню витрат, покращенню якості продукції,
підвищенню продуктивності. Економічна ефективність часто визначається
шляхом розрахунку періоду окупності, рентабельності проекту та інших
фінансових показників.
4. Автоматизація вимагає не тільки технічного обладнання, а й
фахівців для його обслуговування. Нестача кваліфікованих кадрів може
обмежити рівень автоматизації або потребувати додаткових витрат на
навчання персоналу.
10
5. Успішне впровадження рішень автоматизації потребує відповідної
технічної бази: наявності комп’ютеризованих систем управління, сенсорних
технологій, каналів передачі даних тощо.
В умовах високої конкуренції підприємства змушені шукати шляхи
оптимізації процесів. Автоматизація може стати засобом підвищення
конкурентоспроможності продукції, зменшення витрат і скорочення термінів
виробництва.
Таким чином, визначення обсягу автоматизації – це результат
системного аналізу як внутрішніх можливостей підприємства, так і зовнішніх
вимог. Оптимальний рівень автоматизації не є статичним показником і
потребує періодичного перегляду відповідно до змін у технологічному
середовищі та економічних умовах діяльності.
1.4 Методології та підходи визначення обсягу автоматизації
Існує декілька методологій та підходів, які можуть бути використані
для визначення обсягу автоматизації тестування КІС:
1. Аналіз ризиків.Цей підхід передбачає ідентифікацію найбільш
ризикованих областей КІС та визначення пріоритетів їх для
автоматизованого тестування. Тестові випадки, пов’язані з високим ризиком
виникнення дефектів або значними наслідками від їх прояву,
автоматизуються в першу чергу.
2. Аналіз вартості та вигоди (Cost-BenefitAnalysis).Підхід передбачає
оцінку витрат на розробку та підтримку автоматизованих тестів порівняно з
потенційними вигодами від їх використання (економія часу, зменшення
кількості дефектів, підвищення якості). Автоматизуються ті тестові випадки,
для яких очікується найбільша віддача від інвестицій.
3. Матриця пріоритетів тестування.Тестові випадки оцінюються за
двома основними критеріями: пріоритетність (важливість для бізнесу) та
складність автоматизації. Автоматизуються в першу чергу високопріоритетні
та легко автоматизовані тестові випадки.
11
4. Підхід на основі покриття. підхід передбачає автоматизацію
тестових випадків таким чином, щоб забезпечити максимальне покриття
вимог, функціональності або коду КІС.
5. Використання критеріїв SMART. цілі автоматизації повинні бути
конкретними(Specific), вимірними(Measurable), досяжними(Achievable),
релевантними(Relevant) та обмеженими в часі(Time-bound). Це допомагає
чітко сформулювати цілі та контролювати процес їх досягнення [19].
1.4.1 Критерії вибору інструментів та технологій автоматизації
Після визначення цілей та обсягу автоматизації наступним критично
важливим кроком є вибір відповідних інструментів та технологій. Ринок
пропонує широкий спектр рішень, кожне з яких має свої переваги, недоліки
та особливості застосування. Тому варто провести аналіз ключових критеріїв
вибору, огляд основних категорій інструментів та технологій, а також
розглянути процес прийняття обґрунтованого рішення.
Визначимо ключові критерії вибору інструментів та технологій
автоматизаціїтестування.
1. Вибір інструментів та технологій автоматизації тестування КІС
повинен базуватися на ретельному аналізі множини ключових критеріїв, що
дозволять забезпечити їх відповідність потребам проекту та команди
тестування.
2. Обрані інструменти повинні підтримувати типи тестування
(функціональне, нефункціональне, API, UI тощо) та технології, що
використовуються в КІС, які були визначені на попередніх етапах.
3. Інструмент повинен бути сумісним з операційними системами,
браузерами, базами даних, інтерфейсами користувача та іншими
технологіями, що використовуються в розробці та при експлуатації КІС. Він
повинен бути інтуїтивно зрозумілим та мати адекватну документацію, що
полегшить його освоєння та використання членами команди тестування.
12
Складність інструменту впливає на час та ресурси, необхідні для його
впровадження.
4. Можливість інтеграції з іншими інструментами розробки та
тестування (системи управління вимогами, системи відстеження дефектів,
інструменти CI/CD), що сприяє більш ефективному та злагодженому процесу
розробки.
5. Наявність активної спільноти користувачів та якісної технічної
підтримки від розробника інструменту є важливим фактором для вирішення
проблем та отримання допомоги. Для деяких проектів важливим може бути
можливість розширення функціональності інструменту за допомогою
плагінів або API.
Ретельний аналіз цих критеріїв у контексті конкретного проекту КІС
дозволить зробити обґрунтований вибір інструментів та технологій
автоматизації.
1.4.2 Вибір інструментів та технологій автоматизації
Розглянемоосновні категорії інструментів та технологій
автоматизації. Ринок інструментів автоматизації тестування є досить
різноманітним.Основні категорії включають:
1. Інструменти для автоматизації тестування графічного
інтерфейсу (GUI). Ці інструменти дозволяють імітувати дії користувача з
графічним інтерфейсом програми (наприклад, натискання кнопок, введення
тексту, вибір елементів). Популярні приклади включають Selenium, Cypress,
Playwright, TestCafe, Ranorex.
2. Інструменти для автоматизації тестування API.Такі інструменти
використовуються для перевірки функціональності та продуктивності
інтерфейсів прикладного програмування (API), таких як REST або SOAP.
Популярні приклади включають Postman, RestAssured, SoapUI.
3. Інструменти для автоматизації тестування
продуктивності.Інструменти використовуються для оцінки продуктивності,
13
стабільності та масштабованості КІС під навантаженням. Популярні
приклади включають JMeter, LoadRunner, Gatling.
4. Інструменти для автоматизації мобільного тестування.Вони
призначені для тестування мобільних додатків на різних платформах
(Android, iOS). Популярні приклади включають Appium, Espresso, XCUITest.
5. Фреймворки автоматизації.Фреймворки надають структуру та
набір бібліотек для організації, розробки та виконання автоматизованих
тестів. Вони можуть бути специфічними для певного типу тестування або
бути більш загального призначення (наприклад, JUnit, TestNG, Cucumber).
6. Мови програмування.Вибір мови програмування для написання
автоматизованих тестів часто залежить від знань команди, особливостей
інструменту та технологій КІС. Популярні мови включають Java, Python,
JavaScript, C#.
7. Інструменти управління тестовими даними.Такі інструменти
допомагають створювати, підтримувати та використовувати тестові дані для
автоматизованих тестів.
8. Інструменти звітності та аналізу результатів тестування.Вони
надають можливості для візуалізації результатів тестування, генерування
звітів та аналізу виявлених дефектів.
Процес вибору інструментів та технологій автоматизації повинен бути
систематичним та включати наступні кроки:
1. Визначення вимог. На основі цілей та обсягу автоматизації
необхідно чітко сформулювати технічні та функціональні вимоги до
інструментів.
2. Дослідження ринку.Провести дослідження доступних інструментів
та технологій, враховуючи їх можливості, вартість, підтримку та відгуки
користувачів.
3. Складання шорт-листа кандидатів.На основі аналізу вимог та
дослідження ринку скласти короткий список найбільш перспективних
інструментів.
14
4. Проведення пілотного
проекту PoC(ProofofConcept).Рекомендується провести пілотний проект з
декількома обраними інструментами на невеликій частині КІС. Це дозволить
оцінити їх практичну застосовність, зручність використання та відповідність
вимогам.
5. Оцінка результатів пілотного проекту.На основі результатів
пілотного проекту провести порівняльний аналіз інструментів за
визначеними критеріями.
6. Прийняття рішення.Обрати інструменти та технології, які
найкращим чином відповідають потребам проекту, можливостям команди та
бюджету.
7. Планування впровадження.Розробити план впровадження обраних
інструментів, включаючи навчання команди, налаштування середовища та
розробку перших автоматизованих тестів.
Важливо залучати до процесу вибору всіх зацікавлених сторін,
включаючи тестувальників, розробників та керівників проекту, щоб
забезпечити прийняття обґрунтованого та підтримуваного рішення.
1.4.3 Розробка та підтримка тестових скриптів
Після вибору інструментів та технологій ключовим етапом є розробка
та подальша підтримка тестових скриптів. Якість та ефективність цих
скриптів безпосередньо впливають на результативність автоматизованого
тестування.
Розробка якісних тестових скриптів є запорукою стабільного та
ефективного автоматизованого тестування. Існує низка принципів, яких слід
дотримуватися при їх створенні.
Тестові скрипти повинні бути розбиті на невеликі, логічно завершені
модулі (функції, методи), які можна повторно використовувати в різних
тестових сценаріях. Це зменшує обсяг коду, полегшує його розуміння та
підтримку. Кожен тестовий скрипт повинен мати чітку структуру, що
15
відображає послідовність тестових кроків. Використання коментарів та
змістовних імен змінних, функцій та тестових випадків підвищує
читабельність коду.
Тестові скрипти повинні бути розроблені таким чином, щоб
мінімізувати вплив змін у графічному інтерфейсі або API КІС. Використання
надійних локаторів елементів (наприклад, ID, XPath, CSS-селектори) та
патернів проектування (наприклад, PageObjectModel) допомагає підвищити
стійкість тестів.
Кожен тестовий скрипт повинен містити чіткі кроки для валідації
очікуваних результатів. Важливо перевіряти не лише відсутність помилок,
але й коректність даних, стан системи та інші важливі аспекти. Також вони
повинні бути максимально простими та зрозумілими. Для цього можуть
використовуватися підходи на основі ключових слів або візуальні
інструменти.
Зазначимо основні етапи розробки тестових скриптів:
1. Аналіз.Ретельне вивчення ручного тестового випадку або вимоги,
яку необхідно автоматизувати. Визначення кроків, вхідних даних, очікуваних
результатів та можливих сценаріїв.
2. Проектування тестового скрипту.Визначити структуру скрипту,
необхідних функцій, підходів до локалізації елементів інтерфейсу.
3. Написання коду тестового скрипту.Реалізація спроектованого
скрипту та мови програмування, дотримуючись принципів розробки.
4. Виконання.Запуск розробленого скрипту в тестовому середовищі.
5. Аналіз результатів виконання.Перевірка результатів виконання
скрипту на відповідність очікуваним результатам. Фіксація виявлених
дефектів.
Існують наступні стратегії підтримки тестових скриптів:
1. Підтримка тестових скриптів є невід’ємною частиною процесу
автоматизованого тестування. ПЗ постійно змінюється, що може призводити
до некоректної роботи існуючих скриптів,щоб цього не відбулось потрібно:
16
− регулярно переглядати та оновлювати функціональності
відповідно до змін у вимогах;
− бути в курсі всіх змін, що вносяться до КІС, щоб своєчасно
оновлювати відповідні тестові скрипти;
− робити рефакторинг коду тестових скриптів, це допомагає
підтримувати його читабельність, модульність та стійкість до змін;
− використовувати стійкі локатори елементів інтерфейсу
(наприклад, ID замість XPath, що часто змінюється), що зменшує
необхідність частого оновлення скриптів;
− використовувати добре спроектовані фреймворки автоматизації,
що дозволить полегшити підтримку великої кількості тестових скриптів.
2. Усі зміни, внесені до тестових скриптів, повинні бути
задокументовані. При виявленні падіння автоматизованих тестів важливо
ретельно проаналізувати причини (дефект у ПЗ чи проблема в скрипті) та
внести відповідні виправлення.
3. Ефективна підтримка тестових скриптів забезпечує їхактуальність
та продовжує приносити користь протягом усього життєвого циклу розробки
КІС (рис. 1.1).
17
Рис. 1.1 – Життєвий цикл розробки КІС
1.4.4 Виконання автоматизованих тестів
Після розробки та підготовки тестових скриптів настає етап їх
виконання. Ефективне виконання автоматизованих тестів є ключовим для
своєчасного виявлення дефектів та отримання цінної інформації про
якість КІС.
Запуск автоматизованих тестів може здійснюватися різними способами
залежно від обраних інструментів, фреймворків та налаштувань проекту.
Тести запускаються безпосередньо на робочій станції тестувальника. Цей
спосіб часто використовується під час розробки та налагодження тестових
скриптів. Багато інструментів автоматизації надають можливість запуску
тестів через командний рядок з різними параметрами, що дозволяє гнучко
керувати процесом виконання.
Інтеграція з інструментами безперервної інтеграції, безперервної
доставки (CI/CD): автоматизовані тести можуть бути інтегровані в пайплайн
CI/CD (наприклад, Jenkins, GitLabCI, CircleCI), що забезпечує їх
автоматичний запуск при кожній зміні коду або за розкладом. Це сприяє
ранньому виявленню дефектів та швидкому отриманню зворотного зв’язку.
Для скорочення загального часу виконання великої кількості тестів може
застосовуватися техніка розпаралелювання, коли тести запускаються
одночасно на декількох машинах або в декількох потоках. Автоматизовані
тести можуть бути налаштовані на регулярний запуск за визначеним
розкладом (наприклад, щоночі), що дозволяє проводити систематичну
перевірку стабільності та якості КІС. Вибір способу запуску залежить від
потреб проекту, інфраструктури та рівня інтеграції автоматизованого
тестування в процес розробки.
Управління тестовим середовищем.Для успішного виконання
автоматизованих тестів необхідно забезпечити належне управління тестовим
середовищем, а саме:
18
− налаштування необхідного програмного та апаратного
забезпечення, конфігурацій, даних та залежностей для виконання тестів;
− забезпечення наявності актуальних тестових даних, які
відповідають вимогам тестових сценаріїв;
− у складних проектах може бути доцільним використання
ізольованих тестових середовищ для різних видів тестування;
− здійснення моніторингу стану тестового середовища (наприклад,
завантаження ресурсів, доступність сервісів) для виявлення можливих
проблем.
Аналіз результатів виконання автоматизованих тестів.Інструменти
автоматизації зазвичай надають детальні звіти про результати виконання,
включаючи інформацію про кількість успішних та невдалих тестів, час
виконання, журнали та скріншоти (у разі падіння UI-тестів). Важливо
відрізняти дефекти в ПЗ від проблем у самих тестових скриптах або
тестовому середовищі. Усі виявлені дефекти повинні бути задокументовані
та зареєстровані у відповідній системі (наприклад, Jira, Bugzilla).
В табл. 1.1 наведемо порівняння систем автоматизованого тестування
Jira та Bugzilla за основними критеріями.
Таблиця 1.1
Основні технічні характеристики сучасних моделей портативних
пристроїв моніторингу стану здоров’я
№п.
Критерій Jira Bugzilla
п.
управління завданнями, відстеження та управління
1 зосер едженість
тестами, CI/CD багами
вбудовані дашборди, базові звіти, вручну або
2 аналі тика тестів
звіти, віджети через зовнішні інструменти
широка, автоматичні потрібна ручна настройка
3 інтег рація з CI
тригери або плагіни
зв’язок з сильна через плагіни частіше використовують
4
автотестами (Zephyr, Xray) сторонні рішення
19
З часом накопичені дані про результати виконання тестів можуть бути
використані для аналізу тенденцій якості ПЗ, виявлення проблемних
областей та оцінки ефективності автоматизованого тестування [21].
1.4.5 Аналіз результатів тестування та звітування про виявлені
дефекти
Етап аналізу результатів тестування є критично важливим для
перетворення сирих даних про виконання тестів на корисну інформацію про
якість КІС. Ефективний аналіз дозволяє ідентифікувати дефекти, зрозуміти їх
природу та вплив, а також надати чіткі та змістовні звіти для команди
розробки та інших зацікавлених сторін.
Процес аналізу результатів тестування.Аналіз результатів тестування
є комплексним процесом, який включає наступні кроки:
1. Збір даних про результати виконання всіх видів тестування
(ручного та автоматизованого) з різних інструментів та джерел в єдиний
формат.
2. Вивчення звітів, наданих інструментами автоматизації та
журналами ручного тестування, для розуміння загальної картини якості КІС.
3. Визначення тестів, які не пройдено.
4. Ретельне вивчення журналів виконання, скріншотів, відеозаписів
(якщо є) та іншої діагностичної інформації для встановлення першопричини
невдачі.
Принципи ефективного звітування про виявлені дефекти. Якісне
звітування про дефекти є ключовим для ефективної комунікації між
командою тестування та розробки.
1. Добре складений звіт про дефект повинен містити лише необхідну
інформацію, викладену чітко та зрозуміло.
2. Інформація, наведена в звіті, повинна бути достовірною та
відповідати фактичній поведінці КІС.
20
3. Кроки для відтворення дефекту повинні бути детальними та
однозначними, щоб у розробник була можливість легко відтворити проблему
у своєму середовищі.
4. Опис дефекту повинен бути об’єктивним та не містити припущень
або особистих думок тестувальника.
Основні елементи якісного звіту про дефект включають:
− унікальний ідентифікатор дефекту;
− заголовок (короткий опис);
− опис дефекту;
− кроки відтворення;
− очікуваний результат;
− фактичний результат;
оцінка впливу дефекту на функціональність КІС (наприклад, критичний,
високий, середній, низький); автор звіту та дата виявлення помилок [20].
1.4.6 Інтеграція автоматизованих тестів у процес розробки
комп’ютерних інформаційних систем
В умовах сучасних вимог до швидкості та якості розробки ПЗ
інтеграція автоматизованих тестів у процес безперервної інтеграції та
безперервної доставки (ContinuousIntegration/ContinuousDelivery або CI/CD) є
не просто бажаною, а необхідною практикою. CI/CD забезпечує
автоматизацію етапів розробки, тестування та розгортання ПЗ, що дозволяє
значно прискорити випуск нових версій, підвищити їх якість та зменшити
ризики.
Основи та принципи CI/CD.CI/CD є набором практик, спрямованих на
автоматизацію процесів розробки та доставки ПЗ (рис. 1.2). До таких
принципіввідносяться:
1. Безперервна інтеграція (ContinuousIntegration – CI). Практика, яка
передбачає часте (зазвичай щоденне) злиття коду від різних розробників в
основну гілку репозиторію. Після кожного злиття автоматично виконуються
21
збірка проекту та набір автоматизованих тестів для швидкого виявлення
інтеграційних проблем та дефектів.
2. Безперервна доставка (Continuous Delivery – CD). Розширення CI,
яке передбачає автоматизацію процесу підготовки ПЗ до випуску в
продуктивне середовище. Це включає автоматизоване тестування у різних
середовищах, конфігурацію інфраструктури та підготовку до розгортання.
3. Безперервне розгортання (ContinuousDeployment – також
CD).Подальший розвиток безперервної доставки, який передбачає
автоматичне розгортання кожної успішно протестованої версії ПЗ в
продуктивне середовище без ручного втручання.
Рис. 1.2 – Основні принципи автоматизації процесів
розробки, розгортання та доставки ПЗ
4. Практичні аспекти інтеграції автоматизованих тестів у CI/CD.
Інтеграція автоматизованих тестів у CI/CD вимагає ретельного планування та
налаштування. Існує множина популярних CI/CD інструментів, таких як
Jenkins, GitLabCI, CircleCI, TravisCI, GitHubActions, AzureDevOps.
Вибір конкретного інструменту залежить від інфраструктури, технологічного
стеку та потреб проекту. Налаштування взаємодії між обраними
інструментами автоматизації тестування та CI/CD сервером для
22
автоматичного запуску тестів. Налаштування збору, аналізу та відображення
результатів автоматизованих тестів у CI/CD системі. У разі падіння тестів
пайплайн повинен автоматично повідомляти команду розробки та зупиняти
подальші етапи [10].
2 СИСТЕМНИЙ АНАЛІЗ ІНСТРУМЕНТІВ ТА ТЕХНОЛОГІЙ
АВТОМАТИЗАЦІЇ ПРОЦЕСУ ТЕСТУВАННЯ
2.1 Інструменти автоматизації тестування
Selenium – один з найпопулярніших і найпотужніших інструментів для
автоматизації веб-браузерів. SeleniumWebDriver дозволяє імітувати дії
користувача в браузері (кліки, введення тексту, вибір елементів тощо), що
робить його ідеальним для перевірки функціональності веб-додатків.
Даний інструмент підтримує роботу на базі Windows та Linux, а також
браузери GoogleChrome, Firefox, Safari, Edge, InternetExplorer та навіть деякі
браузери без графічного інтерфейсу. Найчастіше використовується з
регресійним та функціональним тестуванням. Для того, щоб зрозуміти логіку
роботи SeleniumWebDriver потрібно розібратися з основними компонентами
для взаємодії, що складається з таких компонентів:
− браузер;
− драйвер конкретного браузера;
− клієнтська бібліотека;
− протокол JavaScript Object Notation Wire.
Цей інструмент є потужним та досить популярним серед
тестувальників, проте, як будь-яке ПЗ, має переваги та недоліки.
Переваги:
− інтеграція з великою кількістю мов програмування;
− простий набір команд та легкість створення скриптів;
− виконання авто-тестів можна здійснювати без участі людини та у
будь-який час;
− безкоштовний продукт з відкритим вихідним кодом.
Недоліки:
− необхідність володіння навичками програмування;
− обмеженість функціоналу в порівнянні з платними аналогами;
24
− не може бути використаний для тестування графічних елементів та
Flash-об’єктів.
Робота з SeleniumWebDriver. Для початку роботи з веб-драйвером
попередньо потрібно встановити JavaDevelopmentKit, якщо автоматизація
здійснюватиметься на мові Java та будь-яку програму для програмної
реалізації. Це може бути IntelliJIDEA – інтегроване середовище розробки ПЗ,
яке є доволі зручним при роботі з веб-драйвером та є популярним
інструментом у програмуванні. За допомогою нього можна налаштовувати та
формувати зручні звіти по тестуванню та збір статистики.
Перед створенням проєкту в IntelliJIDEA користувачу необхідно
вибрати платформу, як засіб автоматизації, де здійснюватиметься тестування.
В IntelliJIDEAміститься перелік платформ, таких як Java, Maven,
Gradle,Groovy, Kotlin.
Рис. 2.1 – Зовнішній вигляд вікна Selenium при виборі платформи Maven
В залежності від вибору платформи, скрипти бібліотек Selenium будуть
відрізнятися. Для прикладу платформа Maven. Скрипти для Maven є
довшими ніж, як Gradle або Kotlin.
Приклад скрипту для Maven (рис. 2.2).
25
Рис. 2.2 – Зовнішній вигляд скрипту для Maven
Приклад скрипту для Gradle (рис. 2.3).
Рис. 2.3 – Зовнішній вигляд скрипту для Gradle
Приклад скрипту для Kotlin (рис. 2.4).
Рис. 2.4 – Зовнішній вигляд скрипту для Kotlin
На рис. 2.5 наведено зовнішній вигляд вікна Selenium після створення
проєкту.
Рис. 2.5 – Зовнішній вигляд вікна Selenium після створення проєкту
Після створення проєкту на платформі Maven, необхідно встановити
залежність новоствореного проєкту з бібліотекою Selenium. Копіюючи
скрипти до платформи Maven в проєкті (рис. 2.6).
Кросс-браузерне тестування підтримує роботу з множиною популярних
браузерів(Chrome, Firefox, Safari, Edge тощо) та операційними системами.
Інструмент має потужний APIта підтримує різні мови програмування (Java,
26
Python, C#, JavaScript, Ruby тощо), що дозволяє командам використовувати
знайомі інструменти. Велика спільнота, низка розширень та бібліотек
роблять Selenium дуже гнучким та адаптованим до різних потреб [5].
Рис. 2.6 – Встановлення залежності новоствореного проєкту
з бібліотекою Selenium
Cypress –сучасний інструмент для end-to-end тестування веб-додатків,
розроблений з урахуванням потреб розробників та QA-інженерів. Cypress
відрізняється більш простим і зрозумілим API порівняно з Selenium, що
полегшує написання та налагодження тестів. Забезпечує інтерактивний
інтерфейс для запуску та налагодження тестів у реальному часі, що значно
підвищує продуктивність. Вбудовані механізми автоматичного очікування
елементів усувають необхідність в явних очікуваннях, роблячи тести
стабільнішими.Архітектура Cypress, яка виконує більшість команд
безпосередньо в браузері, забезпечує високу швидкість виконання тестів.
Перед роботою з Cypress необхідно мати встановлені Node.js та NPM.
Написання першого end-to-end тесту Cypress:
describe('Todomvc test', () => {
it('Add one todo', () => {
27
cy.visit('https://todomvc.com/examples/react/#/')
cy.get('.new-todo').type('simple todo{enter}')
cy.get('.view label').should('have.text', 'simple todo')
})
})
Команди Cypress describe та it – складають базову структуру тестів
написаних на Cypress, вони запозичені в JavaScript фреймворку.describe –
використовується для групування тест кейсів та приймає два аргументи: опис
тестової групи та callback-функція.it – використовується для
індивідуального тесту та приймає два аргументи: рядок та callback-функція,
яка містить фактичне тіло тесту.
Ланцюжки команд Cypress завжди починаються з cy.<comand>.
cy.visit – відкриває сторінку в браузері, в якості аргументу приймає
URL.
cy.get – повертає елементи з DOM, в якості аргументу приймає
локатор елемента.
type – введення значення у текстове поле. Додана опція {enter} – це
потрібно для натискання клавіши “Enter”, після введення тексту в поле.
shold – створює твердження (assertion). У цьому випадку перевірка
наявності тексту, в щойно доданому todo.
Основні функціїCypress:
− інтерактивний запуск тестів в реальному часі;
− переглядати команди і легко налагоджувати тести;
− перехоплення і підміна запитів, полегшуючи тестування сценаріїв,
що включають виклики API і відповіді мережі.
До переваг відносяться прості налаштування та проста попередня
конфігурація, налагодження та перезавантаження у режимі реального часу.
Недоліки Cypress:
− підтримка лише браузеру Chrome;
− низька швидкість виконання тестів;
− конфігурація з обмеженою гнучкістю.
28
Головним недоліком є обмежена підтримка браузерів, а також
обмежена можливість паралелізації, оскільки паралелізація доступна лише у
платній версії [2].
Інструмент для мобільного тестування Appium –відкритий інструмент
для автоматизації тестування мобільних додатків (гібридних та мобільних
веб-додатків) на платформах iOS та Android. Як і Selenium. Він заснований на
наборі інструментів Selenium.Appium підтримують різні мови програмування
завдякивикористанню WebDriver протоколу. Дозволяє взаємодіяти з
елементами інтерфейсу мобільних додатків на реальних пристроях та
симуляторах. Легко інтегрується з іншими інструментами та фреймворками
для тестування.
Зазначимо особливостіінструменту для мобільного тестуванняAppium:
− має відкритий код;
− працює як сервер у фоновому режимі;
− може керувати Chrome та Safari на мобільних пристроях;
− синхронізується із тестовим фреймворком TestNG;
− підтримує декілька мов програмування (JavaScript, Java, C#, Ruby,
PHP, Node, Python тощо).
Переваги Appium:
− дозволяє користувачам отримати доступ до баз даних тестового
коду та внутрішніх API;
− використання будь-яких мов, підтримка будь-якого фреймворку;
− можна використовувати дротовий протокол
SeleniumWebDriverJSON.
− не потрібно повторно компілювати мобільний додаток;
− за допомогою Java його можна інтегрувати з іншими
інструментами.
29
Інструменти для модульного та інтеграційного тестування:
1. JUnit (Java) – популярний фреймворк для написання та запуску
модульних тестів Java. Має простий та інтуїтивно зрозумілий API для
визначення тестових методів, асертів та життєвого циклу тестів. Чудово
інтегрується з більшістю сучасних IDE (IntelliJIDEA, Eclipse) та build-систем
(Maven, Gradle).Він розроблений з метою підтримки автоматизованих тестів,
особливо модульних тестів.
Налаштування тестового середовища JUnit.На початку потрібно
встановити JUnit.
Приклад для Maven (рис. 2.7).
Рис. 2.7 – Зовнішній вигляд скрипту
для налаштування тестового середовища
Структура тесту. Тестові методи позначаються анотацією @Test
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
public void testAddition() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result, "2 + 3 should equal 5");
}
}
30
Переваги JUnit:
− надійність і простота;
− JUnit допомагає писати модульні тести, вони перевіряють окремі
частини коду;
− надає зручні анотації, такі як @Test, @Before, @After, що
дозволяють організовувати тести та їх виконання більш ефективно;
− пропонує широкий спектр асерцій (assert-ів) для перевірки
результатів тестування.
Недоліки JUnit:
− для використання JUnit потрібно додати його у проект, він потребує
додаткової конфігурації;
− JUnit не підходить для інтеграційного типу тестування або
end-to-end;
− складна інтеграція з іншими фреймворками;
JUnit не надає вбудованих інструментів для аналізу результатів
тестування [24].
2. TestNG (Java) – більш потужний фреймворк для тестування Java,
який розширює можливості JUnit, він пропонує ширший набір анотацій для
контролю виконання тестів, параметризації, групування та залежностей між
тестами.
Приклад простого тесту:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.7.1</version>
<scope>test</scope>
</dependency>
Переваги TestNG:
− паралельне тестування;
− TestNG дозволяє визначати тести, які потрібно виконати
першочергово;
31
− інструмент дозволяє налаштовувати тестування за допомогою
testng.xml;
− легко інтегрується з інструментами Selenium та Jenkins.
Недоліки TestNG:
− складність налаштувань;
− низка додаткових залежностей.
До особливостей TestNG варто віднести такі можливості:
− групування тестів для їх зручнішого запуску та аналізу;
− завдання порядку запуску тестів;
− пропуск непотрібних тестів або тестів з помилками.
3. NUnit (.NET) – фреймворк для модульного тестування для .NET-
платформи, що натхненний JUnit. Використовує атрибути (.NET-еквівалент
анотацій) для визначення тестових методів та налаштувань. Підходить для
тестування різних типів .NET-проектів (бібліотек, веб-додатків тощо).
Головною метою фреймворку є те, що він дозволяє розробникам
писати тести, знаходити дефекти на ранніх стадіях розробки, що значно
зменшує вартість їх виправлення.
NUnit підтримує широкий спектр .NET платформ, включаючи
.NETFramework, .NETCore, .NET (сучасні версії), Xamarin та ін.
Приклад коду NUnit:
//C#
using NUnit.Framework;
// [TestFixture] позначаєклас, щомістить тести
[TestFixture]
public class CalculatorTests
{
private Calculator _calculator; // Припустимо, у нас є
клас Calculator
// [OneTimeSetUp] виконується один раз перед усіма тестами в
фікстурі
[OneTimeSetUp]
publicvoidOneTimeSetup()
{
// Наприклад, ініціалізаціяглобальнихресурсів
TestContext.WriteLine("OneTimeSetUp - Called once before all
tests.");
32
}
// [SetUp] виконується перед кожнимтестовим методом
[SetUp]
public void Setup()
36
{
_calculator = new Calculator(); // Ініціалізуємо
Calculator передкожнимтестом
TestContext.WriteLine("Setup - Called before each test.");
}
// [Test] позначає метод як тестовий
[Test]
public void Add_TwoNumbers_ReturnsSum()
{
// Arrange (Підготовка)
int num1 = 5;
int num2 = 10;
int expected = 15;
// Act (Дія)
int actual = _calculator.Add(num1, num2);
// Assert (Перевірка)
Assert.AreEqual(expected, actual);
TestContext.WriteLine($"Add_TwoNumbers_ReturnsSum:
{num1} + {num2} = {actual}");
}
// [TestCase] дозволяєпараметризуватитест
[TestCase(1, 2, 3)]
[TestCase(-1, -1, -2)]
[TestCase(0, 0, 0)]
[TestCase(100, -50, 50)]
public void Add_ParameterizedTests_ReturnsCorrectSum(int
a, int b,
int expectedSum)
{
int actualSum = _calculator.Add(a, b);
Assert.AreEqual(expectedSum, actualSum);
TestContext.WriteLine($"Add_ParameterizedTests_ReturnsCorrec
tSum:
{a} + {b} = {actualSum}");
}
[Test]
public void Divide_ByZero_ThrowsDivideByZeroException()
{
// Перевіряємо, чивикидаєтьсяочікуванийвиняток
Assert.Throws<DivideByZeroException>(() =>
_calculator.Divide(10, 0));
TestContext.WriteLine("Divide_ByZero_ThrowsDivideByZeroExcep
tion: Caught expected exception.");
}
// [TearDown] виконуєтьсяпісля кожного тестового методу
33
[TearDown]
public void Teardown()
{
_calculator = null; // Очищенняресурсів
TestContext.WriteLine("TearDown - Called after each test.");
}
// [OneTimeTearDown] виконуєтьсяодинразпіслявсіхтестів у
фікстурі
[OneTimeTearDown]
public void OneTimeTearDown()
{
// Наприклад, звільненняглобальнихресурсів
TestContext.WriteLine("OneTimeTearDown - Called once after
all tests.");
}
}
// Прикладкласу, якиймитестуємо
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public double Divide(int a, int b)
{
if (b == 0)
{
throw new DivideByZeroException("Cannot divide
by zero.");
}
return (double)a / b;
}
}
Переваги NUnit:
− NUnit пропонує широкий спектр можливостей для написання
різноманітних тестів. Дозволяє створювати складні налаштування для них
(SetUp, TearDown, OneTimeSetUp, OneTimeTearDown).
− підтримує запуск тестів паралельно, це прискорює час виконання
великих тестових наборів.
− фреймворк є безкоштовним має відкритий вихідний код.
З недоліків є те що для нових користувачів потрібен час для вивчення
атрибутів та можливостей.
34
Інструменти для тестування продуктивності:
1. LoadRunner (MicroFocus) – комерційний інструмент для тестування
продуктивності та навантаження великих систем. Дозволяє генерувати
велику кількість віртуальних користувачів для імітації реального
навантаження на систему. Підтримує множину протоколів (HTTP/HTTPS,
SOAP, Citrix, SAP тощо) для тестування різних типів додатків. Надає потужні
інструменти для моніторингу та аналізу продуктивності системи під
навантаженням, виявлення вузьких місць й проблем. Генерує комплексні
звіти з графіками та метриками продуктивності.
Це хороший варіант для команд, які хочуть провести навантажувальне
тестування та тестування продуктивності. LoadRunner має чудові функції
звітності та аналізу, які надають надзвичайно детальну інформацію про
продуктивність. Але й у нього є деякі недоліки щодо написання скриптів,
яке вимагає багато часу на підтримку.
Основна мета LoadRunner полягає в наступному, а саме:
− виявлення вузьких місць;
− оцінка масштабованості;
− підтвердження відповідності SLA (Service Level Agreements);
− прогнозування поведінки системи.
Сильні сторони LoadRunner:
− дозволяє тестувати практично будь-який тип додатка;
− дозволяє спостерігати за поведінкою системи під час тестування;
− це гарне рішення зі складними системами та високими вимогами до
продуктивності;
− інтегрується з іншими інструментами (наприклад, Jenkins для
CI/CD, ALM).
Недоліки LoadRunner:
− вартість зависока, що часто є бар’єром для малого та середнього
бізнесу;
35
− складне налаштування та підтримка тестового середовища.
2. JMeter (Apache) – безкоштовний та відкритий інструмент для
тестування продуктивності, розроблений ApacheSoftwareFoundation.
Інструменти для тестування безпеки:
1. OWASPZAP (ZedAttackProxy) –безкоштовний та відкритий
інструмент для тестування безпеки веб-додатків (рис. 2.8), розроблений
OWASP (OpenWebApplicationSecurityProject). Виступає як проксі-сервер, що
дозволяє перехоплювати та аналізувати HTTP/HTTPS трафік між браузером
та веб-додатком. Автоматизоване сканування включає автоматизовані
сканери для виявлення поширених вразливостей (SQLInjection, XSS тощо).
Підтримує як активне, так і пасивнесканування. Має систему плагінів для
розширення функціональності.
Рис. 2.8 – Зовнішній вигляд інструментуOWASPZAP
для тестування безпеки
Основні функції та режими роботи OWASPZAP:
Активне сканування – це атака на цільовий веб-додаток, під час якої
ZAP надсилає тестові запити для виявлення вразливостей (наприклад, SQL-
36
ін’єкції, XSS, проблеми конфігурації). ZAP аналізує весь перехоплений
трафік відповідей, виявляє певні типи вразливостей та надає інформацію про
загальний стан безпеки. ZAP підтримує тестування API (REST, SOAP),
дозволяючи імпортувати їх специфікації для автоматичного сканування.
ZAP пропонує декілька режимів роботи,дозволяючи виконувати будь-
які дії з будь-яким веб-сайтом:
− активно перевіряє будь-які веб-сайти, що знаходяться в області
сканування;
− надає можливість написання власних скриптів для автоматизації
запитів та відповідей, розширення функціоналу;
− може генерувати детальні звіти у різних форматах (HTML, XML,
JSON),що зручно для документування інформації.
До переваг OWASP ZAP входить:
− безкоштовний та з відкритим вихідним кодом;
− широкий спектр функцій для Dynamic Application Security Testing;
− автоматично виявляє вразливості, розкриває конфіденційні дані
тощо;
− підтримує систему плагінів, що дозволяє розширювати його
можливості. Користувачі можуть писати власні скрипти (на JavaScript, Python
тощо) для модифікації логіки сканування або створення власних перевірок;
− надає можливість генерувати звіти у різних форматах (HTML,
XML, JSON).
Недоліки OWASP ZAP:
− слабо виявляє складні логічні вразливості. Для цього необхідне
ручне тестування;
− активне сканування великих та складних веб-додатків може
споживати значну кількість системних ресурсів (процесор, пам’ять), що може
уповільнювати роботу комп’ютера.
37
2. BurpSuite (PortSwigger) – популярний комерційний інструмент для
тестування безпеки веб-додатків, також має безкоштовну версію
CommunityEdition з обмеженою функціональністю. Включаєсканер
вразливостей, інструменти для перехоплення та модифікації запитів,
інструменти для атакі багато чого іншого. Підтримує розширення через
плагіни, написані на Java або Python.
BurpSuite поєднує в собі широкий спектр ручних інструментів з
потужними функціями автоматизованого сканування.
BurpSuite доступний у трьох основних версіях:
1. BurpSuiteCommunityEdition. Безкоштовна версія, вона ідеально
підходить для початківців та для ручного аналізу.
2. BurpSuiteProfessional. Платна версія, поширена серед професійних
фахівців з безпеки. Вона включає повнофункціональний автоматичний
сканер вразливостей, розширені інструменти для автоматизованих атак
(Intruder, Sequencer).
3. BurpSuiteEnterpriseEdition. Корпоративна версія, призначена для
масштабного автоматизованого сканування безпеки веб-додатків у великих
організаціях. Вона орієнтована на CI/CD інтеграцію, масштабованість та
централізоване управління скануваннями.
Інтерфейс BurpSuiteProfessional є модульним і складається з різних
вкладок, які користувач може легко перемикатися між ними для виконання
різних завдань.
1. Dashboard: на цій панелі можна запускати нові сканування,
переглядати статистику знайдених вразливостей.
2. Target: деревоподібна структура, яка показує всі виявлені URL-
адреси та параметри. Тут можна наладити область сканування, щоб BurpSuite
фокусувався лише на певних шляхах.
3. Decoder: Дозволяє кодувати та декодувати дані у різних форматах
(URL, Base64, Hex, HTML тощо).
38
4. Intercept: дозволяє перехоплювати окремі запити та відповіді,
переглядати їх вміст. Це ключовий інструмент для ручного тестування.
5. HTTPHistory: записує всі перехоплені HTTP-запити та відповіді.
Тут можна переглядати історію трафіку, фільтрувати її та надсилати запити
до інших інструментів.
6. Comparer: інструмент для візуального порівняння двох елементів
(наприклад, двох відповідей сервера), що допомагає виявити незначні зміни,
які можуть вказувати на вразливість.
7. Repeater: дозволяє вручну змінити та повторно надсилати окремі
HTTP-запити та аналізувати відповіді сервера.
8. DOMInvader: спеціалізований інструмент для виявлення DOM-
базованих XSS-вразливостей у браузері Burp.
9. Logger: записує всі запити та відповіді, генеровані BurpSuite, що
корисно для відстеження активності.
10. Sequencer: інструмент для аналізу випадковості в токенах сесії або
інших важливих елементах даних, які повинні бути непередбачуваними.
Переваги Burp Suite:
− кожен інструмент має величезну кількість налаштувань, що
дозволяє фахівцям точно контролювати процес тестування та адаптувати
його до специфіки будь-якого додатка;
− функціонал перехоплення та модифікації трафіку є
неперевершеним, дозволяючи тестувальникам докладно аналізувати та
змінювати HTTP/S запити;
− BurpSuite відомий своєю стабільністю та надійністю навіть під час
інтенсивного використання та обробки великих обсягів трафіку.
Недоліки Burp Suiteвключають:
− ціна може бути значною перешкодою для індивідуальних
користувачів;
− для вивчення інструменту потрібен деякий час;
39
− безкоштовна версія не включає автоматичний сканер, що обмежує її
можливості для швидкого виявлення вразливостей без ручного втручання;
− BurpSuite є інструментом DAST. Він не надає функцій статичного
аналізу коду (SAST) або інтерактивного тестування (IAST) з такою ж
глибиною, як спеціалізовані інструменти для цих цілей. Найкращий
результат досягається при поєднанні різних типів тестування.
2.2 Мови програмування для написання тестових скриптів
Java. Одна з найпопулярніших мов програмування в корпоративному
середовищі, широко використовується для автоматизації
тестування (рис. 2.9). Завдяки віртуальній машині Java (JVM), тестові
скрипти можуть виконуватися на різних операційних системах. Має
величезну кількість бібліотек і фреймворків для тестування
(SeleniumWebDriver, JUnit, TestNG, RestAssured для API-тестування тощо).
Java вважається стабільною та надійною мовою для розробки й тестування.
Рис. 2.9 – Особливості мови програмування Java
для написання тестових скриптів
40
Перевагою є те, що мова Java є компільованою, що забезпечує високу
продуктивність виконання, часто використовується у великих компаніях, де
наявнавелика кількість доступних вакансій та ресурсів.
Недоліком Javaє те, що код на Java може бути досить об’ємним
порівняно з деякими іншими мовами (наприклад, Python), іця мова може бути
складною для новачків [14].
Python. Динамічна та інтерпретована мова програмування, відома
своєю простотою і читабельністю. Дуже популярна та швидко зростаюча
мова для автоматизації тестування, особливо для веб-тестуваннята
DataScience, API та dev-ops тестування. Легко вивчається й підтримується,
що прискорює розробку тестових скриптів (рис. 2.10). Багатий вибір
бібліотек для різних видів тестування (SeleniumWebDriver, PyTest, Unittest,
RequestsдляAPI-тестування, RobotFramework). Підходить для різних видів
тестування та інтеграції з іншими інструментами.
Рис. 2.10 – Зовнішній вигляд редактора для написання тестових скриптів
мовою програмування Python
41
Синтаксис Python дуже читабельний та інтуїтивно зрозумілий, що
робить його ідеальним для початківців та швидкого написання скриптів. В
ньому менше рядків коду для виконання тих самих завдань, порівняно з Java
або C#.
Недоліком є те, що Python є інтерпретованою мовою, його
продуктивність низька, ніж у мов (Java, C#), що може бути критичним для
дуже великих тестових наборів або високопродуктивних тестів.
JavaScript. Основна мова програмування для веб-розробки, набула
значної популярності і в автоматизації тестування веб-додатків, особливо з
появою таких інструментів, як Cypress та Playwright. Оскільки веб-додатки
значною мірою написані на JavaScript, її використання для тестування
забезпечує тісну інтеграцію. Існують потужні фреймворки, спеціально
розроблені для веб-тестування (Cypress, Playwright, WebDriverIO, Jest,
Mocha,Puppeteer, Protractor).
В табл. 2.1 наведемо основні переваги та недоліки використання
JavaScript.
Таблиця 2.1
Переваги та недоліки використання мови програмування JavaScript
№
Переваги Недоліки
п.п.
1 коли додаток написаний на JS,
велика кількість фреймворків може
тестувальники можуть
викликати плутанину при виборі та
використовувати цю ж мову,
підтримці.
вона спрощує взаємодію.
2 завд яки Node.js, JavaScript може
Node.js для складних корпоративних
використовуватися для бек-енду
систем може бути менше рішень,
та швидкого виконання тестів
ніж у Java або Python.
поза браузером.
3 вико ристовується у браузерах,
що робить її ідеальною для -
тестування UI/UX.
4 завж ди має розвиток та
-
оновлення.
42
Особливо зручна для тестування поведінки користувацького
інтерфейсу та інтерактивності веб-додатків. Розробники, які знають
JavaScript, можуть використовувати її як для розробки, так і для тестування.
JavaScript популярна для тестування фронтенду, особливо для додатків,
написаних на JavaScript-фреймворках (React, Angular, Vue.js).
C# (.NET).Основна мова програмування для платформи .NET від
Microsoft. Широко використовується в компаніях, які використовують
технології Microsoft, і має хорошу підтримку для автоматизації тестування.
Наявність великої кількості бібліотек та фреймворків для тестування
(.NETTestSDK, NUnit, xUnit.net, SpecFlow для BDD, RestSharp для API-
тестування). Гарна підтримка в інтегрованому середовищі розробки
VisualStudio, що полегшує написання та налагодження тестів (рис. 2.11).
Може здаватися складнішою для новачків порівняно з Python або JavaScript.
Рис. 2.11 – Зовнішній вигляд редактора VisualStudio для написання тестових
скриптів мовою програмування C# (.NET)
Бібліотека платформи С# .NET надає корисний інструментарій для
вирішення великого спектру задач з IT.
Відомі програми, написані на C#: Paint.NET, Pinta, Microsoft Visual
Studio, Windows Installer XML; ігри Rimworld, Pokemon Go, Hearthstone,
Cuphead, Pillars of Eternity, Subnautica та ін.
За рахунок свого простого синтаксису, детальної документації мова C#
є однією з найкращих для вивчення та побудови успішної кар’єри в IT.
43
Крім перерахованих вище, існують й інші мови, які використовуються
для написання тестових скриптів, хоча й менш поширено.
Ruby.Динамічна та інтерпретована мова з елегантним синтаксисом,
використовується в деяких інструментах автоматизації (наприклад,
Cucumber). Дуже популярна, особливо в контексті Behavior-
DrivenDevelopment (BDD) та автоматизації веб-тестування.
До переваг відноситься те, що Ruby відома своїм читабельним
синтаксисом. Це полегшує написання тестів, особливо для BDD-
фреймворків.
Також наявні й недоліки, а саме: менша популярність ніж у Python або
JavaScript; повільніша за компільовані мови.
PHP.Мова легка для вивчення, особливо для розробників, які вже
знайомі з веб-розробкою.Хоча в основному використовується для веб-
розробки на стороні сервера, може застосовуватися для тестування API та
деяких аспектів веб-додатків (наприклад, з використанням фреймворків
Laravel, Symfony, WordPress).
Якщо основний додаток написаний на PHP, використовувати PHP для
тестування логічно та зручно.
Недолік: може бути повільнішою за компільовані мови.
2.3 Вибір мови програмування для тестування
Вибір мови програмування для написання тестових скриптів залежить
від багатьох факторів:
− найчастіше логічно використовувати ту саму мову, що й у розробці,
або мову, яка добре інтегрується з технологіями проекту;
− вибір мови, з якою команда вже знайома, може прискорити процес
автоматизації;
− деякі мови та їх фреймворки можуть краще підходити для певних
видів тестування (наприклад, JavaScript для веб-тестування);
44
− для нових членів команди чи для довгострокової підтримки коду,
простота мови може бути значною перевагою.
У підсумку, кожна з цих мов має свої сильні та слабкі сторони в
контексті автоматизації тестування. Вибір найкращої мови залежить від
конкретної ситуації та потреб команди. Python, Java та JavaScript на
сьогоднішній день є одними з найпопулярніших і найпотужніших варіантів
завдяки своїй розвиненій екосистемі та великій спільноті.
Наведемо класифікацію мов програмування за технологією
програмування (рис. 2.12).
Рис. 2.12 – Класифікаційна схема мов програмування
за технологією програмування
Як видно з рис. 2.12, за технологією програмування розрізняють такі
мови програмування:
− процедурні мови – програма, складається із набору процедур, які
реалізують завдання;
− об’єктно-орієнтовні – головними елементами алгоритму є клас –
новий тип даних, що розширює мову, й об’єкт, що має властивості та дії, які
виконуються об’єктом;
− декларативні – мови створення програм зі штучним інтелектом;
− мова скриптів – це розроблена мова для запису сценаріїв
послідовностей команд, які користувач може виконувати на комп’ютері.
45
2.4 Фреймворки автоматизації для організації та підтримки
тестового коду
Фреймворки автоматизації відіграють ключову роль в організації та
підтримці тестового коду, значно підвищуючи ефективність та надійність
процесу тестування. Призначення фреймворків автоматизації полягає в
наступному:
1. Основні переваги використання фреймворків автоматизації:
− фреймворки надають чітку структуру для організації тестових
скриптів, допоміжних функцій, даних та звітів. Це робить код більш
зрозумілим, легким для навігації та підтримки;
− завдяки визначеним стандартам та шаблонам, усі члени команди
працюють в єдиному стилі,що дозволяє спростити співпрацю;
− поділ коду на логічні модулі, дозволяє покращити його повторне
використання та зменшує дублювання.
2. Фреймворки часто включають бібліотеки та утиліти, які можна
використовувати в різних тестових сценаріях. Це зменшує обсяг коду, який
потрібно писати з нуля, та прискорює процес автоматизації.
3. Покращення читабельності та розуміння коду.Фреймворки часто
використовують підходи, які роблять тестовий код більш читабельним й
зрозумілим, навіть для нетехнічних членів команди.
4. Фреймворки допомагають підтримувати єдиний підхід до
написання тестів, обробки помилок, звітності тощо.
Приклади того, як фреймворки забезпечують організацію та підтримку:
1. PageObjectModel (POM). Популярний патерн, що використовується
в веб-тестуванні. Він представляє кожну сторінку веб-додатка як окремий
клас. Це значно спрощує підтримку, оскільки будь-які зміни в структурі
сторінки вимагають оновлення лише відповідного класу сторінки.
2. Data-DrivenTesting. Фреймворки часто підтримують підходи, які
дозволяють відокремлювати тестові дані від тестової логіки. Дані можуть
46
зберігатися в окремих файлах (наприклад, CSV, Excel, JSON) або базах даних
й передаватися до тестових скриптів.
3. Keyword-DrivenTesting. Фреймворки цього типу дозволяють
визначати тестові сценарії за допомогою ключових слів або дій. Реалізація
цих ключових слів знаходиться в окремих функціях або класах. Це робить
тести більш зрозумілими для нетехнічних спеціалістів і полегшує їх
створення та підтримку.
Наведемо класифікацію фреймворків автоматизації тестування
на рис. 2.13.
Рис. 2.13 – Класифікаційна схема фреймворків автоматизації
для організації та підтримки тестового коду
Як видно з рис. 2.13, розрізняють такі фреймворки автоматизації для
організації та підтримки тестового коду:
− сторінкові об’єкти – відповідають за представлення елементів веб-
сторінок у вигляді класів (PageObjectModel);
− тестові дані – відповідають за розділення логіки тестів (Data-
DrivenTesting);
− ключові слова – дозволяють створювати тести через визначення дій
(Keyword-DrivenTesting);
− -тестові сценарії – результат інтеграції всіх підходів. Це кінцева
форма тестів, яка виконується в тестуванні [12].
3 РОЗРОБКА РОЗШИРЕННЯ ДЛЯ АВТОМАТИЗОВАНОГО
ТЕСТУВАННЯ КЛІЄНТСЬКОЇ ЧАСТИНИ
3.1 Розробка архітектури розширення для інтеграції з BurpSuite
Для ефективного автоматизованого тестування клієнтської частини
веб-застосунків необхідно розробити розширення для BurpSuite(наприклад,
для перехоплення HTTP-відповідей, аналізуJavaScript-коду, виявлення
потенційних вразливостей), яке б інтегрувало обраний інструмент аналізу
(наприклад, спеціалізований сканер JavaScript або інструмент для виявлення
XSS). Архітектура такого розширення повинна забезпечувати безперебійний
потік даних між BurpSuite та зовнішнім інструментом, дозволяючи
автоматизувати процес виявлення потенційних вразливостей безпосередньо в
рамках звичного середовища тестувальника.
Запропонована архітектура розширення включає наступні ключові
компоненти та етапи:
1. Модуль перехоплення та фільтрації HTTP-відповідей. Цей модуль
відповідає за перехоплення всіх HTTP-відповідей, що надходять до
BurpSuite. Для оптимізації процесу аналізу та зменшення навантаження на
зовнішній інструмент, необхідно реалізувати механізм фільтрації. Фільтрація
може базуватися на:
− виборі відповідей з Content-Type: text/html, application/javascript,
text/javascript тощо, які найбільш ймовірно містять клієнтський код для
аналізу;
− URI або шляху:фокусування на певних розділах веб-застосунку,
де клієнтська логіка є найбільш складною або критичною;
− використання APIBurpSuite (IBurpExtenderCallbacks,
IInterceptedProxyMessage) для перехоплення та отримання доступу до вмісту
HTTP-відповідей.
2. Модуль передачі даних до зовнішнього інструменту. Перехоплені
HTTP-відповіді (зокрема, тіло відповіді, що містить HTML або JavaScript)
48
повинні бути підготовлені у форматі, зрозумілому для обраного зовнішнього
інструменту,що може включати:
− вилучення та збереження JavaScript-коду з HTML-сторінок;
− передачу повного тексту JavaScript-файлів;
− форматування даних у JSON або інший формат, який очікує
зовнішній інструмент.
3. Реалізація механізму передачі даних до зовнішнього інструменту.
Розглянемо можливі варіанти:
− виклик зовнішнього процесу (CommandLineInterface –CLI). Якщо
зовнішній інструмент має інтерфейс командного рядка, розширення може
запускати його як окремий процес, передаючи дані через аргументи
командного рядка або стандартний ввід;
− використання мережевих протоколів (наприклад, TCP/IP, HTTP).
Якщо зовнішній інструмент надає API через мережу, розширення може
встановлювати з ним з’єднання та передавати дані;
− використання файлової системи. Збереження даних у тимчасовий
файл, який потім обробляється зовнішнім інструментом.
Для уникнення блокування інтерфейсу BurpSuite, передачу даних та
очікування результатів від зовнішнього інструменту слід реалізувати
асинхронно (наприклад, використовуючи окремі потоки виконання).
4. Модуль обробки результатів аналізу. Після завершення аналізу
зовнішнім інструментом, розширення повинно отримати результати. Формат
отриманих результатів залежатиме від обраного інструменту та механізму
передачі даних. Отримані результати необхідно обробити та перетворити у
формат, зрозумілий для BurpSuite завдяки:
− вилученню інформації про виявлені потенційні вразливості (тип
вразливості, місцезнаходження в коді, опис);
− зіставленню знайдених вразливостей з відповідними HTTP-
запитами та відповідями в BurpSuite.
49
5. Використання APIBurpSuite (IHttpRequestResponse, IScanIssue) для
створення та відображення результатів аналізу у вкладці “Scanner” або у
власній вкладці розширення. Це дозволить тестувальнику централізовано
переглядати та аналізувати знайдені вразливості разом з іншими
результатами сканування BurpSuite.
6. Інтерфейс користувача. Розширення може надавати власний
інтерфейс користувача в BurpSuite (наприклад, нову вкладку) для:
− налаштування параметрів інтеграції;
− відображення прогресу аналізу;
− перегляду детальних результатів аналізу.
Приклад інтеграції з інструментом для аналізу JavaScript. У випадку
інтеграції з інструментом, призначеним для статичного аналізу JavaScript-
коду на предмет потенційних вразливостей (наприклад, виявлення XSS або
інших проблем безпеки), архітектура може виглядати наступним чином:
1. Модуль перехоплення фільтрує HTTP-відповіді та виділяє блоки
<script> з HTML-сторінок та окремі .js файли.
2. Виділений JavaScript-код передається до зовнішнього інструменту
через CLI як вхідні дані.
3. Зовнішній інструмент аналізує код та повертає результати у
форматі JSON, що містить інформацію про знайдені потенційні вразливості
та їх місцезнаходження у коді.
4. Модуль обробки результатів парситьJSON, зіставляє знайдені
вразливості з відповідними HTTP-відповідями та створює звіти про
сканування в BurpSuite, вказуючи на вразливі ділянки коду та контекст їх
використання.
Розглянемометута призначення розробки архітектури ПЗ на рис. 3.1.
50
Рис. 3.1 – Мета та призначення розробки архітектури ПЗ
Відтак, враховуючи вищезазначене визначимо переваги запропонованої
архітектури ПЗ розширення для інтеграції обраного інструменту з BurpSuite:
− зменшення ручної праці та підвищення ефективності виявлення
вразливостей клієнтської частини;
− всі результати аналізу інтегруються доBurpSuite, забезпечуючи
єдину точку для перегляду та звітності;
− можливість інтеграції з різними зовнішніми інструментами, які
спеціалізуються на різних аспектах безпеки клієнтської частини.
3.2 Реалізація основних функцій розширення
Реалізація основної функціональності розширення вимагає написання
коду, який об’єднує описані раніше модулі в єдиний робочий процес.
Розглянемо ключові етапи та приклади реалізації для кожного з них,
використовуючи Python як одну з популярних мов для розробки BurpSuite
розширень.
1. ПарсингJavaScript. Перехоплення та виділення JavaScript.
Python
from burp import IBurpExtender
from burp import IInterceptedProxyMessage
from burp import IHttpRequestResponse
from burp import IHttpListener
from burp import ITabbedCustomUi
from burp import IMessageEditorController
from burp import IMessageEditorTab
51
import re
class BurpExtender(IBurpExtender, IHttpListener):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
callbacks.setExtensionName("JavaScript Analyzer
Integration")
callbacks.registerHttpListener(self)
38
print("JavaScript Analyzer Integration loaded
successfully!")
def processHttpMessage(self, toolFlag, messageIsRequest,
messageInfo):
if not messageIsRequest:
response = messageInfo.getResponse()
analyzable =
self.isResponseAnalyzable(messageInfo)
if analyzable["is_js"]:
js_code = analyzable["code"]
self.analyzeJavaScript(messageInfo, js_code)
elif analyzable["is_html"]:
html_content = self._helpers.bytesToString(response)
script_blocks = re.findall(r"<script[^>]*>(.*?)</script>",
html_content, re.DOTALL | re.IGNORECASE)
for script in script_blocks:
if script.strip():
self.analyzeJavaScript(messageInfo, script)
def isResponseAnalyzable(self, messageInfo):
response = messageInfo.getResponse()
response_info = self._helpers.analyzeResponse(response)
headers = response_info.getHeaders()
content_type = ""
for header in headers:
if header.lower().startswith("content-type"):
content_type = header.split(":")[1].strip().lower()
break
body = self._helpers.bytesToString(response)
is_js = "application/javascript" in content_type or
"text/javascript" in content_type
is_html = "text/html" in content_type
code = body if is_js else None
return {"is_js": is_js, "is_html": is_html, "code":
code}
def analyzeJavaScript(self, messageInfo, js_code):
# Тутбуделогіказапускузовнішньогоаналізатора
print(f"Found JavaScript code in: {messageInfo.getUrl()}")
# Покищо просто виводимоперші 50 символів
52
print(f"First 50 chars: {js_code[:50]}...")
У цьому фрагменті коду: реєструється слухач HTTP-трафіку
(IHttpListener).У методі processHttpMessage перевіряється, чи є відповідь
HTML або JavaScript.Для HTML-відповідей за допомогою регулярного
виразу <script[^>]*>(.*?)</script> виділяються всі JavaScript-блоки.Для
JavaScript-відповідей отримується безпосередньо тіло відповіді.Функція
analyzeJavaScript поки лише виводить інформацію про знайдений код.
2. Запуск аналізу. Інтеграція з зовнішнім інструментом (приклад з
CLI).
Python
import subprocess
import json
# ... (попереднійкод) ...
class BurpExtender(IBurpExtender, IHttpListener):
# ... (registerExtenderCallbacksтаisResponseAnalyzable)
...
def analyzeJavaScript(self, messageInfo, js_code):
try:
# Шлях до виконуваного файлу зовнішньогоаналізатора
analyzer_path = "/path/to/your/javascript_analyzer"
# Передача JavaScript-коду через stdin та
отриманнярезультатів у JSON
process = subprocess.Popen([analyzer_path, "--format",
"json", "-"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr =
process.communicate(input=js_code.encode('utf-8'),
timeout=15)
if stderr:
print(f"Error from analyzer: {stderr.decode('utf-8')}")
return
if stdout:
try:
results = json.loads(stdout.decode('utf-
8'))
self.processAnalyzerResults(messageInfo, results)
except json.JSONDecodeError as e:
53
print(f"Error decoding JSON: {e}")
41
print(f"Raw output: {stdout.decode('utf-8')}")
except FileNotFoundError:
print(f"Error: Analyzer not found at {analyzer_path}")
except Exception as e:
print(f"An error occurred during analysis: {e}")
def processAnalyzerResults(self, messageInfo, results):
# Тут буде логікаобробки та відображеннярезультатів у
BurpSuite
print(f"Analysis results for {messageInfo.getUrl()}:")
print(json.dumps(results, indent=4))
У цьому оновленому коді: Імпортуються модулі subprocess та JSON.У
функції analyzeJavaScript:
− визначається шлях до зовнішнього аналізатора;
− запускається зовнішній процес за допомогою subprocess.Popen;
− JavaScript-код передається на стандартний ввід (stdin), а
результати очікуються на стандартному виводі (stdout) у форматі JSON;
− використовується process.communicate для взаємодії з процесом
та отримання виводу;
− встановлено тайм-аут для запобігання зависанню;
− перевіряються помилки зі стандартного потоку помилок (stderr);
− отриманий з stdout JSON-рядок намагаються розпарсити за
допомогою json.loads;
− результати передаються до функції processAnalyzerResults для
подальшої обробки.
3. Відображення результатів у BurpSuite. Створення власних вкладок
або використання вкладки “Scanner”. Додавання інформації до вкладки
“Scanner”.
Python
from burp import IScanIssue
class CustomScanIssue(IScanIssue):
def __init__(self, httpService, url, issueName,
issueType, severity, confidence, issueBackground,
54
issueDetail, remediationBackground, remediationDetail,
httpRequestResponse):
self._httpService = httpService
self._url = url
self._issueName = issueName
self._issueType = issueType
self._severity = severity
self._confidence = confidence
self._issueBackground = issueBackground
self._issueDetail = issueDetail
self._remediationBackground = remediationBackground
self._remediationDetail = remediationDetail
self._httpRequestResponse = httpRequestResponse
def getUrl(self):
return self._url
def getIssueName(self):
return self._issueName
43
def getIssueType(self):
return self._issueType
def getSeverity(self):
return self._severity
def getConfidence(self):
return self._confidence
def getIssueBackground(self):
return self._issueBackground
def getIssueDetail(self):
return self._issueDetail
def getRemediationBackground(self):
return self._remediationBackground
def getRemediationDetail(self):
return self._remediationDetail
def getHttpService(self):
return self._httpService
def getHttpRequestResponse(self):
return [self._httpRequestResponse]
class BurpExtender(IBurpExtender, IHttpListener):
# ... (попереднійкод) ...
44
def processAnalyzerResults(self, messageInfo, results):
url = messageInfo.getUrl()
httpService = messageInfo.getHttpService()
55
requestResponse =
self._callbacks.helpers().buildHttpRequestResponse(messageIn
fo.getRequest(), messageInfo.getResponse())
for issue in results:
issueName = issue.get("name", "Potential JavaScript
Vulnerability")
issueDetail = issue.get("description", "A potential security
issue was identified in the JavaScript code.")
severity = issue.get("severity", "Low") #
Можливізначення: High, Medium, Low, Information, False
positive
confidence = issue.get("confidence", "Certain")
# Можливізначення: Certain, Firm, Tentative
scanIssue = CustomScanIssue(
httpService,
url,
issueName,
1337000, # Унікальний ID вразливості
severity,
confidence,
"This issue was identified by an external
JavaScript analyzer.",
f"The external analyzer reported the following issue:
<br/><pre>{issueDetail}</pre>",
"Review the identified code and apply
appropriate security measures.",
"Consult security best practices for
JavaScript development.",
requestRespons )
self._callbacks.addScanIssue(scanIssue)
У цьому варіанті:
− визначається клас CustomScanIssue, який реалізує інтерфейс
IScanIssue для представлення результатів сканування;
− у функції processAnalyzerResults для кожного знайденого
результату створюється об’єкт CustomScanIssue з відповідними даними
(назва, опис, серйозність тощо);
− за допомогою self._callbacks.addScanIssue(scanIssue) результати
додаються до вкладки “Scanner”BurpSuite.
class CustomScanIssue(IScanIssue):
def __init__(self, name, url, description,
severity):
self._name = name
self._url = url
56
self._description = description
self._severity = severity
def getIssueName(self):
return self._name
def getUrl(self):
return self._url
def getIssueDetail(self):
return self._description
def getSeverity(self):
return self._severity
Інші обов’язкові методи інтерфейсу IScanIssue [13] можна додати за
потреби:
def processAnalyzerResults(analyzerResults):
for result in analyzerResults:
scanIssue = CustomScanIssue(
name=result.name,
url=result.url,
description=result.description,
severity=result.severity
)
self._callbacks.addScanIssue(scanIssue)
3.3 Розробка правил для виявлення специфічних вразливостей
банківських веб-додатків у клієнтському коді
Розробка ефективних правил для виявлення специфічних вразливостей
у клієнтському коді банківських веб-додатків вимагає глибокого розуміння
потенційних загроз та типових помилок розробки, які можуть призвести до
серйозних наслідків у фінансовій сфері. Ці правила можуть бути реалізовані
як частина зовнішнього аналізатора JavaScript або безпосередньо в
логіцірозширення BurpSuite, якщо воно має вбудовані можливості для
статичного аналізу коду.
Розглянемо деякі ключові категорії вразливостей та приклади правил
для їх виявлення:
1. Витік конфіденційної інформації – ненавмисне розкриття чутливих
даних (наприклад, номерів рахунків, персональних даних, фінансових
транзакцій) у клієнтському коді, коментарях, змінних або при обробці
подій.Пропоновані правила:
57
− пошук рядків, що нагадують номери банківських рахунків (за
певними форматами та контрольними сумами);
− виявлення коментарів, що містять слова “password”, “secret”,
“APIkey”, “token” у поєднанні зі значеннями, що виглядають як
конфіденційні;
− аналіз обробників подій (наприклад, onclick, onmouseover) на
предмет передачі чутливих даних у параметрах URL або функціях, які
можуть бути доступні ззовні;
− перевірка наявності захардкодженихAPI-ключів або токенів у
JavaScript-коді;
− відстеження передачі даних з полів введення, що містять
персональну інформацію (ПІБ, адреса, номер телефону), у відкритих
параметрах запитів без належного шифрування.
2. Вразливості, пов’язані з автентифікацією та авторизацією на
клієнті – неправильна обробка токенів автентифікації, сесій або прав доступу
на стороні клієнта, що може призвести до обходу механізмів безпеки.
Пропоновані правила:
− пошук логіки, яка зберігає токени автентифікації або сесійні
ідентифікатори у локальному сховищі (localStorage, sessionStorage) без
належного захисту від XSS;
− виявлення коду, який безпосередньо маніпулює правами доступу
користувача на клієнті (наприклад, змінює значення ролей або привілеїв у
cookie або локальному сховищі);
− аналіз AJAX-запитів на предмет передачі недостатньо захищених
або передбачуваних параметрів, що визначають рівень доступу до
функціональності;
− перевірка на наявність коду, який приховує елементи інтерфейсу
замість того, щоб забороняти доступ до відповідної функціональності на
сервері.
58
3. Вразливості, пов’язані з обробкою фінансових транзакцій –
маніпуляції з параметрами транзакцій на клієнті, що можуть призвести до
несанкціонованих переказів коштів, зміни сум або призначення платежів.
Пропоновані правила:
− аналіз функцій, що відповідають за ініціацію платіжних
транзакцій, на предмет можливості зміни параметрів суми;
− виявлення коду, який використовує неперевірені або
передбачувані ідентифікатори транзакцій на клієнті;
− відстеження обробки підтверджень транзакцій (наприклад, OTP)
на клієнті та перевірка на відсутність можливості їх обходу або повторного
використання.
4. Вразливості, пов’язані з інтеграцією зі сторонніми сервісами –
небезпечне використання API сторонніх сервісів у клієнтському коді.
Пропоновані правила:
− виявлення захардкоджених ключів API сторонніх сервісів;
− аналіз передачі чутливих даних через API сторонніх сервісів без
належного шифрування;
− перевірка на наявність вразливостей типу Cross-
OriginResourceSharing (CORS) при взаємодії з доменами сторонніх сервісів;
− відстеження використання старих версій сторонніх JavaScript-
бібліотек.
Інтеграція пропонованих правил у розширення:
1. Розширення повинно мати механізм для завантаження та оновлення
набору правил (наприклад, з конфігураційного файлу або віддаленого
джерела).
2. Після виділення JavaScript-коду (як описано вище), розширення
повинно застосовувати до нього розроблені правила.
3. У разі виявлення потенційної вразливості на основі спрацювання
правил, розширення повинно створювати відповідний звіт у BurpSuite (через
59
вкладку “Scanner” або власну вкладку), надаючи детальну інформацію про
проблему, її місцезнаходження та рекомендації щодо усунення.
Приклад простого правила на Python (для виявлення потенційного
витоку API-ключа):
Python
importre
defcheck_for_api_key_leak(js_code):
api_key_patterns = [
r"(?:API|api)_KEY\s*[:=]\s*[\"']([a-zA-Z0-9_-
]+)[\"']",
r"secret(?:_KEY)?\s*[:=]\s*[\"']([a-zA-Z0-9_-]+)[\"']",
# Додайте інші характерні патерни
]
findings = []
forpatterninapi_key_patterns:
matches = re.finditer(pattern, js_code)
for match in matches:
key = match.group(1)
start_index = match.start(1)
end_index = match.end(1)
context = js_code[max(0, start_index - 20):
min(len(js_code), end_index + 20)]
findings.append({
"description": "Потенційний витік API-
ключа.",
"context": f"...{context}...",
"key": key,
"start": start_index,
"end": end_index
})
returnfindings
# ... (інший код розширення) ...
classBurpExtender(IBurpExtender, IHttpListener):
# ... (попередній код) ...
defanalyzeJavaScript(self, messageInfo, js_code):
# ... (запуск зовнішнього аналізатора) ...
# Або безпосередньо аналізуємо код правилами
findings = check_for_api_key_leak(js_code)
if findings:
self.reportVulnerabilities(messageInfo, findings)
defreportVulnerabilities(self, messageInfo, findings):
url = messageInfo.getUrl()
httpService = messageInfo.getHttpService()
60
requestResponse=
self._callbacks.helpers().buildHttpRequestResponse(messageIn
fo.getRequest(), messageInfo.getResponse())
for finding infindings:
issueName = finding["description"]
issueDetail = f"УJavaScript-коді знайдено потенційний API-
ключ: <code>{finding['key']}</code> у контексті:
<pre>{finding['context']}</pre>"
# ... (створення та додавання ScanIssue) ...
Розробка ефективних правил є ітеративним процесом, що вимагає
постійного оновлення та адаптації до нових загроз та особливостей
банківських веб-додатків. Взаємодія з експертами з безпеки банківської
сфери є критично важливою для визначення найбільш релевантних та дієвих
правил [18, 22].
4 ОСОБЛИВОСТІ ТЕСТУВАННЯ ТА ОЦІНКА
РОЗРОБЛЕНОГО РОЗШИРЕННЯ
4.1 Налаштування тестового середовища для банківських веб-
додатків
Ефективне тестування розробленого розширення вимагає створення
контрольованого тестового середовища, яке б імітувало реальні банківські
веб-додатки. Використання навчальних або тестових стендів є ідеальним
варіантом, оскільки вони дозволяють проводити тестування без ризику
впливу на Production-середовища та часто містять типові функціональні
елементи і потенційні вразливості, характерні для банківської сфери.
Кроки з налаштування тестового середовища:
1. Вибір або створення тестових банківських веб-додатків.
Існують спеціально розроблені навчальні веб-додатки, які імітують
різні аспекти банківської функціональності та містять відомі вразливості
(наприклад, OWASPJuiceShop може бути частково адаптований або
використаний як приклад для розуміння веб-вразливостей загалом). Якщо є
доступ до тестових або демонстраційних стендів, наданих розробниками
банківського ПЗ, вони можуть бути найбільш релевантними для тестування
специфічних банківських функцій.
У разі відсутності готових стендів, можна створити спрощені веб-
додатки, що імітують ключові функціональні елементи банківських систем
(наприклад, сторінки авторизації, переказу коштів, перегляду балансу) та
містять навмисно впроваджені вразливості для перевірки роботи
розширення,що можуть включати:
− форми авторизації з різними способами обробки облікових даних на
клієнті;
− сторінки переказу коштів з обробкою сум та рахунків на клієнті;
− інтерфейси перегляду історії транзакцій з динамічнозавантаженими
даними;
62
− сторінки управління профілем користувача з обробкою
персональних даних.
В табл. 4.1 опишемо призначеннязапропонованих спрощених
веб-додатків, що імітують ключові функціональні елементи банківських
систем.
Таблиця 4.1
Призначенняспрощених веб-додатків, що імітують ключові
функціональні елементи банківських систем
Функціональність Опис Обробка даних клієнта
валідація форм (перевірка
e-mail та
Форма авторизації сторінка входу в систему
пароля),шифрування
пароля.
перевірка суми та
інтерфейс вибору рахунків і
рахунків,конвертація
Сторінки для переказу підтвердження переказу,
валют, підрахунок
введення суми.
комісій.
фільтрація та сортування
Інтерфейси перегляду операції користувача
даних на стороні клієнта.
валідація полів (ПІБ,
e-mail, телефон
редагування особистої тощо),маскування
Управління профілем
інформацію введення,підтвердження
змін через
e-mail
2. Розгортання тестових веб-додатків.
Тестові веб-додатки можуть бути розгорнуті локально на комп’ютері
тестувальника за допомогою веб-серверів (наприклад, Apache, Nginx) та, за
потреби, серверних технологій (наприклад, PHP, Python, Node.js). Це
забезпечує повний контроль над середовищем.
Використання віртуальних машин дозволяє створити ізольоване
середовище для кожного тестового веб-додатку, що є корисним при
тестуванні різних конфігурацій або уникненні конфліктів.
63
Контейнеризація є ще одним зручним способом розгортання тестових
веб-додатків, оскільки забезпечує швидке розгортання та відтворюваність
середовища.
3. Налаштування Burp Suite.
Необхідно переконатися, що BurpSuite встановлено та налаштовано для
перехоплення HTTP/HTTPS трафіку з тестових веб-додатків (налаштування
проксі-сервера браузера). Завантажити та встановити розроблене розширення
в Burp Suite.
4. Підготовка тестових облікових записів та даних.
За потреби створити набір тестових облікових записів з різними
рівнями привілеїв для імітації різних сценаріїв використання банківського
веб-додатку.
Забезпечити наявність достатньої кількості тестових даних (наприклад,
номери рахунків, суми переказів, історія транзакцій) для повноцінного
тестування функціональності.
5. Створення сценаріїв використання банківських веб-додатків.
Розробити набір сценаріїв, що імітують типові дії користувачів
банківського веб-додатку (наприклад, авторизація, перегляд балансу,
здійснення переказу коштів, зміна персональних даних).
Створити сценарії, які можуть спровокувати потенційні вразливості, які
розширення має виявляти (наприклад, спроби маніпуляції з параметрами
транзакцій на клієнті, передача чутливих даних у відкритому вигляді).
Тестове середовище має бути ізольованим від Production-середовища
для запобігання випадковим впливам. Бажано мати можливість швидко
відновлювати тестове середовище до початкового стану.
Налаштування ретельно підготовленого тестового середовища є
критично важливим для якісного тестування та об’єктивної оцінки
розробленого розширення. Це дозволить перевірити його ефективність у
виявленні специфічних вразливостей банківських веб-додатків у
контрольованих умовах.
64
4.2 Запуск розробленого розширення та аналіз результатів
Після успішного налаштування тестового середовища з прикладами
банківських веб-додатків, можна переходити до запуску розробленого
розширення в BurpSuite та аналізу згенерованих ним результатів.
Кроки із запуску та аналізурозробленого розширення:
1. Активувати розширення в BurpSuite. Запустити BurpSuite, перейти
до вкладки “Extender”, в розділі “Extensions”, переконатися, що розроблене
розширення увімкнено (зазвичай відображається у списку з позначкою
“Enabled”). Якщо ні, увімкнути його, переглянути виведення розширення у
вкладці “Extender” ->“Output” на предмет будь-яких помилок або
повідомлень про успішний запуск.
2. Переглянути тестові банківські веб-додатки через BurpSuite.
Використати браузер, налаштований для роботи через проксі BurpSuite, для
навігації по підготовлених тестових банківських веб-додатках. Виконати
підготовлені сценарії використання, імітуючи дії звичайних користувачів та
потенційно вразливі дії та переконатися, що BurpSuite перехоплює весь
HTTP/HTTPS трафік, що генерується браузером при взаємодії з тестовими
веб-додатками.
3. Проаналізувати результати, надані розширенням. Залежно від
реалізації розширення, результати аналізу можуть відображатися в різних
місцях BurpSuite:вкладка “Scanner”, якщо розширення інтегровано з
пасивним або активним сканером BurpSuite, виявлені потенційні вразливості
будуть відображатися у вкладці “Scanner” ->“Issueactivity”.Якщо розширення
має власний інтерфейс користувача, результати аналізу можуть
відображатися у спеціалізованому форматі. Розширення може виводити
додаткову інформацію, які можуть бути корисними для розуміння процесу
аналізу та виявлення потенційних проблем з роботою розширення.
65
4. Порівняти результати з очікуваними.Маючи інформацію про
навмисно впроваджені вразливості в тестових веб-додатках, порівняти, чи
були вони успішно виявлені розширенням.
5. Зберегти результати тестування.Зберегти звіти BurpSuite, скріншоти
або інші записи, що документують результати тестування. Ця інформація
буде використана для подальшої оцінки та внесення покращень до
розширення.
Ретельний аналіз результатів, отриманих після запуску розробленого
розширення на тестових банківських веб-додатках, є ключовим для оцінки
його ефективності та виявлення потенційних недоліків.
4.3 Оцінка ефективності розширення у виявленні вразливостей
Для всебічної оцінки ефективності розробленого розширення
необхідно провести порівняльний аналіз його здатності виявляти вразливості
клієнтської частини банківських веб-додатків у порівнянні з іншими
методами, ручний аналіз та використання інших інструментів безпеки.
Методи порівняльної оцінкиефективності розробленого розширення:
1. Проведення ручного аналізу.Залучення досвідчених тестувальників
безпеки для проведення ручного аналізу тих самих тестових банківських веб-
додатків, які використовувалися для тестування розширення. Ручний аналіз
може включати перегляд вихідного коду JavaScript, аналіз поведінки веб-
додатку в браузері, перехоплення та аналіз HTTP/HTTPS трафіку з
використанням BurpSuite. Порівняння переліку вразливостей, виявлених
розширенням, з переліком, виявленим під час ручного аналізу.
2. Порівняння з іншими інструментами автоматизованого аналізу.
Обрати інструменти автоматизованого аналізу клієнтського коду (як
комерційні, так і безкоштовні), які мають схожу функціональність аналізу
JavaScript.
− запустити обрані інструменти для аналізу тестових банківських
веб-додатків, використовуючи їх стандартні налаштування або
66
налаштування, оптимізовані для виявлення вразливостей клієнтської
частини;
− зробити аналіз звітів та результатів, наданими іншими
інструментами, звертаючи увагу на типи виявлених вразливостей, їх опис,
рівень ризику.
Критерії оцінки ефективності. На основі порівняльного аналізу можна
оцінити ефективність розробленого розширення за наступними критеріями:
− повнота виявлення;
− точність;
− специфічність;
− ефективність за часом;
− зручність використання та інтеграція;
− якість звітності.
Використання метрик. Для більш об’єктивної оцінки можна
використовувати кількісні метрики:
− TruePositiveRate (TPR)/Recall: TPR=TP+FNTP (де TP – істинно
позитивні, FN – хибно негативні) – відображає повноту виявлення;
− FalsePositiveRate (FPR): FPR=FP+TNFP (де FP – хибно позитивні,
TN – істинно негативні) – відображає точність;
− Precision: Precision=TP+FPTP – відображає частку справжніх
вразливостей серед усіх знайдених;
− F1-Score: F1 = 2 × Precision + RecallPrecision × Recall – гармонійне
середнє між Precision та Recall, що дає збалансовану оцінку.
Проведення такого порівняльного аналізу дозволить отримати чітке
розуміння сильних та слабких сторін розробленого розширення, визначити
його переваги та недоліки порівняно з іншими методами аналізу безпеки.
67
4.4 Аналіз виявлених проблем та формулювання пропозиції щодо
подальшого вдосконалення розширення
Після проведення тестування та порівняльної оцінки розширення
необхідно ретельно проаналізувати всі виявлені проблеми, недоліки та
області, де розширення показало себе менш ефективно, ніж очікувалося. На
основі цього аналізу формулюються пропозиції щодо подальшого
вдосконалення розширення.
Етапи аналізу виявлених проблем:
1. Класифікація виявлених проблем.
2. Визначення причин виникнення проблем.
3. Оцінка впливу проблем.
Пропозиції щодо подальшого вдосконалення розширення. На основі
аналізу виявлених проблем можна сформувати конкретні та реалістичні
пропозиції щодо вдосконалення розширення. Пропозиції можуть стосуватися
різних аспектів таких як:
− покращення правил виявлення;
− оптимізація продуктивності;
− підвищення стабільності;
− покращення звітності;
− покращення зручності використання;
− детальна документація;
− простіші налаштування;
− розширення функціональності;
− виправлення помилок [11].
5 ВИЗНАЧЕННЯ ПЕРСПЕКТИВ РОЗВИТКУ
АВТОМАТИЗАЦІЇ ПРОЦЕСУ ТЕСТУВАННЯ
5.1 Застосування штучного інтелекту та машинного навчання
Застосування штучного інтелекту та машинного навчання для
оптимізації процесу тестування (наприклад, самостійне генерування тестів,
аналіз ризиків, інтелектуальний аналіз результатів).
1. Самостійне генерування тестів. Сьогодні більшість тестів
розробляються вручну або за допомогою певних шаблонів. Алгоритми
машинного навчання можуть аналізувати вимоги, специфікації та код для
автоматичного генерування тестових кейсів, що дозволить здійснювати:
− генерацію тестів на основі аналізу покриття коду;
− створення тестів для крайніх випадків та непередбачуваних
сценаріїв;
− автоматичне варіювання вхідних даних для виявлення потенційних
проблем;
− генерацію тестів на основі поведінки користувачів.
Перевага полягає в тому, що відбувається скорочення часу на розробку
тестів, підвищення повноти тестування, виявлення неочевидних дефектів.
2. Аналіз ризиків часто проводиться вручну на основі їх досвіду.
Моделі машинного навчання можуть аналізувати історичні дані про дефекти,
зміни коду, складність модулів та інші фактори для автоматичної оцінки
ризиків, що дозволить:
− визначати найбільш ризиковані ділянки програми, на яких слід
зосередити зусилля з тестування;
− визначити пріоритет виконання певних тестів залежно від рівня
ризику;
− динамічно адаптувати стратегію тестування залежно від виявлених
ризиків.
69
3. Інтелектуальний аналіз результатів. Аналіз результатів тестування
часто є рутинним процесом, що включає перегляд, звітів та порівняння
очікуваних та фактичних результатів. Алгоритми ШІ можуть автоматично
аналізувати великі обсяги даних про результати тестування для виявлення
закономірностей та аномалій, які можуть свідчити про наявність дефектів,
прогнозування потенційних проблем на основі аналізу тенденцій у
результатах тестування, надання рекомендацій щодо причин виникнення
дефектів [8, 16].
5.2 Розширення використання підходів TestOps для інтеграції
тестування в DevOps-практики
TestOps (TestingOperations) – це набір практик, принципів та
інструментів, спрямованих на оптимізацію та інтеграцію процесів тестування
в рамках DevOps-життєвого циклу розробки ПЗ. TestOps розглядає
тестування не як окремий етап, а як невід’ємну частину всього процесу
розробки, починаючи від планування і закінчуючи розгортанням та
моніторингом.
Ключовими аспектами TestOps є:
− тестування на всіх етапах DevOps-пайплайну (CI/CD) для
забезпечення швидкого зворотного зв’язку та виявлення дефектів на ранніх
стадіях;
− автоматизація не лише виконання тестів, а й підготовки тестових
даних, розгортання тестового середовища, аналізу результатів та звітності;
− збір та аналіз даних про процес тестування для виявлення вузьких
місць, оптимізації продуктивності та прийняття обґрунтованих рішень;
− забезпечення ефективної взаємодії між командами розробки,
тестування та операцій для досягнення спільних цілей якості;
− ефективне управління тестовими даними, включаючи їх генерацію,
маскування та забезпечення відповідності вимогам.
70
Переваги впровадження TestOps:
− завдяки безперервному тестуванню та швидкому зворотному
зв’язку за рахунок раннього виявлення та запобігання дефектам;
− розширення можливостей інтеграції з новими та існуючими
інструментами для автоматизації ще більшої кількості аспектів тестування;
− застосування штучного інтелекту та машинного навчання для
інтелектуального аналізу результатів тестування, прогнозування проблем,
оптимізації тестових наборів та автоматизації процесів;
− поява та вдосконалення централізованих платформ, які об’єднують
різні інструменти та процеси тестування в рамках DevOps-пайплайну [23].
5.3 Розвиток low-code та no-code інструментів для автоматизації
тестування
Розвиток low-code та no-code інструментів для автоматизації
тестування, дозволитьзробити процес тестування більш доступним для
нетехнічних фахівців.
Визначимо сутність low-code та no-code підходів.
Low-code: платформи, які вимагають мінімального обсягу ручного
кодування. Вони надають візуальні інтерфейси, готові компоненти та
інструменти для конфігурації, що значно спрощує процес автоматизації.
No-code: платформи, які взагалі не вимагають написання коду. Всі дії
виконуються за допомогою візуальних конструкторів, перетягування
елементів (drag-and-drop) та налаштування параметрів.
Замість написання складних скриптів, тестувальники можуть
створювати тестові кейси, використовуючи інтуїтивно зрозумілі графічні
інтерфейси. Платформи надають бібліотеки попередньо розроблених дій та
шаблонів для виконання типових завдань тестування (наприклад, клік на
кнопку, введення тексту, перевірка відображення елемента).
Деякі інструменти дозволяють записувати дії користувача в інтерфейсі
програми, а потім автоматично відтворювати їх як тестові сценарії.
71
Low-code/no-code платформи часто забезпечують інтеграцію з
популярними інструментами для управління тестами, відстеження дефектів
та CI/CD.
Сформулюємо перспективи розвитку low-code/no-code інструментів в
тестуванні.
Очікується поява більш потужних та гнучких інструментів, які зможуть
охоплювати складніші сценарії тестування. Впровадження алгоритмів
штучного інтелекту та машинного навчання для покращення можливостей
самостійного генерування тестів, аналізу результатів та виявлення аномалій у
візуальних інтерфейсах.
Поява low-code/no-code платформ, орієнтованих на конкретні типи
тестування (наприклад, веб-тестування, мобільне тестування, API-
тестування). Усвідомлення переваг використання low-code/no-code
інструментів для прискорення тестування та залучення ширшого кола
фахівців призведе до їх активнішого впровадження в компаніях різного
розміру [4].
5.4 Застосування хмарних рішень для автоматизації процесу
тестування
Суть хмарних рішень для тестування – платформи та сервіси, які
надають інфраструктуру, інструменти та середовища для автоматизованого
тестування через інтернет, без необхідності підтримки складної
інфраструктури.
Основні переваги використання хмарних рішень [17] автоматизації
процесу тестування:
1. Хмарні платформи дозволяють легко масштабувати тестові
середовища та ресурси залежно від потреб проекту. Можна швидко
збільшувати або зменшувати кількість віртуальних машин, браузерів,
пристроїв тощо.
72
2. Відсутність необхідності інвестувати у власне обладнання, його
обслуговування та оновлення, що значно знижує початкові та операційні
витрати. Оплата зазвичай здійснюється за фактичне використання ресурсів.
3. Хмарні рішення часто надають доступ до широкого спектру
операційних систем, браузерів, версій пристроїв, що дозволяє проводити
тестування в умовах, максимально наближених до реальних.
4. Тестувальники незалежно від їх географічного розташування,
можуть легко отримувати доступ до тестових середовищ та результатів
тестування.
5. Провайдери хмарних послуг беруть на себе відповідальність за
підтримку та оновлення інфраструктури та ПЗ, звільняючи від цього команди
тестування.
ВИСНОВКИ
Результатом даної кваліфікаційної роботи є дослідження процесу
автоматизованого тестування програмного забезпечення комп’ютерно-
інформаційних систем шляхом визначення сучасних технологій, методів та
інструментів тестування та розробки розширення для автоматизованого
тестування клієнтського додатку, що дозволить підвищити швидкість,
ефективність та надійність процесу тестування, забезпечуючи випуск
якіснішого та стабільнішого програмного забезпечення.
У результаті роботи над дослідженням автоматизації процесу
тестування програмного забезпечення комп’ютерних інформаційних систем
виконано наступне:
− визначено сутність, роль та значення цілей автоматизації процесу
тестування програмного забезпечення комп’ютерно-інформаційних систем;
− проаналізовано існуючі інструменти та технологій автоматизації,
приведено якісні характеристики існуючих аналогів предмету дослідження;
− проаналізовано сучасні методи та підходи автоматизаціїпроцесу
тестування, визначено переваги і недоліки їх застосування;
− розроблено розширення автоматизованого тестування клієнтської
частини для виявлення специфічних вразливостей банківських веб-додатків у
клієнтському коді;
− проведено оцінку ефективності розширення у виявленні
вразливостей та сформульовано пропозиції щодо подальшого його
вдосконалення;
− визначено перспективи розвитку автоматизації процесу тестування,
враховуючі можливості штучного інтелекту та машинного навчання,
розширення використання підходів TestOps для інтеграції тестування в
DevOps-практики, розвитку low-code та no-code інструментів, та
застосування хмарних рішень.
74
Автоматизація процесу тестування програмного забезпечення є
стратегічно важливим кроком для забезпечення високої якості та надійності
комп’ютерних інформаційних систем. Незважаючи на певні виклики,
переваги автоматизації є очевидними та продовжують зростати з розвитком
технологій. Успішне впровадження автоматизованого тестування вимагає
ретельного планування, вибору відповідних інструментів та кваліфікованої
команди, але в результаті приводить до значного підвищення ефективності
розробки та якості кінцевого продукту. Подальший розвиток штучного
інтелекту та нових підходів обіцяє зробити автоматизацію тестування ще
більш потужним та доступним інструментом у сфері розробки програмного
забезпечення.
Вибір правильних інструментів та технологій автоматизації є критично
важливим для успіху автоматизованого тестування КІС. Ретельний аналіз
ключових критеріїв, розуміння можливостей різних категорій інструментів та
систематичний процес вибору, включаючи пілотне тестування, дозволять
команді обрати найбільш ефективні та відповідні рішення для досягнення
поставлених цілей автоматизації.
Розробка та підтримка якісних тестових скриптів є ключовим фактором
успішної автоматизації тестування КІС. Дотримання принципів розробки,
ефективне проходження етапів створення скриптів та впровадження
стратегій підтримки забезпечують надійність, гнучкість та довговічність
автоматизованих тестів, що сприяє підвищенню якості програмного
забезпечення. Аналіз результатів тестування та якісне звітування про
виявлені дефекти є невід’ємними складовими процесу забезпечення якості
КІС. Ретельний аналіз дозволяє отримати цінну інформацію про стан
програмного забезпечення, а ефективне звітування забезпечує чітку
комунікацію з командою розробки та сприяє швидкому виправленню
виявлених проблем. Застосування правильних принципів та інструментів на
цьому етапі є запорукою випуску якісного та надійного програмного
забезпечення.
75
Зростання популярності хмарних рішень для автоматизованого
тестування є закономірним наслідком загальної тенденції до використання
хмарних технологій. Переваги, які надають хмарні платформи в плані
масштабованості, економії, доступу до різноманітних середовищ та простоти
використання, роблять їх все більш привабливим вибором для компаній, які
прагнуть оптимізувати свої процеси тестування та підвищити якість
програмного забезпечення. У майбутньому очікується подальше зростання та
розвиток цього напрямку.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Baumgartner M., Steirer T., Wendland M.F. Test Automation
Fundamentals: A Study Guide for the Certified Test Automation Engineer Exam.
Тестування програмного забезпечення. [Rocky Nook]. URL:
https://www.amazon.com/Test-Automation-Fundamentals-Certified-Specialist/dp/
1681989816
2. Palani N. Automated Software Testing with Cypress. Автоматизація
тестування веб-застосунків. [Auerbach Publications]. URL:
https://www.routledge.com/Automated-Software-Testing-with-Cypress/Palani/p/
book/9780367699543
3. Jose B. Test Automation: A Manager's Guide. Менеджмент
автоматизації тестування. [BCS]. URL: https://www.amazon.com/Test-
Automation-managers-Boby-Jose/dp/1780175450
4. Sambamurthy M. Test Automation Engineering Handbook. Інженерія
автоматизованого тестування. [Packt]. URL: https://www.amazon.com/Test-
Automation-Engineering-Handbook-Sambamurthy/dp/1803244417
5. Gupta R. Ultimate Selenium WebDriver for Test Automation.
Тестування з використанням Selenium. [Orange Education]. URL:
https://www.amazon.in/Ultimate-Selenium-WebDriver-Test-Automation/dp/
9355518586
6. Skadorva V. Ultimate Web Automation Testing with Cypress. Сучасне
автоматизоване тестування. [Orange Education]. URL:
https://www.amazon.in/Ultimate-Web-Automation-Testing-Cypress/dp/
9355518594
7. Smirnov A. Automated Testing Strategy: Automation Engineers'
Handbook. Стратегії автоматизації. [Leanpub]. URL:
https://leanpub.com/automatedtesting
77
8. Jackvony K. The Complete Software Tester. Комплексне тестування
ПЗ. [The Knowledge Academy]. URL:
https://www.theknowledgeacademy.com/blog/software-testing-books/
9. Pasono M. Software Testing Series – Basics (2024). Основи
тестування. [ApplyQA]. URL: https://applyqa.com/books/
10. Angelov A. Design Patterns for High-Quality Automated Tests.
Шаблони проєктування автотестів. [Amazon]. URL:
https://www.amazon.com/Design-Patterns-High-Quality-Automated-Tests/dp/
B085KR3XQ9
11. Kaner C., Bach J., Pettichord B. Lessons Learned in Software Testing.
Тестування ПЗ у практиці. [Wiley]. URL: https://www.amazon.com/Lessons-
Learned-Software-Testing-Context-Driven/dp/0471081124
12. Angelov A. Automated Software Testing Framework Design. Побудова
фреймворків автотестування. [Leanpub]. URL:
https://leanpub.com/automatedtestingframeworkdesign
13. Gauf B., Dustin E., Garrett T. Implementing Automated Software
Testing. Реалізація автотестування. [Addison-Wesley]. URL:
https://www.amazon.com/Implementing-Automated-Software-Testing-
Practitioners/dp/0321580516
14. Rainsberger J.B. JUnit Recipes. Практичне тестування Java.
[Manning]. URL: https://www.amazon.com/JUnit-Recipes-Practical-Methods-
Programmer/dp/1932394230
15. Crispin L., Gregory J. More Agile Testing. Гнучке тестування.
[Addison-Wesley]. URL: https://www.amazon.com/More-Agile-Testing-Learning-
Journeys/dp/0321967054
16. Dustin E. Effective Software Testing. Практичні методи тестування.
[Addison-Wesley]. URL: https://www.amazon.com/Effective-Software-Testing-
Specific-Improve/dp/0321112551
78
17. Colantonio J. Automation Awesomeness. QA та автотестування.
[TestGuild]. URL: https://testguild.com/automationawesomeness/
18. Kaner C., Falk J., Nguyen H.Q. Testing Computer Software.
Фундаментальні основи. [Wiley]. URL: https://www.amazon.com/Testing-
Computer-Software-2nd-Edition/dp/0471358460
19. Beizer B. Black-Box Testing. Методика «чорного ящика». [Wiley].
URL: https://www.amazon.com/Black-Box-Testing-Techniques-Functional-
Software/dp/0471120944
20. Angelov A. The Secret to High Quality Test Automation. Якість
автотестування.[Leanpub].URL: https://leanpub.com/
thesecrettohighqualitytestautomation
21. Jena A.K. Automated Software Testing: Foundations, Applications and
Challenges. – Springer, 2021.сучасний теоретико-прикладний підхід до
автоматизованого тестування з урахуванням викликів у сучасних КІС. URL:
https://link.springer.com/book/10.1007/978-981-16-1120-0
22. Meszaros G. xUnit Test Patterns: Refactoring Test Code. – Addison-
Wesley, перевидання 2021 року. біблія для тих, хто створює масштабовані й
підтримувані автотести, з прикладами для Java, .NET та Python. URL:
https://www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054
23. Angelov A. The Complete Guide to Test Automation Best Practices. –
Leanpub, 2022. докладний гайд з шаблонами, підходами та антипатернами
автоматизованого тестування. https://leanpub.com/testautomationbestpractices
24. Koskela L. Test Driven: TDD and Acceptance TDD for Java
Developers. – Manning, оновлення 2020. акцент на створенні автотестів у
середовищі Java, підходить для роботи з JUnit. URL:
https://www.manning.com/books/test-driven
79
25. Díaz M., Pérez J., Ruiz-Cortés A. Test Automation for Software-
Intensive Systems: State-of-the-Art and Research Challenges. –
Elsevier/ScienceDirect, 2023. наукове дослідження з фокусом на
автоматизацію у великих програмних системах. URL:
https://doi.org/10.1016/j.jss.2023.111562
26. Бурим О. М., Уткіна Т. Ю. Автоматизація процесу тестування
програмного забезпечення комп’ютерних інформаційних систем
[Електронний ресурс] / [упоряд. : Єгорова О. В., Захарова О. В.,
Кисельов В. Б. та ін.]. Студентська науково-практична конференція ЧДТУ :
зб. тез доповідей, 22–24 квітня 2025 р. М-во освіти і науки України, Черкас.
держ. технол. ун-т. Черкаси : ЧДТУ, 2025.