備忘録：ソフトウェアテスト自動化カンファレンス2020に参加してみた

# はじめに
こんにちは。oka-shi@PjM（プロジェクトマネージャー）、兼、モバイルアプリエンジニアです。

先日、テスト自動化研究会のオンライン勉強会『ソフトウェアテスト自動化カンファレンス2020』 に参加してきたので、自分用に備忘録を残します。
勉強会の資料はconnpassに公開されていますので、興味がありましたらご参照ください。

## 勉強会の概要
* ソフトウェアテスト自動化カンファレンス2020  
https://testautomationresearch.connpass.com/event/191996/
* 概要  

> テストの自動化は多くの現場で実施されるようになってきており、それぞれの場で様々な工夫がなされております。しかし、それらを聞く機会はなかなかないのが現状です。
> そこで、今年度はテスト自動化研究会以外の多くの方にご協力いただき、様々な現場でのテスト自動化について工夫や試行錯誤の様子をお話頂きます。

* セッション　※太字に参加
  * 会議室A（初心者向け）  
     * **自動システムテストのテストケース見直しの観点とその自動化について**
     * **システムテスト自動化はじめの0.5歩 〜あつまれテスト自動化レイトマジョリティさんの森〜**
     * "全部乗せ" フレームワーク CodeceptJS でE2Eテストを楽にしよう
     * **E2E自動テストの前に、手動テストを効率化するための自動化を行った話**
     * **EMTEを使って自動化の費用対効果をわかりやすく表現する**
     * **FindElementできない画面のElementをFindした方法、そこから発展していくテスト自動化**
     * **ローコード開発テストガイドライン**
     * テスト自動化ツールで考えるモデルベースドテスト
     * **E2Eテストのflakyと向き合う**
     * **中の人が語るテスト自動化SaaSのCS - カスタマーサポート、そしてサクセスへ -**
  * 会議室B（経験者向け）
     * CI パイプラインでのテスト戦略とその実現方法
     * **AppiumのWebViewアプリテストの仕組みとハマりどころ**
     * テスト自動化導入に取り組んだ1年の歩み 〜E2E編〜
     * E2E自動テストを浸透させるために工夫したこと
     * **APIテスト、どうやってますか？** 
     * E2Eのリトライを少し賢くして、落ちにくくしてみた
     * reg-suitとQA Wolfを活用したVisual Regression Test

## 何故参加したか
* プロジェクトを成功させる要素の1つとして、ソフトウェアテスト自動化の知見を得るため
* モバイルアプリのテスト自動化の知見を得るため
 
## 参加して学んだこと
PjMとモバイルアプリエンジニアの観点で、勉強会で参考になった文章を引用して、理解した内容をまとめました。

### PjM観点
#### **自動システムテストのテストケース見直しの観点とその自動化について**  
> Google Analyticsによるページ価値の導出  

本セッションでは、Webサイトの自動システムテストを効果的に行う方法の１つとして、Google Analyticsのページ価値を活用することを理解しました。
Webサイトの運営や分析を経験していませんが、機会があれば参考にしたいです。

### **システムテスト自動化はじめの0.5歩 〜あつまれテスト自動化レイトマジョリティさんの森〜**
> コラボレーション
> 　開発者・POなど関係者との対話・協業が最重要。
> 　・ホワイトボードを囲んで絵を描く（リモートでも）
> 　・同じものを見ながら一緒に働く
> 変化ではなく実験の精神
> 　まずやってみる
> 　・失敗したっていい
> 　・いつまでも結果が出ないより失敗という結果が出た方がマシ  

本セッションでは、システムテスト自動化を、小さくはじめるメリットや、開発チームやテストチームがどのように話合うかが参考になりました。  
個人的には、プロジェクトを前に進めるために、2つの要素が重要だと感じました。1つ目は、チームでプロジェクトのゴールを共有する文化があること。2つ目は、失敗という結果が出ることにも価値があること。PjMは、チーム間で協業する文化や、小さくはじめる挑戦を支援していくべきだと感じました。

### **E2E自動テストの前に、手動テストを効率化するための自動化を行った話**
> まとめ
> ・Bookmarkletで手動テストを効率化するアプローチ
> ・E2Eを選ばなかった理由
> 　→ チームの状況的に難しかった
> 　→ チーム状況に合わせた取り組みを選択した  

本セッションでは、Webサイトのデータ入力を、Bookmarkletを使用して自動化する方法を理解しました。
Bookmarkletはお手軽でいいですね。小さくはじめて、改善を繰り返して効率化が進んでいく流れが参考になりました。

### **EMTEを使って自動化の費用対効果をわかりやすく表現する**
> EMTEとは
> EMTE（Equivalent Manual Test Effort） ＝ テストを手動で実行する工数  

