- •Лекція 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. Тестування і відлагодження програмного засобу Тестування елементу просто здійснити, якщо модуль має високу зв'язність. При реалізації
модулем тільки одній функції кількість тестових варіантів зменшується, а помилки легко передбачаються і виявляються.
3.2.Інтегральне Тестування ПП
Тестування інтеграції підтримує збірку цілісної програмної системи. Мета інтегрального тестування: узяти модулі, протестовані як елементи, і побудувати програмну структуру згідно з вимогами проекту.
Тести проводяться для виявлення помилок інтерфейсу. Перерахуємо деякі категорії помилок інтерфейсу:
втрата даних при проходженні через інтерфейс; відсутність в модулі необхідного посилання; несприятливий вплив одного модуля на іншій;
підфункції при об'єднанні не утворюють необхідну головну функцію; окремі (допустимі) неточності при інтеграції виходять за допустимий рівень; проблеми при роботі з глобальними структурами даних.
Як і для відлагодження, для тестування існує два варіанти, що підтримують процес інтеграції: низхідне тестування і висхідне тестування.
3.3.Низхідне тестування інтеграції
Уданому підході модулі об'єднуються рухом зверху вниз за ієрархією, що управляє, починаючи від головного модуля, що управляє. Підлеглі модулі додаються в структуру або в результаті пошуку в глибину, або в результаті пошуку завширшки.
Розглянемо приклад (мал. 8.4). Інтеграція пошуком в глибину підключатиме всі модулі, що знаходяться на головному шляху структури, що управляє (по вертикалі). Вибір головного шляху, що управляє, частково довільний і залежить від характеристик, визначуваних застосуванням. Наприклад, при виборі лівого шляху перш за все будуть підключені модулі Ml, М2, М5. Наступним підключається модуль М8 або М6 (якщо це необхідно для правильного функціонування М2). Потім будується центральний або правий шлях, що управляє.
При інтеграції пошуком завширшки структура послідовно проходиться по рівнях-горизонталях. На кожному рівні підключаються модулі, безпосередньо підлеглі модулю, що управляє, — начальникові. В цьому випадку перш за все підключаються модулі М2, М3, М4. На наступному рівні
—модулі М5, М6 і так далі
Мал. 8.4. Низхідна інтеграція системи
Опишемо можливі кроки процесу низхідної інтеграції.
1.Головний модуль (знаходиться на вершині ієрархії), що управляє, використовується як тестовий драйвер. Все безпосередньо підлеглі йому модулі тимчасово заміщаються заглушками.
2.Одна із заглушок замінюється реальним модулем. Модуль вибирається пошуком завширшки або в глибину.
3.Після підключення кожного модуля (і установки на нім заглушок) проводиться набір тестів, перевіряючих отриману структуру.
4.Якщо в модулі-драйвері вже немає заглушок, проводиться зміна модуля-драйвера (пошуком завширшки або в глибину).
90
Лекція 8. Тестування і відлагодження програмного засобу
5.Виконується повернення на крок 2 (до тих пір, поки не буде побудована ціла структура).
Переваги низхідної інтеграції: помилки в головній частині системи, що управляє, виявляються в першу чергу.
Недолік: труднощі в ситуаціях, коли для повного тестування на верхніх рівнях потрібні результати обробки з нижніх рівнів ієрархії.
Існує 3 можливості боротьби з цим недоліком:
1)відкладати деякі тести до заміщення заглушок модулями;
2)розробляти заглушки, частково виконуючі функції модулів;
3)підключати модулі рухом від низу до верху.
Перша можливість викликає складнощі в оцінці результатів тестування.
Для реалізації другої можливості вибирається одна з наступних категорій заглушок: заглушка А — відображає трасоване повідомлення; заглушка В — відображає параметр, що проходить; заглушка З — повертає величину з таблиці;
заглушка D — виконує табличний пошук по ключу (вхідному параметру) і повертає пов'язаний з ним вихідний параметр.
Мал. 8.5. Категорії заглушок
Категорії заглушок представлені на мал. 8.5.
Очевидно, що заглушка А найбільш проста, а заглушка D найбільш складна в реалізації.
Цей підхід працездатний, але може привести до істотних витрат, оскільки заглушки стають все більш складними.
Третю можливість обговоримо окремо.
3.4.Висхідне тестування інтеграції
При висхідному тестуванні інтеграції збірка і тестування системи починаються з модулів-атомів, що розташовуються на нижніх рівнях ієрархії. Модулі підключаються рухом від низу до верху. Підлеглі модулі завжди доступні, і немає необхідності в заглушках.
Розглянемо кроки методики висхідної інтеграції.
1.Модулі нижнього рівня об'єднуються в кластери (групи, блоки), що виконують певну програмну підфункцію.
2.Для координації введень-виводів тестового варіанту пишеться драйвер, керівник тестуванням кластерів.
3.Тестується кластер.
4.Драйвери віддаляються, а кластери об'єднуються в структуру рухом вгору. Приклад висхідної інтеграції системи приведений на мал. 8.6.
Модулі об'єднуються в кластери 1,2,3. Кожен кластер тестується драйвером. Модулі в кластерах 1 і 2 підпорядковані модулю Ма, тому драйвери D1 і D2 віддаляються і кластери підключають прямо до Ма. Аналогічно драйвер D3 віддаляється перед підключенням кластера 3 до модуля Mb. В останню чергу до модуля Мс підключаються модулі Ма і Mb.
Розглянемо різні типи драйверів: драйвер А — викликає підлеглий модуль;
91
Лекція 8. Тестування і відлагодження програмного засобу драйвер В — посилає елемент даних (параметр) з внутрішньої таблиці; драйвер З — отображает параметр з підлеглого модуля;
драйвер D — є комбінацією драйверів В И С.
Очевидно, що драйвер А найбільш простий, а драйвер D найбільш складний в реалізації. Різні типи драйверів представлені на мал. 8.7.
У міру просування інтеграції вгору необхідність у виділенні драйверів зменшується. Як правило, в дворівневій структурі драйвери не потрібні.
Мал. 8.7. Різні типи драйверів
3.5.Порівняння низхідного і висхідного тестування інтеграції
Низхідне тестування:
1)основний недостаток— необхідність заглушок і пов'язані з ними труднощі тестування;
2)основна гідність — можливість раннього тестування головних функцій, що управляють. Висхідне тестування:
1)основний недолік — система не існує як об'єкт до тих пір, поки не буде доданий останній
модуль; 2) основна перевага — спрощується розробка тестових варіантів, відсутні заглушки.
Можливий також комбінований підхід. У ньому для верхніх рівнів ієрархії застосовують низхідну стратегію, а для нижніх рівнів — висхідну стратегію тестування.
При проведенні тестування інтеграції дуже важливо виявити критичні модулі. Ознаки критичного модуля:
1)реалізує декілька вимог до програмної системи;
2)має високий рівень управління (знаходиться достатньо високо в програмній структурі);
3)має високу складність або схильність до помилок (як індикатор може використовуватися цикломатическая складність — її верхня розумна межа складає 10);
4)має певні вимоги до продуктивності обробки.
Критичні модулі повинні тестуватися якомога раніше. Крім того, до них повинне застосовуватися регресійне тестування (повторення вже виконаних тестів в повному або частковому об'ємі).
92
