Submit Search
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
1 like
1,284 views
Yoshiki Shibukawa
Offers Deep Dive 2025/1/30の発表資料です。
Software
Read more
1 of 26
Download now
Downloaded 10 times
1
2
3
4
5
6
Most read
7
8
9
10
11
12
13
14
15
Most read
16
17
Most read
18
19
20
21
22
23
24
25
26
More Related Content
PDF
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
PDF
リレーショナルな正しいデータベース設計
Mikiya Okuno
PDF
大企業アジャイルの勘所 #devlovex #devlovexd
Itsuki Kuroda
PDF
商流物流金流.pdf
Zenji Kanzaki
PDF
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~
Hironori Washizaki
PDF
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
PDF
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
リレーショナルな正しいデータベース設計
Mikiya Okuno
大企業アジャイルの勘所 #devlovex #devlovexd
Itsuki Kuroda
商流物流金流.pdf
Zenji Kanzaki
SQuBOKガイドV3概説 ~IoT・AI・DX時代のソフトウェア品質とシステム監査~
Hironori Washizaki
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama
What's hot
(20)
PDF
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
Akira Ikeda
PDF
ざっくり DDD 入門!!
Yukei Wachi
PDF
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
PDF
データベース設計徹底指南
Mikiya Okuno
PDF
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
Yoshiki Hayama
PPTX
クラシフィケーション・ツリー法入門
H Iseri
PPTX
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Shinichiro Yoshida
PDF
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
PPTX
やってはいけない空振りDelete
Yu Yamada
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
PDF
不遇の標準ライブラリ - valarray
Ryosuke839
PDF
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
PDF
正しいものを正しく作る塾-設計コース
増田 亨
PDF
実践的な設計って、なんだろう?
増田 亨
PDF
開発速度が速い #とは(LayerX社内資料)
mosa siru
PDF
“UXデザイン”のキモ『ユーザーインタビュー』の具体的テクニックを詳解!| UXデザイン基礎セミナー 第2回
Yoshiki Hayama
PDF
TDD のこころ
Takuto Wada
PDF
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
PDF
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
kwatch
PDF
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
Akira Ikeda
ざっくり DDD 入門!!
Yukei Wachi
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
データベース設計徹底指南
Mikiya Okuno
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
Yoshiki Hayama
クラシフィケーション・ツリー法入門
H Iseri
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Shinichiro Yoshida
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
やってはいけない空振りDelete
Yu Yamada
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
不遇の標準ライブラリ - valarray
Ryosuke839
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
正しいものを正しく作る塾-設計コース
増田 亨
実践的な設計って、なんだろう?
増田 亨
開発速度が速い #とは(LayerX社内資料)
mosa siru
“UXデザイン”のキモ『ユーザーインタビュー』の具体的テクニックを詳解!| UXデザイン基礎セミナー 第2回
Yoshiki Hayama
TDD のこころ
Takuto Wada
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
kwatch
エスイーが要件定義でやるべきたったひとつのこと
Yoshitaka Kawashima
Ad
Similar to 多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
(20)
PDF
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
PDF
Hey It's Not My TDD!
Yasui Tsutomu
PDF
nseg第5回勉強会
ko ty
PDF
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Yasuhiko Yamamoto
PPT
ユニットテスト 1日目
Yoshiki Shibukawa
PDF
SeasarCon 2009 White TDD
Takuto Wada
PDF
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
makopi 23
PPTX
TDDはじめる前に
Yasui Tsutomu
PDF
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
PDF
CodeZineAcademy TDD実践講座PR資料
Yasui Tsutomu
KEY
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Tomoaki Tamura
PDF
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
Yusuke Yamada
PDF
言語差異によるTDDプロセスへの影響度の解析
pocketberserker
PDF
Emergent Design - ObLove 2009 summer
Takuto Wada
PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
PDF
TDDBC横浜3rd
Yasui Tsutomu
PDF
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
kyon mm
PPTX
コードレビューをより良くする Danger x Android
Toshiyuki Hirata
PPT
Caketest
ryota ichie
PDF
Test Driven Development in LabVIEW
Yusuke Tochigi
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
Hey It's Not My TDD!
Yasui Tsutomu
nseg第5回勉強会
ko ty
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Yasuhiko Yamamoto
ユニットテスト 1日目
Yoshiki Shibukawa
SeasarCon 2009 White TDD
Takuto Wada
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
makopi 23
TDDはじめる前に
Yasui Tsutomu
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
CodeZineAcademy TDD実践講座PR資料
Yasui Tsutomu
Aizu.LT16 社会人1年目の失敗とContinuous Integration
Tomoaki Tamura
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
Yusuke Yamada
言語差異によるTDDプロセスへの影響度の解析
pocketberserker
Emergent Design - ObLove 2009 summer
Takuto Wada
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
TDDBC横浜3rd
Yasui Tsutomu
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
kyon mm
コードレビューをより良くする Danger x Android
Toshiyuki Hirata
Caketest
ryota ichie
Test Driven Development in LabVIEW
Yusuke Tochigi
Ad
More from Yoshiki Shibukawa
(20)
PDF
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
Yoshiki Shibukawa
PPTX
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
Yoshiki Shibukawa
PPTX
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
Yoshiki Shibukawa
PPTX
Golang tokyo #7 qtpm
Yoshiki Shibukawa
PPTX
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
PPTX
Mithril
Yoshiki Shibukawa
PPTX
Go & multi platform GUI Trials and Errors
Yoshiki Shibukawa
PPTX
Excelの話
Yoshiki Shibukawa
PPTX
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
PPTX
アンラーニング
Yoshiki Shibukawa
PDF
東京Node学園 今できる通信高速化にトライしてみた
Yoshiki Shibukawa
PDF
Oktavia全文検索エンジン - SphinxCon JP 2014
Yoshiki Shibukawa
PDF
Oktavia Search Engine - pyconjp2014
Yoshiki Shibukawa
PDF
大規模JavaScript開発
Yoshiki Shibukawa
PDF
Xpjug基調lt2011
Yoshiki Shibukawa
PDF
Expert JavaScript Programming
Yoshiki Shibukawa
PDF
JavaScriptゲーム制作勉強会
Yoshiki Shibukawa
PDF
Pomodoro technique
Yoshiki Shibukawa
PDF
Bitbucket&mercurial
Yoshiki Shibukawa
PDF
つまみぐい勉強法。その後。
Yoshiki Shibukawa
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
Yoshiki Shibukawa
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
Yoshiki Shibukawa
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
Yoshiki Shibukawa
Golang tokyo #7 qtpm
Yoshiki Shibukawa
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
Mithril
Yoshiki Shibukawa
Go & multi platform GUI Trials and Errors
Yoshiki Shibukawa
Excelの話
Yoshiki Shibukawa
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
アンラーニング
Yoshiki Shibukawa
東京Node学園 今できる通信高速化にトライしてみた
Yoshiki Shibukawa
Oktavia全文検索エンジン - SphinxCon JP 2014
Yoshiki Shibukawa
Oktavia Search Engine - pyconjp2014
Yoshiki Shibukawa
大規模JavaScript開発
Yoshiki Shibukawa
Xpjug基調lt2011
Yoshiki Shibukawa
Expert JavaScript Programming
Yoshiki Shibukawa
JavaScriptゲーム制作勉強会
Yoshiki Shibukawa
Pomodoro technique
Yoshiki Shibukawa
Bitbucket&mercurial
Yoshiki Shibukawa
つまみぐい勉強法。その後。
Yoshiki Shibukawa
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
1.
多すぎるユニットテストは却ってよくない? 私が実践しているテストコードのリファクタリング OffersDeepDive2025/1/30 フューチャーアーキテクト 渋川よしき OffersDeepDive2025/1/30 1
2.
お前誰よ:渋川よしき 会社:HondaR&D→DeNA →フューチャーアーキテクト(2017/9-) 家族:妻、娘x3 好きな言語 TypeScript®/Go/Python 趣味 *インラインスケート(歴20年以上) SNS *github.com/shibukawa *x.com/shibu_jp OffersDeepDive2025/1/30 2
3.
テスト駆動開発やっていますか? OffersDeepDive2025/1/30 3
4.
伝統のテスト駆動開発 1.ユニットテストを書き 2.テストを通す最低限のコードを書き 3.リファクタリング これを高速に回す。 厳格に最低限のコードのみを書く原理主義的な人は少ないかもしれませんが、今日聞いてい る方々はある程度のテストは書いているとします。 OffersDeepDive2025/1/30 4
5.
テスト駆動開発のメリット 高品質なコードが書ける バグが少ない インターフェイスがクリーンになる 開発効率が上がる テストコードがドキュメントになる リファクタリングがしやすい OffersDeepDive2025/1/30 5
6.
(おまけ)現代のテストコードとリズム Goだと、関数のI/Fを定義するとコード生成でテーブル駆動テストの雛形を出してくれる 入出力の構造体とかの定義とか頑張り始めると、行数が少ないコードだと、テスト コードの中身を書き始めるまでの準備の時間が50%とかになってしまう 必要があるまでreturnerrを書かないというのも無理がある あんまり気にしない あるいはある程度形が決まるまでテーブル駆動テストをしないというのも手 OffersDeepDive2025/1/30 6
7.
プログラミング言語とか作ったことありますか? OffersDeepDive2025/1/30 7
8.
プログラミング言語を作る(インタプリタ) トークン分割 構文解析→抽象構文木 評価器 OffersDeepDive2025/1/30 8
9.
プログラミング言語を作る(コンパイラ) トークン分割 構文解析→抽象構文木 ジェネレータ OffersDeepDive2025/1/30 9
10.
プログラミング言語を作る(改良) トークン分割 構文解析→抽象構文木 最適化 SSA形式に置き換え シンタックスシュガーを展開 定数の演算はやっちゃう 評価器orジェネレータ OffersDeepDive2025/1/30 10
11.
私はプログラミング言語作りたいとは思ってないよ という人が今日聞かれている方の大半であると思うが、テキストや何かしらの情報を元に、 意図を取り出してきてタスクを行う、他のものに変換するという構造はいろいろなソフトウ ェアに偏在する 例えば Excel→RDBのDDL YAML→APIコードの雛形 なので、自分とは関係ないよ、と言わずにZoom抜けたりしないでね! OffersDeepDive2025/1/30 11
12.
APhilosophyofSoftware Design いろいろ良いことが書いてある本 洋書しかないが、ネットでぐぐると日本語の 読書感想文もいっぱい出てくる OffersDeepDive2025/1/30 12
13.
浅いモジュール 深いモジュール よく出てくる図 浅いモジュールはAPIの数の割に内 部のロジックがシンプルで他への 依存もあまりない 深いモジュールは内部のロジック が複雑な割にAPIはシンプル OffersDeepDive2025/1/30 13
14.
テスト駆動開発と浅いモジュールは相性が良い 世の中の良いコードというのはこちらを指向していることが多い ボトム(ドメインロジック)で品質を上げてそれを組み立てて全体の品質を上げる ウェブアプリケーション(JSON色付け係・SQL組み立て係)は浅くなる レイヤーをたくさんわけても、パッケージパブリックな要素が増えるのは浅い リファクタリングもシンプル コードと責務の移動、共通コードの括りだし、分割程度 公開APIに対してテストをしよう→それでも十分にカバレッジは上がる OffersDeepDive2025/1/30 14
15.
深いモジュールは公開APIが少ない 深いモジュールの例 正規表現の重要な入力は1つの文字列でそれのコンパイルを行う HTTP/2はHTTP/1とAPIが同じだが内部のロジックは大幅に異なる リズムよくテスト駆動開発を行うには ユニットテストコードはパブリックなAPIに対して書こう、とよく言われるが 公開APIにのみテストをしようとするとゴールが遠すぎる プライベートな要素に対してもテストを書くか? OffersDeepDive2025/1/30 15
16.
プライベートテストの作戦 OffersDeepDive2025/1/30 16
17.
作戦の比較 1.愚直にパブリックなAPIのみ 内部が全部そろうまでなかなかゴールが見えない 2.サブパッケージの公開要素にしてテストする 汎用で独立してパッケージ公開しても価値があるコードならあり 変更影響がパッケージに分散してやりにくくなるだけで生産性はマイナス 教条的に「パブリックなテストのみ」にコードを無理やり合わせた形 3.プライベート要素もテストを書く Goの場合は同一パッケージ内であればプライベート要素のテストはできる OffersDeepDive2025/1/30 17
18.
重要な前提 経験上、処理系は何度実装してもなかなか一発で設計できるようにならないし、内部構 造の変更の頻度はパッケージ分けても変わらない プライベートな要素は実装者も1-2週間あればすっかり忘れる テストでエラーが出ても、仕様がそもそも明文化されてないので何が悪いのかどう治す べきかテストを直すべきかすぐにわからないことが多い OffersDeepDive2025/1/30 18
19.
フェーズによって作戦を変える 1.最初はプライベートののテストをガンガン書く テスト駆動開発のリズムで開発 ゴールが遠すぎて心が折れるのを回避 2.一通り上流までの機能がそろったら公開APIのテストに 置き換えていく 処理系の入力テキストと出力に対するデータ駆動テ ストにしていく 3.プライベート向けのテストは捨てる OffersDeepDive2025/1/30 19
20.
多すぎる/無駄なテストは開発速度を落とす テスト駆動のテストコードは実装された瞬間が最大価値 既存のテストが新しいバグを見つけることは基本的にない リファクタリング、依存ライブラリの仕様変更の発見で力を発揮 メインのコードと構造が接近しすぎたテストは品質に寄与しない コードを直すたびに修正が必要なテストは手間が増えるだけで保証にならない 内部APIのテストはこうなりがち なので思い切って捨てる OffersDeepDive2025/1/30 20
21.
この時に書いた技術ブログ testdataの中のフォルダをループで回して入力ソースを 読み込んで期待する結果と比べるテスト 中間出力をワークフォルダに書き出してデバッグしたい というのを書いたら今日のお話が来ました https://future-architect.github.io/articles/20241016a/ OffersDeepDive2025/1/30 21
22.
常に上流のテストで代替すべきか? ウェブフロントエンドのE2Eテストはかなり速度が遅い 並列動作もさせにくい バリデーションは細かい規則の網羅はユニットテス トで行い、E2Eテストは「バリデーションが実行さ れた」のチェックだけにするなど分担をきちんとす ることでテストが遅くなるのを防ぐ ただし、並列テストしやすくなるとか技術的なイノ ベーションがあれば変わる可能性はある https://kentcdodds.com/blog/the-testing-trophy-and- testing-classificationsから引用 OffersDeepDive2025/1/30 22
23.
常に上流のテストで代替すべきか? ウェブフロントエンドでの単体テスト・統合テスト議論は動機は少し違う 画面に表示するコンポーネントありきのロジックは単体テストしても全体の品質へ の寄与は小さい トップダウンで作ってロジックが太ったので切り離す、というのが一般的だと思う 言語の場合の内部構造はボトムアップで実装していくが上流の要件変更で変わりやすい 下側で品質を担保担保がやりにくいという特性 画面のUIコンポーネントとはやや似ている 画面のテストもユニット→インテグレーションの流れ(testing-libraryとか) OffersDeepDive2025/1/30 23
24.
落ち穂拾い テストの名前 最終的なAPIのテストは公開要素に対するユニットテストと言えるが、プライベート 要素からするとインテグレーションテスト この辺りの名前は相対的なものなので、この発表を持って「インテグレーションテ ストの寄るのが正しい」みたいなことは言えない 外から見えない挙動について キャッシュやリトライ、最適化がうまく走ったかなどは外部からは見えない挙動 これが要件としてある場合はそこのプライベートなテストは必要かもしれない あるいは統計情報やログとして取り出せるようにしてそこでテストするのも手かも しれない OffersDeepDive2025/1/30 24
25.
まとめ 公開機能以外は実装者も1-2週間あれば忘れる プライベートはテストしないというが最初からプライベートのテストを書いてはいけな いわけではない 最初は補助輪のつもりでプライベートのテストを書くことはあるが、のちに意識してき ちんと捨てていく OffersDeepDive2025/1/30 25
26.
みてね OffersDeepDive2025/1/30 26
Download