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

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

 

 

 
 

116 

 

Рис.

 

6.3

 

 

Сводный

 

список

 

вопросов

 

для

 

выявления

 

ошибок

                         

при

 

инспекции (часть

 

1)

 

Обращение

 

к

 

данным

 

1.

 

Используются

 

ли

 

переменные

 

с

 

не-

установленными

 

значениями?

 

2.

 

Лежат

 

ли

 

индексы

 

вне

 

заданных

 

границ?

 

3.

 

Есть

 

ли

 

нецелые

 

индексы?

 

4.

 

Есть

 

ли

 «

подвешенные

» 

обращения?

 

5.

 

Корректны

 

ли

 

атрибуты

 

при

 

всех

 

псевдонимах?

 

6.

 

Соответствуют

 

ли

 

атрибуты

 

записи

 

и

 

структуры?

 

7.

 

Вычислимы

 

ли

 

адреса

 

битовых

 

по-

лей?

 

Передаются

 

ли

 

битовые

 

поля

 

в

 

качестве

 

аргументов?

 

8.

 

Корректны

 

ли

 

атрибуты

 

базирован-

ной

 

памяти?

 

9.

 

Соответствуют

 

ли

 

друг

 

другу

 

опре-

деления

 

структуры,

 

данные

 

ей

 

в

 

раз-

личных

 

процедурах?

 

10.

 

Превышены

 

ли

 

границы

 

строки?

 

11.

 

Существуют

 

ли

 

какие-нибудь

 

дру-

гие

 

ошибки

 

в

 

операциях

 

с

 

индексацией

 

или

 

при

 

обращении

 

к

 

массивам

 

по

 

индексу?

 

Вычисления

 

1.

 

Производятся

 

ли

 

вычисления

 

на

 

неарифметических

 

переменных?

 

2.

 

Производятся

 

ли

 

вычисления

 

с

 

ис-

пользованием

 

данных

 

разного

 

вида?

 

3.

 

Существуют

 

ли

 

вычисления

 

пере-

менных

 

разной

 

длины?

 

4.

 

Не

 

меньше

 

ли

 

длина

 

результата,

 

чем

 

длина

 

вычисляемого

 

значения?

 

5.

 

Возможно

 

ли

 

переполнение

 

или

 

потеря

 

промежуточного

 

результата

 

при

 

вычислении?

 

6.

 

Есть

 

ли

 

деление

 

на

 

нуль?

 

7.

 

Существуют

 

ли

 

неточности

 

при

 

работе

 

с

 

двоичными

 

числами?

 

8.

 

Не

 

выходит

 

ли

 

значение

 

переменной

 

за

 

пределы

 

установленного

 

диапазона?

 

9.

 

Понятен

 

ли

 

порядок

 

следования

 

операторов?

 

10.

 

Правильно

 

ли

 

осуществляется

 

деле-

ние

 

целых

 

чисел?

 

 

Описание

 

данных

 

1.

 

Все

 

ли

 

переменные

 

описаны?

 

2.

 

Понятно

 

ли

 

отсутствие

 

атрибутов?

 

3.

 

Правильно

 

ли

 

инициализированы

 

массивы

 

и

 

строки?

 

4.

 

Правильно

 

ли

 

определены

 

размер,

 

тип

 

и

 

класс

 

памяти?

 

5.

 

Согласуется

 

ли

 

инициализация

 

с

 

классом

 

памяти?

 

6.

 

Нельзя

 

ли

 

обойтись

 

без

 

переменных

 

со

 

сходными

 

именами?

 

Сравнение

 

1.

 

Сравниваются

 

ли

 

величины

 

несо-

вместимых

 

типов?

 

2.

 

Сравниваются

 

ли

 

величины

 

различ-

ных

 

типов?

 

3.

 

Корректны

 

ли

 

отношения

 

сравнения?

 

4.

 

Корректны

 

ли

 

булевские

 

выражения?

 

5.

 

Объединяются

 

ли

 

сравнения

 

и

 

бу-

левские

 

выражения?

 

6.

 

Сравниваются

 

ли

 

дробные

 

величины,

 

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

 

в

 

двоичной

 

форме?

 

7.

 

Понятен

 

ли

 

порядок

 

следования

 

операторов?

 

8.

 

Понятна

 

ли

 

процедура

 

разбора

 

ком-

пилятором

 

булевских

 

выражений?

 


background image

 

 

 
 

117 

 

Рис.

 

6.4

 

 

Сводный

 

список

 

вопросов

 

для

 

выявления

 

ошибок

                         

при

 

инспекции (часть

 

2)

 

Передача

 

управления

 

1.

 

Может

 

ли

 

значение

 

индекса

 

в

 

пере-

ключателе

 

превысить

 

число

 

переходов?

 

2.

 

Будет

 

ли

 

завершен

 

