コンポーネント ランクを用いたソフトウェアのクラス

コンポーネントランクを用いた
ソフトウェアのクラス設計に関する
分析手法の提案
市井 誠*,横森 励士** ,松下 誠*,井上 克郎*
*大阪大学
大学院情報科学研究科
**南山大学 数理情報学部 情報通信学科
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
背景1: コンポーネントランク法


ソフトウェア部品検索システム SPARS で用いられる順位付け手法
ソフトウェア部品の重要度を,利用関係から評価し,順位付けする
 多くの部品から利用されている部品は重要
 重要な部品から利用されている部品もまた重要

多く利用される部品や,重要な箇所で利用される部品に大きな評価
値が与えられる
 コンポーネントランク値(CR値)
: 部品に与えられた評価値
 コンポーネントランク(CR) : CR値による順位
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2
コンポーネントランク値の計算

部品グラフをもとにした繰り返し計算
1.
2.
3.
4.
5.
C1
0.334
各頂点に総和を1として適当な重みを与える
頂点の重みを,出ていく辺で分配する
入ってくる辺の重みの総和を,その頂点の重みとして再定義
頂点の重みが収束するまで,2.3.を繰り返し計算
収束した重みが部品のCR値
C1
0.334
C1v1×50%
CC210.167CC21
0.333
0.333 0.333
v1×50% 0.167
v3×100% 0.333
C3
2015/10/1
0.333
C3
0.333
CC2 10.1665CC21
0.500 0.167
0.400
0.1665
v2×100%
0.500
0.333
C3
C3
0.500
C2 0.200C2
0.1665 0.200
0.200
0.400
0.167
C3
C2
C3
0.200
C3
0.3335 0.400
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
3
背景2: ソフトウェアのクラス設計

オブジェクト指向でのクラス設計
 クラスごとに役割を持つ
 クラス同士が利用関係を持つ
 中心となるクラスを知ることで概略が理解しやすくなる

中心となるクラスは
 多くのクラスから利用される
 中心となるクラス同士で利用関係をもつ

コンポーネントランク法を利用する事で識別できるのではないか?
 単体のソフトウェアに対して適用すると,中心となるクラスが高く順位付け
される
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
4
目的

ソフトウェアの理解支援を目的とした,コンポーネントランクに
基くクラス設計分析手法を提案
 コンポーネントランクにより中心的なクラスを識別する
 中心的なクラスを基に,クラスの役割や利用関係を分析する
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
5
提案手法の概要

基本方針
SPARS-J
 CRの順位を基にクラスをグループ分け
 順位の高いグループから,グループに含ま
れるクラスのみを分析

クラスをCR順にソート
手順
1. …………………………………………
2. …………………………………………
3. …………………………………………
4. …………………………………………
5. …………………………………………
6. …………………………………………
7. …………………………………………
…
20.. ………………………………………
21. ………………………………………
…
50. ………………………………………
51. ………………………………………
…
順位を基に3グループ作成
CRの計算
2. 重要クラスのグループの作成
1.
CRをもとに,3グループ作成
3.
Javaソースコード
重要クラスのグループの分析
順位の高いグループから
グループ内のクラスの役割・関連を分析
グループごとにク
ラスを分析
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
6
手順1: CRの計算
1.
ソースコードを準備
単体ソフトウェアのソースコード
利用ライブラリや,ビルド情報は不要
SPARS-Jへ登録・CR値・CRの計算
3. 結果の出力
2.
CR値・CR
被参照数での順位
 クラスを利用しているクラスの数
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
7
手順2: 重要クラスのグループの作成

グループの閾値を設定する
 閾値(1)
: 上位 3~10 クラス
 閾値(2) : 上位 10%
 閾値(3) : 上位 20%
これらの閾値は,総クラス数やCR値の分布に応じて増減

閾値を基に,グループを作成
 グループ(1)
: 閾値(1)以上
 グループ(2) : 閾値(2)以上
 グループ(3) : 閾値(3)以上
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
8
手順3:重要クラスのグループの分析 (1/2)


