Slide 1

Slide 1 text

テスト自動化ことはじめ 末村 拓也 @ Autify, Inc. 2024-9-11 Forkwell Library #65

Slide 2

Slide 2 text

自己紹介 末村 拓也 X: @tsueeemura Quality Evangelist at Autify, Inc. 開発からマーケティングまで全部やる方のフルスタ ックエンジニア テトリスとメカニカルキーボードが好き

Slide 3

Slide 3 text

ちょっとおしらせ 9/18(水 ) Developers Summit 2024 Kansai に行きます 一瞬だけ喋るのと、サイン会があります 気軽に声かけてください

Slide 4

Slide 4 text

テスト自動化実践ガイド 2024/7/31発売 三部構成で、テスト自動化を 始める前から運用まで広くカバー 第 1部 自動テストに取り組む前に 第 2部 アプリケーションに E2Eテ ストを導入する 第 3部 自動テストを改善するテク ニック 今なら翔泳社 SE Shop で 紙書籍 50%ポイント還元!

Slide 5

Slide 5 text

第 1部 自動テストに取り組む前に 第 1章 テストの目的 第 2章 開発を支える自動テスト 第 3章 見つけたいバグを明確にする 第 4章 E2Eテストとは何か

Slide 6

Slide 6 text

第 2部 アプリケーションに E2Eテ ストを導入する 第 5章 サンプルアプリケーションのセッ トアップ 第 6章 最小限のテストをデプロイする 第 7章 ビジネスプロセスをカバーするテ ストを作成する 第 8章 ユーザーストーリーをカバーする テストを作成する 第 9章 テストコードに意図を込める

Slide 7

Slide 7 text

第 3部 自動テストを改善するテク ニック 第 10章 トラブルシューティング 第 11章 もっと幅広く E2Eテストを使う 第 12章 成果を振り返る

Slide 8

Slide 8 text

こだわりポイント 自動テストを始める前のところにボリュ ームを割きました 手動テストをただ自動化するだけで は不十分です やり方だけでなく、考え方を身につ けるのが大事です レガシーなアプリケーションにも適用で きるように なるべく汎用的な書き方にしました わざわざサンプルでレガシーコード を書いています ちゃんとテストしてないから、多分 すごいバグがあると思う ……

Slide 9

Slide 9 text

今日話すこと 書籍第一部〜第二部からかいつまんで話します テストとは何か どのテストを自動化したいのか 自動リグレッションテストの重要性 手動テストと自動テストのギャップ E2Eテストとは何か

Slide 10

Slide 10 text

テストとは何か

Slide 11

Slide 11 text

テストとは いろんなテストがあるよね プログラマーにとっては単体テスト(ホワイトボックステスト) テスターにとってはブラックボックステスト ビジネスサイドにとっては監視 マーケターにとっては A/Bテスト etc

Slide 12

Slide 12 text

アジャイルテスト の四象限 様々な観点から テスト =評価を 分類した図

Slide 13

Slide 13 text

どのテストを自動化したいのか

Slide 14

Slide 14 text

自動化したいテスト (1) 仕様通りに動作することをのチェック 単体テスト コンポーネントテスト 受け入れテスト

Slide 15

Slide 15 text

自動化したいテスト (2) ルールやアルゴリズムに基づいたチェック プロパティベースドテスト メタモルフィックテスト ビジュアルリグレッションテスト アクセシビリティテストの一部

Slide 16

Slide 16 text

手動でやりたいテスト ユーザビリティテスト 探索的テスト プロトタイプシミュレーション

Slide 17

Slide 17 text

何を自動化したいのかを見極める リリース前の単体・コンポーネントレベルの機能テストを自動化したい パフォーマンスの問題をユーザーより早く見つけたい ブラウザごとの画面表示の違いを効率よく検出したい etc

Slide 18

Slide 18 text

自動リグレッションテストの重要性

Slide 19

Slide 19 text

開発は続くよ、どこまでも 一度テストすれば終わりというわけではない バージョンが上がるたびにテストは必要になる 影響範囲が定められれば良いが、大抵の場合影響範囲を完全に特定するのは困難 例)フレームワークのアップデートは影響範囲が極めて大きいものの例

Slide 20

Slide 20 text

開発とテストの労力の不均衡

Slide 21

Slide 21 text

リソースとのせめぎあい 手動でテストしていると、どうしても範囲や頻度を狭めなくてはならないシーンが出てくる 毎日テストするのは無理だから、毎週、毎月、四半期ごとのテスト 全てのパスをテストするのは無理だから、ハッピーパスだけのテスト すると、自信をもって変更が出来なくなる ソフトウェアの 変更容易性 が低くなる

Slide 22

Slide 22 text

自動テストは変更容易性を保つためにある 自動テストの直接的な効能のうち、最も大きなものは 自信を持ってリリースするのに必要な量のテストを 現実的な作業量に抑えること

Slide 23

Slide 23 text

手動テストと自動テストのギャップ

Slide 24

Slide 24 text

手動テストは柔軟で発見的 手動テストは要件やテスト対象の変化に対して柔軟 手動テストは発見的な動きを取れる 「テストケースに書いてなくても、何かおかしいことあったら教えて!」

Slide 25

Slide 25 text

自動テストは厳密で保証的 自動テストは決められた要件やテスト対象の振る舞いを厳密に確認する 自動テストは保証的に動く

Slide 26

Slide 26 text

実行サイクルの違い

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

手動テストと自動テストの違い

Slide 31

Slide 31 text

レベル 1: 手動テストの自動化 手動でやっていたものをそのまま自動化する 手動でやっていたときほどバグが見つからなくなる 結果が非決定的で、動作が不安定 副作用が多い 遅い

Slide 32

Slide 32 text

レベル 2: 目的を絞った自動テスト テスト対象の機能や目的を絞ってテストする 結果が決定的で安定している 副作用が少ない /まったくない 早い

Slide 33

Slide 33 text

レベル 1とレベル 2は行ったり来たりする 自動テストの実装だけでなく、アプリケーション側のテスタビリティに依存する部分も ある データの準備やクリーンアップ 状態の再現 最初にレベル 1のテストを書いて、それを元にリファクタリングして、レベル 2のテスト を増やしていく

Slide 34

Slide 34 text

E2Eテストとは何か

Slide 35

Slide 35 text

E2Eテストの特徴 ユーザーインターフェースを操作点・観測点として用いる ユーザーストーリーやユースケースなど、ユーザーが価値を達成する手順をテストベー スとする 完全、または大部分が統合されたシステムをテスト対象として用いる ユーザーストーリーの失敗など、ユーザーにとっての価値未達成の発見を主な目的とす

Slide 36

Slide 36 text

E2Eテストの良い点 幅広い用途に利用できる ブラウザやデバイスの 互換性テスト 仕様化テスト 生きたドキュメント 監視

Slide 37

Slide 37 text

E2Eテストの良い点 ユーザーにとっての価値をそのままテストできる 様々なレベルのテストベースを扱える 会員登録などの 機能 会員登録〜商品購入までの ビジネスプロセス

Slide 38

Slide 38 text

E2Eテストの辛い点 (1) 難易度 自動化そのものの難易度が高め テストツールが複雑 ブラウザ ブラウザ自動操作 複雑なシステムには当然バグがある テスト対象のバグと、テストツールのバグを両方扱わないといけない 自動テスト実行中だけ Maximum call stack exceeded エラーが連発する、みた いな経験は大体の自動化エンジニアが経験している 辛い

Slide 39

Slide 39 text

E2Eテストの辛い点 (2) テスタビリティ テストしやすさに配慮する余地が少ない UIはどんなソフトウェアにもあるが、 UIを テストしやすくする のは難しい テストのために UXを犠牲にするなんてことはできない

Slide 40

Slide 40 text

E2Eテストの辛い点 (3) 可読性 どこのページにいるのか、どのユーザーでログインしているのか いまやっているのはテストなのか準備なのか 何を操作しようとしているのか E2Eテストは何も考えずに書くとゴリゴリの手続き型プログラミングになるので テストコードが長くなるほど覚えておくことが多くなる = 認知負荷が高い

Slide 41

Slide 41 text

E2Eテストを成功させるために テストベッドを出来るだけシンプルに設計し テスタビリティを考慮し ときには別のテストレベル(単体テスト等)に移譲し 可読性に気を配る

Slide 42

Slide 42 text

まとめ いろんな種類のテストがある 自動化したいテストとそうでないテストがある ただ自動化するでは開発を支えるようなテストにならない E2Eテストは一番ユーザー目線のテスト E2Eテスト特有の辛さを改善するには色々技術が要る

Slide 43

Slide 43 text

いかがでしたか?

Slide 44

Slide 44 text

他にもこんな話が書いてあります 自動テスト実装のハンズオン トラブルシューティング 高度なユースケース 振り返り

Slide 45

Slide 45 text

過去の資料もどうぞ テストを自動化するのをやめ、自動テストを作ろう https://speakerdeck.com/tsuemura/tesutowozi-dong-hua-surufalsewoyame-zi- dong-tesutowozuo-rou コンテキストとセマンティクスを意識してリーダブルな E2Eテストコードを書こう https://speakerdeck.com/tsuemura/kontekisutotosemanteikusuwoyi-shi- siteridaburunae2etesutokodowoshu-kou リーダブルな E2Eテストコードのための 3つの C https://speakerdeck.com/tsuemura/ridaburunae2etesutokodonotameno3tunoc?

Slide 46

Slide 46 text

感想・コメントをお寄せください サポートサイト https://github.com/tsuemura/practical-guide-for-test-automation-support 書籍冒頭に書いてあるんですが、意外と目立たないのか、気付かれていないことが多そう 良く分からないで ★1付けられるよりも たくさん質問して分かってもらったほうがありがたいです

Slide 47

Slide 47 text

Enjoy Testing!