Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gaugeを使って実行可能な仕様書を実現する

GennyBoy
November 11, 2019
740

 Gaugeを使って実行可能な仕様書を実現する

GennyBoy

November 11, 2019
Tweet

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. Gauge(Specificationファイル)

    View full-size slide

  8. Gauge(Kotlin側)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. Concepts(cpt)
    Concept
    Step

    View full-size slide

  13. Contexts / Tear Down Steps
    Contexts
    Tear Down Steps

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    etc…

    View full-size slide

  17. Execution hooks

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. 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(仕様?)を明確に表現できるようになる

    View full-size slide

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

    View full-size slide

  25. Report上でのConceptの表示

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide