Спецификация программы

Для определения связи программы со своей спецификацией рассмотрим следующую модель применения программы (рис. 1). Вычисление по программе является необходимым звеном в цепочке действий некоторого реального процесса, который будем называть базовым процессом программы. Вычисление применяется для преобразования информации. Результат преобразования используется в дальнейших действиях процесса. Взаимодействие программы с процессом реализуется через входные и выходные информационные потоки программы. Части процесса, непосредственно взаимодействующие с вычисляемой программой и реализующие потоки, определяют окружение программы.

Рис. 1. Модель применения программы

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

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

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

Свойство 1. Спецификация первична по отношению к программе. Действительно, спецификация появляется раньше программы. Спецификация необходима человеку для построения программы. Однако для программы, созданных не человеком, спецификация может и не существовать. Примером подобной программы является ДНК, за которой укрепился термин «биокомпьютер».

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

Свойство 3. Будучи написанной, программа всегда существует и является строго определенной в силу строгости языка программирования. Спецификация, напротив, может быть нестрогой, неполной, устаревшей, отсутствовать или быть ошибочной. Этот парадокс типичен для современного программирования. Спецификация существует при разработке программы, однако формы ее представления могут быть самыми различными. Спецификация может быть математически строгой и при этом существовать лишь в голове разработчика программы. При исполнении программы спецификация не нужна. Поэтому модификации программы не всегда сопровождаются соответствующими корректировками спецификации программы.

Спецификация программы не нужна также и при разработке транслятора с языка программирования - здесь программа рассматривается только в качестве теста для транслятора. Разумеется, описание языка программирования никак не касается спецификации. Как следствие, в представлении программиста спецификация часто становится чем-то необязательным. Отметим, что концепция спецификации появилась лишь при разработке больших программных комплексов в системном программировании, т. е. значительно позже первых программ.

Свойство 4. Программа на языке программирования является абсолютно точной и полной спецификацией самой себя. Следует из того, что язык программирования с абсолютной строгостью определяет процесс исполнения и результаты для каждого набора входных данных. Из-за отсутствия или неполноты спецификации программа может оказаться единственно существующей спецификацией. Отметим, что программа является неадекватной в качестве спецификации самой себя.

Свойство 5. Спецификация может быть невычислимой. Программа автоматически вычислима.