ソフトウェア開発支援

テストケースの自動生成からモデル駆動開発まで、開発の現場を支える技術。

信頼性を測るだけでなく、信頼性の高いソフトウェアを作る作業そのものを支える技術を研究しています。理論をツールの形にして公開し、実際に使ってもらうところまでを射程に入れています。

テストケースの自動生成

プログラムの不具合は条件の「境目」に潜みがちです。これを狙うのが境界値解析で、実務で最も広く使われるテスト技法のひとつですが、「境界の近くを何個、どう選べばよいか」は長く経験則に委ねられてきました。

当研究室では、この選択を最適化問題として定式化し、限られたテスト数で欠陥を見つける確率を最大にする選び方を導いています。さらに、仕様が明示されていないプログラムにも適用できるよう、機械学習で境界そのものを推定する手法へ発展させています。

テスト入力の生成には、敵対的生成ネットワーク (GAN) や拡散モデルといった深層生成モデルも用います。近年は大規模言語モデル (LLM) の応用にも取り組んでおり、生成 AI が N バージョンプログラミングの有効性を高めうるか、複数エージェントの協調をどう設計するかといった問題を扱っています。

いずれの場合も、従来からの確率モデルによる評価と組み合わせ、「その手法を使った結果どれだけ品質が上がったのか」を定量的に示すことを重視しています。

モデル駆動開発

仕様をブロック線図や状態遷移図として記述し、そこから実装コードを生成する開発手法をモデル駆動開発 (MBD) と呼びます。設計と実装の食い違いが生じにくく、組込みシステムのように信頼性が求められる分野で使われています。

当研究室では Julia 上で MBD を行う支援ツールを開発し、状態遷移図から組込み向けのコードを生成する仕組みとあわせて公開しています。

開発工数の予測

どれだけの規模の開発にどれだけの工数がかかるかを、過去のデータから予測する研究も行っています。

この分野の研究紹介

この分野の公開ツール

JuliaMBD.jl Julia

ブロック線図によるモデル駆動開発 (MBD) を Julia で行う支援ツール。