ソースコードの編集内容を入力とした ソフトウェア部品の自動検索

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

データベースの基礎知識 ACEESS の基本操作. データベースの基礎知識 データベース  特定のテーマや目的に毎のデータの集合体 データベースソフトウェア  データベースを作成、管理するソフトウェアの総 称 Oracle(Oracle) IBM(DB2) Microsoft(SQL Server)
国内線で新千歳空港を利用している航空会社はどこですか?
ソースコードの編集内容を用いた ソフトウェア部品の自動推薦手法
情報伝播によるオブジェクト指向プログラム理解支援の提案
バイナリ形式コンポーネントの 収集・解析・検索システムの開発
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
Graduate School of Information Science and Technology, Osaka
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
Javaソフトウェア部品 解析・検索システムSPARS-Jの構築
類似するコーディングパターンの 利用状況調査ツールの提案
メソッド間の依存関係を利用した プログラム理解支援手法の提案と実現
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
利用実績に基づくソフトウェア部品検索システムSPARS-J
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
プログラム理解におけるThin sliceの 統計的調査による有用性評価
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェア中の 頻出コード片を用いた コード補完手法の提案
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
ソースコードの編集状況に応じた ソフトウェア部品の自動推薦システム
統合開発環境のための プログラミング言語拡張 フレームワーク
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
知識ベースの試作計画 ●●●研究所 ●●●技術部 稲本□□ 1997年1月.
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム理解のための 付加注釈 DocumentTag の提案
Presentation transcript:

ソースコードの編集内容を入力とした ソフトウェア部品の自動検索 大阪大学の島田です. 本研究では,ソースコードの編集内容を入力として, ソフトウェア部品を自動的に検索・提示するシステムを開発していますので, そのことについて発表します. ○島田隆次, 市井誠, 早瀬康裕, 松下誠, 井上克郎 大阪大学 大学院情報科学研究科

ソフトウェア部品の再利用 ソフトウェアの品質や生産性の向上のために, ソフトウェア部品の再利用が行われている ソフトウェア部品(部品) モジュールやクラスなど,ソフトウェアの構成要素 再利用 既存の部品の一部分または全体を別のシステムで利用すること 最初に,本研究の背景について説明します. 本研究の背景には「ソフトウェア部品の再利用」があります. モジュールやクラスなど,ソフトウェアの構成要素をソフトウェア部品,または単に部品と言います. ソフトウェア開発の際には,既存の部品を適切に再利用することで ソフトウェアの品質や生産性が向上すると言われています.

部品検索システム 大量の部品群から目的のものを探すのは大変 大量の部品を蓄積して管理・検索を行うシステム 我々の研究グループで開発しているSPARSなど 開発者はキーワード検索などで部品を検索する しかし,一般に部品は大量に存在するので,その中から目的のものを探すのは大変な作業となることがあります. そのため現在までに,大量の部品を蓄積して管理・検索を行うためのシステムとして部品検索システムがいくつか開発されています. 我々の研究グループでもSPARSという部品検索システムを開発しています. ソフトウェア開発の際には,開発者は部品検索システムを使い, 必要な部品をキーワード検索などで取得して再利用を行います.

部品検索システムを利用する際の問題点 必要な部品を見つけることが難しい 検索しないと部品を見つけることができない 部品についての知識が必要になる 適切な検索キーワードが思いつかない 検索しないと部品を見つけることができない 開発者が存在を期待していない部品は検索されない しかし,このシステムを利用してソフトウェア開発を行う際には次のような問題点があります. それは必要な部品を見つけることが難しいという点です. 適切な部品を得るためには,その部品についての知識が必要になることがあります. また適切な検索キーワードが思いつかない場合もあります. 皆さんの中にもWebなどでうまく検索ができなかった経験のある方がおられるかもしれません. また,検索を行わないと部品を見つけることができないという点も問題になります. 開発者が存在を期待していない部品は検索されないので, 検索しようとせずに同じものを自分で作ってしまうことは防げません. これらの問題が部品の再利用を難しくしています.

