
- •Лабораторна робота № 1. Попередня оцінка програмного проекту.
- •2. Обчислення функціонально-орієнтованих метрик
- •3. Попередня оцінка програмного проекту.
- •Лабораторна робота № 2. Аналіз чуттєвості програмного проекту.
- •Сценарий понижения зарплаты
- •Сценарий наращивания памяти
- •Сценарий использования нового микропроцессора
- •Сценарий уменьшения средств на завершение проекта
- •Лабораторна робота № 3 Методика Джексона аналізу та проектування пс.
- •Крок 1. Об’єкт – дія.
- •Крок 2. Об’єкт – структура.
- •Крок 3. Початкове моделювання.
- •Крок 4. Довизначення функцій
- •Крок 5. Урахування системного часу
- •Лабораторна робота № 4. Тестування програм методами «білого ящика»
- •Лабораторна робота №5 Тестування програм методами «чорного ящика»
- •Тестування за принципом «чорного ящика»
- •1.1. Еквівалентне розбиття Основу методу складають два положення:
- •Виділення класів еквівалентності
- •Побудова тестів
- •Аналіз граничних значень.
- •Аналіз причинно-наслідкових зв'язків.
- •Припущення про помилку.
- •Приклад застосування методів тестування «чорним ящиком»
- •Загальна стратегія тестування.
Крок 5. Урахування системного часу
Тимчасові обмеження для системи обслуговування перевезень, зокрема , включають:
часовий інтервал на вироблення команди STOP; він повинний вибиратися шляхом аналізу швидкості транспорту й обмеження потужності;
час реакції на включення і вимикання ламп панелі.
Для розглянутого приклада немає необхідності вводити спеціальний механізм синхронізації. Однак при розширенні може знадобитися деяка синхронізація обміну даними.
Лабораторна робота № 4. Тестування програм методами «білого ящика»
Мета роботи: Вивчити методи тестування логіки програми, формалізовані описи результатів тестування і стандарти по складанню схем програм.
Теорія:
Види тестування
Тестування ПЗ включає в себе:
постановка задачі для тесту;
проектування тесту;
написання тестів;
тестування тестів;
виконання тестів;
вивчення результатів тестування.
Найбільш важливим є проектування тестів. Існують різні підходи до проектування тестів.
Перший полягає в тому, що тести проектуються на основі зовнішніх специфікацій програм і модулів, або специфікацій сполучення модуля з іншими модулями, програма при цьому розглядається як чорний ящик. Сенс тесту полягає в тому, щоб перевірити чи відповідає програма зовнішнім специфікаціям. При цьому зміст модуля не має значення. Такий підхід отримав назву - стратегія «чорного ящика».
Другий підхід - стратегія «білого ящика», заснований на аналізі логіки програми. При такому підході тестування полягає у перевірці кожного шляху, кожної гілки алгоритму. При цьому зовнішня специфікація до уваги не береться.
Жоден з цих підходів не є оптимальним. Реалізація тестування методом «чорного ящика» зводиться до перевірки всіх можливих комбінацій вхідних даних. Неможливо протестувати програму, подаючи на вхід нескінченну безліч значень, тому обмежуються певним набором даних. При цьому виходять з максимальної віддачі тесту по зрівнянню з витратами на його створення. Вона вимірюється ймовірністю того, що тест виявить помилки, якщо вони є в програмі. Витрати вимірюються часом і вартістю підготовки, виконання та перевірки результатів тесту.
Тестування методом «білого ящика» також не дає стовідсоткової гарантії того, що модуль не містить помилок. Навіть якщо припустити, що виконані тести для всіх гілок алгоритму, не можна з повною впевненістю стверджувати, що програма відповідає її специфікаціям. Наприклад, якщо було потрібно написати програму для обчислення кубічного кореня, а програма фактично обчислює корінь квадратний, то реалізація буде зовсім неправильною, навіть якщо перевірити всі шляхи. Друга проблема - відсутність шляху. Якщо програма реалізує специфікації не повністю (наприклад, відсутня така спеціалізована функція, як перевірка на отримання від’ємних значень вхідних даних програми обчислення квадратного кореня), ніяке тестування існуючих шляхів не виявить такої помилки. І, нарешті, проблема залежності результатів тестування від вхідних даних. Одні дані будуть давати правильні результати, а інші ні. Наприклад, якщо для визначення рівності 3-х чисел програмується вираз виду:
IF (A+B+C)/3 = A,
то воно буде вірним не для всіх значень A, B і С (помилка виникає в тому випадку, коли з двох значень В або С одне більше, а інше на стільки ж менше А). Якщо приділити увагу тільки на тестування шляхів, немає гарантії, що ця помилка буде виявлена.
Таким чином, повне тестування програми неможливе, тобто ніяке тестування не гарантує повну відсутність помилок в програмі. Тому необхідно проектувати тести таким чином, щоб збільшити ймовірність виявлення помилки в програмі.
Стратегія «білого ящика»
Існують наступні методи тестування за принципом «білого ящика»:
покриття операторів;
покриття рішень;
покриття умов;
покриття рішень/умов;
комбінаторне покриття умов.
Метод покриття операторів
Метою цього методу тестування є виконання кожного оператора програми хоча б один раз.
Приклад:
Рис. 4.1. Приклад алгоритму програми
а – правильний; б – з помилкою
Якщо для тестування задати значення змінних А = 2, В = 0, Х = 3, буде реалізований шлях ace, тобто кожен оператор програми виконається один раз (рис. 1, а). Але, якщо внести в алгоритм помилки - замінити в першому умови and на or, а в другому X> 1 на X <1 (рис. 1, б), жодна помилка не буде знайдена (див. табл. 1). Крім того, шлях abd взагалі не буде охоплений тестом і, якщо в ньому є помилка, вона також не буде виявлена. У табл. 1 очікуваний результат визначається по блок-схемі на рис. 1-а, а фактичний по рис. 1-б.
Як видно з цієї таблиці, жодна з внесених в алгоритм помилок не буде виявлена.
Таблиця 4.1. Результат тестування методом покриття операторів
Тест |
Очікуємий результат |
Фактичний результат |
Результат тестування |
A=2, B=0, X=3 |
X=2,5 |
X=2,5 |
не успішно |
Метод покриття рішень (покриття переходів)
Згідно методу покриття рішень кожен напрямок переходу повинен бути реалізований, принаймні, один раз. Цей метод включає в себе критерій покриття операторів, тому при виконанні всіх напрямків переходів виконаються всі оператори, що знаходяться на цих напрямах.
Для програми, наведеної на рис. 1 покриття рішень може бути виконано двома тестами, які покривають шляху {ace, abd}, або {aсd, abe}. Для цього виберемо наступні вихідні дані: {A = 3, B = 0, X = 3} - у першому випадку і {A = 2, B = 1, X = 1} - у другому. Однак шлях, де X не змінюється, буде перевірений з імовірністю 50%: якщо у другій умові замість умови X> 1 записано X <1, то помилка не буде виявлена двома тестами.
Результати тестування наведені в табл. 2.
Таблиця 4.2. Результат тестування методом покриття рішень
Тест |
Очікуємий результат |
Фактичний результат |
Результат тестування |
A=3, B=0, X=3 |
X=1 |
X=1 |
не успішно |
А=2, В=1, Х=1 |
Х=2 |
Х=1,5 |
успішно |
Метод покриття умов
Цей метод може дати кращі результати в порівнянні з попередніми. У відповідності з методом покриття умов записується число тестів, достатнє для того, щоб всі можливі результати кожної умови в рішенні виконувались, принаймні, один раз.
У розглянутому прикладі маємо чотири умови: {A> 1, B = 0}, {A = 2, X> 1}. Значить, потрібна достатня кількість тестів, така, щоб реалізувати ситуації, де A> 1, A <= 1, B != 0 і B = 0 в точці а і A = 2, A != 2, X> 1 і X <= 1 в точці b. Тести, що задовольняють критерію покриття умов і відповідні їм шляхи:
а) A=2, B=0, X=4 ace
б) A=1, B=1, X=0 abd
Таблиця 4.3 - Результати тестування методом покриття умов
Тест |
Очікуємий результат |
Фактичний результат |
Результат тестування |
A=2, B=0, X=4 |
X=3 |
X=3 |
Не успішно |
A=1, B=1, X=0 |
X=0 |
X=1 |
успішно |
Метод покриття рішень / умов
Критерій покриття рішень / умов вимагає такого достатнього набору тестів, щоб всі можливі результати кожної умови виконувалися принаймні один раз, всі результати кожного рішення виконувалися принаймні один раз і, крім того, кожній точці входу передавалося управління принаймні один раз.
Недоліки методу:
не завжди можна перевірити всі умови;
неможливо перевірити умови, які сховані іншими умовами;
недостатня чутливість до помилок в логічних виразах.
Так в розглянутому прикладі два тести методу покриття умов
а) A=2, B=0, X=4 ace
б) A=1, B=1, X=0 abd
відповідають і критерію покриття рішень/умов. Це є наслідком того, що одні умови наведених рішень приховують інші умови в цих рішеннях. Це є наслідком того, що одні умови наведених рішень приховують інші умови в цих рішеннях. Тобто у варіанті на рис. 1 не всі результати всіх умов виконаються в процесі тестування.
Розглянемо реалізацію того ж прикладу на рис. 2. Найбільш повне покриття тестами в цьому випадку виконується так, щоб виконувалися всі можливі результати кожного простого рішення. Для цього потрібно покрити шляхи aceg (тест А=2,В=0,Х=4), acdfh (тест А=3, В=1, Х=0), abfh (тест А=0, В=0, Х=0), abfi (тест А=0, В=0, Х=2).
Протестувавши алгоритм на рис. 2, неважко переконатися в тому, що критерії покриття умов і критерії покриття рішень / умов недостатньо чутливі до помилок в логічних виразах.
Рис. 4.2. Приклад алгоритму програми
Метод комбінаторного покриття умов.
Критерій комбінаторного покриття умов задовольняє також і критеріям покриття рішень, покриття умов і покриття рішень/умов.
Цей метод вимагає створення такого числа тестів, щоб всі можливі комбінації результатів умови в кожному рішенні виконувалися принаймні один раз. За цим критерієм в розглянутому прикладі повинні бути покриті тестами наступні вісім комбінацій:
A>1, B=0.
A>1, B0.
A1, B=0.
А1, B0.
A=2, X>1.
A=2, X1.
А2, X>1.
А2, X1.
Для того, щоб протестувати ці комбінації, необов'язково використовувати всі 8 тестів. Фактично вони можуть бути покриті чотирма тестами:
A=2, B=0, X=4 {покриває 1, 5};
A=2, B=1, X=1 {покриває 2, 6};
A=0,5, B=0, X=2 {покриває 3, 7};
A=1, B=0, X=1 {покриває 4, 8}.
Таблиця 4.4. Результати тестування методом комбінаторного покриття умов
Тест |
Очікуємий результат |
Фактичний результат |
Результат тестування |
A=2, B=0, X=4 |
X=3 |
X=3 |
Не успішно |
A=2, B=1, X=1 |
X=2 |
X=1,5 |
успішно |
A=0,5 B=0, X=2 |
X=3 |
X=4 |
успішно |
A=1, B=0, X=1 |
X=1 |
X=1 |
Не успішно |
Варіанти завдання:
1. Дано сторони трикутника a, b, c. Знайти його площу.
2. Задані швидкість і час руху автомобіля. Визначити відстань, яку подолав автомобіль.
3. Дано 3-значне число. Перевірити його подільність на кожну зі своїх цифр.
4. В прямокутному трикутнику відомі катет і гіпотенуза. Знайдіть інший катет.
5. Задано кут трикутника X в градусах. Знайти sin(x), cos(x).
6. Написати програму, яка знаходить значення Y = (2x - 7)/(x-1);
7. Розробити програму розв’язку квадратного рівняння.
8. Знайти суму цифр 4-значного числа.
9. Вводяться 4 числа. Знайти найбільше і поділити його на суму інших.
10. Знайти об’єм паралелепіпеда за довжинами висоти, ширини і довжини.
Порядок виконання роботи:
Спроектувати тести за принципом «білого ящика» для програми.
Вибрати кілька алгоритмів для тестування і позначити літерами або цифрами гілки цих алгоритмів.
Виписати шляхи алгоритму, які повинні бути перевірені тестами для обраного методу тестування.
Записати тести, які дозволять пройти по шляхах алгоритму.
Протестувати розроблену Вами програму. Результати оформити у вигляді таблиць (див. таблиці 5.1-5.4).
Перевірити всі види тестів і зробити висновки про їх ефективність.
Оформити звіт по лабораторній роботі.
Здати і захистити роботу.
Захист звіту з лабораторної роботи:
Звіт по лабораторній роботі повинен включати в себе:
Постановку задачі.
Блок-схеми програм.
Тести.
Таблиці тестування програми.
Висновки за результатами тестування.
Контрольні запитання
Етап реалізації та тестування програмного продукту.
Види тестування.
Критерії вибору тестів.
Властивості тестів.
Критерії надійності програм.
Оцінка надійності програм.