研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片

Slides:



Advertisements
Similar presentations
API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
コードクローン履歴閲覧環境を用いたクローン評価の試み
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
剽窃 他人の作品や論文を盗んで,自分のものとして発表すること. プログラムが剽窃される事例もある. Aさんのプログラム Xさんのプログラム
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
プログラム実行履歴を用いたトランザクションファンクション抽出手法
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
大規模ソースコード集合を対象とした 類似関数集合群の抽出
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
ギャップを含むコードクローンの フィルタリング手法の提案
ソースコードの同時修正支援における関数クローン検出ツールの有効性調査
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
開発履歴を用いたコードクローン作成者と利用者の 分析手法とその適用
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
コード片の生存期間がコードクローンと欠陥修正の有無に与える影響分析
オープンソース開発の履歴情報を用いたコミュニティ検索支援システム
既存ソフトウェアの変更履歴を利用したソースコード修正支援手法の提案
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードの生存期間を考慮したコードクローンと欠陥修正の関係調査
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
UMLモデルを対象とした リファクタリング候補検出の試み
プログラム実行履歴を用いたコードクローン検出手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローンの複雑度メトリクスを用いた開発者の特徴分析
バイトコードを単位とするJavaスライスシステムの試作
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コードクローン編集者数に着目した開発履歴の分析
コードクローンのメトリクス値と 開発者の相関の調査
多様なプログラミング言語に対応可能な コードクローン検出ツール CCFinderSW
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェアの変更履歴を利用したソースコード修正支援システム
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
複数のリポジトリを統合できる バージョン管理システムの提案と試作
コードクローンの分布情報を用いた特徴抽出手法の提案
ソフトウェアプロダクト集合に対する 派生関係木の構築
メトリクス値の変化に基づく コードクローンの編集傾向分析
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
容易に使用可能な grep風コードクローン検索ツール
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
Presentation transcript:

オープンソースソフトウェアの進化におけるコードクローンと障害報告の関係の調査 井上研究室 政井 智雄 タイトルについて,井上研究室の政井智雄が発表します. 細かくやったことが書いてない 何を調べたか、を細かく説明する  調べたデータについて

研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片 オープンソースソフトウェアのソースコードに対するコードクローンの変化の調査が行われている LinuxSCSIドライバにおけるクローン化の調査[Godfrey2011] Linuxカーネルにおけるクローン化の調査[Antonio2002] FreeBSDの関連研究 ケーススタディが行われてないから行った [Godfrey2011] Wei Wang and Michael,W.Godfrey,“A Study of Cloning in the Linux SCSI Drivers” Scam2011 [Antonio2002] G.Antoniola,U.Villanob,E.Merloc,M.Di Pentaa“Analyzing cloning evolution in the Linux kernel”

研究の目的 コードクローンについて未調査のオープンソースソフトウェアに対する分析を行う FreeBSD中のコードクローンと障害を調査する このあたりで関連研究触れるべき FreeBSDのここここはやってないからって言う Linuxのスカジとかのやつ!引く!国際会議で出されてるような分野ですよ!っていう。

調査の概要 ソースコード,およびコミットログを版管理システムからバージョン毎に取得 コミットがどのバージョンに属するか特定 対象ソフトウェアをコンポーネントに分割し,各バージョンにおける以下のデータを取得 コミットログから障害報告IDとその該当コンポーネント ソースコードからコンポーネント毎のコードクローン情報 コンポーネント毎に,バージョン間のコードクローンと障害報告の変化を調査・考察

障害報告ID取得および該当コンポーネント特定 コミット ----------------- r1234|name|~~ M ~/sys/amd64/~ M ~/sys/cddl/~ ~~ PR: i386/321 kern/342 修正された コンポーネント 版管理 システム リポジトリ コミットログ ----------------- 1999-02-04 | ~~~ ~~~ 1999-01-24 | ~~~ k k 出力 抽出 照合 バージョン毎に 分類 障害報告 管理システム 障害報告 ------------------ ~~~ Number: 342 Category: kern Severity: serious 対応表 ----------------- FreeBSD7.0.0 amd64: 321,342,350,~~~ cddl: 321,342,347,~~~ kern: 335,~~~ ~~~ 対応付け k k 取得 重要度で フィルタリング

