初めての自動テスト meets Jenkins
-
Upload
hiroko-tamagawa -
Category
Engineering
-
view
1.136 -
download
0
Transcript of 初めての自動テスト meets Jenkins
自己紹介
玉川紘子(@nkns165)
ソフトウェアテストエンジニア@SHIFT
主に自動化・CIを担当しています
コミュニティ活動もしています
テスト自動化研究会
「初めての自動テスト」はこんな本
基本的には初心者向けにWebの自動テストについて解説した書籍
マネージャーには…
テスターには…
開発者には…
自動テストの分類、共通言語、適切な配分と役割分担の考え方
自動テストに必要なWebの仕組みの知識、プログラミングの知識
テストファーストなど、自動テストに関わる新しい習慣・知識
なぜ「初めての自動テスト」を担当したか
玉川竜司さんからのご紹介で、訳してみたいけど手の回っていないものの中から1冊という感じで提案
自動テストは経験豊富&翻訳は経験ほとんどなしという自分の状態にぴったりの対象
最初は著者名をあまりよく見ていませんでした
目次
1. テストのピラミッド
2. ユーザーインターフェイステストに触れる
3. レガシーシステムにUIテストを追加する
4. 統合テストで点と点を結ぶ
5. RESTfulなWebサービスの統合テスト
6. ユニットテストで基礎を固める
7. JavaScriptを使ったブラウザ上のユニットテスト
8. ピラミッドを登る
9. プログラミング初級講座
10.テストを整理する
11.効果的なモックの活用
12.テストファースト
残念ながら、CIに関する章は無し
前半は「テストのピラミッド」のお話
自動テストを3つの層に分け、それぞれ適切な量を保って開発していきましょうという考え方 各層のテストの特徴・具体的な書き方・どんな使い分けをすれば良いかを”少しずつ”解説
詳細なチュートリアルではない
ユニットテスト
統合テスト
UIテスト
手動テスト
どうしても欠かせない重要ケースはEndToEndで。
ただし、不安定なので数は絞る
高速実行可能・安定している
単体テストを重視
第一層:UIテスト
最終的なチェックには絶対に必要
ただし、使い方を間違えると重荷になる
書籍の中ではCapybaraでテストを書く方法、HTMLのソースを解析してCSSで場所を指定する方法などを紹介
第二層:統合テスト(APIテスト)
ピラミッドの定義上は「Integration test(統合テスト)」として紹介しているが、Webの世界ではAPIテストと同義と考えてOK
ある程度高速・かつUI以外については全体を通して見ることができるので有用
作成も簡単なのでテスターにも向いている
書籍では、そもそものHTTPの仕組みに始まり具体的なリクエストの送り方・レスポンスのチェックのしかたにも言及
第三層:ユニットテスト
バックエンドのロジックを網羅的にチェックするテスト
高速で大量に実行しやすい
基本的に開発者が書くもの
TDD(テスト駆動開発)と組み合わせることで、綺麗なソースコードで仕様も明確にして書いていくことができる
10章 「テストを整理する」
テストスイートは生モノ
必要に応じてどんどん追加・変更・削除が行われる
追加しやすい構成・追加するときの方針が決まっていると楽
テストの分離:1つのテストケースでは対象を1つにする
コンテキストの明確化:UIテストなら画面、APIテストならエンドポイントごとというように分類の軸を決める
コンテキストの階層化:類似のコンテキストをまとめて階層化する
そもそもUI/統合/ユニットの定義も整理の一環
スペシャリストを置くのも効果的
Spotifyでは明確なロールを置いて活動を促進
専任のテスト自動化エンジニア
専任の生産性向上チーム
Agile 2017 : 7 Sources of Waste (Jonathan Rasmusson)
HELP
ピラミッドの一要素としてのCI
迅速なフィードバック
Slack/メールによる通知、アイコンで分かる健康状態
開発↔QA間のコミュニケーションを助ける
URLを共有するだけでテスト結果がすぐに分かる
テストの整理を助ける
ジョブの分割・フォルダ構造に直結
最も悩んだ&長い訳注(7章)
画面で起きたバグに対して、テストコードを書きながら原因を追求していく「バグハント」の流れ
だったはずが、結論は「テストコードのバグ」
Jonathan本人とメールのやり取りをし、最終的には「確かに何か変だね」と分かってもらえた
結果、5行に渡る訳注で補足することに
Jonathanはとてもいい人でした
まとめ
自動テストを始めるときに大切なこと
整理:UI/統合/ユニットテストの定義を理解し適切に使い分ける
役割分担:開発/QAで得意分野を担当する
協調:お互いにコミュニケーションを取り、無駄をなくす
言うまでもなく
CIあっての自動テストです