このページではソフトウェアのテスト方法を整理しています.

目次

  1. V字モデル
  2. ホワイトボックステスト
    1. 制御フローテスト
    2. データフローテスト
  3. ブラックボックステスト
    1. 同値クラステスト・境界値テスト
    2. デシジョンテーブルテスト
    3. 状態遷移テスト
    4. 組合せテスト
  4. 参考文献

V字モデル

テストでは不具合(おかしな挙動)を発見し,不具合が欠陥であること(ソフトウェアを原因として発生していること)を確認します.

開発工程では全体から部分を詰めて設計を進めますが,実際に作り上げるコーディングを境とし,テスト工程に移ったら部分を固めながら全体へ向かいます.
このため,「V字モデル」を描きます.

「単体テスト」では,ソフトウェアを構成する最小要素であるモジュールをテストします.
次に,モジュール間におけるデータ受け渡し等の連携を確認する「結合テスト」や,複数のモジュールから構成された1つの機能をテストする「機能テスト」を実施します.
最後に,「システムテスト」で,要求を満たすための機能群が実装されたかを確認します.

ホワイトボックステスト

単体テストでは,ホワイトボックステストを実施します.
「ホワイトボックステスト」はソフトウェア内部の論理構造に基づき,その処理が正しいか確認するテストです.

ホワイトボックステストにはモジュールを構成する論理要素の実行を確認する「制御フローテスト」とデータや変数が定義〜解放の順に処理されるか確認する「データフローテスト」があります.

制御フローテスト

制御フローテストではフローチャートを作成し,カバレッジ基準を定めます.
カバレッジ基準はフローにおいてどの要素を全て通過するかを意味します.

  • ステートメントカバレッジ:命令文を基準とする.
  • デシジョンカバレッジ:条件分岐を基準とする.
  • 複合条件カバレッジ:条件文におけるand/orの個々の文まで基準とする.

複合条件カバレッジが100%であれば,デシジョンカバレッジも100%となります.
デシジョンカバレッジが100%であれば,ステートメントカバレッジも100%となります.

一例として,発券システムに関する次のフローチャートがあるとします.

図でYesの経路をテストすれば,システムの命令文が全てテストされるので,ステートメントカバレッジは100%です.
YesとNoの経路を両方テストすると,全ての条件分岐を検討したことになるので,デシジョンカバレッジは100%になります.
デシジョンカバレッジが100%となるのはYesとNoの両方の経路をテストした場合なので,Yesの経路のみをテストすれば十分であるステートメントカバレッジも100%となっています.

データフローテスト

データフローテストでは,フローの中で以下を確認します.

  • 未定義である変数がないか.
  • 使用されていない変数がないか.
  • 解放し忘れている変数がないか.

ブラックボックステスト

機能テストとシステムテストでは,ブラックボックステストを実施します.
「ブラックボックステスト」は内部構造を参照せず,入力に対して期待される出力が返るか確認するテストです.

同値クラステスト・境界値テスト

「同値クラステスト」は,同じ動作が期待される集合の代表値をとってきて行う簡易なテストです.
「境界値テスト」は境界値と,そこから1単位増減した値でテストします.
仕様変更に備えて,あるいは,仕様変更が繰り返されたために,隠れた境界値が設けられている場合があるので注意が必要です.

デシジョンテーブルテスト

「デシジョンテーブルテスト」では,複数条件で作られるルールの組ごとに期待されるアクションが何かを整理した表を作成し,各条件の組をテストします.
表が巨大になる場合は,表を分割したり,同時に成立しない条件の組をもった列を削除して,表を整理します.

次は予約システムの例です.
このシステムでは早期予約は会員限定であるとします.

条件・アクション\ルールルール1ルール2ルール3ルール4
条件予約者が会員YYNN
早期予約YNYN
アクション20%オフYNN/AN
10%オフNYN/AN

例えば,ルール1では会員が早期予約した場合に,20%オフで予約が行えるということを表は意味しています.
会員でなければ早期予約できないので,ルール3ではアクションが発生しえません.
表が巨大になるような場合,このルール3のようなルールを削除します.

状態遷移テスト

「状態遷移図」はイベントによる状態間の遷移を図示しています.
それぞれの状態が点,イベントは点と点をつなぐ矢印に当たります.

次図はコピー機の試作機を簡略化した例です.

この遷移図を検討すると,一度コピーすると取り消しボタンが押されるまでコピーモードのままになるという問題をこの試作機が抱えていることが分かります.
コピー終了後は自動で待機中に戻すように機能を加えた方がよいでしょう.

「状態遷移表」は状態×イベントで状態遷移を表にしたものです.
状態遷移図では矢印のないところも表に盛り込まれるため,より網羅的に検討を行うことができます.

状態\イベントスタート取り消し
待機中コピー中待機中
コピー中待機中

この遷移表からは,コピー中にスタートボタンを押すとどのような挙動をするか調べる必要があることが窺えます.

組合せテスト

組合せテストには「All-Pairs法」と「直交法」があります.
いずれも2因子間網羅(=任意の2因子間の関係性をテスト)します.

All-Pairs法はテストを小さくする点で優れる一方,3因子間の情報はほとんど考慮しません.
直交法はAll-Pairs法と比較して余分な情報を含みますが,それだけ3因子間もある程度含みます.
全網羅すべきでないかということも含め,コスト・ベネフィットからテストを選ぶようにします.

同時に成立するはずのない因子の組合せである「禁則」を回避するには,次のような方法があります.

  • 2因子を1因子と見立てる.
  • 禁則を除外した因子水準を因子水準表で作成し,禁則に関わる因子水準の表を追加する.

前者は手続的により簡潔ですが,表が大きくなります.
後者は煩雑ですが,因子水準や禁則が増えても表の肥大は緩やかです.

参考文献

次の書籍は基礎的なソフトウェアテストについて解説しています.

  • 石原一宏, 田中英和 (2012)「ソフトウェアテストの教科書 品質を決定づけるテスト工程の基本と実践」SBクリエイティブ