猫でも分かるソフトウェアのテスト網羅(6):パス・カバレッジの王者の意外な弱点:山浦恒央の“くみこみ”な話(89)(3/3 ページ)
「制御パステスト」をテーマとする「猫でも分かるソフトウェアのテスト網羅」シリーズの第6回では、前回に引き続き「C2カバレッジ」を取り上げます。パス・カバレッジの王者ともいわれる「C2カバレッジ」ですが弱点がないわけではありません。
2.4.1 「未満」と「以下」を間違える
「未満」と「以下」の誤認識する場合を考えましょう。「未成年とは20歳未満のこと」であれば、例題の記述は正ですが、開発したプログラマが、「20歳未満」を「20歳以下」と勘違いをした場合はどうでしょうか(*3)。
*3:この「境界条件のエラー」は、古今東西のプログラムのバグの永遠不滅の王者です。
if (in <= 20) { printf("未成年です\n"); }
in=9、in=30では、「未成年です」と表示されるか、何も表示されないかどちらかです。これでは、プログラマが最もミスを犯しやすい「境界ケース」を網羅できず、間違いに気付けないことがあります(*4)。
*4:仕様の未記載や仕様の誤解から、バグが発覚して、数日(時には数週間、数カ月)を無駄にするケースを何度も見てきました。例えば、仕様記述者と実装側エンジニアが「未成年」の解釈が違うなどです。この場合、両者の責任の擦り付け合いに発展することが多く、プログラムの仕様の誤解以上に、両者の感情的な問題に発展する問題が少なくありません。大抵、仕様記述者の立場が強く(組織の地位的にも上位にあることがほとんど)、実装側の責任にされてしまうようです。筆者の経験上、本当の責任は、曖昧な仕様を記述した側にあると思っています。敗けるな、プログラマ!
2.4.2 仕様が間違っている
そもそも、仕様が間違っているケースはどうでしょう。本例では、未成年を暗黙的に20歳未満としていますが、実は18歳未満だったらどうでしょう。その場合も、上記同様、バグを検出できません(*5)。
*5:テスト項目にも間違いがあることも忘れてはなりません。ソフトウェアのテスト項目が間違っている確率は20%といわれています。高校の中間テストや期末テスト、はては入試問題でも、途中で先生が入室して、「問題文の訂正があります。問5の(3)に『鎌倉時代の』とありますが、『平安時代の』に変更してください」とアナウンスしたりします。多数の先生がチェックしているテスト問題でもこれだけの誤りがあるのです。ましてや、1人で設計して作成するソフトウェアのテスト項目には、かなりの数のエラーがあります。
上記から、制御パステストを実施したからOKとする前に、仕様に着目したテスト(境界値分析、同値分割など)がキチンとできているか分析しましょう。
3.終わりに
開発技法には、利点もあれば欠点も存在します。筆者の個人的な考えでは、「C2カバレッジは、欠点の大きさに比べて利点が小さく、労力の割に効果が出ないテスト」です。読者の皆さまは、今回紹介したC2カバレッジの欠点を理解しつつ、制御パステストを実施していただければと思います。知っていてやることと知らずにやることとは大きな違いがあるでしょう。
次回は、「C2カバレッジ100%」をクリアーする場合に鬼門となる「ループ」「割り込み」「デットコード」の3つに触れます。
参考文献
[1]「ソフトウェアテスト実践ガイド」(大西建児著、2004年、日経BP)
[2]「知識ゼロから学ぶソフトウェアテスト 改訂版」(高橋寿一著、2013年、翔泳社)
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- 猫でも分かるソフトウェアのテスト網羅(5):C2カバレッジはエベレスト登山か?
「制御パステスト」をテーマとする「猫でも分かるソフトウェアのテスト網羅」シリーズの第5回では「C2カバレッジ」を取り上げます。C1より網羅性が高いので、高信頼性を求めるソフトウェア開発の管理者や発注者に好まれますが、実際にテストを行うプログラマにとってエベレスト登山並みの大変さになる可能性もあるので注意が必要です。 - 猫でも使えるソフトウェアのテスト網羅(4):C1カバレッジの弱点とエンジニアの信念
ソフトウェアにおけるホワイトボックス・テストの代表格がパス網羅です。パス網羅にもいろいろありますが、条件文の結果が「真」「偽」になる両方をテストする「C1」が広く利用されます。今回はC1パス・カバレッジの長所と短所を確認します。 - 猫でも使えるソフトウェアのテスト網羅(3):無料ツールで単体テストを楽に実行しよう
組み込み開発の大規模化により、プログラムテストの重要性が高まっています。パス網羅をベースにする単体テストは困難な作業ではありませんが、ツールを導入することで効率化できます。今回はGcovを用いたテスト手法を紹介します。 - 猫でも使えるソフトウェアのテスト網羅(2):パス網羅の種類と内包する問題点
趣味ならとにかく、ビジネスとしてのプログラミングに「網羅的なテスト」は欠かせません。網羅的なテストの代表的な手法である「制御パス・テスト」の手法について、解説していきます。 - 猫でも使えるソフトウェアのテスト網羅(1):基本のC0パス・カバレッジ
ソフトウェアのバグが全て取れたか?は開発における最大の関心事でしょう。網羅的テストはもちろんですが、その前に単体テストが必要です。代表的な手法である「制御パス・テスト」の基礎を紹介していきます。