Файл: Технология раработки програмного обеспечения УП.pdf

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

 

 

 
 

121 

выполнять

 

обязанности

 

администратора

 

процесса.

 

Администра-

тор,

 

в

 

свою

 

очередь,

 

отбирает

 

приблизительно

 

6—20

 

участников

 

(6

 

 

минимальное

 

число

 

для

 

сохранения

 

анонимности).

 

Пред-

полагается,

 

что

 

участники

 

должны

 

быть

 

одного

 

профиля

 

(на-

пример,

 

в

 

одну

 

группу

 

не

 

следует

 

объединять

 

программистов,

 

использующих

 

Кобол,

 

и

 

системных

 

программистов,

 

пишущих

 

на

 

Ассемблере).

 

Каждого

 

участника

 

просят

 

представить

 

для

 

рассмотрения

 

две

 

свои

 

программы

 

 

наилучшую

 

 

его

 

точки

 

зрения)

 

и

 

низкого

 

качества.

 

Отобранные

 

программы

 

случайным

 

образом

 

«распреде-

ляются

 

между

 

участниками.

 

Им

 

дается

 

на

 

рассмотрение

 

по

 

че-

тыре

 

программы.

 

Две

 

из

 

них

 

являются

 

«наилучшими»,

 

а

 

две

 

 

«наихудшими»,

 

но

 

рецензенту

 

не

 

сообщают

 

о

 

том,

 

какая

 

про

-

грамма

 

к

 

какой

 

группе

 

относится.

 

Каждый

 

участник

 

тратит

 

на

 

просмотр

 

одной

 

программы

 

30

 

мин

 

и

 

заполняет

 

анкету

 

для

 

ее

 

оценки.

 

После

 

просмотра

 

всех

 

четырех

 

программ

 

оценивается

 

их

 

относительное

 

качество.

 

В

 

анкете

 

для

 

оценки

 

проверяющему

 

предлагается

 

оценить

 

программу

 

по

 

семибалльной

 

шкале

 

(1

 

означает

 

определенное

 

«да»,

 

7

 

 

определенное

 

«нет»)

 

при

 

ответе,

 

например,

 

на

 

следующие

 

вопросы:

 

 

Легко

 

ли

 

было

 

понять

 

программу?

 

 

Оказались

 

ли

 

результаты

 

проектирования

 

высокого

 

уровня

 

очевидными

 

и

 

приемлемыми?

 

 

Оказались

 

ли

 

результаты

 

проектирования

 

низкого

 

уровня

 

очевидными

 

и

 

приемлемыми?

 

 

Легко

 

ли

 

для

 

вас

 

модифицировать

 

эту

 

программу?

 

 

Испытывали

 

бы

 

вы

 

чувство

 

удовлетворения,

 

написав

 

такую

 

программу?

 

Проверяющего

 

просят

 

также

 

дать

 

общий

 

комментарий

 

и

 

рекомендации

 

по

 

улучшению

 

программы.

 

После

 

просмотра

 

ка-

ждому

 

участнику

 

передают

 

анонимную

 

анкету

 

с

 

оценкой

 

двух

 

его

 

программ.

 

Участники

 

получают

 

статистическую

 

сводку,

 

которая

 

содержит

 

общую

 

и

 

детальную

 

классификацию

 

их

 

соб-

ственных

 

программ

 

в

 

сравнении

 

с

 

полным

 

набором

 

программ,

 

и

 

анализ

 

того,

 

насколько

 

оценки

 

чужих

 

программ

 

совпадают

 

с

 

оценками

 

тех

 

же

 

самых

 

программ,

 

данными

 

другими

 

прове-

ряющими.

 

Цель

 

такого

 

просмотра

 

 

дать

 

возможность

 

про-


background image

 

 

 
 

122 

граммистам

 

самим

 

оценить

 

свою

 

квалификацию.

 

Этот

 

способ

 

представляется

 

полезным

 

как

 

для

 

промышленного,

 

так

 

и

 

для

 

учебного

 

применения.

 

6.4 

Проектирование

 

теста

 

Результаты

 

психологических

 

