Крок 5. Урахування системного часу

Тимчасові обмеження для системи обслуговування перевезень, зокрема , включають:

  • часовий інтервал на вироблення команди STOP; він повинний вибиратися шляхом аналізу швидкості транспорту й обмеження потужності;
  • час реакції на включення і вимикання ламп панелі.

Для розглянутого приклада немає необхідності вводити спеціальний механізм синхронізації. Однак при розширенні може знадобитися деяка синхронізація обміну даними.

 

Лабораторна робота № 8.

Тестування програм методами «білого ящика»

Мета роботи: Вивчити методи тестування логіки програми, формалізовані описи результатів тестування і стандарти по складанню схем програм.

Теорія:

Види тестування

Тестування ПЗ включає в себе:

· постановка задачі для тесту;

· проектування тесту;

· написання тестів;

· тестування тестів;

· виконання тестів;

· вивчення результатів тестування.

Найбільш важливим є проектування тестів. Існують різні підходи до проектування тестів.

Перший полягає в тому, що тести проектуються на основі зовнішніх специфікацій програм і модулів, або специфікацій сполучення модуля з іншими модулями, програма при цьому розглядається як чорний ящик. Сенс тесту полягає в тому, щоб перевірити чи відповідає програма зовнішнім специфікаціям. При цьому зміст модуля не має значення. Такий підхід отримав назву - стратегія «чорного ящика».

Другий підхід - стратегія «білого ящика», заснований на аналізі логіки програми. При такому підході тестування полягає у перевірці кожного шляху, кожної гілки алгоритму. При цьому зовнішня специфікація до уваги не береться.

Жоден з цих підходів не є оптимальним. Реалізація тестування методом «чорного ящика» зводиться до перевірки всіх можливих комбінацій вхідних даних. Неможливо протестувати програму, подаючи на вхід нескінченну безліч значень, тому обмежуються певним набором даних. При цьому виходять з максимальної віддачі тесту по зрівнянню з витратами на його створення. Вона вимірюється ймовірністю того, що тест виявить помилки, якщо вони є в програмі. Витрати вимірюються часом і вартістю підготовки, виконання та перевірки результатів тесту.

Тестування методом «білого ящика» також не дає стовідсоткової гарантії того, що модуль не містить помилок. Навіть якщо припустити, що виконані тести для всіх гілок алгоритму, не можна з повною впевненістю стверджувати, що програма відповідає її специфікаціям. Наприклад, якщо було потрібно написати програму для обчислення кубічного кореня, а програма фактично обчислює корінь квадратний, то реалізація буде зовсім неправильною, навіть якщо перевірити всі шляхи. Друга проблема - відсутність шляху. Якщо програма реалізує специфікації не повністю (наприклад, відсутня така спеціалізована функція, як перевірка на отримання від’ємних значень вхідних даних програми обчислення квадратного кореня), ніяке тестування існуючих шляхів не виявить такої помилки. І, нарешті, проблема залежності результатів тестування від вхідних даних. Одні дані будуть давати правильні результати, а інші ні. Наприклад, якщо для визначення рівності 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 - Результати тестування методом покриття умов