************
はじめに
************

.. 本章の文書は，SPARK 2014 参照マニュアルの「はじめに」の一部をコピーしている

SPARKは，プログラム言語であり，検証ツール群です．高信頼ソフトウェア開発における必要となることを満たすように設計されています．SPARK 2014 は，Ada 2012 を元としていますが，次の意味でサブセットとなります．まず，検証を阻害する要素を取り除いています．また，モジュール化や形式検証を支援するために契約 [#f1]_ やアスペクト [#f2]_ の仕組みを拡張しています．

新しいアスペクトを用いて，不完全なプログラムを分析することができます．また，抽象化 (abstraction) や洗練 (refinement) といった概念を支援し，詳細な静的解析が可能です．ここでは，情報のフロー解析や，仕様に対して実装が適合しているかの形式検証を含んでいます．

SPARK 2014 は，以前の SPARK 2005 と比較すると，より多機能で柔軟になっています．様々なアプリケーション領域や規格に適合できるように構成を変更することができます．サーバータイプの高信頼性システム（航空機管制システム）から，信頼性が要求される組み込みハードリアルタイムシステム（例えば，DO-178C Level A に適合する必要があるアビオニクスシステム）に用いることができます．

SPARK 2014 の最大の特徴は，証明と他の検証手段（テストなど）を一緒に利用できることです．（ある箇所では）単体テストの代わりに，ユニット毎の証明を行うことができます．DO-178C [#f3]_ やDO-333 [#f4]_ といった規格では，この方法について記述が，形式手法に関する補足の中にあります．あるユニットを形式的に証明し，他のユニットではテストを通じて検証するといったことが可能です．

SPARK2014 では， |GNAT Pro| に含まれる様々なツールを利用することができます．

* GNAT コンパイラ
* GNAT Studio 統合開発環境
* 単体テストハーネス生成のための GNATtest ツール
* 形式プログラム検証用の |GNATprove| ツール

この文書の残りの部分で，単に |SPARK| といえば，SPARK 2014 を指します．

この文書の他の部分は，以下の構成になっています．

* :ref:`ja Installation of GNATprove` は，様々なプラットフォームへのインストール手順について記載しています．
* :ref:`ja Identifying SPARK Code` では，解析を行うために， |SPARK| で書かれたプログラム中の解析対象となる場所を指定するためのさまざまな方法を説明しています．
* :ref:`ja Overview of SPARK Language` は， |SPARK| の概要について説明しています．
* :ref:`ja Formal Verification with GNATprove` は， |GNATprove| を用いた形式検証について説明しています．

.. rubric:: Footnotes
.. [#f1] 表明機構を用いることで，コンポーネントのふるまいを規定する方法．契約による設計．
.. [#f2] アスペクトは，Ada言語のキーワード．"An aspect is a specifiable property of an entity. " (ada 2012 reference manual)
.. [#f3] RTCA，Software Considerations in Airborne Systems and Equipment Certification
.. [#f4] RTCA，Formal Methods Supplement to DO-178C and DO-278A