部品の自動検索 開発者がソースコードを編集している時に,明示的な指示なしに,システムが自動的に検索条件を生成して検索を行うこと 利点 開発者が検索しようとしなくても検索が行われる 開発者が検索対象について知っている必要がない 先の問題に対して自動検索が有効であると言われている* * Ye, Y. and Fischer, G.: Reuse-Conducive Development Environments, Automated Software Engineering, Vol. 12, No. 2, pp. 199–235 (2005). この問題に対して,Yeらによって部品の自動検索という手法が提案されています. 自動検索とは,開発者がソースコードを編集している時に, 明示的な指示なしに,システムが自動的に検索条件を生成して検索を行うことです. このため,開発者が検索しようとしなくても検索が行われる,であるとか, 開発者が検索対象について知っている必要がないといった利点があります. この自動検索が,さきほど述べたような問題に対して有効であると言われています.

従来研究 : CodeBroker メソッドを書き始めたときに再利用可能なメソッドを自動検索するシステム 利用する情報 問題点 メソッドのドキュメントコメント メソッドのシグネチャ 問題点 自動検索されることを意識してコーディングする必要がある 利用できる場面が限られる その自動検索を実装した従来研究として,CodeBrokerがあります. これはあるメソッドを書き始めたときに,そのメソッドのドキュメントコメントとシグネチャを元に, 再利用可能なメソッドを自動検索するシステムです. ドキュメントコメントとは,メソッドの機能などを説明するための特殊なコメントのことです. シグネチャとは,メソッドの引数や戻値の型の情報です. CodeBrokerの問題点は,自動検索されることを意識してコーディングする必要があるということです. CodeBrokerが自動検索を行えるようなコーディングスタイルを開発者に強制することになってしまい, 何もしなくても検索してくれるという自動検索の利点を損なうことになってしまっています. また,利用できる場面が限られるという問題もあります. ドキュメントコメントとメソッドのシグネチャを書いた後にしか検索が行えないので, メソッドの中身を書いている時には検索できない, といった制限があります.

本研究の概要 目的 方針 先の問題を改善した部品自動検索システムの開発 コーディングスタイルに依存しない より多くの場面で利用できる 方針 ソースコード編集中にソースコードから特徴的な情報(特徴情報)を抽出して自動検索を行う ドキュメントコメント 通常のコメント 利用しているメソッド 出現する識別子とその型 そこで本研究では,先ほど述べたようなCodeBrokerの問題を改善し, 普段どおりのコーディングスタイルで,より多くの場面で利用できる 部品自動検索システムを開発することを目指しています. そのために,編集中のソースコードから特徴的な情報(特徴情報)を抽出して検索を行います. 本研究では,CodeBrokerでも利用されているドキュメントコメントのほかに, 通常のコメントや,利用しているメソッド,出現する識別子やその型を特徴情報として利用します.

