仕様記述言語

仕様記述言語（しようきじゅつげんご）は、システムなどの仕様を記述する、コンピュータ言語（すなわち形式言語）である。形式的でない仕様記述もあるが（後述）、そういったものを含めて何らかの主張がされている場合もある。

プログラミング言語がシステムそのものに変換されるのに対し、仕様記述言語は必ずしもシステムに自動変換されるものではなく、あくまで仕様の妥当性を検証することに重きを置いている。ソフトウェア工学における一般的な設計プロセスの位置づけから、多くはプログラミング言語を記述する前段階に記述されることを期待している。

仕様記述と検証の方法について説明する。仕様記述では、何らかのシステムの仕様を論理学的あるいは代数学的に、形式的に記述する（形式仕様記述）。検証では、論理学や代数学に基づき（すなわち「機械的」に）、無矛盾性などといったシステムにおける「好ましい性質」の保証、あるいはデッドロックの可能性があるといった「好ましくない性質」の不存在を保証する（あるいは存在することを示し、修正を促す）。代表的な形式的仕様記述言語としてZ言語やLOTOSなどがある。研究段階では長い歴史を持つが、記述が複雑で高度なスキルを要求する上、システム全体の仕様を全て表現するには膨大な量の記述が必要になる。

保証の無い手法
保証が無いものを「仕様」と言えるかどうかという根本的な疑問点はあるが、ここまでで述べたような形式的な記述と検証というような手法でないものについても、類似したものとして扱われていることがある。

たとえば、完全な妥当性は保証できないが、シミュレーションを行うことで、ある限られた場合においての動作を模擬して確かめる方法もある。SpecCはこの立場を取る。

あるいは、あくまでシステム全体のモデリングに重きを置き、仕様に対する人間の理解容易性を向上させることで、設計者自身によって（あるいは設計者同士のコミュニケーションによって）妥当性を検討させるものである。UMLがこれに該当するという主張もある。いずれにしても、形式的でない以上、論理的に何かが保証されることはなく、たとえば双方の当事者が「互いに誤解は無い」と信じていたとしても、「そう信じている」だけでしかない。

仕様記述言語一覧
Z言語
VDM
LOTOS
SDL
OBJ
CafeOBJ
（その他の記述言語）
SpecC
UML

コンピュータ言語

形式手法
ダイアグラム
数学に関する記事