SHOEISHA iD

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

CodeZine(コードジン) ProductZine

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

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

状態遷移表はなぜ必要か?「制約」から見える原因結果グラフ法の真価と、論理関係との境界線

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

 前回の記事では、AIとテスト設計技法を組み合わせることで、レビューポイントを絞り込み、その手間を大きく減らす考え方をご紹介しました。原因結果グラフ法はテスト数を劇的に減らせる強力な技法ですが、実務で使いこなす鍵は「制約」の扱いにあります。後編となる本稿では、状態遷移図があるのになぜテスト技術者は状態遷移表も作成するのかという素朴な疑問を出発点に、原因結果グラフ法における「論理関係」と「制約関係」の役割分担を解説します。One制約・MASK制約といった代表的な制約を身近なGUIの例とともに整理し、AIに制約を含むグラフを描かせる実践的な手順もご紹介します。論理とアーキテクチャの境界を見極めることが、AI時代のコードのスパゲッティ化を防ぐ鍵になります。

状態遷移図があるのに、なぜテスト技術者は状態遷移表を書くのか

 前回の最後に予告した通り、テスト技術者は状態遷移図がある場合にもなぜ状態遷移表を作成するのか、その理由の話から始めたいと思います。

 以下に示した状態遷移図は、あるECサイト注文・決済の部分をモデル化したものです。かなり単純化されていますが、今回の説明のためには十分です。下に示されているのが、同じモデルを状態遷移表で表したものです。モデル図と表を見比べるとよくわかると思いますが、表には×印が多数あります。モデル図には、どのイベントが入ってきたらどの状態に遷移するのかの情報だけが描かれています。表には、状態とイベントの組み合わせがすべて出ているので、モデル図に示されていない組み合わせについて、×が入っていることになります。

状態遷移図の例
状態遷移図の例
状態遷移表の例
State \ Event 支払う キャンセル 出荷する 配達完了
未払い 支払済 キャンセル済
支払済 キャンセル済 出荷済
キャンセル済
出荷済 配達完了
配達完了

※状態遷移表と状態遷移図は、多くのツールが相互に変換してくれます。片方を定義すれば、もう片方は自動生成してくれます。筆者も1つツールを提供していますので、ご活用ください。

 開発設計者は基本的に「起こってほしいこと」をモデル化して設計していくことが多いと思います。常にすべての組み合わせの場合を網羅的に考えていると、一向に整理が進まず、設計も進みません。最もシンプルな基本的振る舞いのルールを発見するべく、複雑さを縮減する方向に頭を働かせています。状態遷移表で×の入っているところは基本的に関心のない部分です。

 さて、ハードウェアの場合は、その関心のない部分については、特になにか機構を設けないので、何も起こらないことのほうが普通です。一方、ソフトウェアの場合は、設計時に関心を払っていない、かつ想定しないイベントが入ってくると、条件分岐のelse文やotherwise、default文のパスに入り込み、とんでもない動作をする危険性が高いと言えます。

 要求されている振る舞いを機能としてしっかり作り込むのと同時に、それ以外の振る舞いは、やはりしっかり防がないと、例えば現物先出し・二重出庫・出荷済からのキャンセル・二重返金・二重請求・キャンセルしたのに請求といった、金銭的な損害やブランドを毀損するようなビジネス上の事故につながってしまいます。

 AI時代になり、AIにやってほしい振る舞いを指示するだけで所望のプログラムが出来上がるようになりました。ただ、それで喜んでいると、危険だということがここからもわかります。やってはいけない振る舞いを教えていないケースが多々あるならば、何をやらかすかわからない。もちろん、人間の経験則からそれを学習している領域も多いと思いますが、検証なしに使用するのはリスクが大きいと言わざるを得ないでしょう。

 テストをしていると、例えば画面に仕様には書かれていない余計な遷移を引き起こすボタンなどが残っているケースを実際に見かけます。開発者はしっかり消したつもりなのでしょうが、表示データ量が多く、複数ページ表示の2ページ目や「もっと表示する」ボタンを押した後などに、消したはずのボタンが復活表示される例もありました。起こってはいけないことを防ぐことができているかを確認するためのテストは、これからもこれまでと変わらずに重要です。

 さて、話を本題に戻します。状態遷移図に対して、状態遷移表は発生してはいけないイベント、起こってはいけない状態遷移、つまり「制約」を表現できていると言えます。

 実は、デシジョンテーブルと原因結果グラフとの間にも、以下に示すようにちょうど同じような対応関係があります。興味深いのは、原因結果グラフ法はモデル図側に制約が表現されることになり、ちょうど状態遷移の場合と反対になっています。

表現形式と制約関係の対応
表現形式と制約関係の対応

 デシジョンテーブルは完全にすべての組み合わせを出せば、その中で期待値とともに制約されるべきものを列挙できるではないかと言われればその通りですが、まさかそれを一つひとつ全部確認するなどというやり方は不合理ですし、動的テストの方法そのものがないということもあります。

※「NeoCEG」には学習モードが付いていて、256列までのデシジョンテーブルであればすべての列を表示し、そのうえで制約関係で潰されている列はそれがわかるように表示されるようになっています。実務で使うことはないと思いますので、学習モード扱いにしています。

 要するに、制約されている実例を挙げ出したら大変な数になってしまうので、どのような制約関係のルールがあるべきで、それが確実に機能しているかをテストするという方法を取るべきでしょう。

次のページ
論理関係と制約関係(ロジックとアーキテクチャ)の境界を設計する

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

AI時代のソフトウェアテスト技法活用法連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/28939 2026/08/25 09:00

イベント

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

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

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

メールバックナンバー