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
2
1.6k
新規プロダクトの開発速度と品質の両立を支える自動テスト/ Automation testing supports both development speed and quality of new product
noriharu3
August 25, 2020
Tweet
Share
More Decks by noriharu3
See All by noriharu3
中途社員がチームに参加しました
noriharu3
0
1.3k
Other Decks in Programming
See All in Programming
EventSourcingの理想と現実
wenas
6
2.3k
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
1.1k
Outline View in SwiftUI
1024jp
1
330
受け取る人から提供する人になるということ
little_rubyist
0
230
CSC509 Lecture 12
javiergs
PRO
0
160
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
2
670
RubyLSPのマルチバイト文字対応
notfounds
0
120
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
330
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
Macとオーディオ再生 2024/11/02
yusukeito
0
370
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
910
Featured
See All Featured
Code Review Best Practice
trishagee
64
17k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Navigating Team Friction
lara
183
14k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
GitHub's CSS Performance
jonrohan
1030
460k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
RailsConf 2023
tenderlove
29
900
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
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