私はpaiza転職で、エンジニアを目指す方の転職活動やエンジニアを採用したい企業の採用活動をお手伝いしつつ、Webメディア「Tech Team Journal」(TTJ)の運用にも携わっています。
今回は、TTJで見つけたエンジニアのキャリアに役立つ記事をご紹介します。
伊藤由貴さんのこちらの記事です。
ttj.paiza.jp
みなさんはテストエンジニア・QAエンジニアという職種を知っていますか?
プログラミング初心者の方やエンジニアを目指している方の中には、「聞いたことはあるけどよく知らない」という方も多いかと思います。
今回は、こちらの記事を抜粋してご紹介します。
テスト・QAエンジニアのお仕事
伊藤さんは、テスト・QAエンジニアが行うテストの目的は単純にバグを見つけることだけではないと言います。
プログラムに欠陥がないことを確かめるのはもちろん重要です。さらに、ソフトウェアが仕様通りにできているかどうかを確かめたり、さらには顧客が満足するかどうか、についても考えたりしなければなりません。
また、一言で「テストをする」といってもただひたすらテストを行っていけばよいというわけではありません。
たとえばテストをしてバグを見つけるにしても、「いくらでも時間をかけていいからバグを見つけてね」などという状況はあり得ないですよね。ほとんどの開発プロジェクトは限られた時間と費用の中でソフトウェアを作り、テストし、リリースしなければいけません。
バグを見逃さないように、でもなるべく少ない手間でテストをしたい。そのために、テスト・QAエンジニア同値分割法や境界値分析、組合せテストなどの「テスト設計技法(もしくは単にテスト技法)」と呼ばれるテクニックを用いて効果的なテスト項目を考え、実施します。
さらにテストはすべての開発が終わってから初めて行うものではなく、開発前の工程から問題の発生を防ぐためにドキュメントを見たりMTGに参加することもあるそうです。
テストやドキュメントレビュー等を通じて「こうしたほうがユーザーにとって便利じゃないですか?」などの意見を出すこともあります。ユーザーにとっては機能に不備がないことも大切ですが、それ以上に使いやすい、使っていて楽しい、など魅力があることも「品質が良い」と言えますよね。
このように、広い意味で“品質”をよくするため、テスト・QAエンジニアは開発プロジェクトの様々な段階で様々な活動を行います。
そもそもなぜシステム開発にはテストが必要なのか
ここからは、テストエンジニアやQAエンジニアが行うテスト工程について解説します。
一言で言うと、テストは「品質の担保」のために実施されます。もう少し噛み砕くと、「できる限りバグをつぶして、仕様通りに動くことを確認してからリリースするため」の工程です。
もしテストを一切せずに納品して、あとから不具合が見つかると、ユーザーに損失が出るだけでなく自社の信頼も失ってしまいます。場合によっては損害賠償が発生することもあるでしょう。
テストは開発と比べると地味に感じるかもしれませんが、非常に重要な工程です。
システム開発におけるテストの種類
ウォーターフォール型の開発(原則として前工程が完了してから次工程に進む開発手法)で、テストを語るときに欠かせないのが「V字モデル」です。
V字モデルは、テストを実施する際に上流工程(要件定義~設計)で定めた要件・仕様を満たすかどうか、工程ごとに対応したテストを実施して確認する構造を示しています。具体的には、詳細設計で決めた内容は単体テスト、基本設計で決めた内容は結合テスト、要件定義で決めた内容はシステムテストで検証するという形で対応しています。
単体テスト(UT:Unit Test)
最初に実施するテストが単体テストです。関数やメソッドといった小さい単位でテストをして、処理が正しく機能しているかを確認します。
単体テストはテスト対象の単位が小さいため、不具合の原因特定や修正が比較的容易です。そのため、バグはできるだけ単体テストの段階で多く摘出する必要があります。テスト工程はあとになるほどテスト対象の単位が大きくなるため、バグが見つかるとその原因を調査するだけでも多くの時間がかかってしまいます。
単体テストの段階では、システム全体が完成していないことがほとんどです。そのため、入力データの受け渡しができるようにスタブやドライバと呼ばれる一時的な処理プログラムを書くことがあります。
結合テスト(CT:Combined Test)
結合テストでは、いくつかの部品を組み合わせた際に正しく機能しているかを確認します。
ある機能を実現するための部品(=モジュール)を組み合わせて動かしたときに、たとえば意図している通りの結果が返ってくるか、データが正しく受け渡しされるか、データを受け渡すタイミングはずれていないかなどをテストします。
単体テストで見つけられなかった仕様の不備や設計上のミス、単体テストのケース漏れなどの理由から、結合テストでバグが見つかるケースも少なくありません。
システムテスト(ST:System Test)
システムテストは総合テストとも呼ばれ、開発環境ではなく本番と同様の環境で行うテストです。システム全体を通して意図したとおりに動作するか、仕様通りの機能ができているか、性能要件を満たしているかなどを確認するために実施します。
また、本番と同じデータ量やアクセス数で負荷をかけて試験したり、一定期間運用して問題がないかを確認したりもします。
2つのテスト技法
テスト技法には、ホワイトボックステスト・ブラックボックステストという2種類があります。
ホワイトボックステストは主に単体テストで用いる技法で、プログラムの全処理経路が網羅的に実行されているかを確認します。実際の開発現場では、網羅率の目標値をカバレッジという値で算出して、テストが十分かを判断します。
対してブラックボックステストは、入力値に対して正しい出力値が返ってくる(表示される)かを確認するテストで、プログラムの内部などはとくに意識しない技法です。
まとめ
伊藤さんは、最後に
バグをどう効果的に見つけるか考えたり、ユーザーにとって品質が良いものを作るために様々な活動をしたりと、求められる技術も考えることも多いなぁと思いながらお仕事をしています。
大変なことも多い一方で、考えたりチャレンジしたりする余地が沢山あるという意味ではとてもやりがいのある、クリエイティブなお仕事だと思います。
と締めています。
QAエンジニア・テストエンジニアは、開発部門がつくったシステムをユーザー目線でテストをして、品質に問題がないかをチェックする重要な役割です。
設計書やマニュアルなどのドキュメント検査、テスト工程から納品までのシステムの品質検査など複数の工程に携わるため、システム開発に関する経験・知識が大いに生かせます。
また近年はセキュリティの観点も必要になっているため、システムエンジニアからQAエンジニアになる人も少なくありません。
paiza転職では、QAエンジニアはもちろんさまざまなポジションのエンジニア求人を掲載しています。
QAエンジニアの求人情報はこちら
(文:谷口智香)
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら