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

テストカバレッジ100%を10年続けて得られた学びと品質

Avatar for もっち もっち
September 04, 2025

 テストカバレッジ100%を10年続けて得られた学びと品質

キチピー リジェクトコン【非公式】
https://connpass.com/event/363351/
での発表資料です。

Avatar for もっち

もっち

September 04, 2025
Tweet

Other Decks in Programming

Transcript

  1. テストカバレッジ/コードカバレッジ テストがプログラムのソースコードをどの程度カバーしているかを測る指標 いろいろある。それぞれ守れるものも違う • 命令網羅 (Statement Coverage) (C0) • 分岐網羅

    (Branch Coverage) (C1) • 条件網羅 (Condition Coverage) (C2) • 判定条件/条件網羅 (Decision/Condition Coverage) • 複合条件網羅 (Multiple Condition Coverage) • Modified Condition/Decision Coverage • 経路網羅 (Path Coverage) 6
  2. どんな環境で何を作っていたの? • プロダクトの種類: NoSQLサーバー • ユースケース:さまざま • 業種:⾦融、公共、電⼒、通信 • 提供⽅法:サーバーにインストールして動作

    • ライフサイクル:半年や1年に1回のバージョンアップ • カバレッジ100%はPJ規約や組織の基準として決められていた(出会い) 代表的なものを1つ紹介(他に経験したプロジェクトも似たようなもの) 13
  3. C1カバレッジを95%〜99%にすることで得られたもの • バグを検知できる(なんだかんだで出る) • テスタブルなコードに⾃然となる(ならないと無理) ◦ モジュール化 ◦ インタフェース活⽤ ◦

    純粋関数への切り出し ◦ 早期リターン • プロダクトコードの理解が向上 • 不要なコードに気づける • リファクタリングの安全性 • ライブラリバージョンアップの安全性 14
  4. 99%から100%への壁 • 数値を上げるためだけのテストケースが増えてくる • テストケースを書けるようにするため 無理にプロダクトコードを変更することが出てくる (条件分岐を無理やりまとめたり) • assertのないテストコードを書く⼈が出てきたりする(質の低下) •

    テストコードを書く⼯数もかなり増える(かなりというかめちゃくちゃ増える) • なんのために書いてるかわからなくなる • ただ、学習としては100%⽬指してやってみるのはめちゃくちゃ良い 15
  5. 10年の間に考えるきっかけがたくさんありました • 例外プロジェクトへの参加 ◦ PoC/プロトタイピング • 納期が厳しくテスト⼯数を減らさざるを得なかったり • 100%は意味ないでしょうって意⾒をぶつけたり •

    ⾃⾝がPLやPjMとなり、品質に対するオーナーシップが必要になったり • 単体テストフェーズなくしてみたり • そして、ミドルウェア開発からサービス開発へ 20
  6. 作っているものによる • 航空機搭載ソフトウェア(DO-178CのレベルA) ※ ◦ 100% MC/DC(Modified Condition/Decision Coverage) ◦

    100% 決定カバレッジ(Decision Coverage) ◦ 100% ステートメントカバレッジ(Statement Coverage) • 医療機器のソフトウェア(IEC 62304でクラスC) ◦ 具体的な⽬標数値はないが、⾼い品質が求められることは分かる • RDBMS(データベース) • タスク管理システム • 家電の組込みソフトウェア (※)出展: https://ldra.com/ldra-blog/do-178c-structural-coverage-analysis/ 22
  7. モジュールやシステムの依存関係による • 様々なシステムから 様々な使われ⽅をするソフトウェア (依存される側) ◦ ロギング⽤のライブラリ ◦ Webフレームワーク ◦

    データベースなどのミドルウェア ◦ OS • それらを使⽤するソフトウェア (依存する側) システムA システムB システムC ミドルウェア OS OS OS ライブラリ/FW OS ライブラリ/FW ライブラリ/FW 使⽤ 使⽤ 使⽤ 問題があった場合の影響範囲は?変更のしやすさは? 24
  8. リリース頻度による • 継続的 • ⽇次 • 週1回 • ⽉1回 •

    年1回 つぎに開発するのは同じメンバー? 26