Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

noriharu3
August 25, 2020

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

noriharu3

August 25, 2020
Tweet

More Decks by noriharu3

Other Decks in Programming

Transcript

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

    View Slide

  2. 自己紹介
    ● 福岡 憲治(ふくおか けんじ)
    ● 2018 年に中途でラクスへ入社
    ○ 楽楽精算の開発を経て、現在は楽楽労務の開発/運用
    ○ 定期的なバージョンアップのための仕組みやルール作りに
    奮闘中
    ○ テレワーク Now !
    2

    View Slide

  3. 新規プロダクトならではの悩み
    3

    View Slide

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

    View Slide

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

    View Slide

  6. 目次
    1. 楽楽労務のプロダクト概要
    2. 楽楽労務の技術スタック概要
    3. 開発速度と品質の両立を支える自動テスト
    3.1. ユニットテスト
    3.2. アーキテクチャテスト
    3.3. E2E テスト
    3.4. 自動テストの恩恵
    4. テストコードを書くことが当たり前のチーム文化
    6

    View Slide

  7. 1. 楽楽労務のプロダクト概要
    7

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. 3.1. ユニットテスト(JUnit)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. 20
    @Test
    void ドメイン層のクラスは他の層のクラスに依存しない() {
    noClasses(). that().resideInAPackage(“com.example.domain..”)
    .should()
    .dependOnClassedThat().resideInAnyPackage(
    “com.example.infrastructure..”,
    “com.example...”,
    “com.example.application..”
    )
    .check(CLASSES);
    インフラストラクチャ層
    UI層
    アプリケーション層
    ドメイン層

    View Slide

  21. アーキテクチャテスト(ArchUnit)
    パッケージやクラスの設計方針のレビュー自動化
    ● 設計者の負担(ドキュメント作成/周知、レビュー指摘)の削減
    ● 開発メンバーはどのパッケージにクラスを置けいたらいいか迷
    う時間がなくなる
    21

    View Slide

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

    View Slide

  23. 3.3. E2Eテスト(Puppeteer)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. 自動テストの恩恵
    リリーススプリントの結果を分析してみたところ、
    ● 回帰テストは
    ○ バグは多く発見できているが、軽微なものがほとんど
    ○ 時間効率が非常に低く、成果も小さい
    新機能 既存機能 備考
    リリーススプリント 工数(人日) バグ件数 工数(人日) バグ件数
    単体テスト 5 11
    回帰テスト 27 18 軽微なバグが多い
    ※リリーススプリント・・・リリース直前にテストやリリース準備を行う期間 34

    View Slide

  35. 自動テストの恩恵
    これまで
    ○ 約1ヶ月半もの期間、リリーススプリントを実施
    ■ 「自動テストで一定の品質担保できているのでは?」と
    いう気づき
    ● 今後は
    ○ リリーススプリントでのテストの実施方法を見直し、約1ヶ月
    に短縮することにチャレンジ!
    35

    View Slide

  36. 4. テストコードを書くことが
    当たり前のチーム文化
    36

    View Slide

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

    View Slide

  38. テストコードを書くことが当たり前のチーム文化
    根底のモチベーションは何?
    ● 前身のチームから、ポジティブな印象が強かった
    行動 結果
    テストコードを書く
    自動テストの結果から
    ● デグレをいち早く検知
    ● デグレがないことを即座に確認可
    ● 単体・結合テストの前にバグを潰せる
    ● アプリが壊れていないという安心感 38

    View Slide

  39. おわりに
    39

    View Slide

  40. おわりに
    新規プロダクトの「開発速度」と「品質」の両立を支える自動テスト
    についてお話しました。

    自動テストがなければ、テストフェーズでのバグ発生、手戻り多発
    でリリースまでのスピードが落ちていたかも....
    出来るところから、自動テストを書いていきませんか?
    40

    View Slide