каждый

 

цикл?

 

3.

 

Будет

 

ли

 

завершена

 

программа?

 

4.

 

Существует

 

ли

 

какой-нибудь

 

цикл,

 

который

 

не

 

выполняется

 

из-за

 

входных

 

условий?

 

5.

 

Корректны

 

ли

 

возможные

 

погруже-

ния

 

в

 

цикл?

 

6.

 

Есть

 

ли

 

ошибки

 

отклонения

 

числа

 

итераций

 

от

 

нормы?

 

7.

 

Соответствуют

 

ли

 

друг

 

другу

 

опера-

торы

 

DO

 

и

 

END?

 

8.

 

Существуют

 

ли

 

неявные

 

решения?

 

Ввод-вывод

 

1.

 

Правильны

 

ли

 

атрибуты

 

файлов?

 

2.

 

Правильны

 

ли

 

атрибуты

 

оператора

 

OPEN?

 

3.

 

Соответствует

 

ли

 

формат

 

специфи-

кации

 

операторам

 

ввода-вывода?

 

4.

 

Соответствует

 

ли

 

размер

 

буфера

 

размеру

 

записи?

 

5.

 

Открыты

 

ли

 

файлы

 

перед

 

их

 

исполь-

зованием?

 

6.

 

Обнаруживаются

 

ли

 

признаки

 

конца

 

файла?

 

7.

 

Обнаруживаются

 

ли

 

ошибки

 

ввода-

вывода?

 

8.

 

Существуют

 

ли

 

какие-нибудь

 

тек-

стовые

 

ошибки

 

в

 

выходной

 

информа-

ции?

 

Интерфейс

 

1.

 

Равно

 

ли

 

число

 

входных

 

параметров

 

числу

 

аргумен-

тов?

 

2.

 

Соответствуют

 

ли

 

атрибуты

 

параметров

 

и

 

аргумен-

тов?

 

3.

 

Соответствуют

 

ли

 

единицы

 

измерения

 

параметров

 

и

 

аргументов?

 

4.

 

Равно

 

ли

 

число

 

аргументов,

 

передаваемых

 

вызы-

ваемым

 

модулем,

 

числу

 

параметров?

 

5.

 

Соответствуют

 

ли

 

атрибуты

 

аргументов,

 

передавае-

мых

 

вызываемым

 

модулем,

 

единицам

 

измерения

 

па-

раметров?

 

6.

 

Совпадают

 

ли

 

единицы

 

измерения

 

аргументов,

 

передаваемых

 

вызываемым

 

модулем,

 

единицам

 

изме-

рения

 

параметров?

 

7.

 

Правильно

 

ли

 

заданы

 

число,

 

атрибуты

 

и

 

порядок

 

следования

 

аргументов

 

для

 

встроенных

 

функций?

 

8.

 

Существуют

 

ли

 

какие-нибудь

 

обращения

 

к

 

пара-

метрам,

 

не

 

связанным

 

с

 

текущей

 

точкой

 

входа?

 

9.

 

Не

 

изменяет

 

ли

 

подпрограмма

 

аргументы,

 

являю-

щиеся

 

только

 

входными?

 

10.

 

Согласуются

 

ли

 

определения

 

глобальных

 

перемен-

ных

 

во

 

всех

 

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

 

модулях?

 

11.

 

Передаются

 

ли

 

в

 

качестве

 

аргумента

 

константы?

 

Другие

 

виды

 

контроля

 

1.

 

Есть

 

ли

 

в

 

таблице

 

перекрестных

 

ссылок

 

какие-нибудь

 

перемен-

ные,

 

на

 

которые

 

нет

 

ссылок?

 

2.

 

Список

 

атрибутов

 

такой,

 

который

 

и

 

ожи-

дался?

 

3.

 

Есть

 

ли

 

какие-нибудь

 

предупреждения

 

или

 

информационные

 

сооб-

щения?

 

4.

 

Осуществляется

 

ли

 

контроль

 

правильности

 

входных

 

данных?

 

5.

 

Нет

 

ли

 

пропущенных

 

функций?

 


background image

 

 

 
 

118 

4.

 

Равен

 

ли

 

размеру

 

записи

 

размер

 

области

 

памяти

 

для

 

ввода-вывода?

 

Это

 

может

 

быть

 

важно

 

при

 

блочном

 

вводе-выво

-

де

 

(функции

 

BLOCKREAD

 

и

 

BLOCKWRITE

 

в

 

Паскале,

 

FREAD

 

и

 

FWRITE

 

в

 

Си).

 

5.

 

Все

 

ли

 

файлы

 

открыты

 

перед

 

их

 

использованием?

 

6.

 

Правильно

 

ли

 

обнаруживаются

 

и

 

трактуются

 

признаки

 

конца

 

файла?

 

7.

 

Правильно

 

