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

脱レガシープロダクトに向けて開発環境にCIを整備し単体テストを布教した話/developers boost2021

WHIsaiyo
December 13, 2021

脱レガシープロダクトに向けて開発環境にCIを整備し単体テストを布教した話/developers boost2021

「単体テストのないコードはレガシーコードだ」(レガシーコード改善ガイドより)新卒で配属された製品開発はザ・レガシーコードでした。
巨大で密結合なコードベース、結合テストに頼った開発フロー、一部の人しか書けない単体テスト。
そんな開発環境の改善に粘り強く2年間取り組んだ結果、ついにすべての開発者が単体テストを常に書くようになり、開発が楽しくなるまでの物語です。

Presenter:寺尾 拓[Works Human Intelligence]
DX Engineer
19年に新卒入社後 [1年間自社開発製品の開発環境の改善]に取り組む
20年には製品マニュアルWeb化プロジェクトの基盤設計と実装を担当
21年は6ヶ月間の育休を取得後、社内全体のDX(Developer Experience/Digital Transformation)の改善を行うチームの立ち上げに参画。

WHIsaiyo

December 13, 2021
Tweet

More Decks by WHIsaiyo

Other Decks in Business

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    脱レガシー
    8

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. © 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide