目次テスト設計コンテスト 発表資料
(JaSST’11(JaSST 11 Tokyo)
Team 6666-Kashiwa（山上 直宏）

1. はじめに■参加経緯
TEF MLのメールから、つい出来心で参加してしまいました。
■普段の仕事複合機に内蔵されるプリントエンジン部のソフトウェアテスト
■手法の成り立ち（経緯）ある日突然、他部署で手に負えなくなったソフトウェアを持ち込まれ、「1週間でテストして全部たたきだして！」という、非常に苛酷なストレス環境下で生まれました。

1. はじめに
2. テスト設計の目的
3. テスト設計の方向性（基本方針）
4. テスト技法
5. 優先順位
6. カバレッジ
7. 粒度（どこまで設計するか）
8. 工数
9. テスト容易性 / 環境・ツール
10. テスト設計詳細（アウトプット）
11. 同値クラス
12. レビュー2. テスト設計の目的
インプットが「要求仕様書」のみということから、対象を“機能確認”対象を“機能確認”に絞りこんだ。
“機能確認”に絞りこんだ。
■その理由
例えば・・・ユーザビリティ⇒
ユーザビリティ⇒ユーザ層や設置環境など市場環境に関する情報が必要（商品企画書など）。
信頼性⇒
信頼性⇒市場で想定される使われ方、これまでの出荷実績から推定される必要なMTBF
績から推定される必要なMTBF等が必要。
MTBF等が必要。
⇒これらを含めると仮定・想定が多くなってしまうため今回は除外した。

3. テスト設計の方向性■基本的にはこれまでの「おさらい」基本的にはこれまでの「おさらい」と考える。
「おさらい」と考える。
●要求仕様と合致しているか？（正常系）●要求仕様の行間（隙間）を埋められているか？（未記述・異常系）■設計時の留意点
なるべくシンプルに工数をかけ過ぎないようにする。
なるべくシンプルに工数をかけ過ぎないようにする。
（ソフトウェア自体がシンプルなため、テスト設計自体に工数をかけるのは？）

4. テスト技法
方向性のうち、「要求仕様の行間を埋められているか？（未記述・異常系）」
を満足するため、状態遷移表を使用する。

出典：Wikipedia（状態遷移表）

状態遷移表の特徴（概要）メリット：モレ・抜けを顕在化しやすい。
デメリット：状態・イベントが増えると項目数が膨大になる。

1

5. 優先順位

6. カバレッジ

以下の観点から優先順位を付ける。
（あまり複雑にすると、順位付けに工数がかかるため、シンプルため、シンプルに）
シンプルに）

機能確認を主目的にしているため、「要求仕様網羅率：100(%)
「要求仕様網羅率：100(%)」100(%)」を目標とした。

1. 正常系（通常の操作範囲）
正常系
2. 異常系（故障・エラー等動作継続できなくなると想定される異常系もの）3. 異常系（故障・エラー等動作継続できなくなると想定されな異常系
いもの）具体的には要求仕様書の以下の項目に記載されている機能に関して網羅するように設計した。
2. 操作要求仕様
3. 温度制御行為
4. 温度制御方式
5. エラー検知

7. 粒度

8. 工数

どの程度まで細かく設計するか？
⇒一番悩みました。
段階的詳細化の目的の一つである、「再利用性の向上」を意識し、以下のように設定した。
「再利用性の向上」を意識し、以下のように設定した。

類似製品（ソフトウェア）であれば設計を小改造で流用できる粒度。
具体的には・・・状態遷移表の状態・イベントを割り出すところまで行う。
実際の結果・実施順序決定はテスト実装にて行う。

9. テスト容易性 / ツール・環境■容易性
操作部（ボタン・表示機能）は目視で確認できる操作部（ボタン・表示機能）は目視で確認できるため特に問目視で確認できるため特に問題はない。
温度制御等内部の動作は直接目視できない
温度制御等内部の動作は直接目視できないため、後述す目視できないため、後述するツール・治具があると良い。
■ツール・環境
以下のようなツール・治具があるとテストが容易になる。
ログ出力機能⇒内部状態、サーミスタ検知温度の確認に必要。
サーミスタ温度設定治具⇒温度制御、温度表示、エラー検知機能の確認に必要。
水位センサ設定治具⇒水位表示、空焚き防止機能の確認に必要。

以下の方法により、概算工数（2.5以下の方法により、概算工数（2.5人日）を算出した。
2.5人日）を算出した。
全体項目数を状態・イベント数から算出 ⇒有効/有効/無効操作比率を概算 ⇒
上記の数値を想定工数に掛け合わせる
項目数
状態数：31、イベント数：29 ⇒全体項目数：899
時間当たり消化項目数（所要時間）
有効操作：1項目/分（1.00分）
無効操作：6項目/分（0.17分）
有効操作/無効操作比率（例）状態遷移表全体から概算：54:46
故に概算工数：約6時間（1人日）
実装工数：約9時間（1.5人日）・・・前提：有効1項目/分、無効4項目/分

10. テスト設計詳細(1/3)
テスト設計詳細(1/3)
要求仕様から状態要求仕様から状態と状態とイベントを割り出す作業。
イベントを割り出す作業。
⇒ただし通常の状態遷移表ではテストに不都合なため、仕様書に無い状態・イベントを拡張なため、仕様書に無い状態・イベントを拡張して拡張している。
例えば・・・
一定周期でエラーチェックを行う場合周期タイマイベントで遷移する「エラー条件判断
周期タイマイベントで遷移する「エラー条件判断状態」を追加する。
状態」を追加する。など。

210. テスト設計詳細(2/3)
テスト設計詳細(2/3)

10. テスト設計詳細(3/3)
テスト設計詳細(3/3)

抽出した状態：31
抽出した状態：31

仕様

拡張状態
アイドル
沸騰行為
保温行為
エラー

抽出したイベント：29
抽出したイベント：29

仕様に記述された状態の下位に追加する拡張状態（複数の状態にまたがる状態）
高温モード
節約モード
ミルクモード ロック
ロック解除 カウントダウン中 カウント停止
高温モード
節約モード
ミルクモード ロック
ロック解除 カウントダウン中 カウント停止
高温モード
節約モード
ミルクモード ロック
ロック解除 カウントダウン中 カウント停止（ここにも上記の状態を入れても問題ないが、エラーからの遷移先がないため必要が低い。）

外部 /内部 拡張 外部入力/内部 イベント
外部仕様 満水センサ
第1水位センサ
第2水位センサ
第3水位センサ
第4水位センサ
蓋センサ
サーミスタ

蓋オープン
満水表示
空表示
給湯中
カルキ抜き中
目標温度到達判断（目標温度ON/OFF方式）
ヒータ出力判断（PID制御方式）
エラー判定（高温）
エラー判定（温度下がらず）
エラー判定（温度上がらず）取り得る状 態
ON
OFF
ON
OFF
ON
OFF
ON
OFF
ON
OFF
ON
OFF
数値(10～150)

沸騰ボタン

ON

OFF

タイマボタン

ON

OFF

給湯ボタン
解除ボタン

ON
ON

OFF
OFF

保温設定ボタンONOFF

ヒータ用電源拡張 水量異常状態（全水位センサOFF）

ON
ON

OFF
OFF

沸騰行為移行条件（蓋センサON&ON

OFF

ポンプ駆動条件（水量適正&蓋センサがONして ON

OFF

満水センサOFF&全水位センサOFFでない）
いる&ヒータ用電源がONしている）

内部

11. 同値クラス

タイマカウントダウン（1sおき）
タイマカウントダウン終了
カルキ抜き3分実施完了
制御周期
監視周期（温度上がらずエラー）

ON
ON
ON
ON
ON

OFF
OFF
OFF
OFF
OFF

機能実現に必要な イベント
OFF>ON ON>OFF
OFF>ON ON>OFF
OFF>ON ON>OFF
OFF>ON ON>OFF
OFF>ON ON>OFF
OFF>ON ON>OFF ONして(3s以上) (1s以上) いる
高温エ 温度下 温度上 目標温 E0テーブ ⊿T0-11℃
ラー検知 がらずエ がらずエ 度以上 ル条件 テーブル
温度超 ラー温度 ラー温度数分
条件数分
過超過(3s 以上以上)
OFF>ON(0.1s以上)
OFF>ON ON>OFF OFF>ON(0.1s以 (1s以上) (3s以上)上)OFF>ON ON>OFF
OFF>ON(0.1s以上)
OFF>ON(0.1s以上)

151℃

-1℃

0℃

ONしているONしているONしている
OFF>ONOFF>ONOFF>ONOFF>ONOFF>ON

12. レビュー

機能と状態/機能と状態/イベントの相関表
イベントの相関表を作成して抽出する。
相関表を作成して抽出する。

一番重要。
観点のズレ、モレを第三者にチェックしてもらう。

例：状態-機能相関表
ポット内水量インジケータ表示

○ ○○
○
○

○
○
○

実際には・・・
同値クラスで省いたものの中にで省いたものの中に重要な項目同値クラス
で省いたものの中に重要な項目があった。
重要な項目があった。
（アイドル状態での給湯機能無効チェックなど）
エラー検知

タイマボタン押下⇒時間セット、タイマ起動○

温度制御方式（PWM、目標温度ON/OFF、PID制御）

給湯ボタン押下⇒給湯行為

○

アイドル

給湯ロック/アンロック

○

保温行為

保温温度設定（3種類）

○
○
○

沸騰行為

保温中沸騰ボタン押下⇒沸騰行為
開始○

蓋開⇒ロック解除・温度制御停止

アイドル
沸騰行為
保温行為
エラー

蓋開閉検知

状態

コンセント抜き差し

機能

○
○
○

○
○

○
○
○

レビューは非常に重要。
（テスト設計最後の防波堤（テスト設計最後の防波堤）
防波堤）

3