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

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

Avatar for 02 02
December 12, 2020

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

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

Avatar for 02

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 ◦ 全層のテストコードでエラーを発見した →いちいち画面を見ることなく、バージョンアップの作業にもくもくできた