【プログラミング】優秀なエンジニアはテストに手を抜かない!テストが重要な理由とテスト手法を紹介

f:id:orchid-bell:20181208011822j:plain

バグを作りこまないために、設計やコードレビューは真剣にやるのですが、テスト設計になると急におざなりになり、実際にテストを開始すると目に見えて集中力が落ちる人が多いです。

私もプログラムを作るのは楽しいですが、テストはめんどくさいと思うし、できればやりたくないですが、「プロ」として仕事するなら作りこみ以上に工数をかけて重要視しなくてはいけない部分であると考えてます。

 

完璧なプログラムは存在しない

バグのない完璧な設計、バグのない完璧なコーディング。これができるなら、本来テスト工程は不要なはずです。

しかし、残念ながらそれは夢物語でしかなく、現実問題としてバグは確実に埋め込まれます。わざとバグを入れる人はまずいないと思いますが、人間がやることですから、どこかしら必ず抜けが出ます。

それを見つけるための最後の砦がテスト工程です。

 

バグを見つけるためのテストをちゃんとやろう

バグを検出できるような網羅的なテストパターンを考えてテスト設計するのはもちろんなのですが、重要なのはテストをする時の意識です。

バグがない前提でテストした場合、テスト設計通りのパターンを実行してもバグを見落とす確率が上がります

特に優秀な先輩や誰もが一目置くベテランが作ったプログラムのテストを、社内の若手が担当するようなケースでは、無意識的にこうなる傾向があるように思います。

確かに新人プログラマーに比べればバグは少ないかもしませんが、「完璧」ではありませんので、この先入観は危険です。

 

テストはテスト部隊に任せておけばよいのでは? いいえ、エンジニアのテストとは役割が違います

会社によっては、開発部隊とは別に品質保証を専門とするテスト部隊を組織していることがあります。

そうするとテストはそちらの部隊任せになってしまい、なおさらテストがおざなりになりがちなのですが、私はテストの性質が違うと考えています。

 

エンジニアが行うテストは、「バグを見つけるためのテスト」です。

これについては上述した通り、プログラムにはバグが存在することを前提にテストを行い、これを見つけ改修するために行います。

 

テスト部隊が行うのは、「バグがないことを保証するためのテスト」です。

先ほど、バグのない完璧な設計、バグのない完璧なコーディングができればテストは不要と書きましたが、実際にはクライアントに品質保証の根拠を示すために、テスト結果が必要になることが多いです。

テスト部隊が行うテストはこのためのテストです。(加えて、こちらのテストではユーザビリティやパフォーマンスなどの非機能的な観点が入ることがあります)

つまり、テスト部隊にプログラムを渡したあとにバグが検出されるのは「プロ」として恥ずべきことであると考えます。

 

優秀なエンジニアは全員まともなテスト設計ができる

残念ながら、まともなテストができて、自分でテスト設計もできるようになったからと言って、エンジニアとして成功できるわけではありません

しかし、私が知る限り優秀と感じたエンジニアの方々は、ただ一人の例外もなく全員質の高いテスト設計ができました

このことから、エンジニアとして長く活躍したいなら、ちゃんとしたテストができるとうことはエンジニアとしての最低条件であると考えています。

 

どんなテスト手法を学ぶべきか?

では、エンジニアが覚えておくべきテストとは、どのようなものでしょうか。

テストには、大別してホワイトボックステストブラックボックステストが存在します。このうち、エンジニアが行うべきテストは主にホワイトボックステストになります。

 

 

ブラックボックステストホワイトボックステストの後工程に位置づけらることが多いので、まずはホワイトボックステストをしっかりパスできるようにすることが、エンジニアとしては先決になります。

そのため、ホワイトボックステストから学んでいくと良いと思います。

 

もちろんブラックボックステストの知識もいずれ必要になってきますが、こちらはユーザビリティやセキュリティ、システムテストと扱う範囲が広く、また要素ごとに求められる知識量が多いため大変です。長い目で見て、必要なところから覚えていくのが良いと思います。

ブラックボックステストを幅広く使いこなせるようになったら、テストのプロとして活躍する道も開けます。

(実際に、私の知り合いでもテストの方がおもしろくて、そちらの道に転向した方もいらっしゃいます)

 

エンジニアらしく効率的にテストをこなそう

ホワイトボックステストを学んでいくと、テストファースト、テストドリブン、自動テストといったキーワードに出会うと思います。

 

これはテストコードを用いてテストをプログラミングし、テスト自体を効率化するための手法です。特に、設計~テストまでを短いスパンで繰り返すアジャイル開発においては、かなり重要な手法になってきます。

 

めんどくさいテストを楽にするためのものでもありますので、ホワイトボックステストの知識と合わせてぜひ一緒に学んでみてください。