skillup

技術ブログ

アーキテクト設計全般

テストコードの粒度に関して

投稿日:

テストコードを書いていることの悩みの1つにテストコードをどの粒度で書けばいいのか、ということがあります。

例えばバッチの場合、大きく分けると

  • エントリーポイントのFeatureテスト
  • Unitテスト(主にサブのモジュールの詳細なテスト)

のようなテストがあります。

前者はバッチの機能全体的なテスト、後者はサブのモジュールのテストとなります。

一般論としてはモジュール単位の詳細なケースわけに関してはUnitテストを使い、その結合としてFeatureテストを行いますので、数としては必然的にFeatureテスト > Unitテストとなります。

このような考え方を一般的にはテストピラミッドというようです。

難しいのは、以下のような観点です。

  • サブモジュールの数が少ない(極端なケースだと1つ)と、FeatureとUnitの差がほとんどなくなってしまう。(エントリーポイントがただ呼び出すだけなど)
  • Unitテストごとの全組み合わせをFeatureでやるということが不可能ではないので、Featureに関してどのケースをテストするかということはどうしても個人の判断が残る
  • テストケースをうまく書けるかは元のコードがいかにモジュールごとに別れているかということが大事になる

テストコードの品質、粒度をうまくきりわけられるかというのは本体のコードに依存する部分が大きいため、そもそもの本体のコードの品質に依存する部分が大きいため、

  • 適切にモジュールにわかれているか(モジュールごとにわかれていないとそもそもテストがかけない)
  • 長い関数を書いていないか(関数が長ければ長いほどテストが難しくなる)
  • 責務の分離がしっかり行えているか(責務が大きすぎる場合、そもそもUnitテストの粒度を細かくすることができない)

などといった点が重要になってくると思います。

参考文献

テストピラミッド ~自動テストの信頼性を中長期的に保つ最適なバランス~

-アーキテクト設計全般
-

執筆者:


comment

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

関連記事

no image

自動テストをやる上で今まで障害だったこと

自動テストについて、考え方自体は5年以上前から知っていましたが、プロジェクトで実際に使われているのを見たのは今年4月になってからでした・・・ 自動テスト完備なんて昔は夢物語だと思ってたんですけどね・・ …

no image

オブジェクト指向 プレゼンテーション層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。 Contents1 プレゼンテーション層の考え方1.1 要点1. …

no image

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

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

no image

event-listenerについて

前回Observeパターンに触れましたが、少し似たパターンとしてevent-listenerを使ったパターンが存在します。 Model(Eloquentのフック)というのが大まかな共通項ですかね。 そ …

no image

オブジェクト指向について その1

ちょっと最近、仕事でソースの書き方がいい加減になってきたのでオブジェクト指向について考え方を再確認しようと思います。 参考文献 SoftWareDesign 2015年9月号 何も考えずにプログラムを …

アーカイブ