初めての自動テスト meets Jenkins

26
『初めての自動テスト』 meets Jenkins 2017/11/08 第11回Jenkins勉強会 @nkns165 玉川紘子

Transcript of 初めての自動テスト meets Jenkins

『初めての自動テスト』meets Jenkins

2017/11/08 第11回Jenkins勉強会

@nkns165

玉川紘子

2

自己紹介・翻訳に至ったきっかけ

自己紹介

玉川紘子(@nkns165)

ソフトウェアテストエンジニア@SHIFT

主に自動化・CIを担当しています

コミュニティ活動もしています

テスト自動化研究会

自己紹介

自動テスト関連の技術書の翻訳お手伝いとかもしています

付録執筆 監訳 付録執筆 翻訳

「初めての自動テスト」はこんな本

基本的には初心者向けにWebの自動テストについて解説した書籍

マネージャーには…

テスターには…

開発者には…

自動テストの分類、共通言語、適切な配分と役割分担の考え方

自動テストに必要なWebの仕組みの知識、プログラミングの知識

テストファーストなど、自動テストに関わる新しい習慣・知識

なぜ「初めての自動テスト」を担当したか

玉川竜司さんからのご紹介で、訳してみたいけど手の回っていないものの中から1冊という感じで提案

自動テストは経験豊富&翻訳は経験ほとんどなしという自分の状態にぴったりの対象

最初は著者名をあまりよく見ていませんでした

7

各章の内容を少しずつ紹介

目次

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(テスト駆動開発)と組み合わせることで、綺麗なソースコードで仕様も明確にして書いていくことができる

適切な役割分担と協調が大事

ユニットテスト

統合テスト

UIテスト

手動テスト

テスター

開発者

基盤作りで協力

お互いのテストしている内容を知り、適切な位置へ動かすためのコミュニケーションも

必須

後半はテクニカルな話題が中心

9章 プログラミング初級講座

10章 テストを整理する

11章 効果的なモックの活用

12章 テストファースト

テスター向け

開発者向け

10章 「テストを整理する」

テストスイートは生モノ

必要に応じてどんどん追加・変更・削除が行われる

追加しやすい構成・追加するときの方針が決まっていると楽

テストの分離:1つのテストケースでは対象を1つにする

コンテキストの明確化:UIテストなら画面、APIテストならエンドポイントごとというように分類の軸を決める

コンテキストの階層化:類似のコンテキストをまとめて階層化する

そもそもUI/統合/ユニットの定義も整理の一環

「協調」「役割」「整理」を重視

意外に文化的な話の比重も大きい

役割分担 ≠ 壁を作ること

ユニットテスト

統合テスト

UIテスト

手動テスト

スペシャリストを置くのも効果的

Spotifyでは明確なロールを置いて活動を促進

専任のテスト自動化エンジニア

専任の生産性向上チーム

Agile 2017 : 7 Sources of Waste (Jonathan Rasmusson)

HELP

スペシャリスト=人とは限らない

ContinuousIntegration

HELP

ピラミッドの一要素としてのCI

迅速なフィードバック

Slack/メールによる通知、アイコンで分かる健康状態

開発↔QA間のコミュニケーションを助ける

URLを共有するだけでテスト結果がすぐに分かる

テストの整理を助ける

ジョブの分割・フォルダ構造に直結

ピラミッドの一要素としてのCI

ユニットテスト

統合テスト

UIテスト

手動テスト

テスター

開発者

21

翻訳こぼれ話

翻訳中に苦労した点

度々出てくる感動詞の訳し方

初学者に理解してもらうための工夫 vs きちんとした翻訳

訳注を入れていいかどうかの悩み

最も悩んだ&長い訳注(7章)

画面で起きたバグに対して、テストコードを書きながら原因を追求していく「バグハント」の流れ

だったはずが、結論は「テストコードのバグ」

Jonathan本人とメールのやり取りをし、最終的には「確かに何か変だね」と分かってもらえた

結果、5行に渡る訳注で補足することに

Jonathanはとてもいい人でした

24

まとめ

まとめ

自動テストを始めるときに大切なこと

整理:UI/統合/ユニットテストの定義を理解し適切に使い分ける

役割分担:開発/QAで得意分野を担当する

協調:お互いにコミュニケーションを取り、無駄をなくす

言うまでもなく

CIあっての自動テストです

ご清聴ありがとうございました