【勉強会レポート】D3:グルメなテスト自動化&テスト設計モデリング に参加してきました

まつやまです。本日は「グルメなテスト」のイベントに参加させていただきました。

会場は床が芝生のようになっていて、とてもリラックスできる空間でした! 

イベントは、3名の方が1人ずつ発表される形で進みました。
発表テーマは以下のとおりです。 

発表テーマ

「Flakyなテストとその判別方法の解説」(ブロッコリーさん)
「お弁当QAのあみだくじ 〜時系列のイベントを洗い出す〜」(EgaSaさん)
「明日から始めるSelenideによるブラウザテスト 2018年版」(島根 義和さん)


ここからは、各発表ごとのまとめを書いていきます。


「Flakyなテストとその判別方法の解説」(ブロッコリーさん)

発表資料

https://speakerdeck.com/nihonbuson/flakytests

ブロッコリーさんは、JaSST'18 Tokyoの基調講演をはじめ、合計3回に渡ってJohn Micco氏の講演を聞き、さらには直接John Miccoに会いに行って質問をされたそうです。(すごい情熱だ) 

JaSST'18 Tokyoの基調講演などに参加された方にとっては既知の情報を含みますが、Googleではほぼすべてのテストが自動化されており、結果がDBに(一定期間)保存されています。

テストは大きく分けて「Presubmit Testing」と「Postsubmit Testing」の2つに分かれます。前者はコミット単位のテスト、後者は複数回のコミットをまとめた単位のテストです。

テストには多くのリソースを必要とするため、すべてを実施することはできません。そこで、テストを減らすための取り組みを行なっています。

取り組みには「Greenish Service」と「Skip Tests」の2種類があり、前者は確率論で「テストしなくてもおそらく大丈夫」を判断し、後者はテストの「成功/失敗」に着目し、その状態変化の頻度(回数)が多いものを「あてにならないテスト」としてあぶり出しています。

Googleのテストケース及びテスト結果は、非常にシンプルな構成のテーブルに格納されています。特に、テスト結果のカラムに格納される値で、それが開発者の責任なのか、インフラなどコードが関係ない部分での責任なのかを分類できるようになっています。

ブロッコリーさんも強調されていましたが、Flakyなテストを抽出するためのSQLは非常にシンプルで、技術的にはおそらく1年目のエンジニアでも書けると思います。(ここまでシンプルな設計に落とし込めたところがすごい)

ということは、うまくやればGoogleの良いところを、明日から自分の仕事場にも持ち込めるかもしれない。そんな希望が垣間見える内容だったと感じています。

なお、Flakyテストのチュートリアル資料は公開されています。
https://github.com/jmicco/JaSST_tutorial

 

「お弁当QAのあみだくじ 〜時系列のイベントを洗い出す〜」(EgaSaさん)

EgaSaさんによると、現在スウェーデンで開催されているICST(International Conference on Software Testing) 2018は、講演の動画が無料で公開される予定だそうです。これはやばい。

閑話休題。お弁当QAモデルというのは、WEBフロントなどのテストを素早く行うためのモデルだそうです。一般的なモデリング技法は非常に重たい(実務で使うには時間がかかりすぎる)ため、このようなモデルを採用しているとのこと。

今回は「お刺身モデル」の紹介をしていただきました。書き方はかなりシンプルで、左端にステークホルダーを書き、横軸に時系列の線を引きます。そこに、イベントを斜めの線で差し込んでいきます。

その後、「コンフリクト」や「イベントが発生しない場合」などの要素を追記して、最後に、モノサシなどで時系列をトレースしながら、テストケースの設計を行っていきます。手書きでやるのがおすすめだそうです。

(と、今日の時点では理解しましたが、正直曖昧です。また後日この内容で記事を書ければと思っています)
このモデルを採用するメリットは、まず手軽であるということと、手軽であるがゆえに、メンバーに使ってもらうハードルが下がるということです。特に、非エンジニアの方には刺さりそうだなー!と感じたので、見よう見まねで明日から使ってみようと思います。

 

「明日から始めるSelenideによるブラウザテスト 2018年版」(島根 義和さん)

今日の内容を復習するために「Selenide」でぐぐったら、発表者ご本人の記事がHitしました(^^;)

JShellを使ってSeleniumで対話的にブラウザ操作を行う
https://qiita.com/shimashima35/items/918b26c4260e764ce90a

Javaで簡単にUIテストを書けるSelenideを使おう~Selenideの概要とテストの保守性を上げるPage Objectパターンの紹介
https://codezine.jp/article/detail/10335

内容はSelenideのチュートリアル(ライブコーディング)でした。

私は、Seleniumは触ったことがあるのですが、Selenideは(名前は聞いていて興味はありつつも)まだ触ったことがない状態でした。

チュートリアルでは、REPLツールであるJShellを用いての、対話的なスクリプトの実装&実行を行ってくださいました。(ビズリーチさんのWEBサイトを操作する実演もありました!)

開発者ツール起動からの、byidでUI上の要素を指定、といった作業は経験していますので、このあたりはすんなり理解できたと思います。$で値を取れたり、何となくいろいろ便利なんだな?という程度のイメージはできました。

「お刺身モデル」と同様、やはり実際に使わないとちゃんとイメージできないので、これも一度使ってみようと思います。テストだけではなく、様々な用途に応用できるとのこと!

 

まとめとか感想とか


JaSSTの内容は本当に濃くて、噛み砕いていくとまだまだいくらでも味わうところがありますね。Flakyなテストにマヨネーズをかけて(?)美味しい料理にして下さったブロッコリーさんは本当に素晴らしいです。

お刺身モデルはまずは手軽に試せそうな印象がありました。Selenideはこれまで携わってきた自動化スクリプトの延長線上に存在することがイメージでき、学習のハードルがぐっと下がりました。

普段一人で勉強していると、何となく勉強のための勉強というか、変に(ネガティブな意味での)意識高い系に陥ってしまうことがあるのですが、外部勉強会に参加するたびに、そこのベクトル矯正といいますか、むきなおりができて、明日のための燃料がチャージされるイメージがあります。

私はまだ社外での発表をあまり行なっていないのですが、もしそれが誰かの燃料になるのであれば、機会を増やしていきたいと思います。

 

イベントページ

https://d-cube.connpass.com/event/83288/