Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コードカバレッジ計測ツールを導入したらテストを書くのが楽しくなった話

 コードカバレッジ計測ツールを導入したらテストを書くのが楽しくなった話

コードカバレッジ計測ツールを導入したらテストを書くのが楽しくなった話
https://kaigionrails.org/2023/talks/duck/

レガシーなコードに対してテストを書くというのは挑戦であり、しばしば時間とリソース(それと精神力)を多く必要とします。 どうすればチーム全体で楽しく、効率的にこの問題に取り組むことができるのでしょうか?

本セッションでは、まずコードカバレッジの基本的な概念を説明します。 C0, C1, C2カバレッジの違いや、なぜ100%のカバレッジを追求するべきでないのか、その理由について簡単に説明します。

そして、コードカバレッジツール: SimpleCovの導入を通して、 実際のプロジェクトでテストを書く負荷を最小限にし、 チームメンバーがテストコーディングを楽しむことができる環境を整えた方法を紹介します。 また、新規開発の品質向上にもいい影響を与えた話も合わせて行います。

duck-falcon

October 28, 2023
Tweet

More Decks by duck-falcon

Other Decks in Technology

Transcript

  1. C0カバレッジ(statement coverage/命令網羅率) 全ての命令が実行されれば100% def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き

    if weekday? && student? price -= 200 end price end カバレッジ100% のテストケース例 1. 水曜日かつ学生 条件次第では 実行されない
  2. C1カバレッジ(branch coverage/分岐網羅率) def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き if

    weekday? && student? price -= 200 end price end 全ての分岐を1度でも行えば100%
  3. C1カバレッジ(branch coverage/分岐網羅率) def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き if

    weekday? && student? price -= 200 end price end 全ての分岐を1度でも行えば100%
  4. C1カバレッジ(branch coverage/分岐網羅率) def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き if

    weekday? && student? price -= 200 end price end カバレッジ100% のテストケース例 1. 水曜日かつ学生 2. 土曜日 全ての分岐を1度でも行えば100%
  5. C2カバレッジ(condition coverate/条件網羅率) def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き if

    weekday? && student? price -= 200 end price end 全ての条件の真偽が1度でも出れば100%
  6. C2カバレッジ(condition coverage/条件網羅率) def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き if

    weekday? && student? price -= 200 end price end 全ての条件の真偽が1度でも出れば100%
  7. C2カバレッジ(condition coverage/条件網羅率) def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き if

    weekday? && student? price -= 200 end price end 全ての条件の真偽が1度でも出れば100% カバレッジ100% のテストケース例 1. 水曜日かつ学生 2. 土曜日かつ大人 平日 学生 水曜日学生 真 真 土曜日大人 偽 偽
  8. MCC(複合条件網羅率) def calculate_ticket_price() price = 1800 # 平日かつ学生は200円引き if weekday?

    && student? price -= 200 end price end 全ての条件の真偽の組み合わせが出れば100% カバレッジ100% のテストケース例 1. 水曜日かつ学生 2. 土曜日かつ大人 3. 水曜日かつ大人 4. 土曜日かつ学生
  9. プロジェクトの背景 タスクリスト —————優先度高————— xx機能リリース yy機能リリース —————優先度低————— top/controllers/hello_controller.rb のテスト top/models/hello.rb のテスト

    ・ほとんどテストの書かれていないコード(Rails) ・テストを書きたいとは思っているが、後回しにされていた  -> バグ・障害が頻発していた 優先度を 上げたい