исследований,

 

обсуждав-

шиеся

 

в

 

п.

 

6.2,

 

показывают,

 

что

 

наибольшее

 

внимание

 

при

 

тес-

тировании

 

программ

 

уделяется

 

проектированию

 

или

 

созданию

 

эффективных

 

тестов.

 

Это

 

связано

 

с

 

невозможностью

 

«полного»

 

тестирования

 

программы,

 

т.е.

 

тест

 

для

 

любой

 

программы

 

будет

 

обязательно

 

неполным

 

(иными

 

словами,

 

тестирование

 

не

 

может

 

гарантировать

 

отсутствия

 

всех

 

ошибок).

 

Стратегия

 

проектиро-

вания

 

заключается

 

в

 

том,

 

чтобы

 

попытаться

 

уменьшить

 

эту

 

«не-

полноту»

 

настолько,

 

насколько

 

это

 

возможно.

 

Если

 

ввести

 

ограничения

 

на

 

время,

 

стоимость,

 

машинное

 

время

 

и

 

т.п.,

 

то

 

ключевым

 

вопросом

 

тестирования

 

становится

 

следующий:

 

Какое

 

подмножество

 

всех

 

возможных

 

тестов

 

имеет

 

наивысшую

 

вероятность

 

обнаружения

 

большинства

 

ошибок?

 

Изучение

 

методологий

 

проектирования

 

тестов

 

дает

 

ответ

 

на

 

этот

 

вопрос.

 

По-видимому,

 

наихудшей

 

из

 

всех

 

методологий

 

является

 

тестирование

 

со

 

случайными

 

входными

 

значениями

 

(стохасти-

ческое)

 

 

процесс

 

тестирования

 

программы

 

путем

 

случайного

 

выбора

 

некоторого

 

подмножества

 

из

 

всех

 

возможных

 

входных

 

величин.

 

В

 

терминах

 

вероятности

 

обнаружения

 

большинства

 

ошибок

 

случайно

 

выбранный

 

набор

 

тестов

 

имеет

 

малую

 

веро-

ятность

 

быть

 

оптимальным

 

или

 

близким

 

к

 

оптимальному

 

под-

множеством.

 

В

 

настоящем

 

разделе

 

рассматривается

 

несколько

 

подходов,

 

которые

 

позволяют

 

более

 

разумно

 

выбирать

 

тестовые

 

данные.

 

В

 

п.

 

6.2

 

было

 

показано,

 

что

 

исчерпывающее

 

тестирова-

ние

 

по

 

принципу

 

черного

 

или

 

белого

 

ящика

 

в

 

общем

 

случае

 

невозможно.

 

Однако

 

при

 

этом

 

отмечалось,

 

что

 

приемлемая

 

стратегия

 

тестирования

 

может

 

обладать

 

элементами

 

обоих

 

под-

ходов.

 

Таковой

 

является

 

стратегия,

 

излагаемая

 

в

 

этом

 

разделе.

 

Можно

 

разработать

 

довольно

 

полный

 

тест,

 

используя

 

опреде-

ленную

 

методологию

 

проектирования,

 

основанную

 

на

 

принци-


background image

 

 

 
 

123 

пе

 

черного

 

ящика,

 

а

 

затем

 

дополнить

 

его

 

проверкой

 

логики

 

про-

граммы

 

(т.е.

 

с

 

привлечением

 

методов

 

белого

 

ящика).

 

Методологии,

 

обсуждаемые

 

в

 

настоящем

 

разделе,

 

пред-

ставлены

 

ниже:

 

Черный

 

ящик

 

Эквивалентное

 

разбиение

 

Анализ

 

граничных

 

значений

 

Применение

 

функциональных

 

диаграмм

 

Предположение

 

об

 

ошибке

 

Белый

 

ящик

 

Покрытие

 

операторов

 

Покрытие

 

решений

 

Покрытие

 

условий

 

Покрытие

 

решений/условий

 

Комбинаторное

 

покрытие

 

условий

 

Хотя

 

перечисленные

 

методы

 

будут

 

рассматриваться

 

здесь

 