グループ(1),(2),(3)の順で,グループ内のクラスの分析を行う
共通する分析内容
 クラスの役割
 クラス名が役割をあらわしている
 ドキュメンテーションコメントに記述されている
 クラス間の関連
 SPARS-Jの利用関係表示機能を利用し,取得する
 ソースコードから生成したクラス図を利用する
 クラスの,被参照数での順位とCRとの差
 差が大きいクラスに関しては設計的な要因がある
 CRでの方が高順位:重要な箇所で利用されている
 被参照数での方が高順位:広範囲からユーティリティ的に利用されている
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
9
手順3:重要クラスのグループの分析 (2/2)

グループ(1)の分析
 含まれる全てのクラスについて分析
 役割の分析
 可能ならば他のドキュメントも参照
 クラスそのものや,クラスの役割に関するドキュメント
 メソッド名・フィールド名なども参考にする

グループ(2)の分析
 クラス間の関連の分析
 グループ(2)に含まれるクラスでクラス図を生成
 グループ(1)のクラスとの関連に注意する

グループ(3)の分析
 クラス間の関連の分析
 グループ(3)に含まれるクラスでクラス図を生成
 グループ(1),(2)との関連を持つクラスを優先的に分析
 関連の中でも,フィールド宣言や継承などのより強い関連を重視する
 数が多い時は,関連を持たないクラスや下位のクラスは省略する
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
10
適用実験
提案手法の有効性を評価するために,実際のソフトウェア
に対して適用実験を行った
 対象

1.
2.
研究室内で開発されたソフトウェア
企業で開発されたソフトウェア
 手法の一部のみを適用
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
11
適用実験(1):
研究室内で開発されたソフトウェア

コードクローン分析ツールAries
のクローン情報表示部
GUIアプリケーション
 283クラス,約3万行
 リファクタリング可能なクローン
をメトリクスに基づき絞り込む
メトリクスグラフを操作
して条件指定
 Java
クローン情報を読み込み,メ
トリクスグラフを表示
メトリクスグラフを操作し,ク
ローンを絞り込む
条件に合致するクローンの情
報を表示
条件に合うクローンセット
の一覧
選択したクローンセッ
トに含まれるクローン
の情報
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
12
CRの計算・グループ作成

CR値の分布
 上位が極端に高い
6000000
 5クラスほどが特に高い
5000000
閾値は以下の様に決定
 閾値(1):上位5クラス
 閾値(2):10%
 上位28クラス
 閾値(3):20%
Component Rank Value

 一般的なCR値の分布
4000000
3000000
2000000
1000000
0
1
 上位57クラス
11
21
31
41
51
61
71
81
91 101 111 121 131 141 151 161 171 181 191 201 211 221 231 241 251 261 271 281
Classes
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
13
重要クラスの分析

クラス図の生成
 UMLモデリングツール
Jude を使用
 出力される関連辺
継承
実装
クラスのフィールドとして宣言
 グループ(2)以降で使用
グループ(1)では,関連辺がほとんど引かれないため参考になら
ない
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
14
重要クラスの分析:グループ(1)

グループ(1)の5クラス
CloneSet
1.
 クローンセットをあらわす抽象クラス. フィールドとして各種メトリクス値をもつ.
 Fragment(3位)の集合をもつ.
Variable
2.
 クローンの外部で定義される変数(外部定義変数)を表すクラス.
 被参照数と比較してCRは高順位
Fragment
3.
 クローンとなるコード片の情報. Variable(2位)の集合をもつ.
DecralationUnit
4.
 クラスやインタフェースを表すクラス. PackageName(5位)をフィールドとして持つ.
PackageName
5.
 パッケージ名およびクラス名を表すクラス

考察

重要なデータの構成要素を表現するクラスが上位に
 クローン分析時の重要な概念であるクローンセットおよびその関連クラスが確認できた

外部定義変数はクローンとは直接関係無いが,重要な概念
 クローンがリファクタリング可能かを調べるために外部定義変数の個数を利用
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
15
重要クラスの分析: グループ(2)


特徴的なクラスを抜粋して説明
StatementCloneSet
 CloneSetのサブクラス
 文単位のクローンをあらわす
 MetricsGraphから利用されている

ProcessCloneSet, DeclarationCloneSet
 それぞれ,メソッド単位のクローン,クラス単位のクローン
 パッケージ名のみが異なる別の
