More Related Content
PDF
PDF
PDF
PPTX
PDF
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 PDF
PDF
What's hot
PDF
PDF
PDF
Test Yourself - テストを書くと何がどう変わるか PDF
PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら KEY
PDF
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える PDF
PDF
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか? PDF
PPTX
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開 PDF
PDF
PDF
PDF
今なら間に合う分散型IDとEntra Verified ID PDF
なかったらINSERTしたいし、あるならロック取りたいやん? PDF
Recently uploaded
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信 PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望 PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」 PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector PDF
PPTX
PDF
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜 PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版 テストコードの DRY と DAMP
- 1.
- 2.
誰?
• 加賀田 裕介@_heartyfluid
• 今は Web アプリエンジニア
• 今は不動産とか IoT とかの会社に勤務
• 直近では自社サービスのひとつを
PHP7 + CakePHP3 から PHP8 + CakePHP4 にひとりで移行作業中
• 最近の趣味はドイツ語
- 3.
- 4.
- 5.
- 6.
- 7.
歯切れの悪い In MyOpinion
「わかります。おっしゃりたいことはよくわかります。まともな神経のプロ
グラマーなら、同じ文字列リテラルを2回書くなんて生理的に受け付けないで
すよね。”Don’t Repeat Yourself” すなわち
DRY 原則というやつですよね知ってます。でもちょっと立ち止
まって考えたいんですけどいいですか、同じリテラルを
2回書かないのってたとえば「その値を変更したくなったとき
に同じ変更を2箇所に施さないといけないのはだるいから」だったりするじゃ
ないですか、でもね、このテストってパス /users/add に HTTP リクエストを
投げてみるというのがそもそもの趣旨なわけでしょう、そうすると文字列リ
テラル ‘/users/add’ を変更したくなるケースって実はそんなに想定しなくても
いいと思うんですよ。えっいや100%保証できるわけじゃないですけど…でも
まあそうだとするとですよ、その行でどんな値になっているかその1行を読ん
だだけではわからない変数よりも、値をベタッと書いてあるほうが読み手に
は読みやすいんじゃないかなあと思うんですよね。えっ大差ない?お前だ
け?気合いの問題?ええっと…(続
- 8.
- 9.
もうひとつの原則:DAMP
• DAMP; DescriptiveAnd Meaningful Phrases
「説明的かつ意味がわかりやすい言い回し」
良いテストとは変化しないように設計されるものであり、そして実際、テスト対象システムが変化す
る際にはテストが破綻することが通常は望ましい。したがってテストコードに関しては、本番環境向
けのコードほど DRY の恩恵はない。
さらにテストの場合、複雑となった場合のコストがより大きい。つまり、(…) テストは自立しなけれ
ばならず、正しいことが自明でなければバグを出すリスクがある。(…) テストが正しく動作している
ことを担保するためにテスト自体にテストが必要と感じられるほどテストが複雑になり始めたら、何
かが間違っている。
Titus Winters ほか. Google のソフトウェアエンジニアリング. オライリー・ジャパン, 2021.
これが
言いたいことだった
- 10.
乱暴に整理する
DRY DAMP
• コードの重複を避ける
•コードは簡潔になる
• 変更時にも一貫性を壊さない
• 誤読のリスクは残るかもしれない
• プロダクトコード向き(?)
• コードの重複をいとわない
• コードは冗長になる
• 一貫性の担保が手間かもしれない
• そうとしか読めないようなコード
• テストコード向き(?)
現実には、局面ごとに
バランスをとる必要性
- 11.
参考文献
• Titus Wintersほか. Google のソフトウェアエンジニアリング. オライリー・ジャパン, 2021.
• 日本語で DAMP についてまとまった解説を読めるのがこちら
• Vladimir Khorikov. “DRY vs DAMP in Unit Tests”. Enterprise Craftsmanship. 2020年6月8日.
https://enterprisecraftsmanship.com/posts/dry-damp-unit-tests/
• プロダクトコードは DRY でテストコードは DAMP …というわけではない、という解説。How は DRY に、What は
DAMP に書きましょう
• David Thomas ほか. 達人プログラマー(第2版). オーム社, 2020.
• DRY 原則といえば『達人プログラマー』。DRY も改めてふりかえると、単に「同じコードを2回書くな」という以上の
話を含んでいますね
• 宍戸里佳. 英語と一緒に学ぶドイツ語. ベレ出版, 2012.
• ところで、 Don’t Repeat Yourself の Yourself っていまいち必要性がわからないことないですか。ドイツ語文法の「再帰
動詞」を学ぶとより立体的に理解できます(※個人の感想です)。ドイツ語はいいぞ
Editor's Notes
- #2 0:05
- #3 0:20
- #4 0:35
- #5 1:00
1:10
1:20
- #6 1:35
1:45 ただ、非常にためらいもある
- #7 2:00
- #8 2:15
- #9 2:20
- #10 2:50
3:10
3:20
- #11 4:10
4:30