本究室では,ソフトウェア工学分野において,設計や実装に関わる基礎技術を研究対象とし,ソフトウェアの作成や保守をより簡単かつ迅速(理想的には自動的に)行うための理論,原理・原則,手法,技法の探求を行っています.

現在,主に以下に示す4つの研究分野に取り組んでいます.

ソフトウェアリファクタリング (Software Refactoring)

ソフトウェア進化や保守においてソースコードの劣化は避けられません.リファ クタリング(refactoring)とは,劣化した既存コードの外部的振る舞いを変えず に内部構造を変換することで,そのコードの理解容易性や変更容易性を改善す る作業のことを指します.特に,社会の要求や技術の進歩に迅速に対応してソ フトウェアを進化させていくアジャイル開発では,技術的負債をあえて取り込 み,それをリファクタリングにより適時返済することで,開発の速度とソフト ウェアの品質のバランスを取るのがよいとされており,リファクタリングは必 須の作業です.

  • ・リファクタリングにおけるソースコード変換の自動化
  • ・コードの臭いの自動検出とそれを除去するリファクタリングの推薦
  • ・リファクタリングにおける外部的振る舞いの保存を確認するためのテストケースの自動生成
  • ・手動リファクタリングと自動リファクタリングの協調
  • ・ソフトウェアアーキテクチャやフレームワークのAPI(Application Programming Interface)に対するリファクタリングの実現
  • ・リファクタリングツールにおけるユーザビリティの改善 (PostponableRefactoring)

プログラム解析 (Program Anlysis)

プログラム解析とは,プログラムを機械的に分析する技術を指します.プログ ラムを実行せずにそのソースコードを調査する静的プログラム解析と,プログ ラムを実行し,その実行データを収集・調査する動的プログラム解析がありま す.プログラムや実行データを調査することで得られた制御の流れやデータの 流れをたどることで,誤った出力の原因となるバグを特定することが可能です. より効率的に複雑なバグを特定するためには,単純なプログラム解析技術では 不十分であり,解析技術そのものを研究していく必要があります.さらに,近 年では,数多くのプログラミング言語が普通の開発者でも利用できるようになっ てきました.一般的に,プログラムコードの書きやすさと解析性の両方を単純 に追い求めることは難しく,さまざまな観点で人間と機械の作業分担を考える 必要があります.また,プログラミング言語そのものの改良も必要なことがあ ります.さらには,プログラム解析技術を駆使することで,バグの自動修正や プログラムの自動進化などの実現も可能となってきています.

  • ・プログラム解析ツールを簡単に構築できるツールプラットフォームの構築 (JxPlatform2)
  • ・遺伝的アルゴリズムに基づく自動バグ修正および自動マージ
  • ・ソースコードに存在する脆弱性の検出とその自動除去
  • ・ソフトウェア差分からのコード変化や開発意図の抽出
  • ・マルチパラダイムプログラミング言語の設計やその言語を用いたプログラミグの支援環境の構築

ソフトウェア統合開発環境 (IDE: Integrated Development Environment)の高度化

近年の統合開発環境(EclipseIntelliJ IDEAVisual Studioな ど)は,単なるソースコードエディタではなく,さまざまな作業(デバック,プ ロファイル,,テスト,デプロイ,分散協調開発)を支援する仕組みが組み込ま れています.一方で,実際の開発における生産性や信頼性の向上という観点か らは,まだまだ支援が十分とはいえません.たとえば,デバック支援を取り上 げても,欠陥の原因となるエラーをいかに小さい範囲に特定するのか,エラー に関するどのような情報をどのように開発者に伝えるのがよいのかなどの課題 が残されています.

  • ・分散協調開発におけるブランチのマージ支援 (MergeHelper)
  • ・データマイニングを活用したコード検索および補完
  • ・コミットの適切な分割とコミットメッセージ(変更の要約)の自動生成
  • ・単体テスト環境の改善
  • ・CI(Continuous Integration)におけるレポジトリとの連携
  • ・ソフトウェア開発作業のナビゲーション
  • ・ペアプログラミングや協調プログラミングを支援するエディタの構築

ソフトウェア分析 (Software Analytics)

信頼性の高いソフトウェアを開発するためには,過去の開発事例から得られる 知見を有効に活用する必要があります.たとえば,どのような開発者はどのよ うにモジュール設計を行っているのか,開発者がどのようにソフトウェアをテ ストしているのか,特定のドメインに属するソースコードにはどのようなバグ が多く含まれるのか,開発者はそのようなバグをどのように修正しているのか などです.近年盛んなオープンソースプロジェクトでは,このような情報を作 り出すために必要な膨大なデータを公開しています.また,近年の統合開発環 境では,開発者の作業データをモニタリングする仕組みが積極的に採り入れら れています.ソフトウェア開発に関係するデータから,有益な情報を抽出する 作業を,ソフトウェアリポジトリマイニング(MSR: Mining Software Repositories)と呼び,近年世界中で盛んに研究が行われています.

  • ・ソフトウェア開発プラットフォーム(主 にGitHub)に存在する開発データに対す る自動分析
  • ・ソフトウェア開発におけるソースコードの編集操作の記録とそれを活用したプログラミング支援 (ChangeMacroRecorder) (ChangeTracker2)
  • ・ソフトウェアメトリクスを活用したソフトウェアの視覚化 (JxMetrics) (CodeForest)
  • ・機械学習や統計的手法を活用した不吉な臭いの検出や潜在的バグの推定
  • ・開発者向けQ&Aサイト(stack overflow)における自動回答の生成

Top of Page

ソフトウェア工学とは,コンピュータソフトウェアを対象として,その開発,運用,保守における生産性と品質の向上を実現するための技術体系や学問体系のことを指します.