• 検索結果がありません。

部品間の関係変化を分析するツールにおける後継部品の追跡に関する考察

N/A
N/A
Protected

Academic year: 2021

シェア "部品間の関係変化を分析するツールにおける後継部品の追跡に関する考察"

Copied!
4
0
0

読み込み中.... (全文を見る)

全文

(1)

部品間の関係変化を分析するツールにおける

後継部品の追跡に関する考察

2010SE112草野福美 2010SE191澤本美澄 2010SE239田西恭平 指導教員:横森励士

1

はじめに

ソフトウェア開発では,様々な変化への対応や,品質の 向上,機能の向上を図るために長期にわたって保守活動が 行われているものが多数存在し, 内部の構造はしだいに複 雑化し把握しにくくなる. ソフトウェアを構成する部品間 の関係がどのように複雑化するのかを視覚化するツールが 提案されているが, 単純にファイル名とパッケージ名が一 致している部品間の前後のバージョンで関係を追いかける だけでは,途切れる部品が多く,変化を追跡するのに不十 分であった. 本研究では,ファイル名やパッケージ名が更新前後で変 化 し た 部 品 に 着 目 し ,そ の 部 品 の 名 前 が ど う 変 化 し た か , それらが後のバージョンの部品と対応付け可能かを実際の オープンソースソフトウェアを対象に調査する. 内容がど う変わったかを調査し, どのような方法を採用すれば視覚 化ツールにおいて十分な効果を発揮できるか考察する. こ れ ら の 分 析 か ら ,後 継 と な る 部 品 と み な す 条 件 を 設 定 し , それらの基準にもとづいてツール上で連続した部品として 表示させる.これらの改良が視覚化ツールには必要不可欠 であると考えられ,このような改良を行うことで,ツール を通じて開発者がソフトウェア開発における進捗情報をよ り的確に共有することができると考えられ保守活動におけ る作業の支援につながると考えられる.

2

背景技術

2.1 ソフトウェアの成長と視覚化ツール 長 期 間 に わ た っ て 開 発 さ れ た ア プ リ ケ ー シ ョ ン は ,不 具 合 の 対 応 ,機 能 の 追 加 な ど を 通 じ て 多 く の 修 正 が 行 わ れている.それらの修正によって,時間と共にソフトウェ アの構成はより複雑化していく.私たちの研究室では,開 発 を 通 じ て ソ フ ト ウ ェ ア の 部 品 間 の 関 係 が ど の よ う に 変 化 し て い く か を グ ラ フ として 視覚化 するツ ールを ,Clone

Tool[3]およびUse Relation Viewer(URV)[4]として提 案した.Clone Tool[3]は,ソフトウェアの複数のバージョ ン 間 の フ ァ イ ル を 分 析 し て ,コ ー ド ク ロ ー ン の 変 化 を 視 覚 的 に 表 示 す る ツ ー ル で あ る .CCFinderの 分 析 結 果 と し て 生 成 さ れ る テ キ ス ト フ ァ イ ル を 読 み 込 み ,コ ー ド ク ローンの変化を表やグラフとして出力する.Use Relation Viewer[4]は,Javaソフトウェアのクラス間の利用関係を 分 析 す る ツ ー ル で あ る .Classycleの 分 析 結 果 と し て 生 成 されるxmlファイルを読み込み,表やグラフとしてファイ ル間の利用関係を,図1のように視覚化する.ソフトウェ アの複数のバージョン間のファイルを分析して, 利用関係 の 差 分 の 変 化 を 示 す こ と も で き る .こ れ ら の ツ ー ル で は , ソースコードの入手が可能な一方でリポジトリの情報が何 らかの理由で入手できない場面でも, 分析可能とすること を想定し,入力を各バージョンのソースコードとしている.

図1 Use Relation Viewerの画面

3

研究について

