• 検索結果がありません。

7.1 Sapid

Sapid1[45]は名古屋大学の阿草清滋、山本晋一郎らによって提案、開発された細粒度リ ポジトリに基づいたANSI CのためのCASEツール・プラットホームである。与えられた ANSI Cソースプログラムに対して、Sapidは、構文構造と静的意味の情報をI-modelと 呼ばれるフォーマットとしてファイルに格納する。Sapidは、独自で開発したソフトウェ アデータベースとアクセスルーチン、作成したツール群から構成され、制御統合を実現し ている。元々Sapidは、XMLを用いてないが、現在、XMLを基づいた機能を組み入れよ うとしている[46]。ここでは、Sapidの概要について述べる。

Sapidの概要

Sapidのもっとも大きな特徴として細粒度リポジトリであることが上げられる。リポジ トリはソフトウェアのライフサイクルで行われる様々な問い合わせや操作に対応できる必 要がある。そのためには可能な限り細かな情報まで保持しているモデルに基づいたリポジ トリであることが望ましい。不要な情報を切り捨てることは容易であるが逆は不可能な ので、粒度の荒いモデルでは将来発生する可能性のある様々な要求に対応できないからで ある。また、粒度の粗いものを細かい粒度にするのは不可能であるが、細かい粒度を粗い 粒度にするのは容易である。しかし、細かな粒度を設定すると管理するオブジェクトが増 加し、検索性の低下など弊害も生じる。このトレードオフを鑑みてSapidではモデルとし てI-modelを提案し採用している。このモデルは構文規則に基づいて作られており、解析 結果を用いてC言語の文を直接解釈実行できる仮想機械を作れるほど細かい粒度を持つ。

一方で、ソフトウェアのライフサイクルにおいて重要ではないものを切り捨てて、十分細 かい粒度を持ちながら簡潔で扱いやすいモデルになっている。さらに、適当なビューを設 けることにより、粒度を調節できるように考えられている。

Sapidは大きく分けてSDB、API群、ツール群の3つの部分から成る。

SDB

Sapidの基盤となるソフトウェアデータベースをSapidではSDBと呼んでいる。SDB はC言語のソースプログラムを解析した結果を格納するソフトウェアデータベース

1Sophisticated Application Programming Interface for software Development

である。ソフトウェアの構成要素にはソースプログラム以外にも仕様書やマニュア ルが含まれるが、Sapidでは今のところそれらには対応していない。SapidではC言 語のソースプログラムを幾つかののモデルに基づいて解析し、その結果をSDBに格 納している。モデルは基本的に実体関連モデルで、C言語の構文を実体と関連とし て捉えている。モデルにはSapidの基盤をなしているI-modelや、前処理に関する P-model、メモリ領域と値に関するArea-modelなどがある。

API

Sapidでは構築されたソフトウエアデータベースにアクセスし、それをCASEツー ルの開発に利用するための手段としてAPIを用意している。その中で定義されてい る関数は、データベースのスキーマを取得するメタデータ取得関数、オブジェクト や関連の属性値取得関数、オブジェクト取得関数、関連取得関数などである。

– AR

最も基本的なAPIがAR(Access Routines)である。このAPIにはI-modelと P-modelのSDBに関するAPIである。ARは、SDBにアクセスするためのAPI を提供している。その中で定義されている関数はデータベースのスキーマを取 得するメタデータ取得関数、オブジェクトや関連の属性値取得関数、オブジェ クト取得関数、関連取得関数などである。

– SMU

SMUはARで良く使われるイデオムをまとめたものである。検索条件を満た すオブジェクトを集める配列取得関数や、構文木を与えられた順序で辿ってい くトラバース関数、オブジェクトが関数の引数になっているか調べる関数など がある。

– SpdUtil

SpdUtilもSapidで利用される汎用の関数をまとめたものである。標準ライブ ラリ関数と組み合わせてARを使うときの便宜を図った関数が多く含まれる。

メッセージ出力関数、メモリ操作関数、文字列操作関数、ファイル操作関数な どがある。

– SDA

SDA(Sapid Dependency Analyzer)は、プログラムの依存関係を解析するため の、ビューとそれに関する関数から成る。ビューはプログラムの制御依存関係 と、データ依存関係を静的に解析し有効グラフでモデル化する。関数には初期 化関数とデータ取得関数があり、ある変数がどこで定義された可能性があるか、

