Open8

知識ゼロから学ぶソフトウェアテスト

kookoo

2024/07/24

1

ソフトウェアテストは、品質改善のためにもっともポピュラーな方法

2

ホワイトボックステストとは

プログラムの論理構造がただしいかチェックする

ホワイトボックステストの種類

  • ステートメントカバレッジ
    • プログラム内部の命令文をテストする
    • if条件がTrueになる条件をテスト
kookoo

2024/07/25

1

プログラムのバグは、20%のコードから80%のバグがでるらしい

2

  • ブランチカバレッジ

    • すべての条件分岐を一回以上試す。
    • すべてをもうらすることはできないので、カバレッジ基準をきめて全体の60%~90%テストする。
  • カバレッジを100%達成したからといって、すべてのバグを発見できるわけではない。

    • ループ処理やエラー処理など

ホワイトボックステストの復権

  • アジャイル開発によって、ホワイトボックステストが実施しやすくなった。
  • TDD
    • red テストが失敗するコード
    • green テストが何かしらの形で成功するコード
    • クリーン コードをきれいにする。
kookoo

2024/07/26

3

ブラックボックステスト

出力、入力、保存、計算の4つをテストする。

  • 同値分割法
    • 入力と出力のテスト
    • 入力閾値を同値クラスターに分割してテストする。
    • すべてのパターンを網羅することはできないため、省略してもよいが省略した箇所でバグが出ないようにする。
    • 同一の意味合いをもつテストケースを避けることができる。
  • 協会値分割法
    • 入力の境界値をテストする。
    • 有効と無効の一番近い境界をテストする。
  • デシジョンテーブル
    • 入力と出力の組み合わせが、複雑な場合に使用する。
    • 入力との組み合わせと、その出力を明記してテストする。
kookoo
  • GUIのテスト
    • 状態と遷移(イベント)を定義する。
    • 状態遷移マトリックスで、各状態のときに想定されるイベントを網羅し、想定外のイベントが起きないか確認する。
    • ただし、状態が多いと人力では確認できないので、ツールを使用するとよい。
  • ランダムテスト
    • 境界などを使用せずランダムにテストする。
    • 一部のバグを見つけることができるが、見つけられるのは氷山の一角

参考

kookoo

4

探索的テスト

  • テストケースベースのテストと比べて、効率的にテストできる。
  • 事前にテストケースを想定するのではなく、ソフトウェアを使いながら、テストする。

どうやるか?

  • クライテリアをきめる。
  • 探索的テストを実行する。
  • バグを記録する。

補足資料

kookoo

5

非機能要件のテスト

  • 非機能要求はそれぞれのカテゴリーごとにテストする必要がある。
  • テストで需要な非機能要求は
    • パフォーマンス
    • セキュリティ
    • 信頼性
  • 他にもいろいろあるが、機能要求のテストでカバーできることが多い。

パフォーマンステスト

  • パフォーマンステストは後回しにしない。
    • パフォーマンステストで発見されるバグは、根本的なところに原因があることがある。
  • パフォーマンスの要件は明確にする

セキュリティテスト

  • モジュールに分解してテストする。
  • ファジングテスト
  • ツールを使うとよい。

信頼性テスト

  • バグは有限であると仮定してテストする。
  • MTBF(平均故障間隔)
    • 信頼度成長曲線
kookoo

6

テストプランの書き方

7

ソフトウェ品質のメトリクス

  • バグの数
    • バクにも重要なバクから軽微なバグまで存在するため、単純に数でみない。
  • バグの修正時間
    • 出荷時期が近づくに連れて、修正時間は短くなるはず。
  • コードの複雑性
    • 有向グラフから判定する指標もある。

参考

kookoo

8

テストの自動化ツール

  • 訓練をつんだ人ではないと、テストを自動化するのは難しい
  • テスト自動化のメンテナンスに時間がかかる。

9

組み合わせテストをやめる

  • 組み合わせテストは、膨大な数になる
  • すべての組み合わせにより起こるバグは、テストではなくアーキテクトの問題
  • 単体テストに注力したほうがよい

低品質なモジュールをたたく

  • 20%のモジュールから、80%のバグがうまれる。
  • 変更頻度の高いモジュールはバグがうまれやすいらしい