по

 

отдельности,

 

при

 

проектировании

 

эффективного

 

теста

 

про-

граммы

 

рекомендуется

 

использовать

 

если

 

не

 

все

 

эти,

 

то,

 

по

 

крайней

 

мере,

 

большинство

 

из

 

них,

 

так

 

как

 

каждый

 

из

 

них

 

име-

ет

 

определенные

 

достоинства

 

и

 

недостатки

 

(например,

 

возмож-

ность

 

обнаруживать

 

и

 

пропускать

 

различные

 

типы

 

ошибок).

 

Правда,

 

эти

 

методы

 

весьма

 

трудоемки,

 

поэтому

 

некоторые

 

спе-

циалисты,

 

ознакомившись

 

с

 

ними,

 

могут

 

не

 

согласиться

 

с

 

дан-

ной

 

рекомендацией.

 

Однако

 

следует

 

представлять

 

себе,

 

что

 

тес-

тирование

 

программы

 

 

чрезвычайно

 

сложная

 

задача.

 

Для

 

ил-

люстрации

 

этого

 

приведем

 

известное

 

изречение:

 

«Если

 

вы

 

ду-

маете,

 

что

 

разработка

 

и

 

кодирование

 

программы

 

 

вещь

 

труд-

ная,

 

то

 

вы

 

еще

 

ничего

 

не

 

видели».

 

Рекомендуемая

 

процедура

 

заключается

 

в

 

том,

 

чтобы

 

раз-

рабатывать

 

тесты,

 

используя

 

методы

 

черного

 

ящика,

 

а

 

затем

 

как

 

необходимое

 

условие

 

 

дополнительные

 

тесты,

 

используя

 

ме-

тоды

 

белого

 

ящика.

 

Методы

 

белого

 

ящика,

 

получившие

 

более

 

широкое

 

распространение,

 

обсуждаются

 

первыми.

 

6.4.1 Тестирование путем покрытия логики 

программы 

Тестирование

 

по

 

принципу

 

белого

 

ящика

 

характеризуется

 

степенью,

 

в

 

какой

 

тесты

 

выполняют

 

или

 

покрывают

 

логику

 

(ис-

ходный

 

текст)

 

программы.

 

Как

 

показано

 

в

 

п.

 

6.2,

 

исчерпываю-

щее

 

тестирование

 

по

 

принципу

 

белого

 

ящика

 

предполагает

 

вы-

полнение

 

каждого

 

пути

 

в

 

программе;

 

но

 

поскольку

 

в

 

программе

 

с

 

циклами

 

выполнение

 

каждого

 

пути

 

обычно

 

нереализуемо,

 

то

 

тес-

тирование

 

всех

 

путей

 

не

 

рассматривается

 

как

 

перспективное.

 


background image

 

 

 
 

124 

6.4.1.1 Покрытие операторов 

Если

 

отказаться

 

полностью

 

от

 

тестирования

 

всех

 

путей,

 

то

 

можно

 

показать,

 

что

 

критерием

 

покрытия

 

является

 

выполне-

ние

 

каждого

 

оператора

 

программы,

 

по

 

крайней

 

мере,

 

один

 

раз.

 

К

 

сожалению,

 

это

 

слабый

 

критерий,

 

так

 

как

 

выполнение

 

каждо-

го

 

оператора,

 

по

 

крайней

 

мере,

 

один

 

раз

 

есть

 

необходимое,

 

но

 

недостаточное

 

условие

 

для

 

приемлемого

 

тестирования

 

по

 

прин-

ципу

 

белого

 

ящика

 

(рис.

 

6.5).

 

 

Рис.

 

6.5

 

 

Алгоритм

 

тестируемой

 

программы

 

Предположим,

 

что

 

на

 

рис.

 

6.5

 

представлена

 

небольшая

 

программа,

 

которая

 

должна

 

быть

 

протестирована.

 

Эквивалент-

ная

 

программа,

 

написанная

 

на

 

языке

 

PL/1,

 

имеет

 

вид:

 

М: PROCEDURE (A,В,Х); 
   IF ((

А>1) & (В=0)) THEN DO; 

       