ли

 

трактуются

 

ошибочные

 

состояния

 

ввода-

вывода?

 

8.

 

Существуют

 

ли

 

смысловые

 

или

 

грамматические

 

ошиб-

ки

 

в

 

тексте,

 

выводимом

 

программой

 

на

 

печать

 

или

 

экран

 

дис-

плея?

 

6.3.3.8 Другие виды контроля 

1.

 

Если

 

компилятор

 

выдает

 

таблицу

 

перекрестных

 

ссылок

 

идентификаторов,

 

проверьте

 

величины,

 

на

 

которые

 

в

 

этом

 

спи-

ске

 

нет

 

ссылок

 

или

 

есть

 

только

 

одна

 

ссылка.

 

2.

 

Если

 

компилятор

 

выдает

 

список

 

атрибутов,

 

проверьте

 

атрибуты

 

каждой

 

величины

 

для

 

обеспечения

 

гарантии

 

того,

 

что

 

в

 

программе

 

нет

 

никаких

 

неожиданных

 

и

 

отсутствующих

 

атри-

бутов.

 

3.

 

Если

 

программа

 

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

 

успешно,

 

но

 

компи-

лятор

 

выдает

 

одно

 

или

 

несколько

 

«предупреждений»

 

или

 

«ин-

формационных»

 

сообщений,

 

внимательно

 

проверьте

 

каждое

 

из

 

них.

 

Предупреждение

 

свидетельствует

 

о

 

«подозрениях»

 

компи-

лятора

 

в

 

отношении

 

правильности

 

ваших

 

действий.

 

Все

 

эти

 

«подозрения»

 

должны

 

быть

 

рассмотрены.

 

В

 

информационных

 

сообщениях

 

могут

 

перечисляться

 

неописанные

 

переменные

 

или

 

конструкции

 

языка,

 

которые

 

препятствуют

 

оптимизации

 

кода.

 

4.

 

Является

 

ли

 

программа

 

(или

 

модуль)

 

достаточно

 

ус-

тойчивой?

 

Иными

 

словами,

 

проверяет

 

ли

 

она

 

правильность

 

своих

 

входных

 

данных?

 

5.

 

Не

 

пропущена

 

ли

 

в

 

программе

 

какая-нибудь

 

функция?

 

Сводный

 

список

 

вопросов

 

для

 

выявления

 

ошибок

 

приве-

ден

 

на

 

рис.

 

6.3

 

и

 

6.4.

 


background image

 

 

 
 

119 

6.3.4 Сквозные просмотры 

Сквозной

 

просмотр,

 

как

 

и

 

инспекции,

 

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

 

собой

 

набор

 

процедур

 

и

 

способов

 

обнаружения,

 

осуществляемых

 

группой

 

лиц,

 

просматривающих

 

текст

 

программы.

 

Такой

 

про-

смотр

 

имеет

 

много

 

общего

 

с

 

процессом

 

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

 

но

 

их

 

процедуры

 

несколько

 

отличаются,

 

и,

 

кроме

 

того,

 

здесь

 

исполь-

зуются

 

другие

 

методы

 

обнаружения

 

ошибок.

 

Подобно

   

инспекции,

   

сквозной

   

просмотр

   

проводится

 

как

 

непрерывное

 

заседание,

 

продолжающееся

 

один

 

или

 

два

 

ча-

са.

 

Группа

 

по

 

выполнению

 

сквозного

 

просмотра

 

состоит

 

из

              

3—5

 

человек.

 

В

 

нее

 

входят

 

председатель,

 

функции

 

которого

 

подобны

 

функциям

 

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

 

в

 

группе

 

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

 

секретарь,

 

который

 

записывает

 

все

 

найденные

 

ошибки,

 

и

 

спе-

циалист

 

по

 

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

 

Мнения

 

о

 

том,

 

кто

 

должен

 

быть

 

чет-

вертым

 

и

 

пятым

 

членами

 

группы,

 

расходятся.

 

Конечно,

 

одним

 

из

 

них

 

должен

 

быть

 

программист.

 

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

 

пятого

 

участ-

ника

 

имеются

 

следующие

 

предположения:

 

 

1)

 

высококвалифицированный

 

программист;

 

 

2)

 

эксперт

 

по

 

языку

 

программирования;

 

 

3)

 

начинающий

 

(на

 

точку

 

зрения

 

которого

 

не

 

влияет

 

пре-

дыдущий

 

опыт);

 

 

4)

 

человек,

 

который

 

будет,

 

в

 

конечном

 

счете,

 

эксплуати-

ровать

 

программу;

 

 

5)

 

участник

 

какого-нибудь

 

другого

 

проекта;

 

 

6)

 

кто-либо

 

из

 

той

 

же

 

группы

 

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

 

что

 

и

 

автор

 

программы.

 

