プログラム解析情報のXMLデータベース化 ー 提案と実現 ー 山中祐介,大畑文明,井上克郎 大阪大学 大学院基礎工学研究科 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 発表内容 背景、目的 データベース化手法の提案 提案手法の実現 評価 関連研究 まとめと今後の課題 1 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 背景(1/2) ソフトウェアの大規模化、複雑化 プログラミング言語の高級化 プログラムのデバッグ、理解が困難なものになっている 様々なプログラミング言語に対応する、プログラム解析 手法の提案、およびツールの実装が多くされている 2 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 背景(2/2) プログラム解析ツールの問題点 解析情報がメモリ上にのみ記憶される 実行の度に対象プログラムを解析しなければならず 効率が悪い データベースを構築し、効率化を計るツールも存在する 解析情報の記憶形態が独自形式 APIが特定のプログラミング言語を前提 プログラム解析情報の二次利用が容易でない 3 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 目的 XMLを用いたプログラム解析情報のデータベース化 データベース化による利点 解析結果の再利用による解析効率の向上 情報の保存による解析情報の二次利用 XMLを用いる利点 データ構造の定義が容易に行える XML文書を扱うための様々なアプリケーションにより二次 利用が容易に行える 4 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University データベース化手法の提案(目次) プログラム解析情報 意味解析木 XML 意味解析木のデータベース化 方針 XML要素定義 XML属性定義 例 5 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University プログラム解析情報 例 抽象構文木(Abstract Syntax Tree) 意味解析木(Semantic Tree) 手続き呼び出しグラフ(Call Flow Graph) 制御フローグラフ(Control Flow Graph) ‥ 意味解析木に注目 多くのプログラム解析手法においてその存在が前提となり、 データベース化による効果が大きい 6 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 意味解析木 抽象構文木と意味情報とを組み合わせたもの 抽象構文木 プログラム言語固有の文法に従い記述されたソースコー ドを、木構造で表現し構文情報を持たせたもの 構文情報(Syntax Information) 構文木が持つ予約語、識別子、演算子などの情報 意味情報(Semantic Information) 変数名、型名などの識別子に関する宣言と参照間の 関係を表す情報 7 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University XML SGMLのサブセットで文書構造化言語の一つ 特徴 データ構造とそれが持つ情報を、容易かつ的確に表現 できる 要素(Element)などによる構造化 要素名、属性(Attribute)などの定義の自由さ 要素間の親子関係、属性の情報を厳密に定義できる 文書型定義、XMLスキーマ XML文書を扱うためのAPI、アプリケーションが数多くある API:SAX, DOM アプリケーション:XSLT, XLink 8 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 意味解析木のXMLデータベース化 方針 Javaプログラムの意味解析木に対するXML表記を、定 義することでデータベース化を行う 意味解析木とXML文書は共に木構造 要素に意味解析木の節点を対応させ木構造を表現 意味解析木の各節点に構文情報、意味情報がある 対応する要素の属性が情報を保持 9 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University XML要素定義 Javaプログラムと要素の対応表(一部) Java構文要素 XML要素名 要素が持つ子のBNF記述 メソッド宣言 Method type Variable* Exception? Block? 変数宣言 Variable type Expression_? ブロック Block (Variable | ClassType | InterfaceType | Statement_)* 演算 Operation type Expression_ Expression_? 型参照 type 子要素なし 変数参照 variable 子要素なし リテラル Literal 子要素なし 10 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University XML属性定義 要素が持つ属性とその役割(一部) 属性名 役割 text 識別子、演算子などの構文情報 modifiers 修飾子情報(public, staticなど) id 意味情報の宣言側が持つ情報 ref 意味情報の参照側が持つ情報 file 参照先が同一ファイル内でない場合、別ファイルにアクセスする ための情報 11 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 意味解析木のXML表記の例 <Method modifiers=“public modifiers="public static“ text="main" id="189b"> <type<?xml text="void" ref="4"/> version="1.0" encoding="UTF-8"?> <!DOCTYPE Java SYSTEM "java.dtd"> <Block> <Java> class Sample { ‥ <CompilationUnit> <Package text=""/> <Import text="java.lang.*"/> public static void main(String[] args) { <Variable text="b" id="18ad"> <ClassType modifiers="" modifiers="" text="Sam5" id="0x12"> <Extends> <type text="java.lang.Object" text_="Object" ref="0x18" file="java/lang/Object.xml"/> <type text="int" ref="7"/> int a = 1; </Extends> <Variable modifiers="" text="this" id="0x13"> </Variable> <type text="Sam5" ref="0x12"/> int b; </Variable> <Variable modifiers="protected" text="super" id="0x14"> <Operation text="="> <type text="java.lang.Object" text_="Object" ref="0x18" file="java/lang/Object.xml"/> b = a + 1; </Variable> <type text="int" ref="7"/> <Method modifiers="public static" text="main" id="0x189b"> <type text="void" ref="0x4"/> System.out.println(a + “,” <variable + b);<Variable modifiers="" text="args"ref="18ad"/> id="0x18a4"> text="b" <type text="java.lang.String[]" text_="String[]" ref="0x20"/> </Variable> } <Operation text="+"> <Block> <Variable modifiers="" text="a" id="0x18a9"> text="int" ref="0x7"/> ref="7"/> <type<type text="int" } <Literal text="1"/> </Variable> <variable text="a" ref="18a9"/> <Variable modifiers="" text="b" id="0x18ad"> <type text="int" ref="0x7"/> </Variable> <Literal text="1"/> <Operation text="="> <type text="int" ref="0x7"/> </Operation> <variable text="b" ref="0x18ad"/> </Operation> </Block> </Operation> </Method> </ClassType> ‥ </CompilationUnit> </Java> </Block> 12 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University </Method> Javaプログラム解析フレームワーク ソースコード 意味解析木 アプリケーション ユーザ Java 解析ライブラリ API 解析ライブラリ ソースコードを解析し意味解析木をメモリ上に構築 API 意味解析木の参照、更新手段を提供 アプリケーション GUI、エイリアス解析ツール* *大畑文明, 近藤和弘, 井上克郎: “エイリアスフローグラフを用いたオブジェクト指向プログラムの エイリアス解析手法“, 電子情報通信学会論文誌D-1, Vol.J84-D-1, No.5, pp.1--11 13 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University XMLデータベースの実装 Javaプログラム解析フレームワークに、意味解析木XML変換ライブラリを用いて、XMLデータベースを実 装 XML文書 XML 意味解析木-XML 変換ライブラリ ソースコード 意味解析木 <?xml…> アプリケーション ユーザ Java 解析ライブラリ API 14 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 意味解析木-XML変換ライブラリ 解析によって得られる意味解析木とデータベースで あるXML文書を相互変換 開発言語:C++(libxml使用)、約4000行 変換手順 意味解析木→XML 意味解析木をたどり各構文木要素に対するタグを出力 XML→意味解析木 XMLパーザによりXML文書を解析しDOMツリーを構築 構築したDOMツリーに対する構文木要素を作成 15 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 評価(目次) 解析効率の改善 実際にソースコードを解析しデータベース化を行い比較 解析情報の二次利用の容易性 応用アプリケーションの実装による二次利用例 1. XML-Java変換 2. XML-HTML変換 3. XML-XML変換 16 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 解析効率の改善 JDK1.3付属ライブラリの全ソースコードを対象 XMLデータベース構築時間:45.6秒 解析時間(意味解析木の構築まで) ソースプログラム:37秒 XMLデータベース:24秒 データベース構築時間を考慮しても データベース化による恩恵は大きい 全ファイルサイズ ソースプログラム:25MB XMLデータベース:62MB データベース化によるサイズの 肥大化は少ない 17 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 解析情報の二次利用の容易性 応用アプリケーションの実装 XMLデータベース XML <?xml…> 例1:XML-Java Java 変換プログラム 例2:XMLHTML変換プログラム 例3.XML-XML 変換プログラム ユーザ ソースコード テキストエディタ WEBブラウザ HTML文書 HTML <html> 18 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 応用例1:XML-Java変換 Javaプログラムのソースコードへの復元 意味解析木が持つ構文情報を利用 コンパイル、閲覧が十分可能なソースコードへの復元 実装 C++(libxml使用)、約1500行 XSLT(Xalan使用)、約2000行 19 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 応用例1:XML-Java変換(例) XMLデータベース <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Java SYSTEM "java.dtd"> 復元したJavaソースコード import java.lang.*; <Java> <CompilationUnit> <Package text=""/> <Import text="java.lang.*"/> <ClassType modifiers="" text="Sam5" id="0x12"> <Extends> <type text="java.lang.Object" text_="Object" ref="0x18" file="java/lang/Object.xml"/> </Extends> <Variable modifiers="" text="this" id="0x13"> <type text="Sam5" ref="0x12"/> </Variable> <Variable modifiers="protected" text="super" id="0x14"> <type text="java.lang.Object" text_="Object" ref="0x18" file="java/lang/Object.xml"/> </Variable> <Method modifiers="public static" text="main" id="0x189b"> <type text="void" ref="0x4"/> <Variable modifiers="" text="args" id="0x18a4"> <type text="java.lang.String[]" text_="String[]" ref="0x20"/> </Variable> <Block> <Variable modifiers="" text="a" id="0x18a9"> <type text="int" ref="0x7"/> <Literal text="1"/> </Variable> <Variable modifiers="" text="b" id="0x18ad"> <type text="int" ref="0x7"/> </Variable> <Operation text="="> <type text="int" ref="0x7"/> <variable text="b" ref="0x18ad"/> </Operation> </Block> </Method> </ClassType> </CompilationUnit> </Java> class Sam5 extends Object { 元のJavaソースコード class Sam5 { public static void main(String[] args) { public static void main(String[] int a =args) 1; { int b; int a = 1; b = a + 1; int b; System.out.println(a + "," + b); b = a + 1; System.out.println(a +} “,” + b); } } } 20 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 応用例2:XML-HTML変換 XML-Java変換プログラムの拡張 Webブラウザで閲覧できるようにソースコードに変換する 際、HTMLタグを埋め込む 意味情報を利用することで、識別子の宣言、及び参照 の関係をリンクを用いて表現 実装 XSLT(Xalan使用)、約2000行 21 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 応用例2:XML-HTML変換(例) Sam5.html class Sam5 { public static void main(String[] args) { int a = 1; int b; b = a + 1; System.out.println(a + “,” + b); } } java/lang/System.html 22 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 応用例3:XML-XML変換 XMLデータベースが持つ識別子情報の置換 置換条件に識別子名の他に識別子のidを加えることで、 異なるスコープ上に存在する同一名の識別子を区別 識別子の区別が厳密なため、変換を行ってもプログラム の整合性を保てる 実装 XSLT(Xalan使用)、約600行 23 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 応用例3:XML-XML変換(例) 変換前のXML文書 java.lang.String <Variable modifiers="private" text="value" id="34"> <type text="char[]" ref="9"/>java.io.Serializable, Comparable { class String implements </Variable> 変数valueをafter_valueに変換 private char value[]; ‥ ‥ <Constructor modifiers="public" text="String" id="34e"> public String(String { id="4d17"> <Variable modifiers="" value) text="value" } <type text="java.lang.String" text_="String" ref="22"/> </Variable> 変換後のXML文書 <Variable modifiers="private" text="after_value" id="34"> <type text="char[]" ref=“9"/> </Variable> idが違うため変換されない ‥ <Constructor modifiers="public" text="String" id="34e"> <Variable modifiers="" text="value" id="4d17"> <type text="java.lang.String" text_="String" ref="22"/> 24 </Variable> Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 関連研究(1/2) JavaML* Javaソースコードの代替的な表記を可能にするXMLアプリケー ション 目的:プログラム変換、プログラム理解 実装 ソースコードに対してXMLタグを埋め込むライブラリをJavaコンパイラに追 加 本研究との相違点 意味情報は十分に含まれず、データベースとしては成り立たない 複数ファイル間におよぶ宣言、参照関係はサポートされていない *G.J.Badoros: “JavaML:a markup language for JAVA source code” Computer Networks 33, pp.159-177, 2000. 25 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 関連研究(2/2) Sapid* C言語のソースプログラムを管理するためのCASEツールプラット フォーム 目的:通常のリポジトリが扱えない細かい粒度の構成要 素の管理 構成 ソフトウェアデータベース アクセスルーチン ソフトウェア操作言語 本研究との相違点 データベースへの参照、編集はSapid独自のAPI *福安 直樹, 山本 晋一郎, 阿草 清滋: “細粒度ソフトウェア・リポジトリに基づいたCASEツール・ プラットフォームSapid“情報処理学会論文誌, Vol.39, No.6, pp.1990--1998 (1998/6) 26 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University まとめ プログラム解析情報のXMLデータベース化 意味解析木をXMLを用いて表現 XMLの要素、属性を定義 XMLデータベースの実装 変換ライブラリを用いたJavaプログラム解析フレームワークへの 組み込み 評価 意味解析木の構築時間を比較し、解析効率の改善を確認 応用アプリケーションを実装し、二次利用の容易性を確認 27 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 今後の課題 意味解析木以外の解析情報のデータベース化 手続き呼び出しグラフ 制御フローグラフ ‥ XML表記の粒度のカスタマイズ 情報量が多いデータベースを構築すると管理コストが増 大 ユーザ目的に応じて最適化されたデータベースを再構築 する機能 28 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
© Copyright 2024 ExpyDoc