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