ソースコード更新履歴を利用した 変更危険度計測システムの試作 大阪大学 基礎工学部 情報科学科 井上研究室 村尾 憲治 ソフトウェア開発 • 開発の大規模化・複雑化 • 開発の多人数化 開発の管理が重要 版管理システムが広く利用されている 2 版管理システム • ソフトウェアの開発履歴を保 存・提供するシステム 開発者 開発者 – 開発者はソースコードの作業用コ ピーを得る(チェックアウト) • 開発者は作業用コピーを更新 – ソースコードの更新内容を版管 理システムに反映(チェックイン) – 全ての更新の内容は版管理シス テムに蓄積される 版管理システムには過去の開発 過程の情報が保存されている 版管理 システム チェック アウト チェック イン 更新 作業用 コピー 開発者 3 ソフトウェア開発の問題点 開発の複雑化・多人数化 変更すると問題が発生する危険性のある 箇所の判断が難しい 開発者 この箇所は変更して もいいのだろうか? 変更すると • 仕様に反する可能性 • 開発を混乱させてしまう可能性 適確な判断にはソフトウェアの十分な理解が必要 しかし,十分な理解は困難で時間がかかる 4 研究の目的 変更すると問題が発生する危険性の ある箇所を知りたい • メトリクスを定義 「変更危険度」 = 変更すると問題が発生する可能性の大きさ(粒度:行) • 変更の難しい箇所を判断 – その箇所への変更を避ける – 他の開発者に相談 • 変更危険度を計測するシステムを作成 5 変更危険度の大きい箇所 • 過去に変更が行われたが,後に変更前の状 態に戻された箇所 – 変更を行っても以前と同じように戻される可能性 • 現在頻繁に更新されている箇所 – 迂闊に変更を加えると開発を混乱させる可能性 過去の開発過程から知ることができる 版管理システムに蓄積されている 6 提案する手法(概要) • 過去の更新過程から変更危険度を計測 → 版管理システムから入手できる情報を利用 • 更新パターンを分析 「更新パターン」 = 過去の更新過程にみられる 「どのように更新されてきたか」という情報 • 変更危険度は複数の更新パターン毎に計測 – 対象:最新ソースコードの各行 7 提案する手法(図) 版管理システム 更 新 ソースコードの 過去の更新内容 (変更された行, 更新日時など) 更 新 更 新 更 新 更新パターン の検出 変更危険度の計測 更 新 更 新 更新パターン毎の 変更危険度 更新の過程を再現 最新のソースコード 8 更新パターンの検出 • 今回対象とする更新パターン – 一度更新された部分が,後になって戻されている • 更新したがうまくいかなかった可能性 • 検出箇所・・・更新後の内容が以前にも存在した箇所 • 値・・・戻されている行数 – 変更されている量が多い • 大規模な修正がなされた可能性 • 検出箇所・・・更新が行われた箇所 • 値・・・変更された行数 – 頻繁に更新されている • 開発途中である可能性 • 検出箇所・・・更新が行われた箇所 • 値・・・更新された回数 9 変更危険度の計測 • 更新パターンの検出結果を統合 – 更新パターン毎に変更危険度を計測 – 検出した値に時間的な重み付けを行う • 古い情報ほど重要度を下げる – 最近の更新の方が影響が強い – ソースコードの改善による変更危険度の低下を表現 時間的な重み w αx 0 α 1 , x :経過時間 10 計測の手順 1. 各開発時点の時間的な重み wi を決定 2. 各開発時点において,変更危険度を求める行に対応する 範囲を調べる 3. 対応する範囲で検出された値 vi を取得 4. 各開発時点の vi wi の値を合計する 時間的な重み: w2 時間的な重み: w1 時間的な重み: w0 ( 1) w2 検出した値:v2 検出した値:v1 検出した値:v0 w1 w0 変更危険度 (vi wi ) i 0 過去のソースコード 最新のソースコード 11 変更危険度計測システムの実装 • 提案手法を実装するシステムを試作した – 開発言語・・Java – 総行数・・約6000行 – 出力結果の閲覧はウェブブラウザを利用 – 表示する変更危険度の値に色付け • 更新パターン別に値の大きさに応じた色 低 ← ソースコード内の最小値 変更危険度の値 → 高 ソースコード内の最大値 12 出力例 13 評価実験 • 実験対象 – CREBASS • CVSリポジトリ閲覧・検索システム • 開発言語・・Java • 実験目的 – 変更危険度の出力結果を見ることで,変更する と問題が発生する危険性のある箇所を知ること ができることを確認 14 評価方法 • 3種いずれかの変更危険度の値が大きい箇所につ いて開発者にアンケート – データベース作成の機能を実装する8つのソースコード から26箇所(コメント部などは除いた) – アンケート内容 • • • • • 過去にバグを発生したことがあったか アルゴリズムが複雑であるか 他のモジュールに影響を及ぼしやすいか 実装方法を何度も変更したか 上記以外の問題が過去に存在したか – アンケートのいずれかの項目に該当 → 変更により問題が発生する危険性あり 15 アンケート結果 箇 所 数 過去にバグが発生 6 アルゴリズムが複雑 0 他のモジュールに影響 0 実装方法を何度も変更 12 上記以外の問題 1 小計 19 該当なし 内訳 CR(A) CR(F) CR(U), CR(A), CR(F) CR(F) 1 5 1 3 上記以外の問題・・・仕様の変更 6 1 1 2 7 合計 26 1 全て 8 1 7 1 1 7 1 7 2 15 適合率 : 0.73 16 考察 • 適合率 0.73 – 本手法は概ね有効 • 該当なしの箇所 – 設計やアルゴリズムの変更に伴い最近更新 • 実質一人で開発しているため,危険とは思わなかった – 多人数の開発では危険である可能性 • 対象とした箇所以外にも危険な箇所は存在 – 本手法では抽出できていない • 新たな更新パターンの考案が必要 17 まとめと今後の課題 • 版管理システムに保存されたソースコードの更新履 歴を利用し,変更危険度を計測する手法を提案 • 手法を実装するシステムを試作し,実際のソフトウェ アに適用 – 手法の有効性を確認 • 今後の課題 – 構文解析の導入 – 新しい更新パターンの考案 – 多人数で開発されているソフトウェアに対する評価実験 18
© Copyright 2024 ExpyDoc