研究

実証的ソフトウェア工学とソフトウェアリポジトリマイニング

実証的ソフトウェア工学とはソフトウェア工学における理論を実データを用いて実証しようという研究です.

ソフトウェア工学の中でも非常に実践的な分野であり,技術や興味の移り変わりが比較的早い分野であると言えます.日本でも奈良先端大や大阪大学が中心となり,プロジェクトを立ち上げるなど,その関心は高まりつつあります.また,ソフトウェアリポジトリマイニングという分野は,近年大変注目されている分野の1つです.莫大なソフトウェア開発に関するデータを文字通り採掘することにより,意味のある知見を見いだそうとする試みであり,近年の計算機技術の発達と相まって発展しつつある分野です.従来の実証的ソフトウェア工学のアプローチは「理論をデータで実証する」だったのに対し,「データから理論を導き出す」ことが可能になるかも知れないと期待されています.

水野の研究テーマでは,こうしたソフトウェアリポジトリマイニングの中で新しい方向性を見いだすべく,様々な角度からの検討を行うことになります.研究では主にオープンソースのソフトウェア開発からデータが取得できるため,データが豊富に存在することが利点にはなります.しかし,オープンソースソフトウェアの開発で問題としていることが「企業の現場で存在する問題」ではない可能性もあります.水野は,ソフトウェアリポジトリマイニングを通じて,企業や組織の現実の開発における問題の解決を行うことを目指しています.

ここでは,大きく分けて3つの研究テーマについて簡単に説明をします.詳細については水野に直接訊くか,「さらに詳しく」のリンクをたどってみて下さい.リンク先が存在すればなにがしかの情報は得られるかもしれません.


Fault-proneness Filtering: SPAMフィルタを用いた不具合混入モジュールの検出(2007~)

ソースコードに含まれる不具合を早期に検出する技術は,ソフトウェア工学の中でも古くから研究が為されてきた分野です.従来の技術は事前に複雑度メトリクスなど計測すべき対象を設定し,その値をソースコードから収集し,数理的モデルによって判定するという手順が一般的でした.

本研究では,ベイジアンテキストフィルタを用いることでソースコードを単なるテキストファイルと見なしてクラス分けすることを試みています.ソフトウェア工学的なアプローチからみれば異端ですが,意外と面白い結果が出ると考えられます.

なお,本研究で利用するデータは「不具合の混入したことが明らかなソースコードモジュール群」と「不具合が混入していないことが明らかなソースコードモジュール群」になります.現在,オープンソースプロジェクトからこのデータを抽出する技法についても開発しています.

ソフトウェア開発プロジェクトデータからのデータマイニング (1998‾)

企業のソフトウェア開発現場から収集されるデータを用いて,品質や生産性向上の指針となるような分析を行っています.

ソフトウェアの開発現場におけるプロジェクトの混乱を回避するために,プロジェクトのリスク要因を抽出する手法の開発が求められている.本研究では,ソフトウェアの品質に関する指標「不具合工数密度」に関して,その改善案を開発データから抽出する手法を提案する.具体的には,まずプロジェクトデータに相関ルールマイニングを適用することで「不具合工数密度」に影響を与える相関ルール群を抽出する.

次に,抽出した相関ルール群から改善ルール(ルール中にほぼ同じメトリクスを含むが,「不具合工数密度」の評価値が異なるルール)群を特定し,その中から有用なプロジェクトの改善案を求める.本手法の提案及び適用実験は産学連携研究として行った.適用実験として,日本国内で収集された企業横断的プロジェクトデータからのプロジェクト改善案の抽出を試みた.その結果,多くの改善案をほぼ自動的に抽出できることを確認すると同時に,その改善案が先行研究での指摘と基本的に一致することを示すことができた.


混乱プロジェクトの予測システム・リスクマネジメント (2000‾)

ソフトウェア開発の現場において,プロジェクトの状態が把握できなくなったりすることがあります.その程度は場合によりますが,そうした状況を放置しておくと,プロジェクトが危機的状況に陥ることもあります.我々はこうした状況を「混乱」プロジェクトと呼び,混乱状態に陥るプロジェクトを開発の早い段階で予測することを目的としています.

本研究では従来行われてきたような定量的な尺度からの分析だけでなく,プロジェクトに携わる人々へのアンケートに基づいてプロジェクトの成否を予測する手法の提案を行っています.

この手法では,過去のプロジェクトのプロジェクトマネージャに対してアンケートを実施し,このアンケートから得られたデータに基づいてロジスティック回帰分析を行って混乱プロジェクトの特徴を表すモデルを構築すします.そして進行中のプロジェクトに対して同じアンケートを実施することでプロジェクトの混乱確率を推定します.

さらに,この混乱予測手法をWebブラウザ経由で利用できるシステムを開発中です.今後このシステムを実際の開発現場に導入することで,プロジェクトの混乱予測とリスク要因の回避に利用できると考えています.


ソフトウェア開発プロセスメトリクスの定量的分析に関する研究 (1997‾現在)

