テストの基礎

ソフトウェアテストとは、テストエンジニアの役割とは

ソフトウェアテストはソフトウェアを開発する上で欠かせないものです。
ここでは、「ソフトウェアテスト」の基本と、テストを行う「テストエンジニア」の役割について解説します。

ソフトウェアとは何か

まず、「ソフトウェア」とは何か、について確認しましょう。
ソフトウェアとは、「機械に対する人間からの指令を組み立てたもの」です。一般的には、コンピュータを動かすプログラムの総称として使われます。

例えば、この記事を読むために皆さんが使っている「WEBブラウザ」も、ソフトウェアの一種です。

• ユーザーが、閲覧したいインターネット上のURL(サイト)にアクセスする
• そのURL(サイト)にある文章や画像ファイルを読み込む
• WEBブラウザのウインドウ上に、それらの情報を表示する

という一連の動作を、プログラムされた指令にしたがって行います。
サイトによっては、動画を再生したり、ユーザーの入力によってインタラクティブに動作したりする機能を備えているものもあります。
これらの機能を動作させているのが、WEBブラウザというソフトウェアです。

ソフトウェアは、さまざまな所に搭載されています。
例えば、インターネット上の「サーバー」には、アクセスされたファイルをブラウザに送信したり、ユーザーから送信されたデータに応じてデータ登録や検索を行ったりするなど、さまざまな処理を行うソフトウェアが搭載されています。
パソコンやスマートフォンだけでなく、テレビやエアコン、冷蔵庫、炊飯器などの電化製品、飛行機などの乗り物、医療機器など、身の回りにあるさまざまな製品の内部に、ソフトウェアは組み込まれています。
ソフトウェアは、私たちの暮らしになくてはならないものだと言っても過言ではありません。

ソフトウェアテストの必要性

人が作ったものに完璧はあり得ない

ソフトウェアの開発は、開発エンジニアが行います。仕様を満たすためにどのようなソフトウェアが必要かを考え、機能や構造を設計し、プログラミングします。

現在のソフトウェアは、規模の大きいものがほとんどのため、その開発に多くの開発エンジニアが携わります。段階を踏んで慎重に作成するとはいえ、人間の作業ですから、どうしても「すべて完璧」というわけにはいきません。ソフトウェアの開発工程では、さまざまなミスや考慮漏れが原因で、「バグ」が必ずと言っていいほど紛れ込んでしまいます。

バグによっては、日常生活にも多大な悪影響が及ぶ

バグには、ちょっとした表示のズレなど些細なものだけでなく、プログラムが止まって製品がリセットしてしまうような、大きな影響を及ぼすものも少なくありません。
そのような重大なバグが頻繁に発生した場合、どうなるでしょうか。例えば、今この記事を見ているWEBブラウザが突然終了し、再起動もできなくなったら、大変困ることになるでしょう。また、飛行機や自動車、あるいは医療機器など、些細なミスも許されないようなソフトウェアでバグが頻発すれば、人命に関わる事態になりかねません。そのような状況は、なんとしても避けなければなりません。

そこで、ソフトウェア開発では、そのソフトウェアが仕様どおりに動作するかを確認し、検出されたバグを修正する工程が必要です。この確認工程が、「ソフトウェアテスト」です。

ソフトウェアテストの目的

ソフトウェアテストの主たる目的は、「製品が仕様や要求を満たしていることを確認する」「バグを検出し、それが正しく修正されたことを確認する」ことです。

ソフトウェアテストの目的は、他にもあります。

◎「そのソフトウェアの品質がどの程度成熟しているか」を判断するための情報を得る

テストを実施することで、どこにバグがあった/どこにはなかった、といったソフトウェアの品質状況が見えてきます。また、テスト工程を進めていくにつれて、バグが検出される頻度は減少していきます。それらの傾向を分析することで、「ソフトウェアをリリースしても大丈夫か」「まだ検出されていないバグがある可能性はどの程度か」という判断をするための情報を得ることができます。
つまり、ソフトウェアの品質がどの程度成熟したのかを、テスト結果を分析することで、定量的に判断できるようになります。

◎バグの傾向を捉えることで、改善活動につなげる

テストを実施し、検出したバグを分析することで、さまざまなことが明らかになります。

【分析例】
• そのバグがどの開発フェーズで混入したのか
• バグの原因は何か
• なぜ、そのバグが見つけられたのか/見つけられなかったのか

分析によって見えてきた傾向に基づいて、次の開発やプロジェクトで対策を講じることで、バグ混入や見逃しを未然に防ぐことができます。
プロジェクトやソフトウェアの問題点を浮き彫りにし、改善活動を促すことも、ソフトウェアテストの重要な役割といえるでしょう。

• 仕様や要求を満たしているかを確認する
• バグを検出し、それが正しく修正されたことを確認する
• ソフトウェア品質の成熟度を判断するための情報を得る
• バグの傾向をとらえ、ソフトウェア開発の改善活動につなげる

ソフトウェアのテストは、仕様どおりに動くことを確認するだけでなく、さまざまな役割を担っているのです。

開発エンジニアとテストエンジニアの役割

ソフトウェアテストは、現代社会を支える、まさに「縁の下の力持ち」的な存在です。ソフトウェアのリリース前に、致命的なバグやユーザーに不利益を与えるような現象を突き止め、その原因を取り除くことで、ソフトウェアの品質を向上させます。
この、ソフトウェアテストを専門に行うのが、「テストエンジニア」と呼ばれる職種です。

ソフトウェアをテストするスキルは、ソフトウェアを開発するスキルと共通する部分もありますが、異なる部分も多くあります。
例えば、開発エンジニアは「仕様を満たすソフトウェアをどのように設計するか」を主に視野に入れます。これに対してテストエンジニアは、「そもそも仕様に曖昧な点や矛盾点がないか」「どうしたら仕様や要求を満たしていると適切に確認できるか」「どうしたら漏れなくテストできるか」「どうしたらバグを検出できる可能性が高まるか」ということを主に視野に入れます。

このように、「どうしたら適切に開発できるか」を考える開発エンジニアと、「どうしたら適切にテストできるか」を考えるテストエンジニアは、それぞれの視野と役割が異なっています。これが、テストエンジニアが職種として独立している大きな理由です。

開発エンジニアとテストエンジニアは、自動車レースにおけるドライバーとナビゲーターの関係に似ていると言われます。

ドライバーは運転に集中し、車を安全に速く効率よく目的地に向かわせます。ナビゲーターは、ドライバーが的確に操縦できるように、助手席からアドバイスや指示を送ってサポートします。
役割の異なるドライバーとナビゲーターは、互いに協調して自動車レースというプロジェクトを進めます。

同じように、開発エンジニアとテストエンジニアの役割は異なっていますが、目的は共通しています。「高品質な製品を世の中に送り出す」ことです。

開発エンジニアとテストエンジニアが、それぞれの専門的な目と技術を持って役割を果たし、互いに尊重しあい、また切磋琢磨することで、高品質な製品を実現します。どちらの役割も、現代のソフトウェア開発において欠かせない存在なのです。