Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Язык спецификаций — это формальный язык в информатике, используемый при анализе систем, анализе требований и проектировании систем для описания системы на гораздо более высоком уровне, чем язык программирования, который применяется для создания исполняемого кода системы.
Formal language used in computer science
A specification language is a formal language in computer science used during systems analysis, requirements analysis, and systems design to describe a system at a much higher level than a programming language, which is used to produce the executable code for a system.
Обзор
Языки спецификаций обычно не выполняются напрямую. Они предназначены для описания *что* должно быть сделано, а не *как*. Считается ошибкой, если спецификация требований перегружена излишними деталями реализации. Распространенное фундаментальное предположение многих подходов к спецификации заключается в том, что программы моделируются как алгебраические или модели-теоретические структуры, включающие в себя набор множеств значений данных вместе с функциями над этими множествами. Этот уровень абстракции соответствует точке зрения, согласно которой корректность поведения программы по вводу-выводу имеет приоритет над всеми ее остальными свойствами. В подходе, ориентированном на свойства (принятом, например, в CASL), спецификации программ состоят главным образом из логических аксиом, обычно в логической системе, где равенство играет важную роль, описывающих свойства, которым функции должны удовлетворять – часто лишь посредством их взаимосвязей. Это контрастирует с так называемой спецификацией, ориентированной на модель, в таких фреймворках, как VDM и Z, которая состоит из простой реализации требуемого поведения. Спецификации должны подвергаться процессу уточнения (дополнения деталями реализации), прежде чем их можно будет фактически реализовать. Результатом такого процесса уточнения является исполняемый алгоритм, который либо сформулирован на языке программирования, либо в исполняемом подмножестве используемого языка спецификаций. Например, конвейеры Хартмана, при правильном применении, можно рассматривать как спецификацию потока данных, которая может быть непосредственно исполнена. Другой пример – модель акторов, которая не имеет конкретного прикладного содержания и должна быть специализирована для возможности исполнения. Важным применением языков спецификаций является возможность создания доказательств корректности программ (см. автоматический доказатель теорем).
Specification languages are generally not directly executed. They are meant to describe the what, not the how. It is considered an error if a requirement specification is cluttered with unnecessary implementation detail. A common fundamental assumption of many specification approaches is that programs are modelled as algebraic or model theoretic structures that include a collection of sets of data values together with functions over those sets. This level of abstraction coincides with the view that the correctness of the input/output behaviour of a program takes precedence over all its other properties. In the property oriented approach to specification (taken e. g. by CASL), specifications of programs consist mainly of logical axioms, usually in a logical system in which equality has a prominent role, describing the properties that the functions are required to satisfy—often just by their interrelationship. This is in contrast to so called model oriented specification in frameworks like VDM and Z, which consist of a simple realization of the required behaviour. Specifications must be subject to a process of refinement (the filling in of implementation detail) before they can actually be implemented. The result of such a refinement process is an executable algorithm, which is either formulated in a programming language, or in an executable subset of the specification language at hand. For example, Hartmann pipelines, when properly applied, may be considered a dataflow specification which is directly executable. Another example is the actor model which has no specific application content and must be specialized to be executable. An important use of specification languages is enabling the creation of proofs of program correctness (see theorem prover).