プログラム仕様

プログラム仕様（プログラムしよう、）は、プログラムに求められることを定義したものである。プログラムの設計図や開発者から見たユーザーマニュアルの元となる文書のような「非形式的」な形態の場合と、数学的に厳密に動作を定義する「形式的」な形態の場合がある。実際、最もよい仕様は既存のアプリケーションを理解して改善するために書かれたものであることが多いが、重要なソフトウェアは開発前に注意深く仕様を記述する必要がある。仕様は特に常に安定性が求められる外部インタフェースでは重要である。

古典的な分類 
ウォーターフォール・モデルなどの古典的開発手法では、以下のようにプログラム仕様を分け、トップダウン的に作成していく。

 基本仕様（Basic specification）は、要求仕様に基づいて、機能概要、機能構成、ハードウェア構成、運用の前提条件、性能や品質の要件などを記述する。最近では、要求分析でかなり詳細な要求仕様が作成されるため、基本仕様という形態では文書を作成しないこともある。
 機能仕様（Functional specification）は、ソフトウェア開発においてプログラムや大規模なソフトウェアシステムの動作を記述した一連の文書を指す。これら文書は、主にソフトウェアが受け付けるべき入力を列挙し、それら入力に対してそのシステムがどのように動作するかを記述する。
 詳細仕様（Detail specification）は、具体的なコードの実装を説明する文書である。技術仕様とも呼ばれる。採用する開発手法によってはソースコードドキュメンテーションとしてソースファイル内に詳細仕様を記述することもある。例えばエクストリーム・プログラミングでは、このような仕様を独立した文書として書くことはない。

以下では機能仕様について解説する。

外部エージェントとシステムの相互作用 
ソースコードや技術設計文書とは異なり、機能仕様ではシステムの内部の動きがどうなるかを定義しないことが多い。その代わりに外部の各種エージェント（ユーザー、周辺機器、他のコンピュータなど）から見たそのシステムの振る舞いや相互作用を記述する。

例えば、次のように記述される:
ユーザーがOKボタンをクリックした場合、ダイアログが閉じられ、フォーカスはダイアログが開かれる以前の状態でのメインウィンドウに戻る。

このように、外部エージェント（この場合ユーザー）とソフトウェアシステムの相互作用を記述する。ユーザーがOKボタンをクリックするという入力を与えたとき、プログラムはそのダイアログを閉じるという形でそれに応答する。

機能仕様の役割 
機能仕様には様々な目的があるが、主な目的はソースコードやテストケース作成という時間のかかる作業に入る前に開発チーム内でプログラムの機能について意識を合わせることである。

機能仕様は、コード作成やテストケース作成にあたって参照される。例えば、ソフトウェアテストでテスト結果が正しいかどうかは機能仕様の記述に照らし合わせて判断される。

関連項目

 形式手法
 形式的検証
 形式仕様記述
 表示的意味論
 操作的意味論
 公理的意味論
 契約プログラミング
 VDM
 Z言語
 ソフトウェア工学
 仕様記述言語
 詳細化

外部リンク
 やさしい機能仕様 - パート1:なぜわざわざ書く必要があるのか? ジョエル・オン・ソフトウェア

ふろくらむしよう