MetricsGraph から利用されている
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
16
重要クラスの分析: グループ(2)



CloneGroup
 同種の依存関係をもつクローンの集合をあらわすクラス
DeclarationUnitData
 DecralationUnitの集合を扱うクラス
 同様の集合を扱うクラスとして, VariableData, CloneSetData,など
GUI部品
 ClassListViewPopupMenu, PackageTreePopupMenu,
SourceCodePainView, MetricsGraph, …
 名前が役割をそのままあらわしている

考察
 主要なGUI部品であるメトリクスグラフと,そこで扱われるCloneSetのサブクラス
がわかった
 クローングループは重要な概念であるが,比較的順位が低い
 最近実装されたばかりで,ソフトウェア中で占める割合が低いと考えられる

GUI部品として,ポップアップメニューのクラスが上位
 ポップアップメニューが多用されている事がわかる
 画面そのものよりも上位に来ることは,理解の妨げになるかもしれない
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
17
重要クラスの分析: グループ(3)

StatementCloneSetData
 CloneSetDataのサブクラス
 StatementCloneSetの集合をあらわす
 MetricsGraphから,フィールドとして利用されている
 よく似た利用関係を持つクラス群がいくつか存在
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
18
重要クラスの分析: グループ(3)

CloneSetView
 クローンセットの情報を表示するテーブル
 パッケージのみが異なる同名クラスが合計3個存在
 それぞれ,StatementCloneSet, ProcessCloneSet, DeclarationCloneSet
のいずれかをフィールドとして持つ.

FragmentViewの親コンテナ
 クローンとなるコード片に関する情報を表示

考察
 クローンや変数といった実体をあらわすクラスと,GUI部品との関連が確認できた
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
19
適用実験(1):まとめ

Aries 表示部の主要な機能に関連するクラスを確認できた
 重要なデータを表現するクラスと,その利用の流れの概略が
確認できる
クローンや関連する概念を表現するクラス
メトリクスグラフを実現するクラス

Aries 表示部の設計の特徴を捉える事ができた
 集合をあらわすクラスが使われている
 よく似た利用関係を持つクラス群がいくつか確認できた
パターンの存在を認識しておくと理解の助けになる
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
20
適用実験(2):
ある企業で開発されたソフトウェア

Webアプリケーション
 データベース・ロジック・プレゼンテーションの3層構造
 それぞれのレイヤーを担当するクラスの他に,エンティティクラス
等の共通クラス,レイヤー間のデータ受け渡しを行うクラスが存
在
 約850クラス, 11万行

グループ(1) の分析のみ行った
 閾値(1)は,10クラスに設定

JSPファイルは登録しない
 Javaファイルへ変換する必要があるが,環境依存であり自動
化できていない
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
21
結果

グループ(1)に含まれるクラス
 エンティティクラス(共通クラス)が5クラス
 ユーティリティクラス(共通クラス)が2クラス
 データ受け渡しのクラスが3クラス

開発者への聞き取りにより,重要なクラスである事を確認

考察
 JSPファイルを登録しなかった為,利用関係が不完全
 レイヤー間の受け渡しは局所的なクラスで上位なのは不自然とも考えられる
JSPファイルも出来る限り登録したら,結果が変わる可能性はある
 実際に大きな部分を占めている可能性は高い
 関連する2レイヤー(データベース,ロジック)で全体の半分以上の480クラス
 データ受け渡しがそれぞれのレイヤー中で幅広く利用されている
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
22
まとめ
コンポーネントランク法を用いてソフトウェアのクラス設計を分
析する手法を提案
 実際のソフトウェアに対する適用実験により,有効性を確認

 主要なデータとその利用の流れがわかりやすくなる

今後の課題
 適切な閾値の設定方法
 クラス図の自動生成
 より多くの適用実験
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
23

終わり
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
24

参考スライド
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
25
クラス図: グループ(1),(2)
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
26
クラス図: グループ(1),(2),(3)
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
27
クラス図:全部
コピーした図が大きすぎるため、貼り付けできません。
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
28
クラス図:全部(縮小)
2015/10/1
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
29