Slide 1

Slide 1 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシープロダクトに向けて 開発環境にCIを整備し 単体テストを布教した話 株式会社Works Human Intelligence 寺尾 拓

Slide 2

Slide 2 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential ● DX Engineerをやっています。 ● 2019/04に新卒入社 ● プロダクト開発部署に配属後1年間、 開発環境の改善に取り組む ● 2020/12より半年間の育休を取得 ● 復帰後、開発部門全体のDX改善チーム 立ち上げに参画 ○ Developer Experience ○ Digital Transformation 自己紹介 2

Slide 3

Slide 3 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発って? 3

Slide 4

Slide 4 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模ソフトウェア開発って? 4 チームA チームB チームC オフショアA 大規模 ソースコード ● 20年間保守 ● 数百万行規模 ● 計40-50人(+オフショア) ● 全チームが協調して共通のソ ースを編集 ● 5-10 (人) x 6 (チーム) ● 一部オフショアあり

Slide 5

Slide 5 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発のつらいところ 5

Slide 6

Slide 6 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発のつらいところ 6 ● ソースコードが大規模かつ依存関係が複雑 ○ 「機能追加したけどどこから手をつければいいんだっけ?」 ○ 「このAPI変更したら他チームも使用しているので修正依頼してね」 ● ビルドやサーバ起動等に時間がかかる ○ 「ビルド走らせている間にコーヒーでも淹れるか・・・」 ○ 「サーバ再起動している間に(ry」 ● テスト自動化が難しく手動テストに頼らざるを得ない ○ 「リファクタリングしたい?テスト工数が確保できないから無理」

Slide 7

Slide 7 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模レガシープロダクト開発はつらい 7

Slide 8

Slide 8 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発を「たのしく」したい ≒ 脱レガシー 8

Slide 9

Slide 9 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential どうしたら楽しくなるか? 9

Slide 10

Slide 10 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential モノリス分割 10

Slide 11

Slide 11 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 理想の大規模ソフトウェア開発 11 チームA チームB チームC ・・・・ オフショアA モジュールA モジュールB モジュールC ● 独立した各チーム開発 ● 明確な責任範囲 ● シンプルな依存関係 ● 小規模なモジュール ● 高速なビルド

Slide 12

Slide 12 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential どうやってモノリス分割するのか? 12

Slide 13

Slide 13 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential リファクタリング システムの振る舞いを変えずに内部構造を変える 13

Slide 14

Slide 14 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential だがしかし 14

Slide 15

Slide 15 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシープロダクトのリファクタリングは困難 15

Slide 16

Slide 16 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシープロダクトのリファクタリングは困難 16 正しい振る舞 いって何? テスト工数が 確保できない 影響範囲が大 きすぎる チーム間で 合意しないと いけない 何か起こったら どうするの!

Slide 17

Slide 17 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential リファクタリングのための第一歩 17

Slide 18

Slide 18 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential リファクタリングのための第一歩 プロダクトコードに単体テストを整備する 18

Slide 19

Slide 19 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシープロダクトに向けて 開発環境にCIを整備し 単体テストを布教した話 株式会社Works Human Intelligence 寺尾 拓

Slide 20

Slide 20 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 配属当初(2年前)の開発環境 20

Slide 21

Slide 21 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 改善前のプロダクト開発 21 問題が山積し、どこから手をつけたらわからない状態 セットアップ に2日かかる IDEの設定 がバラバラ Warningが 多すぎて エラータブ が埋もれる 単体テスト コンパイル 通らない 自動チェックが なく ビルドが不安定

Slide 22

Slide 22 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential まずは、モダンで快適な開発環境を整備しよう 22

Slide 23

Slide 23 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential モダンな開発環境とは 1.モダンで快適な開発環境の整備 23 ● 開発者全員が共通の設定のIDEを利用 ● IDEのファイルを編集のたびにフォーマッタやLinterを実行 ● コードレビュー時に各種チェック(CI)を実行 ○ ビルド ○ フォーマッタ ○ Linter ○ 単体テスト

Slide 24

Slide 24 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 快適な開発環境とは(Developer Experience) 1.モダンで快適な開発環境の整備 24 ● IDEのセットアップを自動化されている ● 自動チェックがすぐに終わる ○ プレマージCIの実行時間は平均5分以内を目標に ○ 時間のかかるチェックはStaging branchで定期実行 ● 自動チェックの誤検知が少ない ○ 静的解析等の既存のエラーは抑制 ○ 誤検知率をモニタリングし対策する ● 自動チェックが失敗した時に原因がすぐにわかる ○ ビルドログから原因を抽出しコメントで指摘

Slide 25

Slide 25 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 1年かけてモダンで快適な開発環境が整備できた! 1.モダンで快適な開発環境の整備 25 https://qiita.com/autotaker1984/items/894bf0df0009c621da11

Slide 26

Slide 26 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential このまま脱レガシーできるだろうか? 26

Slide 27

Slide 27 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential できない 27

Slide 28

Slide 28 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 単体テストはなかなか増えなかった 28

Slide 29

Slide 29 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dashboard なぜテストが増えないのか? 29 ● JUnitの実行結果をデータベースに入 力してMetabaseで可視化 ● 「最近追加されたテスト」 ○ 最近テストが追加されたパッケー ジを表示 ○ どの部署がテストを書いているか 概ね把握できるように ● 結果 ○ テストを書いていたのは一部の部 署のみ

Slide 30

Slide 30 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大部分の開発者は単体テストを書かなかった書けなかった なぜテストが増えないのか? 30 単体テスト書いてもE2Eテストも するから二度手間では? 単体テストってどういう観点で作 ればいいの? DBがないと動かないコードが多 すぎるんだけど!

Slide 31

Slide 31 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 単体テストに対するチームの状態 なぜテストが増えないのか? 31 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない 「単体テスト環境整備されたらしいけど、どう書いたらいいか分からない。」 「習得する時間もないから今回は手動テストでいいかな」

Slide 32

Slide 32 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential いきなりレガシーコードに単体テストを書くのはハードルが高い まずは、今後追加される新規コードにテストを書いてもらおう 32

Slide 33

Slide 33 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojo 2. 新規コードに単体テストを書く 33 ● オンラインハンズオン形式の研修コンテンツ ● 一回30-60分、10-20名ごとに実施(合計40名) https://note.com/works_hi/n/n4edd6784b632

Slide 34

Slide 34 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojoマインド編 2. 新規コードに単体テストを書く 34 ● t_wadaさんの「TDD Boot Camp 2020 Online #1 基調講演/ライブコーディング」 の鑑賞会 ● 目的 ○ 単体テストの書き方やメリットを知る ○ 単体テストを書いていこうという意識づけ https://www.youtube.com/watch?v=Q-FJ3XmFlT8

Slide 35

Slide 35 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojo基礎編 2. 新規コードに単体テストを書く 35 ● 単体テストの基本的な書き方をハンズオン形式で習得 ○ 単体テストとは ○ テストのライフサイクル ○ アサーションの書き方 ○ テストダブルについて ● 目的 ○ 単体テストのコーディングスタイルを揃える ○ 新規コードに対して単体テストが書けるように

Slide 36

Slide 36 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 基礎編・マインド編後 2. 新規コードに単体テストを書く 36 「単体テスト便利だな」 「今度のチケットで単体テストを書いてみようかな」 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない

Slide 37

Slide 37 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential このまま脱レガシーできるだろうか? 37

Slide 38

Slide 38 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential できない 38

Slide 39

Slide 39 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシーコードに対して単体テストがかけない 39

Slide 40

Slide 40 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシーコードのジレンマ 40 “リファクタリングを実施するためにはテストが必要だが、 テストを書くためにはリファクタリングが必要” レガシーコード改善ガイドより

Slide 41

Slide 41 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシーコードのジレンマを克服する方法論を確立し、 開発者に伝えよう 41

Slide 42

Slide 42 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojo実践編 3. レガシーコードに単体テストを書く 42 ● 目的 ○ レガシーコードに単体テストを書くための実践的なスキルの習得 ○ 各チームのJUnitエバンジェリスト養成 dojo講師 エバンジェリスト チームメンバー JUnit dojo チームA

Slide 43

Slide 43 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojo実践編 3. レガシーコードに単体テストを書く 43 ● 内容 1. 実プロダクトでテストを書くライブコーディング 2. 実プロダクトを模した研修用レガシーコードで 単体テストを書くテクニックを実践 i. リファクタリングツールを使い依存関係を整理 ii. 仕様化テストを書いてカバレッジを担保 iii. 単体テストで保護された部分をリファクタリング https://github.com/autotaker/LegacyEx

Slide 44

Slide 44 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 実践編後 3. レガシーコードに単体テストを書く 44 「レガシーコードにも単体テストが書ける(らしい)!」 「今度のチケットで実践してみよう」 「困ったら〇〇さんに聞いてみよう」 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない

Slide 45

Slide 45 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential これで脱レガシーできるだろうか? 45

Slide 46

Slide 46 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 開発組織に変化が起こった! 46

Slide 47

Slide 47 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojoの後に起こった開発組織の変化 脱レガシーに向けて 47 ● dojo参加者が講師役となってJUnit dojo再放送が行われた ● 単体テストの勉強会が各チームで開催されるようになった ● 単体テストを書きやすくするために共通モックが整備された ● 他プロダクトまで噂が広がり、単体テストの環境が各プロダクトに整備された ● 実務で単体テストを書いていく定期的な活動(JUnit部)が発足

Slide 48

Slide 48 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojoの後に起こった開発組織の変化 脱レガシーに向けて 48

Slide 49

Slide 49 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojoの後に起こった開発組織の変化 脱レガシーに向けて 49

Slide 50

Slide 50 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit dojoの後に起こった開発組織の変化 脱レガシーに向けて 50

Slide 51

Slide 51 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 単体テストを常に書くようになった 脱レガシーに向けて 51 JUnit dojo実施 JUnit部発足

Slide 52

Slide 52 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 研修1年後 脱レガシーに向けて 52 「マージリクエスト作りました。単体テストのカバレッジ通っています」 「単体テスト書いたし、このロジックリファクタリングしよう」 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない

Slide 53

Slide 53 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシーできそう!(時間はかかるけれど) 53

Slide 54

Slide 54 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシーのために単体テストを書く文化を醸成 3つのポイント 1.モダンで快適な開発環境を整備する ○ テストをかくハードルを下げる 2.開発者のテストスキルを高める ○ 足りていないのは工数ではなく技術 3.単体テストを実際に書いてみる ○ テストのある世界を体感することで意識が変化する ○ 各チームのエバンジェリストを通じて徐々に広がる まとめ 54

Slide 55

Slide 55 text

© 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシーを達成し、変化に強い製品開発体制を整えるために まだまだハードルはたくさんありますが、 必ず、脱レガシーを達成し、 その成果を今度はデブサミで発表します 私たちの戦いはこれからだ! 55