「テスターちゃん」で学ぶソフトウェアテスト⑤

#1. 「テスターちゃん」について
初心者(新人)向けに描かれたソフトウェアテストの漫画になります
たまたまJSTQBについて調べていた時に見付けたブログの記事がきっかけで読むようになりました
[JSTQBを取るメリット5選](http://testerchan.hatenadiary.com/entry/2018/02/15/001117)

今でも更新がある度にチェックしたり、書籍版を読み返したりしたり、とテスト関連の資料として活用しています

[Blog](http://testerchan.hatenadiary.com/)
[書籍版](https://books.rakuten.co.jp/rb/16202142/)

#2. LOG
[「テスターちゃん」で学ぶソフトウェアテスト①](https://qiita.com/156Musik/items/46111ec9cfae5f9aa88d)
[「テスターちゃん」で学ぶソフトウェアテスト②](https://qiita.com/156Musik/items/3c1a91126dc15bd2bf40)
[「テスターちゃん」で学ぶソフトウェアテスト③](https://qiita.com/156Musik/items/1a9450a15aa3607fe2d5)
[「テスターちゃん」で学ぶソフトウェアテスト④](https://qiita.com/156Musik/items/77d4471ae21aac937f78)
「テスターちゃん」で学ぶソフトウェアテスト⑤ :point_left_tone1:イマココ
[「テスターちゃん」で学ぶソフトウェアテスト⑥](https://qiita.com/156Musik/items/ebb1d2339c3a256f8ec9)
[「テスターちゃん」で学ぶソフトウェアテスト⑦](https://qiita.com/156Musik/items/94a036beb46c2dc68a86)
[「テスターちゃん」で学ぶソフトウェアテスト⑧](https://qiita.com/156Musik/items/fb1aa75351660c1150f8)

#3. テストの７原則
どのようなテストにも共通する**原則**がある
この原則を頭に置いておくことで、効率的にバグを見付けるヒントとなったり、リーダーになった際に効果的なテストのアプローチを練るヒントとなったりする

##3.1 ①テストは欠陥があることは示せるが、欠陥がないことは示せない
欠陥＝バグのこと（フォールトともいう）
人のミス(エラー)によって、バグ(欠陥)を埋め込んでしまうイメージ

**例えば**
テストケースを１００件実施してバグが見つからなかったとする
これだけやって見つからないのだからシステムにバグはない、と言えるか？

:x: 言えない

そのケースではバグが見付からないだけで、他の場所にバグがあるかもしれないから

**つまり**
<font color="red">ない≠見付からない</font>

・システムにバグがあることを示すのなら、1つバグを見つければいい
・だけど、ないことを示すのは非常に難しい
　⇒ないとは言い切れない

##3.2 ②全数テストは不可能
全てのパターンをテストして欲しい
⇒全パターンって何をどこまでテストすればいいの!?

テストを知らない人は「とにかく全部見て欲しい」と言う
⇒だけど、完全に全組み合わせは不可能
　パターンが爆発するから


時間は無限ではないので、**テストケースを絞る**必要がある
⇒テスト設計技法を使ってテストケースを減らす

システムの目的や使われ方・想定されるリスクに着目し**どこを重点的にテストするのか**戦略的にテストを行う必要がある

テストは工夫次第でかなり効率的に出来る
だけど、無限に非効率にすることもできる…

##3.3 ③早期テストで時間とコストを節約

例えば、嫌いな食材があるので抜いてくれと言ったが、その食材を入れた料理が出来上がってしまった
・話を聞いた時
・その食材を調理している時
・鍋やフライパン等に入れる前に
気付ければ抜くことが出来た

問題は気付くのが遅れれば遅れるほど、修正に手間がかかる
そのため、**早い段階からテスト(確認)が大切**

##3.4 ④欠陥の偏在
つまり、バグの集中について

例えば、シンプルな草原にも虫がいる
だけど、生命系が複雑な森の方が虫がたくさんいる

＝システムも同様
シンプルな場所に比べ、複雑な場所の方がバグが多い傾向にある

バグは均一にあるわけではなく、**特定の場所に集中し易い**
>・忘れがちな処理のある場所
・間違え易い処理の場所
・不慣れなメンバーが作った場所
・他部署が作った機能
　※その部署に聞かずに進めていて、考慮漏れが発生することもある
・テストも全て均一に行っていると注意する場所に時間を割けなくなることがある

【対策】
・過去のテスト結果やバグ分析からテストを厚くする場所を絞り込む
・開発に「不安なところはないか(不安な箇所、開発でテストできない場所、やって欲しいことなども)」と聞く
など

##3.5 ⑤殺虫剤のパラドックスにご用心
無足は同じ殺虫剤を使い続けるとその殺虫剤に耐性がついて死ななくなる

**つまりテストにも同じことが言える**

同じテストばかりだと新たなバグが出せなくなってくる
⇒出たバグは修正され、**そのテストの耐性が出来る**からである
テストでバグを出すには**<font color="red">絶えず視点を変えることが重要</font>**

【自動化の場合】
自動化テストは同じテストを繰り返すことになる
⇒目的がデグレならいいが、新しい発見にはほぼ繋がらない

つまり、自動化テストを使う場合、
・デグレがないことを確認したいのか
・新しいバグを見つけたいのか
をよく考えること

##3.6 ⑥テストは状況次第
同じようなアプリをテストする場合、置かれた条件で取るべき手法が変わってくる

扱うモノが変わったら**テストも異なるものが必要となる**
ほぼ同じモノのテストにしても**状況や環境でやり方は変わる**

テストの基礎知識を身に付け、<font color="red">状況によってそれらを組み合わせ対応する必要がある</font>
＊闇雲に一つのやり方にこだわらない

注：テスト期間に割と**バグ修正期間**が考えられていないこともある

##3.7 ⑦バグゼロの落とし穴
あるアプリは入力系のバグは全部対応した
文字入力が半角数字1つのみしか入力を認めないと言う条件
⇒だけどそれ以外の入力を試してみたい
　対策によって物足りなくなってしまった

バグ報告があったからと言って修正し制限をかけすぎたため使い難くなる
小さなバグを直すために複雑な処理を通したため反応が遅くなる、と言ったことが多々ある

**木を見て森を見ず**にならないように気をつける
⇒部分に集中してしまったため、他に気が回らないようなことにはならないように

##3.8 まとめ
テスト７原則を知らなくても、テストは出来る
だけど、知っていた方がテストの攻め方が変わってくるし、工夫・方針・対応も変わってくる

**<font color="red">テスト７原則はテストの根っこの考え方</font>**である

＊テストエンジニアが守る範囲は膨大なので、普通にやっても上手に守れない
そのため、どうやって守っていくのかテストの創意工夫が必要となってくる