Х=Х/А; 

   END; 
   IF ((A=2) | (

Х>1)) THEN DO; 

A

 > 

1

 

AND

 

B

 = 

0

 

A

 = 

2

 

OR

 

X

 > 

1

 

X

 = 

X/A

 

X

 = 

X

 + 

1

 

No

 

No

 

Yes

 

Yes

 


background image

 

 

 
 

125 

       

Х=Х+1; 

   END; 
END; 

 
Можно

 

выполнить

 

каждый

 

оператор,

 

записав

 

один-един

-

ственный

 

тест,

 

который

 

реализовал

 

бы

 

путь

 

асе.

 

Иными

 

слова-

ми,

 

если

 

бы

 

в

 

точке

 

a

 

были

 

установлены

 

значения

 

A

 

=

 

2,

 

B

 

=

 

0

 

и

 

X

 

=

 

3,

 

каждый

 

оператор

 

выполнялся

 

бы

 

один

 

раз

 

 

действи-

тельности

 

X

 

может

 

принимать

 

любое

 

значение).

 

К

 

сожалению,

 

этот

 

критерий

 

хуже,

 

чем

 

он

 

кажется

 

на

 

первый

 

взгляд.

 

Например,

 

пусть

 

первое

 

решение

 

записано

 

как

 

или,

 

а

 

не

 

как

 

и.

 

При

 

тестировании

 

по

 

данному

 

критерию

 

эта

 

ошибка

 

не

 

будет

 

обнаружена.

 

Пусть

 

второе

 

решение

 

записано

 

в

 

программе

 

как

 

X

 

>

 

0;

 

эта

 

ошибка

 

также

 

не

 

будет

 

обнаружена.

 

Кроме

 

того,

 

существует

 

путь,

 

в

 

котором

 

Х

 

не

 

изменяется

 

(путь

 

abd).

 

Если

 

здесь

 

ошибка,

 

то

 

и

 

она

 

не

 

будет

 

обнаружена.

 

Таким

 

образом,

 

критерий

 

покрытия

 

операторов

 

является

 

настолько

 

слабым,

 

что

 

его

 

обычно

 

не

 

используют.

 

6.4.1.2 Покрытие решений 

Более

 

сильный

 

критерий

 

покрытия

 

логики

 

программы

 

из-

вестен

 

как

 

покрытие

 

решений,

 

или

 

покрытие

 

переходов.

 

Согласно

 

данному

 

критерию

 

должно

 

быть

 

записано

 

дос-

таточное

 

число

 

тестов,

 

такое,

 

что

 

каждое

 

решение

 

на

 

этих

 

тес-

тах

 

примет

 

значение

 

истина

 

и

 

ложь,

 

по

 

крайней

 

мере,

 

один

 

раз.

 

Иными

 

словами,

 

каждое

 

направление

 

перехода

 

должно

 

быть

 

реализовано,

 

по

 

крайней

 

мере,

 

один

 

раз.

 

Примерами

 

операторов

 

перехода,

 

или

 

решений,

 

являются

 

операторы

 

DO

 

(или

 

PERFORM

 

UNTIL

 

в

 

Коболе,

 

REPEAT

 

UNTIL,

 

WHILE

 

в

 

Паскале,

 

WHILE

 

и

 

DO

 

WHILE

 

в

 

Си),

 

IF,

 

многовыходные

 

операторы

 

GO

 

TO.

 

Можно

 

показать,

 

что

 

покрытие

 

решений

 

обычно

 

удовле-

творяет

 

критерию

 

покрытия

 

операторов.

 

Поскольку

 

каждый

 

оператор

 

лежит

 

на

 

некотором

 

пути,

 

исходящем

 

либо

 

из

 

опера-

тора

 

перехода,

 

либо

 

из

 

точки

 

входа

 

программы,

 

при

 

выполне-

нии

 

каждого

 

направления

 

перехода

 

каждый

 

оператор

 

должен

 

быть

 

выполнен.

 

Однако

 

существует,

 

по

 

крайней

 

мере,

 

два

 

ис-