Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Yoshiki Shibukawa
PDF, PPTX
1,352 views
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
Offers Deep Dive 2025/1/30の発表資料です。
Software
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 26
2
/ 26
Most read
3
/ 26
4
/ 26
5
/ 26
6
/ 26
7
/ 26
8
/ 26
9
/ 26
10
/ 26
11
/ 26
12
/ 26
13
/ 26
14
/ 26
Most read
15
/ 26
16
/ 26
17
/ 26
18
/ 26
19
/ 26
20
/ 26
Most read
21
/ 26
22
/ 26
23
/ 26
24
/ 26
25
/ 26
26
/ 26
More Related Content
PPT
Treasury
by
Iqbal Ansari
PPTX
確率ロボティクス第11回
by
Ryuichi Ueda
PPTX
Red Flags of Money Laundering
by
complianceonline123
PPT
Financial System In Malaysia
by
NATASHYA AYUNIE
KEY
テストコードのリファクタリング
by
Shuji Watanabe
ODP
書こう!ユニットテスト vol.1 ナンデ?
by
Takaaki Hirano
PPT
ユニットテスト 1日目
by
Yoshiki Shibukawa
KEY
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
by
Shuji Watanabe
Treasury
by
Iqbal Ansari
確率ロボティクス第11回
by
Ryuichi Ueda
Red Flags of Money Laundering
by
complianceonline123
Financial System In Malaysia
by
NATASHYA AYUNIE
テストコードのリファクタリング
by
Shuji Watanabe
書こう!ユニットテスト vol.1 ナンデ?
by
Takaaki Hirano
ユニットテスト 1日目
by
Yoshiki Shibukawa
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
by
Shuji Watanabe
Similar to 多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
KEY
リファクタリング読書会20120220
by
Suguru Shirai
PDF
ありえるえりあ勉強会@五反田~テスト編~ Part2
by
Tomoyuki Sato
PDF
リファクタリングで実装が○○分短縮した話
by
infinite_loop
PPT
レガシーコード改善ガイド読書会
by
Hiro Yoshioka
PPT
ユニットテスト_2日目
by
Yoshiki Shibukawa
PDF
第3回ソフトウェアテストセミナー
by
Tomoyuki Sato
PDF
C# から java へのプログラム移植で体験したtddの効果は?
by
Shinichi Hirauchi
PDF
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
by
Tomomi Kajita
PPTX
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか #rakutentech
by
Kotaro Ogino
PPTX
MagicPodで自動化率を爆上げしたハナシ
by
Kohei Tai
PDF
RSpec Performance Turning
by
Go Sueyoshi (a.k.a sue445)
PDF
pytestを爆速にする10の方法 @ PyCon JP 2025
by
Takayuki Shimizukawa
PDF
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
KEY
テスト駆動開発の導入ーペアプログラミングの学習効果ー
by
Shuji Watanabe
PDF
エクストリームエンジニア4
by
T-arts
PPTX
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
by
Hideki Sugimoto
リファクタリング読書会20120220
by
Suguru Shirai
ありえるえりあ勉強会@五反田~テスト編~ Part2
by
Tomoyuki Sato
リファクタリングで実装が○○分短縮した話
by
infinite_loop
レガシーコード改善ガイド読書会
by
Hiro Yoshioka
ユニットテスト_2日目
by
Yoshiki Shibukawa
第3回ソフトウェアテストセミナー
by
Tomoyuki Sato
C# から java へのプログラム移植で体験したtddの効果は?
by
Shinichi Hirauchi
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
by
Tomomi Kajita
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか #rakutentech
by
Kotaro Ogino
MagicPodで自動化率を爆上げしたハナシ
by
Kohei Tai
RSpec Performance Turning
by
Go Sueyoshi (a.k.a sue445)
pytestを爆速にする10の方法 @ PyCon JP 2025
by
Takayuki Shimizukawa
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
テスト駆動開発の導入ーペアプログラミングの学習効果ー
by
Shuji Watanabe
エクストリームエンジニア4
by
T-arts
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
by
Hideki Sugimoto
More from Yoshiki Shibukawa
PPTX
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
by
Yoshiki Shibukawa
PDF
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
by
Yoshiki Shibukawa
PPTX
Kiroを使ってみた - そこから見える今どきの開発 - Kiro Meetup Japan #1
by
Yoshiki Shibukawa
PDF
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
by
Yoshiki Shibukawa
PPTX
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
by
Yoshiki Shibukawa
PPTX
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
by
Yoshiki Shibukawa
PPTX
Golang tokyo #7 qtpm
by
Yoshiki Shibukawa
PPTX
Chunked encoding を使った高速化の考察
by
Yoshiki Shibukawa
PPTX
Mithril
by
Yoshiki Shibukawa
PPTX
Go & multi platform GUI Trials and Errors
by
Yoshiki Shibukawa
PPTX
Excelの話
by
Yoshiki Shibukawa
PPTX
FINAL FANTASY Record Keeperを支えたGolang
by
Yoshiki Shibukawa
PPTX
アンラーニング
by
Yoshiki Shibukawa
PDF
東京Node学園 今できる通信高速化にトライしてみた
by
Yoshiki Shibukawa
PDF
Oktavia全文検索エンジン - SphinxCon JP 2014
by
Yoshiki Shibukawa
PDF
Oktavia Search Engine - pyconjp2014
by
Yoshiki Shibukawa
PDF
大規模JavaScript開発
by
Yoshiki Shibukawa
PDF
Xpjug基調lt2011
by
Yoshiki Shibukawa
PDF
Expert JavaScript Programming
by
Yoshiki Shibukawa
PDF
JavaScriptゲーム制作勉強会
by
Yoshiki Shibukawa
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
by
Yoshiki Shibukawa
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
by
Yoshiki Shibukawa
Kiroを使ってみた - そこから見える今どきの開発 - Kiro Meetup Japan #1
by
Yoshiki Shibukawa
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
by
Yoshiki Shibukawa
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
by
Yoshiki Shibukawa
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
by
Yoshiki Shibukawa
Golang tokyo #7 qtpm
by
Yoshiki Shibukawa
Chunked encoding を使った高速化の考察
by
Yoshiki Shibukawa
Mithril
by
Yoshiki Shibukawa
Go & multi platform GUI Trials and Errors
by
Yoshiki Shibukawa
Excelの話
by
Yoshiki Shibukawa
FINAL FANTASY Record Keeperを支えたGolang
by
Yoshiki Shibukawa
アンラーニング
by
Yoshiki Shibukawa
東京Node学園 今できる通信高速化にトライしてみた
by
Yoshiki Shibukawa
Oktavia全文検索エンジン - SphinxCon JP 2014
by
Yoshiki Shibukawa
Oktavia Search Engine - pyconjp2014
by
Yoshiki Shibukawa
大規模JavaScript開発
by
Yoshiki Shibukawa
Xpjug基調lt2011
by
Yoshiki Shibukawa
Expert JavaScript Programming
by
Yoshiki Shibukawa
JavaScriptゲーム制作勉強会
by
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