3.1 既存ツールの問題点 現状の部品間の関係を視覚化するツールでは,ファイル 名およびパッケージ名が完全一致した場合のみ, 履歴中で 同一の部品とみなしている. 同一の機能を保有しているク ラス同士であっても, ファイル名や存在するパッケージが 一致しなければ別のクラスとみなされ, 関係の変化を追跡 することができない.グラフとして表示した場合,例えば パッケージを移動した時点で追跡できなくなるので,図1 のようにグラフの線が途切れて表示されてしまう. 3.2 研究の目的 本研究では,実際のオープンソースソフトウェアの開発 履歴を対象に,前のバージョンのクラス群と一致しなかっ たクラス群の分析を行う.分析では,その直後のバージョ ン に お い て ク ラ ス で 記 述 さ れ て い た 内 容 が ど の ク ラ ス に 存在するかを調査し, それぞれのクラスの後継の部品とな るべきクラスを推定する. 分類ごとに内容の一致率を調査 し,どのような形で後継となる部品を推定すれば十分な効 果を発することができるかを考察する.

4

評価実験

以下の項目を分析することを目的として,本研究の評価 実験で調査する.さらに,それぞれの項目について詳細な 分析を行うために,それぞれに小項目を追加する. 1. パ ッ ケ ー ジ 名 の 変 更 さ れ た ク ラ ス は ど の 程 度 存 在 す るか. (a)パ ッ ケ ー ジ 名 の 変 更 は ど の よ う に 行 わ れ て い る

(2)

か. (b)パッケージ名の変更の場合,どれだけ更新前後で 中身が一致しているのか. 2. クラス名の変更はどの程度存在するか. (a)クラス名の変更はどのように行われているか. (b)クラス名の変更の場合,どれだけ更新前後で中身 が一致しているのか. 3. フ ァ イ ル 名 の 変 更 以 外 の 理 由 に よ り 追 跡 が で き な く なっているクラスはどの程度存在するか. (a)ファイル名の変更以外の理由により追跡ができな くなっているクラスは,どのように変更されてい るか. 4.1 評価実験の方法 あるソフトウェアの開発履歴を対象として,以下の作業 を行う.これにより,連続したバージョン間で追跡できな かったファイルを調査する. 1. いくつかの連続したバージョン群を選び,ソースコー ドを取得する. 2. 連続する2つのバージョンを抽出し,ファイル名,パッ ケージ名が次のバージョンに存在しなかったものを抽 出する. 3. 抽出したファイルから,クラス名が一致するファイル が次のバージョンに存在するかを調査する. 4. ク ラ ス 名 が 一 致 し た フ ァ イ ル が 存 在 し な か っ た 場 合 , 同一のパッケージ内から,類似したクラス名のものが 存在するかどうかを調査する. 5. 類似したクラス名のものが存在しなかった場合,パッ ケージ名,クラス名の両方に着目し,名前が類似した ファイルが存在するかどうかを調査する. 6. 上記3つの手順について,後継となる部品である可能 性の高いファイルが発見できた場合,ソースコードを 比較し,評価を行う. 7. 以上の手順を繰り返し,最終的に後継となる部品とみ なすことのできるファイルが存在しなかった場合,後 継となる部品はなしと判定する. このように分類したクラス群について,後継となるクラ スが存在するクラスについてそれぞれにdiffを用いて類似 度 を 計 算 す る .な お ,類 似 度 と は ,ソ ー ス コ ー ドPとP の 後 継 の 部 品 と 想 定 さ れる ソー スコー ドQに つ い て ,(Q に含まれるPの行数+Pに含まれるQの行数)/(Pの行 数+Qの行数)で定義したものである.内容がコピーされ た部品ほど,高い値を示すと考えられる. 4.2 評価実験における結果の分析方法 後続のバージョンでパッケージ名,クラス名が一致する 部 品 が 確 認 で き な か っ た 部 品 につ いて ,表1で 分 類 し た . パッケージ名の変更にあたる項目A,Bについては,移動 表1 データの分類項目 記号 項目 A パッケージ・クラス名が両方変更 B パッケージ名のみ変更 C クラス名のみ変更 D 後継の部品なし した理由についてもそれぞれ調査を行い, 次のように調査 した.それぞれの項目について,例も併せて示す. • 所属パッケージが親になった 例:test.example.cname→test.cname • 所属パッケージが子になった 例:example.cname→test.example.cname • パッケージ名が途中で変わった 例:test.example.cname→package.example.cname • パッケージ名の最後の部分が変わった 例:test.example.cname→test.example.cnames • パッケージ名の途中と最後の部分の両方が変わった 例:test.example.cname→package.example.cnames クラス名の変更にあたる項目A,Cについては,変更内 容について調査を行い,次のように分類した.こちらもそ れぞれの項目について,例も併せて示す. • クラス名の単語が一部違うものに変化した 例: TestExample→PackageExample • クラス名に新しい単語が付け足された 例: Example→TestExample • クラス名が単純に変更された 例: Example→Examples 後継となる部品がない場合はDとして分類した上で,類 似した機能を持つクラスがないか調査を行い, さらに以下 のように分類した. • 別のクラスに統合された • 完全に消滅した 4.3 評価実験の対象 SourceForgeで公開されている開発プロジェクトを対象 として,評価実験の対象プロジェクトを選出した.Javaを 開発言語として,5バージョン以上のソースコードが入手 できるという条件のもとで,次の6プロジェクトを分析対 象とした. • Freemind*1 マインドマップ作成ソフトウェア. • Hodoku*2 数独(ナンバープレイス)のためのソフトウェア. *1http://sourceforge.net/projects/freemind/ *2http://sourceforge.net/projects/hodoku/

