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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
noriharu3
August 25, 2020
Programming
1.9k
2
Share
新規プロダクトの開発速度と品質の両立を支える自動テスト/ 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.5k
Other Decks in Programming
See All in Programming
Angular Signal Forms
debug_mode
0
110
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
970
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
550
AIエージェントで業務改善してみた
taku271
0
530
AWSコミュニティ活動は顧客のクラウド推進に効くのか / Do AWS community activities help customers adopt the cloud?
seike460
PRO
0
140
🦞OpenClaw works with AWS
licux
1
110
Going Multiplatform with Your Android App (Android Makers 2026)
zsmb
2
440
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
190
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
3
320
Running Swift without an OS
kishikawakatsumi
0
840
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
430
Offline should be the norm: building local-first apps with CRDTs & Kotlin Multiplatform
renaudmathieu
0
220
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Designing Powerful Visuals for Engaging Learning
tmiket
1
350
Docker and Python
trallard
47
3.8k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
310
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
570
Done Done
chrislema
186
16k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
BBQ
matthewcrist
89
10k
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