Лекция 8. Понятие корректности программ

Под корректностью программы понимают её соответствие некоторому эталону или совокупности формализованных эталонных правил и характеристик.

Наиболее полным эталоном корректности программ является программная спецификация. Её особенностью является задание требований поведения программы для допустимых наборов входных данных. Поэтому корректная программа может неправильно работать или даже сбиваться на недопустимых наборах входных данных. Свойством устойчивости к недопустимым наборам входных данных обладает надежная программа - в этом заключается разница между надёжной и корректной программами.

Требования к корректности делятся в зависимости от двух типов критериев качества:

· Для функциональных критериев они определяются предметной областью и функциями выполняемой программы.

· Для конструктивных критериев они определяются общими для всех программ свойствами.

В зависимости от проверяемых компонентов программ различают следующие виды их корректности, показанные на рис.11.

 
  Лекция 8. Понятие корректности программ - №1 - открытая онлайн библиотека

Рис.11

1. Корректность текстов программ имеет только конструктивную составляющую; благодаря жёстким правилам языков программирования синтаксическая и семантическая корректность программ проверяется на этапе трансляции программы, и прошедшая трансляцию программа является корректной с этой точки зрения.

2. Корректность программных модулей имеет и конструктивную и функциональную составляющие:

· Конструктивная составляющая определяется правилами построения структуры программных модулей, задаваемыми в технологии и языке программирования.

· Функциональная составляющая корректности модулей зависит от предметной области и функциональных спецификаций программы.

Функциональная составляющая корректности может проверяться в различных условиях:

Детерминированная - для фиксированных наборов входных данных должны быть получены конкретные значения результатов;

Стохастическая - входные данные задаются случайными величинами с известными законами распределения и результаты также должны быть случайными величинами с требуемыми законами распределения и заданными корреляционными связями между входными и выходными данными.

Динамическая - характерна для систем реального времени и определяется согласованием во времени порядка поступления входных данных и порядка выдачи результатов выполнения программы.

В общем случае функциональные спецификации программы определяют и функциональ-ные требования к программе, и характеристики, с которыми они должны обеспечиваться, как это показано на рис.12.

 
  Лекция 8. Понятие корректности программ - №2 - открытая онлайн библиотека

Рис.12

3.Корректность данных имеет конструктивную и функциональную составляющие.

Структурная корректность данных относится к конструктивной составляющей и предполагает правильность построения структурированных данных в программе: массивов, стеков, очередей и т.п. Функциональная корректность данных определяется диапазонами изменения их значений и соответствием типов полей структур типам значений данных.

4. Корректность комплексов программ также имеет конструктивную и функциональную составляющие: конструктивная составляющая определяется корректностью структуры межмодульных связей по управлению и данным, определяемых в интерфейсных требованиях к программе; функциональной корректность комплекса программ определяется так же, как и функциональная корректность модулей.

II. Эталоны и методы проверки корректности.

Эталоны для проверки корректности программ могут использоваться в следующих трех формах, поясняемых с помощью рис.13:

1. Формализованные правила.

2. Программные спецификации.

3. Тесты.

Формализованные правила - имеют достаточно неопределенностей, так как опреде-ляются двумя видами требований:

* требования стандартов (общероссийских и стандартов предприятий);

* требования языков и технологий программирования.

 
  Лекция 8. Понятие корректности программ - №3 - открытая онлайн библиотека

Рис.13

Для полной убедительности в корректности программ одних формализованных правил недостаточно.

2. Программные спецификации - относятся к функциональным эталонам и в основ-ном обеспечивают проверку корректности программ в статике.

3. Тесты.

В зависимости от стадии и характера проверки разделяются тесты делятся на статические и динамические. Статическое тестирование - ручное тестирование программ, начиная со стадии формирования требований к программе. На стадии кодирования при статическом тестировании некоторую часть маршрутов исполнения тестируют вручную. Динамическое тестирование подразумевает достаточно полную структурную и функциональную проверку выполнения программы.

Как формируются эталоны для тестирования? Существует несколько способов формирования эталонов:

1) Использование аналитических выражений. Этот способ особенно подходит при детерминированном тестировании, так как имеется возможность сравнить результаты тестирования с ожидаемыми результатами. Имеются ограничения в использовании этого метода, если неизвестны или отсутствуют аналитические выражения связывающие входные данные и результаты; иногда требуется использовать много допущений.

2) Использование моделирования на ЭВМ. Способ является универсальным. При этом ряд данных моделируется другим способом и по другим алгоритмам, нежели испытываемая программа и на других ЭВМ. Причем наборы входных данных создаются по случайным законам, что обеспечивает высокую гибкость этого способа.

3) Использование результатов испытаний предшествующих вариантов программ.

При этом используется ранее накопленный опыт испытателя или других исследователей, выраженный в экспертных оценках ожидаемых результатов.

Степень достоверности проверки корректности программ при использовании этих методов убывает по номерам способов формирования эталонов.

В 1-ом случае обеспечивается 100% гарантия корректности программ, в третьем случае такой уверенности нет, но мы можем убедиться в том, что программа работает так же или иначе, чем аналогичный вариант. Менее достоверные тесты приходится использовать из-за недостаточности сил и средств.