1 / 33

既存ソフトウェアの変更履歴を利用したソースコード修正支援システム

既存ソフトウェアの変更履歴を利用したソースコード修正支援システム. 井上研究室 田原 靖太. 研究の背景 (1/3). 近年のソフトウェアの大規模化・複雑化 版管理システム の利用が拡大 ファイルの状態を「 リポジトリ 」に履歴として登録 新たな版( リビジョン )の登録の際にコメントを付加 過去の開発において版管理システムに蓄積されてきた履歴を,今後の開発・保守作業に役立てたい. 研究の背景 (2/3). 現状. 既存のリポジトリに蓄積された情報を,以後の開発に有効活用されているとはいえない. 原因.

jeneva
Download Presentation

既存ソフトウェアの変更履歴を利用したソースコード修正支援システム

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 既存ソフトウェアの変更履歴を利用したソースコード修正支援システム既存ソフトウェアの変更履歴を利用したソースコード修正支援システム 井上研究室 田原 靖太

  2. 研究の背景(1/3) • 近年のソフトウェアの大規模化・複雑化 • 版管理システムの利用が拡大 • ファイルの状態を「リポジトリ」に履歴として登録 • 新たな版(リビジョン)の登録の際にコメントを付加 • 過去の開発において版管理システムに蓄積されてきた履歴を,今後の開発・保守作業に役立てたい 平成13年度 修士論文発表会

  3. 研究の背景(2/3) 現状 既存のリポジトリに蓄積された情報を,以後の開発に有効活用されているとはいえない 原因 既存の版管理システムを用いて,蓄積された情報の中から,開発者が必要とする情報を選び出すのが困難 平成13年度 修士論文発表会

  4. 研究の背景(3/3) • すでに保守段階に入っているソフトウェアに欠陥が発見された! • リポジトリには,様々な修正の履歴が蓄積 • 過去のプロジェクトの中で今回と同様の欠陥の修正の履歴が残っていれば,それを参照したい • しかし,実際にどのリポジトリの,どのファイルの履歴を見てよいか見当がつかない 同様の箇所に対する修正の履歴をリポジトリから検索したい 平成13年度 修士論文発表会

  5. 既存のシステム CVSSearch • 版管理システムCVSのリポジトリから目的のソースコードを検索するシステム • キーワードを入力とし,リポジトリへの登録時のコメントを検索することによるソースコードの取り出しが可能 問題点 ソースコードの一部分をそのまま用いた検索システムが欲しい • リポジトリへの登録時のコメントを検索 • コメントが貧弱なら,検索能力が低下 • キーワードでの取り出し • キーワードをいつもうまく書けるとは限らない 平成13年度 修士論文発表会

  6. 研究の目的 • 過去のプロジェクトにおける,プログラムの修正に関する情報から,現在のソースコードに合ったものを見つけたい • ソースコード修正支援手法DIMの提案 • 修正したいソースコード片を入力として,既存ソフトウェアのソースコード変更履歴を検索 • 検索結果を提示することにより,ソースコードの修正を支援 • DIMに基づくソースコード修正支援システムCoDSの試作 平成13年度 修士論文発表会

  7. ソースコード修正支援手法DIM 1.変更情報データベースの構築 2.変更情報データベースの検索 3.検索結果の表示 平成13年度 修士論文発表会

  8. 変更情報データベースの構築 • 既存のリポジトリからソースコード変更履歴を取り出し,新たな検索用データベースに格納 • 検索時のコスト削減が図れる 各リビジョンにおいて,次のリビジョンで変更された部分を抜き出してデータベースに登録 リポジトリ 検索用 データベース 変更部分コード 平成13年度 修士論文発表会

  9. 利用者から入力されたソースコード片と,データベースの中のソースコード部分との比較を行う利用者から入力されたソースコード片と,データベースの中のソースコード部分との比較を行う 2つのコードの間に互いに類似している部分があれば,そのコードをマッチしたコードとする データベースの検索 マッチしたコード 類似部分含む データベース内の変更部分コード 利用者から入力されたコード 比較 平成13年度 修士論文発表会

  10. ソースコードの比較 基本方針 • トークン単位の比較⇒字句解析 • 空白,コメント,改行位置等を無視 • トークンは抽象化して比較 • 予約語,標準ライブラリ関数をキートークンとする • 識別子・定数はキートークンを除きすべて同一視 • 局所アラインメントによる類似部分の検出 • 2つの系列から類似する部分系列を抽出可能 平成13年度 修士論文発表会

  11. 局所アラインメント • 局所アラインメントの例 S1= pqraxabxcstvq, S2= xyaxbacsnnに対してS1’= axabxcs S2’= ax-bacs が得られる • 局所アラインメントのスコア 対応する位置が一致している個数 n(match) 対応する位置が一致していない個数 n(mismatch) ‘-’の個数 n(gap)  として, n(match) - n(mismatch) - n(gap) と定義 ギャップ 平成13年度 修士論文発表会

  12. 類似性の判定 • 2トークン列のアラインメントのスコアで判定 • スコアが閾値αを超える2系列を類似しているとみなす • αは入力トークンの個数Lに応じて次のように決定(経験的に決定) L<30のとき α=0.6×LL>=30のとき α=18 (一定) 平成13年度 修士論文発表会

  13. 検索効率の向上 • 局所アラインメントは時間計算量が大きい • 2トークン列の長さの積に比例 トークン比較の効率化 • 検索結果の中に必ず含まれていて欲しいキートークン(特性キートークンと呼ぶ)を利用者が指定 • 指定がない場合は入力に最初に出現するキートークンが特性キートークンになる • 特性キートークンが含まれないデータベース内のコードは検索対照から除外 ⇒ アラインメント回数の削減 • データベースに字句解析済みのトークン列を登録することで,処理時間を短縮 平成13年度 修士論文発表会

  14. データベース側コード i (); } i = fopen( i , i ); if ( i == i ) { i ( i , i , i ); i ( i ); i (); } i ( i ); ソースコード比較の実例 入力側コード fp = fopen("file1.c", "r"); if ( fp == NULL ) { message("error."); return(-1); } i = fopen( i , i ); if ( i == i ) { i ( i ); return( i ); } i = fopen( i , i ); if ( i == i ) { i ( i ); return( i ); } i (); } i = fopen( i , i ); if ( i == i ) { i ( i , i , i ); i ( i ); i (); } i ( i ); 字句解析 特性キートークン 一致:25 不一致:1ギャップ:4 赤字の部分が局所アラインメントの結果として検出される 入力トークン数=27 ⇒閾値16 マッチ スコア=20 平成13年度 修士論文発表会

  15. 検索結果の表示 表示項目 • 入力とマッチしたコード片Cに関するデータ • 元のファイル名 • Cが変更されたリビジョン(p, p+1) • リビジョンp+1がリポジトリに登録された時のコメント • Cと入力コード片とのアラインメントスコア • 上の1,2を選択すると,そのファイルの該当するリビジョン間の差分を表示する 平成13年度 修士論文発表会

  16. ソースコード修正支援システムCoDS DIMに基づくソースコード修正支援システムCoDSの試作を行った • 対象言語 C言語 • 版管理システム CVS • データベースマネージャ GDBM • メイン部分(CoDS-Main)にCGIを使用し,Webインタフェースにより使用する使用言語:Perl,約1000行 • 構成ツール • データベース作成ツール(使用言語:Perl,約950行) • 字句解析ツール(使用言語:C言語,約1500行) • トークン比較ツール(使用言語:C言語,約450行) 平成13年度 修士論文発表会

  17. システム構成図 Webブラウザ ソースコード片 Webサーバ 利用者 検索結果一覧・差分 CoDS CVSリポジトリ CGI(CoDS-Main) データベース作成ツール 検索結果 ソースコード片 検索用データベース トークン比較ツール トークン列 字句解析ツール 平成13年度 修士論文発表会

  18. 適用実験(1/5) 用いたデータ • 検索用データベース:FreeBSDのCVSリポジトリの一部を用いた(約730個分のファイルから履歴情報を取得.レコード数約7500個) • 入力として以下のコード片を与えた ptr = malloc(SIZE); if (ptr== NULL) { fprintf(stderr, "cannot allocate memory."); exit(1); } 平成13年度 修士論文発表会

  19. 適用実験(2/5) ファイル名とリビジョン番号 入力 ptr = malloc(SIZE); if (ptr== NULL) { fprintf(stderr, "cannot allocate memory."); exit(1); } 差分についてのコメント CoDS 平成13年度 修士論文発表会

  20. 適用実験(3/5) 変更前 変更後 入力とのマッチ部分を強調表示 平成13年度 修士論文発表会

  21. 適用実験(4/5) (←変更前) 差分 (変更後→) to_name = (char *) malloc(len); if (to_name == NULL) gripe_alloc (len, "to_name"); strcpy (to_name, name); to_name = malloc (len+1); if (to_name == NULL) gripe_alloc (len+1, "to_name"); strcpy (to_name, name); コメント Even more buffer overflow fixesChange CATMODE to 0644, because group man not usedAdd immutable sbit to man binary, so if user even got man uid,he can't replace man binary with fake one… 平成13年度 修士論文発表会

  22. 適用実験(5/5) • コメントの参照・・・バッファオーバフローを修正 • 差分の参照・・・mallocの引数の修正 • 与えた入力に対して,類似した部分の履歴を検索できる • 提示された差分と,それに関するコメントを参照することで,利用者は過去に起こったエラーの事例とその解決法を知ることができる 平成13年度 修士論文発表会

  23. まとめ • ソースコード修正支援手法DIMの提案 • 版管理システムに蓄積された履歴をデータベース化 • ソースコード片によるデータベース検索 • 検索結果の表示 • DIMに基づく修正支援システムCoDSの試作 平成13年度 修士論文発表会

  24. 今後の課題 • 実際の保守作業に適用することによる本手法の有効性の評価 • 利用者が必要としているものを漏れなく取り出せるか? • 得られた結果のうち,実際に修正に利用できる割合はどのくらいか? • より妥当な検索結果を得るためのアラインメントスコア計算方法の改良 平成13年度 修士論文発表会

  25. 変更 A A’ B B’ 変更 変更情報データベースの構築 • あるソースファイルFの隣接する2つのリビジョン間(p~p+1)に着目 • pにおいて,p+1までに変更が行われた部分の集合をデータベースに登録 • (F, p, p+1)の組と,変更部分の集合とを一対一で対応付け ファイルFの履歴 リビジョンp リビジョンp+1 平成13年度 修士論文発表会

  26. 変更情報データベースの構築 • 各ファイルにつき,各pから p+1までの変更部分コードを次々と取得し,データベースに登録 • その他にも以下のような情報が登録される 注) F,p,p+1を指定すればレコードが一意に定まる 平成13年度 修士論文発表会

  27. 評価実験(計画) • 評価項目 • 検索結果の妥当性 • 必要な情報をちゃんと取得できるか • 結果のうち,意味的にも一致する割合はどれくらいか? ⇒人間の目による主観的な評価がよい • 閾値の設定の妥当性 • 閾値をいろいろ変えて,上の実験を行う • ただし,ヒットしたリビジョン間で行われた修正が,現在望んでいるものなのかを判断するのは,利用者も,システム側も難しい 平成13年度 修士論文発表会

  28. スコアの式を前述したものに固定したとして L<30のとき α=(0.6*L) の整数部分 L>=30 のとき α=18 • α=L とすると,入力全体と完全に一致するもののみ • α=0.6*Lのときは,検出部分のうち5分の4が一致している • 入力トークン数より大きい値にならないようにする • 入力トークン数が大きいときに,閾値が大きくなり過ぎないようにする 平成13年度 修士論文発表会

  29. 適用例 提示された差分と,それに関するコメントを参照することで,過去に起こったエラーの事例とその解決法を知ることができる • コメント参照・・・バッファオーバフローを直している • 差分の参照・・・mallocの引数が間違っていた 得られた情報を自分が作業中のプログラムに反映できるかどうかの判断は利用者が行う 平成13年度 修士論文発表会

  30. 検索時間の測定 • FreeBSDのCVSリポジトリから取得した3つのデータベースA,B,Cと,入力X, Y, Zを用意 検索速度に影響 平成13年度 修士論文発表会

  31. 検索時間の測定 • 特性キートークンが“if”の入力 いずれのデータベースにおいても,”if”を含むコード片の個数が他のキートークンに比べて多い ⇒アラインメント回数大⇒検索時間大 計測環境 CPU: Pentium4 2GHz RAM: 1GB OS: FreeBSD4.5-Stable Webサーバ: Apache1.3.22 平成13年度 修士論文発表会

  32. 検索時間の評価 • 入力トークン数,データベースサイズが大きくなれば,比例的に検索時間が大きくなる • 通常の使用には支障ない • データベース内での出現率の高いif, else等のキートークンが特性キートークンの場合,検索時間は大 • 特性キートークンがそれ以外の時は,多少入力サイズが大きくても実用時間で検索可能 平成13年度 修士論文発表会

More Related