テストケースを利用したJavaプログラムのアクセス修飾子過剰性分析手法

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
Java プログラムにおける 設計情報を用いた意図的な アクセス修飾子過剰性の抽出手法
Javaプログラムの開発履歴における アクセス修飾子過剰性の分析
情報伝播によるオブジェクト指向プログラム理解支援の提案
アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
類似するコーディングパターンの 利用状況調査ツールの提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
ソードコードの編集に基づいた コードクローンの分類とその分析システム
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ポインタ解析におけるライブラリの スタブコードへの置換の効果
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
Javaプログラムの変更を支援する 影響波及解析システム
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
アスペクト指向言語のための 独立性の高いパッケージシステム
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
コードクローン編集者数に着目した開発履歴の分析
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
JAVA入門⑥ クラスとインスタンス.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

テストケースを利用したJavaプログラムのアクセス修飾子過剰性分析手法 大阪大学大学院情報科学研究科 † 株式会社 NTTデータ †† 大西理功 † , 小堀一雄 †† , 松下誠 † , 井上克郎 †

本発表の概要 背景、用語説明 既存研究 本研究の概要 テストケースを用いた分析 まとめと今後の課題

背景・用語説明

アクセス修飾子の必要性 解決策 現在のソフトウェア開発は、複数の開発者により実施されることが多い 全員が仕様を完全に把握することは難しい フィールドやメソッドに想定していないアクセスが行なわれる可能性がある フィールドやメソッドに対してアクセス修飾子を宣言することでアクセス範囲を設計者の意図通りに制御する 解決策 フィールドやメソッドを,変数や関数のことと 言い換えてもいい. アクセス修飾子を宣言することで, フィールド,メソッドへのアクセス範囲を制御できる

アクセス修飾子 フィールド/メソッドへのアクセス範囲を制限する public, protected, default(宣言なし), privateの4種類 過剰に設定すると不具合の原因となりうる 過剰 : アクセス可能な範囲 > 実際のアクセス範囲 アクセス修飾子 アクセス可能な範囲 public あらゆる部品 protected 自身と同じパッケージに属する部品及び自身のサブクラス default(指定なし) 自身と同じパッケージに所属する部品 private 自身と同じクラス アクセス修飾子とはどのようなものか 本研究では,(Javaを対象にしているので,) public,protected,default,privateの4種類があります. それぞれの範囲が以下の表のようになっています アクセス修飾子を過剰に設定すると, 不具合の原因になりえます 過剰というのは,アクセス可能な範囲が,実際にアクセスされている 範囲より広く設定されている場合であり, 広くなっている部分に脆弱性が生まれます. 問題例を説明します. ※クラスのアクセス修飾子は考慮しない

