String name x get Name y set Name

  • Slides: 18
Download presentation

同時に使用すべき操作の見落とし 開発者 既存のプログラムのとあるメソッド String name = x. get. Name ( ) ; y. set.

同時に使用すべき操作の見落とし 開発者 既存のプログラムのとあるメソッド String name = x. get. Name ( ) ; y. set. Name (name) ; class X { if (c. bar) c. baz (d) ; String set. Name (String name) {. . . } ; String type = z. get. Type ( ) ; String set. Type (String type ) {. . . } ; y. set. Type (type) ; String set. ID (String id) {. . . } ; } a. foo (b) ; 利用例を 調べたい メソッド 同時に利用する べきメソッド 見落としてしまった 一つのメソッドではなく複数のメソッドに渡って利用される 場合はさらに理解が困難 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 6

メソッドの接続関係 ▬ obj : オブジェクト頂点 ▬ param : 引数頂点 ▬ ret : 戻り値頂点 2

メソッドの接続関係 ▬ obj : オブジェクト頂点 ▬ param : 引数頂点 ▬ ret : 戻り値頂点 2 int size = x. get. Size ( ) ; 3 y. set. Size (size) ; ne w X ( )_call メソッド・コンストラクタ呼び出し 1 X x = new X ( ) ; X ret obj get. Size ( )_call ret siz e ob j y set. Size (int)_call para m ob j 戻り値頂点からオブジェクト頂点・引数頂点への データフローを調べてメソッドの接続関係を抽出 ret voi d Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 9

実験結果 (1/2) 実行時間 ▬ ソフトウェアの規模により数秒 ~ 35 分程度 実行結果の一部 ソフトウェア名 規模[LOC] 9, 237 実行時間[sec]

実験結果 (1/2) 実行時間 ▬ ソフトウェアの規模により数秒 ~ 35 分程度 実行結果の一部 ソフトウェア名 規模[LOC] 9, 237 実行時間[sec] 8 Trove バージョン 2. 0. 4 ANTLR 3. 0. 1 70, 845 50 JFree. Chart 1. 0. 9 282, 363 181 Azureus JDK 3. 0. 3. 4 5. 0 552, 295 885, 887 468 2, 055 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 13

抽出された利用例:Bio. Java ret_<Simple. Comparable. Triple: Simple. Comparable. Triple(. . . )> obj_<Triple: Term get.

抽出された利用例:Bio. Java ret_<Simple. Comparable. Triple: Simple. Comparable. Triple(. . . )> obj_<Triple: Term get. Object()> 12 obj_<Triple: Term get. Predicate()> 12 obj_<Triple: Term get. Subject()> 12 private void remove. Triple(Triple t) { -> 出現回数は各 12 triples. remove(t); pull. Triple(subject. Triples, t. get. Subject(), t); pull. Triple(object. Triples, t. get. Object(), t); pull. Triple(relation. Triples, t. get. Predicate(), t); 実際に 13個の メソッドで 3個 同時に利用 } Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 16

抽出された利用例:Apache Ant ret_<Java: Java(Task)> -> obj_<Java: void set. Classname(String)> 14 obj_<Java: void set. Classpath(Path)>

抽出された利用例:Apache Ant ret_<Java: Java(Task)> -> obj_<Java: void set. Classname(String)> 14 obj_<Java: void set. Classpath(Path)> 14 obj_<Java: void set. Fork(boolean)> 14 java. Task. set. Classname(ejbc. Class. Name); . . . 出現回数は各 14 java. Task. set. Fork(true); if (classpath != null) { } java. Task. set. Classpath(classpath); 異なる利用順序・条件 で 14個のメソッドで 3個 同時に利用 java. set. Classpath(p); java. set. Classname("org. apache. jasper. Jsp. C"); java. set. Fork(true); Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 17