Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@yanoAsuka

テスト自動化の範囲 どこまで担保?   カバレッジ100%は必要?

More than 1 year has passed since last update.

junit等のテスト自動化で、どこまで担保を取るかはどの現場でも議論になると思います。

とても良いルール付けに巡り合えたので紹介したいと思います。

この投稿の目的

無駄なテストコード作成を削減し生産性を上げ、毎日定時で帰宅するためです。

前提

今回はサーバーサイドの話です。
テスト説明.PNG

 ・コントローラ層 :サービス層からの値を画面表示値に編集したりする責務です。
 ・サービス層   :各機能処理の入り口です。
 ・ドメイン層   :ビジネスロジックの責務はこの層です。
           DTO、VOの詰め替えもここで行います。
 ・データアクセス層:DBアクセスが責務です。

ルール付け、担保範囲

コントローラ層

基本的に不要です。
なぜならコントローラは画面に関わるところですので、画面に関わるテストで担保が取れるからです。Seleniumや結合テストで担保を取るものを、わざわざjunitなどのサーバサイドで担保を取るのは無駄です。

複雑な処理がある場合は、その処理のみ切り出してそこだけ担保取るのが良いです。私の場合は別メソッドに切り出してその箇所のカバレッジのみ100%にしています。

サービス層

ここのテストを一番厚くすべきです。サービス層以下の結合テストをする勢いで担保を取ると良いです。但し、以下の担保は不要です。
 ・業務に起こりえない箇所の網羅。
 ・戻り値のデータの全比較(assert)。
  例えば2件リストがある場合は1件目のみ全ての値を比較して2件目は不要です。
  よくある反論として「1件目の値を2件目の値に入る可能性がある」だと思いますが、
  1件目と2件目に入る値を別の値にしておいて片方だけ比較すれば担保が取れます。
 ・メソッドの呼び出し回数。
  担保理由が不明だからです。戻ってきたアウトプットの検証で十分です。

ドメイン層

基本的に不要です。
サービス層で担保を取っておけば十分です。

複雑なビジネスロジックがある場合は、その部分だけ担保を取ります。

データアクセス層

ここも厚くする箇所です。指定した条件で期待した登録、更新、参照できることを細かく担保しましょう。SQLの外部結合、内部結合条件も細かく網羅しましょう。
サービス層のテストで作ってもよいのですが、サービスのテストコードが大量になるのを防ぐためデータアクセス層のテストに任せられるところはお任せしましょう。

全体的

業務で起きないことは担保不要です。システム開発は業務改善が目的です。業務で起きえないことを色々考慮し増えた分岐は処理されないコードです。さらにカバレッジ100%という品質向上に貢献しない悪習ルールと組み合わさるとそれだけで2,3日無駄な作業を行います。

苦い経験①

私はカバレッジ100%を目指し過剰な品質担保で、1週間ぐらいは工数を無駄に使ってしまったことがあります…

苦い経験②

この方法を考えた同じチームメンバーの方は、過去にカバレッジ100%が必須だった現場で追加開発の度に多数のjunit修正が必要となりました。その結果、保守性が悪くお金の折り合いがつかなくなりプロジェクトが無くなったそうです…

まとめ

今回はサーバサイドを例に挙げていますが、seleniumなどのその他テスト自動化も同じだと思います。
一番良いのは「ちょうどいい担保」と「メンテのしやすさ」です。

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?