Department of Computer Science Graduate School of Information
- Slides: 24
エイリアス解析を用いた メソッドの入力データの 利用法可視化ツール 大阪大学 鹿島 悠,石尾隆,井上克郎 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 1
例: 引数のフィールドへのアクセスの把握 引数のformを検証するメソッド protected boolean validate. Form(final Http. Servlet. Request request, final User. Form form) throws Service. Exception { 引数で渡されたformの フィールドのうち アクセスされたのは3つだけ if (form. get. Id() == 0) { User user = Service. Facotry. get. Service(IUser. Service. class). find. By. User. ID(form. get. User. Id(), User. Kubun. value. Of(form. get. User. Kubun())); アクセスされるフィールドを 正確に把握するには, if (user != null) { メソッドの詳細な探索が必要 add. Error(request, "errors. ucm 02. exist. user"); return false; } id user. Id } アクセス された user. Kubun name password … } return true; form アクセス されて いない ※IT-Spiral[2]教材の和歌山大学教務システム ソースコードより抜粋 [2]: http: //it-spiral. ist. osaka-u. ac. jp/ Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 4
例:クラス変数への明示的でないアクセス このメソッド内で直接は,データベースの セッション管理変数にアクセスしていない protected boolean validate. Form(final Http. Servlet. Request request, final User. Form form) throws Service. Exception { if (form. get. Id() == 0) { User user = Service. Facotry. get. Service(IUser. Service. class). find. By. User. ID(form. get. User. Id(), User. Kubun. value. Of(form. get. User. Kubun())); メソッドの呼び出し先でアクセス find. By. User. Id() call アクセスされるクラス変数をUserservice. Imple. get. DAO() call 正確に把握したい場合も, Hibernate. DAOFactory. get. DAOFactory() if (user !=メソッドの詳細な探索が必要 null) { add. Error(request, "errors. ucm 02. exist. user"); return false; } } return true; } call Hibernate. Util. current. Session() read クラス変数: Hibernate. Util. SESSION データベースのセッション管理変数 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 5
既存研究(1/2) n プログラムスライシング n 変数間の制御依存関係とデータ依存関係を列挙 引数 form に対する前向きプログラムスライスのうち, データ依存関係の一部 protected boolean validate. Form(final Http. Servlet. Request request, final User. Form form) throws Service. Exception { if (form. get. Id() == 0) { User user = Service. Facotry. get. Service(IUser. Service. class). find. By. User. ID(form. get. User. Id(), User. Kubun. value. Of(form. get. User. Kubun())); if (user != null) { add. Error(request, "errors. ucm 02. exist. user"); return false; } } return true; } Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 6
既存研究(2/2) n データフローグラフによるコードナビゲーションツール[3] n メソッドの呼び出し関係と変数間のデータフローをグラフ表示 this validate. Form request form 呼び出し関係 return データフロー this get. Id() get. Field(Id) return this get. User. Kubun() return get. User. Id() return get. Field(user. Id) get. Field(user. Kubun) [3]: A Lightweight Visualization of Interprocedural Data-Flow Paths for Source Code Reading Takashi Ishio, Shogo Etsuda, and Katsuro Inoue, ICPC 2012, pp. 37 -46, 11 -13 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 7
ステップ 1: 別名解析 n 代入や関数呼び出しにより,ポインタがコピーさ れた変数をグループ化 p Yanら[4]のエイリアス解析を使用 緑文字はクラス変数 validate. Form (form) { … if (form. get. Id()) { … form. get. User. Id() … } int get. Id() { return this. Id; form. Id; } String get. User. Id() { this. user. Id; return form. user. Id; } static Session current. Session() { static Session current. Session() Session s= SESSION. get(); { { static Session current. Session() s ={ SESSION. get(); if. Session (s == null) Session s ={ SESSION. get(); if s(s=== null) SESSION_FACTORY if s(s=== null) { SESSION_FACTORY. open. Session(); s =. open. Session(); SESSION_FACTORY SESSION. set(s); . open. Session(); } SESSION. set(s); return s; } } [4]: Dacong Yan, Guoqing Xu, and Atanas Rountev. Demand-driven context-sensitive alias analysis for Java. ISSTA '11. , 155 -165. New York, NY, USA , 2011. Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 11
ステップ 2: アクセスの列挙 n 以下へのアクセスを検索し,アクセスの対象・出現するメソッド・読み 書きの種類(RW),という三つ組を列挙 p p クラス変数へのアクセス クラス変数・引数・注目するメソッドのオブジェクトが持つフィールドへの アクセス validate. Form (form) { String get. User. Id() { … return form. user. Id; if (form. get. Id()) { } … form. get. User. Id() … } static Session current. Session() { … Session s = SESSION. get(); if (s == null) { } int get. Id() { return form. Id; } s = SESSION_FACTORY. open. Session(); SESSION. set(s); } return s; 対象 メソッド 読み 書き form. Id get. Id R form. User. Id get. User. Id R SESSION current. Session R SESSION_ FACTORY current. Session R } Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 12
ステップ 2 : 補足 void main(A a) { A a 2 = new(); A a 3 = a; a 2. f = “foo”; print(a 3. g); a 3. h = “bar”; } 対象 メソッド 読み 書き a. g main R a. h main W a 2. f main W メソッド呼び出し後に作成されたオブジェクトと そのフィールドに対するアクセスは出力には含まない Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 13
ステップ 3:ツリー構造での可視化 n ステップ 2の出力を変数とフィールドの階層構造に合わ せツリー状に表示 p 変数・フィールドごと,メソッドごとにRWをまとめて表示 boolean validate. Form(request, form) 対象 メソッド 読み 書き form get. Id(): R form. Id get. Id R Id : R form. User. Id get. User. Id R User. Id : R SESSION current. Session R SESSION_ FACTORY current. Session R SESSION : R get. User. Id(): R current. Session() : R SESSION_FACTORY : R current. Session() : R Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 14
validate. Formに対する表示 引数form中の使用されるフィールドを表示 データベースアクセスに関わる 大域変数を表示 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 16
被験者と割り当て n 被験者 p 学生8名 n アプリケーションの順番とツールの有無で,4グ ループに分割 1回目 グループ 1 グループ 2 グループ 3 グループ 4 Argo. UML (ツール有り) Argo. UML Gantt. Project (ツール有り) Argo. UML (ツール有り) 2回目 Gantt. Project Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 19
実験結果(1/2) n 解答時間の分布 長 : 解 答 時 間 : 短 ツール有り ツール無し Argo. UML Gantt. Project ツール有りの被験者の方が作業を早く終える傾向にあった n 正答率 Argo. UML Gantt. Project ツール有り 0. 5 (2/4) 0. 25 (1/4) ツール無し 0. 25 (1/4) Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 20
- Oussep osaka
- Brad karp ucl
- Northwestern computer science department
- Computer science department rutgers
- Stanford vptl tutoring
- Computer science fsu
- Trimentoring
- Bhargavi goswami
- Webnis
- What is his favorite subject?
- Alice porter murray
- Lsu thesis guidelines
- Sgs upm thesis unit
- Graduate school korea university
- Honor graduate requirements high school georgia
- Himalayan graduate school of theology
- Uaf thesis format
- Graduate admissions usf
- Nau graduate housing
- Wesley horng
- Uf writing studio
- Ajou university graduate school
- Time management for graduate students
- Keller graduate school of mgmt
- Kisses of death for the graduate school application