Веріфікація та тестування програмного забезпечення
Сучасні умови ринку праці вимагають від фахівців спеціальності «Комп’ютерні науки», незалежно від їх освітньої програми, всебічного використання новітніх інформаційних технологій, комп'ютеризованих засобів збору, обробки та видачі необхідної інформації, створення на їх основі сучасного програм¬ного забезпечення (ПЗ) з метою значного підвищення якості та надійності програмного забезпечення, створеного для автоматизації різних напрямків людської діяльності.
У цьому контексті найактуальнішим стає питання забезпечення якості розробленого програмного продукту. Контроль якості є невід’ємною частиною кожного інформаційного проекту, а процедури тестування та верифікації ПЗ мають бути організовані на кожному етапі, що дозволяє гарантувати стабільно високу надійність створюваного ПЗ та його відповідність критеріям якості. Якість програмного продукту характеризується набором властивостей, що визначають, наскільки продукт задовольняє висунутим до нього вимогам.
Таким чином, верифікація та тестування ПЗ є одними з найбільш прийнятних та сучасних способів гарантування якості його розробки. З технічної точки зору, тестування ПЗ полягає у його виконанні на деякій множині вихідних даних, та поетапній звірці одержаних результатів із заздалегідь відомими (еталонними), з метою встановлення відповідності різних якостей і характеристик ПЗ висунутим до нього вимогам. В той же час технологія верифікації вимог та специфікацій ПЗ дозволяє знизити трудомісткість його розробки за рахунок виявлення переважного числа дефектів на найбільш ранніх фазах розробки програмного продукту.
Курс входить у обов’язкову частину циклу дисциплін професійної підготовки другого (магістерського) рівня вищої освіти з освітньої програми «Інформаційні технрології проєктування». Програма навчальної дисципліни «Верифікація та тестування програмного забезпечення» є нормативним документом Національного університету «Одеська політехніка», який розроблено кафедрою інформаційних технологій проєктування та дизайну ІЦТДТ на основі освітньої програми підготовки відповідно до навчального плану другого (магістерського) рівня вищої освіти для здобувачів вищої освіти спеціальності F3 «Комп’ютерні науки» та освітньої програми «Інформаційні технології проєктування» денної та заочної форм навчання. Програму навчальної дисципліни укладено згідно з вимогами кредитно-модульної системи організації освітнього процесу в Національному університеті «Одеська політехніка». Програма визначає обсяги компетентностей, які мають опанувати здобувачі другого магістерського рівня вищої освіти відповідно до своєї освітньо-професійної програми та алгоритму вивчення навчального матеріалу дисципліни «Верифікація та тестування програмного забезпечення», а також необхідне методичне забезпечення, складові та технологію оцінювання навчальних досягнень.
Дисципліна викладається протягом першого семестру першого курсу магістрів, складається з лекційних, лабораторних та курсової роботи. У відповідності до навчального плану закінчується іспитом. У процесі вивчення курсу зосереджується увага на засвоєнні знань з застосування методів, методик контролю та тестування правильності роботи програмного забезпечення інформаційних систем.
Мета вивчення дисципліни полягає у встановленні відповідності критеріїв оцінки ПЗ висунутим вимогам; застосовуванні технік та видів тестування на різних рівнях тестування та верифікації ПЗ; засвоєнні основних понять та визначень в галузі тестування; аналізі особливостей процесу й технології індустріального тестування, набуття навичок застосування сучасних інформаційних технологій для аналізу та тестування ПЗ, створення звітної тестової документації.
Предметом дисципліни є основи теорії забезпечення якості про¬грамних продуктів за допомогою сучасних методів та засобів тестування та верифікації ПЗ; сучасні інформаційні технології для тестування ПЗ; методики розробки та створення тестової документації для оцінки якості ПЗ.
Практичне значення та використання отриманих знань. Розуміння відповідності критеріїв оцінки ПЗ висунутим вимогам. Використання технік та видів тестування на різних рівнях тестування та верифікації ПЗ. Засвоєння основних понять та визначень в галузі тестування. Вміння аналізувати особливості процесу й технології тестування. Опанування навичок застосування сучасних інформаційних технологій для аналізу та тестування ПЗ та створення звітної тестової документації
Основними завданнями дисципліни є:
• навчити розробляти та застосовувати критерії для оцінки ПЗ відповідним системним вимогам;
• ознайомити з сучасними методами тестування ПЗ за певними критеріями;
• роз’яснити ключові положення верифікації ПЗ для різних рівнів тестування;
• навчити коректному документуванню результатів тестування;
• ознайомити з методами оцінки ПЗ за критеріями тестового покриття системних вимог, відповідності очікуваним результатам.
Тематика та види навчальних занять
Для денної форми здобуття освіти
Лекційні заняття
Лекція 1. Вступ до верифікації та тестування програмного забезпечення
Лекція 2. Основні принципи тестування та психологічні аспекти діяльності тестувальника.
Лекція 3. Документація у тестуванні програмного забезпечення.
Лекція 4. Тестові артефакти процесу забезпечення якості.
Лекція 5. Класифікація функціонального тестування.
Лекція 6. Класифікація нефункціонального тестування.
Лекція 7. Рівні тестування: Unit та Component Testing.
Лекція 8. Рівні тестування: Integration, System та Acceptance Testing.
Лекція 9. Техніки тест-дизайну “чорного ящика” (Black-box Testing Techniques).
Лекція 10. Техніки тест-дизайну “білого ящика” та моделювання тестів.
Лекція 11. Метрики тестування та моделі надійності програмного забезпечення.
Лекція 12. Сучасні методології розробки та тестування програмного забезпечення.
Лекція 13. Методології розробки програмного забезпечення орієнтовані на тестування: TDD, BDD, ATDD, контрактне тестування.
Лекція 14. Сучасні техніки тестування та автоматизованої верифікації.
Лекція 15. Управління тестуванням і тенденції розвитку галузі QA.
Лабораторні роботи
Лабораторна робота №1. Ознайомлення з тестовими артефактами програмного забезпечення.
Мета роботи: проаналізувати основні документи тестування (специфікацію вимог, тест-план, чек-лист, тест-кейс, звіт про дефект) та встановити взаємозв’язки між ними.
Лабораторна робота №2. Розроблення специфікації вимог (Software Requirements Specification, SRS)
Мета роботи: створити структурований документ вимог до програмної системи згідно з IEEE 830 / ISO 29148, визначити функціональні й нефункціональні вимоги.
Лабораторна робота №3. Створення чек-листа тестування програмного продукту.
Мета роботи: розробити тестовий чек-лист для веб- або десктопного застосунку з урахуванням типів перевірок і критеріїв проходження.
Лабораторна робота №4. Створення тест-кейсів і виконання ручного тестування.
Мета роботи: навчитися описувати тест-кейси за шаблоном, виконувати ручне тестування й формувати звіт про результати перевірок.
Лабораторна робота №5. Оформлення та аналіз звітів про дефекти (баг-репорти).
Мета роботи: набути знання щодо структури дефекту, навчитися фіксувати помилки, визначати пріоритети, статуси та аналізувати якість звітів про дефекти.
Лабораторна робота №6. Модульне (Unit) тестування засобами Pytest.
Мета роботи: розробити автоматизовані модульні тести у Python, використовуючи параметризацію, фікстури та перевірку виняткових ситуацій.
Лабораторна робота №7. Компонентне (Integration) тестування Python-модулів.
Мета роботи: виконати інтеграційне тестування взаємодії кількох функцій або класів одного модуля, застосовуючи mock-об’єкти та перевірку залежностей компонентів.
Лабораторна робота №8. Аналіз покриття коду тестами (Code Coverage Analysis).
Мета роботи: освоїти використання інструменту pytest-cov для вимірювання рівня покриття коду, виявлення неперевірених ділянок та підвищення ефективності тестів.
Лабораторна робота №9. Нефункціональне тестування продуктивності програмних компонентів.
Мета роботи: навчитися оцінювати швидкодію функцій за допомогою pytest-benchmark, проводити порівняльний аналіз результатів і будувати базові метрики продуктивності.
Лабораторна робота №10. Статичний аналіз безпеки коду.
Мета роботи: дослідити можливості інструмента Bandit для автоматичного виявлення поширених уразливостей на мові програмування Python, інтерпретувати результати та запропонувати рекомендації щодо усунення ризиків..
Лабораторна робота №11. Тестування на основі властивостей (Property-based Testing з Hypothesis).
Мета роботи: опанувати принципи автоматичного генерування вхідних даних для функцій, створення стратегій перевірки та виявлення крайових випадків під час тестування.
Лабораторна робота №12. Fuzz-тестування функцій і API-викликів.
Мета роботи: дослідити підхід fuzz-тестування для виявлення помилок і відмов при некоректних або випадкових вхідних даних, оцінити стабільність функцій і модулів.
Лабораторна робота №13. Автоматизація тестового процесу: Quality Gate у Google Colab.
Мета роботи: створити інтегрований сценарій автоматизованої перевірки якості коду (pytest, покриття > 80 %, ruff + mypy + bandit) для формування звіту “пройдено / не пройдено”.
Лабораторна робота №14. Контрактне тестування інтерфейсів та структур даних (Contract Testing).
Мета роботи: навчитися перевіряти коректність зовнішньої поведінки функцій та API незалежно від їх реалізації, забезпечувати стабільність інтерфейсів та запобігати регресіям, пов’язаним зі змінами структури даних
Лабораторна робота №15. Візуалізація логіки програми та аналіз шляхів виконання (UML + Coverage Flow).
Мета роботи: навчитися пов’язувати формальні моделі поведінки програмних компонентів (UML) із реальними шляхами виконання коду, виявляти «білі плями» у покритті та підвищувати якість тестового набору на основі структурного аналізу.
Для заочної форми здобуття освіти
Лекційні заняття
Лекція 1. Вступ до верифікації та тестування програмного забезпечення
Лекція 2. Основні принципи тестування та психологічні аспекти діяльності тестувальника.
Лабораторні роботи
Лабораторна робота №1. Ознайомлення з тестовими артефактами програмного забезпечення.
Мета роботи: проаналізувати основні документи тестування (специфікацію вимог, тест-план, чек-лист, тест-кейс, звіт про дефект) та встановити взаємозв’язки між ними.
Лабораторна робота №2. Розроблення специфікації вимог (Software Requirements Specification, SRS)
Мета роботи: створити структурований документ вимог до програмної системи згідно з IEEE 830 / ISO 29148, визначити функціональні й нефункціональні вимоги.
Консультації здійснюються впродовж семестру згідно встановленого розкладу.
Індивідуальна робота
Для денної та заочної форми здобуття освіти
Курсова робота
Мета курсової роботи – закріплення теоретичних знань і практичних навичок, отриманих на лекціях, лабораторних заняттях та при виконанні самостійних робіт.
Курсова робота включає:
• аналіз предметної області;
• аналіз системи, що підлягає тестуванню;
• розробку чек-листів, тест-кейсів та баг-репортів;
• складання звіту за результатами тестування;
• оформлення пояснювальної записки.
Тематика курсових робіт визначається та затверджується на засіданні кафедри. Під час розробки тем курсових робіт можуть враховуватись побажання здобувачів, замовлення окремих викладачів або кафедр університету, а також сторонніх організацій та підприємств. Курсова робота може бути частиною кафедральної комплексної курсової роботи, що виконується декількома студентами. Обмежень щодо обсягу пояснювальної записки немає.
Етапи виконання роботи:
1. Отримання завдання
2. Розділ 1. Дослідження та аналіз предметної області (тестування ПЗ)
3. Розділ 2. Аналіз системи, що підлягає тестуванню
4. Розділ 3. Розробка специфікації, чек-листів та тест-кейсів (та баг-репортів)
5. Розділ 4. Складання звіту за результатами тестування
6. Оформлення пояснювальної записки
7. Захист курсової роботи
Захист курсової роботи – протягом останнього навчального тижня семестру.
Для заочної форми здобуття освіти
Контрольна робота для здобувачів заочної форми
Завдання для виконання контрольної роботи здобувач отримує на установчій лекції.
Робота містить 5 теоретичних питань та 2 практичних завдання. Обсяг відповіді на кожне теоретичне питання: не менше, ніж 0.5 сторінки машинописного тексту. Текст відповіді повинен бути виконаний самостійно, а не скопійованим з навчального посібника.
Практичне завдання №1. Розроблення специфікації вимог (SRS) для спрощеної системи. Необхідно розробити фрагмент документа «Software Requirements Specification (SRS)» для простої інформаційної системи за власним вибором (наприклад: «Система управління бібліотекою», «Онлайн-магазин», «Система бронювання квитків» тощо). У документі потрібно подати короткий опис системи, який включає її мету, типи користувачів та основні функції. Далі необхідно сформулювати перелік функціональних вимог (не менше п’яти) і нефункціональних вимог (щонайменше три), що характеризують очікувану поведінку та якість системи. Завершальним елементом документа є таблиця трасування вимог (RTM), яка демонструє зв’язок між щонайменше двома функціональними вимогами та відповідними тестами.
Практичне завдання №2. Розроблення тестової документації. Для невеликої веб-сторінки, наприклад форми входу на сайт або калькулятора, потрібно створити комплект тестової документації. До нього входить чек-лист із не менше десяти пунктів перевірки, представлений у табличній формі; три тест-кейси, оформлені за стандартним шаблоном із зазначенням ідентифікатора, назви, передумов, кроків виконання, очікуваного результату та статусу; а також один приклад баг-репорту, у якому необхідно описати виявлену проблему, умови тестового середовища, кроки для відтворення, очікувану та фактичну поведінку системи, а також встановити пріоритет дефекту.
Термін надання виконаної контрольної роботи на перевірку – не пізніше, ніж за місяць до початку сесії.
Форми контрольних заходів та оцінювання результатів навчання
Для денної форми здобуття освіти
Поточний контроль полягає у виконанні:
1. Курсової роботи. Бездоганне виконання оцінюється у 60 балів. Захист роботи – 40 балів.
2. 15-ти лабораторних робіт. Повне виконання та захист лабораторних робіт оцінюється по 4 бали за кожну.
3. Написанню двох модульних контрольних робіт. Модульні контрольні роботи складаються з практичного завдання та проводяться у письмовій формі. Бездоганне виконання кожної модульної контрольної роботи становить 20 балів.
Підсумковий контроль – екзамен. Екзамен усний. Максимальна оцінка, яку може отримати студент – 100 балів.
Підсумковий контроль знань проводиться для здобувачів вищої освіти, що не змогли з будь-яких причин набрати необхідну кількість балів, або для здобувачів вищої освіти, що бажають збільшити вже набрану кількість балів. Підсумковий контроль знань здійснюється у вигляді усної бесіди з викладачем (комісією викладачів) по тематиці навчальної дисципліни.
Для заочної форми здобуття освіти
Захист курсової роботи. Бездоганне виконання оцінюється у 60 балів. Захист роботи – 40 балів.
Захист контрольної роботи. Бездоганне виконання контрольної роботи оцінюється у 50 балів. При її захисті студент може отримати до 30 балів.
Виконання двох лабораторних робіт, бездоганне виконання по 10 балів за кожну.
Підсумковий контроль – екзамен. Екзамен усний. Максимальна оцінка, яку може отримати студент – 100 балів.
Підсумковий контроль знань проводиться для здобувачів вищої освіти, що не змогли з будь-яких причин набрати необхідну кількість балів, або для здобувачів вищої освіти, що бажають збільшити вже набрану кількість балів. Підсумковий контроль знань здійснюється у вигляді усної бесіди з викладачем (комісією викладачів) по тематиці навчальної дисципліни.
ПРН1. Мати спеціалізовані концептуальні знання, що включають сучасні наукові
здобутки у сфері комп’ютерних наук і є основою для оригінального мислення та проведення досліджень, критичне осмислення проблем у сфері комп’ютерних наук та на межі галузей знань.
ПРН3. Зрозуміло і недвозначно доносити власні знання, висновки та аргументацію у сфері комп’ютерних наук до фахівців і нефахівців, зокрема до осіб, які навчаються.
ПРН5. Оцінювати результати діяльності команд та колективів у сфері інформаційних технологій, забезпечувати ефективність їх діяльності.
ПРН13. Оцінювати та забезпечувати якість інформаційних та комп’ютерних систем різного призначення.
ПРН14. Тестувати програмне забезпечення.
ПРН15. Виявляти потреби потенційних замовників щодо автоматизації обробки інформації.
ПРН17. Виявляти та усувати проблемні ситуації в процесі експлуатації програмного забезпечення, формулювати завдання для його модифікації або реінжинірингу.
ПРН18. Збирати, формалізувати, систематизувати і аналізувати потреби та вимоги до інформаційної або комп’ютерної системи, що розробляється, експлуатується чи супроводжується.
ПРН19. Аналізувати сучасний стан і світові тенденції розвитку комп’ютерних наук та інформаційних технологій.