(3)

• JgraphT*3 Javaにおけるグラフを構築するためのライブラリ. • JavaGeom*4 ジオメトリアプリケーション用のJavaライブラリ. • JXPlorer*5 JavaLDAPクライアント. • JIPT*6 Javaの画像処理のツールキット. 表2 追跡できなかったクラスの個数 プロジェクト名 次のバージョンで 追跡できなかったクラス数 A B C D Freemind 61 0 31 6 24 Hodoku 57 0 43 0 14 JgraphT 155 6 120 4 25 JavaGeom 113 0 78 0 35 JXPlorer 22 0 0 0 22 JIPT 16 0 0 0 16   4.4 評価実験の結果 前節で選んだ6つのプロジェクトに対して,後継となる 部品の推定を行った.結果を表2に示す.パッケージ名の み変わるケースが特に多く見られた一方で, クラス名の変 更は多くないとわかった.また,どのプロジェクトでもあ る一定の部品は後継となる部品を確認できなかった. 次 に ,さ ら に 細 か く 分 類 し た 結 果 と ,追 跡 可 能 部 分 に つ い て 分 類 ご と に 平 均 類 似 度 を 測 定 し た 結 果 を 表 3に 示 す .プ ロ ジ ェ ク ト ご と に 平 均 類 似 度 が 大 き く 異 な る こ と が 見 受 け ら れ る .Freemindで は ,パ ッ ケ ー ジ 名 の 変 更 に よ る も の が 高 い 類 似 度 を 示 し て い る .し か し ,Hodoku, JavaGeomでは類似度は極端に低い数値を示している.対 象のプロジェクトを通じて, パッケージの最後の部分が変 更されたケースは高い類似度を示している. クラス名の変 更によるものでは, 各プロジェクトそれぞれ平均類似度が パッケージ名の変更によるものと比べて低い数値を示して いる.クラス名の変更によるものの中では,名前の単語が 変化したものが最も高い数値を示した.また,後継となる 部 品 が 存 在 し な か っ た も の も い く つ か 存 在 が 確 認 さ れ て いる.

5

考察

