はじめに
この記事は、ソフトウェアテスト Advent Calendar 2016 10日目の記事です。
ここで書くこと
前職の同僚から教えてもらったテストに対する考え方を紹介します。
システムの品質とUTについて | アライドアーキテクツ エンジニアブログ
テスターのメンタル・ライフ
出展: Software Testing Techniques, 2nd Edition
Phase | Mental |
---|---|
Phase 0 | There’s no difference between testing and debugging. Other than in support of debugging, testing has no purpose. |
Phase 1 | The purpose of testing is to show that the software works. |
Phase 2 | The purpose of testing is to show that the software doesn’t work. |
Phase 3 | The purpose of testing is not to prove anything, but to reduce the perceived risk of the software not working to an acceptable value. |
Phase 4 | Testing is not an act. It is a mental discipline that results in low-risk software without much testing effort. |
Phase 0
There’s no difference between testing and debugging. Other than in support of debugging, testing has no purpose.
『テストとデバッグには何の差もない。デバッグ以外にはテストに目的はない。』
Phase 1
The purpose of testing is to show that the software works.
『テストの目的は、ソフトウェアが動くということを示すことである。』
Phase 2
The purpose of testing is to show that the software doesn’t work.
『テストの目的は、ソフトウェアが動かないということを示すことである。』
Phase 3
The purpose of testing is not to prove anything, but to reduce the perceived risk of the software not working to an acceptable value.
『テストの目的は、何かを証明することではなく、ソフトウェアが動かないことによって発生するリスクをある許容範囲にまで減らすことである。』
Phase 4
Testing is not an act. It is a mental discipline that results in low-risk software without much testing effort.
『テストは活動ではない。そもそもテスト以前に品質の高いソフトウェアを作るための精神的な訓練である。』
おわりに
テストの目的は「バグがないことを証明するため」と考えている人が多いのではないでしょうか?
これはメンタル・ライフでいうと、Phase 1の『テストの目的は、ソフトウェアが動くということを示すことである。』の段階にとどまっています。
そもそも「バグがない」と言える状況にまで持ってくるのは、めちゃくちゃ大変です。
正常系の処理は問題なくても、以下のような要因に左右されてバグは発生してしまいます。
- アクセス負荷の状況
- ブラウザ・OSの種類
- ネットワークの状態
- 連携外部サービスの状態
また、このAdvent Calendar 7日目のプログラマーも手動テストしようぜ 〜 忍者式テストのすすめ 〜では以下のように述べられてます。
- プログラマーはあらかじめ知っている不具合しか見つけられない
- 自分のプログラムに不具合があるとは思いたくない
この指摘はとても刺さりました。自分もメンタル・ライフでいうとまだまだPhase 1の段階なので、バグは存在するという現実に向き合って、メンタル・ライフのPhase 2 ~ Phase 4に成長できるように頑張りたいところです。