作ったプログラムが正しく動くかを確かめるのがテストです。テストには大きく分けて、中身(コード)を見て行うものと、中身を見ずに入力と出力だけで行うものの2つの考え方があります。今回はこの2大技法と代表的な手法、テストの段階(レベル)を、試験で迷わないところまで整理しましょう。
ホワイトボックステストと網羅基準
せんせー、テストって、ぜんぶ同じやり方でやるんですかぁ?
ふふ、ちがうのよ。
テストの考え方は大きく2つ。
プログラムの中身を見て確かめるホワイトボックステストと、中身は見ずに入力と出力だけで確かめるブラックボックステストね。
ホワイトとブラックって、なんか色で覚えやすいじゃん。
でも、なんで色なの?
箱(ボックス)が透明か、真っ黒かのイメージです。
ホワイトボックスは箱の中が透けて見える=コードの中身が見える。
ブラックボックスは箱が真っ黒で中が見えない=入口と出口だけで判断する、という対比ですね。
わぁ、透明な箱と黒い箱…それなら忘れなさそうですぅ。
まずホワイトボックスから見ましょう。
コードの中身を見るので、『どこまで実行できたか』を基準にするの。
これを網羅基準というのよ。
代表が3つあります。
命令網羅、分岐網羅、条件網羅です。
うーん、命令網羅と分岐網羅って、なにがちがうの? どっちも全部やってる気がするんだけど。
いい疑問ね。
たとえば『もし会員ならポイントを付ける』というプログラムを考えてみて。
命令網羅は『ポイントを付ける』命令を1回でも実行すればOK。
でもそれだと、会員じゃなかったとき(何もしない方)を1度も試していないのよ。
あー! 分岐網羅は『会員のとき』も『会員じゃないとき』も両方ちゃんと通すってことか。
命令網羅より厳しいんだね。
そのとおりです。
厳しさの順は 命令網羅 < 分岐網羅 < 条件網羅。
後ろにいくほどテストの抜けが少なくなります。
覚え方は『命令(めい)・分岐(ぶん)・条件(じょう)』の順でだんだん細かくなる、です。
じょうけん網羅は、分岐よりさらに細かいんですねぇ。
なんだか大変そう…
細かいぶん安心だけど、その分テストの手間も増えるの。
だから現場では『どこまでやるか』をバランスで決めるのよ。
ITパスポートでは、内部構造を見るのがホワイトボックス、と押さえれば十分だわ。
ブラックボックステストの代表技法
じゃあ次は黒い箱、ブラックボックスだね。
中身見ないで、どうやってテストするの?
入力と出力だけで考えるの。
代表は3つ。
同値分割、境界値分析、それにデシジョンテーブルね。
どうちぶんかつ…って、どういうことですかぁ?
例で考えましょう。
料金が『18歳未満は子ども料金、18歳以上は大人料金』だとします。
このとき入力をすべて試すのは無理ですが、振る舞いで見れば子どもグループと大人グループの2つだけ。
各グループから1つ、たとえば10歳と30歳を選べば全体をカバーできる、という考え方です。
なるほど、似た仲間は1人代表を出せばいいってことね。
クラスの班から1人ずつ発表するみたいな。
うまいたとえね。
そして境界値分析は、その境目をねらい撃ちするの。
さっきの例なら17歳と18歳。
バグは『未満』と『以上』を取り違えるなど、境目でいちばん起きやすいから、そこを確実に拾うのよ。
あぁ、境い目があぶないから、わざとそこを狙うんですねぇ。
なるほどぉ。
補足すると、デシジョンテーブルは条件が複数あるときに便利です。
『会員か』『5000円以上か』で送料が変わるなら、2条件の組み合わせを表にして、抜け漏れなく整理できます。
表にすると、試し忘れがなくなるってことか。
たしかに頭の中だけだと組み合わせ抜けそうだもんね。
単体から受入までのテストレベル
そうね。
さて、ここまでは『どうテストするか』の話。
今度は『どの単位でテストするか』、テストレベルを見ましょう。
小さい単位から大きい単位へ4段階です。
単体テスト → 結合テスト → システムテスト → 受入テスト。
V字モデルで設計工程と対応します。
部品ひとつ→組み合わせ→全体→お客さん確認、って階段みたいだね。
マジで覚えやすい。
目的別テストと自動化
他にも目的別のテストがあるわ。
修正したときに使うのが回帰テスト、システムに高い負荷をかけて耐えられるか見るのが負荷テストよ。
かいきテストって、直したのに逆もどり?
って意味なんですかぁ?
近いです。
『一か所直したら、別のところが壊れていないか』を確かめるテストです。
修正の副作用チェック、と覚えると分かりやすいですよ。
わかる! ゲームのアプデでバグ直したら別の場所がバグるやつだ。
あれを防ぐテストね。
その通りです。
最近はテストを先に書いてから実装するTDDや、テストを機械にやらせる自動テストも重視されています。
最後に整理するわね。
テストは2つの考え方が背骨。
中身を見るホワイトボックス(命令・分岐・条件網羅)と、入出力だけのブラックボックス(同値分割・境界値分析・デシジョンテーブル)。
テストの単位は単体→結合→システム→受入の4段階。
あとは回帰テストと負荷テストの目的を押さえれば、テスト分野は怖くないわ。
確認クイズ
プログラムの入力と出力だけに着目し、内部構造を考慮しないテスト技法はどれか。
- ホワイトボックステスト
- ブラックボックステスト
- 結合テスト
- 負荷テスト
こたえを見る
正解: 2. ブラックボックステスト
ブラックボックステストは内部構造(コード)を見ず、入力と期待される出力だけに着目する技法で、同値分割や境界値分析が代表例です。ホワイトボックステストは逆に内部構造を見て命令網羅などを行う技法なので誤り。結合テストはモジュールを組み合わせて確認する『テストの段階(レベル)』、負荷テストは高負荷時の挙動を見る『目的別のテスト』であり、いずれも内部を見るか否かという観点の技法ではないため誤りです。