評価実験の結果から,以下の結果を得ることができた. 1. パッケージ名の変更されたクラスはどの程度存在する か. → 対 象 の プ ロ ジ ェ ク ト で の 追 跡 で き な か っ た ク ラ ス は,ほとんどがパッケージ名の変更が原因であった. *3http://jgrapht.org/ *4http://geom-java.sourceforge.net/ *5http://jxplorer.org/ *6http://sourceforge.net/projects/jipt/ (a)パ ッ ケ ー ジ 名 の 変 更 は ど の よ う に 行 わ れ て い る か. → プ ロ ジ ェ ク ト ご と に ば ら つ き は あ る が ,パ ッ ケ ー ジ の 途 中 部 分 が 変 更 し た も の が 最 も 多 く 確 認 さ れ た .Freemindで は ,階 層 の 変 化 を 伴 っ た パッケージ名の変更はなかったが,そのほかのプ ロ ジ ェ ク ト で は パ ッ ケ ー ジ の 階 層 が 変 化 し て い た.特に,JgraphTとJavaGeomでは,パッケー ジが親や子になる変更の方が多くなっていた. (b)パッケージ名の変更の場合,どれだけ更新前後で 中身が一致しているのか. →Freemind,JgraphTでは平均でも半分以上一 致 す る 場 合 が 多 く ,ク ラ ス に よ っ て は 完 全 に 一 致したものも存在した.その一方で,Hodokuと JavaGeomでは一致率が低く,平均で1%未満と な り ,プ ロ ジ ェ ク ト に よ っ て 差 が 大 き く 開 い た . どのプロジェクトでも類似度が最も高くなるのは パッケージ名の変更の場合であった. 2. クラス名の変更はどの程度存在するか. →クラス名の変更はパッケージの移動より少ない頻度 で見られた. (a)クラス名の変更はどのように行われているか. →プロジェクトごとにばらつきがあること,色々 な パ タ ー ン が 混 在 し て い る こ と が あ っ た . Free-mindでは3つのパターンがそれぞれ同じ頻度で 見られ,JgraphTでは,名前の単語の付け足しが 最も多く,名前の単語の一部の変化が最も少ない というばらつきが見られた. (b)クラス名の変更の場合,どれだけ更新前後で中身 が一致しているのか. → 名 前 の 一 部 の 単 語 が 変 化 し た 場 合 が 最 も 高 い 類似度を示した.全体的にパッケージ名の変化の 場 合 と 比 較 し て 一 致 度 は 低 い .JgraphTで は 名 前 の 変 化 で 一 致 度 が0と い う 極 端 な 結 果 が 見 ら れた. 3. フ ァ イ ル 名 の 変 更 以 外 の 理 由 に よ り 追 跡 が で き な く なっているクラスはどの程度存在するか. →どのプロジェクトでも存在が確認された.後継部品 が存在しないもののみのプロジェクトもあった. (a)ファイル名の変更以外の理由により追跡ができな くなっているクラスは,どのように変更されてい るか. →ほとんどが完全に消滅していたが,ほかのクラ スに統合されたクラスの存在も確認された. 評価実験を行った結果,追跡できなかったクラスはパッ ケ ー ジ 名 の 変 更 が 原 因 と な っ て い る も の が 大 多 数 で あ っ た.実際に追跡できなかったクラスを次のバージョンのク ラスと比較したところ, 関連したファイルがまとめて違う パ ッ ケ ー ジ に 移 動 さ れ た こ と で 大 量 の ク ラ ス が 追 跡 で き

(4)

表3 それぞれのクラスの分類結果

Freemind Hodoku   JgraphT JavaGeom JXPlorer JIPT 項目 数 平均類似度 数 平均類似度 数 平均類似度 数 平均類似度 数 平均類似度 数 平均類似度 パッケージ名の変更によるもの(A,B) 31 0.592 43 0.001 130 0.476 78 0.093 0 - 0 -パッケージが親になった 0 - 5 0 12 0.205 0 - 0 - 0 -パッケージが子になった 0 - 0 - 38 0.290 69 0.086 0 - 0 -パッケージの途中部分が変更された 3 0.466 38 0.001 71 0.591 8 0.047 0 - 0 -パッケージの最後部分が変更された 12 0.276 0 - 7 0.869 1 0.989 0 - 0 -パッケージの途中部分,最後部分が両方変更された 16 0.674 0 - 3 0.333 0 - 0 - 0 -クラス名の変更によるもの(A,C) 6 0.268 0 - 12 0.130 0 - 0 - 0 -名前の単語の一部が変化した 2 0.491 0 - 2 0.471 0 - 0 - 0 -名前に単語が付け足された 2 0 0 - 6 0.103 0 - 0 - 0 -名前が変化した 2 0.313 0 - 4 0 0 - 0 - 0 -後継となる部品が存在しなかったもの(D) 24 14 4 35 22 16 他のクラスに統合された 6 0 7 0 0 0 完全に消滅していた 18 14 16 35 22 16 なくなっている例が多く存在した. 新しい所属パッケージ が親パッケージになったものや, 子パッケージになった例 もいくつか存在した.クラス名については,1つの変更の 影 響 は ,名 前 が 変 更 さ れ た フ ァ イ ル 自 身 に の み 起 こ る が , パッケージ名の変更は,1つの変更が起こると,そのパッ ケージに属する全てのファイルに影響を起こしてしまうの で,クラス名よりも,パッケージ名の変更により追跡でき なくなったクラスが多く発生したと考えられる. 類 似 度 を 調 査 す る と プ ロ ジ ェ ク ト ご と に 大 き く 異 な り , 全体的に4割以上の比較的高い数値を割り出すプロジェク トもあれば,1割以下の低い数値がほとんどを占めるプロ ジ ェ ク ト も 存 在 し た .し か し ,同 じ プ ロ ジ ェ ク ト 内 で は , 類似度が全体的に高いか, 全体的に低いかのどちらかにな る傾向があったので, 名前による追跡が有効なプロジェク トとそうでないプロジェクトで追跡の有無を選択すること ができれば有効であると考えられる. 5.1 関連研究 ソフトウェアの更新前後において,更新前,更新後の部 品群(クラス群)がどのように対応をしているかを分析す る た め の 研 究 は 数 多 く 存 在 し て い る .文 献[1]に よ る と , そ れ ら の マ ッ チ ン グ に 関 す る 研 究 の サ ー ベ イ を 行 っ て お り,手法を大きく分けて7つに分類している.文献[1]に よると,一番単純な,ソフトウェア部品の中に存在する固 有名詞,動詞などの名前を用いてマッチングを行う方法で あるEntity NameMatchingで,多くのバージョン間での マッチングに対して, 一番基本的であるが十分な性能を示 していると述べている.本研究の分析結果でも,後継とな る部品の存在したクラスのうち, パッケージ名のみの変化 が全体の多くを占めており, 部品間の関係変化を追跡する ツールにおいても, パッケージ名を吸収することが後継と なる部品の追跡に対して有効であると考えられる. Dannyらの研究[2]では,リファクタリングを通じてソフ トウェア内部構造が変化することに対応することも目的と して,それぞれの構成要素やリファクタリング操作を考慮 して,更新のヒストリーが保たれるようなSCM(Software Configuration Management)シ ス テ ム を 提 案 し た .本 研 究では,各バージョンのソースコードのみが得られること も分析の前提としているが, リポジトリの情報も入手可能 な場合,これらの手法をもとに,より正確な追跡が行える ことが予想できる.