本セッションでは、プロジェクトのコスト管理に使用できるメトリクス"EMTE"について理解しました。
元ネタは、ご本人の技術ブログ [自動テストの効果測定に使われるEMTEとは？](https://www.lifull.blog/entry/2020/10/19/110000#:~:text=EMTE%E3%81%AFEquivalent%20Manual%20Test,%E3%81%A8%E3%81%97%E3%81%A6%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82&text=%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%E5%AE%9F%E8%A1%8C%E6%99%82%E9%96%93%E3%82%92,0.16%20EMTE%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82) のようです。また、自動テストの資格（ISTQBの自動化エンジニア資格 CTAL-TAE）があるそうです。知らなかった。

### **FindElementできない画面のElementをFindした方法、そこから発展していくテスト自動化**
> なんとかならないものなのか・・・
> ・QAでは太刀打ちできない・・・
> 　・内部コードを触れる事ができる人はいない
> ・開発チームとMTGしてみた
> UIの自動操作が可能になった！！
> 　このJSONには座標などの情報が入っているため
> 　この情報を利用してSeleniumでクリックする！

本セッションでは、WebサイトでFindElementできない画面の場合でも、JSONの座標データを活用することで、テストを自動化する方法を理解しました。
こちらもQAチームと開発チームが協業することで、新しい価値を生み出していました。文化が良いですね。

### **ローコード開発テストガイドライン**
> まとめ
> ■ローコード開発のテストは
> ・単体テスト工程では、「カスタマイズ有無」で実装内容の方針が分かれる
> ・結合テスト工程および総合テスト工程では、原則従来のプロセスやアクティビティを踏襲し、結合テスト工程および総合テスト工程をテーラリング
> ・非機能テストでは、原則従来のプロセスやアクティビティを踏襲し、使用するツールの制約有無をツール提供会社に確認し、実施する

本セッションでは、ローコード開発においてテストガイドラインを定めて、品質を担保する方法があると理解しました。ローコード開発の品質は、採用ツール側で担保されている点を前提で、カスタマイズ部分を中心に品質担保のアプローチをしていくのですね。

### **APIテスト、どうやってますか？** 
> 事例１
> ・どうやった？
> 　・内部結合
> 　　アーキテクチャ図、プログラムフロー
> 　　→（EC2⇔EC2、EC2⇔RDS）観点だし、テストケース作成
> 　　テストケースごとに実行
> 　　→ Response確認、EC2・RDSのLog確認
> 　・Component Test
> 　　API仕様書
> 　　→ パターンを抽出
> 　　→ パターンを組み合わせ、テストケース作成
> 　　→ テストケース毎に実行
> 　　→ Response確認

本セッションでは、テスト自動化ソリューションを行っている[Human Crest](https://www.humancrest.co.jp/)における、APIテストのメリットと課題、事例が参考になりました。
また、AWSのEC2/RDSのAPIテストにおいて、テストチームの具体的な活動がイメージできました。

### **中の人が語るテスト自動化SaaSのCS - カスタマーサポート、そしてサクセスへ -**  
> カスタマーサポートの流れ
> 一次切り分け ＞ 技術的調査 ＞ 問題対応

本セッションでは、[Autify](https://autify.com/ja)の中の人による、WEBアプリ向けのE2Eテストのサービスの概要を理解しました。
Autifyは、セッション参加者のコメントでも好評のようで、カスタマーサポートが充実しているように見受けられました。テスト自動化の選択肢として、QA自動化プラットフォームを利用するのもアリですね。  

## モバイルアプリ観点
### **E2Eテストのflakyと向き合う**
> テスト自動化におけるflakyとは
> ・同じコードで**成功と失敗の両方が観測できる**テスト
> ・「不安定なテスト」ではなく「不安定なテスト結果」
> 取り組んでいる工夫
> ・Flakyが発生したときのルールを決める
> 　・例）別のビルドで2回Flakyが発生したら、開発チームに確認する

本セッションでは、テスト自動化におけるflaky≒不安定なテスト結果に対して、取り組んでいる工夫などが参考になりました。
モバイルアプリ開発でも、flakyの調査で時間を無駄にしている場合があるので、flakyに対してルールを決めて対応することを取り入れたいですね。  

### **AppiumのWebViewアプリテストの仕組みとハマりどころ**
> WebViewアプリのデバッグ Android
> ・Chrome DevToolsを使う
> Appium
> ・OSSでクロスプラットフォームなE2Eテスト自動化フレームワーク
> ・WebDriverを拡張したプロトコルでiOSやAndroidアプリを自動操作できる
> ・WebViewアプリテストではコンテキストとウィンドウハンドルを扱う必要がある  
  
本セッションでは、WebViewアプリのデバッグ、テスト自動化、ハマりどころがまとまっており、WebViewアプリ開発時に参考になる資料だと感じました。
基本的なツールや用語の説明から、テストの仕組みで必要となる知識（通信経路や要素探索など）まで、一通りまとまっていて分かりやすかったです。Android/iOSどちらも説明がある点もありがたいです。

## まとめ
今回は、PjMとモバイルアプリエンジニアの観点で、オンライン勉強会『ソフトウェアテスト自動化カンファレンス2020』に参加した内容をアウトプットしました。

PjM観点では、ソフトウェアテスト自動化を「小さくはじめて大きく育てる」事例が印象に残りました。また、ソフトウェアテスト自動化を、テストチームと開発チームが協業して解決する事例があり、チーム間で協業しやすい文化や仕組み作りも重要だと再認識しました。**まずやってみる**を心掛けて活動していきたいと考えています。
今後は、ソフトウェアテスト自動化の分野も、浅く広くキャッチアップを続けていこうと思います。

モバイルアプリ観点では、「AppiumのWebViewアプリテストの仕組みとハマりどころ」が参考になりました。Android/iOSでWebViewアプリを作成する機会があれば、活用したいです。