ペトリネットを利用した状態遷移テスト

和田 浩一
東京エレクトロン㈱ SDC FAグループ

目次• ペトリネットの概要• 適用事例

ペトリネットの概要 － ペトリネットとは• ペトリネット（Petri Net）とは、カール・アダム・ペトリが1962年に発表した離散分散システムを数学的に表現する手法である。
• 視覚的で、数学的な離散事象システムをモデル化するツールの一つである。

ペトリネットの概要 － ペトリネットの表記と挙動
発火
Place1

Place

Timed
Place

Transition

Timed
Transition

Transition1

Place3

Place2

発火
wait
Arc

Token

Place1

Transition

Place2

wait
Place

発火
Place1

Transition1

発火
Place2

Transition2

Place3

ペトリネットの概要 － ペトリネットの表記と挙動
Place/Transitionは役割に応じた名前をつける
双方向に矢印があるものは、Place→TransitionのArcとTransition→PlaceのArc 計2本をまとめて記載したもの

ペトリネットの概要 － Transitionの同時発火同時刻に事象が成り立つことを１つのモデル上で表現できることがポイント

ペトリネットの概要 － ペトリネットのメリット• 少ない部品で表現できるので図が描きやすい• シミュレーションを実施することができる– 状態遷移の検証ができる• 並行性、非同期性を表すことができる– 変更による影響範囲の特定が容易になる– システムの整合性が検証できる

静的なフローチャートとは異なり、状態をモデル上で動かす事が可能ペトリネットの概要 － CPNToolsを用いた状態モデル• CPNToolsを用いて2つの状態モデルを合成した図メッセージの送受信 モデル１：送信側 モデル２：受信側
送信側

受信側

ペトリネット図ペトリネットの概要 － CPNToolsを用いた状態モデル• 合成した状態モデルから算出する可達グラフ
メッセージの送受信 モデル１：送信側 モデル２：受信側合成したPlace

複数のPlaceを合成した上で全ての遷移状態を表すことができる。

可達グラフ

適用事例
•••
•
•••
•

はじめに
対象システムの概要
問題点
問題点の分析
施策
効果その他の効果まとめ

適用事例 － はじめに
• はじめに本事例発表は既存システムの状態モデル改修作業を行う際に使用したペトリネットを用いたテスト取り組みについて説明します。

適用事例 － 対象システムの概要• 対象システムの概要

半導体製造装置

コード行数
約150万LOC
状態モデル数30モデル

対象システムお客様システム1. 半導体製造装置で発生したイベントをお客様システムに沿った内容に変換して報告しています。
2. イベントは半導体製造装置から報告され、各部位毎に状態モデルを用意してお客様システムに報告しています。
3. 状態モデル内の遷移は半導体製造装置で発生したイベント以外にも状態モデル間で連動しての遷移も行っています。

適用事例 － 解決したい問題点• システムテストで報告される欠陥が多く、手戻りが多いお客様の運用に沿ったテストを実施

開発工程

機能をシステムに取り込みテストを実施

システムテスト

要求分析

機能テスト

機能仕様

結合テスト

構造設計
プログラム設計

単体テスト
コーディング

機能に対してのテストを実施

適用事例 － 問題点の分析• システムテストで発見される欠陥を分析すると、システムテスト
以前で発見されるべき問題が多くあった
開発工程
単体テスト、結合テスト、機能テストで取り除かれる内容の欠陥がシス
テムテストで発見されていた

システムテスト

要求分析

機能テスト

機能仕様

結合テスト

構造設計
プログラム設計

単体テスト
コーディング
欠陥が発見された場合、機能仕様や構造設計まで手戻りが起こり、テスト設計の見直しも必要になっている

適用事例 － 問題点の分析• テストで使う“入力資料” の作成時期
システムテスト

要求分析

機能テスト

機能仕様

結合テスト

構造設計
“ステートチャート” を作成

プログラム設計

単体テスト
コーディング“状態遷移表” を作成“テスト仕様書” を作成

状態遷移表を元にした“単体テスト” を実施

テスト仕様書を元にした結合・機能テストを実施

