Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goのカバレッジ計測の仕組みをコードリーディングで理解する
Search
OPTiM
October 06, 2025
1
180
Goのカバレッジ計測の仕組みをコードリーディングで理解する
2025/9/28 開催「Go Bash vol.2」での発表資料です。
https://layerx.connpass.com/event/367057/
OPTiM
October 06, 2025
Tweet
Share
More Decks by OPTiM
See All by OPTiM
0→1製品の毎週リリースを支えるGoパッケージ戦略——AI時代のPackage by Feature実践
optim
5
990
Ruby初学者から見たRubyKaigi
optim
0
250
メモ整理が苦手な者による頑張らないObsidian活用術
optim
1
300
新卒でも即戦力になりたい! ~新卒エンジニアがAIを使ってElectronアプリの改善をやってみた~/20250723-ai-endo
optim
0
48
製品価値向上のための "上流工程" AI支援/20250723-ai-uehara
optim
0
46
IoT機器の一括デバイスプロビジョニングと遠隔操作の技術 / 20250424-iot-aoki
optim
0
61
ClineにNext.jsのプロジェクト改善をお願いしてみた / 20250321_reacttokyo_LT
optim
2
2.1k
k8s(EKS)でマルチテナントプラットフォームを運用する際のコスト按分の実装 / 250124_LT_SRE
optim
0
71
MDMサービスの巨大さと特殊さに負けない開発体制と品質プロセス / technight250218
optim
0
140
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
610
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
How to Think Like a Performance Engineer
csswizardry
27
2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
A better future with KSS
kneath
239
17k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Facilitating Awesome Meetings
lara
56
6.6k
Building Adaptive Systems
keathley
43
2.8k
Visualization
eitanlees
148
16k
Transcript
© 2019-2025 OPTiM Corp. All rights reserved. Goのカバレッジ計測の仕組みをコードリーディングで 理解する 2025/10/06
Go Bash vol.2 株式会社オプティム 宍戸
© 2019-2025 OPTiM Corp. All rights reserved. 2 自己紹介 ・
名前:宍戸(ししど) ・ 担当:バックエンド ・ 所属:株式会社オプティム ・ プロダクト ・2023年~ OPTiM Biz (MDM)で開発と問い合わせ対応 ・2025年~ OPTiM Collaboration Portal でバックエンド
© 2019-2025 OPTiM Corp. All rights reserved. 3 会社紹介
© 2019-2025 OPTiM Corp. All rights reserved. 4 会社紹介 商号
株式会社オプティム(プライム市場:3694) Tokyo Kobe 設立 2000年 オフィス OPTiM TOKYO(東京本社@浜松町) 総スタッフ数 700名 ※正スタッフ 433名 OPTiM SAGA(佐賀本店@佐賀大学キャンパス内) OPTiM KOBE (神戸オフィス@三ノ宮) TECH CENTER IIZUKA (テックセンター飯塚@九州工業大学飯塚キャンパス前) 代表者 菅谷 俊二 うち7割がエンジニア職 Optimization:最適化 Optimism:楽観主義 × (2025年4月現在) Saga
© 2019-2025 OPTiM Corp. All rights reserved. 5 事業・提供サービス概要 オプティムは、AI・IoT・Cloud・Mobile・Roboticsを使った新しい価値を創造し続け、あ
らゆる産業のDXを推進し、あらゆる人々に、豊かでサステナブルな未来を実現する企業です
© 2019-2025 OPTiM Corp. All rights reserved. 6 go test
–cover 使ってますか?
© 2019-2025 OPTiM Corp. All rights reserved. 7 コマンドを実行してから裏側でどのよう な処理をしているか知ってますか?
© 2019-2025 OPTiM Corp. All rights reserved. 8 カバレッジの網羅率をどのように 測っているのでしょうか?
© 2019-2025 OPTiM Corp. All rights reserved. 9 ・ カバレッジとは?
・ 実装を確認してみる ・ カバレッジを計測するための仕組み ・ まとめ アジェンダ
© 2019-2025 OPTiM Corp. All rights reserved. 10 カバレッジとは?
© 2019-2025 OPTiM Corp. All rights reserved. 11 カバレッジ =
テストのカバー率 Go のテストにおいてカバレッジを図るためのコマンドが存在します カバレッジ = テスト対象コードのうち実行された命令文(statements)の割合
© 2019-2025 OPTiM Corp. All rights reserved. 12 実装を確認してみる どうやってGo
のコマンドを検知しているのか
© 2019-2025 OPTiM Corp. All rights reserved. 13 Go の実装を確認しに行く
https://github.com/golang/go 今回はコマンド関連の実装から コードリーディングしていくので Cmd ディレクトリ配下を確認
© 2019-2025 OPTiM Corp. All rights reserved. 14 エントリーポイントの実装 参考:
src/cmd/go/main.go lookupCmd が怪しそう あとで登場します
© 2019-2025 OPTiM Corp. All rights reserved. 15 コマンドの探索 src/cmd/go/internal/base/base.go
1: go test –-cover の場合、test コマンドが存在する 2: c.Runnable で main.go の init 関数にある test と一致するフィールドが存在することを確認 3: サブコマンドが存在する場合は継続する lookupCmd の中の処理 src/cmd/go/main.go
© 2019-2025 OPTiM Corp. All rights reserved. 16 カバレッジの有効化 カバレッジの有効化はどのように実現しているのか
© 2019-2025 OPTiM Corp. All rights reserved. 17 Cover のフラグが立つ手順
src/cmd/go/internal/test/testflag.go AddCoverFlags が怪しい
© 2019-2025 OPTiM Corp. All rights reserved. 18 AddCoverFlags の実装
src/cmd/go/internal/work/build.go AddCoverFlags は cover 系のフラグを cmd に登録する関数 フラグが使える状態になっただけで 有効にはなってない
© 2019-2025 OPTiM Corp. All rights reserved. 19 サブコマンドのフラグを立てる実装 src/cmd/go/internal/cmdflag/flag.go
name は cover なので ここで—cover が true に セットされる
© 2019-2025 OPTiM Corp. All rights reserved. 20 カバレッジを計測するための仕組み テストの割合を確認するための分母となる情報の取得
© 2019-2025 OPTiM Corp. All rights reserved. 21 カバレッジを計測する仕組み 分子
= AST で仕込んだカウンタを、実行時に集計した数 分母 = AST 解析で検出した全ブロック数 coverage % = 分子 / 分母
© 2019-2025 OPTiM Corp. All rights reserved. 22 どのようにカウンタを仕込むのか cover
のフラグをオン AST で解析開始 ブロックごとの検知 カウンタ挿入 AST(抽象構文木) とは ◼ プログラムを木構造にした設計図 ◼ 文字列としてのコードではなく「構造」で表す ◼ 例:if x > 0 { return x }
© 2019-2025 OPTiM Corp. All rights reserved. 23 AST で解釈されるブロック
© 2019-2025 OPTiM Corp. All rights reserved. 24 実際のコード カウンタを挿入したイメージコード
© 2019-2025 OPTiM Corp. All rights reserved. 25 ifブロック通過 (coverCount++)
elseブロック通過 (coverCount++) Cover 率 100%!!
© 2019-2025 OPTiM Corp. All rights reserved. 26 まとめ ・Go
のカバレッジは AST を変換してブロックごとにカウンタを挿入 する仕組みで成り立つ ・ カバレッジを理解するとどこがカバーできていないかを明確にする ことができる ・数字の裏側を知ることで、カバレッジを「ただの%」から「テスト 改善の指標」にできる
© 2019-2025 OPTiM Corp. All rights reserved. 27 カバレッジの仕組みを理解することで、 数値を追うだけでなく、
ブロック単位で効果的にカバーできるテスト設計を
© 2019-2025 OPTiM Corp. All rights reserved.