ソフトウェア開発プロセス中に得られるメトリクスは多岐にわたっていますが,それらを計測はしてはいるものの,活用はしていない,(または,できていない)という組織は多くあります.本研究では,そうして埋もれているメトリクスの活用のために,プロジェクトの結果である品質・コスト・開発期間・生産性などをメトリクスによって説明する試みを行っています.具体的には次のような分析を行っています.

  1. 開発計画への忠実度(開発計画と実態が合っている度合い)とプロジェクトの品質,生産性との関連を調査しモデル化しました.ここでは,アンケートベースで得られた開発計画への忠実度とコストの予実比との関係を示し,さらにコストの予実比と品質・生産性との関連を示しました.
  2. テスト工程における工程間での不具合検出傾向を4つのクラスに分類し,それぞれのクラスにおいて出荷後の品質を判定するモデルを作成しました.この分析の結果,テスト工程での検出不具合が単調に増加すると出荷後の不具合数が増加する傾向が確認されました.
  3. ソフトウェアレビューの効率とテスト工程での不具合検出の多寡についてモデル化する研究を実施しました.ここでは,レビュー効率が悪いプロジェクトではテスト工程での不具合が増加し,逆にレビュー効率が良いプロジェクトではテスト工程での不具合が減少することを定量的に示しました.

ソフトウェア開発における効率的なテストケースの抽出に関する研究 (2000‾2005)

ソフトウェア品質を保証するために,ソフトウェアのテストはその重要性が益々増しています.しかし,近年のソフトウェア需要の急増はテスト期間の短縮など,ソフトウェアテストにも深刻な影響を及ぼしています.即ち,限られたテスト期間の中で,従来以上の規模のソフトウェアを,如何に効率的にテストしていくかが重要な課題になってきています.このため,ソフトウェア品質という観点から,限られたテスト期間内に重大な不具合を効率的に検出できるテスト手法が整備されなければならない状況になっています.

本研究では,こうした課題点を解決するために効率的なテスト手法を開発することを主眼としました.ここで効率的なテスト手法とは,限られた期間内に重大な不具合を集中的に検出できる手法を意図しています.このためのアプローチとして,本研究では,重大不具合の集中的な検出を実現するため,ソフトウェアテストに選択的テスト手法と詳細テスト項目設計手法という2つの技術を組み込んだテスト手法の導入を提案しました.本研究では,まず,対象ソフトウェアの機能に対し,テストの優先度をつけメリハリを付けたテストを実現する方法として,選択的テスト手法を開発しました.さらに,優先度の高い機能に対して,詳細なテスト項目を用意するための詳細テスト項目設計手法を開発し,重大不具合を効率的に検出する手法を開発しました.また,これら2つの手法を実際の開発に適用し,その効果を確認しました.


ソフトウェア開発プロジェクトのシミュレーション(品質,コスト,開発期間の見積り) (1996‾2001)

主としてソフトウェアプロジェクトシミュレータの開発を行っています.このプロジェクトシミュレータはまだプロトタイプですが,ソフトウェアプロジェクト中の作業(設計,コーディング,レビュー,テスト,デバグ)をGSPNに基づいたモデルで記述し,シミュレーションを行うことで品質,コスト,開発期間の3つの要素を同時に見積もることができます.

ソフトウェア開発プロセスを定義し,改善する試みは米国SEIによるCMMなどがよく知られています.こうしたアプローチでは開発プロセスの定義によってプロジェクト全体を管理することを目的とします.

こうしたプロセス改善を行うに当たっては,具体的な管理手法などについては適用側での試行錯誤が必要となります.しかし,現実のプロジェクトに対して新たな開発手法,管理手法を適用することはコスト的な問題からも非常に難しいとされています.こうした背景の下で,ソフトウェア開発自体を仮想的に実行する技術の開発が期待されてきています.

本研究では,ある組織におけるソフトウェア開発を対象に,プロセス改善に適用可能なプロジェクトシミュレータの開発を行いました.従来のシミュレーション技法では,コストのみ,あるいは,品質のみに的を絞ったシミュレーションが行われてきました.しかし,品質,コスト,開発期間の3点を同時にシミュレートできるものはこれまでに存在しませんでした.本研究で提案するシミュレータは,開発プロセスに含まれる作業(設計,テストなど)を一般化確率ペトリネットを用いて記述し,開発作業中に発生する動的な問題をトランジションの発火率のパラメータとして表現することで,コストや混入不具合の増減を表すことができました.また,作業量という新しい尺度を導入することで,開発期間の増減をシミュレートすることができます.

さらに,開発したシミュレータを用いてプロセス改善に対する3つの適用実験を行いました.まず,開発中に発生する作業の並行実行(見切り発車)をシミュレーションし,並行実行が最終的なコストと期間に与える影響を調査しました.この実験では並行実行による期間の短縮と引き換えに工数の増加が発生する様子をシミュレーションにより示しました.次に,テスト工程の計画を設計工程終了時点で適切に変更することが最終的な品質を向上させることをシミュレーションにより示しました.さらに,プロジェクトにおけるリスク要因をペトリネットのパラメータで表し,シミュレータをプロジェクトのリスク予測に適用する試みを実施しました.

本研究の主な成果はソフトウェア工学での権威であるソフトウェア工学国際会議(ICSE)にて1997年に発表しています.また,ソフトウェアシンポジウム96最優秀論文賞(1996年), 情報処理学会40周年記念論文賞(2001年)などを受賞しています.