狠狠撸

狠狠撸Share a Scribd company logo
没セッション資料
知識ゼロから学んだソフ
トウェアテスト
暁 紫電
@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 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
4
5 6
7
8
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.探索的テスト
ランダムテスト
没セッション 知識ゼロから学んだソフトウェアテスト

More Related Content

没セッション 知識ゼロから学んだソフトウェアテスト