skillup

技術ブログ

プログラミング全般

テストコードを読みやすくする

投稿日:

リーダブルコードも最終章に近づいてきましたね。

今回はテストコードについて。

以前のプロジェクトではテストコードを書いていたのですが、今携わっているプロジェクトでは書いてないです・・・

テストを書く目的ですが、単純にテスト工数を減らす以外に「本物のコードの動作と使い方を示した非公式の文書」という見方もありますね。先輩からも「仕様書の一種」といわれていたので、単純な動作確認以上の目的があるようです。

ポイントとしては下記のようなことが挙げられています。

重要な情報を目立つようにする

仕様がすぐにわかるような情報を書く、ということですね。

最適なエラーメッセージを書く

ディフォルトのExceptionのエラーメッセージに任せるのではなくて、エラー内容をわかりやすくカスタマイズしたメッセージを出力しよう、ということですね。これはテストコードだけではなく、普段のプログラムでもそうですねぇ・・・

テスト入力値は単純で網羅性のあるものにする

テストパターンの網羅ですが、下記3点が大切ですね。

  • 漏れがないこと
  • なるべく単純であること
  • 一度に複数の仕様をチェックするよりは、複数に分ける

テストコードを意識した、コードにする

普段コードを書いているときから、テストコードを書きやすいコードを意識することが大事と書いてあります。

ポイントとしてはよく言われますが、疎結合にすることですね。プログラムがお互いに依存している場合、テストがとても面倒で大変になります。細かい部品群にわけてあればそれだけテストをするのが楽になります。

テストしにくいソースの特徴

  • グローバル変数を使う
  • 外部コンポーネントへの依存
  • 各プログラムへの依存度が高い

テストしやすいソースの特徴

  • クラスが小さい。内部状態を持たない
  • クラスや関数が1つのことをしている
  • クラスや関数が独立している

まとめ

これらがテストしやすいソースの特徴ですね。ただし、ほどほどに、ということはリーダブルコードでも書かれていますね。

私が依然かかわっていたプロジェクトでもテストコードのために時間を取られるという本末転倒な事象がおこっていました。どんなことでもバランスが大切です。

 

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

JavaScriptライブラリ sugar

去年、JavaScriptの仕事をがりがりやった時にお世話になったライブラリsugar。 JavaScriptのライブラリというとunderscore.jsが有名ですが、こいつも結構使えるライブラリで …

no image

オブジェクト指向設計 柔軟なインターフェイス

オブジェクト指向シリーズ。今回はインターフェイスについて。 インターフェイスといっても、implementsを使った実装だけではなく、要はあるクラスが外部の窓口となるときに使うメソッドってことだと思う …

no image

CIことはじめ

業務でJavaのテキスト変換ツールを作成。 プログラムよりもCIツールを使って他人の環境下で正常に稼動させるためにどうするかの調査に時間かかりましたね。 今回やりたかったことは下記の通りです。いわゆる …

no image

メモリに関して 静的領域、スタック、ヒープなど

実務でメモリの調査をしましたが、肝心のメモリについてほとんどわかっていないのでメモ。 メモリの領域を大きく分けると静的、スタック、ヒープに別れる。 Contents1 静的2 スタック3 ヒープ4 そ …

no image

webの仕組み その1 Webの基本的なイメージ

Webの仕組みについて基礎からちょっと勉強しようかと。自分用なのでまとまってません(爆) Contents1 Webの基本的なイメージ2 HTTPメソッド Webの基本的なイメージ ネットワーク上のリ …