- •Лекція 0. Вступ. Цілі, завдання і місце курсу
- •1. Мета викладання курсу
- •2. Завдання вивчення курсу
- •3. Дисципліни, засвоєння яких необхідне при вивченні курсу
- •4. Характеристика курсу
- •5.1. Література
- •5.2. Інформаційні ресурси мережі Інтернет
- •Лекція 1. Введення у технологію програмування
- •1. Термінологія індустрії ПЗ
- •1.1. Програмування
- •1.2. IT-проекти
- •1.3. Програми і програмне забезпечення (програмні продукти)
- •2. Бізнес і IT-проекти. Ринок ПЗ.
- •3. Про предмет
- •5. Виникнення Технології розробки ПЗ
- •5.1. Коротка історія програмування
- •5.2. Терміни “Технологія”, “Методологія” і “Програмна інженерія”
- •5.3. Стратегії розробки ПЗ
- •6. Огляд технологій програмування
- •6.1. Структурне програмування
- •6.2. Модульне програмування
- •6.4. Компонентне програмування
- •6.5. Висновки з лекції
- •Лекція 2. Елементи програмної інженерії
- •1. Програмна інженерія, основні поняття
- •1.1. Інженери і програмні інженери
- •1.2. Програмна інженерія як інженерна дисципліна
- •1.3. Область дії програмної інженерії
- •2. Цілі програмних інженерів
- •2.1. Поняття “якості” програмного продукту
- •2.2. Створення ПЗ повинно вкладатися до бюджету
- •2.3. Створення ПЗ повинно вкладатися в терміни
- •3. Забезпечення надійності розробки ПЗ
- •3.1. Забезпечення точності інтерпретації
- •3.2. Подолання бар'єру між користувачем і розробником
- •3.3. Контроль ухвалюваних рішень
- •3.4. Програмні інженери і наукове середовище
- •4. Складність програмної системи
- •4.1. Методи боротьби зі складністю
- •5. Моделі якості процесів розроблення ПЗ
- •Лекція 3. Організація технологічного процесу розробки ПЗ
- •1. Процес створення програмного забезпечення
- •1.1. Основні стадії типового процесу створення ПП
- •2. Життєвий цикл та моделі процесу розробки ПЗ
- •2.1. Каскадна модель (Waterfall model)
- •2.2. Макетування (прототипіювання)
- •2.3. Інкрементна модель
- •2.4. Модель Швидкої Розробки (RAD)
- •2.5. Спіральна модель
- •3. “Важкі” і “полегшені” процеси
- •4. ХР-процесс
- •Лекція 4. Оцінка програмного проекту по СОСОМО
- •1. Процес управління проектом
- •1.1. Початок проекту
- •1.2. Оцінювання, заходи і метрики
- •1.3. Процес оцінки
- •1.4. Аналіз ризиків
- •1.5. Планування
- •1.6. Трасування і контроль
- •2. Планування проектних завдань
- •3. Розмірно-орієнтовані метрики
- •4. Функціонально-орієнтовані метрики
- •5. Оцінка проекту на основі LOC- і FP-метрик
- •Лекція 5. Проектування програмних систем
- •1. Особливості процесу синтезу програмних систем
- •2. Особливості етапу проектування
- •3. Структуризація системи
- •4. Моделювання управління
- •5. Декомпозиція підсистем на модулі
- •6. Модульність
- •7. Інформаційна закритість
- •8. Зв'язність модуля
- •8.1. Функціональна зв'язність
- •8.2. Інформаційна зв'язність
- •8.3. Комунікативна зв'язність
- •8.4. Процедурна зв'язність
- •8.5. Часова зв'язність
- •8.7. Випадкова Зв'язність
- •8.8. Визначення зв'язності модуля
- •9. Зчеплення модулів
- •10. Складність програмної системи
- •11. Характеристики ієрархічної структури програмної системи
- •Лекція 6. ПОБУДОВА АРХІТЕКТУРИ ПП
- •1. Поняття архітектури програмного засобу.
- •2. Основні принципи проектування архітектури
- •3. Основні питання архітектора ПП
- •4. Архітектурні стилі (шаблони) ПП
- •5. Поєднання архітектурних стилів
- •6. Основні класи архітектур ПП
- •6.1. Цілісна програма
- •6.2. Архітектура ППП
- •6.3. Архітектура, заснована на шині повідомлень
- •6.4. Архітектура клієнт/сервер
- •6.6. Багатошарова архітектура
- •6.8. Компонентна архітектура
- •6.10. Сервісно-орієнтована архітектура
- •7. 4. Контроль архітектури ПП
- •Лекція 7. Розробка Програм, Модульне Програмування
- •1. Поняття модульного програмування
- •1.1. Основні характеристики програмного модуля.
- •1.2. Методи розробки структури програми.
- •1.3. Контроль структури програми.
- •2. Розроблення програмних модулів
- •2.1. Порядок розробки програмного модуля
- •2.2. Структурне програмування модуля
- •2.3. Покрокова деталізація і поняття про псевдокод.
- •Лекція 8. Тестування і відлагодження ПЗ
- •1. Основні поняття тестування і відлагодження
- •2. Основні підходи і принципи відлагодження.
- •2.1. Заповіді відлагодження.
- •2.2. Автономна відладка модулів
- •2.3. Проміжна відладка програмного засобу
- •2.4. Комплексна відладка програмного засобу.
- •3. Організація процесу тестування ПЗ
- •3.1. Тестування елементів
- •3.2. Інтегральне Тестування ПП
- •3.3. Низхідне тестування інтеграції
- •3.4. Висхідне тестування інтеграції
- •3.5. Порівняння низхідного і висхідного тестування інтеграції
- •4. Види Тестування
- •4.1. Тестування правильності
- •4.2. Системне тестування
- •4.3. Тестування відновлення
- •4.4. Тестування безпеки
- •4.5. Стресове тестування
- •4.6. Тестування продуктивності
Лекція 8. Тестування і відлагодження програмного засобу входження останніх. Якщо задана архітектура представляє ПЗ як малої системи з виділених підсистем, то число таких ланцюжків буде цілком осяжно.
Тестування зовнішніх функцій. Метою тестування є пошук розбіжностей між функціональною специфікацією і сукупністю програм ПЗ. Не дивлячись на те, що всі ці програми автономно вже відладжені, вказані розбіжності можуть бути, наприклад, із-за невідповідності внутрішніх специфікацій програм і їх модулів (на підставі яких проводилося автономне тестування) зовнішньої функціональної специфікації ПЗ. Як правило, тестування зовнішніх функцій проводиться так само, як і тестування модулів на першому кроці, тобто як чорного ящика.
Тестування якості ПЗ. Метою тестування є пошук порушень вимог якості, сформульованих в специфікації якості ПЗ. Це найбільш важкий і найменш вивчений вид тестування. Ясно лише, що далеко не кожен примітив якості ПЗ може бути випробуваний тестуванням (про оцінку якості ПЗ див. наступну лекцію). Завершеність ПЗ перевіряється вже при тестуванні зовнішніх функцій. На даному етапі тестування цього примітиву якості може бути продовжене якщо потрібно отримати яку-небудь імовірнісну оцінку ступеня надійності ПЗ. Проте, методика такого тестування ще вимагає своєї розробки. Точність, стійкість, захищеність, тимчасова ефективність, в якійсь мірі - ефективність по пам'яті, ефективність по пристроях, розширюваність і, частково, незалежність від пристроїв можуть тестуватися. Кожен з цих видів тестування має свою специфіку і заслуговує окремого розгляду. Ми тут обмежимося лише їх перерахуванням. Легкість застосування ПЗ (критерій якості, що включає декілька примітивів якості, див. лекцію 4) оцінюється при тестуванні документації по застосуванню ПЗ.
Тестування документації по застосуванню ПЗ. Метою тестування є пошук неузгодженості документації по застосуванню і сукупністю програм ПЗ, а також незручностей застосування ПЗ. Цей етап безпосередньо передує підключенню користувача до завершення розробки ПЗ (тестуванню вимог до ПЗ і атестацій ПЗ), тому вельми важливо розробникам спочатку самим скористатися ПЗ так, як це робитиме користувач [10.1]. Всі тести на цьому етапі готуються виключно на підставі тільки документації по застосуванню ПЗ. Перш за все, повинні тестуватися можливості ПЗ як це робилося при тестуванні зовнішніх функцій, але тільки на підставі документації по застосуванню. Повинні бути протестовані всі неясні місця в документацію, а також всі приклади, використані в документації. Далі тестуються найбільш важкі випадки застосування ПЗ з метою виявити порушення вимог відносності легкості застосування ПЗ.
Тестування визначення вимог до ПЗ. Метою тестування є з'ясування, якою мірою ПЗ не відповідає пред'явленому визначенню вимог до нього. Особливість цього виду тестування полягає в тому, що його здійснює організація-покупець або організація-користувач ПЗ [10.1] як один з шляхів подолання бар'єру між розробником і користувачем (див. лекцію 3). Звичайне це тестування проводиться за допомогою контрольних завдань - типових задах, для яких відомий результат рішення. У тих випадках, коли ПЗ, що розробляється, винне придти на зміну іншому варіанту ПЗ, який вирішує хоч би частину завдань ПЗ, що розробляється, тестування проводиться шляхом вирішення загальних завдань за допомогою як старого, так і нового ПЗ з подальшим зіставленням отриманих результатів. Іноді як форма такого тестування використовують дослідну експлуатацію ПЗ - обмежене застосування нового ПЗ з аналізом використання результатів в практичній діяльності. По-существу, цей вид тестування багато в чому перекликається з випробуванням ПЗ при його атестації (див. лекцію 14), але виконується до атестації, а іноді і замість атестації.
3. Організація процесу тестування ПЗ
Процес тестування об'єднує різні способи тестування в сплановану послідовність кроків, які приводять до успішної побудови програмної системи (ПС) [3] [13] [64] [69]. Методика тестування ПС може бути представлена у вигляді спіралі, що розгортається (мал. 8.1).
На початку здійснюється тестування елементів (модулів), перевіряюче результати етапу кодування ПС. На другому кроці виконується тестування інтеграції, орієнтоване на виявлення
86
Лекція 8. Тестування і відлагодження програмного засобу помилок етапу проектування ПС. На третьому обороті спіралі проводиться тестування
правильності, перевіряюче коректність етапу аналізу вимог до ПС. На завершальному витку спіралі проводиться системне тестування, що виявляє дефекти етапу системного аналізу ПС.
Охарактеризуємо кожен крок процесу тестування.
1. Тестування елементів. Мета — індивідуальна перевірка кожного модуля. Використовуються способи тестування «білого ящика».
Мал. 8.1. Спіраль процесу тестування ПС
2.Тестування інтеграції. Мета — тестування збірки модулів в програмну систему. В основному застосовують способи тестування «чорного ящика».
3.Тестування правильності. Мета — перевірити реалізацію в програмній системі всіх
функціональних і поведінкових вимог, а також вимоги ефективності. Використовуються виключно способи тестування «чорного ящика».
4. Системне тестування. Мета — перевірка правильності об'єднання і взаємодії всіх елементів комп'ютерної системи, реалізації всіх системних функцій.
Організація процесу тестування у вигляді еволюційної спіралі, що розгортається, забезпечує максимальну ефективність пошуку помилок. Проте виникає питання — коли закінчувати тестування?
На практиці зазвичай застосовують статистичний критерій: «Можна з 95%-ю впевненістю сказати, що проведено достатнє тестування, якщо вірогідність безвідмовної роботи ПП протягом 1000 годин складає щонайменше 0,995».
Науковий підхід при відповіді на це питання полягає в застосуванні математичної моделі відмов. Наприклад, для логарифмічної моделі Пуассона формула розрахунку поточної інтенсивності відмов має вигляд:
λ(t) = |
λ0 |
|
, (8.1) |
λ0 × p ×t +1 |
|||
де λ (t) — поточна |
інтенсивність програмних відмов (кількість відмов в одиницю часу); |
||
λ0 — початкова інтенсивність відмов (на початку тестування); р — експоненціальне зменшення
інтенсивності відмов за рахунок помилок, що виявляються і усуваються; t — тривалість тестування. За допомогою рівняння (8.1) можна передбачити зниження помилок в ході тестування, а також
час, потрібний для досягнення допустимо низької інтенсивності відмов.
3.1. Тестування елементів
Об'єктом тестування елементів є найменша одиниця проектування ПП — модуль. Для виявлення помилок в рамках модуля тестуються його найважливіші шляхи управління. Відносна складність тестів і помилок визначається як результат обмеженя області тестування. Принцип тестування — «білий ящик». Тестуванню піддаються:
інтерфейс модуля; внутрішні структури даних;
незалежні шляхи передачі даних; шляхи обробки помилок; граничні умови.
87
Лекція 8. Тестування і відлагодження програмного засобу Інтерфейс модуля тестується для перевірки правильності введення-виводу тестової інформації.
Якщо немає упевненості в правильному введенні-виводі даних, немає сенсу проводити інші тести. Дослідження внутрішніх структур даних гарантує цілісність даних, що зберігаються.
Тестування незалежних шляхів гарантує одноразове виконання всіх операторів модуля. При тестуванні шляхів виконання виявляються наступні категорії помилок: помилкові обчислення, некоректні порівняння, неправильний потік управління.
Найбільш загальними помилками обчислень є:
неправильний або такий, що не зрозумів пріоритет арифметичних операцій; змішана форма операцій; некоректна ініціалізація;
неузгодженість в представленні точності; некоректне символічне представлення виразів.
Джерелами помилок порівняння і неправильних потоків управління є: порівняння різних типів даних; некоректні логічні операції і пріоритетність;
очікування еквівалентності в умовах, коли помилки точності роблять еквівалентність неможливої; некоректне порівняння змінних; неправильне припинення циклу; відмова у виході при відхиленні ітерації; неправильна зміна змінних циклу.
Зазвичай при проектуванні модуля передбачають деякі помилкові умови. Для захисту від помилкових умов в модуль вводять шляхи обробки помилок. Такі шляхи теж повинні тестуватися.
Тестування шляхів обробки помилок можна орієнтувати на наступні ситуації:
1)повідомлення про помилку є незрозумілим;
2)текст повідомлення не відповідає, виявленій помилці;
3)втручання системних засобів реєстрації аварії відбулося до обробки помилки в модулі;
4)обробка виняткової ситуації є некоректна;
5)опис помилки не дозволяє визначити її причину.
І, нарешті, перейдемо до граничного тестування. Модулі часто відмовляють на «межах». Це означає, що помилки часто відбуваються:
1)при обробці n-го елементу n-елементного масиву;
2)при виконанні m-ї ітерації циклу з т проходами;
3)при появі мінімального (максимального) значення.
Тестові варіанти, орієнтовані на дані ситуації, мають високу вірогідність виявлення помилок.
Тестування елементів зазвичай розглядається як доповнення до етапу кодування. Воно починається після розробки тексту модуля. Оскільки модуль не є автономною системою, то для реалізації тестування потрібні додаткові засоби, представлені на мал. 8.2.
Мал. 8.2. Програмне середовище для тестування модуля
88
Лекція 8. Тестування і відлагодження програмного засобу
Додатковими засобами є драйвер тестування і заглушки. Драйвер — програма, що управляє, яка приймає початкові дані (InData) і очікувані результати (ExpRes) тестових варіантів, запускає в роботу тестований модуль, отримує з модуля реальні результати (OutData) і формує донесення про тестування. Алгоритм роботи тестового драйвера приведений на мал. 8.3.
Мал. 8.3. Алгоритм роботи драйвера тестування
Заглушки заміщають модулі, які викликаються тестованим модулем. Заглушка, або «фіктивна підпрограма», реалізує інтерфейс підлеглого модуля, може виконувати мінімальну обробку даних, імітує прийом і повернення даних.
Створення драйвера і заглушок має на увазі додаткові витрати, оскільки вони не поставляються з кінцевим програмним продуктом.
Якщо ці засоби прості, то додаткові витрати невеликі. На жаль, багато модулів не можуть бути адекватно протестовані за допомогою простих додаткових засобів. У цих випадках повне тестування може бути відкладене до кроку тестування інтеграції (де драйвери або заглушки також використовуються).
89
