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
新規プロダクトの開発速度と品質の両立を支える自動テスト/ Automation testin...
Search
noriharu3
August 25, 2020
Programming
2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
新規プロダクトの開発速度と品質の両立を支える自動テスト/ Automation testing supports both development speed and quality of new product
noriharu3
August 25, 2020
More Decks by noriharu3
See All by noriharu3
中途社員がチームに参加しました
noriharu3
0
1.6k
Other Decks in Programming
See All in Programming
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
160
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
440
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
100
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
What We Talk About When We Talk About XP
m_seki
2
390
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.5k
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
930
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
Webの地図
yosuke_furukawa
PRO
1
310
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
230
30 Presentation Tips
portentint
PRO
1
390
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
GitHub's CSS Performance
jonrohan
1033
470k
Music & Morning Musume
bryan
47
7.4k
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Technical Leadership for Architectural Decision Making
baasie
3
560
Everyday Curiosity
cassininazir
0
310
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Transcript
新規プロダクトの 開発速度と品質の両立を 支える自動テスト SaaS 新規プロダクトの技術 #RAKUSMeetup 福岡憲治
自己紹介 • 福岡 憲治(ふくおか けんじ) • 2018 年に中途でラクスへ入社 ◦ 楽楽精算の開発を経て、現在は楽楽労務の開発/運用
◦ 定期的なバージョンアップのための仕組みやルール作りに 奮闘中 ◦ テレワーク Now ! 2
新規プロダクトならではの悩み 3
新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス トが減らない
4
本日お話しすること 新規プロダクトに、スピード感のある開発はとても重要 品質を保ちつつ、開発速度を両立するために自動テストは不可欠 です • 自動テストって何をしているの? • どういうとき嬉しいの? 5
目次 1. 楽楽労務のプロダクト概要 2. 楽楽労務の技術スタック概要 3. 開発速度と品質の両立を支える自動テスト 3.1. ユニットテスト 3.2.
アーキテクチャテスト 3.3. E2E テスト 3.4. 自動テストの恩恵 4. テストコードを書くことが当たり前のチーム文化 6
1. 楽楽労務のプロダクト概要 7
楽楽労務のプロダクト概要 人事労務業にかかわる人のストレスをゼロに。 8 https://www.rakurakuroumu.jp/
2. 楽楽労務の技術スタック概要 9
楽楽労務の技術スタック概要 10 Frontend Backend Vue.js Vuetify.js Spring Boot Batch
楽楽労務の技術スタック概要 11
3. 開発速度と品質の両立を支える 自動テスト 12
開発速度と品質の両立を支える自動テスト • ユニットテスト ◦ JUnit, Jest • アーキテクチャテスト ◦ ArchUnit
• E2Eテスト ◦ Puppeteer 13
3.1. ユニットテスト(JUnit)
ユニットテスト(JUnit) JUnit を用いて、Java プログラムのメソッドレベルの入出力が期 待どおりの動作をしているかを確認する • テストカバレッジが約90% 15
ユニットテスト(JUnit) マージリクエスト時に、レビューイ・レビューア共に • 既存機能にデグレがないことに一定の安心感がある • 既存機能にデグレがないか確認の時間を削減できる ※マージリクエスト・・・GitHubでいうとプルリクエストのこと 16
ユニットテスト(JUnit) 依存ライブラリを更新する際に、アプリケーションが壊れていない ことに一定の安心感がある • 特に、JDK と Spring Boot 17
3.2. アーキテクチャテスト(ArchUnit)
アーキテクチャテスト(ArchUnit) ArchUnit を用いて、Java アプリケーションのパッケージやクラス が設計方針(依存関係)に沿っているかを確認する こんな悩みが解決できます • 設計方針が納期優先、メンバ増加により泥団子に • どのパッケージにクラスを置いたらよいか迷う
19
20 @Test void ドメイン層のクラスは他の層のクラスに依存しない() { noClasses(). that().resideInAPackage(“com.example.domain..”) .should() .dependOnClassedThat().resideInAnyPackage( “com.example.infrastructure..”,
“com.example...”, “com.example.application..” ) .check(CLASSES); インフラストラクチャ層 UI層 アプリケーション層 ドメイン層
アーキテクチャテスト(ArchUnit) パッケージやクラスの設計方針のレビュー自動化 • 設計者の負担(ドキュメント作成/周知、レビュー指摘)の削減 • 開発メンバーはどのパッケージにクラスを置けいたらいいか迷 う時間がなくなる 21
詳しく知りたい方は... 22 https://speakerdeck.com/kawanamiyuu/jjug-ccc-2019-spring
3.3. E2Eテスト(Puppeteer)
E2Eテスト(Puppeteer) E2E テストとは • フロントエンド⇔バックエンドを結合したエンドツーエンドの動 作を、ブラウザ操作で確認するテスト Puppeteer を用いて、ハッピーパスのブラウザ操作を自動化して いる ※ハッピーパス・・・正常系の代表ケース
24
E2Eテスト(Puppeteer) ハッピーパスが動いていることに一定の安心感がある • 従業員登録 • 入社申請依頼 • etc... 25
3.4. 自動テストの恩恵
自動テストの恩恵 新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス
トが減らない 27
自動テストの恩恵 新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する 28
自動テストの恩恵 新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する → 既存機能のデグレを一早く検知し、メインブランチへのマー ジを防げる 29
自動テストの恩恵 新規プロダクトならではの悩み 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい 30
自動テストの恩恵 新規プロダクトならではの悩み 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい → 技術的にばらつきがある開発チームで、一定の強制力を もってアーキテクチャの設計品質を担保できる 31
自動テストの恩恵 新規プロダクトならではの悩み 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス トが減らない 32
自動テストの恩恵 新規プロダクトならではの悩み 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス トが減らない → E2E テストも活用することで、アプリケーションが壊れてい ないことに一定の安心感をもつことができる 33
自動テストの恩恵 リリーススプリントの結果を分析してみたところ、 • 回帰テストは ◦ バグは多く発見できているが、軽微なものがほとんど ◦ 時間効率が非常に低く、成果も小さい 新機能 既存機能
備考 リリーススプリント 工数(人日) バグ件数 工数(人日) バグ件数 単体テスト 5 11 回帰テスト 27 18 軽微なバグが多い ※リリーススプリント・・・リリース直前にテストやリリース準備を行う期間 34
自動テストの恩恵 これまで ◦ 約1ヶ月半もの期間、リリーススプリントを実施 ▪ 「自動テストで一定の品質担保できているのでは?」と いう気づき • 今後は ◦
リリーススプリントでのテストの実施方法を見直し、約1ヶ月 に短縮することにチャレンジ! 35
4. テストコードを書くことが 当たり前のチーム文化 36
テストコードを書くことが当たり前のチーム文化 プロジェクト立ち上げ時からテストコードを書くことを前提として始 めていたことが大きい • プロジェクトの開発ガイドラインとして定めている 37
テストコードを書くことが当たり前のチーム文化 根底のモチベーションは何? • 前身のチームから、ポジティブな印象が強かった 行動 結果 テストコードを書く 自動テストの結果から • デグレをいち早く検知
• デグレがないことを即座に確認可 • 単体・結合テストの前にバグを潰せる • アプリが壊れていないという安心感 38
おわりに 39
おわりに 新規プロダクトの「開発速度」と「品質」の両立を支える自動テスト についてお話しました。 自動テストがなければ、テストフェーズでのバグ発生、手戻り多発 でリリースまでのスピードが落ちていたかも.... 出来るところから、自動テストを書いていきませんか? 40