Brown2016-08-21小難しいことは抜きにして10分で理解する単体テストDevTweet2017.01.16:更新しました!業務システムで単体テストを書いた事がない場合、どうやって書けば良いのか最初は全く分からないんですよね。VB6を始めとした企業向けのエンタープライズ系エンジニアは顕著です。サンプルとかを参考にしてみても、サンプルは汎用的な内容が多いので、「言いたいことは分かった。知りたいのはそこじゃないんだ!もっと深い所なんだ、知りたいのは!なんならテストを書いてみてくれ!!と思うわけです。結論を先に言いますと、「テストを書けない!」と言っている方は100%を目指されている、もしくは目指さないといけない!と思っているのではないかと思います。100%を目指す必要はありません!※ここで挙げる「単体テスト」は納品物である「単体テスト仕様書」ではなく、プログラムで書く単体テストを指します。shin21.hatenablog.comまずは小さい所から始める僕自身もそうでしたが、凄く難しく考えてしまって「何処から手を付けて良いのか分からない」状態になります。最初は何も考えずに取り敢えず1つメソッドなりクラスなりのコードを書いてしまいます。最悪はTrueが返るだけの簡単なものでもひとまずOKですので、とにかく一応は動くメソッドを完成させます。次にそのメソッドに対するテストを準備します。ここでも取り敢えずテストがパスをする簡単なテストのみを書きます。テストを動かすと、当然パスします。パスするテストに意味はあるの?もちろんですが、このままでは意味は全くありません。ここから肉付けをしていきます。出来ればテストの方に、理想とする結果を書いていきます。その結果をパス出来る本番コードをメソッドに実装していきます。仮に、「難しいな」と思う場合はメソッドの方を先に完成させて、パスするテストを書くという順番でも大丈夫です。メソッドが書けたらコードが動くか動作を確認する訳ですが、従来でしたらデバッグ実行でいちいちプログラムを動かして、確認するしか術は無かった訳です。テストを書くとテスト項目からお目当てのメソッドを直接呼び出せるので、デバッグ画面を開く必要性が無いのです。確認する項目をコードに書いているので毎回同じチェックをする事が出来ます。「いやいや、一度パスした内容なんだから毎回チェックなんて要らないでしょ」と思うかもしれません。今は開発中なのでいいのですが、数カ月後数年後だとハッキリ言って覚えていません。テスト内容をコードに残しておけば当時と同じ確認を常に出来る訳です。テストは「同じテストを常に行う」為に行うのです。小さな所から枝葉を広げていく一つのメソッドが終われば、クラス全体へ。そのクラスを呼び出している先へとドンドン派生していきます。全体の仕様を考えてトップダウンでテストを書ければ何も言う事はありません。単体テストが苦手・良くわからないと思っている人は「トップダウンでいきなり行おうとするので失敗する」傾向にあります。ボトムアップで小さい単位から少しずつテスト範囲を増やしていく、という考えで一度テストを書いてみてください。デバッグ部分であったり、ちょっとした動作を確認する箇所で「あれ?テストって便利だぞ」と気付く箇所が出てきます。その内、条件でテストパターンを増やしていけば、毎回分岐テストを行わなくても済むようになり、さらに「便利だぞ?」と思う範囲が増えます。ポイントは、「テストって便利だな」と思うポイントを見つけることです。便利だと分かれば、積極的にテストに取り組んでいけます。最初は形とか100%のテスト像を思い浮かべるのではなく、少しでも自分の作業が楽になるという観点で捉えてみてください。機能になりますが、コードカバレッジという物があります。カバレッジを使用した、テストされるプロジェクトのコード割合の確認どれだけテストを網羅しているかが測定できるのですが、この機能の便利な所はテストで通る箇所が色分けされるんです。テストを書いていない条件分岐の箇所が一発で分かります。通っていない箇所が分かると、必ず通らせたくなりますよね?そうなってくれば、自ずとテストを書くという事が苦ではなくなります。私自身もまだまだ勉強中ですが、キッカケを掴むと単体テストを自主的に書くようになりました。なんとなく「意味がないからしない」と思っている方は、一度騙されたと思って「簡単な所から」始めてみてください。»profileid:shin21sk日々学んだ事や感動した事などを日々綴っています。慎ましくいきたいアラフォー男子です。archivecontactAmazon.co.jpRakutenはてなブログをはじめよう!shin21skさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。