Добавлен: 11.01.2024
Просмотров: 62
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Після написання тесту розробник запускає його, і очікується, що тест не пройде ("червоний" результат). Це свідчить про те, що функціонал ще не реалізовано, і потрібно переходити до наступного етапу.
На етапі "зеленого" тесту розробник реалізує функціонал, необхідний для проходження тесту. В нашому прикладі, розробник може реалізувати функцію,
яка додає два числа. Після написання коду розробник запускає тест, і очікується,
що тест пройде ("зелений" результат). Це свідчить про те, що функціонал було успішно реалізовано.
На етапі "рефакторингу" розробник розглядає код і перевіряє, чи можна його покращити. Наприклад, розробник може виявити, що певні частини коду можна спростити або оптимізувати. При цьому потрібно переконатися, що всі
тести продовжують працювати як очікувалось.
Таким чином, розкриття коду тестами дозволяє розробникам писати більш стійкий код з меншою кількістю помилок, зменшує час, необхідний для виявлення та виправлення помилок, та забезпечує більшу стабільність продукту.
Розкриття коду тестами є частиною процесу тестування програмного забезпечення, який дозволяє перевірити, чи відповідає код певним вимогам та специфікаціям. Цей підхід полягає у написанні автоматизованих тестів, які
виконують певний код та перевіряють, що його результати відповідають очікуваним.
Процес розкриття коду тестами може бути виконаний на різних етапах розробки програмного забезпечення. Наприклад, на початковому етапі розробки можна написати тести для перевірки коректності введення даних, або тестів, які
перевіряють, що певні алгоритми працюють правильно. На етапі тестування можуть бути написані додаткові тести для перевірки, що попередні пройшли успішно та не були порушені змінами, які були внесені до коду.
Є кілька типів тестів, які можна використовувати при розкритті коду тестами. Один з найпоширеніших типів - це юніт-тести, які перевіряють, чи працює окрема функція коду, при цьому ізолюючи її від інших функцій та компонентів. Інші типи тестів включають інтеграційні тести, які перевіряють
12
взаємодію між різними компонентами програмного забезпечення, та прийняття
(acceptance) тести, які перевіряють, що продукт повністю задовольняє вимоги користувачів.
Незалежно від типу тестів, розкриття коду тестами дозволяє забезпечити якість та стабільність продукту, зменшити час та затрати на виявлення та виправлення помилок, та забезпечити більшу відповідність коду вимогам та специфікаціям. Використання автоматизованих тестів також може допомогти покращити розуміння коду та його функцій, та зробити процес розробки більш ефективним та продуктивним. Крім того, розкриття коду тестами допомагає
виявляти проблеми та помилки ще до того, як вони стануть критичними, тим самим зменшуючи ризики для користувачів та забезпечуючи вищу якість продукту.
Загалом, розкриття коду тестами є важливим етапом в процесі тестування програмного забезпечення, який допомагає забезпечити вищу якість продукту та підвищити ефективність процесу розробки. Розкриття коду тестами (англ.
code coverage) - це процес визначення того, яка частина програмного коду була виконана під час запуску тестів. Зазвичай цей процес проводиться за допомогою спеціальних програмних інструментів, які відслідковують виклики функцій, логічні гілки, оператори та інші елементи коду, що виконуються під час тестування.
Розкриття коду тестами дозволяє визначити, наскільки повні та ефективні
тести були написані. Недостатнє покриття коду може вказувати на те, що певні
фрагменти коду не були викликані під час тестування, що може призвести до того, що певні проблеми та помилки не будуть виявлені. Крім того, розкриття коду тестами може допомогти виявити неявні залежності та взаємодії між частинами коду, що дозволить покращити архітектуру програми та зменшити ризики для користувачів.
Інструменти розкриття коду тестами можуть бути використані для визначення таких метрик, як загальне покриття коду, покриття окремих функцій, класів або пакетів, покриття логічних гілок та виразів, а також для
13
(acceptance) тести, які перевіряють, що продукт повністю задовольняє вимоги користувачів.
Незалежно від типу тестів, розкриття коду тестами дозволяє забезпечити якість та стабільність продукту, зменшити час та затрати на виявлення та виправлення помилок, та забезпечити більшу відповідність коду вимогам та специфікаціям. Використання автоматизованих тестів також може допомогти покращити розуміння коду та його функцій, та зробити процес розробки більш ефективним та продуктивним. Крім того, розкриття коду тестами допомагає
виявляти проблеми та помилки ще до того, як вони стануть критичними, тим самим зменшуючи ризики для користувачів та забезпечуючи вищу якість продукту.
Загалом, розкриття коду тестами є важливим етапом в процесі тестування програмного забезпечення, який допомагає забезпечити вищу якість продукту та підвищити ефективність процесу розробки. Розкриття коду тестами (англ.
code coverage) - це процес визначення того, яка частина програмного коду була виконана під час запуску тестів. Зазвичай цей процес проводиться за допомогою спеціальних програмних інструментів, які відслідковують виклики функцій, логічні гілки, оператори та інші елементи коду, що виконуються під час тестування.
Розкриття коду тестами дозволяє визначити, наскільки повні та ефективні
тести були написані. Недостатнє покриття коду може вказувати на те, що певні
фрагменти коду не були викликані під час тестування, що може призвести до того, що певні проблеми та помилки не будуть виявлені. Крім того, розкриття коду тестами може допомогти виявити неявні залежності та взаємодії між частинами коду, що дозволить покращити архітектуру програми та зменшити ризики для користувачів.
Інструменти розкриття коду тестами можуть бути використані для визначення таких метрик, як загальне покриття коду, покриття окремих функцій, класів або пакетів, покриття логічних гілок та виразів, а також для
13
порівняння покриття коду між різними тестами та версіями програмного забезпечення.
1.5 Призначення GitHub Actions
GitHub Action - це сервіс, що дозволяє автоматизувати процеси від GitHub репозиторію. Один з найбільш корисних варіантів автоматизації - це автоматичне виконання юніт-тестів під час відправки змін в репозиторій.
Звичайно! GitHub Action має безліч можливостей, які дозволяють автоматизувати не тільки виконання юніт-тестів, але й інші процеси, такі як автоматична збірка, розгортання та багато інших.
Окрім цього, GitHub Action має декілька корисних функцій, таких як:
Візуалізація результатів тестування: GitHub Action дозволяє вам відслідковувати результати вашого тестування на графіках та гістограмах. Це допомагає швидко виявляти помилки в коді та вдосконалювати ваші тести.
Кастомні сценарії: GitHub Action дозволяє вам налаштувати сценарії
автоматизації, які відповідають вашим потребам. Наприклад, ви можете налаштувати GitHub Action, щоб автоматично запускати тести при кожному коміті в гілку репозиторію або при пул-реквесті.
Налаштування середовища: GitHub Action дозволяє вам налаштувати середовище, у якому виконуються ваші тести. Наприклад, ви можете вибрати
ОС, встановити необхідні залежності та налаштувати змінні середовища.
GitHub Action дозволяє вам налаштовувати сценарії автоматизації, які
виконуються при певних подіях, таких як коміти до гілки репозиторію,
пул-реквести, створення відгалуження та інші. Кожен сценарій складається з одного або декількох кроків, які виконуються послідовно.
GitHub Action має безліч готових шаблонів, які допомагають вам почати автоматизувати свої задачі з мінімальними зусиллями. Ви можете вибрати шаблон, який найкраще підходить вашому проекту, та налаштувати його відповідно до своїх потреб.
14
1.5 Призначення GitHub Actions
GitHub Action - це сервіс, що дозволяє автоматизувати процеси від GitHub репозиторію. Один з найбільш корисних варіантів автоматизації - це автоматичне виконання юніт-тестів під час відправки змін в репозиторій.
Звичайно! GitHub Action має безліч можливостей, які дозволяють автоматизувати не тільки виконання юніт-тестів, але й інші процеси, такі як автоматична збірка, розгортання та багато інших.
Окрім цього, GitHub Action має декілька корисних функцій, таких як:
Візуалізація результатів тестування: GitHub Action дозволяє вам відслідковувати результати вашого тестування на графіках та гістограмах. Це допомагає швидко виявляти помилки в коді та вдосконалювати ваші тести.
Кастомні сценарії: GitHub Action дозволяє вам налаштувати сценарії
автоматизації, які відповідають вашим потребам. Наприклад, ви можете налаштувати GitHub Action, щоб автоматично запускати тести при кожному коміті в гілку репозиторію або при пул-реквесті.
Налаштування середовища: GitHub Action дозволяє вам налаштувати середовище, у якому виконуються ваші тести. Наприклад, ви можете вибрати
ОС, встановити необхідні залежності та налаштувати змінні середовища.
GitHub Action дозволяє вам налаштовувати сценарії автоматизації, які
виконуються при певних подіях, таких як коміти до гілки репозиторію,
пул-реквести, створення відгалуження та інші. Кожен сценарій складається з одного або декількох кроків, які виконуються послідовно.
GitHub Action має безліч готових шаблонів, які допомагають вам почати автоматизувати свої задачі з мінімальними зусиллями. Ви можете вибрати шаблон, який найкраще підходить вашому проекту, та налаштувати його відповідно до своїх потреб.
14
GitHub Action інтегрується з іншими сервісами, такими як Docker, Amazon
Web Services, Google Cloud та інші, що дозволяє вам використовувати їх у своїх сценаріях автоматизації.
Загалом, GitHub Action є потужним інструментом для автоматизації вашого процесу розробки та забезпечення високої якості вашого програмного забезпечення. Він дозволяє вам економити час та зусилля, які ви можете витратити на більш складні задачі.
Інтеграція з іншими сервісами: GitHub Action дозволяє інтегрувати ваші
тести з іншими сервісами, такими як Slack, Email та інші. Це допомагає швидко отримувати повідомлення про помилки та виявляти їх.
Загалом, автоматизація виконання юніт-тестів за допомогою GitHub Action дозволяє вам швидко виявляти помилки в вашому коді та забезпечувати високу якість вашого продукту.
15
РОЗДІЛ 2
НАЛАШТУВАННЯ СЕРЕДОВИЩА ВИКОНАННЯ РОБОТИ ТА
ВСТАНОВЛЕННЯ ПРОГРАМИ GITHUB ACTION ТА ЙОГО
КОНФІГУРАЦІЯ
2.1 Налаштування локального проекту
Visual Studio Code (VS Code) - це безкоштовний та відкритий редактор коду, розроблений компанією Microsoft. Він є дуже популярним редактором,
який використовують розробники з різних мов програмування.
VS Code забезпечує зручне та налаштоване середовище для написання коду, налагодження та контролю версій.
Для того, щоб автоматизувати виконання юніт-тестів за допомогою GitHub
Action, спочатку потрібно створити файл у вашому репозиторії з назвою
.github/workflows/test.yml. У цьому файлі ви можете вказати конфігурацію вашого тестування, включаючи інструкції для запуску тестів.
Наприклад, якщо ви використовуєте мову програмування Python, ваш файл конфігурації може виглядати наступним чином:
16
У цьому прикладі ми вказали, що ми хочемо запустити юніт-тести під час кожного push в гілку репозиторію, використовуючи Python 3.x. Ми також вказали, що ми хочемо встановити залежності з requirements.txt і запустити юніт-тести, використовуючи python -m unittest discover -s tests.
Після того, як ви створили файл конфігурації, ви можете перевірити його на помилки та зберегти його у вашому репозиторії. Кожного разу, коли ви відправляєте зміни до свого репозиторію, GitHub Action буде автоматично запускати ваші тести на серверах GitHub і повертати результати вам.
Таким чином, автоматизація виконання юніт-тестів за допомогою GitHub
Action дозволяє вам відслідковувати помилки тестування на ранніх етапів розробки та забезпечує, що ваш код завжди працює належним чином. GitHub
Action - це сервіс, який дозволяє автоматизувати ваші розробницькі процеси,
включаючи тестування коду.
Коли ви налаштуєте GitHub Action для виконання юніт-тестів, він буде запускатися автоматично кожен раз, коли ви здійснюєте зміни в коді та відправляєте їх на GitHub. Якщо під час виконання тестів виявляється помилка,
ви отримуєте повідомлення про це, що дозволяє вам виправити проблему до того, як вона потрапить до основної гілки вашого проекту.
Автоматизація виконання юніт-тестів також зменшує кількість ручної
роботи, яку потрібно виконувати розробникам. Замість того, щоб запускати тести вручну, вони можуть сконцентруватися на написанні якісного коду,
знаючи, що юніт-тести запустяться автоматично та перевірять правильність роботи коду.
Отже, використання GitHub Action для автоматизації виконання юніт-тестів
є корисним інструментом для забезпечення якості вашого коду та покращення продуктивності вашої розробки.
Отже, для створення віртуального середовища знадобиться встановлений пакетний менеджер pip, а також модуль virtualenv. Якщо користуватись ОС
Windows, то потрібно встановити ще й програму virtualenvwrapper-win. Нижче наведено приклади Windows:
17
1. Відкрийте командний рядок та введіть наступну команду для встановлення модуля virtualenv: pip install virtualenv
2. Встановіть virtualenvwrapper-win за допомогою команди: pip install virtualenvwrapper-win
3. Створіть нове віртуальне середовище командою: mkvirtualenv env_name, де env_name - назва віртуального середовища.
4. Активуйте віртуальне середовище командою: workon env_name.
Після активації віртуального середовища, всі пакети, які ви встановлюєте за допомогою pip, будуть доступні лише в цьому середовищі. Це дозволяє
уникнути конфліктів між різними версіями пакетів, які використовуються в різних проектах. Щоб вийти з віртуального середовища, достатньо ввести команду deactivate.
2.2 Створення юніт-тестів
Юніт-тести — це тести, які перевіряють роботу окремих модулів програмного забезпечення. Зазвичай, юніт-тести створюються для перевірки правильності роботи окремих функцій, методів та класів.
Основна ідея юніт-тестів полягає у створенні спеціального коду, який автоматично запускається та перевіряє поведінку тестованого модуля. При створенні юніт-тестів, зазвичай, використовуються спеціальні бібліотеки для тестування, такі як unittest, pytest, nose, mocha та інші.
Нижче наведено приклад створення юніт-тесту за допомогою бібліотеки unittest для Python:
18
У цьому прикладі ми створюємо функцію square, яка повертає квадрат числа x. Далі ми створюємо клас TestSquareFunction, який наслідується від класу unittest.TestCase. У цьому класі ми описуємо тести, які перевіряють правильність роботи функції square для різних вхідних даних.
Кожен тест в цьому класі описується як окремий метод з префіксом test_. У
тілі методу ми викликаємо функцію square з різними вхідними даними та перевіряємо результат за допомогою метода assertEqual.
Нарешті, ми викликаємо функцію unittest.main(), яка запускає всі тести.
Якщо всі тести успішно пройдуть, то у консоль виведеться повідомлення про успішне виконання тестів, в іншому випадку будуть виведені повідомлення про помилки.
У цьому прикладі ми створюємо функцію square, яка повертає квадрат числа x. Далі ми створюємо клас TestSquareFunction, який наслідується від класу unittest.TestCase. У цьому класі ми описуємо тести, які перевіряють правильність роботи функції square для різних вхідних даних.
19
Кожен тест в цьому класі описується як окремий метод з префіксом test_. У
тілі методу ми викликаємо функцію square з різними вхідними даними та перевіряємо результат за допомогою метода assertEqual.
Нарешті, ми викликаємо функцію unittest.main(), яка запускає всі тести.
Якщо всі тести успішно пройдуть, то у консоль виведеться повідомлення про успішне виконання тестів, в іншому випадку будуть виведені повідомлення про помилки.
Це лише простий приклад створення юніт-тесту, але він демонструє
основні концепції тестування. Зазвичай, при створенні юніт-тестів потрібно враховувати багато нюансів та деталей, таких як генерація випадкових вхідних даних, обробка виключень, мокування (mocking) залежностей та інше.
В будь-якому випадку, створення юніт-тестів є важливою складовою розробки програмного забезпечення, оскільки вони дозволяють перевіряти коректність роботи окремих модулів та зменшують кількість помилок у роботі
програми в цілому.
Загальний формат написання юніт-тестів на Python дуже схожий на той,
який я описав вище для мови Java. Ось приклад тестування функції, яка повертає середнє арифметичне двох чисел:
20
У цьому прикладі ми спочатку імпортуємо модуль unittest, який надає
функціональність для написання юніт-тестів на Python. Далі ми оголошуємо функцію average, яка приймає два аргументи та повертає їх середнє
арифметичне.
Потім ми оголошуємо клас TestAverage, який успадковується від unittest.TestCase. У цьому класі ми оголошуємо тест test_average, який перевіряє
правильність роботи функції average на трьох тестових наборах.
Тестування виконується за допомогою методу self.assertEqual, який перевіряє, чи дорівнює результат виконання функції очікуваному значенню.
Якщо це так, то тест пройдений успішно.
Нарешті, ми запускаємо тест за допомогою методу unittest.main(). Він автоматично знайде всі тести, оголошені у класі TestAverage, та виконає їх.
Якщо будь-який тест не пройдений успішно, то виведеться відповідне повідомлення про помилку.
2.3 Автоматизація юніт тестів за допомогою GitHub Actions
Для автоматизації запуску юніт-тестів на пайтон за допомогою GitHub
Actions потрібно створити файл .github/workflows/tests.yml, який міститиме
21
наступний код:
Цей файл містить наступне:
● Назва воркфлоу: Run Tests
● Подія, при якій запускається воркфлоу: push (тобто при кожному коміті в гітхабі)
● Налаштування воркфлоу: він буде виконуватись на останній версії Ubuntu
● Кроки воркфлоу:
○ Клонування репозиторію за допомогою actions/checkout@v2
○ Налаштування Python 3.8 за допомогою actions/setup-python@v2
○ Встановлення залежностей з requirements.txt за допомогою pip install
○ Запуск юніт-тестів за допомогою python -m unittest discover tests/
Цей файл можна модифікувати, щоб відповідати конкретним потребам вашого проекту, наприклад, змінити версію Python або шлях до каталогу з тестами.
22
Цей файл містить наступне:
● Назва воркфлоу: Run Tests
● Подія, при якій запускається воркфлоу: push (тобто при кожному коміті в гітхабі)
● Налаштування воркфлоу: він буде виконуватись на останній версії Ubuntu
● Кроки воркфлоу:
○ Клонування репозиторію за допомогою actions/checkout@v2
○ Налаштування Python 3.8 за допомогою actions/setup-python@v2
○ Встановлення залежностей з requirements.txt за допомогою pip install
○ Запуск юніт-тестів за допомогою python -m unittest discover tests/
Цей файл можна модифікувати, щоб відповідати конкретним потребам вашого проекту, наприклад, змінити версію Python або шлях до каталогу з тестами.
22
Після додавання цього файлу в репозиторій GitHub, GitHub Actions автоматично запустить воркфлоу кожного разу, коли буде здійснений коміт в гітхаб. Результати тестів можна переглянути в журналі воркфлоу веб-інтерфейсу
GitHub, де можна побачити, які тести пройшли успішно, а які - ні.
Конфігурація юніт-тестів за допомогою GitHub Actions зазвичай включає в себе кілька кроків, що дозволяють виконати тести та зібрати інформацію про їх виконання.
Ось приклад конфігурації для Python проекту, який використовує pytest:
23
У цій конфігурації ми використовуємо actions/checkout@v2, щоб склонувати репозиторій, actions/setup-python@v2, щоб налаштувати середовище
Python, та pip install, щоб встановити залежності проекту. Далі ми викликаємо pytest, використовуючи команду run.
Також ми передаємо середовищні змінні за допомогою блоку env. У цьому прикладі ми передаємо параметри підключення до тестової бази даних.
Результати виконання тестів можна переглянути в журналі воркфлоу, який буде виконуватися веб-інтерфейсом GitHub. Крім того, за допомогою різних
інструментів можна налаштувати повідомлення у Slack, електронну пошту або
інші інтеграції залежно від ваших потреб.
24