SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

AI時代のソフトウェアテスト技法活用法

AIで「世界一難しいテスト技法」の敷居を下げる──面倒だった原因結果グラフ法をお手軽に

AI時代のソフトウェアテスト技法活用法 前編

原因結果グラフは設計モデル

 原因結果グラフ法は、テスト領域で広く知られるに至っています。それはテスト数をオーダーレベルで減らすことができるというわかりやすい効用があるからだと思われます。しかし、筆者は設計モデルとしての効用も大きいと考えています。

 この技法によって出てくるデシジョンテーブルは、全組み合わせではなく、この技法としての以下の考え方に基づいて、テストケースとして必要なものだけになります。

 ルールを構成する条件やその組み合わせが、仕様上意図したとおりに(そして意図しない形では結びつかないことを含めて)結果へ結びついているかを、仕様側から系統的に確認する考え方です。

 出てきたデシジョンテーブルは、テストケースの根拠になるだけでなく、仕様として必要な条件と結果の対応関係を明示しています。基本的には、実装はこの対応関係をそのまま判定表・ルールテーブル・小さな判定関数として表現すれば足り、仕様にない追加の分岐や複雑な制御構造を持ち込む必要はありません。ここに、原因結果グラフ技法の面白さがあります。

 NeoCEGでは、下部の「skeleton」タブを開くと、仮想プログラミング言語による制御構造が表示されます。そこで、AIにコード生成させる際に、仕様とともにこのスケルトンを渡し、次のようなプロンプトを与えるとよいでしょう。

AIに与えるプロンプトの例

 添付の言語表現されている原因結果グラフに示される仕様部分について、添付のスケルトンに従ってPythonでコードを書いてください。理由なく制御構造を複雑にしないでください。グラフに示される制約はすでに達成されている前提としてください。制約をコードで実現する必要はありません。引数は共通因子ごとにまとめてください。

 グラフが正しく定義されていること、またその中に定義されている制約が、今から生成するスケルトンに対応するコードの外側で実現されていることが前提です。例えば今回の事例に表れるOne制約はプルダウンメニューなどのGUI部品によって実現されるものとします。制約については次回詳しく説明します。

 このNeoCEGで生成されたスケルトンに忠実に対応するコードは、原理的には同時に生成されたテストケースだけでMC/DCカバレッジが可能です。

バイブコーディングとデシジョンテーブル

 バイブコーディングでは、最初は典型的な振る舞いを与えるので、うまく動作しているように見えます。しかし実務適用を考えると、次第にレアなケースや例外を扱う必要が出てきます。そういうことを発見するたびに、固有の条件と振る舞いを付け足していくことになります。

 この手順は、デシジョンテーブルの上で考えてみると、思いついた順に五月雨式に列の情報を与えたり、発見した列を突如付け加えたりしているようなものです。その度にコードを修正することになります。条件分岐やネストが必要以上に増えてスパゲッティ化してしまう様が容易に想像できます。

 実はこの状態、従来のウォーターフォール開発の現場でもときどき見かけます。レアなケースの扱いが抜けていたと気づいたとします。しかし抜本的に考え直す時間はありません。また、せっかく他の場合にうまく動いているコードを壊したくはありません。そこで、できるだけ今のコードを触らずに、その問題のケースだけをうまく動かすコードを付け足す。そうしてコードはスパゲッティ化していきます。

 スパゲッティ化したコードは、ソフトウェア開発における「技術的負債(Technical Debt)」の最も代表的かつ深刻な症状のひとつです。治療策としてのリファクタリングだけではなく、予防策も必要です。本稿に示した方法論は、どちらに対しても有効性が高いはずですので、ぜひご活用ください。

おわりに

 従来、「ビジネスルールや論理関係が複雑な部分はデシジョンテーブルで整理しましょう」と言われてきました。でもそれは複数のルールが組み合わさった結果のすべてのバリエーションの実例(外延)を漏れなく列挙しようとする行為です。AIは確かに少数の例示(Few-Shot手法)から期待の振る舞いをしてくれるようになりますが、大量の実例を与えればルールをより正確に理解できるようになるわけではありません。

 必ずどこかで人間が論理的な仮説を立て(アブダクションを行い)、ルール(内包)表現に変換・整理してあげないと、AIが生成するプログラムは容易にスパゲッティ化してしまいます。

 ルールを整理・理解し、レビューを効率化するのにモデル化はとても役立ちます。

 次回は、制約関係を取り上げます。多くの設計者が論理関係と制約関係の違いや境界をあまり意識せずに設計しているのではないでしょうか。テスト技術者のほうが意識する機会が多いように思います。例えばテスト技術者は状態遷移図がある場合にも状態遷移表も作成します。その理由をご存じでしょうか?

 両者の違いを理解し、うまく使い分けることで見通しの良い設計を行うことができます。詳細は次回、説明します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
この記事の著者

林 祥一(オーティファイ株式会社)(ハヤシ ショウイチ)

 NTTソフトウェア、富士ゼロックスのシステム技術研究所等を経て、2025年に現職のオーティファイ株式会社に入社。オブジェクト指向言語拡張によるマルチエージェントシステムやCSCWの研究などを起点に、ITアーキテクト兼商品企画を中心にキャリアを築く。エンタープライズ領域における研究、商品企画、ビジネス分析、要求開発、設計、開発、プロモーション、ソリューション営業のほぼ全工程に従事。2010年にソフトウェアテスト技...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/28931 2026/07/28 09:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー