没セッション資料知識ゼロから学んだソフ
トウェアテスト暁 紫電
@akatukisiden
自己紹介• HN: 暁 紫電• Twitter: @akatukisiden• 本名 : 伊藤 伸男• フリーランス プログラマー• 使用言語• C++• C#• C++/CLI• Etc…
アジェンダ1. はじめに2. ソフトウェアテストについて ( 先人たちのお言葉 )3. ホワイトボックステスト4. ブラックボックステスト5. 探索的テスト
1. はじめにDevelopers Summit 2014 のコーヒースポンサー (\10500) になったところ参考書「知識ゼロから学ぶソフトウェアテスト【改訂版】」をもらったので勉強してみました
2. ソフトウェアテストについて ( 先人たちのお言葉 )• 「ソフトウェアテストは もっともポピュラーな品質改善方法であ
る」By Steve McConnel (Code Complete 著者 )
• 「テストでプログラム中のバグの存在は示せても、 バグが存在しないということは示しえない」
By E.W.Dijkstra• 「バグを全部見つけるのは無理だと心得ろ!」
By Cem kaner ( 基本から学ぶソフトウェアテスト著者 )
• 「テストとは、エラーを見つけるつもりでプログラムを実行する過程である」
By G.J. Mayers ( ソフトウェア・テストの技法 著者 )• 「テストとは、プログラムを既知の環境下で選ばれた入力により
実行した結果に基づいてその動作特性を推論する過程である」By J.B.Goodenough
• 「テストとは、サンプルデータの集合でプログラムを実行することにより、
プログラムの動作を調べること」By W.R.Adrion
• 「テストとは、エラーを明らかにするために、プログラムコードを管理しながら実行するこ
と。」By M.S.Deutch
• 「エラーは見つからないだろうという仮定の下にテストの計画を立ててはいけない 」
By G.J. Mayers • 「プログラムのある部分でエラーがまだ存在している確率は、
すでにその部分で見つかったエラーの数に比例する」 By G.J. Mayers• 「ソフトウェアテストで重要なのは、
どの部分にバグが出やすいのか、 そこにどのようなテスト手法を適用すれば十分な品質が得られるかを
知ることである 」 By 高橋寿一 ( 知識ゼロから学ぶソフトウェアテスト著者 )
3. ホワイトボックステスト
3.1 ホワイトボックステストとは• すべてのソフトウェアテストの基礎• プログラムの論理構造が正しいかを解析するテスト• テストのが十分行われたかどうかの指標として 「コード全体のうち、テスト対象となった部分の割合」 ( カバレッジ率・コードカバレッジ ) を用いる
• ソフトウェアの仕様が間違っていることから起こるバグは発見できない →ブラックボックステスト
3.2 ホワイトボックステストの歴史• 1960 年代、テスト手法の誕生時はホワイトボックステストが主流• ウォーターフォール型開発では プログラムの内部構造に基づくホワイトボックステストは高コスト ( ホワイトボックステスト 全ソースコード再チェック≒ )• 1990 年代にはブラックボックステストが主流になる• 2010 年代、 XP/ アジャイル / スクラムなどの開発手法や テストコードを書いてからコーディング、テストの実行を行う テスト駆動開発 (Test Driven Development/TDD) により、 ホワイトボックステストが低コストで行えるようになり、復権を果たす
3.3. 制御パステスト ( カバレッジテスト )• プログラムがどのような振舞いをして、どのように制御・実行さ
れていくかをテストする• プログラム中のコードがすべて実行されるようにテストデータ
を与える• テスト達成率=カバレッジ率•達成率 ( テスト網羅性 ) の定義=カバレッジ基準
3.3.1 ステートメントカバレッジ(命令網羅)• コード内の命令文を一回は実行されるようにテストケースを書
く• 分岐の中身が実行されることを確認•命令がない分岐はテストしないため
• 例:女性客は水曜日に無料→ 無料になるケースを一度テストすれば網羅率 100%→ 無料にならないケースはテストをしないので実は無料に
なっていても気づかない
3.3.2 ブランチカバレッジ ( 分岐網羅 )
• コード内のすべての分岐について真の場合と偽の場合が それぞれ少なくとも 1回は出力されるようにテストを設計する。• 判定結果に対するテストなので 複合条件の場合などにテスト漏れが起きる場合がある。
• 例:女性客は水曜日に無料 → 無料になるケース・ならないケースを一回ずつテストすれば 100%網羅 → 個々の判定条件に関してはテストしないので、 具体的なテスト条件にしていない条件で不具合が残る可能性がある。
3.3.3 カバレッジテストでは検出できないバグ•カバレッジテストですべてのバグを見つけるのは理論
的に不可能•見逃しやすいバグ• ループに関するバグ• 要求仕様自体が間違っていたり、機能が備わっていないバグ• データに関するバグ• タイミングに関するバグ
4.ブラックボックステスト
4.1 ブラックボックステストとは• プログラムを一種のブラックボックスと見立てて、様々な入力
を行うことによって、ソースコードを利用せずにテストを行う手法•現在、ほとんどのソフトウェアのテストが
ブラックボックステストで行われている• あ
同値分割法• 入力領域を等価とみなせる範囲ごとに 「同値クラス」という部分集合に分割し、 各クラスから代表値を選んでテストデータとする方法
同値分割法:例• 仕様
• 入力 A: 1 から 999 まで入力可能• 入力 B: 1 から 999 まで入力可能• 出力 C: A×B
• 全パターンテストすると100万回以上のテストが必要
同値分割法:例•同値クラス• 無効同値 1 : 0以下• 有効同値 : 1~ 999• 無効同値 2 : 1000以上
•値を三種類の同値クラスに分けることで、領域が 9 つに分かれる
有効同値
有効同値
無効同値 2
無効同値 1
無効同値 2無効同値 1
強い同値クラステスト• それぞれの領域から
適当な代表値を選ぶ。• それに (0,0) を追加※値 0 はバグになりやすいので入力可能な時は常にテストする
• 10 パターンで済む
有効同値
有効同値
無効同値 2
無効同値 1
無効同値 2無効同値 1
0
1 2 3
45 6
78
9
弱い同値クラステスト•有効・無効の組み合わせに
よって、処理に違いがないのであればさらに共通化し• テストは4回ですむ。
有効同値
有効同値
無効同値 2
無効同値 1
無効同値 2無効同値 1
0
3
5
7
境界値分析法•値の境界部分にはバグが発生しやすい ( 比較演算子の間違いな
ど )•異なる処理が行われる、一番近い二点をテストすることでバグ
を見つける• 先程の例でいえば 0,1 ,999,1000 の四点
ディシジョンテーブル• 全ての入力の組み合わせとそれに対する動作・出力を明記する• 全体のテスト構成を見渡せるのでテストケースの抜けを発見しやす
い•項目が少なく、かつ複雑な動きをするソフトウェアで非常に有効
状態 ルール
ルール 1 ルール 2 ルール 3 ルール 4
C1:A=有効 T T F F
C1:B=有効 T F T F
動作
A1: 計算値出力 ✓
A2: 入力エラー ✓ ✓ ✓
状態遷移テスト
5. 探索的テスト
ランダムテスト