Ada言語で開発された大規模なシステムやミッションクリティカルなソフトウェアにおいて、コードの品質維持と正確な解析は不可欠です。ASIS (Ada Semantic Interface Specification) は、Adaのライブラリ環境に対してベンダーに依存せずアクセスするための階層型オープンアーキテクチャを提供します。これにより、開発者はAdaプログラムの静的解析を効率的に行うことができ、高度なソフトウェア工学ツールの構築が可能になります。
ASISは、ISO/IEC 8652:1995(Adaリファレンスマニュアル)で定義されたAda環境と、その環境から情報を必要とする外部ツールの間のインターフェースとして機能します。具体的には、抽象構文木 (AST: Abstract Syntax Tree) やリファレンスマニュアルに記載されている詳細な情報へのアクセス手段を提供し、ツールの移植性を高める役割を担っています。

Key Facts
- 目的: Adaライブラリ環境へのベンダー独立したアクセスと静的解析の実現。
- 構成: 21のパッケージ(うち2つはオプション)で構成され、349のクエリを定義。
- 主要抽象概念: Context(コンテキスト)、Compilation_Unit(コンパイル単位)、Element(要素)の3つが基本。
- 標準規格: ISO/IEC 15291 として標準化されている。
- 主な用途: コード分析、リファクタリング、コーディング標準のチェック、ドキュメント自動生成など。
ASISの主要な抽象概念
ASISの内部構造は、主に3つの重要な抽象化タイプによって管理されています。これらはAdaのプライベートタイプとして実装されており、環境への論理的なハンドルとして機能します。
Context (コンテキスト)
Ada環境全体を制御するための論理的なハンドルです。ASISにおける問い合わせ(クエリ)で使用される定義や条件を管理し、解析の基盤となります。
Compilation_Unit (コンパイル単位)
コンパイル単位を「ブラックボックス」として捉え、その全体的な特性を管理します。例えば、ソーステキストが含まれるオブジェクト名や、最終更新日時などの属性を保持しています。この単位をさらに分解することで、詳細な内部解析(ホワイトボックス解析)へと移行します。
Element (要素)
コンパイル単位内部の個別の構成要素を指すハンドルです。明示的または暗示的に定義され、コード内の具体的な構文要素にアクセスするために使用されます。
解析プロセスの構造
ASISを用いた解析アプリケーションは、一般的に以下の3つのフェーズで構成されます。
- 解析のセットアップ: ASISの初期化を行い、コンテキストや状態オブジェクトを確立します。解析に必要な前処理をこの段階で実行し、環境を準備します。
- コンパイル単位の処理: オープンされたコンテキスト内で、各要素をサンプリングし解析します。このプロセスを通じて、プログラムの構造的な情報を抽出します。
- 解析の完了: 後処理を行い、結果を確定させます。最後にASISコンテキストを閉じ、リソースを解放してプロセスを終了します。
設計基準と機能
ASISは、多様なツールが効率的に動作するように、以下の設計基準に基づいて構築されています。
| 基準 | 詳細内容 |
|---|---|
| 広範な受容性 | 多様なプラットフォームやベンダー実装で利用可能にし、学習コストを削減する。 |
| 移植性 | 異なるコンピュータ環境間での容易な移行を可能にする。 |
| 一貫性と凝集性 | 概念、型、操作において一貫したシンプルな操作体系を維持する。 |
| 実装可能性 | コンパイラベンダーが妥当な労力で実装できる設計とする。 |
| 拡張性 | 将来的な設計モデルや抽象化の拡張を妨げない。 |
| Ada準拠 | Adaリファレンスマニュアル (LRM) の用語やスタイルに準拠する。 |
| パフォーマンス | クライアント側と実装側の双方で効率的な動作を実現する。 |
実用例と活用ツール
ASISは、多くの商用・オープンソースツールで活用されています。特にAdacore社は、GNATコンパイラ向けにASIS標準を実装しており、以下のようなツール群の開発に利用しています。
- GNATツール: gnatcheck(標準チェック)、gnatpp(フォーマッタ)、gnatmetric(メトリクス測定)など。
- AdaControl: コーディング標準の検出や統計作成を行う代表的なASISアプリケーション。
- 静的解析ツール: 依存関係ツリーの分析、コールツリーの作成、正当性検証、リバースエンジニアリングなど。
また、特定のプロジェクト(例:SIDPERS-3)では、商用オフザシェルフ (COTS) ソフトウェアが生成する複雑なAdaコードを隠蔽し、開発者を詳細な実装から切り離す「絶縁層」としてASISが利用された事例もあります。
Frequently Asked Questions
ASISを導入することでどのようなメリットがありますか?
最大のメリットは、コンパイラベンダーに依存せずにAdaプログラムの構造的・意味的な情報を抽出できることです。これにより、一度開発した解析ツールを異なるAda環境へ容易に移植でき、開発コストを削減できます。
ASISで具体的にどのような解析が可能ですか?
コードの依存関係分析、コーディング規約への準拠チェック、メトリクス測定、ドキュメントの自動生成、さらにはリファクタリングツールの構築など、静的解析全般が可能です。
ASISの構成要素である「パッケージ」とは何を指しますか?
ASISは21のパッケージで構成されており、それぞれがコンパイル単位、宣言、式、文、テキストなどの特定の情報を扱うためのクエリ(問い合わせ機能)を提供しています。
ASISは最新のAdaバージョンに対応していますか?
ASISはもともとAda 95 (ISO/IEC 8652:1995) をベースに設計されましたが、その設計思想は後続のツールや標準(ISO/IEC 15291など)に引き継がれ、GNATなどのモダンな環境で活用され続けています。
References
- Sward, Ricky E.; Chamillard, A. T. (2004). "Re-engineering global variables in Ada". Proceedings of the 2004 annual ACM SIGAda international conference on Ada: The engineering of correct and reliable software for real-time & distributed systems using Ada and related technologies. Vol. XXIV. Atlanta, Georgia, USA: ACM Press. pp. 29–34. :10.1145/1032297.1032303. . 31415676.
- Strohmeier, Alfred; Fofanov, Vasiliy; Rybin, Sergey; Barbey, Stéphane (1998). "Quality-for-ASIS: A portable testing facility for ASIS". In Asplund, Lars (ed.). Reliable Software Technologies — Ada-Europe. Lecture Notes in Computer Science. Vol. 1411. Berlin, Heidelberg: Springer. pp. 163–175. :10.1007/BFb0055003. .
- Colket, William Currie (September 1999). "Code analysis of saftey-critical [sic] and real-time software using ASIS". ACM SIGAda Ada Letters. XIX (3): 67–76. :10.1145/319295.319306. 1094-3641.
- et.al
- "4. ASIS Overview — ASIS-for-GNAT User's Guide 22.0w documentation". docs.adacore.com. Retrieved 2020-11-20.
- Bladen, James B.; Spenhoff, David; Blake, Steven J. (1991). "Ada semantic interface specification (ASIS)". Proceedings of the conference on TRI-Ada '91 today's accomplishments; tomorrow's expectations - TRI-Ada '91. New York, New York, USA: ACM Press. pp. 6–15. :10.1145/126551.126552. . 19422485.
- Drury, Pace (March 1999). "Using ASIS for data base insulation". ACM SIGAda Ada Letters. XIX (1): 64–65. :10.1145/311457.311486. 1094-3641. 37063586.