狠狠撸

狠狠撸Share a Scribd company logo
#ccc_g11
Copyright 2017 Hiroyuki Onaka
この作品は クリエイティブ?コモンズ 表示 4.0 国際 ライセンスの下に提供されています。
pact-jvmではじめる
コンシューマー駆動契約
2017/4/24 JJUG ナイト?セミナー「テスティング特集」
大中浩行(@setoazusa)
#ccc_g11
Copyright 2017 Hiroyuki Onaka
最近よく聞く話
? ユニットテスト
? 「このコンポーネントのテストモックだらけでわ
かりづらいんですけど…」
? エンドツーエンドのテスト
? 「テストケースが増えてきてメンテナンスがつら
いです…」
#ccc_g11
Copyright 2017 Hiroyuki Onaka
今日は、そんな自動テストに悩むみなさんへの
処方箋として、「コンシューマー駆動契約」に
ついてお話しします。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
問題点の整理
#ccc_g11
Copyright 2017 Hiroyuki Onaka
モックか直接呼び出すか、それが問題
#ccc_g11
Copyright 2017 Hiroyuki Onaka
今までなら、モックを使うかどうかの判断は簡単
だった
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「マイクロサービスアーキテクチャー」
By Paul Downey (CC-BY 2.0)
https://www.flickr.com/photos/psd/13109673843
#ccc_g11
Copyright 2017 Hiroyuki Onaka
複雑になるサービスの依存関係
BY Rose and Trev Clough(CC-BY SA 2.0) http://www.geograph.org.uk/photo/1490900
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「なんかモックだらけになるんですけど…」
By Matthew Black from London, UK (325000 Uploaded by oxyman)
[CC BY-SA 2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons
https://commons.wikimedia.org/wiki/File%3AMock_up_of_a_British_Rail_Class_325_cab_at_the_National_Railway_Museum.jpg
#ccc_g11
Copyright 2017 Hiroyuki Onaka
よろしい、ならばエンドツーエンドだ
#ccc_g11
Copyright 2017 Hiroyuki Onaka
エンドツーエンドテストつらい…
? データのセットアップつらい…
? 実行時間つらい…
? コード何もいじってないのにテスト落ちた、
つらい…
? 昔あった「結合一発勝負」とどう違うんや
#ccc_g11
Copyright 2017 Hiroyuki Onaka
? 各種パブリッククラウド上でのサービス構築
に代表されるように、テストを書くときに依
存するサービス/ミドルウェアが増えた。
? マイクロサービスアーキテクチャーがその流
れを加速している。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
それにもかかわらず、テストをはじめとして開
発の方法論がいわゆる三層アーキテクチャーに
最適化されすぎているが故の問題。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
ではどうするか
#ccc_g11
Copyright 2017 Hiroyuki Onaka
v
Sam Newman(著) 佐藤直生(監訳)
「マイクロサービスアーキテクチャ」
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「ストーリーではなくジャーニーをテストする」
「これに対抗する最善の方法は、少数の中核となるジャー
ニーに焦点を絞ってシステム全体をテストする方法です。こ
の中核となるジャーニーで対象になっていない機能は、互い
に分離してサービスを分析するテストで対処する必要があり
ます。このジャーニーは相互に合意され、共同で所有される
必要があります。音楽専門店の例では、CD の注文、商品の
返品、新規顧客の作成といった(高価値な対話であり極めて
少数の)動作に焦点を絞るでしょう。」
Sam Newman(著) 佐藤直生(監訳)
「マイクロサービスアーキテクチャ」
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「ストーリーではなくジャーニーをテストする」
どうやって…?
#ccc_g11
Copyright 2017 Hiroyuki Onaka
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「テスト自動化ピラミッド」
Mike Cohn 「Suceeding with agile」
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「テスト自動化ピラミッド」
? テスト自動化のレイヤーを「UI」
「Service」「Unit」の3つに分類したもの。
? 「Service」に対するテストが、アプリケー
ションのインターフェスに対するテストを、
UI(ユーザーインターフェース)を迂回して実
行することが特徴。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
マイクロサービスアーキテクチャーにおけるサー
ビステスト
? 外部に対するサービス呼び出しをモック化した
上で、個々のサービスの機能に対して、ユー
ザーインターフェースを迂回して実行する。
? ユニットテストよりも広い範囲をカバーするテ
ストを、エンドツーエンドのテストよりも安定
かつ高速に実行できる。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
? それでは、サービステストを実現する手段と
してのコンシューマー駆動契約とその実装で
あるpact-jvmについて見てみましょう。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
コンシュー
マー駆動契約
とPact
#ccc_g11
Copyright 2017 Hiroyuki Onaka
コンシューマー駆動契約
? クライアント(コンシューマー)がサービス(プ
ロバイダー)に対してどのような振る舞いを
期待するかを記述したファイル(エクスペク
テーション)を作成する。
? エクスペクテーションは、クライアントのビ
ルド上で作成される。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
? サービスは、クライアントからエクスペク
テーションを受け取り、自らがエクスペク
テーションの通り振る舞うかを、サービスの
ビルドの中で検証する。
? エクスペクテーションを作成する過程と検証
する過程が、分割されていることが特徴。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
Pact
? オーストラリアのオンライン不動産サービス
RealEstate.com.auで開発された、コン
シューマー駆動契約を使用したテストツール
がオープンソース化されたもの。
? https://docs.pact.io/
#ccc_g11
Copyright 2017 Hiroyuki Onaka
? 当初はRubyで開発されていたが、その後他
の言語へも移植。
? エクスペクテーションがJSONで記述されて
いて、特定の言語からは独立したフォーマッ
トになっていることが特徴。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
pact-jvm
? PactのJVM言語向け移植版
? https://github.com/DiUS/pact-jvm
#ccc_g11
Copyright 2017 Hiroyuki Onaka
サンプルの解
説
#ccc_g11
Copyright 2017 Hiroyuki Onaka
? 動物園で飼育されている動物のモデルを返す
サービス
? そのサービスを使用して動物園の情報を扱うク
ライアント
? サンプルコードは以下にあります
https://github.com/azusa/pact-jvm-
example
#ccc_g11
Copyright 2017 Hiroyuki Onaka
Animal Service
Consumer
(Zoo App)
Provider
(Animal Service)
Animal Service
Client
#ccc_g11
Copyright 2017 Hiroyuki Onaka
GET /animals/serval
{
"animals":
[
{"id": 1, "name": "サーバルちゃん"}
]
}
#ccc_g11
Copyright 2017 Hiroyuki Onaka
プロバイダーとしてのAnimal Service
#ccc_g11
Copyright 2017 Hiroyuki Onaka
#ccc_g11
Copyright 2017 Hiroyuki Onaka
#ccc_g11
Copyright 2017 Hiroyuki Onaka
エクスぺくてーションの出力
クライアントでテストを実行すると、
target?pacts?test_consumer-
test_provider.json に、JSONが出力されます。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
#ccc_g11
Copyright 2017 Hiroyuki Onaka
#ccc_g11
Copyright 2017 Hiroyuki Onaka
#ccc_g11
Copyright 2017 Hiroyuki Onaka
サービス側のテスト
エクスペクテーション(先ほどのJSON)をコン
シュマー(クライアント)から受け取って、プロ
バイダー(サービス)のビルドで、サービスの振
る舞いを検証します。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
#ccc_g11
Copyright 2017 Hiroyuki Onaka
エクスペクテーションとの
マッピング
アプリケーションの起動
テスト対象のポートの指定
#ccc_g11
Copyright 2017 Hiroyuki Onaka
実行結果
#ccc_g11
Copyright 2017 Hiroyuki Onaka
コンシュー
マー駆動契約
のポイント
#ccc_g11
Copyright 2017 Hiroyuki Onaka
コンシューマー駆動契約のポイント
? 検証の厳密さ
? Provider Stateの扱い
? エクスペクテーションの引き渡し
#ccc_g11
Copyright 2017 Hiroyuki Onaka
検証の厳密さ
例えば、エクスペクテーションとしてレスポン
スがapplication/jsonというContent-Typeを返
すことを期待した場合。
サービス(プロバイダー)がapplication/json;
charset=uif-8というContent-Typeを返した場
合、機能的には等価だが検証には失敗する。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
Provider Stateの扱い
エクスペクテーションの検証時には、プロバーダー
(サービス)のバックエンドのデータベースや、対向
先のサービスのモックをセットアップする必要があ
ります。
よって、クライアントのテストとサービスのテスト
が、テストデータの関係を通じて密結合することに
なります。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
上記二つの理由により、クライアントとサービ
スの間のやりとりを全て検証するのではなく、
サービスのクライアントの契約として必要な部
分に検証を絞る必要があります。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
エクスペクテーションをサービス側で検証する
には、クライアントが作成したエクスペクテー
ションをサービス側に引き渡す必要があります。
? CIサーバーの成果物(Artifact)で引き渡す
? Pact Brokerを使用する
? https://github.com/bethesque/pact_broker
#ccc_g11
Copyright 2017 Hiroyuki Onaka
まとめ
#ccc_g11
Copyright 2017 Hiroyuki Onaka
コンシューマー駆動契約の使いどころ
? 正直、悩ましい
? サービス側をリファクタリングした時に、クラ
イアント側でのテストなしでクライアントと
サービス側のインターフェースを検証できると
いうのはメリット
? だが、サービス間の依存関係がそれなりに複雑
でない場合は、オーバースペックではないのか
#ccc_g11
Copyright 2017 Hiroyuki Onaka
? 「テスト自動化ピラミッド」の考え方はコン
シューマー駆動契約を導入しなくても有効
? アプリケーションのレイヤーそれぞれにどの
ようなテストを書き、テストの網をはってリ
スクを潰して行くかを考えていく中で、コン
シューマー駆動契約の考え方も生きてくる。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
まとめ
ユニットテストとエンドツーエンドテスト双方
を補完し、クライアントとサービス相互のイン
ターフェース仕様の検証に絞った使い方が出来
るかが、コンシューマー駆動契約を推進する上
でのポイントになります。
#ccc_g11
Copyright 2017 Hiroyuki Onaka
情報源
? Pactのドキュメント
? https://docs.pact.io/
? 実践 Pact:マイクロサービス時代のテストツール
? http://techlife.cookpad.com/entry/2016/06/28/1642
47
? すいーとみゅーじっく vol.1 TDDってなんだ
? https://fieldnotes.booth.pm/items/484459
#ccc_g11
Copyright 2017 Hiroyuki Onaka
「Testing Java Microservices」
? 2017年夏出版予定
? http://www.manning.com/books/testing-
java-microservicess
#ccc_g11
Copyright 2017 Hiroyuki Onaka
ありがとうございました!
? 大中浩行(Onaka,Hiroyuki)
? @setoazusa
? グロースエクスパートナーズ株式会社
アーキテクチャソリューション部
テクニカルリード
? http://hiroyuki.fieldnotes.jp/

More Related Content

What's hot (20)

VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
yy yank
?
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
Hiroyuki Ohnaka
?
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
Hiroyuki Ohnaka
?
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
Masaru Horioka
?
Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介
Masaru Horioka
?
静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応
Masaru Horioka
?
碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介
Masaru Horioka
?
静的解析の搁翱滨
静的解析の搁翱滨静的解析の搁翱滨
静的解析の搁翱滨
Masaru Horioka
?
静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携
Masaru Horioka
?
Klocwork 2017.1アップデート
Klocwork 2017.1アップデートKlocwork 2017.1アップデート
Klocwork 2017.1アップデート
Masaru Horioka
?
Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
torutk
?
テスト駆动开発の进化
テスト駆动开発の进化テスト駆动开発の进化
テスト駆动开発の进化
Yukei Wachi
?
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
Masaru Horioka
?
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
Masaki Nakagawa
?
罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ
罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ
罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ
Kei Sawada
?
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
Game Tools & Middleware Forum
?
テスト駆动开発入门
テスト駆动开発入门テスト駆动开発入门
テスト駆动开発入门
Shuji Watanabe
?
Klocwork 2017.0アップデート
Klocwork 2017.0アップデートKlocwork 2017.0アップデート
Klocwork 2017.0アップデート
Masaru Horioka
?
奥别产サービスのソフトウェア蚕础と自动テスト戦略
奥别产サービスのソフトウェア蚕础と自动テスト戦略奥别产サービスのソフトウェア蚕础と自动テスト戦略
奥别产サービスのソフトウェア蚕础と自动テスト戦略
Masaki Nakagawa
?
罢诲诲のすゝめ
罢诲诲のすゝめ罢诲诲のすゝめ
罢诲诲のすゝめ
将 高野
?
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
yy yank
?
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
Hiroyuki Ohnaka
?
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
Hiroyuki Ohnaka
?
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
Masaru Horioka
?
Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介
Masaru Horioka
?
静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応
Masaru Horioka
?
碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介
Masaru Horioka
?
静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携
Masaru Horioka
?
Klocwork 2017.1アップデート
Klocwork 2017.1アップデートKlocwork 2017.1アップデート
Klocwork 2017.1アップデート
Masaru Horioka
?
Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
torutk
?
テスト駆动开発の进化
テスト駆动开発の进化テスト駆动开発の进化
テスト駆动开発の进化
Yukei Wachi
?
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
Masaru Horioka
?
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
Masaki Nakagawa
?
罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ
罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ
罢顿顿を実践してわかった罢顿顿つまつ?くあるあると自分なりの乗り越え方まとめ
Kei Sawada
?
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
Game Tools & Middleware Forum
?
テスト駆动开発入门
テスト駆动开発入门テスト駆动开発入门
テスト駆动开発入门
Shuji Watanabe
?
Klocwork 2017.0アップデート
Klocwork 2017.0アップデートKlocwork 2017.0アップデート
Klocwork 2017.0アップデート
Masaru Horioka
?
奥别产サービスのソフトウェア蚕础と自动テスト戦略
奥别产サービスのソフトウェア蚕础と自动テスト戦略奥别产サービスのソフトウェア蚕础と自动テスト戦略
奥别产サービスのソフトウェア蚕础と自动テスト戦略
Masaki Nakagawa
?
罢诲诲のすゝめ
罢诲诲のすゝめ罢诲诲のすゝめ
罢诲诲のすゝめ
将 高野
?

Similar to 辫补肠迟-箩惫尘ではじめるコンシューマー駆动契约 (20)

インターネット生放送を支える技术としくみ2015年版
インターネット生放送を支える技术としくみ2015年版インターネット生放送を支える技术としくみ2015年版
インターネット生放送を支える技术としくみ2015年版
Yusei Yamanaka
?
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
Tetsutaro Watanabe
?
ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術
Yusuke Goto
?
颁丑谤辞尘别でストレージ永続化を実现するには
颁丑谤辞尘别でストレージ永続化を実现するには颁丑谤辞尘别でストレージ永続化を実现するには
颁丑谤辞尘别でストレージ永続化を実现するには
goccy
?
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
Hiroyuki Ohnaka
?
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
エピック?ゲームズ?ジャパン Epic Games Japan
?
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Takuya Iwatsuka
?
Spring I/O 2018 報告会
Spring I/O 2018 報告会Spring I/O 2018 報告会
Spring I/O 2018 報告会
NTT Software Innovation Center
?
顿辞肠办别谤コミュニティ近况
顿辞肠办别谤コミュニティ近况顿辞肠办别谤コミュニティ近况
顿辞肠办别谤コミュニティ近况
Akihiro Suda
?
决済金融から始めるデータドリブンカンパニー #yjmu
决済金融から始めるデータドリブンカンパニー #yjmu决済金融から始めるデータドリブンカンパニー #yjmu
决済金融から始めるデータドリブンカンパニー #yjmu
驰补丑辞辞!デベロッパーネットワーク
?
闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用
闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用
闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用
Tetsutaro Watanabe
?
决済金融から始めるデータドリブンカンパニー
决済金融から始めるデータドリブンカンパニー决済金融から始めるデータドリブンカンパニー
决済金融から始めるデータドリブンカンパニー
Tokuhiro Eto
?
JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例
Fumihiko Takahashi
?
ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉
ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉
ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉
Go Sueyoshi (a.k.a sue445)
?
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdf
Tomokazu Kizawa
?
翱厂厂コンソーシアム记念讲演(2017-07-10)
翱厂厂コンソーシアム记念讲演(2017-07-10)翱厂厂コンソーシアム记念讲演(2017-07-10)
翱厂厂コンソーシアム记念讲演(2017-07-10)
博宣 今村
?
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Tsunenori Oohara
?
明日からはし?めるネットワーク运用自动化
明日からはし?めるネットワーク运用自动化明日からはし?めるネットワーク运用自动化
明日からはし?めるネットワーク运用自动化
Taiji Tsuchiya
?
チラシル颈翱厂での広告枠开発
チラシル颈翱厂での広告枠开発チラシル颈翱厂での広告枠开発
チラシル颈翱厂での広告枠开発
Satoshi Takano
?
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
ICO
?
インターネット生放送を支える技术としくみ2015年版
インターネット生放送を支える技术としくみ2015年版インターネット生放送を支える技术としくみ2015年版
インターネット生放送を支える技术としくみ2015年版
Yusei Yamanaka
?
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
Tetsutaro Watanabe
?
ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術
Yusuke Goto
?
颁丑谤辞尘别でストレージ永続化を実现するには
颁丑谤辞尘别でストレージ永続化を実现するには颁丑谤辞尘别でストレージ永続化を実现するには
颁丑谤辞尘别でストレージ永続化を実现するには
goccy
?
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
Hiroyuki Ohnaka
?
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Takuya Iwatsuka
?
顿辞肠办别谤コミュニティ近况
顿辞肠办别谤コミュニティ近况顿辞肠办别谤コミュニティ近况
顿辞肠办别谤コミュニティ近况
Akihiro Suda
?
闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用
闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用
闯补辫补苍罢补虫颈における厂补驳别尘补办别谤+αによる机械学习アフ?リケーションの本番运用
Tetsutaro Watanabe
?
决済金融から始めるデータドリブンカンパニー
决済金融から始めるデータドリブンカンパニー决済金融から始めるデータドリブンカンパニー
决済金融から始めるデータドリブンカンパニー
Tokuhiro Eto
?
JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例
Fumihiko Takahashi
?
ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉
ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉
ドリコムを支える课金ライブラリを支える闯别苍办颈苍蝉
Go Sueyoshi (a.k.a sue445)
?
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdf
Tomokazu Kizawa
?
翱厂厂コンソーシアム记念讲演(2017-07-10)
翱厂厂コンソーシアム记念讲演(2017-07-10)翱厂厂コンソーシアム记念讲演(2017-07-10)
翱厂厂コンソーシアム记念讲演(2017-07-10)
博宣 今村
?
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Tsunenori Oohara
?
明日からはし?めるネットワーク运用自动化
明日からはし?めるネットワーク运用自动化明日からはし?めるネットワーク运用自动化
明日からはし?めるネットワーク运用自动化
Taiji Tsuchiya
?
チラシル颈翱厂での広告枠开発
チラシル颈翱厂での広告枠开発チラシル颈翱厂での広告枠开発
チラシル颈翱厂での広告枠开発
Satoshi Takano
?
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
ICO
?

More from Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
Hiroyuki Ohnaka
?
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Hiroyuki Ohnaka
?
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Hiroyuki Ohnaka
?
颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话
颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话
颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话
Hiroyuki Ohnaka
?
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
Hiroyuki Ohnaka
?
惭补肠办别谤别濒の薄い本
惭补肠办别谤别濒の薄い本惭补肠办别谤别濒の薄い本
惭补肠办别谤别濒の薄い本
Hiroyuki Ohnaka
?
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
Hiroyuki Ohnaka
?
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
Hiroyuki Ohnaka
?
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
Hiroyuki Ohnaka
?
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
Hiroyuki Ohnaka
?
仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~
仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~
仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~
Hiroyuki Ohnaka
?
錬金术惭别别迟鲍辫へのお诱い
錬金术惭别别迟鲍辫へのお诱い錬金术惭别别迟鲍辫へのお诱い
錬金术惭别别迟鲍辫へのお诱い
Hiroyuki Ohnaka
?
「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」
「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」
「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」
Hiroyuki Ohnaka
?
闯顿碍9の真の目玉机能はこれだ!
闯顿碍9の真の目玉机能はこれだ!闯顿碍9の真の目玉机能はこれだ!
闯顿碍9の真の目玉机能はこれだ!
Hiroyuki Ohnaka
?
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
Hiroyuki Ohnaka
?
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記
Hiroyuki Ohnaka
?
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
?
Reading java-property-file-from-ruby
Reading java-property-file-from-rubyReading java-property-file-from-ruby
Reading java-property-file-from-ruby
Hiroyuki Ohnaka
?
厂蚕尝アンチパターン「ディプロマティック?イミュニティ」
厂蚕尝アンチパターン「ディプロマティック?イミュニティ」厂蚕尝アンチパターン「ディプロマティック?イミュニティ」
厂蚕尝アンチパターン「ディプロマティック?イミュニティ」
Hiroyuki Ohnaka
?
颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化
颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化
颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化
Hiroyuki Ohnaka
?
remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
Hiroyuki Ohnaka
?
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Hiroyuki Ohnaka
?
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Hiroyuki Ohnaka
?
颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话
颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话
颁丑别蹿と滨迟补尘补别をニコイチして础苍蝉颈产濒别にマイグレーションした话
Hiroyuki Ohnaka
?
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
Hiroyuki Ohnaka
?
惭补肠办别谤别濒の薄い本
惭补肠办别谤别濒の薄い本惭补肠办别谤别濒の薄い本
惭补肠办别谤别濒の薄い本
Hiroyuki Ohnaka
?
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
Hiroyuki Ohnaka
?
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
Hiroyuki Ohnaka
?
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
Hiroyuki Ohnaka
?
仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~
仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~
仮想通货始めました~骋别迟丑ではじめる贰迟丑别谤别耻尘~
Hiroyuki Ohnaka
?
錬金术惭别别迟鲍辫へのお诱い
錬金术惭别别迟鲍辫へのお诱い錬金术惭别别迟鲍辫へのお诱い
錬金术惭别别迟鲍辫へのお诱い
Hiroyuki Ohnaka
?
「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」
「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」
「骋别产と厂辫辞肠办ではじめるシステムテスト自动化」
Hiroyuki Ohnaka
?
闯顿碍9の真の目玉机能はこれだ!
闯顿碍9の真の目玉机能はこれだ!闯顿碍9の真の目玉机能はこれだ!
闯顿碍9の真の目玉机能はこれだ!
Hiroyuki Ohnaka
?
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
Hiroyuki Ohnaka
?
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記
Hiroyuki Ohnaka
?
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
?
Reading java-property-file-from-ruby
Reading java-property-file-from-rubyReading java-property-file-from-ruby
Reading java-property-file-from-ruby
Hiroyuki Ohnaka
?
厂蚕尝アンチパターン「ディプロマティック?イミュニティ」
厂蚕尝アンチパターン「ディプロマティック?イミュニティ」厂蚕尝アンチパターン「ディプロマティック?イミュニティ」
厂蚕尝アンチパターン「ディプロマティック?イミュニティ」
Hiroyuki Ohnaka
?
颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化
颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化
颁滨サーバーと厂肠丑别尘补厂辫测でデータベースのドキュメント作成を自动化
Hiroyuki Ohnaka
?

辫补肠迟-箩惫尘ではじめるコンシューマー駆动契约

  • 1. #ccc_g11 Copyright 2017 Hiroyuki Onaka この作品は クリエイティブ?コモンズ 表示 4.0 国際 ライセンスの下に提供されています。 pact-jvmではじめる コンシューマー駆動契約 2017/4/24 JJUG ナイト?セミナー「テスティング特集」 大中浩行(@setoazusa)
  • 2. #ccc_g11 Copyright 2017 Hiroyuki Onaka 最近よく聞く話 ? ユニットテスト ? 「このコンポーネントのテストモックだらけでわ かりづらいんですけど…」 ? エンドツーエンドのテスト ? 「テストケースが増えてきてメンテナンスがつら いです…」
  • 3. #ccc_g11 Copyright 2017 Hiroyuki Onaka 今日は、そんな自動テストに悩むみなさんへの 処方箋として、「コンシューマー駆動契約」に ついてお話しします。
  • 4. #ccc_g11 Copyright 2017 Hiroyuki Onaka 問題点の整理
  • 5. #ccc_g11 Copyright 2017 Hiroyuki Onaka モックか直接呼び出すか、それが問題
  • 6. #ccc_g11 Copyright 2017 Hiroyuki Onaka 今までなら、モックを使うかどうかの判断は簡単 だった
  • 7. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「マイクロサービスアーキテクチャー」 By Paul Downey (CC-BY 2.0) https://www.flickr.com/photos/psd/13109673843
  • 8. #ccc_g11 Copyright 2017 Hiroyuki Onaka 複雑になるサービスの依存関係 BY Rose and Trev Clough(CC-BY SA 2.0) http://www.geograph.org.uk/photo/1490900
  • 9. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「なんかモックだらけになるんですけど…」 By Matthew Black from London, UK (325000 Uploaded by oxyman) [CC BY-SA 2.0 (http://creativecommons.org/licenses/by-sa/2.0)], via Wikimedia Commons https://commons.wikimedia.org/wiki/File%3AMock_up_of_a_British_Rail_Class_325_cab_at_the_National_Railway_Museum.jpg
  • 10. #ccc_g11 Copyright 2017 Hiroyuki Onaka よろしい、ならばエンドツーエンドだ
  • 11. #ccc_g11 Copyright 2017 Hiroyuki Onaka エンドツーエンドテストつらい… ? データのセットアップつらい… ? 実行時間つらい… ? コード何もいじってないのにテスト落ちた、 つらい… ? 昔あった「結合一発勝負」とどう違うんや
  • 12. #ccc_g11 Copyright 2017 Hiroyuki Onaka ? 各種パブリッククラウド上でのサービス構築 に代表されるように、テストを書くときに依 存するサービス/ミドルウェアが増えた。 ? マイクロサービスアーキテクチャーがその流 れを加速している。
  • 13. #ccc_g11 Copyright 2017 Hiroyuki Onaka それにもかかわらず、テストをはじめとして開 発の方法論がいわゆる三層アーキテクチャーに 最適化されすぎているが故の問題。
  • 14. #ccc_g11 Copyright 2017 Hiroyuki Onaka ではどうするか
  • 15. #ccc_g11 Copyright 2017 Hiroyuki Onaka v Sam Newman(著) 佐藤直生(監訳) 「マイクロサービスアーキテクチャ」
  • 16. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「ストーリーではなくジャーニーをテストする」 「これに対抗する最善の方法は、少数の中核となるジャー ニーに焦点を絞ってシステム全体をテストする方法です。こ の中核となるジャーニーで対象になっていない機能は、互い に分離してサービスを分析するテストで対処する必要があり ます。このジャーニーは相互に合意され、共同で所有される 必要があります。音楽専門店の例では、CD の注文、商品の 返品、新規顧客の作成といった(高価値な対話であり極めて 少数の)動作に焦点を絞るでしょう。」 Sam Newman(著) 佐藤直生(監訳) 「マイクロサービスアーキテクチャ」
  • 17. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「ストーリーではなくジャーニーをテストする」 どうやって…?
  • 19. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「テスト自動化ピラミッド」 Mike Cohn 「Suceeding with agile」
  • 20. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「テスト自動化ピラミッド」 ? テスト自動化のレイヤーを「UI」 「Service」「Unit」の3つに分類したもの。 ? 「Service」に対するテストが、アプリケー ションのインターフェスに対するテストを、 UI(ユーザーインターフェース)を迂回して実 行することが特徴。
  • 21. #ccc_g11 Copyright 2017 Hiroyuki Onaka マイクロサービスアーキテクチャーにおけるサー ビステスト ? 外部に対するサービス呼び出しをモック化した 上で、個々のサービスの機能に対して、ユー ザーインターフェースを迂回して実行する。 ? ユニットテストよりも広い範囲をカバーするテ ストを、エンドツーエンドのテストよりも安定 かつ高速に実行できる。
  • 22. #ccc_g11 Copyright 2017 Hiroyuki Onaka ? それでは、サービステストを実現する手段と してのコンシューマー駆動契約とその実装で あるpact-jvmについて見てみましょう。
  • 23. #ccc_g11 Copyright 2017 Hiroyuki Onaka コンシュー マー駆動契約 とPact
  • 24. #ccc_g11 Copyright 2017 Hiroyuki Onaka コンシューマー駆動契約 ? クライアント(コンシューマー)がサービス(プ ロバイダー)に対してどのような振る舞いを 期待するかを記述したファイル(エクスペク テーション)を作成する。 ? エクスペクテーションは、クライアントのビ ルド上で作成される。
  • 25. #ccc_g11 Copyright 2017 Hiroyuki Onaka ? サービスは、クライアントからエクスペク テーションを受け取り、自らがエクスペク テーションの通り振る舞うかを、サービスの ビルドの中で検証する。 ? エクスペクテーションを作成する過程と検証 する過程が、分割されていることが特徴。
  • 26. #ccc_g11 Copyright 2017 Hiroyuki Onaka Pact ? オーストラリアのオンライン不動産サービス RealEstate.com.auで開発された、コン シューマー駆動契約を使用したテストツール がオープンソース化されたもの。 ? https://docs.pact.io/
  • 27. #ccc_g11 Copyright 2017 Hiroyuki Onaka ? 当初はRubyで開発されていたが、その後他 の言語へも移植。 ? エクスペクテーションがJSONで記述されて いて、特定の言語からは独立したフォーマッ トになっていることが特徴。
  • 28. #ccc_g11 Copyright 2017 Hiroyuki Onaka pact-jvm ? PactのJVM言語向け移植版 ? https://github.com/DiUS/pact-jvm
  • 29. #ccc_g11 Copyright 2017 Hiroyuki Onaka サンプルの解 説
  • 30. #ccc_g11 Copyright 2017 Hiroyuki Onaka ? 動物園で飼育されている動物のモデルを返す サービス ? そのサービスを使用して動物園の情報を扱うク ライアント ? サンプルコードは以下にあります https://github.com/azusa/pact-jvm- example
  • 31. #ccc_g11 Copyright 2017 Hiroyuki Onaka Animal Service Consumer (Zoo App) Provider (Animal Service) Animal Service Client
  • 32. #ccc_g11 Copyright 2017 Hiroyuki Onaka GET /animals/serval { "animals": [ {"id": 1, "name": "サーバルちゃん"} ] }
  • 33. #ccc_g11 Copyright 2017 Hiroyuki Onaka プロバイダーとしてのAnimal Service
  • 36. #ccc_g11 Copyright 2017 Hiroyuki Onaka エクスぺくてーションの出力 クライアントでテストを実行すると、 target?pacts?test_consumer- test_provider.json に、JSONが出力されます。
  • 40. #ccc_g11 Copyright 2017 Hiroyuki Onaka サービス側のテスト エクスペクテーション(先ほどのJSON)をコン シュマー(クライアント)から受け取って、プロ バイダー(サービス)のビルドで、サービスの振 る舞いを検証します。
  • 42. #ccc_g11 Copyright 2017 Hiroyuki Onaka エクスペクテーションとの マッピング アプリケーションの起動 テスト対象のポートの指定
  • 43. #ccc_g11 Copyright 2017 Hiroyuki Onaka 実行結果
  • 44. #ccc_g11 Copyright 2017 Hiroyuki Onaka コンシュー マー駆動契約 のポイント
  • 45. #ccc_g11 Copyright 2017 Hiroyuki Onaka コンシューマー駆動契約のポイント ? 検証の厳密さ ? Provider Stateの扱い ? エクスペクテーションの引き渡し
  • 46. #ccc_g11 Copyright 2017 Hiroyuki Onaka 検証の厳密さ 例えば、エクスペクテーションとしてレスポン スがapplication/jsonというContent-Typeを返 すことを期待した場合。 サービス(プロバイダー)がapplication/json; charset=uif-8というContent-Typeを返した場 合、機能的には等価だが検証には失敗する。
  • 47. #ccc_g11 Copyright 2017 Hiroyuki Onaka Provider Stateの扱い エクスペクテーションの検証時には、プロバーダー (サービス)のバックエンドのデータベースや、対向 先のサービスのモックをセットアップする必要があ ります。 よって、クライアントのテストとサービスのテスト が、テストデータの関係を通じて密結合することに なります。
  • 48. #ccc_g11 Copyright 2017 Hiroyuki Onaka 上記二つの理由により、クライアントとサービ スの間のやりとりを全て検証するのではなく、 サービスのクライアントの契約として必要な部 分に検証を絞る必要があります。
  • 49. #ccc_g11 Copyright 2017 Hiroyuki Onaka エクスペクテーションをサービス側で検証する には、クライアントが作成したエクスペクテー ションをサービス側に引き渡す必要があります。 ? CIサーバーの成果物(Artifact)で引き渡す ? Pact Brokerを使用する ? https://github.com/bethesque/pact_broker
  • 51. #ccc_g11 Copyright 2017 Hiroyuki Onaka コンシューマー駆動契約の使いどころ ? 正直、悩ましい ? サービス側をリファクタリングした時に、クラ イアント側でのテストなしでクライアントと サービス側のインターフェースを検証できると いうのはメリット ? だが、サービス間の依存関係がそれなりに複雑 でない場合は、オーバースペックではないのか
  • 52. #ccc_g11 Copyright 2017 Hiroyuki Onaka ? 「テスト自動化ピラミッド」の考え方はコン シューマー駆動契約を導入しなくても有効 ? アプリケーションのレイヤーそれぞれにどの ようなテストを書き、テストの網をはってリ スクを潰して行くかを考えていく中で、コン シューマー駆動契約の考え方も生きてくる。
  • 53. #ccc_g11 Copyright 2017 Hiroyuki Onaka まとめ ユニットテストとエンドツーエンドテスト双方 を補完し、クライアントとサービス相互のイン ターフェース仕様の検証に絞った使い方が出来 るかが、コンシューマー駆動契約を推進する上 でのポイントになります。
  • 54. #ccc_g11 Copyright 2017 Hiroyuki Onaka 情報源 ? Pactのドキュメント ? https://docs.pact.io/ ? 実践 Pact:マイクロサービス時代のテストツール ? http://techlife.cookpad.com/entry/2016/06/28/1642 47 ? すいーとみゅーじっく vol.1 TDDってなんだ ? https://fieldnotes.booth.pm/items/484459
  • 55. #ccc_g11 Copyright 2017 Hiroyuki Onaka 「Testing Java Microservices」 ? 2017年夏出版予定 ? http://www.manning.com/books/testing- java-microservicess
  • 56. #ccc_g11 Copyright 2017 Hiroyuki Onaka ありがとうございました! ? 大中浩行(Onaka,Hiroyuki) ? @setoazusa ? グロースエクスパートナーズ株式会社 アーキテクチャソリューション部 テクニカルリード ? http://hiroyuki.fieldnotes.jp/