ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.04.2024

Просмотров: 17

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Особливості інтеграційного тестування для процедурного програмування

Процес побудови набору тестів при структурному тестуванні визначається принципом, на якому грунтується конструювання Графа Моделі Програми (ГМП). Від цього залежить безліч тестових шляхів і генерація тестів, відповідних тестовим шляхам.

Першим підходом до розробки програмного забезпечення є процедурне (модульне) програмування. Процедурне програмування передбачає написання вихідного коду в імперативному (наказовому) стилі, приписуючому певну послідовність виконання команд, а також опис програмного проекту за допомогою функціональної декомпозиції. Такі мови, як Pascal і C, є імперативними. У них порядок вихідних рядків коду визначає порядок передачі управління, включаючи послідовного виконання, вибір умов і повторного виконання ділянок програми. Кожен модуль має декілька точок входу (при строгому написанні коду - одну) і декілька точок виходу (при строгому написанні коду - одну).

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

Таким чином, M(P,C1)= E Nij,

  1. де Е - безліч дуг, а Nij - вхідні вершини ГМП.

Складність тестування модуля по критерію С1 виражається уточненою формулою для оцінки топологічної складності МакКейба:

V(P,C1)= q + kin, де q - число бінарних виборів для умов розгалуження, а kin - число входів графа.

Для інтеграційного тестування найбільш суттєвим є розгляд моделі програми, побудованої з використанням діаграм потоків управління. Контролюються зв'язки через дані, що готуються і використовувається іншими групами програм при взаємодії з тестованою групою. Кожна змінна міжмодульного інтерфейсу перевіряється на тотожність описів у взаємодіючих модулях, а також на відповідність початковим програмним специфікаціям. Склад і структура інформаційних зв'язків реалізованої групи модулів перевіряються на відповідність специфікації вимог цієї групи. Всі реалізовані зв'язки мають бути встановлені, впорядковані і узагальнені.

При складанні модулів в єдиний програмний комплекс з'являється два варіанти побудови моделі графу проекту:


  • Плоска або ієрархічна модель проекту наприклад Рис. 4.2

  • Граф викликів.

Якщо програма P складається з p модулів, то при інтеграції модулів в комплекс фактично виходить громіздка плоска (Рис. 4.2) або простіша - ієрархічна (Рис. 4.3) - модель програмного проекту. Як критерій тестування на інтеграційному рівні зазвичай використовується критерій покриття гілок C1. Введемо також наступні позначення:

n - число вузлів в графі;

e - число дуг в графі;

q - число бінарних виборів з умов розгалуження в графі;

kin - число входів в граф;

kout - число виходів з графів;

kext - число точок входу, які можуть бути викликані ззовні.

Тоді складність інтеграційного тестування всієї програми P по критерію C1 може бути виражена формулою:

Проте при подібному підході до побудови ГМП (граф моделі програми) розробник тестового набору стикається з неприйнятно високою складністю тестування V(P,C) для проектів середнього і великого об'єму (розміром в 105 - 107 рядків), що виходить із зростання топологічної складності керуючого графа, по МакКейбу. Таким чином, використовуючи плоску або ієрархічну модель, важко дати оцінку протестованості TV(P,C,T) для всього проекту і оцінку залежності протестованості проекту від протестованості окремого модуля TV(Modi,C), включеного в цей проект.

Розглянемо другу модель збірки модулів в процедурному програмуванні - граф викликів. У цій моделі в разі інтеграційного тестування враховуються лише виклики модулів в програмі. Тому з безлічі M(Modi,C) тестованих елементів можна виключити ті елементи, які не схильні до впливу інтеграції, тобто вузли і дуги, не сполучені з викликами модулів:

де

або nj містить виклики модулів, тобто


E' - підмножина ребер графа модуля, а Nin - "вхідні" вузли графа.

Ця модифікація ГМП наводить до здобуття нового графа - графа викликів, кожен вузол в цьому графові представляє модуль (процедуру), а кожна дуга - виклик модуля (процедури). Для процедурного програмування подібний крок спрощує графову модель програмного проекту до прийнятного рівня складності. Таким чином, може бути визначена цикломатична складність спрощеного графа модуля Modi як V'(Modi,C'), а формула, що виражає складність інтеграційного тестування програмного проекту, набирає наступного вигляду

Так, для програми, ГМП якою приведена на Рис. 4.2 для здобуття графа викликів з ієрархічної моделі проекту мають бути виключені всі дуги, окрім:

  1. Дуги 1-2, що містить вхідний вузол 1 графа G.

  2. Дуг 2-8, 8-7, 7-10, що містять виклик модуля G1.

  3. Дуг 2-9, 9-7, 7-10, що містять виклик модуля G2.

В результаті граф викликів набере вигляду, показаного на Рис. 5.2, а складність даного графа по критерію C1' рівна:

V'(G,C1')= q + Kext =1+1=2.

V'(Modi,C') також називається в літературі складністю модульного дизайну (complexity of module design)


Мал. 5.2. Граф викликів модулів

7