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

レガシーシステムに自動テストを導入する第一歩 / 2020-phpcon-tdd-in-legacy-product

takaram
December 12, 2020

レガシーシステムに自動テストを導入する第一歩 / 2020-phpcon-tdd-in-legacy-product

PHPカンファレンス2020で行ったLTのスライドです

takaram

December 12, 2020
Tweet

More Decks by takaram

Other Decks in Programming

Transcript

  1. レガシーシステムに自動テストを
    導入する第一歩
    PHP Conference Japan 2020

    View full-size slide

  2. 自己紹介
    ● 名前
    ○ 荒巻 拓哉
    ● 所属
    ○ 株式会社ラクス
    ○ メール配信サービス「配配メール」の開発
    ○ 新卒2年目

    View full-size slide

  3. 2007年サービス開始
    立派なレガシープロダクト

    View full-size slide

  4. 課題
    ● PHPUnitを約1年前から一部で導入開始
    しかし
    ● 導入はなかなか進まない
    ● 既存機能のテストを書く時間は取れない

    View full-size slide

  5. とある案件で
    テスト駆動開発&
    既存ロジックのリファクタリング
    してみた話

    View full-size slide

  6. 案件の内容
    「従来の機能をAPIでも実行できるようにしたい」
    API
    従来:画面操作で実行 APIで同じ操作を実行

    View full-size slide

  7. 対象の機能
    ● データの登録・更新機能
    ● 現状
    ○ テストコードなし
    ○ コントローラにロジックをべた書き
    ■ 600行超えの神メソッド……

    View full-size slide

  8. 実装戦略
    1. 画面のテストを作成
    2. オールグリーンになるのを確認
    3. コントローラのロジックを部品化
    4. APIのテストを作成
    5. 3.の部品でAPIを実装

    View full-size slide

  9. 実装戦略
    1. 画面のテストを作成
    2. オールグリーンになるのを確認
    3. コントローラのロジックを部品化
    4. APIのテストを作成
    5. 3.の部品でAPIを実装
    既存ロジックの
    リファクタリング
    テスト駆動で新機能の
    実装

    View full-size slide

  10. 実装戦略
    1. 画面のテストを作成
    2. オールグリーンになるのを確認
    3. コントローラのロジックを部品化
    4. APIのテストを作成
    5. 3.の部品でAPIを実装
    ● コントローラを呼び出す機能テスト
    ○ in: リクエストパラメータ
    ○ out: DBの更新結果

    View full-size slide

  11. 実装戦略
    1. 画面のテストを作成
    2. オールグリーンになるのを確認
    3. コントローラのロジックを部品化
    4. APIのテストを作成
    5. 3.の部品でAPIを実装
    テストが失敗しないか確認しながら

    View full-size slide

  12. 実装戦略
    1. 画面のテストを作成
    2. オールグリーンになるのを確認
    3. コントローラのロジックを部品化
    4. APIのテストを作成
    5. 3.の部品でAPIを実装
    ● 実際にリクエストを送信 (Guzzle)
    ● DBの更新結果を確認

    View full-size slide

  13. 実装戦略
    1. 画面のテストを作成
    2. オールグリーンになるのを確認
    3. コントローラのロジックを部品化
    4. APIのテストを作成
    5. 3.の部品でAPIを実装 ● テスト作成と並行
    ● 一通り実装したら即テスト実行

    View full-size slide

  14. こうして実装が完了
    めでたしめでたし……

    View full-size slide

  15. _人人人人人人人人人_
    > 突然の仕様変更 <
     ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

    View full-size slide

  16. 自動テストの効果
    ● 仕様変更に強い
    ○ 開発終盤で仕様変更が発生しても、テストがあるので
    安心してコードを修正できる

    View full-size slide

  17. その他の効果
    ● スイッチングコスト低減
    ○ 実装 → 手動テスト → 修正 はスイッチングコスト高
    ○ 実装後すぐにテスト結果がわかると楽
    ● チームの設計力強化
    ○ テストしやすさを考慮した設計が身につく

    View full-size slide

  18. まとめ
    ● レガシープロダクトでもTDDできる
    ● 効果
    ○ 仕様変更に強い
    ○ スイッチングコスト低減
    ○ 設計力の強化

    View full-size slide