はじめまして!テストエンジニアの「大の字」です。
私はゲーム業界でテスターを経て、エンタープライズ業界のテストエンジニアになりました。
今回は、エンタープライズ業界に転身したことで気付くことが出来た「デバッグ」と「テスト」の違いについてご紹介したいと思います。
気付き
前職のゲーム業界では、「デバッグ」や「デバッガー」という言葉が「テスト」「テスター」と同じ意味で扱われていることが多く、私自身も「デバッグ」と「テスト」は同じ言葉の意味だと思っていました。
しかし、エンタープライズ業界でテストの知識を学ぶうちに2つの言葉はまったく異なる言葉の意味だと知りました。
今回はJSTQB認定テスト技術者資格のシラバスを通して、「デバッグ」「テスト」の意味や他にもよく誤解されやすい言葉「エラー」「故障」「欠陥」の意味を再確認してみることにしました。
デバッグとは?
私は以前まで「デバッグ」は開発者がプログラムのバグを見つける行為だと、ざっくりとしたイメージで認識していました。
では、実際にはどのような意味かをJSTQBのシラバスで確認してみましょう。
デバッグは、故障の基となる欠陥を見つけて、解析し、取り除く一連の開発の活動である。
JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.1.2 テストとデバッグ
ふむふむ、なるほど!つまり、プログラム内に潜んでいる欠陥を見つけて、原因のプログラムコードをチェックして欠陥を取り除く行為自体が「デバッグ」という意味なんですね。
では、故障の原因である欠陥を取り除いた後、本当にその故障が無くなったかは確認しないのでしょうか?その答えは、これから紹介する「テスト」にありそうです。
テストとは?
私は「テスト」といえば、テスト手順通りに実行して期待する結果と一致しているかどうかを確認する行為だと思っていました。では、正しい意味はどうでしょうか?JSTQBのシラバスを確認してみましょう。
テストは、実行することでソフトウェアに存在する欠陥に起因する故障を示すことができる
JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.1.2 テストとデバッグ
「テスト」とは、欠陥が原因の故障が発生するかどうかを示すことができるんですね。また、故障の発生は確認できますが、その欠陥の原因が特定できないことも特徴と言えます。
では、その欠陥を「デバッグ」で取り除いた後、発生していた故障が修正されたことの確認は行わないのでしょうか?その問いには、再度シラバスの記載を見てみましょう。
テスト担当者が確認テストを実施し、修正により欠陥が解決したことを確認する。
JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.1.2 テストとデバッグ
なるほど。「デバッグ」を行って修正後に「テスト」を行い、検出した欠陥が無くなったこともきちんと確認するんですね。
エラーとは?
私は「エラー」といえば、プログラム内で誤った動作が発生することだと思っていました。
では、またまたJSTQBのシラバスで意味を確認してみましょう。
人間はエラー(誤り)を犯す。そのエラーがソースコードや他の関連する作業成果物の欠陥(フォールトまたはバグ)となる。
JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.2.3 エラー、欠陥、および故障
1 つの作業成果物で欠陥を発生させるエラーは、他の関連する作業成果物でも欠陥を発生させる可能性がある。
JSTQB-SyllabusFoundation_Version2018.J03 JSTQB-FL 1.2.3 エラー、欠陥、および故障
テスト業界での「エラー」の意味は、プログラム内だけではなく、ヒューマンエラーを含んだ意味なんですね。ソフトウェアのエラーに留まらず、テストを行う上で発生する人為的なミステイクを含む意味であることが分かりましたね。
次は「デバッグ」「テスト」「エラー」をより深く理解してもらうため、上記3つの中で使われている「故障」と「欠陥」という言葉の意味についてご紹介します!
故障とは?
JSTQBのシラバスでは下記のような定義がされています。
コンポーネントやシステムが、期待した機能、サービス、結果から逸脱すること
「故障」とは、システムが期待する結果と異なる結果になることを意味するのですね。私の経験則上では1つの欠陥で複数の故障が発生することがある印象があります。「故障」を検出するための活動としてテストを行うので、イメージがしやすいですね。
欠陥とは?
JSTQBのシラバスでは下記のような定義がされています。
システムの要件や機能が実現できない原因になる不備や欠点
「欠陥」とは、要件や機能が満たせない「故障」の原因のことなんですね。また、テストによって「欠陥」が存在していることは示せますが、「欠陥」が存在しないことは証明できません。つまり、ソフトウェアに残存する未検出の欠陥数は減らせますが、「欠陥」が見つからないとしても残存する「欠陥」は無いとは言い切れないのが特徴です。
テストをもっと詳しく
では、言葉の意味が分かったところで少しテストについて深掘りしていきたいと思います。
テストといえば、以前の私のようにソフトウェアの動作を確認して期待する結果が得られるかを確認するだけと認識されている方もいると思います。しかし、実はテストには下記のような様々な活動のプロセスが存在します。
「テスト計画」「テストのモニタリングとコントロール」「テスト分析」
「テスト設計」「テスト実装」「テスト実行」「テスト完了」
また、テストプロセスにはいくつかのメリットがあります。
- プロセスを分けることで、各担当の作業範囲齟齬などのヒューマンエラーが予防できる
- プロセス毎にエキスパートな人員をアサインすることにより、作業の効率化を実現できる
- テストプロセスの中で問題点があった場合、どのプロセスに問題があったかを分析し、改善を続けることができる
テストプロセスを段階的に行うことで、人為的なミスの防止や作業の効率化、各プロセスの改善等が可能になり、リスクの軽減にも繋がります。
まとめ
「デバッグ」と「テスト」の役割について、理解が深められたでしょうか。欠陥を取り除く「デバッグ」も大切ですが、「テスト」によって故障を検出することで欠陥があることが分かるため、「テスト」は必要不可欠な存在であり、ソフトウェア品質を保つための最後の砦であることがお分かりいただけたと思います。
また、エンタープライズ業界ではシステムの大規模化や複雑化、短納期化が日々進んできています。これらを実現するためにテストプロセスを上手く活用して、ヒューマンエラーの予防や作業の効率化、テストを改善していく仕組み作りが出来ることを今回学べました。
みなさんも今回を機会に各テストプロセスにどのような役割があるかを調べてみるのもいいかもしれませんね。
「/Sqripts」では、テストプロセスについても紹介しています。是非チェックしてみてください。