NullPointerException の発生 過剰なアクセス修飾子の宣言 による問題例 文字列 y の長さを取得したい public class ClassX { private String y = null ; private methodA() { // ① y = new String(“hello”); } public String methodB() { // ② return y.length(); public String methodC() { this.methodA(); return this.methodB(); <設計者の意図する手順> ① methodA()を呼び, 初期値がnull の変数yにString オブジェクトを代入 ② methodB()を呼び,yの長さを取得 高品質なソフトウェアを作成するためには, アクセス修飾子を適切に設定することが望ましい publicなメソッド methodC() methodB()のアクセス修飾子が private ではなく public クラスXを用いて,文字列yの長さを取得したいと考えます. 設計者の意図する手順としては,methodAを呼び, 初期値がnullの変数yに,Stringオブジェクトを代入します 次に,methodBを呼び,yの長さを取得します これらの手順をmethodCを呼び出すことで,実現します. しかしmethodBのアクセス修飾子がprivateではなく, publicになっているため,クラス外から呼び出せるように なっており,そのとき,nullの変数yが呼ばれることで, NullpointerExceptionが発生します なので,高品質ソフトウェアを作成するためには,アクセス修飾子 を適切に設定することが望ましいことがいえます. それに対する既存研究行われています. 外部から①を飛ばして②を直接実行可能 NullPointerException の発生

既存研究

既存研究:ModiChecker アクセス修飾子過剰性を検出・修正可能な ツール ModiChecker[1]を開発 Javaプログラムのフィールド/メソッドを対象 プログラムの静的解析により実現 ソフトウェアに存在する過剰なアクセス修飾子をもつ,フィールド/メソッドの分析を行った そのまま [1] Dotri Quoc, Kazuo Kobori, Norihiro Yoshida, Yoshiki Higo, Katsuro Inoue, ModiChecker: Accessibility Excessiveness, Analysis Tool for Java Program, JSSST講演論文集 vol.28, pp.78-83, 2011

既存研究:アクセス修飾子過剰性 AE : Accesibility Excessiveness 1 アクセス可能な範囲 > 実際のアクセス範囲 AEは以下の表のように分類される NoAccess オブジェクトにアクセスが 行われていないことを示す 実際のアクセス範囲に対応するアクセス修飾子 Public Protected Default Private NoAccess x 宣言されている アクセス修飾子 p9 アクセス修飾子過剰性 AEが定義されているので, それについて説明します. AEは,アクセス可能な範囲が,実際の呼び出されるアクセス範囲 よりも過剰に広く設定されているアクセス修飾子です.  どのような場合がAEになっているかは表にあります.  この表では,縦軸が宣言されているアクセス修飾子        横軸が実際のアクセス範囲に対応する アクセス修飾子であり,   上から下に,左から右に広いものから狭いものへと   並んでいます. その中でも,Javaプログラム内に置いて,    まったくアクセスが行われていない範囲を,    NoAccessとします.   例えば,どこからでもアクセスできるpublicで宣言されている   メソッドに対して,  ,実際は,privateの範囲にあたるクラス内からしか   アクセスされていなければ,それはAEです.   そして,色つきの部分がAEとなっています. 色つきの部分を AEと定義 [1] Dotri Quoc, Kazuo Kobori, Norihiro Yoshida, Yoshiki Higo, Katsuro Inoue, ModiChecker: Accessibility Excessiveness, Analysis Tool for Java Program, JSSST講演論文集 vol.28, pp.78-83, 2011

代表的なプロジェクトに対し,AEがどれだけ 存在するのかを 調査した 2 評価値 Ant jEdit Struts JDT_ Core Areca 総メソッド数 14503 8464 25248 14375 6381 AE (総メソッド数の内 %) 10222 (70.4%) 4654 (54.9%) 19886 (78.7%) 8409 (58.4%) 3534 (55.3%) NoAccess (AEの内 %) 8230 (80.5%) 3287 (70.6%) 15728 (79.0%) 6534 (77.7%) 2813 (79.5%) プロジェクト名 半分以上がAE AEの7割以上が NoAccess それで,実際問題,メソッドのAEがどれだけ存在するのかということを,  代表的な五つのプロジェクトに対し,調査されています.  結果として,Antでは,総メソッド14503に対し.   10222がAE,そして,そのうち8230がどこからも   アクセスされていないNoAccessになっています.   クリック,クリック,他のプロジェクトでも   分かるように,半分以上がAE,そしてAEの七割以上が   NoAccessになっています. [2] 石居達也, 小堀一雄, 松下誠, 井上克郎,アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析, 情報処理学会研究報告 Vol.2013-SE-180, No.1, pp.1-8, 2013/5/27

既存研究の問題点 AEの分別を行う必要がある AE(特にNoAccess)が多すぎるのではないか どこからも参照されていないものが7割以上 解析対象であるJavaプログラム外からのアクセスが主要因 他にも別の原因があるのではないか AEの分別を行う必要がある 意図的に作られたAE (設計者の意図) 将来拡張、Javaの外からの参照 コーディングミスにより発生したAE この結果を受けて,AEが(その中でもNoAccess)が多すぎる のではないかと思いました. どこからも参照されていないメソッドが,7割以上であると, その原因は,解析対象であるJavaプログラム外からの アクセスがあるため,そこを認識できていないことであると 考えられるが, 他にも原因があるのではないか, AEになっている理由が長されていないので, AEの分別を行う必要があると考えました. そこで,設計者により意図的に作られたAE これは,将来拡張のためにあえて広くアクセス修飾子 を作った場合と,Javaプログラムの外からの参照による場合 が考えられます. もうひとつが,開発者のコーディングミスによる発生したAE, これは意図的でないAEであり,脆弱性の原因になっているAEです. 考慮したいAEは,下の意図的でないAEなので, 意図的なAEを特定し,除去することを考えます.

先行研究:意図的なAEの検出・除 去 [3] 設計者の意図は、設計情報(クラス図)に表現されると考え、分析対象に含める 目的:意図的なAEを除去することで,意図的でないAEの適合率を上げる 結果:メソッドの意図的なAEをすべて検出   フィールドの意図的なAEは検出できず 対象プロジェクトが一つだった そこで,先行研究において,意図的なAEの検出および除去を行いました. 設計者の意図が,設計情報(クラス図)に表現される と考え,分析対象に含めました 目的:意図的なAEを除去することで,意図的でないAEの適合率 あげること 方法については,述べませんが, 結果としては,一つのプロジェクトに適用した結果, メソッドの意図的なAEは全て検出できた フィールドの意図的なAEは検出できなかった 対象プロジェクトが一つしかなく,  開発現場においてクラス図をinputとして用意するのは難しいと そのため,設計情報により多くの情報が必要 また,多くのプロジェクトで,入手可能な情報を用いた 解析方法が必要と考え, 設計情報に,より多くの情報が必要 多くのプロジェクトで入手可能な情報を用いた解析方法が必要 [3] 大西理功, 小堀一雄, 松下誠, 井上克郎,Javaプログラムにおける設計情報を用いた意図的なアクセス修飾子過剰性の抽出手法, 電子情報通信学会技術研究報告 SS2013-79, pp.43-48, 2014/3/10

本研究の概要 研究目的 研究手法 意図的でないAEの開発者への提示 設計情報としてテストケースを用いた意図的なAEの検出・除去 クラス図と比較し,実装後に作られるテストケースのほうがより正しく多くの情報が含んでいる クラス図と比較し,テストケースを伴うソフトウェアのほうが多く公開されている 本研究にいたります. 先行研究と同様に,意図的でないAEの開発者への提示を目的として います. 方法としては,クラス図ではなく,テストケースを用いて, 意図的なAEの検出除去を行います.  あとは,そのまま. ※テストケースの前提:   テストのためにアクセス修飾子が広く設定されていない

テストケースを用いた分析

設計者の意図が表現された情報として テストケースを用いた分析 AEから意図的なAEを検出・除去 AE検出にはModiCheckerを利用 テストケースからのアプリケーションへの参照状況を利用 意図的なAEをテストケースにより発見できるかを調べる テストカバレッジとAE変化の関係性の調査 ソフトウェアの複数バージョンのAE解析を行う 前バージョンのテストカバレッジと次のバージョンとのAE変化の関係をみる   p14  テストケースを用いた分析について説明します. 二つの分析を行いました.  一つ目の分析は,   AEから意図的なAEを検出するという,先行研究でも 話していた内容です.   テストケースからアプリケーションへの参照状況を利用します   具体的な方法は後ほど説明します,   それにより,意図的なAEをテストケースにより発見できるかを   調べます.  二つ目の分析は,  研究の目的部分とは異なるのですが,  テストケースを利用した分析が他にもできないかということで,,   テストカバレッジとAE変化の関係性の調査を行いました.    ソフトウェアの複数バージョンのAE解析を行います.    前バージョンのテストかばレジと次のバージョンとの AE変化の関係を見ます.   これの背景については,後ほど.

RQの設定 二つの研究課題を設定 RQ1 : テストケースをAE解析対象に含めることで意図的に設定されたAEを発見できるか 設定理由は後ほど説明 p16 二つの分析を以下のRQに設定しました. ただし,テストコード自体のAE解析は行わない 他はそのまま

RQ1 テストケースからの参照を 含めたAEメソッド解析 pkg1 メソッドの被アクセス範囲 C A public A NoAccess AE B public C default B public アプリケーション ソースコード C default ModiChecker pkg1 T メソッドの被アクセス範囲 C C A public A public AE解消 B public p17 具体的なテストケースからアプリケーションへの 参照を利用する方法について,説明します. テストケースからの参照を含めたAE解析 まず,テストケースを含めないAE解析について, 簡単な例を説明します. 3つのメソッドABCがあって,それぞれのアクセス修飾子が ・・・,アクセス状況説明,アクセスされている範囲説明, AEになっている, 次に,テストケースを含めた場合, テストケースがパッケージ外にあったとし,Aに アクセスしているとすると,Aのメソッドの被アクセス範囲が 広がり,publicになるため,AEが解消します! このように,意図的なAEの検出除去を行います. ただし,テストケースの配置はアプリケーションや機能によって, 異なるため,パッケージの外にあるとは限りません. そして,このテスト参照を利用して,発見できる意図的なAE について説明します! C default B public アプリケーションと テストケースの ソースコード C default ModiChecker 被アクセス範囲の拡大による意図的なAE検出・除去

RQ1 テストケースにより発見できる 意図的なAE その1 テスト無し テスト有り 被アクセス範囲 ①変化無し AE ②範囲拡大 AE 宣言されている アクセス範囲 AE ③範囲拡大 AE解消 意図的なAE 意図的なAE ③の場合 宣言されたアクセス修飾子と同じ範囲でテストされている   ⇒ 将来拡張において,同じ範囲でのアクセスが行わ      れると判断し,意図的なAEと判定 p18 AEとなっているメソッドの被アクセス範囲(アクセスされている範囲 の変化を見ます)のテストケースによる変化を見ます. 赤丸が,メソッドの被アクセス範囲,蒼丸が宣言されている アクセス可能な範囲 その変化は3パターンあります. 変化しない場合,変化するがAEでなくならない場合, 変化しAEが解消される場合 テストを含めても,そのメソッドがテストからアクセス されていないもしくは,同じ範囲でしかアクセスされていなければ, 範囲は変化しません. 宣言されている範囲までは,届かない. 3つ目が,テストされている範囲が,宣言されている範囲にまで, と重なれば,AEは解消され,これを意図的なAEとする 将来拡張において,同じ範囲でのアクセスが行われる. あるいは,Javaプログラム外からのアクセスがあり, それにより,publicが宣言されていると判断し, 意図的なAEと判定

RQ1 テストケースにより発見できる 意図的なAE その2 テスト無し テスト有り 被アクセス範囲 ④変化無し AE(NoAccess) 意図的なAE ⑤範囲拡大 AE(NoAccess解消) 宣言されている アクセス範囲 AE(NoAccess) ⑥範囲拡大 AE解消 意図的なAE 意図的なAE ⑤,⑥の場合 被参照のないメソッドがテストされている  ⇒ Javaプログラム外からのアクセスがある判断し,   それにより意図的なAEと判定  もうひとつのパターンは,アクセスが行われていない NoAccessとなっているAEにおける,意図的なAEを見ます. 同様.

RQ1 実験対象 三つのオープンソースプロジェクトを対象 実験対象の選定方針 Apache Ant 1.9.4 Struts 2.3.16.3 Javassist 3.18.2 実験対象の選定方針 比較的ソースコードのサイズが大きい ソースコードとテストケースがセットで提供されている リフレクションを利用していないプロジェクトであること

RQ1 実験方法 AE, AE(NoAccess)の変化を分析 し,解消,修正された数を求める (1) (2) Modichecker アプリケーション ソースコード 存在するAE (1) ③⑥AE解消 Modichecker ⑤NoAccess解消 意図的なAE C C T A (2) 設計情報とアクセス修飾子が合致していないメソッドを3つつくり、意図的でないAEに変えます。意図的でないAEがなかったから。 分析するメソッドとして、AEでないメソッドを3つ選択し、これのアクセス修飾子を変更することで、 意図的でないAEを作成sする T T 存在するAE ③⑤⑥ (1) の場合  アプリケーションと テストケースの ソースコード テストコード自体は 解析対象に含めない Modichecker ②修正されたが, 解消されなかったAE 変化したAE

RQ1 実験結果(1) 意図的なAEが検出できている 検出数はAEのメソッド全体の1割程度 Ant 1.9.4 Struts 2.3.16.3 Javassist 3.18.2 総メソッド数 12498 10907 4442 AEのメソッド数 (テスト無し) 3947 3660 746 (テスト有り) 3878 3548 642 検出された意図的なAE ③⑥+⑤ 222 464 131 AE解消 ③⑥ 69 112 104 NoAccess解消 ⑤ 153 352 27 Ant: NoAccessの数は 2569 -> 2392 (main カバレッジ44%) Struts : NoAccessの数は 2726 -> 2307 Javassist : NoAccessの数は 334 -> 243 意図的なAEが検出できている 検出数はAEのメソッド全体の1割程度

RQ1 実験結果(2) 変化したAEの中で最も高い割合を占めているのは, Ant 1.9.4 Struts 2.3.16.3 Javassist 3.18.2 変化したAEのメソッド数 ③⑥+⑤+② 306 508 147 AE解消 ③⑥ 69 (22.5%) 112 (22.0%) 104 (70.7%) NoAccess解消 ⑤ 153 (50.0%) 352 (69.3%) 27 (18.4%) AE修正(解消はされない) ② 84 (27.5%) 44 (8.7%) 16 (10.9%) 変化したAEの中で最も高い割合を占めているのは, Ant, StrutsではNoAccess解消が50%, 69.3% JavassistではAE解消が70.7%

RQ1 考察 意図的なAEを発見 全体のAEメソッドに対して,検出されるAEは1割程度

RQ2 背景 テストカバレッジとAE変化の関係 ソフトウェア開発時のAEが修正される時期が分かれば,AE除去に大きく貢献できる 既存研究により,ソフトウェアの新規作成メソッドの多くはNoAccessであることが分かっ ている 2 メソッドが利用されるにしたがって,AEが除去される可能性があるので,テストカバレッジとの関係性を調査する RQ1については,検出可能であったことがいえるが,その数が少なかったため,他の視点で考えてみる. そこで,既存研究において,AEが修正される時期の調査を行っており,新規作成メソッドの多くが,NoAccessであることが分かっているため,利用されるに従い,AEが除去されると考え,利用されている箇所はテストされていると考え,テストカバレッジとの関係性を見る. [2] 石居達也, 小堀一雄, 松下誠, 井上克郎,アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析, 情報処理学会研究報告 Vol.2013-SE-180, No.1, pp.1-8, 2013/5/27

RQ2 実験対象 一つのオープンソースプロジェクトについて,二つのバージョンを選択 実験対象の選定方針(RQ1と同様) Apache Ant 1.8.2 Apache Ant 1.8.4 実験対象の選定方針(RQ1と同様) 比較的ソースコードのサイズが大きい ソースコード中にテストケースが含まれている

RQ2 実験方法 メソッド 50%以上 高カバレッジ メソッドの被アクセス範囲 A public 旧バージョン A private AE 70% B public 50%未満 低カバレッジ B default AE 90% C default C private AE 40% AEが修正されたメソッドを 選択,カバレッジの高低 で分類する メソッドの被アクセス範囲 新バージョン A public AE修正 ! B protected AE修正 ! 高カバレッジ A B C default AE修正 ! 低カバレッジ C

RQ2 実験結果 テストカバレッジが高いメソッドのほうが, AEが修正されている AEメソッド (個数) テストカバレッジによる分類 (Ant 1.8.2) 0~49% 50~100% Ant 1.8.2 (3879) 2510 1369 Ant 1.8.2->1.8.4 で修正されたAEメソッド (33) 12 (0.47%) 21 (1.53%) テストカバレッジが高いメソッドのほうが, AEが修正されている

RQ2 考察 実験対象において,テストカバレッジが高いメソッドほど,AEの修正される確率が高い 他のプロジェクト,リビジョンでも調査が必要 Antのテストカバレッジが,一般的なソフトウェアシステムと比べてそれほど高くないため,テストアクセスを含めてもAEメソッドに変化が見られない可能性

まとめと今後の課題

まとめと今後の課題 まとめ テストケースの有無によるAE変化の調査 バージョン間でのAE変化とテストカバレッジの関係性の調査 今後の課題 より多くのバージョンやソフトウェアに対して,分析を行う テストカバレッジの高いソフトウェアを分析する

先行研究:意図的なAEの検出・除 去 [3] 設計者の意図は、設計情報(クラス図)に表現されると考え、分析対象に含める ModiCheckerで検出されたソフトウェア内のAEを対象 クラス図に出現するアクセス修飾子を参照し,ソースコード中のAEがクラス図に従って実装されているかを確認する 従っていれば,意図的なAEと判断する 意図的なAEを除去することで,意図的でないAE の適合率を上げる [3] 大西理功, 小堀一雄, 松下誠, 井上克郎,Javaプログラムにおける設計情報を用いた意図的なアクセス修飾子過剰性の抽出手法, 電子情報通信学会技術研究報告 SS2013-79, pp.43-48, 2014/3/10

クラス図を用いたAEの検出・除去 ソースコードとクラス図の同一のメソッド,フィールドに対して,アクセス修飾子を比較 public A private 一致 不一致 ソースコード中の AEオブジェクト A public A public C 設計者 の意図 に一致 設計者の意図は設計情報に限定されない アナライザの具体的な処理を説明する AEのリストから意図的なAEを検出したいので、 AEのリストに存在するメソッド、フィールドのそれぞれに対して、設計情報の中から同一のオブジェクトを探し出し、 アクセス修飾子の比較を行う 一致した場合、設計情報に従ったAEということで、意図的なAEと判別する 一致しない場合、設計情報以外に意図がある場合(テストメソッドなど)を考慮し、判別不能であるものとする アクセス修飾子が一致したものを、意図的なAEとして検出・除去する クラス図 意図的なAE AEの判別不能 自動的に判別できる意図的なAEのみを検出・除去する

結果・考察 意図的でないAEが除去されることはなかった メソッドの意図的なAEをすべて検出 フィールドの意図的なAEは検出できなかった 設計情報の情報が不完全 対象プロジェクトが一つしかなかった ソフトウェア開発の現場でも同様にUML図をinputとして準備するのは難しい 設計情報に,より多くの情報が必要 多くのプロジェクトで入手可能な情報を用いた解析方法が必要