170 likes | 285 Views
ソースコードの編集内容を入力と した ソフトウェア 部品の自動検索. ○島田隆次 , 市井誠 , 早瀬康裕 , 松下誠 , 井上克郎 大阪大学 大学院情報科学研究科. ソフトウェア部品の再利用. ソフトウェアの品質や生産性の向上のために, ソフトウェア部品 の 再利用 が行われている ソフトウェア部品 ( 部品 ) モジュールやクラスなど,ソフトウェアの構成要素 再利用 既存の部品の一部分または全体を別のシステムで利用すること. 部品検索システム. 大量の部品群から目的のものを探すのは大変 大量の部品を蓄積して管理・検索を行うシステム
E N D
ソースコードの編集内容を入力としたソフトウェア部品の自動検索ソースコードの編集内容を入力としたソフトウェア部品の自動検索 ○島田隆次, 市井誠, 早瀬康裕, 松下誠, 井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア部品の再利用 ソフトウェアの品質や生産性の向上のために,ソフトウェア部品の再利用が行われている • ソフトウェア部品(部品) • モジュールやクラスなど,ソフトウェアの構成要素 • 再利用 • 既存の部品の一部分または全体を別のシステムで利用すること
部品検索システム • 大量の部品群から目的のものを探すのは大変 • 大量の部品を蓄積して管理・検索を行うシステム • 我々の研究グループで開発しているSPARSなど • 開発者はキーワード検索などで部品を検索する
部品検索システムを利用する際の問題点 • 必要な部品を見つけることが難しい • 部品についての知識が必要になる • 適切な検索キーワードが思いつかない • 検索しないと部品を見つけることができない • 開発者が存在を期待していない部品は検索されない
部品の自動検索 • 開発者がソースコードを編集している時に,明示的な指示なしに,システムが自動的に検索条件を生成して検索を行うこと • 利点 • 開発者が検索しようとしなくても検索が行われる • 開発者が検索対象について知っている必要がない • 先の問題に対して自動検索が有効であると言われている* * Ye, Y. and Fischer, G.: Reuse-Conducive Development Environments, Automated SoftwareEngineering, Vol. 12, No. 2, pp. 199–235(2005).
従来研究 : CodeBroker • メソッドを書き始めたときに再利用可能なメソッドを自動検索するシステム • 利用する情報 • メソッドのドキュメントコメント • メソッドのシグネチャ • 問題点 • 自動検索されることを意識してコーディングする必要がある • 利用できる場面が限られる
本研究の概要 • 目的 • 先の問題を改善した部品自動検索システムの開発 • コーディングスタイルに依存しない • より多くの場面で利用できる • 方針 • ソースコード編集中にソースコードから特徴的な情報(特徴情報)を抽出して自動検索を行う • ドキュメントコメント • 通常のコメント • 利用しているメソッド • 出現する識別子とその型
利用シナリオ • クラスの一部を入力 • システムが類似部品を検索・提示 • 必要ならプロジェクトに部品を取り込んで置き換え 大きな整数を扱うクラスが欲しいけど誰も作ってないだろうから自作しよう class LargeInteger { private int[] data; • public LargeInteger add(LargeIntegeri) {} • public LargeInteger sub(LargeIntegeri) {} クラスの一部を入力 類似部品の提示 1 BigIntegerarbitary-precision integer 開発者 開発環境
検索手法 • 編集を監視し,セミコロン入力等の編集の区切りを検出 • 編集中のソースコードから特徴情報を抽出 • 似た特徴情報を含む部品をLSIで検索 • 入力:編集中のソースコードに含まれる特徴情報とその重み • 出力:似た特徴情報を含む部品 • LargeInteger • add • sub • AddOp • eval • getChild • BigInteger • add • sub • SubOp • eval • getChild 特徴情報 編集中のソースコード 蓄積された部品群 (オープンソースソフトウェア集合など)
システムの構成 クライアント・サーバ型 • クライアント • 編集の監視,特徴情報の抽出,検索結果の提示 • サーバ • 部品データベースに対する検索 クライアント サーバ 統合開発環境Eclipse 部品データベース • 編集 エディタ 開発者 編集位置 ソースコード 検索クエリ 検索クエリ生成部 部品検索部 索引作成部 索引 事前に構築 部品の提示 部品提示部 部品一覧 赤色が本研究で実装した部分
システムの動作 • 事前に部品データベースから索引を作成 • 編集の区切りを検出して検索クエリを生成 • 索引を用いて部品検索 • 得られた部品を開発者に提示 クライアント サーバ 統合開発環境Eclipse 部品データベース • 編集 エディタ 開発者 編集位置 ソースコード 検索クエリ 検索クエリ生成部 部品検索部 索引作成部 索引 事前に構築 部品の提示 部品提示部 部品一覧 赤色が本研究で実装した部分
利用シナリオでの動作例 • 開発者がソースコードを入力 • 編集の区切りを検出して特徴情報を抽出,検索クエリとして送信 • 索引を用いて部品検索 • 得られた部品を開発者に提示 重み 0.5 class LargeInteger { private int[] data; • public LargeInteger add(LargeIntegeri) {} • public LargeInteger sub(LargeIntegeri) {} 0.6 クライアント サーバ 0.8 統合開発環境Eclipse 部品データベース • 編集 エディタ java.math.BigInteger:: 開発者 0.9 編集位置 ソースコード カーソル 検索クエリ 検索クエリ生成部 部品検索部 索引作成部 特徴情報 重み 索引 事前に構築 部品の提示 部品提示部 部品一覧 (LargeInteger, 0.5), (int[] data, 0.6),(add, 0.8), (sub, 0.9) 赤色が本研究で実装した部分
スクリーンショット(自動検索) エディタ 部品一覧
スクリーンショット(ソース表示) 部品のソースコードが表示される 見たい部品をダブルクリックすると…
スクリーンショット(インポート) 部品がプロジェクトにインポートされる 右クリックして「インポート」を選ぶと…
実装状況 • 部品検索部,部品提示部 • 実装済 • 検索クエリ生成部,索引作成部 • ドキュメントコメントを利用する部分のみ実装済 • 他の特徴情報を利用する部分は現在実装中
まとめと今後の課題 • ソフトウェア部品の自動検索システムを開発 • コーディングスタイルに依存しない • 多くの場面で利用できる • メソッドの中身を書いているとき • クラスの定義を書いているとき • 今後の課題 • 未実装部分の実装 • 大量の部品群を対象とした適用実験 • 検索時間(応答性) • 検索精度