Skip to main content More Related Content
PDF
PDF
PDF
PPTX
PPTX
PDF
PDF
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料) What's hot
PDF
PDF
PPTX
オーバーエンジニアリングって何? #devsumi #devsumiA PDF
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料) PDF
フロー効率性とリソース効率性について #xpjug PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例 PDF
MagicOnion~C#でゲームサーバを開発しよう~ PDF
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料) PPTX
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~ PPTX
世界一わかりやすいClean Architecture PDF
PPTX
RLSを用いたマルチテナント実装 for Django PDF
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 PDF
PDF
ドメイン駆動設計のための Spring の上手な使い方 PPTX
テストコードの 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