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

ユニットテスト環境整備 ~みんながテストを書ける環境へ~

pagos
October 09, 2023

ユニットテスト環境整備 ~みんながテストを書ける環境へ~

pagos

October 09, 2023
Tweet

More Decks by pagos

Other Decks in Technology

Transcript

  1. プロダクトについて • PHP + PostgreSQL ◦ PHP:8.2 • 販売管理システム •

    サービス開始から15年(2008~) 3 8.0のEOLは11/23! https://www.php.net/supported-versions.php
  2. 環境整備前の状態 • ライブラリはある ◦ Codeceptionを2018年に導⼊ ▪ 結合テスト‧E2Eテストもカバー ▪ DBに依存したテストが書きやすい(専⽤のassertが⽤意されている等) •

    テストコードが⼀部存在 ◦ 有識者がコア機能の開発を⾏った際に⾃発的に作成する程度 ◦ 残りはライブラリ導⼊時付近で導⼊者が既存機能のテストを書いたもの • 毎朝1回開発メインブランチに対して定期実⾏される(cron) 9
  3. ライブラリ移⾏(codeception → PHPUnit) • 既存テストコードの⾒直し • 汎⽤サポートクラスの作成 ◦ DB接続 ◦

    データファイル読込 • 資料作成と周知 ◦ 周知をどんどんしてチームを巻き込むのが⼤切 23 今後のために
  4. CI運⽤ • 全体カバレッジ ◦ テストコードの積み重ねが⽬に⾒える ◦ 共有することでモチベーションの向上も • Diffにカバレッジ表⽰ ◦

    ⾏単位でのケース漏れがわかる ◦ 視覚的にテストを書いた実感が出る 28 2種類のカバレッジ取得
  5. CI運⽤ • Diffにカバレッジ表⽰ ◦ phpunit {ディレクトリ名} ‒coverage-cobertura={ファイル名} ◦ 差分を対象に実⾏ ◦

    全体に実⾏するより時間が短い ※ cobertura   フリーのJavaコードカバレッジレポートツール   PHP Unitでは9.4から直接cobertura形式でレポートを出⼒できるようになった   https://github.com/sebastianbergmann/php-code-coverage/pull/812 31 カバレッジ
  6. 32

  7. 良かったこと • リリース前に不具合を検知した💡 ◦ デグレ検知 ◦ 例:PHP8.1バージョンアップの静的変数挙動変更 • ⼿動テストが⼀部軽減 ◦

    パターン網羅系のテストを⼀部だが任せられるように ◦ ⼿動テストと違い再実⾏が簡単にできる 41 テストが効果を発揮
  8. 悪かったこと • ライブラリ移⾏に予想以上の⼯数がかかった ◦ 4〜5⼈⽇ • CIの実⾏が遅い ◦ 現時点で約5分 ◦

    理由はDB関連と⼀部javaをキックするテストがある点等々 ◦ カバレッジの取得も遅い • テストの質 ◦ まずテストを書くことに重点を置いたので、改善の余地あり 44
  9. まとめ • ライブラリ移⾏ ◦ 技術的な側⾯からテストコードが書きやすく、実⾏しやすく • CI活⽤ ◦ テストのフィードバックに即時性を ◦

    カバレッジの表⽰で積み重ねを⽬に⾒えるように • 記述⽅針整備 ◦ ⼈為的な側⾯からテストコードを書きやすく 48 様々な負債解消の第⼀歩に
  10. 最後に • ⼀歩⽬のハードルは可能な限り下げる ◦ テストを書く際の悩みをできるだけ減らす ◦ 書くことが負担にならないようにする • 開発フローに混ぜ込む ◦

    テストを書くのが当然という状態に仕組みから持っていくのが理想 ⇒ ライブラリの移⾏‧記述⽅針の整備で実現 50 テストを書きながら開発する環境は作れる
  11. 本当に最後に • 1⼈ではできないことも⼒を借りればできる ◦ 常に助けていただきながら実施しました ◦ メンバーも声をかければ助けてくれます(きっと) • 諦めない ◦

    15年経ったプロダクトにもユニットテストの⽂化は⼊れられます • 改善しよう ◦ あなたが⾟いと感じる開発環境はみんな⾟いと感じているはずです ◦ 環境を整える体験はきっといい経験になるはずです 52 ⾃分たちが開発する環境を⾃分たちで綺麗に