研究課題/領域番号 |
23680001
|
研究機関 | 大阪大学 |
研究代表者 |
石尾 隆 大阪大学, 情報科学研究科, 助教 (60452413)
|
研究期間 (年度) |
2011-11-18 – 2014-03-31
|
キーワード | ソフトウェア工学 / データフロー解析 / ソースコード比較 |
研究概要 |
本年度は,ソフトウェアの類似した部品をグループ化し,グループ単位で閲覧する方式についての調査と,その結果を踏まえた手法の構築を行った.まず,調査として,ソフトウェア部品を類似しているとみなす要因であるコーディングパターン,コードクローンについて,それぞれの特性の分析を行った.その結果,コーディングパターンは非常に変化しやすく,ソフトウェア部品の機能的な共通点としては信頼性が低く,類似性の特性としては適していないことが判明した.コードクローンについては,ソフトウェア部品中での重要な処理をコピーしたコードが多く含まれており,ソフトウェア部品の共通の振る舞いの特性の1つとして適していることを確認した.また,ソフトウェア部品の振る舞い,入力データの共通点を調査する方法としては,動的オブジェクトプロセスグラフという手法を用いることで,部品の振る舞いの典型例を扱うことが可能であることを確認した. 調査結果を踏まえて,ソフトウェア部品の類似性を,ソースコードの類似性によって表現し,また,ソフトウェア部品の閲覧順序を自動的に抽出する手法を試作した.複数のソフトウェア部品に共通した内容は1度だけ検査し,部品ごとに新規に書き加えられた内容だけを追加で検査できるように,ソースコードの差分を可視化するツールとして実現した.また,ソフトウェア部品の内容をソフトウェアの他の部分と切り離して閲覧できるように,エイリアス解析のアルゴリズムを適用し,ソフトウェア部品の内部で参照されるデータを,部品自身が作成するデータと外部から受け取るデータに区分して表示し,ソフトウェア部品とソフトウェアの他の部分との関係を素早く確認できる開発環境を試作した.
|
現在までの達成度 (区分) |
現在までの達成度 (区分)
2: おおむね順調に進展している
理由
ソフトウェア部品の検査方法は,ソースコードの差分を用いてソフトウェア部品の順序を並べる方式として試作した.オープンソースソフトウェアを対象に試行した実験の結果は良好であり,また,仕組みが単純であり納得しやすいという点で企業の研究グループからも肯定的な意見を多く得ることができた.一方で,企業などで継続的に開発されているソフトウェアでは,ほとんど同一のソフトウェアであるがわずかに機能が異なる変種(variant)が存在しており,ソフトウェア部品単独での順序付けよりも,製品間での順序付けのほうが望ましいという意見も得られており,順序付けに関しては異なる方式の追試も必要であると考えている. ソフトウェア部品に関する情報をより効果的に提示するために,データフロー情報を収集,可視化する技術を実装した.実験対象として選定したソフトウェアには良好な性能を示しているが,どの程度の規模のソフトウェアにまで対応できるかは不透明であり,スケーラビリティの調査が必要である. 残る課題は,開発者に対する情報提示方法の有効性の評価である.開発者はソフトウェアのすべての機能を把握していることはないため,開発者に対して提示される部品群が,開発者にとって初めて見る部品ばかりになることもありうる.そこで,与えられた部品群が属している機能を,事前知識がない開発者であっても認識できるかを調べる必要がある.実験のための機材の準備については既に完了している.
|
今後の研究の推進方策 |
情報を提示する手法の有効性を評価するには,開発者が実際に与えられた情報を理解できるかどうかを実験する予定である.具体的には,未知のソフトウェア部品が与えられたときに,その部品が属する機能を理解できるかどうかを評価する実験を行い,開発者の作業データから,開発者がソフトウェア部品を理解する能力について調査する予定である.実験に使用するデータセットとしては,米国ウィリアム・アンド・メアリー大学の研究グループが公開している Traceability Benchmark を活用する予定である.これらは2011年から公開が始まったデータセットであり,ソフトウェアの機能とソースコードの対応関係をある程度の正確さで示していることから,ソフトウェア部品の機能を取り扱う実験に適していると考えている. 解析手法の性能評価を行うには,類似したソフトウェア部品が多数ある状況が必要であるが,一般のオープンソースソフトウェアなどでは起こりにくい.そこで,同一のオープンソースソフトウェアから異なるバージョンを収集することで,疑似的に類似したソフトウェア部品が大量にある状況を作り出す.また,著名なオープンソースソフトウェアには,開発組織が何らかの理由で2つ以上に分離したものがいくつかあり,分離直後にリリースされたソフトウェア部品の拡張例を収集することで,類似しているが機能が異なるソフトウェア部品の大規模な収集を行う.
|