650 likes | 759 Views
既存ソフトウェア資産活用時代のための ソフトウェア検索システム. 大阪大学 井上克郎. ソフトウェア空間. SourceForge. 巨大なオープンソース開発支援サイト ソフトウェア検索、版管理、連絡支援 ... プロジェクト数 ≧ 24 万件 ユーザー数 ≧ 260 万人. ソフトウェア空間. プログラムの種類 可算無限個ある しかし、よく似たプログラムを繰り返し同じ組織や違う場所で作っている(ような気がする) 昔同じようなプログラム作ったような記憶 もっと良いプログラムがネットにあった. ソフトウェアの蓄積と管理. 蓄積
E N D
既存ソフトウェア資産活用時代のためのソフトウェア検索システム既存ソフトウェア資産活用時代のためのソフトウェア検索システム 大阪大学 井上克郎
SourceForge • 巨大なオープンソース開発支援サイト • ソフトウェア検索、版管理、連絡支援 ... プロジェクト数 ≧ 24万件 ユーザー数 ≧ 260万人
ソフトウェア空間 • プログラムの種類 • 可算無限個ある • しかし、よく似たプログラムを繰り返し同じ組織や違う場所で作っている(ような気がする) • 昔同じようなプログラム作ったような記憶 • もっと良いプログラムがネットにあった ...
ソフトウェアの蓄積と管理 蓄積 • 社内資産をレポジトリに保存 • オープンソースプロジェクトとして公開保存 何でもとりあえず貯めることで、比較的簡単 管理 • ソフトウェア部品の登録・整備 • 開発資産の整理 同類をまとめる、違うものを分類することは、知恵、努力が必要であまりうまくいかない
ソフトウェア空間の探索 • 閲覧(ブラウジング) • 整理されていることが前提 • 名前 • 時間 • 種類 • あまり現実的ではない? • 検索(サーチ)大量の候補の中から求めるものを見付ける • 検索のキーをユーザーが提供する • ユーザの開発作業のコンテキストからキーを見つけ自動的に推薦
検索の手法 • キーワード検索 • 関数、クラス名 • パラメーター • 変数 • コメント • プログラム断片検索 • 不完全な構造 • 完全なプログラム いずれにせよ計算機パワーで多量なデータの分析・整理が必要 ... 31 @author Ceki Gülcü */ 32 public class SortAlgo { 33 34 final static String className = SortAlgo.class.getName(); 35 final static Logger LOG = Logger.getLogger(className); 36 final static Logger OUTER = Logger.getLogger(className + ".OUTER"); 37 final static Logger INNER = Logger.getLogger(className + ".INNER"); 38 final static Logger DUMP = Logger.getLogger(className + ".DUMP"); 39 final static Logger SWAP = Logger.getLogger(className + ".SWAP"); 40 41 int[] intArray; 42 43 SortAlgo(int[] intArray) { 44 this.intArray = intArray; 45 } 46 ...
関連研究(1)ソフトウェアサーチエンジン • Google, Google Code Search (Google) • Koders (Black Duck) • 3GB OSS, C/C++/C#/... 30言語 • Krugle (Krugle Enterprise) • OSSプロジェクトサポート、サーチエンジン • SourceForge (Geeknet Inc.) • SPARS/J • 阪大、他のコードサーチエンジンより先行 • CodeBroker, Sourcerer, Merobase, Exemplar, Strathcona, Assieme, XSnippet, ...
関連研究(2)ソフトウェア部品推薦 • Historical Approachユーザの履歴、利用実績を収集し、 • そのまま提供 • ユーザのパターンを協調フィルタリング等で選別して提供 • Social Approach開発者やユーザのネットワークを作ってエキスパートに聞く
関連研究(3)ソフトウェア部品のランキング関連研究(3)ソフトウェア部品のランキング • 被参照数 • 参照するものによって価値付け • コンポーネントランク、ページランク • 高い価値のあるものに参照されるものは価値が高くなる • 参加した開発者の価値 • KarmaValue:開発者ごとの価値
計算ソフトウェア工学 • Computation Intensive Software Engineering CISE • 高い品質のソフトウェアを効率よく作るために • 高い計算能力の環境を使う • 大規模なデータを扱う • オープンソースソフトウェア • 開発データ … • 例 • Search-based software engineering • Mining software repositories • Empirical approaches to software engineering
計算ソフトウェア工学の背景 • ソフトウェア工学という言葉が生まれて40年 • どれだけ進歩したか? • ICSE40周年 40年前の議論は、多くは今も通じる • 小規模な改善:ターゲットは個人、プロジェクト • 大きく変わったのはハードウェア環境 • 巨大なCPUパワーとディスク容量、高速ネットワーク • ソフトウェアに関する人間の英知が、ソフトウェア生産物に凝縮されているとすれば、今まで、人間が営々として構築してきた、ソフトウェアに関する全ての英知を、集積することは不可能ではない??? • 強力なネットワークを利用して、入手可能なソフトウェア生産物を集め、解析すれば、ソフトウェアに関する深い知見が生まれないか??? e.g., ソフトウェアの変遷等 • ソフトウェアの構築にもいろいろな可能性を探索し、組み合わせの可能性を広く探る構成的開発はできないか? • 計算機パワーに依存した、計算を主体としたソフトウェア工学手法 ⇒ 計算ソフトウェア工学 • 素人には手出しできない、プロのSE領域確立したい
賢いソフトウェアライブラリ • 使えるソフトウェアライブラリを集めてくる • 集めたライブラリの内部や外部との関係を詳しく解析する • ライブラリの部品ごとに、その有用度をランク付け • ユーザーからのキーワードによる問い合わせに対して、ランクに応じた回答 Component Rank Model
コンポーネントグラフ System Y System X A B F C G D E H I component use relation
0.1 0.1 0.1 0.2 0.2 0.1 0.1 0.05 0.05 頂点の重み System Y System X A B F C G D E H I 全頂点の重み合計 = 1 ... (1) 重みが重要度を示す指標
0.05 0.2 d=1/4 0.05 d=1/4 B 0.05 d=1/4 0.05 d=1/4 0.15 0.05 d: 分配率 辺の重み A 0.4 0.2 w(A) = 全出力辺の重みの合計... (2) 全入力辺の重みの合計 = w(B) ... (3)
重みの定義 • (1)~(3)の制約に基づく連立方程式が得られる . = W: node weight vector Dt: transposed matrix of distribution ratio
0.34 0.33 0.17 0.17 0.33 0.33 0.33 重みの伝播 A B C
0.33 0.17 0.175 0.175 0.5 0.17 0.5 重みの伝播 A B C
0.25 0.25 0.345 0.175 重みの伝播 0.5 0.175 A B 0.345 C
重みの伝播 0.4 0.2 0.2 A B 0.2 0.4 0.2 0.4 C 安定した重み (固有ベクトル) Component Rank : 重みによる頂点の順序
0.02 0.01 0.01 0.05 0.03 0.001 0.1 マルコフモデル • ユーザ視点のマルコフ連鎖 • 一定時間でどこに移動するか • 頂点の重みはユーザ視点がどれだけその頂点に留まっているかを示す
疑似利用関係 A B C • 計算収束のために付加する • 各頂点から(つながっていない)全頂点へ
C G BF AD E 集約部品グラフ 部品の集約 C G B F A D E 部品グラフ
コンポーネントランクの評価システム • inheritance • method call • attribute access • abstract class impl. input similarity measure by SMMT use relation extraction .java file = component similarity criterion t: sharing 80% statements clustered graph construction clustering weight ratio p between real and pseudo edges : 0.85 output de-clustering to original graph node weight computation component-rank pairs equal distribution ratio d to outgoing edges
実験 1JDK1.3.0 575,000 lines, 1877 components 7 minutes on PC (Pentium IV, 2GHz, 2GB) rank class name weight 1 java.lang.Object 0.161262 java.lang.Class 0.087123 java.lang.Throwable 0.055104 java.lang.Exception 0.031035 java.io.IOException 0.013436 java.lang.StringBuffer 0.012147 java.lang.SecurityManager 0.011698 java.io.InputStream 0.010279 java.lang.reflect.Field 0.0094810 java.lang.reflect.Constructor 0.00936 ... ...1256 sunw.util.EventListener 0.00011 ... ...1256
実験 2:ある企業のライブラリ • Javaアプリケーション開発用フレームワークとそのアプリケーション • 5 applications + framework • 1538 components, 339 clustered nodes • フレームワーククラスとそのデータ構造定義のクラスが高いランク
議論1: 重み計算モデル Reference Count Model Component Rank Model B B 0.31 0.2 A A 0.6 0.33 E D C E D C 0 0 0.2 0.03 0.03 0.30
0.25 0.25 A X Clustering B Y 0.25 0.25 議論2: 集約方法(1) • 単純な重複部品は消去される A A X B B Y original copy others
0.3 0.2 A X Clustering B C Y 0.15 0.15 0.2 議論2: 集約方法(2) • 他の環境で再利用されるものは重みが加わる A A X B C Y original modified others
議論 3: 類似度や疑似利用関係 • 得られるランキングは類似度の基準t には敏感ではない • tが0.8以下だと異なる部品が同じクラスタに入る • いろいろな擬似利用辺の重みの割合p で実験 • p が0.75 - 0.95の間で安定している
関連する考え • 文書の視点の移動マルコフモデル • Influence Weight: 論文・文献の価値 • Page Rank: インターネット上でのWebの価値 明確な利用関係を使っている 集約の考えない(ソフトウェアでは集約は重要) • 再利用性の指標 • 部品やそのインターフェースを利用したいろいろな指標が提案されている 間接的な指標(コンポーネントランクは直接指標)
SPARS-J • Software Product Archive, Analysis, and Retrieve System for Java • 新しい発想に基づいたソースコード蓄積・検索システム • Javaを対象に • 日々の管理は全自動 • 静的解析技術を用いて広域の依存関係抽出 • メトリクス技術を用いて類似部品抽出
SPARS-Jのランク手法 • コンポーネントランクCR • 検索語の重要度(TF-IDF) CR+TF-IDF
SPARS-Jの概要 検索 登録 ユーザー Java ファイル群 表示 依存関係 キーワード 解析・登録 キーワード検索 パッケージ階層 表示 レポジトリ Webブラウザ SPARS-J
SPARS-Jの機能の概要(登録) • Javaの1クラス(*.java) = 検索単位 :部品 • 指定したファイル群やディレクトリ群に含まれる部品の自動検索 • クラス間の関係(継承,インターフェース,呼び出し,参照等)の解析 • 部品内に含まれるキーワードの抽出 • DB(BerkeleyDB)に登録
SPRAS-Jの機能(検索・表示) • キーワード検索/パッケージ木ブラウズ • 部品のソース,呼ばれている・呼んでいるクラス・メソドの表示や各種メトリクス表示 • 条件付検索(クラス名,コメント,・・・) • 重要な部品を上位に表示 • 部品間の類似度を計測―同一部品集約 • 日本語/英語両用
パッケージブラウザ パッケージブラウザ サブパッケージ一覧クラス一覧 メソッド一覧メソッド定義行へ移動
部品詳細表示(類似部品群) SPARS技術解説
部品詳細表示(利用する部品) SPARS技術解説
部品詳細表示(利用される部品) SPARS技術解説
部品詳細表示(メトリクス) SPARS技術解説
SPARS-Jの利用イメージ • 一つの開発中のプロジェクトのソース管理 • 他人が作った部品が見える • 前の版も調べられる • 過去の類似プロジェクトのソース管理 • 部品の依存関係が分かる • 再利用率,新規開発率が分かる • 組織の全プロジェクトのソース管理 • 何か使われて何がいらないか • 全資産量はどれだけあるか
適用例 • 研究室内のJavaの資産管理 • インターネット上から入手できるプログラムの検索(18万クラス) • あるソフトウェアハウスのJavaフレームワークにおける資産管理 • ある食品系会社のJava資産管理 ...
コードの類似性 難しい課題 • 構文的に似ている • 意味的に似ている • 全体が似ている • 部分的に似ている • 類似の閾値は …