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