新規プロダクトの開発速度と品質の両立を支える自動テスト/ Automation testing supports both development speed and quality of new product

F624c3320c636e5ee4b95d02e2aaaa23?s=47 noriharu3
August 25, 2020

新規プロダクトの開発速度と品質の両立を支える自動テスト/ Automation testing supports both development speed and quality of new product

F624c3320c636e5ee4b95d02e2aaaa23?s=128

noriharu3

August 25, 2020
Tweet

Transcript

  1. 新規プロダクトの 開発速度と品質の両立を 支える自動テスト SaaS 新規プロダクトの技術 #RAKUSMeetup 福岡憲治

  2. 自己紹介 • 福岡 憲治(ふくおか けんじ) • 2018 年に中途でラクスへ入社 ◦ 楽楽精算の開発を経て、現在は楽楽労務の開発/運用

    ◦ 定期的なバージョンアップのための仕組みやルール作りに 奮闘中 ◦ テレワーク Now ! 2
  3. 新規プロダクトならではの悩み 3

  4. 新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス トが減らない

    4
  5. 本日お話しすること 新規プロダクトに、スピード感のある開発はとても重要 品質を保ちつつ、開発速度を両立するために自動テストは不可欠 です • 自動テストって何をしているの? • どういうとき嬉しいの? 5

  6. 目次 1. 楽楽労務のプロダクト概要 2. 楽楽労務の技術スタック概要 3. 開発速度と品質の両立を支える自動テスト 3.1. ユニットテスト 3.2.

    アーキテクチャテスト 3.3. E2E テスト 3.4. 自動テストの恩恵 4. テストコードを書くことが当たり前のチーム文化 6
  7. 1. 楽楽労務のプロダクト概要 7

  8. 楽楽労務のプロダクト概要 人事労務業にかかわる人のストレスをゼロに。 8 https://www.rakurakuroumu.jp/

  9. 2. 楽楽労務の技術スタック概要 9

  10. 楽楽労務の技術スタック概要 10 Frontend Backend Vue.js Vuetify.js Spring Boot Batch

  11. 楽楽労務の技術スタック概要 11

  12. 3. 開発速度と品質の両立を支える 自動テスト 12

  13. 開発速度と品質の両立を支える自動テスト • ユニットテスト ◦ JUnit, Jest • アーキテクチャテスト ◦ ArchUnit

    • E2Eテスト ◦ Puppeteer 13
  14. 3.1. ユニットテスト(JUnit)

  15. ユニットテスト(JUnit) JUnit を用いて、Java プログラムのメソッドレベルの入出力が期 待どおりの動作をしているかを確認する • テストカバレッジが約90% 15

  16. ユニットテスト(JUnit) マージリクエスト時に、レビューイ・レビューア共に • 既存機能にデグレがないことに一定の安心感がある • 既存機能にデグレがないか確認の時間を削減できる ※マージリクエスト・・・GitHubでいうとプルリクエストのこと 16

  17. ユニットテスト(JUnit) 依存ライブラリを更新する際に、アプリケーションが壊れていない ことに一定の安心感がある • 特に、JDK と Spring Boot 17

  18. 3.2. アーキテクチャテスト(ArchUnit)

  19. アーキテクチャテスト(ArchUnit) ArchUnit を用いて、Java アプリケーションのパッケージやクラス が設計方針(依存関係)に沿っているかを確認する こんな悩みが解決できます • 設計方針が納期優先、メンバ増加により泥団子に • どのパッケージにクラスを置いたらよいか迷う

    19
  20. 20 @Test void ドメイン層のクラスは他の層のクラスに依存しない() { noClasses(). that().resideInAPackage(“com.example.domain..”) .should() .dependOnClassedThat().resideInAnyPackage( “com.example.infrastructure..”,

    “com.example...”, “com.example.application..” ) .check(CLASSES); インフラストラクチャ層 UI層 アプリケーション層 ドメイン層
  21. アーキテクチャテスト(ArchUnit) パッケージやクラスの設計方針のレビュー自動化 • 設計者の負担(ドキュメント作成/周知、レビュー指摘)の削減 • 開発メンバーはどのパッケージにクラスを置けいたらいいか迷 う時間がなくなる 21

  22. 詳しく知りたい方は... 22 https://speakerdeck.com/kawanamiyuu/jjug-ccc-2019-spring

  23. 3.3. E2Eテスト(Puppeteer)

  24. E2Eテスト(Puppeteer) E2E テストとは • フロントエンド⇔バックエンドを結合したエンドツーエンドの動 作を、ブラウザ操作で確認するテスト Puppeteer を用いて、ハッピーパスのブラウザ操作を自動化して いる ※ハッピーパス・・・正常系の代表ケース

    24
  25. E2Eテスト(Puppeteer) ハッピーパスが動いていることに一定の安心感がある • 従業員登録 • 入社申請依頼 • etc... 25

  26. 3.4. 自動テストの恩恵

  27. 自動テストの恩恵 新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス

    トが減らない 27
  28. 自動テストの恩恵 新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する 28

  29. 自動テストの恩恵 新規プロダクトならではの悩み 1. ドメインに対する理解が不十分・アジャイルに機能開発をして いくので作り直しが発生する → 既存機能のデグレを一早く検知し、メインブランチへのマー ジを防げる 29

  30. 自動テストの恩恵 新規プロダクトならではの悩み 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい 30

  31. 自動テストの恩恵 新規プロダクトならではの悩み 2. チーム増員の際、新メンバーにも設計指針を浸透させるのが 難しい → 技術的にばらつきがある開発チームで、一定の強制力を もってアーキテクチャの設計品質を担保できる 31

  32. 自動テストの恩恵 新規プロダクトならではの悩み 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス トが減らない 32

  33. 自動テストの恩恵 新規プロダクトならではの悩み 3. ユニットテストだけでは結合レベルの品質が不安で、手動テス トが減らない → E2E テストも活用することで、アプリケーションが壊れてい ないことに一定の安心感をもつことができる 33

  34. 自動テストの恩恵 リリーススプリントの結果を分析してみたところ、 • 回帰テストは ◦ バグは多く発見できているが、軽微なものがほとんど ◦ 時間効率が非常に低く、成果も小さい 新機能 既存機能

    備考 リリーススプリント 工数(人日) バグ件数 工数(人日) バグ件数 単体テスト 5 11 回帰テスト 27 18 軽微なバグが多い ※リリーススプリント・・・リリース直前にテストやリリース準備を行う期間 34
  35. 自動テストの恩恵 これまで ◦ 約1ヶ月半もの期間、リリーススプリントを実施 ▪ 「自動テストで一定の品質担保できているのでは?」と いう気づき • 今後は ◦

    リリーススプリントでのテストの実施方法を見直し、約1ヶ月 に短縮することにチャレンジ! 35
  36. 4. テストコードを書くことが 当たり前のチーム文化 36

  37. テストコードを書くことが当たり前のチーム文化 プロジェクト立ち上げ時からテストコードを書くことを前提として始 めていたことが大きい • プロジェクトの開発ガイドラインとして定めている 37

  38. テストコードを書くことが当たり前のチーム文化 根底のモチベーションは何? • 前身のチームから、ポジティブな印象が強かった 行動 結果 テストコードを書く 自動テストの結果から • デグレをいち早く検知

    • デグレがないことを即座に確認可 • 単体・結合テストの前にバグを潰せる • アプリが壊れていないという安心感 38
  39. おわりに 39

  40. おわりに 新規プロダクトの「開発速度」と「品質」の両立を支える自動テスト についてお話しました。
 自動テストがなければ、テストフェーズでのバグ発生、手戻り多発 でリリースまでのスピードが落ちていたかも.... 出来るところから、自動テストを書いていきませんか? 40