知識ゼロから学ぶソフトウェアテスト 改訂版: アジャイル・クラウド時代のソフトウェアテスト
- 翔泳社 (2013年12月1日発売)
- Amazon.co.jp ・本 (229ページ)
- / ISBN・EAN: 9784798130606
作品紹介・あらすじ
アプリケーション開発、システム開発、組み込み開発、さらにはアジャイル、クラウドまで、テスト界の第一人者による現場で必須の手法+学術的根拠のエッセンス。
感想・レビュー・書評
-
タイトルの通り、知識ゼロの方を対象として書かれた本だと感じた。そのため様々な手法を幅広く、浅く書かれているぶん、それぞれの内容を深く学びたいと思われた場合、参考著書などを活用して別の書籍を読む必要がある。
ソフトウエアテストを最初に学ぶ人にとって、初手に読む本としては良いと思う。詳細をみるコメント0件をすべて表示 -
【ホワイトボックステスト】
ホワイトボックステストは論理構造の正しさのみをテストするため、ソフトウェアの仕様が間違っていることから起こるバグは発見できない
[制御パステスト法]
カバレッジ率に使われる
フローチャートをちゃんとカバーする
ブランチカバレッジは最低限必要
[TDD]
基本は赤・緑・リファクター
TDDの本質は確実に品質保証するというより、スピードを持って開発し、そして変更に対して耐性を持つこと
TDDはホワイトボックステストの一部しか実践していない
【ブラックボックステスト】
ソフトウェアテストは簡単で楽しい
テスト技術の進化は非常に遅い、陳腐化しない
ソフトウェアというのは四つの仕事しかない
入力、出力、計算、保存
・同値分割法と境界分析法
入力と出力の部分
[同値分割]
同値分割とは、入力領域を「同値クラス」という部分集合に分割し、その部分集合に入る入力値を等価とみなす作業
入力値を二つの部分集合に分ける
1つは有効同値、もう1つは無効同値
テストケース
要求仕様(1)
入力A:1から999まで入力可能
入力B:1から999まで入力可能
出力C:A×B
実践的な同値クラステスト
有効同値クラスのテストケース
A =300 B =400
無効同値クラスのテストケース
A=-20 B =-20
A=1100 B=1100
A=0 B=0 ゼロは常に特別な値なので、入力できる場合は必ずテストケースに入れること
網羅している範囲を塗りつぶすと判りやすい
[境界値分析法]
「無効同値と有効同値との間の値」もしくは「有効同値と有効同値の間の値」は常にバグが潜んでいる
要求仕様
1ページ未満の印刷をユーザーが要求した場合はエラーを表示すること
テストにはOn-Offポイント法が一般的
四つのタイプのバグがある
タイプ1:>と>=の間違い(閉包関係バグ」
タイプ2:数字の書き間違いやスペックの読み違いなど
タイプ3:境界がない
タイプ4:余分な境界
正しいテストケース例
テストケース1:1を入力
結果:正常な処理がなされること
テストケース2:0を入力
結果:エラー処理がなされること
「二点」とは、異なる処理が行われる一番近い二地点のこと
要求仕様(1)の場合のテストケースなら
0:常にバグになりやすい数
1:有効な値の下限
499:有効な値の真中
999:有効な値の上限
1000:無効な値の下限
経験則によるテストケース 良いデータと悪いデータを入力
良いデータ
・ユーザーがよく使いそうなデータ
・プログラムが許す最小のデータ
・プログラムが許す最大のデータ
・ゼロ(もしくは悪いデータとして)
悪いデータ
・非常に小さなデータ(-99999999、0.000001など)
・非常に大きなデータ(999999999、10999999など)
・長いデータ(abcdefghijklmnopqrstu.txtなど)
・無効なデータ
[ディジョンテーブル]
すべての入力の組み合わせを表にし、その入力に対する動作もしくは出力を明記
表には、状態、ルール(状態の組み合わせ)、動作(アクション)がまとめられる
この方法は複雑な状態が絡み合う機能のテストで力を発揮
項目が少なく複雑な動きをするものには有効
[状態遷移]
xclipboardなどのツールを使いましょう
テストが向いているソフトウェア
・GUIソフトウェア
・オブジェクト指向ソフトウェア
・通信プロトコルテスト
特に通信プロトコルは絶対にしましょう
[ランダムテスト]
あまり役に立たない
ただし、後述のセキュリティテストにのみ有効
ブラックボックステストはもっとも重要で、もっとも時間を費やし、もっとも簡単なテスト
まず境界値テスト、もし入力エリアが二つ以上ならディジョンテーブルテスト、ダイアログボックスの遷移があれば状態遷移テスト
【探索的テスト】
ざっくりいうと、製品を学習した上でテスト設計して実行してバグ報告を並行する。ただし、プロに責任持ってやらせる
サンプル
二つの活動を定義する
・クライテリア(判断基準、例えばpass/fail基準)はを決める
・探索的なタスクを実行する
五つに分けることができる
1. ターゲットソフトウェアを決める
2. 機能をリストアップする
例えば
・すべてのオンラインヘルプをチェック
・すべてのメニューをチェック
・サンプルデータの使用性をチェック
・すべてのダイアログボックスのチェック
・すべてのデータ、インターフェイス、ウインドウをダブルクリック
・すべてのデータ、インターフェイス、ウィンドウを右クリックなど
3. 弱いエリアを見つける
・データ交換が発生する機能(オブジェクトの埋め込み、ファイル変換)
・ほかのソフトウェアとイベントを共有する機能(目覚まし機能、メール送信)
・あまり使わないと思われる複雑に組み合わさったデータ入力をハンドルする機能
・ファイルをネットワーク越しにオープンさせる機能
・エラーや例外処理からの復帰機能
・OSとデータを交換させる機能(初期値)
・OSにサイズが依存する機能(メモリが少ない状態、サイズの大きいファイル)
4. 各機能のテスト及びバグの記録
テストケースは書かない
5. 継続的なテストの実効
上記活動を繰り返すと共に、ひと工夫入れても良い、例えば
・テスト担当者が複数いるのなら、担当範囲を交換して同じ結果が出るかを確認する
・もしそのソフトウェアがさまざまな環境で動作するのなら、環境を変えてテストを行う(たとえば複数種類のWebブラウザ状態で、他など)
・バグ修正によりほかの機能に悪い影響が出ていないかを確認する
・重要機能に対してシンプルなテストを実行し、ソフトウェア全体の品質レベルが下がってないかを確認する
唯一のデメリットは非機能要求テストにあまり向かない
探索的テスト+スキルのあるテスト担当者の最強コンビでは、すごく短い時間で最強の結果が出る
【非機能要求のテスト】
ざっくりと、機密性、信頼性、パフォーマンス
[パフォーマンステスト]
注意点
・パフォーマンスの定義は明確に
・要求定義通りのテストケースを書かない
・パフォーマンステストは後まわしにしない
パフォーマンステストで発見されるバグは最悪のバグ
テスト五つのステップ
1. アーキテクチャバリデーション
2. パフォーマンスベンチマーク
3. パフォーマンス回帰テスト
4. パフォーマンスチューニング、アクセプタンステスト
5. 24×7パフォーマンスモニタ
実データもしくは近いデータで、同じサイズで
[セキュリティテスト]
残念ながらセキュリティテストという分野は存在していない
まだテスト手法が未発達
ファジングテスト手法がランダムテストみたく主要になっている
ファジングツールは商用、オープンソース共にある
[信頼度成長曲線]
計算ツールが、「広島大学」「信頼性」で検索すれば見つかるかも
【ソフトウェアテスト運用の基本】
[テストプラン]
IEEE 829のテストプランテンプレート
・テストする必要のない機能 この項は意外と重要
・人員計画、トレーニングプラン 初期はコアメンバー、その後テスト要員を追加が良い方法
・スケジュール 至難の業。開発スケジュールに依存する部分が大きい。
・リスクとその対策 もっとも書きにくい部分
テストプランの理想と現実
たくさんのプランを見て、自分なりのプランを見つけることをお勧めします
「できるだけ」ちゃんと書く程度で良い
[テストケースの書き方]
いつ、誰がやっても同じような結果が得られるように書かないといけない
管理ツールを使うのが良い(testlink)
[テストケースの実行]
下記のログを取る
・日付 テストを実効した日付
電車テスト結果 テストが成功したのか失敗したのか
・実施者 誰がテストを実行したのか
・ビルド番号 どのビルドでテストを実行したのか
・環境 どんなコンピュータで実行したか、その際のOSの種類は、など
重要な機能のテストから実行
[テスト開始のタイミング]
早く始めるほど良い
[出荷前日にバグが発見されたときの対処法]
明らかにセキュリティ上の問題がある場合を除いて修正は思い留まるべき
【ソフトウェア品質管理の基本】
テストという作業は、アウトプットが非常に見えにくいもの
指標のことを「メトリックス」
バグの数を管理するメトリックス、重要度の高いバグの数を用いるのが良い
バグの修正にかかる時間を管理するメトリックス、減らない時は結構やばい
[ソースコードメトリックス]
開発チームの健全性が見えることがある
コード行数からバグ密度を計測するのは懐疑的
[複雑度のメトリックス]
20を超えるのはなかなか危険
[無駄のないメトリックス選択の例]
Microsoftの場合
<バグのメトリックス>
・時間軸でのバグの発見数
・コンポーネントごとのバグの発見数(バグが多過ぎないか、もしくは少な過ぎないか)
<テストのメトリックス>
・コードカバレッジ
・テスト担当者以外のバグの発見数
・テストケースの数、テストの自動化立
<ソースコードのメトリックス>
・追加、削除、変更されたコードの行数
・KLOCs:どのくらいソースコードの行数が増加しているか
・コードの複雑度:McCabeのルール
<ソフトウェアの信頼性のメトリックス>
・実際の顧客がもっとも使うと思われるオペレーションをした際のMTBF
・信頼性成長曲線
・ストレステストを行った際のMTTF
<ビルドのメトリックス>
・ビルドにかかる時間
・ビルドで見つかった問題
・ビルドが失敗した原因
<スケジュールのメトリックス>
・当初に立てたスケジュールと実際のズレ
[メトリックスの間違った使い方]
人の能力や個人の仕事の結果を測ってはいけない
【テストの自動化という悪魔】
テストの自動化を成功させるには、自動化コードの保守コストを低く保つこと
[自動化に向くテスト]
・スモークテスト たくさんの回数繰り返すため
・パフォーマンステスト たくさんの人を集めるより、ツールでたくさんの人をシミュレートした方が良い
・APIのテスト APIはそれほど変わらないため
[自動化に向かないテスト]
・回帰テスト
・グラフィックスやサウンドなどメディア関連のテスト
【それでもテストがうまくいかない人へ】
組み合わせテストをやめる テストで見つけるのではなく、アーキテクチャを工夫して問題を出ないようにする
品質の悪いモジュールを徹底的に叩く 80/20の法則
Googleバグ予測システム いつ何回か修正されたかしかみない、パラメータは回数と時間の2つ
これが複雑度より進化したもの
まさにテストとは言うのが知れる、良き初心者向けの本だった。
とてもわかりやすく、読みやすかった。 -
IEEE 829のテストプランテンプレート
テストプラン文書番号
リファレンス
はじめに
テストアイテム
テストするべき機能必要のない機能
アプローチ
人員計画トレーニング計画
スケジュール
リスクとその対策
承認
に終了基準を追記
自動化はスモークテスト、パフォーマンステストAPIテストに向いてる -
会社内での輪読会で採用しました。
各テストの手法やメリット・デメリットはもちろんのこと、テストに対する心構えや著者の経験談なども掲載されており、少しソフトウェアテストの概念や概要を知るにはとても取っつきやすいと感じました。
また、実際のコードなどが頻繁に出てくる事はないため、SE以外の方にも分かりやすいかと思います。
ただ、ユニットテストや結合テストのそれぞれの具体的な製品やフレームワークについての記載はほとんどないため、この点を知りたい方は別の書籍を手に取ることをおすすめします。 -
業務で行うテストの際、チーム内で抜け漏れが発生しがちなので改善したく、まずテストに関する基礎知識が不足していると感じたので読んだ。基本的な考え方や、用語、具体的な方法などに頭の中でインデックスを貼るのに十分な内容だった。
中身の断片
「バグを全部見つけるのは無理だと心得ろ!」
ホワイトボックステストとブラックボックステスト。
境界値テスト→ディシジョンテーブルテスト→状態遷移テスト、それ以上バグが出たら非機能要求の問題。
TDDの本質はスピードを持って開発し変更に対して耐性を持つこと。 -
ソフトウェアテストの勉強は大体この一冊である程度網羅できる
テストを勉強したい方にはうってつけ -
再読予定
-
ソフトウェアテストの基礎とポイントをわかりやすく解説。理図書 007.61||Ta33b 12038768
-
・初中級者ぐらいに良い
・完璧ではなく十分な品質を目指す、バグの集中など、実践的な考え方が載っている