「知識ゼロから学ぶソフトウェアテスト 【改訂版】」を読んでの自分用メモです。気になったところだけ箇条書きにしています。
ホワイトボックス手法
この手法は全てのソフトウェアテストの基礎となるもので、ソフトウェアテストの黎明期に盛んに研究された手法。これからも使う予定はないかもしれないがテスト手法の基礎を学んでおくことは非常に重要です。
ホワイトボックステストとは、プログラムの論理構造が正しいかを解析するテスト。
どんなテスト手法が有効か
ホワイトボックステストは論理構造の正しさのみをテストするため、ソフトウェアの使用が間違っていることから起こるバグは発見できない。
ステートメントカバレッジは、全く役に立たないとまでは言わないが、非常に弱いテスト手法。
分岐のコードをチェックするテスト手法とは
ステートメントカバレッジでは、分岐条件の全てはカバーできない場合があります。そこで、より強力なカバレッジ手法であるブランチカバレッジというものがあります。
ブランチカバレッジは、分岐コードに対してそれぞれの判定条件がTRUE、FALSEの結果を少なくとも一回ずつ持つようにテストケースを書きます。
網羅するという意味ではステートメントカバレッジより強いのですが、テストケースの数がかなり増える点が問題です。全てのソフトウェアに対して完全にブランチカバレッジを遂行するのは大変ですが、ブランチカバレッジをプログラム全体に対して使用しなくとも、十分な成果が得られることが証明されているからです。たとえばプログラムの全体からある部分をサンプリングし、ブランチカバレッジテストを実行してみることもできます。それによってプログラム全体の品質がある程度想像できるはずです。
なんですが、カバレッジテストは非常にコストがかかるテスト手法です。
TDDの基本
赤→緑→リファクタリング
赤…小さい動作しないテストを書く
緑…テストを通すコードを書く
リファクター…重複したコードの削除
まずテストが通るコードをどんな汚い形でも最小限の時間で実装できるものを書く。そしてそれをきれいに真っ当な形に成型するというのがTDDのリファクタリングです。(テスト担当者にはリファクタリングの知識は必要ない。なのでソースコードをきれいにしてメンテナンスしやすくするぐらいに理解しておけばいい)
ブラックボックステストの基本
--同値分割法と境界値分析法--
同値分割法と境界値分析法とボックステストのなかでも基本中の基本であり、もっともよく使われる手法です。入力処理そして出力処理をソフトウェアが適切に行っているかをテストするのが同値・境界値テストです。
同値分割法
同値分割法とは、入力領域を「同値クラス」という部分集合に分割し、その部分集合に入る入力値を等価と見なす作業です。さっそく簡単な例をもとに説明しましょう。
<要求仕様>
入力A:1から999まで入力可能
入力B:1から999まで入力可能
出力C:A×B
これを(テストするとなった場合)考えなければならないのは、どのような数を入力すべきかです。そのために、まず入力値を二つの部分集合に分ける必要があります。一つは有効同値、もう一つは無効同値です。有効同値とはプログラムが期待する入力値です。今回の例では、入力A,Bともにプログラムは1から999が入力されることを期待しているので、有効同値は1から999です。無効同値はそれ以外のあらゆる値ということになります。(~0、1000~)
境界値分析法
同値分割法とセットで使われる。プログラムで「境界」と呼ばれる場所は常にバグが潜んでいるので、境界値近くは詳しくテストする必要があります。先ほどの例だと、1と999の周りの数値は非常にバグになりやすい入力値です。なぜならプログラム上は無効同値と有効同値の間に必ず条件文が必要になり、その分が正しくかけていないことあり得るためです。
状態遷移テスト
状態遷移テストとは、要は「状態」をモデル化してテストを行う手法といえます。まず、状態遷移は、大きく分けて状態と遷移の二つによって表現されます。
たとえば、あるアプリケーションが立ち上がっている状態を「状態A」とし、立ち上がっていない状態を「状態B]とします。状態Aから状態Bに移行するためにはアプリケーション終了遷移を経る必要があります。
状態遷移テストで見つかるバグ
・期待していない状態に遷移するバグこれは、分岐やswitch文が正しく書かれていない可能性がある
・遷移自体がない場合
このため、ある状態からある状態に遷移できないバグを発見できる
探索的テスト
…テスト手法の一つで、ソフトウェア機能を学習しながら、テスト設計とテスト実行を同時に行う。
探索的テストタスクの実行は五つに分けることが可能です。
1.ターゲットソフトウェアを決める
どれをテストするか決めること
2.機能をリストアップする
テストするべき機能をリストアップします。たとえば、
すべてのヘルプをチェック
すべてのメニューをチェック
すべてのデータ、インターフェイス、ウィンドウをダブルクリック
3.弱いエリアを見つける
ここでは危なそうな機能や操作をリストアップします。
例:あまり使わない複雑に組み合わさったデータ入力をハンドルする機能
オペレーティングシステムにサイズが依存する機能(メモリが少ない状態、サイズの大きいファイル)
4.各機能のテスト及びバグの記録
上記の視点で各機能に対してテストを実行し、もし問題があればバグの報告を実施します。
5.継続的なテストの実行
例:もしそのソフトウェアがさまざまな環境で動作するのなら、環境を変えてテストを行う
品質特性とは「ソフトウェアが持つべき特性」で、機能的な側面と非機能的な側面の両方の属性を示したものです。
テストで重要な特性は機密性、信頼性、パフォーマンス。
パフォーマンステストとは、ソフトウェアを設計もしくは企画する段階で設定されたソフトウェアの性能が期待された通り出ているかをチェックするためのテストです。