SlideShare a Scribd company logo
1 of 56
Download to read offline
#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

VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMyy 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
 
静的解析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 javafxtorutk
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化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
 
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめTDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ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
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略Masaki Nakagawa
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ将 高野
 

What's hot (20)

VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
 
Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介Klocwork カスタムチェッカー紹介
Klocwork カスタムチェッカー紹介
 
静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応
 
Klocworkのご紹介
Klocworkのご紹介Klocworkのご紹介
Klocworkのご紹介
 
静的解析のROI
静的解析のROI静的解析のROI
静的解析のROI
 
静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携静的解析Klocwork とJenkins CIの連携
静的解析Klocwork とJenkins CIの連携
 
Klocwork 2017.1アップデート
Klocwork 2017.1アップデートKlocwork 2017.1アップデート
Klocwork 2017.1アップデート
 
Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめTDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
 
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門
 
Klocwork 2017.0アップデート
Klocwork 2017.0アップデートKlocwork 2017.0アップデート
Klocwork 2017.0アップデート
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略
 
Tddのすゝめ
TddのすゝめTddのすゝめ
Tddのすゝめ
 

Similar to pact-jvmではじめるコンシューマー駆動契約

インターネット生放送を支える技術としくみ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
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するには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 ContractTakuya Iwatsuka
 
Dockerコミュニティ近況
Dockerコミュニティ近況Dockerコミュニティ近況
Dockerコミュニティ近況Akihiro Suda
 
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用Tetsutaro Watanabe
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例Fumihiko Takahashi
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfTomokazu Kizawa
 
OSSコンソーシアム記念講演(2017-07-10)
OSSコンソーシアム記念講演(2017-07-10)OSSコンソーシアム記念講演(2017-07-10)
OSSコンソーシアム記念講演(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-ohr486Tsunenori Oohara
 
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化Taiji Tsuchiya
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発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
 

Similar to pact-jvmではじめるコンシューマー駆動契約 (20)

インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版
 
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 注目セッションまとめ
 
ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するには
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
 
Spring I/O 2018 報告会
Spring I/O 2018 報告会Spring I/O 2018 報告会
Spring I/O 2018 報告会
 
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
 
Dockerコミュニティ近況
Dockerコミュニティ近況Dockerコミュニティ近況
Dockerコミュニティ近況
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdf
 
OSSコンソーシアム記念講演(2017-07-10)
OSSコンソーシアム記念講演(2017-07-10)OSSコンソーシアム記念講演(2017-07-10)
OSSコンソーシアム記念講演(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
 
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発
 
いままでの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...
 

More from 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
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話Hiroyuki Ohnaka
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル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+typescriptHiroyuki 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
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~Hiroyuki Ohnaka
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘いHiroyuki Ohnaka
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」Hiroyuki Ohnaka
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!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-rubyHiroyuki Ohnaka
 
SQLアンチパターン「ディプロマティック・イミュニティ」
SQLアンチパターン「ディプロマティック・イミュニティ」SQLアンチパターン「ディプロマティック・イミュニティ」
SQLアンチパターン「ディプロマティック・イミュニティ」Hiroyuki Ohnaka
 
CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化Hiroyuki Ohnaka
 

More from Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
 
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 ...
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記
 
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」
 
Reading java-property-file-from-ruby
Reading java-property-file-from-rubyReading java-property-file-from-ruby
Reading java-property-file-from-ruby
 
SQLアンチパターン「ディプロマティック・イミュニティ」
SQLアンチパターン「ディプロマティック・イミュニティ」SQLアンチパターン「ディプロマティック・イミュニティ」
SQLアンチパターン「ディプロマティック・イミュニティ」
 
CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
 

pact-jvmではじめるコンシューマー駆動契約

  • 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/