Информатика и технология программирования

         

Способы анализа программы


Назначение любой программы - давать определенный результат для любых входных значений. Результат же - это набор значений, удовлетворяющих некоторым условиям, или обладающий некоторыми свойствами. Если посмотреть на программу с этой точки зрения, то она имеет много общего с математической теоремой. Действительно, теорема утверждает, что некоторое свойство имеет место на множестве элементов (например, теорема Пифагора устанавливает соотношение для гипотенузы и катетов всех прямоугольных треугольников). Программа обладает тем же самым свойством : для различных вариантов входных данных она дает результат, удовлетворяющий определенным условиям. Поэтому анализ программы - это не что иное, как формулировка теоремы о том, какой результат она дает.

переменных.

Убедиться, что теорема верна, можно различными способами. (Обратите внимание - убедиться, но не доказать ). Точно так же можно убедиться, что программа дает тот или иной результат :



- выполнить программу в компьютере или проследить ее выполнение на конкретных входных данных " на бумаге" (анализ методом единичных проб ) ;



-разбить программу на фрагменты с известным " смыслом" и попробовать соединить результаты их выполнения в единое целое (анализ на уровне неформальной логики и " здравого смысла " ) ;



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

Те же самые методы можно использовать, если результат и " смысл" программы не известен. Тогда при помощи единичных проб и разбиения программы на фрагменты с уже известным " смыслом" можно догадаться, каков будет результат . Такой же процесс, но в обратном направлении имеет место при разработке программы . Можно попытаться разбить конечный результат на ряд промежуточных, для которых уже имеются известные фрагменты.

Смысл фрагментов алгоритмов может быть разным :



- каждая переменная в программе не просто хранит значение. С ней обычно связывается результат выполнения некоторого процесса. Существует ряд стандартных процессов, которые присутствуют в большинстве алгоритмов, существует и ряд стандартных "смыслов" переменных (переменная цикла, счетчик, накопитель, признак, минимум /максимум) ;


-если циклический процесс завершается в зависимости от выполнения или невыполнения условия на множестве проверяемых элементов, то такой цикл проверяет свойства всеобщности или существования на этом множестве - в этом заключается его смысл ;


-каждая предметная область имеет набор выражений и фрагментов, которые несут дополнительный смысл только при их использовании в этой области. Так, например, остаток от деления на 10 в арифметических задачах дополнительно означает еще и младшую цифру числа (делимого) ;


-каждая структура данных имеет стандартный набор выражений, имеющий смысл только применительно к ней ;


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


Содержание раздела