XML表現を用いたプログラムの診断 卒業発表 2008/2/7 海尻海谷研究室 M2 劉 英 研究背景 プログラムの良形性は非常に重要だ。 読解性、理解容易性が増す 保守性を高めることになる プログラムの正しさには種々のレベルが ある 語彙レベル 構文レベル 静的意味レベル 動的意味レベル 語用論レベル 研究手法 Javaプログラムを対象とする事とし、 JavaMLというJavaプログラムのXML表 現に着目し、XML表現を対象として良形 性の診断を行うこととした。 JavaMLへの変換はJikesというフリーの Javaコンパイラを改造したツールを利用 した。 診断: プログラムの良形性 プログラムのコピー プログラムの診断として構成 クラス名を小文字で始めていないか publicなインスタンスもしくはクラス変数いないか set、getメソッドがあるか 変数名は有意な単語(辞書にあるような単語) 長すぎる行は避ける プログラムの順序が理解安いかどうか 型と頭文字 プログラム剽窃方法 プログラム剽窃:コピーするまたは少数のソースコー ド修正 語彙の変化:語彙の変化によって、原則として、テキス トエディタによって実行されることができた変化を意味 する。 コメントは言い換えられること、加えられること、 省略されること フォーマット化することは変わること 識別子名は修正されること 構造変化: ループは代わられること(例えば、Pascalでwhile ループとuntilループは代わりになられる) Nested if声明とcase声明は取り替えられる プログラムの意味に影響を及ぼさないならば、声明 命令は変わること 手順への呼び出しは手順の量のコピーと取り 替えられるかも オペランドの命令は、変わるかも(例えば、 x <yは、y >= xになる) プログラム検証方法 方法: • 情報を得って、ソフトウェア測定基準に基づく類 似性を評価しているアルゴリズムを使用している 2つの文書の情報を比較する。 • 短所:支配フローのような構造特徴を反映するこ とができない時から、それはソースコード剽窃を 見つけることにふさわしくない 構造特徴を比較する • プログラムの論理的構造難しくて、もう一つの物 を造る必要がある • 多くの方法がある(例えば:文字列 、解析木、 token sequence) 類似性検出手法 アルゴリズムにより i) 文字列マッチングによる類似性検出 ii) 構造の比較による類似性検出 iii) 意味的構造を用いた類似性検出 XML DOM DOM:プログラムやスクリプトがXMLや HTMLのデータにアクセスし、それらを作す るためのプログラムインターフェイス(API)と、 そのインターフェイスが使用するオブジェクト モデルを定義する XMLデータとDOMツリーの関係 <?xml version=“1.0” encoding=“shiftJIS” ?> <Dog> <Name>ポチ</Name> <Age>2</Age> <Dog> Documentオブジェクト Elementオブジェクト (タグ名:Dog) Element オブジェクト (タグ名:Name) Element オブジェクト (タグ名:Age) Text オブジェクト (データ:ポチ) Text オブジェクト (データ:2) ノードタイプの定数と数字 nodetype 定数 要素 (Element) ELEMENT_NODE 属性 (Attr) ATTRIBUTE_NODE テキスト (Text) TEXT_NODE コメント COMMENT_NODE (Comment) 文書 DOCUMENT_NODE (Document) 文書型 DOCUMENT_TYPE_NODE (DocumentType) 記法宣言 NOTATION_NODE (Notation) ノード種類 nodeName タグ名 属性名 #text #comment nodeValue null 属性値 テキストの内容 コメントの内容 #document null 文書型の名前 null 記法の名前 null DOMの名前空間関係のメソッド インターフェイス Document メソッド Element createElementNS Attr createAttributeNS Nodelist getElementByTagNameNS NameNodeMap Node getNamedltemNS Node setNamedltemNS Node removeNamedltemNS Element DOMString getAttributeNS 説明 名前空間付きのElementの作成 名前空間付きのAttrの作成 指定した名前空間URIとローカル 名を持つノードリストの返却 指定した名前空間URIとローカル 名を持つノードリストの取得 名前空間付きのノードの追加 指定した名前空間URIとローカル 名を持つノードリストの除去 指定した名前空間URIとローカル 名を持つ属性の型の取得 インターフェイス Element メソッド void setAttributeNS void removeAttributeNS Attr getAttributeNodeNS Attr setAttributeNodeNS NodeList getElementByTagNameNS boolean hasAttributeNS 説明 名前空間で修飾された新しい 属性の追加 指定した名前空間URIとローカ ル名の属性の除去 指定した名前空間URIとローカ ル名を持つAttrの取得 名前空間で修飾された新しい Attrの追加 Elementの子孫から、指定し た名前空間URIとローカル名 のElementのノードリストを返す 指定した名前空間URIとローカ ル名の属性が指定されているか またはデフォルト値を持つかを 調べる JavaML JavaMLはXMLの一種でJavaソースコード 用のマークアップ言語 ソースコードの分析 XMLの分析 Public class Test <class name=“Test” visibility=“public”/> JavaMLのコンパイラ jikes <javaソースファイル> jikes +ulx <javaソースファイル> プログラムの結果 ルート要素のタグ名:java-source-program ***** ページリスト ***** クラス名 class2 ......先頭は小文字です。 public メソッド名 main ...... クラス名:class2 public クラスメソッド 型:void 引数名 args[] ...... クラス名:class2 メソッド名:main 型:String ローカル変数名:rel[] ...... クラス名:class2 メソッド名:main 型:Rental ローカル変数名:i ...... クラス名:class2 メソッド名:main 型:int クラス名 Rental ...... public 変数名 price ...... クラス名:Rental public クラス変数 型:int 変数名 title ...... クラス名:Rental インスタンス変数 型:String メソッド名 set_price ...... クラス名:Rental public クラスメソッド 型:void ->setメソッドである。 引数名 p ...... クラス名:Rental メソッド名:set_price 型:int メソッド名 get_price ...... クラス名:Rental public インスタンスメソッド 型:int ->getメソッドである。 メソッド名 get_title ...... クラス名:Rental public インスタンスメソッド 型:String->getメソッドである。 お疲れ様でした
© Copyright 2024 ExpyDoc