164
if (a > d) task x ( ) ; // выполнить задание х
else task y ( ); // выполнить задание у
В нем проверяется условие a>d на истинность или нет. Поскольку выполнение
условного кода включает значения переменных а и d, то рассматривается два случая,
определенные на двух отдельных эквивалентных классах, когда условие верно и
получен соответствующий результат. И второй случай, когда условие не выполняется.
Описание доказательства может
оказаться длиннее написанного фрагмента программы
и нет уверенности, что это описание не содержит ошибок. Данная стратегия имеет
преимущество перед логическим доказательством теорем, поскольку полагается на
трассирование изменяющихся условий операторов программв. Главными элементами
доказательства корректности программы являются фрагмент программы, входные и
выходные значения переменных, а также процесс слежение за тем, как этот фрагмент
программа будет выполняться.
7.1.3. Методы просмотра структуры программы
Метод просмотра применяется к инспекции созданных программ независимыми
экспертами и с участием самих разработчиков. На начальном этапе проектирования
инспекция предполагает проверку полноты, целостности, однозначности,
непротиворечивости и совместимости документов с исходными требованиями к ПС.
На этапе реализации системы инспекция состоит в
анализе текста программы и
проверку соблюдения требований к ней и стандартных руководящих документов
технологии программирования. Эффективность инспекции заключается в том, что
эксперты пытаются взглянуть на проблему "со стороны", подвергнуть ее
всестороннему критическому анализу и просмотру словесных объяснений способов
проектирования. Непосредственный просмотр исходного кода позволяют обнаружить
ошибки в логике и в описании алгоритма.
Эти приемы позволяют на более ранних этапах проектирования обнаружить ошибки
путем многократного просмотра исходных кодов. Методы просмотра не
формализованы и определяются степенью квалификации экспертов группы. Основные
методы рассматриваются ниже.
Метод простого структурного анализа. Он ориентирован на анализ структуры
программы и потоков данных и базируется на использовании теория графов для
представления структуры программы в виде графа, каждая вершина которого – это
оператор, а дуга – передача управления между операторами. Согласно графу
определяется достижимость вершин программы и выход потоков управления для ее
завершения и обнаружение логических ошибок [5,12].
Для проведения анализа потоков данных данный граф пополняется указателями
переменных, их значениями и ссылками на операторы программы. При тестировании
потоков данных определяются значения предикатов в логических операторах, по
которым формируются пути выполнения программы. Для прослеживания путей
устанавливаются точки, в которых имеется ссылка на переменную до присвоения ей
значения, либо переменной присваивается значение без ее описания, либо делается
повторное описание переменной или переменной, к которой нет обращения.