6

まとめ

本研究では,ファイル名かパッケージ名が更新前後で変 化した部品について, それらの部品がどう変化したかを調 査した.結果として,パッケージ名の変更の場合は,更新 前後で中身が比較的変化しないこと, プロジェクトごとに 傾向が異なることなどを確認した.今後,後継となる部品 とみなす条件を設定し,ツールに反映させることで,ツー ルが示す情報がより有益になり, 情報の共有が効果的に行 えるようになることを通じて保守作業を支援することがで きることと考えられる.

参考文献

[1] M.Kim,D.Notkin: ”Program Element Matching for Multi Version Program Analyses,” in processing of the 2006 international workshop on mining software repositories, P.58-64,2006.

[2] D.Dig,K.Manzoor,T.Ngayen,R.Johnson:

”Refactoring-aware Configuration Management for Object-Oriented Programs,” Proceeding of the 29th International in Conference on Software Engineering, P.427-436,2007. [3] 松坂太智,岡田直希,坂下智紀:”バージョン間のコー ドクローン関係の変化を提示するシステムの試作,”南 山大学情報理工学部2012年度卒業論文要旨集,2012. [4] 亀井雄佑,木下裕太郎,前原一機:”バージョン間の利 用関係の変化を提示するシステムの試作,”南山大学情 報理工学部2012年度卒業論文要旨集,2012.

図 1 Use Relation Viewer の画面
表 3 それぞれのクラスの分類結果

参照

関連したドキュメント

また、2020 年度第 3 次補正予算に係るものの一部が 2022 年度に出来高として実現すると想定したほ

このように資本主義経済における競争の作用を二つに分けたうえで, 『資本

の点を 明 らか にす るに は処 理 後の 細菌 内DNA合... に存 在す る

断面が変化する個所には伸縮継目を設けるとともに、斜面部においては、継目部受け台とすべり止め

前章 / 節からの流れで、計算可能な関数のもつ性質を抽象的に捉えることから始めよう。話を 単純にするために、以下では次のような型のプログラム を考える。 は部分関数 (

注:一般品についての機種型名は、その部品が最初に使用された機種型名を示します。

層の項目 MaaS 提供にあたっての目的 データ連携を行う上でのルール MaaS に関連するプレイヤー ビジネスとしての MaaS MaaS

「海洋の管理」を主たる目的として、海洋に関する人間の活動を律する原則へ転換したと