適用事例 － 問題点の分析• 今までの状態モデルのテストケース作成手順
STEP1：要求分析結果からステートチャートを作成する。
状態モデルが複数ある場合はそれぞれのステートチャートを作成する。

STEP2：ステートチャートから状態遷移表を作成する。
ステートチャート

状態遷移表

適用事例 － 問題点の分析• 今までの状態モデルのテストケース作成手順STEP3：状態遷移表を元にテストケースを作成する。複数の状態モデルが絡む場合には合成してテストケースを作成する。

状態遷移表1

テスト仕様書

状態遷移表2

適用事例 － 問題点の分析• テストケース作成の問題点を分析すると、1. 状態モデル内の影響範囲の特定不足でテストケース漏れが発生している。
2. 状態モデルが合成された場合の並行性(結合)に関してのテストケース漏れが発生している。

分析結果より、以下の条件を満たす手法を検討
1. シュミレーションできる事(可視化)。
2. 状態モデルを複合させ、表現できる事。

ペトリネットを用いて状態モデルを表す事を行う事にしました。

適用事例 － 施策
• 影響範囲を特定する
CPNToolsを用いて、それぞれの状態モデルのステートチャートを作成する。
STEP1：ステートチャートを作成し、シュミレーションする

STEP2：可達グラフより、遷移条件を求める状態モデル図状態モデル図から算出した可達グラフ

適用事例 － 施策
• 状態モデルを複合する
CPNToolsを用いて、それぞれの状態モデルのステートチャートを複合する。
STEP3：合成させたステートチャートを作成し、シュミレーションする

STEP4：可達グラフより、遷移条件を求める
合成された状態モデル図

状態モデル図から算出した可達グラフ

適用事例 － 施策
• 既存の状態遷移表と可達グラフの差分をチェックする
Step5：既存の状態遷移表と可達グラフで算出された遷移条件を比較して、テストされていないテストケースをピックアップ。

状態遷移表
可達グラフ

状態モデル数30個中10個で差分(テストケース不足)が発見された。

適用事例 － 施策
• 既存のテスト仕様書と可達グラフの差分をチェックする
Step6：既存のテスト仕様書と可達グラフで算出された遷移条件を比較して、テストされていないテストケースをピックアップ。

テスト仕様書

可達グラフ

遷移数185ケース中18のケースで差分(テストケース不足)が発見された。

適用事例 － 施策
• テストケース不足に対するテストを実施
Step7：テストケース不足に対するテスト仕様書を新たに作成してテストを実施する。

新たに作成したテストケースから6個の欠陥が発見された。

適用事例 － 効果
• 施策に対する効果
1. 可達グラフより、全テストケースの約10%(18/185ケース)の漏れが発見された。
2. 新たに作成したテストケースから約30%(6/18ケース)という高率で欠陥を発見する事ができた。

テストケース漏れを起こす箇所では欠陥が多く存在する

適用事例 － その他の効果• ペトリネット作成後の活用－テストだけではなく開発を含めた全工程で活用した。

要求分析

曖昧な仕様指摘

ペトリネット

システムテスト

テストケースの設計

機能テスト

機能仕様

結合テスト

構造設計
仕様の曖昧さを減らす。

プログラム設計

単体テスト
コーディング仕様の分析結果（テスト用モデル）をソフトウェア設計に入力し、設計漏れを抑える。

テスト用モデルを基にソフトウェア設計モデルの動作をテストし、ソフトウェアの設計ミスを検出する。

適用事例 － その他の効果• レビューでの活用－全工程でペトリネットを活用した事により、開発でのレビュー指摘件数が50%向上した。

指摘件数が約50%増加

ペトリネット導入前レビュー指摘率

ペトリネット導入後レビュー指摘率

適用事例 － まとめ• 多くの欠陥が残る箇所のテストケースを発見することができた。
• 状態モデルが動的に可視化された事により、レビューの指摘件数が上がった。
• 開発の全工程で既存システムとの比較ができたので、欠陥除去率を上げることができた。

ご清聴ありがとうございました

適用事例 － Backup• 適用事例① 状態モデル図

適用事例 － Backup• 適用事例② 状態モデル図

適用事例 － Backup• 適用事例③ 可達グラフ