Slide 1

Slide 1 text

Gaugeを使って実行可能な 仕様書を実現する “The concept of executable documentation” 工藤 元

Slide 2

Slide 2 text

自己紹介 ● 工藤 元 ○ 所属:株式会社ユーザベース ■ テストエンジニア ○ 3児の父 ■ 2018年7月~2019年4月育休取得

Slide 3

Slide 3 text

はじめに SPEEDA開発ではGaugeというツールを使ってUATの自動テスト を書いています。 もう導入してから2年ほど経って、ほぼ全てのプロジェクトで Gaugeを使ってUATを書いているので、その経験を踏まえて Gaugeの良さやなぜSPEEDA開発で導入したかをお話します。

Slide 4

Slide 4 text

Gaugeとは GaugeとはThoughtWorks社が開発しているオープンソースのテスト自動化フレーム ワークです。 ざっくりGaugeの特徴を挙げると… ● Selenium Webdriverと一緒に使える ● マークダウン形式で記述できる ● ビジネス言語でテスト仕様を記述できる(実行可能な仕様書の概念をサポート) ● 様々な言語でテストの記述が可能(Java,C#,Ruby,JS,Go,Python) ● 外部データソースからテストデータを読み込める ● 拡張可能(自分でpluginを開発できる) ● IDEのサポートが充実している

Slide 5

Slide 5 text

Gaugeが実現したいこと ● 実行可能な仕様書(the concept of executable document) ● Less Code, Less Maintenance, More Acceptance Testing ● 読みやすく、メンテナンスしやすいテスト ● Specificationを再利用、リファクタリング機能を強化することに より、テストコードの重複をなくす ● 少ないテストコードと読みやすいSpecification  →テストスイートのメンテナンスにかける時間が減る (From https://gauge.org/)

Slide 6

Slide 6 text

Gaugeで使われる用語 ● Specifications ● Suites ● Scenarios ● Steps ● Concepts ● Tags ● Parameter ● Contexts & Tear Down Steps

Slide 7

Slide 7 text

Gauge(Specificationファイル)

Slide 8

Slide 8 text

Gauge(Kotlin側)

Slide 9

Slide 9 text

Specifications(Spec), Scenarios, Steps Spec Scenario Step Step Step

Slide 10

Slide 10 text

IDE(IntelliJ/VS code)を使えば、SpecファイルからStep のテストコードに飛ぶことができる

Slide 11

Slide 11 text

Concepts(cpt) ● 複数のStepを1つのビジネスロジックとしてまとめることができる ● ConceptはSpecファイルではStepと同じように使うことができる ● Conceptはネストして使うこともできる

Slide 12

Slide 12 text

Concepts(cpt) Concept Step

Slide 13

Slide 13 text

Contexts / Tear Down Steps Contexts Tear Down Steps

Slide 14

Slide 14 text

Contexts / Tear Down Steps ● ContextsはSpecファイル内の一番目のScenarioの前に記述されたStepのことを 指す。全てのScenarioの先頭にContextsとして定義されたStepが実行される。 ● Specファイルの最後のScenarioの後ろにアンダースコアを3つ以上記述すると、そ れ以降のStepはTear Down Stepsとして認識される。全てのScenarioの最後に実 行される。

Slide 15

Slide 15 text

Execution hooks ● Suite,Spec,Scenario,Stepの単 位で前/後処理を定義できる。 ● ContextsやTear DownはSpec ファイル毎且つScenarioにしか定 義できないが、Execution Hooks はSpecファイルを跨いで且つ 様々な単位で定義できる

Slide 16

Slide 16 text

Execution Hooks 例えば… ● 実行時に一度だけ設定ファイルを読み込む、Read-Onlyデー タの投入などはBefore Suiteで実施 ● LogoutやWebdriverのClose処理などはAfter Scenarioで実 施 etc…

Slide 17

Slide 17 text

Execution hooks

Slide 18

Slide 18 text

Tags Tag

Slide 19

Slide 19 text

Tags ● テスト実行時に特定のTagがついているScenarioまたはSpecだけ流すor流さない のように指定することが可能 ● Execution Hooksと掛け合わせて、特定のTagが付与されている場合にのみテスト データをデータベースに投入するなどの事前(/事後)処理を実施することが可能

Slide 20

Slide 20 text

Step alias 同じテストユーザー(日本ユーザー、βオプションあり)を使うとしても、使うシナリオによっ てStepの書き方を変えたいことがある。 例えばユーザーの国で挙動が変わったり、オプションの有無で挙動が変わる場合など。

Slide 21

Slide 21 text

Step alias 全てのシナリオで同じユーザを使う場面。下記のような状態だと仕様上関係のない情報 がStepに含まれていて、後々確認する人をミスリードしてしまう可能性が残る。

Slide 22

Slide 22 text

Step alias Step aliasを使うと下記のように、複数のStepを1つのStepの実装に紐づけられる。

Slide 23

Slide 23 text

Step alias Specファイル側はこうなる。こちらの方が仕様を正しく伝えられる。

Slide 24

Slide 24 text

Step alias “Step alias feature helps you follow good software engineering practices such as the DRY (Don’t Repeat Yourself) principle at the code level, while ensuring that the functionality is expressed clearly. ” (Gauge 公式ドキュメント) Step aliasを使えばコードレベルでは DRY原則などソフトウェアエンジニアリングにおいて良いとされるプラクティ スに沿いながら、実装中の functionality(仕様?)を明確に表現できるようになる

Slide 25

Slide 25 text

Report html-reportのプラグインを入れれば下記ののようなレポートが出力される

Slide 26

Slide 26 text

Report上でのConceptの表示

Slide 27

Slide 27 text

Specファイルに記載したコメント

Slide 28

Slide 28 text

Gaugeの魅力 ● 実行可能な仕様書なので、仕様が変わったときにすぐ気付ける、ちゃんとテストが 仕様を表現できていれば更新漏れなどがない ● ドキュメントの表現力という点を意識して機能が実装されているので、目的(実行可 能な仕様書の概念)を達成するための良い機能が結構ある ● レポート機能も充実している

Slide 29

Slide 29 text

なぜSPEEDA開発ではGaugeを導入したか

Slide 30

Slide 30 text

SPEEDAではUAT(E2E)は、 「自動テストとして実行可能なドキュメント(仕様)である」 という考えで開発しています

Slide 31

Slide 31 text

SPEEDA開発ではテストケース=仕様書という考え方から、 Gauge導入前もほぼすべてのプロジェクトでUATを書いていまし た。

Slide 32

Slide 32 text

自動テストのケースを誰でも読めるようにするという考え方も開発 チームでそれまでも取り組んできました(当時はScala + Spec2で テストを書いていた)が、Gaugeを使えばよりスマートに実現でき そうでした。

Slide 33

Slide 33 text

Gaugeは「実行可能なドキュメント」という概念("the concept of executable documentation")をサポートしており、まさに SPEEDA開発チームでやりたかったことを実現するために生まれ てきたようなツールでした。

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

● ここでこのケースを入れるべきか?やどのように記述すべきかを話ながらやる ● 常に意識すべきなのはそのテストシナリオが今回開発している仕様を表現できてい るか ● 後々仕様を確かめるために、プロジェクトに携わっていなかったメンバーが見てわ かるか ● そのためにコメントを用いながらも正確な仕様を表現できるようにやっている 仕様書としての表現力を考えて作られているGaugeがマッチ

Slide 36

Slide 36 text

FAQ 先にUATを書いているということですが、まだ出来ていない画面や機能に対してどのよう にテストコードを実装していくのでしょうか?

Slide 37

Slide 37 text

おわりに Gaugeコミュニティができていったら良い もし導入に興味があったり、もっと詳しい話を聞きたい方は是非声 をかけてください!

Slide 38

Slide 38 text

宣伝 ● Uzabase Tech Blog やってるので是非読んでみてください ● 本日Gaugeの最新記事が公開されました! ○ Gaugeのsetupとteardownを用いて効率的に読みやすいテストを書く ● 過去の記事はこちら ○ Gauge Test Automation Toolとアジャイル開発 ○ GaugeのConceptを用いてテストシナリオをより仕様書のように記述す る ○ GaugeのParameterを使いこなす

Slide 39

Slide 39 text

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