学んだ背景
選考を受けている会社の技術テストで、フィボナッチ数列を組み単体ユニットテストを実装してくださいという課題がでて、テスト今まで書いたことがなかったので、色々学んでみた。
ソフトウェアテストの意義
著者はソフトウェアの品質が悪いということを、「バグによってその本来の機能が使われずに、そのソフトウェアの潜在的な価値を提供でないこと」と定義している。
この「バグ」が原因で様々な事故が起こった。
- アフリカのESA宇宙センターで打ち上げ時、軌道が外れて自壊した。(浮動小数点に変換する際のオペランド・エラーというものらしい)
※ 被害総額600億円といわれている - 1999年に火星探索衛星の事故(プログラム内部での単位を間違えたらしい)
ソフトウェアの品質というのは大変重要なもので、被害総額もかなりのものになってしまう。かなり重要な要素になってくる。
バグがないソフトウェア=品質100%?
これは違うらしい。バグはどこかしらで必ず発生するものであり、
- どの部分でバグが発生するのかみつけること
- 如何なるテストで十分な品質が得られるのかを考えること
これが重要であると主張している。
ホワイトボックステストとは?
プログラムの内部構造を徹底的に分析するテスト手法のことである。
たとえば
- 1234と入力したら → 条件文を実行する(もし数字なら)→ trueと返ってくる
- あいうえおと入力したら → 条件文を実行する(もし文字なら)→ falseと返ってくる
この間で何が起こっているのかを認識してテストをすることでよい
カバレッジとは
所定の網羅条件がテストによってどれだけ実行されたかを割合で表したもの。
カバレッジ率が80%ですなどと使われていったりする。
(条件分岐のフローチャートをカバーしているかどうかの比率)
カバレッジテストですべてのバグを見つけるのは不可能である。
じゃあ、次はブラックボックステストを実行しなくてはならない。
ブラックボックステストとは
プログラムを一種のブラックボックスと見立てて、さまざまな入力を行うことによって、ソースコードを利用せずテストを行う手法のことである。
主に4つのカテゴリー:入力計算・計算・データ保存・出力処理
ソースコードを見ずに脳死で打ってくテストのことをいう
基本2つのやり方がある
- 同値分割法
– 目的:「どんな入力も正しく処理する」
– 入力領域を「同値クラス」という部分集合に分割し、その部分集合を等価とみなす作業
例) 入力A : 1~999まで入力可能
入力B : 1~999まで入力可能
出力C : A*B
– code
・if (a >0 && a <= 999) // 正しい値が入力された処理
・else // 間違った値が入力された処理 - 境界値分析法
– 目的:「バグをみつける」
– 境界値近くを分析する手法
例)入力A : 1~999まで入力可能
入力B : 1~999まで入力可能
出力C : A*B
– code
・a=0のときは? a=1のときは?
無効同値(~0)
有効同値(1~999)
無効同値(1000~)
有効同値と無効同値で何を入れるべきかを考えていくのは、想像的でクリエイティブィティ感が合ってすきですね笑。
<要求仕様をテーブル・表>
有効同値クラス | 無効同値クラス | 境界値 | |
入力A | 1から999 | 0以下1000以上 | 0, 1, 999, 1000 |
入力B | 1から999 | 0以下1000以上 | 0, 1, 999, 1000 |
コメント