本究室では,ソフトウェア工学分野において,設計や実装に関わる基礎技術を研究対象とし,ソフトウェアの作成や保守をより簡単かつ迅速(理想的には自動的に)行うための理論,原理・原則,手法,技法の探求を行っています.
現在,主に以下に示す4つの研究分野に取り組んでいます.
ソフトウェア進化や保守においてソースコードの劣化は避けられません.リファ クタリング(refactoring)とは,劣化した既存コードの外部的振る舞いを変えず に内部構造を変換することで,そのコードの理解容易性や変更容易性を改善す る作業のことを指します.特に,社会の要求や技術の進歩に迅速に対応してソ フトウェアを進化させていくアジャイル開発では,技術的負債をあえて取り込 み,それをリファクタリングにより適時返済することで,開発の速度とソフト ウェアの品質のバランスを取るのがよいとされており,リファクタリングは必 須の作業です.
プログラム解析とは,プログラムを機械的に分析する技術を指します.プログ ラムを実行せずにそのソースコードを調査する静的プログラム解析と,プログ ラムを実行し,その実行データを収集・調査する動的プログラム解析がありま す.プログラムや実行データを調査することで得られた制御の流れやデータの 流れをたどることで,誤った出力の原因となるバグを特定することが可能です. より効率的に複雑なバグを特定するためには,単純なプログラム解析技術では 不十分であり,解析技術そのものを研究していく必要があります.さらに,近 年では,数多くのプログラミング言語が普通の開発者でも利用できるようになっ てきました.一般的に,プログラムコードの書きやすさと解析性の両方を単純 に追い求めることは難しく,さまざまな観点で人間と機械の作業分担を考える 必要があります.また,プログラミング言語そのものの改良も必要なことがあ ります.さらには,プログラム解析技術を駆使することで,バグの自動修正や プログラムの自動進化などの実現も可能となってきています.
近年の統合開発環境(Eclipse, IntelliJ IDEA, Visual Studioな ど)は,単なるソースコードエディタではなく,さまざまな作業(デバック,プ ロファイル,,テスト,デプロイ,分散協調開発)を支援する仕組みが組み込ま れています.一方で,実際の開発における生産性や信頼性の向上という観点か らは,まだまだ支援が十分とはいえません.たとえば,デバック支援を取り上 げても,欠陥の原因となるエラーをいかに小さい範囲に特定するのか,エラー に関するどのような情報をどのように開発者に伝えるのがよいのかなどの課題 が残されています.
信頼性の高いソフトウェアを開発するためには,過去の開発事例から得られる 知見を有効に活用する必要があります.たとえば,どのような開発者はどのよ うにモジュール設計を行っているのか,開発者がどのようにソフトウェアをテ ストしているのか,特定のドメインに属するソースコードにはどのようなバグ が多く含まれるのか,開発者はそのようなバグをどのように修正しているのか などです.近年盛んなオープンソースプロジェクトでは,このような情報を作 り出すために必要な膨大なデータを公開しています.また,近年の統合開発環 境では,開発者の作業データをモニタリングする仕組みが積極的に採り入れら れています.ソフトウェア開発に関係するデータから,有益な情報を抽出する 作業を,ソフトウェアリポジトリマイニング(MSR: Mining Software Repositories)と呼び,近年世界中で盛んに研究が行われています.
ソフトウェア工学とは,コンピュータソフトウェアを対象として,その開発,運用,保守における生産性と品質の向上を実現するための技術体系や学問体系のことを指します.