シンジプログラマーにテストプログラムのスキルは必要?どんなことができれば良いの?ツイートシェアはてブLINEPocketプログラマーテストのためのプログラムってなぜ作るのでしょう?作業が倍になって大変そうなんですが、作ると良いことあるのでしょうか?プログラマーがソフトウェアを作るとして、そのソフトウェアが正しく動くかどうかはだれが確認するのでしょう?職種としてよく目にとまるのは「テストエンジニア」と呼ばれる人たちになります。テストエンジニアについてはこちらの記事も参照してみてください。テストエンジニアって未経験でもなれるって本当?メリット、デメリットを徹底比較!2019年5月1日プログラマーえ?ではその人たちに任せたら問題も見つけてくれて報告してくれて・・・。すべてうまくいくのでは?確かにそうかもしれません。プログラマーがテストプログラムを書けるとさまざまな良いことがあります。最初の疑問に答えるべく、その良い面を説明していきたいと思います。目次テストプログラムとは?「仕様」と「テスト」テストにも段階がある単体テストにおけるテストプログラム作成のコツテストプログラムがあることのメリット・デメリットメリット「デグレーション」を防げる「仕事」として引き継ぎやすくなる自動化できるデメリットテストプログラムを正しく作れないと意味がなくなる単純にプログラミング作業が増えるプログラムの仕様が変わるとテストプログラムも修正が必要になるまとめテストプログラムとは?テストプログラムとはそもそも何か?というと、プログラムをテストするためのプログラムです。テストコードと表現される場合もあります。「仕様」と「テスト」プログラムを作るとき、そのプログラムがどんな風に動くべきか?が書かれたドキュメントを「仕様書」と言います。プログラマーはその内容の通りに動くプログラムを作ります。練習問題などでよく出てくるFizzBuzzゲームで例えると、以下が「仕様」になります。「テスト」はその仕様どおりに動いているかを確認することで、以下がテストの例になります。4を入力したら何もでない5を入力したら「Buzz」と出力される30を入力したら「FizzBuzz」と出力されるテストプログラムは「作ったプログラムを呼び出し、5という数字をわたしたら、Buzzと出力されるか」を○×で調べるプログラムというイメージです。テストにも段階がある一言でテストといっても、先ほどの例のように、シンプルな一つの機能の動作を確認するものから、「Youtubeの動画がブラウザから正しくアップロードできるか」といった複雑なものまであります。一般的には以下の段階にわけて、順番に実施されていることが多いと思います。単体テストプログラム内の1機能またはそのプログラムだけで動く機能を確認するテスト結合テストプログラム同士が連携して動くような動作を確認するテストシステムテストさらに他のシステムと連携する機能の動作を確認したり、プログラムを動かす環境の動作も含めて確認するテストはじめの一歩からということと、プログラムによるテストは段階が進むほど難しくなるので、この記事では単体テストにおけるテストプログラムについて説明していきます。単体テストにおけるテストプログラム作成のコツテストプログラムはプログラムの動作を確認するためのものであるため、テストプログラム自体が正しく動かないと、何がおかしいのかわからなくなってしまいます。テストプログラムはわかりやすい名前をつけて、余計な動作をしない単位で作るのがコツです。先ほどのFizzBuzzプログラムをテストする場合の良い例と良くない例を挙げてみます。入力する数を1から101までループさせてプログラムを呼び出し、正しい結果が帰ってきた場合は○を出力し、正しい結果が帰ってこなかったら×を出力する。良い例では、もしどこかのテストプログラムで×が出た場合、どの「仕様」が正しくプログラミングされていないかがすぐにわかります。テストプログラム自体も単純な処理になるため、バグが発生しにくくなります。それと比べて良くない例では、1回のテストプログラム実行で終わるので、一見効率が良いように見えますが、次のような問題があります。テストプログラムの処理が複雑なので、そちらにバグを作り込む可能性が高い×が出力された場合、どこの処理が悪かったのか、すぐにわからない何度も同じ条件を確かめているので無駄なテストが多い2つの例をみてどう感じましたでしょうか?テストプログラムは何か問題が起きたときに、すぐ「どこの」「どんな処理が」悪かったのかがわかるように作るのがポイントなので、最初は面倒に思うかもしれませんが、良い例のように小さくテストしたいポイントに絞ってたくさん作るほうが良いのです。テストプログラムがあることのメリット・デメリットメリット「デグレーション」を防げるプログラムもテストプログラムも書いたとおりにしか動きません。プログラムを修正しても、テストプログラムは何度でも同じように「仕様」を確認してくれるため、以前と違う処理にしてしまっていないか?がすぐにわかります。新しい機能を追加したりしたときに、もともと正しく動いていた処理が違う結果を返してしまう、といったバグを作り込んでしまうことを「デグレーション」と言います。テストプログラムがあることで、この「やっちまった!」をいつでもチェックすることができるので、プログラマーにとってテストプログラムは強い味方になります。「仕事」として引き継ぎやすくなるもともと自分がイチから作ったプログラムなら「中身もわかってるし、大丈夫」と思えるかもしれませんが、ゆくゆくは人の作ったプログラムの面倒をみることもあるかもしれません。そんなとき、テストプログラムと一緒に引き継いでもらえれば確認も簡単になります。そのときテストプログラムの名前や説明が「××の〇〇をチェックしている」ということがわかるようになっていると、いざ問題が発生したときに自分が作ったプログラムでなくとも対応がしやすくなると思います。自動化できるテストプログラムを書く最大のメリットではないかと思いますが、テストプログラムも立派なプログラムなので自動的に動かすことが可能です。プログラミングを終えて、ちょっとコーヒーを・・・という間に、テストプログラムを全部自動で走らせておけば心に余裕も生まれますね。デメリットテストプログラムを正しく作れないと意味がなくなる当たり前なのですが、テストプログラムが正しい結果を出せないと、意味がなくなってしまいます。テストプログラムがテストしたいプログラムに渡す引数の意味も重要になります。考え方としてはもともとプログラムで実現したい「仕様」があるわけですから、仕様どおりに動くかを確認できるような実装ができていれば問題ありません。単純にプログラミング作業が増えるこればっかりは致し方ないところですが、プログラムの倍かそれ以上プログラミング作業をしなければなりません。出来たものを確認する作業は必要なので、プログラムを作っているうちに一緒にテストプログラムも作ってしまったほうが、後でテストケースを作るより間違いは少なくなると思います。プログラムの仕様が変わるとテストプログラムも修正が必要になるプログラムも修正したら毎回テストプログラムも修正が必要なのでは?と思うかもしれませんが、修正しなければならないケースは、仕様が変わったり、追加になったり、削除されたりといったテストしたい内容が変わったときだけです。毎回全部を書き直す必要はありませんが、書き直す必要のないところと書き直すべきところを正しく把握して対応できるようにしておくことが大事です。まとめこの記事では、単体テストという段階においてテストプログラムがどんな役割を果たし、どのようなメリット・デメリットをもたらすかについて、簡単ですが書かせていただきました。プログラマーがテストプログラムを準備することで、自分の作業の効率や、開発全体の手戻りのリスクを減らすことにもつながるのです。いった意味で、アジャイル開発のスタイルをとっているチームや会社にとっては、当然のようにテストプログラムを書くことを求められる可能性も否定できません。そんな状況におかれたとき、仕様にもとづいた良いテストプログラムが書けるようになるために、この記事が少しでもお役にたてるのであれば幸いです。冒頭の質問に「テストエンジニアに任せたらよいのでは?」というコメント例を書かせていただきました。本来テストエンジニアが考えるテストケースは、慣れたプログラマーやシステムの仕様を考えた人でさえ見落としてしまいそうな、利用者目線・システム目線での異常なケースを見つけることにその能力が発揮されたほうが良い、ということも頭の片隅に置いておいていただければと思います。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。初心者プログラマーも知っておくべき?CI/CDのススメIT業界の入り口:SESのメリット・デメリットRECOMMENDこちらの記事も人気です。POSTこのライターの最新記事JavaScript2020.2.11【初心者向け】TypeScriptって何?JavaScriptと何が違うの?職業訓練校2020.2.9未経験者が職業訓練でJAVAを学ぶ未経験からプログラマーに就職2020.2.5食品企業でプログラマーのキャリアパスを構築した実体験その他2020.1.31「今はやりのRPA!私が2年間で実現できた事務作業効率化の方法について」プロフィールごま塩シンジ(編集長)30代後半、未経験からweb系企業に就職しました。底辺高校→Fランク大学→営業→PHPエンジニア→フリーランス※当サイトはリンクフリーです※当サイトは複数のプログラマーによって運営されています※広告募集中です。ご希望の方はお問い合わせからご連絡ください。Java有償化とは?無償で利用できない?いや、できます。最近のコメント初心者におすすめのプログラミング言語は何か。初心者におすすめのプログラミング言語は何か。初心者におすすめのプログラミング言語は何か。