変数がどこで参照される可能性があるかなどの情報を得ることができる。

ツール群

SapidにはSapidを用いてCASEツールを開発するのに必要なツールも用意されてい る。SDBをブラウズするsat4や、ソースプログラムの理解支援ツールSPIE、SDB

に基づいた簡易C言語インタプリタsint、関数仕様管理ツールmkSpec5、などで ある。

7.2 JavaML

JavaML[2]は、Java言語のためのマークアップ言語の1つで、Greg J. Badrosによって 開発された。JavaMLは、Java特有の構文から独立してJavaプログラムをモデル化しよ うと試みている。この抽象化により種々のオブジェクト指向言語を一定のフォーマットと して記述できる可能性を持つ。ソフトウェアプロダクトによっては、JavaMLのような粗 い粒度のモデルが適当な場合もあるが、下流工程を支援するには力不足である。ここで は、JavaMLの概要について述べる。

JavaMLの概要

従来のプレーンテキストでソースプログラムを表現する方法は、プログラマにとって 便利ではあるが、プログラムの構造を解明するためには構文解析が必要である。例えば、

grepを始めとする多くの簡単な支援ツールは、ソースプログラムの字句構造しか扱わな い。この問題の根本的な原因の1つは、ソースプログラムの標準的な構造化表記が存在し ないことにある。CASEツールにとって、分析や操作がしやすいプログラム構造を直接的 に表す汎用形式が必要なのである。XMLは現在のソースプログラム表記方法の中で、こ の汎用形式として最も期待できる。

JavaMLのDTDは、妥当なJavaML文書の種々の要素と、要素を組み合わせる方法を 指定する。エレメント、及びその属性と、それらが表すプログラム言語の構成体とは、自 然な形で対応している。ソースプログラムの構造は、JavaML文書の中でエレメントの入 れ子として反映される。この表記方法を使えば、XML文書やSGML文書の操作や照会を 行う多種多様なツールを活用して、Javaソースプログラム分析のためのオープンな基盤 を構築することができる。そのため、JavaMLは、CASEツール用の標準的なJavaソー スプログラム表記として最適である。

JavaMLは従来の表記方法とほとんど変わらない強固さを持ちながら、数多くの弱点を 克服している。従来のような文字ベースでのプログラム表記と違い、JavaMLは、XMLの 構文を使って入れ子になったエレメントとしてプログラム構造を直接的に表現する。さら に、XMLのID/IDREF属性のリンク機能を使用して、プログラムグラフで追加のエッジ を表す。XMLはテキストベースの表記なので、従来型ソース表記の利点の多くの部分が XMLにも当てはまる。XMLの適用分野の1つであるJavaMLは構文解析しやすく、XML を扱う既存のツールはすべてJavaML表記のJavaソースプログラムに適用することがで きる。JavaMLツールは既存の基盤を利用し、標準的な表記を活用して相互運用性を高め ている。

JavaMLプロトタイプは、Java言語を含む、幾つかのオブジェクト指向プログラミング

言語の言語構成要素を、言語特有の構文とは無関係な形でモデル化しようとするものであ る。Java以外の対象言語としては、まずJavaによく似たSmalltalkがある。さらに、従 来のJavaソースプログラムやSmalltalk file-out形式に変換できるフォーマットも含める ことができる。こうした目標を念頭に置いて、JavaMLは各構成要素の原理に基づいて設 計された後、くり返し精錬されて、実用性の点で、また生成されるマークアップ言語の読 みやすさの点で改善された。JavaMLでは、メソッド、スーパークラス、メッセージ送信、

リテラル数などの概念が文書内容の要素と属性によって直接的に表される。

JavaML表記の長さは、従来のソースプログラムの約3倍になる。基本的に、XMLに 変換する場合、このように長くなることは避けられない。開発やプログラム編集などの通 常の作業では、プログラマは従来のコンパクトな表記を採用するだろうが、JavaMLは従 来のソースプログラムを補う役割を果たす。開発者がJavaMLを表示して直接読むことも 可能だが、JavaMLは特にツールでの使用に適している。