レガシーシステムに自動テストを導入する第一歩 / 2020-phpcon-tdd-in-legacy-product
by
takaram
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
レガシーシステムに自動テストを 導入する第一歩 PHP Conference Japan 2020
Slide 2
Slide 2 text
自己紹介 ● 名前 ○ 荒巻 拓哉 ● 所属 ○ 株式会社ラクス ○ メール配信サービス「配配メール」の開発 ○ 新卒2年目
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
2007年サービス開始 立派なレガシープロダクト
Slide 5
Slide 5 text
課題 ● PHPUnitを約1年前から一部で導入開始 しかし ● 導入はなかなか進まない ● 既存機能のテストを書く時間は取れない
Slide 6
Slide 6 text
とある案件で テスト駆動開発& 既存ロジックのリファクタリング してみた話
Slide 7
Slide 7 text
案件の内容 「従来の機能をAPIでも実行できるようにしたい」 API 従来:画面操作で実行 APIで同じ操作を実行
Slide 8
Slide 8 text
対象の機能 ● データの登録・更新機能 ● 現状 ○ テストコードなし ○ コントローラにロジックをべた書き ■ 600行超えの神メソッド……
Slide 9
Slide 9 text
実装戦略 1. 画面のテストを作成 2. オールグリーンになるのを確認 3. コントローラのロジックを部品化 4. APIのテストを作成 5. 3.の部品でAPIを実装
Slide 10
Slide 10 text
実装戦略 1. 画面のテストを作成 2. オールグリーンになるのを確認 3. コントローラのロジックを部品化 4. APIのテストを作成 5. 3.の部品でAPIを実装 既存ロジックの リファクタリング テスト駆動で新機能の 実装
Slide 11
Slide 11 text
実装戦略 1. 画面のテストを作成 2. オールグリーンになるのを確認 3. コントローラのロジックを部品化 4. APIのテストを作成 5. 3.の部品でAPIを実装 ● コントローラを呼び出す機能テスト ○ in: リクエストパラメータ ○ out: DBの更新結果
Slide 12
Slide 12 text
実装戦略 1. 画面のテストを作成 2. オールグリーンになるのを確認 3. コントローラのロジックを部品化 4. APIのテストを作成 5. 3.の部品でAPIを実装 テストが失敗しないか確認しながら
Slide 13
Slide 13 text
実装戦略 1. 画面のテストを作成 2. オールグリーンになるのを確認 3. コントローラのロジックを部品化 4. APIのテストを作成 5. 3.の部品でAPIを実装 ● 実際にリクエストを送信 (Guzzle) ● DBの更新結果を確認
Slide 14
Slide 14 text
実装戦略 1. 画面のテストを作成 2. オールグリーンになるのを確認 3. コントローラのロジックを部品化 4. APIのテストを作成 5. 3.の部品でAPIを実装 ● テスト作成と並行 ● 一通り実装したら即テスト実行
Slide 15
Slide 15 text
こうして実装が完了 めでたしめでたし……
Slide 16
Slide 16 text
_人人人人人人人人人_ > 突然の仕様変更 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
Slide 17
Slide 17 text
自動テストの効果 ● 仕様変更に強い ○ 開発終盤で仕様変更が発生しても、テストがあるので 安心してコードを修正できる
Slide 18
Slide 18 text
その他の効果 ● スイッチングコスト低減 ○ 実装 → 手動テスト → 修正 はスイッチングコスト高 ○ 実装後すぐにテスト結果がわかると楽 ● チームの設計力強化 ○ テストしやすさを考慮した設計が身につく
Slide 19
Slide 19 text
まとめ ● レガシープロダクトでもTDDできる ● 効果 ○ 仕様変更に強い ○ スイッチングコスト低減 ○ 設計力の強化