バージョン毎の開発期間の特定 ・・・ CURRENT 7-STABLE 7.0-RELENG 7.1-RELENG 7.4-RELENG 7.0.0-RELEASE 7.1.0-RELEASE 7.4.0-RELEASE CURRENT 8-STABLE コミットのバージョンごとの分類については,バージョンごとの開発期間を特定し, その開発期間に属するコミットを,そのバージョンのコミットとして分類することとします. まず,FreeBSDにおける開発の流れとして,バージョン7,8を例とします. まずこれらの開発の流れをブランチと呼びます, CURRENTブランチは最新の開発を行うブランチであり, このブランチから各メジャーバージョンであるSTABLEブランチが分岐し,また必要に応じて,RELENGブランチが分岐, そしていずれかのブランチからリリースが作成されるという形となります. ここで,各リリースの開発期間としては,終了をリリース時とし,そこからブランチや分岐をさかのぼり,前のリリースである7.0.0の属する7.0RELENGブランチの分岐直後までを開発期間とします. この開発期間に行われたコミットを,そのバージョンのコミットとして分類します. 8.0.0に関しては,リリース時からCURRENTブランチまでさかのぼり,STABLE7の分岐直後までとなります. このとき開発の日付は重複する場合がありますが,ログは別となっているため,コミットが重複することはありません. 8.0-RELENG 8.1-RELENG 8.2-RELENG 8.0.0-RELEASE 8.1.0-RELEASE 8.2.0-RELEASE

調査対象 FreeBSDカーネル 版管理システム 障害報告管理システム 全56リリースバージョンのソースコード コンポーネントの分割 各バージョンにおけるコードクローン率,総行数の取得 カーネルの開発に関するコミットログ(17年7ヶ月間) 障害報告のIDおよび該当コンポーネントの取得 ブランチポイント,リリースに関するコミットログ バージョン毎の開発期間の取得 障害報告管理システム 致命的または重要な障害報告 検出された障害報告のフィルタリング

計測データ コンポーネントのクローン率 リリース中のコンポーネントに対する障害報告数 コンポーネントに含まれる各ファイルをそれぞれトークン列に変換 全トークン列における,クローンに含まれるトークンの割合を算出 コードクローン検出には,CCFinderを使用 リリース中のコンポーネントに対する障害報告数

クローン率が急上昇したリリース バージョン8.0.0,もしくは9.0.0でクローン率が急上昇しているコンポーネントが数多く存在 大規模な改修があったバージョンであり,クローン率の高いコードが大量に増加したと考えられる 同時に障害報告が増加したコンポーネントがある 低品質なコードが増加したことで, 障害が増加したと考えられる. 例:fsコンポーネント

クローン率の高いコンポーネント 特定のCPUのためのコードを含むコンポーネントについては,クローン率が高い傾向 類似したアーキテクチャのためのコンポーネントが,コードクローンを共有していると考えられる. i386 amd64

例:ISAコンポーネント ISAコンポーネントは,急激にクローン率が減少した 元々i386コンポーネントとクローンを共有していたが,クローン部分がi386コンポーネントに集約されたためであると考えられる.

障害の多いリリース メジャーリリースで大量の障害が報告されている 5系列については,メジャーリリース以外でも障害が大量に報告されている 5系列は,当初障害報告が収束せず, 5.3.0まで安定版がリリースされなかった

まとめ FreeBSDを対象として,クローン率と障害報告の変化を分析した 分析の結果,以下を確認した 大規模改修を行った結果,クローン率や障害報告が急上昇したと考えられるリリース 類似したアーキテクチャのためのコンポーネントは,クローン率が高いこと 他のコンポーネントにコードクローンが吸収されたため,クローン率が低下したコンポーネント メジャーリリースにおいて,大量の障害が発生

今後の課題 Android OSなど,近年になって開発を開始した携帯端末用OSを対象とした分析 ドメインや開発体制が与える影響の有無を確認したい CCFinder以外のコードクローン検出ツールを用いた場合の,分析結果の検証 プログラム依存グラフの等価性に基づく手法の適用が考えられるが,スケーラビリティが課題