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
Spring Boot で実現する クリーンアーキテクチャとそのテスト戦略
Search
Takaichi00
December 25, 2019
Technology
3.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Spring Boot で実現する クリーンアーキテクチャとそのテスト戦略
【第1回】Java Testing Challenge LT大会 での登壇資料です
Takaichi00
December 25, 2019
More Decks by Takaichi00
See All by Takaichi00
individual_or_organization
takaichi00
0
340
自分から始めるアジャイルの道 ~内発的動機をきっかけに変わった価値観~
takaichi00
0
480
Java developer introduced to Rust-ADC2022
takaichi00
0
310
野球人・落合博満さんから学ぶ、アジャイルなマインドセット・プラクティス
takaichi00
1
930
【CICD2021】デプロイメントパイプラインの原理原則を再確認する / Confirm Deployment Pipeline Principle
takaichi00
11
4.7k
【JTF2021】SonarQube をより有効活用する / Effective SonarQube
takaichi00
1
2.7k
JJUG CCC 2021 Spring-Resolving OOME with JFR
takaichi00
2
3.8k
【Yahoo! JAPAN Agile 2nd】野球人・落合博満さんから学ぶスクラムマスター / デベロッパー
takaichi00
0
2.8k
【Developers Boost 2020】凡人エンジニアの生存戦略
takaichi00
1
3.3k
Other Decks in Technology
See All in Technology
電話に出る Python のログの話
shinnosuke_kishida
0
220
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
0
380
Windows の互換機能 - 古いプログラムはなぜ動作できるのか
murachiakira
PRO
0
100
アクセスキー流出時の対応で再認識した攻撃側と防御側の非対称性について
kazzpapa3
0
270
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
85k
internal/testlog で遊ぼう
rokuosan
0
220
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
20
7.5k
パスキーでドライブする アカウント統合(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
270
アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応
kazzpapa3
0
320
Kiro WebとCloud Sessions
nagisa53
2
200
内製AIチャットボット開発で学んだ Datadog Agent Observability活用術
mkdev10
0
140
AIエージェントのためのデータ設計
daiz21
0
220
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
670
So, you think you're a good person
axbom
PRO
2
2.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Code Review Best Practice
trishagee
74
20k
Believing is Seeing
oripsolob
1
200
Accessibility Awareness
sabderemane
1
180
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
670
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
510
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Transcript
Spring Boot で実現する クリーンアーキテクチャとそのテスト戦略 髙市 智章 (Tomoaki Takaichi) Dec, 25,
2019 【第1回】Java Testing Challenge LT大会 #jjtc
自己紹介 @Takaichi00 tomoaki.takaichi.5 ・髙市 智章(タカイチ トモアキ) ・Java でのシステム開発 ・アジャイル開発実践 ・ショップ向けシステムの開発
❏ テスト戦略を立てていないと... ❏ 人によってテストの実装方法が違う ❏ 不必要なテストや、ビジネス上重要なロジックにテス トがない ❏ テストコードのメンテナンス性悪化 テスト戦略立てていますか?
❏ 実践アジャイルテスト で書かれている内容 ❏ アジャイルテストの4象限 ❏ テストピラミッド ❏ クリーンアーキテクチャー ❏
凹型レイヤー テスト戦略を立てる上で考えていること
❏ 様々なテストは大きく以下の4分類に分けることができる ❏ 分類ごとに、自動 or 手動 or ツール でやるべきものが決定する アジャイルテストの4象限
https://notta55.hatenablog.com/entry/2015/05/03/161631 より引用
❏ どのテストを優先して自動化するか? ❏ 実行が速い/コストが低い単体テストを多く自動化する ❏ 実行が遅い/コストが高い結合テスト、GUI のテストは多く自動化しない ❏ 例: 境界値全網羅は単体テスト、業務シナリオテストは代表的なフロー数本
テストピラミッド https://notta55.hatenablog.com/entry/2015/05/03/161631 より引用
❏ 中心の「ビジネスロジック」はそのままに、それ以外は交 換可能なものとする考え方 クリーンアーキテクチャー https://blog.tai2.net/images/CleanArchitecture.jpg より引用
❏ TERASOLUNA や 「Spring入門」などでも紹介されてい る設計パターン 凹型レイヤー https://terasolunaorg.github.io/guideline/5.0.0.RELEASE/ja/_images/LayerDependencies.png より引用
❏ Controller, Service, Repository のそれぞれのレイヤ間 で完結する単体テスト ❏ レイヤ間で正しい振る舞いができているか? ❏ Domain
Model に対する単体テスト ❏ ビジネスロジックは正しいか? ❏ Controller ⇔ Repoistory ⇔ 対向先をモック という結合 テスト ❏ 結合した場合に正しい振る舞いをするか? Spring Boot テスト方針 ~REST API の場合~
❏ 実際にサンプルを実装してみました Spring Boot DEMO https://github.com/Takaichi00/spring-boot-sample-api /tree/master/spring-boot-sapmle-api
❏ Front 部分からの開発が可能になる ❏ 後ろの処理を実装していなくても Front の機能が実装可能 ❏ 「念の為の実装」をしなくて良い ❏
Controller のプロトコルが変わった、データ取得元が DB では なく REST API になった、といった場合でも Domain の変更を しなくて良い ❏ 複数レイヤを並行して開発できる ❏ ただしコミュニケーションコストがかかるためあまり実践はしていない ❏ (結果として) テスタビリティが高い この実装の良い点
❏ レイヤ間の値の詰め替えが退屈 ❏ 項目が多いほど値を詰め替える時間が膨大になり、テ ストも確認する項目が増え大変 ❏ 実装とテストが成熟してくると、例えば DB に項目を1 つ追加して画面に返すのにも結構手間がかかる
❏ 仮に REST API と画面を結合した GUI テストを実装し始 めた場合、結合テストのメンテナンスが大変になることも この実装の辛い点
❏ テストアワーグラス ❏ GUI テストのコストは低下傾向にある ❏ 結合テストはユーザーのニーズを満たしているか確 認できるだろうか? ❏ ATDD
(受け入れ駆動開発) ❏ Web 画面であれば Cucumber + Selenide を使用したテスト 次の挑戦 https://www.getautoma.com/blog/the-test-hourglass より引用
さいごに みなさんのテスト戦略もぜひ聞かせてください!!
ご清聴ありがとうございました