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

テストピラミッドを意識したテストコード実装戦略

02
December 12, 2020

 テストピラミッドを意識したテストコード実装戦略

このスライドは、「PHP カンファレンス Japan 2020」で登壇した時に使用したスライドです。

02

December 12, 2020
Tweet

More Decks by 02

Other Decks in Programming

Transcript

  1. Who’s 02? 名前: 02 (大津和槻) Twitter: @cocoeyes02 職業: Webエンジニア(主にバックエンド) 経歴:

    PHPカンファレンス2019 登壇 「PHPerのためのテストコード入門」
  2. ユニットテスト 統合テスト テストピラミッドと は? Mike Cohn氏が ”Succeeding with Agile”で 最初に提唱した

    3つのテストのコストと実装 すべきテスト量を 示したも の UI テスト コ ス ト 大 小 実 装 す べ き テ ス ト 量 小 多
  3. ユニットテスト 統合テスト テストピラミッドと は? コスト • 実行時間 • テスト範囲 •

    修正工数 ◦ メンテナンス ◦ テスト失敗時の原 因特定 UI テスト コ ス ト 大 小 実 装 す べ き テ ス ト 量 小 多
  4. ユニットテスト 統合テスト テストピラミッドと は? 実装すべきテスト量 • テストのケース量 ◦ 正常系・異常系 ◦

    パターン テスト結果(成功/失敗)が わかるまでかかる時間 ≒実行時間×テストケース量 UI テスト 実 装 す べ き テ ス ト 量 小 多 コ ス ト 大 小
  5. Laravel Tutorial • 超シンプルなTODOリストサービス ◦ 新規登録 ◦ ログイン ◦ ログアウト

    ◦ パスワードリセット ◦ タスク追加 ◦ タスク削除 • Laravel 5.2 / PHP5.6 • 典型的なMVC
  6. ユニットテスト 統合テスト Laravel Tutorial 実装されているテストコードは featureテスト(統合テスト)のみ • TOP画面が開ける • 新規登録できる

    • タスク作成/削除ができる • 他人のタスクは見れない • 他人のタスクの削除はできない UI テスト
  7. 保険としてのUIテストを追加する • ユーザー目線からのテスト(UIを含めてのテスト)も書いて、さらに担保している感を 強めたい ◦ FWのバージョンアップは、どこにバグが現れるかわからない ◦ テストコードというのは、自分が書いたコードに自信を持つことも目的の 1つ •

    「全てUIテストで書く」ことはしない ◦ 一番ユーザー目線に近いテストなので安心度があるが、全部 UIで書くとテスト時間が長くなる ▪ 数十分、数時間かかるテストは運用するの辛い ▪ 統合テストよりは少なくする ユニットテスト 統合テスト UI テスト
  8. Laravel Tutorial バージョンアップの結果は…? • Laravel 5.2->5.3 ◦ 全層のテストコードでエラーを発見した • Laravel

    5.3->5.4 ◦ UIテストのテストコードだけエラーを発見した( viewのキャッシュをクリアするコマンド実行が必要 だった) ◦ あとはテストコードの修正をした • Laravel 5.4->5.5, PHP5.6->7.0 ◦ 全層のテストコードでエラーを発見した • Laravel 5.5->5.6, PHP7.0 -> PHP7.1 ◦ 全層のテストコードでエラーを発見した
  9. Laravel Tutorial バージョンアップの結果は…? • Laravel 5.2->5.3 ◦ 全層のテストコードでエラーを発見した • Laravel

    5.3->5.4 ◦ UIテストのテストコードだけエラーを発見した( viewのキャッシュをクリアするコマンド実行が必要 だった) ◦ あとはテストコードの修正をした • Laravel 5.4->5.5, PHP5.6->7.0 ◦ 全層のテストコードでエラーを発見した • Laravel 5.5->5.6, PHP7.0 -> PHP7.1 ◦ 全層のテストコードでエラーを発見した
  10. Laravel Tutorial バージョンアップの結果は…? • Laravel 5.2->5.3 ◦ 全層のテストコードでエラーを発見した • Laravel

    5.3->5.4 ◦ UIテストのテストコードだけエラーを発見した( viewのキャッシュをクリアするコマンド実行が必要 だった) ◦ あとはテストコードの修正をした • Laravel 5.4->5.5, PHP5.6->7.0 ◦ 全層のテストコードでエラーを発見した • Laravel 5.5->5.6, PHP7.0 -> PHP7.1 ◦ 全層のテストコードでエラーを発見した
  11. Laravel Tutorial バージョンアップの結果は…? • Laravel 5.2->5.3 ◦ 全層のテストコードでエラーを発見した • Laravel

    5.3->5.4 ◦ UIテストのテストコードだけエラーを発見した( viewのキャッシュをクリアするコマンド実行が必要 だった) ◦ あとはテストコードの修正をした • Laravel 5.4->5.5, PHP5.6->7.0 ◦ 全層のテストコードでエラーを発見した • Laravel 5.5->5.6, PHP7.0 -> PHP7.1 ◦ 全層のテストコードでエラーを発見した →いちいち画面を見ることなく、バージョンアップの作業にもくもくできた