Начальная

 

процедура

 

при

 

сквозном

 

просмотре

 

такая

 

же,

 

как

 

и

 

при

 

инспекции:

 

участникам

 

заранее,

 

за

 

несколько

 

дней

 

до

 

заседания,

 

раздаются

 

материалы,

 

позволяющие

 

им

 

ознакомить-

ся

 

с

 

программой.

 

Однако

 

процедура

 

заседания

 

отличается

 

от

 

процедуры

 

инспекционного

 

заседания.

 

Вместо

 

того,

 

чтобы

 

про-

сто

 

читать

 

текст

 

программы

 

или

 

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

 

список

 

ошибок,

 

участники

 

заседания

 

«исполняют

 

роль

 

вычислительной

 

маши-

ны».

 

Лицо,

 

назначенное

 

тестирующим,

 

предлагает

 

собравшимся

 

небольшое

 

число

 

написанных

 

на

 

бумаге

 

тестов,

 

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

щих

 

собой

 

наборы

 

входных

 

данных

 

 

ожидаемых

 

выходных

 

данных)

 

для

 

программ

 

или

 

модуля.

 

Во

 

время

 

заседания

 

каждый

 


background image

 

 

 
 

120 

тест

 

мысленно

 

выполняется.

 

Это

 

означает,

 

что

 

тестовые

 

данные

 

подвергаются

 

обработке

 

в

 

соответствии

 

с

 

логикой

 

программы.

 

Состояние

 

программы

 

(т.е.

 

значения

 

переменных)

 

отслеживает-

ся

 

на

 

бумаге

 

или

 

доске.

 

Конечно,

 

число

 

тестов

 

должно

 

быть

 

небольшим

 

и

 

они

 

должны

 

быть

 

простыми

 

по

 

своей

 

природе,

 

потому

 

что

 

скорость

 

выполнения

 

программы

 

человеком

 

на

 

много

 

порядков

 

меньше,

 

чем

 

у

 

машины.

 

Следовательно,

 

тесты

 

сами

 

по

 

себе

 

не

 

играют

 

критической

 

роли,

 

скорее

 

они

 

служат

 

средством

 

для

 

первона-

чального

 

понимания

 

программы

 

и

 

основой

 

для

 

вопросов

 

про-

граммисту

 

о

 

логике

 

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

 

и

 

принятых

 

допущениях.

 

В

 

большинстве

 

сквозных

 

просмотров

 

при

 

выполнении

 

самих

 

тес-

тов

 

находят

 

меньше

 

ошибок,

 

чем

 

при

 

опросе

 

программиста.

 

Как

 

и

 

при

 

инспекции,

 

мнение

 

участников

 

является

 

ре-

шающим

 

фактором.

 

Замечания

 

должны

 

быть

 

адресованы

 

про-

грамме,

 

а

 

не

 

программисту.

 

Другими

 

словами,

 

ошибки

 

не

 

рас-

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

 

как

 

слабость

 

человека,

 

который

 

их

 

совершил.

 

Они

 

свидетельствуют

 

о

 

сложности

 

процесса

 

создания

 

программ

 

и

 

являются

 

результатом

 

все

 

еще

 

примитивной

 

природы

 

сущест-

вующих

 

методов

 

программирования.

 

Сквозные

 

просмотры

 

должны

 

протекать

 

так

 

же,

 

как

 

и

 

описанный

 

ранее

 

прогресс

 

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

 

Побочные

 

эффек-

ты,

 

получаемые

 

во

 

время

 

выполнения

 

этого

 

процесса

 

(установ-

ление

 

склонных

 

к

 

ошибкам

 

частей

 

программы

 

и

 

обучение

 

на

 

основе

 

анализа

 

ошибок,

 

стиля

 

и

 

методов),

 

характерны

 

и

 

для

 

процесса

 

сквозных

 

просмотров.

 

6.3.5 Оценка посредством просмотра 

Последний

 

ручной

 

процесс

 

обзора

 

программы

 

не

 

связан

 

с

 

ее

 

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

 

(т.е.

 

целью

 

его

 

не

 

является

 

нахождение

 

оши-

бок).

 

Однако

 

описание

 

этого

 

процесса

 

приводится

 

здесь

 

пото-

му,

 

что

 

он

 

имеет

 

отношение

 

к

 

идее

 

чтения

 

текста.

 

Оценка

 

посредством

 

просмотра

 

является

 

методом

 

оценки

 

анонимной

 

программы

 

в

 

терминах

 

ее

 

общего

 

качества,

 

ремон-

топригодности,

 

расширяемости,

 

простоты

 

эксплуатации

 

и

 

ясно-

сти.

 

Цель

 

данного

 

метода

 

 

обеспечить

 

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

 

средст-

вами

 

самооценки.

 

Выбирается

 

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

 

который

 

должен