2020/12/5に行われたソフトウェアテスト自動化カンファレンス2020に参加してきました。
ソフトウェアテスト自動化カンファレンス2020 - connpass
毎年大盛況のイベントで、2019年では「確実に参加したいから登壇するわ」といって応募したくらいです。
参考:システムテスト自動化カンファレンス2019で発表します - テストウフ
今年はコロナの影響でオンラインになった結果、参加可能な人数も大幅に増えて結局1000人近い枠が埋まっていました。すごい。そしてセッションの中身でなく運営的なところに関する感想としては、控えめに言って最高でした。Discordも不慣れな状態で参加したのですが、表現アレかもですがすごく気が利いているというか、「開催しなれてる」感があって、いち参加者としてよどみなく参加して楽しめました。感謝。
ここからは参加したセッションの資料とかんたんな感想を書いていきます。
CI パイプラインでのテスト戦略とその実現方法 / 髙市 智章さん
CI/CDのパイプラインはなぜ必要なのかやその中身などの話から始まり、テスト戦略やその具体例の話が展開。
前半部分は『LeanとDevOpsの科学』や『継続的デリバリー』あたりに書いてあることをベースに紹介されており、うんうんと聞けました。ここで聴講者全体で土台ができて非常によかったです。経験者向けトラックのセッションでしたが、ここで色々勉強になったという方も多いのでは。
そして聴講者がみな「ほう」となっていたのが、テストアワーグラス。私も初めて聞きました。
参考:Google Testing Blog: Fixing a Test Hourglass
もちろんアワーグラスを知れたのも良かったのですが、個人的には終盤の「テスト戦略の具体例を考える」以降が面白かったです。
そもそも他人がなにか物事を考えるときのステップを追体験するというのは非常に学びが大きいので、そうした発表をしてもらえるのは貴重。
Q&A
GUIテストばかり厚くして大失敗したことがある、というコメントに対し、発表者の方も同様の経験があるとおっしゃっていました。
ユニットテストが書けるならよいのですが、現実的に難しい場合はまずシステムテストレベルで全体の振る舞いを最低限担保できるようにして、それからだんだん整えていくというアプローチもアリ、とのこと。
ここは非常に納得というか、私も似たような話をすることが多いです。一旦アイスクリームコーンを経由してピラミッド寄りにしていくようなアプローチとも言えます。手間とお金は結構かかってしまいますが、やらずに過ごすよりはマシです。
AppiumのWebViewアプリテストの仕組みとハマりどころ / 脇坂 雅幸さん
むずかしかったです(小並感
WebViewのツラミのお話でした。
私はモバイルの開発に特別詳しいわけではないので、そもそも1画面にWebViewのブロックが2つ以上存在するという想定をしていませんでした。しかもそれをウィンドウハンドル的なものでスイッチしながら自動操作するということで、Windowsアプリケーションのテスト自動化しているときを思い出しました。
テスト自動化導入に取り組んだ1年の歩み 〜E2E編〜 / 斉藤 健太さん
昨年の発表からの1年間の歩み、とのこと。
テスト自動化を組織に導入する上でのステップが紹介されていたのですが、特に
- 経営層とも認識をあわせて、重要機能を決定している
- E2Eで実装しすぎると辛くなるというのが見えていたので、観点を絞った
- 運用に乗せてから見える課題が絶対あるので、とにかく運用にまず乗せることを優先した
など、聞いていて単純に「ちゃんとしてるなー!」と思いました。
テスト自動化カンファレンスはじめ、「テスト自動化のアンチパターン」については色々な知見が発表されていて、ググれば大量に出てくる状態です。
それでも下調べをせずに無策で自動化しては散る人も居るなかで、ちゃんと他人の失敗やノウハウを自分たちの血肉にして進んでいるところが、すごく「ちゃんとしてる」印象でした。
E2E自動テストを浸透させるために工夫したこと / 及川 智之さん
WingArc1stさん自動化すごくしっかりやられているイメージを勝手に持っています。今回のセッションでも「AutomationTeamというバーチャル組織がある」というお話をされていたので、そのへんが効いているんでしょうね。
組織に浸透させるために工夫したこと、をいくつも紹介されていたのですが、とにかく「使う人のことを考えているのがすごい」と感じました(また小並感
『数学文章作法』という本では「読者のことを考える」というキーワードが出てきますが、それを思い出しました。
- 環境構築が面倒だと使ってもらえないので、ワンタッチ化した
- プログラミングが得意でないテストエンジニアや、一度作ったものに対してあれこれ手を書けたくない開発者に訴求できるよう、コマンドベースのスクリプトにした
などの工夫は、愚直ではあるものの浸透のためには確実に効いていますね。
(一応)テスト自動化エヴァンジェリストなので、この辺は見習っていかねばと思いました。
テスト自動化ツールで考えるモデルベースドテスト / 大段 智広さん
効果的・効率的なテスト設計手法としてテストをモデリングしてみましょう!
というセッションでした。
ちゃんとテスト設計できてますか?という問いかけに対しドキッとしている人が多くいたようです。
MBTへの期待や、MBTでやりがちな間違いなどに触れつつ、EggPlantを使ったデモを見せてもらえました。
MBT → 自動テスト のところ個人的にもあれやこれや考えているところがあるのですが、そもそもMBTわかってるのかと言われると怪しかったりもするので、勉強します。
E2Eのリトライを少し賢くして、落ちにくくしてみた / 傅 錦怡(フー カンイー)さん
不安定でテストが落ちてしまうことがよくあるので、リトライの仕組みを取り入れました、という発表でした。
「E2Eのリトライ」を
- 操作のリトライ
- テストのリトライ
に区分していたのが、個人的になるほどポイント。リトライというと一緒くたに扱ってしまいがちですが、たしかにこれらは別。
操作のリトライは、テスト手順中にステップが1〜4まであったとして、ステップ4がうまくいかなかったからもう1度ステップ4をやる、というもの。
テストのリトライは、ステップ1まで戻ってそのテストをやり直すもの。
これらを実現するために、SeleniumWebDriverでよく使うメソッドを丁寧にラップしてリトライ処理を組み込みました、という話だと私は理解しています。(がちょっと自信ないので詳しい人お願いします)
またもう一つ印象的だったのが、最後のほうでされていた「テスト結果分析が楽になった」というお話。
リトライ処理をきちんと組み込むことによって、自動テストが失敗した場合には「本当にデグレがある」とすぐ判断できるようになった、とのこと。リトライを賢くしてというタイトルですが、むしろ取り組みの本質ってここにあるんじゃないかなと。
自動テストが失敗したときに原因調査をして、「なんだ、タイミングの問題かー。FlakyFlaky」なんて言って運用をしている状態では、自動テストの結果や自動テストそのものの信頼度が低い状態です。これを、リトライを賢くすることによって自動テストの信頼度を高めることができている、というのが素晴らしいなと。
信頼があれば、他のセッションであったような「導入」や「浸透」がしやすくなり、自動テストを効果的に行うという文化を広めることに役立ちます。
個人的にヒットしたセッションでした。
reg-suitとQA Wolfを活用したVisual Regression Test / エムスリーエンジニアリンググループさん
自動テスト含めテスト界隈で今存在感を増しているエムスリーさん。
E2Eテストのつらみとしてよくある「人がやってれば無意識に目視していたような観点が漏れてしまう問題」をなんとかするためにVisual Regression Testをした、というお話です。
reg-suit使うなど、わりとテクニック的には既に世の中に知見がある感じではあったのですが、これまた個人的に良いなと思ったのは「完全に人手を廃して自動化するんだ」などと考えず、目視しなきゃいけない結果を絞り込むのに有効に使った点でした。
VisualRegressionTestもUnitTest同様CIに組み込んで、画像の差分があったところの目視確認を開発の責務にした(!)そうです。
このセッションは終わったあとのQ&Aでも、「画像比較すると都度変化するところとか不一致にならない?」といった質問が飛んでいて、もちろん対策できるところはしているようなのですが、やはり「ツールで全部、ではなく最後のところは目視にしているのがキモ」という趣旨の回答をされていました。いい・・・
まとめ
私も数年前からこのイベントに参加させてもらっていますが、年々テスト自動化が浸透しているのを感じます。
過去には「なにかすごいとりくみのはっぴょう」を大勢が聞いて「すごい」ってなっているような節もあったのですが、今回は特に「だよねー、わかるわかる」という反応をしながら聞いている方も多くいました。(オンラインならでは!)
テスト自動化というものが昔どこか高尚なもののようになっていたところから、当たり前のものとして「やるのは当たり前で、どううまくやろうか」というところまで来ている印象です。コミュニティ全体としての自動化に関する成熟度、上がってます。