利用シナリオ クラスの一部を入力 システムが類似部品を検索・提示 必要ならプロジェクトに部品を取り込んで置き換え 大きな整数を扱うクラスが欲しいけど 誰も作ってないだろうから自作しよう class LargeInteger { private int[] data;   public LargeInteger add(LargeInteger i) {}   public LargeInteger sub(LargeInteger i) {} クラスの一部を入力 本システムの利用シナリオを説明します. たとえば,開発者がintやlong型では扱えない大きな整数を扱いたいと思っています. このとき開発者が既存部品の検索を行わなかった場合を考えます. 開発者がコードを書いていくと, システムがそれに従って特徴情報を自動的に抽出して検索を行い, 「LargeInteger」という名前,「内部にintの配列」を持つこと,「addやsubのメソッド」を持つことなどから 類似部品として既存のBigIntegerクラスを検索し提示します. 最後に,開発者はこのクラスをプロジェクトに取り込んで,書きかけのLargeIntegerクラスと置き換えることができます. 類似部品の提示 1 BigInteger arbitary-precision integer 開発者 開発環境

検索手法 編集を監視し,セミコロン入力等の編集の区切りを検出 編集中のソースコードから特徴情報を抽出 似た特徴情報を含む部品をLSIで検索 入力:編集中のソースコードに含まれる特徴情報とその重み 出力:似た特徴情報を含む部品 LargeInteger add sub AddOp eval getChild BigInteger add sub SubOp eval getChild 特徴情報 次に本システムの検索手法について説明します. まずシステムは,開発者によるソースコードの編集を監視します. セミコロンの入力などの編集の区切りを検出したら, システムは編集中のソースコード内にある特徴情報を抽出します. 抽出する際には編集中の位置に近い特徴情報ほど大きな重みをつけるようにします. これによって,編集中の位置に適した部品が検索できます. また,蓄積された部品群からも事前に特徴情報を抽出しておきます. 検索処理には,情報検索の分野で広く用いられているLSIという手法を用います. LSIは入力に類似したものを多数の文章集合から検索する手法です. LSIによる検索では,編集中のソースコードに含まれる特徴情報を入力として検索を行い, 出力として似た特徴情報を含む部品を得ます. LSIについての詳細はここでは省かせていただきます. 編集中の ソースコード 蓄積された部品群 (オープンソースソフトウェア集合など)

システムの構成 クライアント・サーバ型 クライアント サーバ 編集の監視,特徴情報の抽出,検索結果の提示 部品データベースに対する検索 索引  クライアント・サーバ型 クライアント 編集の監視,特徴情報の抽出,検索結果の提示 サーバ 部品データベースに対する検索 クライアント サーバ 統合開発環境 Eclipse 部品 データ ベース 編集 エディタ 開発者 編集 位置 ソース コード 本システムの構成について説明します. システムは図のようにクライアントとサーバから成っています. クライアントは開発者による編集を監視し,編集中のソースコードから特徴情報の抽出を行い,検索結果を提示します. サーバは部品データベースに対する検索を行います. このようにクライアントサーバ構成にすることで再利用する部品をサーバ側で一元的に管理できるようになっています. 検索クエリ 検索クエリ生成部 部品検索部 索引作成部 索引 事前に構築 部品の提示 部品提示部 部品一覧 赤色が本研究で実装した部分

システムの動作 事前に部品データベースから索引を作成 編集の区切りを検出して検索クエリを生成 索引を用いて部品検索 得られた部品を開発者に提示 クライアント サーバ 統合開発環境 Eclipse 部品 データ ベース 編集 エディタ 開発者 編集 位置 ソース コード 次に,このシステムがどのように動作するかを説明します. まず事前に,索引作成部が部品のソースコードを格納した部品データベースを解析し, 検索に用いる索引を作成しておきます. 開発者がソースコードを編集している間, 検索クエリ生成部は,ソースコードの編集を監視し, 編集の区切りを検出して検索クエリを生成します. 生成された検索クエリはサーバの部品検索部に送信されます. 部品検索部は索引を用いて部品検索を行い,検索結果の部品を部品データベースから取得します. 最後に部品提示部が見つかった部品の一覧を開発者に提示します. 検索クエリ 検索クエリ生成部 部品検索部 索引作成部 索引 事前に構築 部品の提示 部品提示部 部品一覧 赤色が本研究で実装した部分

java.math.BigInteger : : 利用シナリオでの動作例 開発者がソースコードを入力 編集の区切りを検出して特徴情報を抽出,検索クエリとして送信 索引を用いて部品検索 得られた部品を開発者に提示 カーソル 0.5 0.6 0.8 0.9 重み class LargeInteger { private int[] data;   public LargeInteger add(LargeInteger i) {}   public LargeInteger sub(LargeInteger i) {} クライアント サーバ 統合開発環境 Eclipse 部品 データ ベース 編集 java.math.BigInteger : : エディタ 開発者 編集 位置 ソース コード ではこの図を用いて,先ほどのシナリオでどのように検索が行われるかを説明します. まず,開発者がソースコードを入力します. システムは入力を監視して,セミコロンや中括弧などの入力を編集の区切りとして検出します. これらの区切りが検出されたら,そのソースコード内から識別子などの特徴情報を抽出します. ここでは,クラス名であるLargeIntegerや,フィールドであるintの配列のdata,メソッド名であるaddとsubが抽出されます. このとき,現在編集中の位置つまりカーソルのある位置に近い特徴情報ほど大きな重みをつけます. この例では,一番近いsubが一番大きな重み,一番遠いLargeIntegerが一番小さな重みになります. 次にそれらの特徴情報を検索クエリとしてサーバに送信します. サーバでは検索クエリを受け取り,索引を使ってLSIの手法に従って部品の検索を行います. そして,検索の結果このようにBigIntegerをはじめとした類似部品の一覧が得られ,開発者に提示されます. 検索クエリ 検索クエリ生成部 部品検索部 索引作成部 (LargeInteger, 0.5), (int[] data, 0.6), (add, 0.8), (sub, 0.9) 重み 特徴情報 索引 事前に構築 部品の提示 部品提示部 部品一覧 赤色が本研究で実装した部分

スクリーンショット(自動検索) エディタ 部品一覧 本システムの画面はこのようになっています. 本システムは統合開発環境であるEclipseのプラグインとして動作するので, 開発時には透過的に使うことができます. 先ほどのシナリオのように,エディタでソースコードを編集していくと, 下の画面に再利用可能な部品の一覧が表示されます. 部品一覧

スクリーンショット(ソース表示) 部品のソースコードが表示される 見たい部品をダブルクリックすると… 中身を見たい部品があった場合は,一覧から部品をダブルクリックすると, このように部品のソースコードを見ることができるようになっています. 見たい部品をダブルクリックすると…

スクリーンショット(インポート) 部品がプロジェクトにインポートされる 右クリックして「インポート」を選ぶと… この部品をプロジェクトで使いたい場合は,一覧で部品を右クリックしてインポートを選ぶと, このようにプロジェクトにインポートされます. 右クリックして「インポート」を選ぶと…

実装状況 部品検索部,部品提示部 検索クエリ生成部,索引作成部 実装済 ドキュメントコメントを利用する部分のみ実装済 他の特徴情報を利用する部分は現在実装中 システムの現在の実装状況としては,ドキュメントコメントを利用する部分の実装が完了しており, 特徴情報としてドキュメントコメントのみを用いた検索ができる状態になっています. 現在,他の特徴情報も利用できるように実装をすすめているところです.

まとめと今後の課題 ソフトウェア部品の自動検索システムを開発 今後の課題 コーディングスタイルに依存しない 多くの場面で利用できる メソッドの中身を書いているとき クラスの定義を書いているとき 今後の課題 未実装部分の実装 大量の部品群を対象とした適用実験 検索時間(応答性) 検索精度 では,まとめに入ります. 本研究では,従来研究であるCodeBrokerと比べて, コーディングスタイルに依存せず,より多くの場面で利用できる ソフトウェア部品の自動検索システムを開発しています. 今後の課題としては,未実装部分の実装を進めること, 大量の部品群を対象とした,応答性や検索精度を評価するための適用実験を考えています.

部品に関する知識 GUI部品の これを検索したい 検索するときに必要な知識 「これ」では検索できない 「GUI部品」では検索が困難 「ボタン」という名前が必要

より多くの情報を利用 同じパッケージ内の他のソースコード 統合開発環境によって得られる情報 プロジェクト内の他のソースコード 編集中のソースコードの直前に編集していたソースコード 関連がある可能性が高い 編集履歴

SPARSを用いる理由 本研究室で開発されている 自動検索のため頻繁にクエリを投げるので LAN内にサーバを置きたい

Component Rank 法 部品検索システムSPARSの手法 部品の重要度を評価する手法 重要な部品を優先的に提示することが可能 多くの部品から利用されている部品は重要 重要な部品から利用されている部品は重要 重要な部品を優先的に提示することが可能

編集の区切り ある程度の編集が完了したことを表す 種類 一文字編集するごとに検索すると効率が悪いため 入力による カーソル移動による セミコロン「;」の入力 中括弧「{」「}」の入力 コメント記号「/*」「*/」の入力 カーソル移動による ある文を編集後,カーソルが別の文に移動 コメントを編集後,カーソルがコメント外に移動