ソフトウェアテスト Advent Calendar 2016 - Qiitaの9日目エントリーです。
エラーが「自動的に」増殖するのがDevOps
To make error is human. To propagate error to all server in automatic way is #devops.
— DevOps Borat (@DEVOPS_BORAT) 2011年2月26日
継続的デリバリーの核心は、フィードバックのサイクルを素早く回すことにありますが、それはユニットテストのカバレッジが十分になければ不可能です。 A/Bテスト、オートスケール、カナリヤテスト、Blue-Green Deploymentなど、DevOpsを推進する上での各種プラクティスは、いずれも、プロダクトの品質が安定していることを前提としています。品質が安定していない状態でリリースサイクルを早く回してもバグが素早くデリバリーされるだけです。
サービス開発は、開発者だけで行うものでなく、プロダクトオーナー、QAエンジニア、インフラエンジニア、運用エンジニア、リモート開発チームなど、多数のステークホルダーが協調して行うものです。チーム相互の信頼をもたらすために必要なのは安定したプロダクトの品質であり、継続的インテグレーション(CI)を軸としたデリバリーのワークフローの確立のためには、自動化されたテストが足場として必要です。
迅速なサービス開発の手助けにならない自動化テスト
翻って現場に目を向けたときに、最近複数の現場で見聞きするのは、
- 必要とするミドルウェアや連携先サービスとの関係でテストがモックだらけになり、ユニットテストの可読性や保守性があがらない
- それを補完すべくエンドツーエンドのテストに取り組んでいるが、テストケースが増えてきてメンテナンスコストや実行コスト(時間)が増大している
というものです。各種パブリッククラウド上でのサービス構築に代表されるように、システムを構築し、テストを実装するときに依存するサービスやミドルウェアが増えたこと、そしてマイクロサービスアーキテクチャーがその流れを加速しています。
それに対して、テストをはじめとして開発の方法論はいわゆる三層アーキテクチャーにいまだに最適化されており、そのことが自動テストの普及の妨げになっています。
テスト自動化ピラミッドとサービステスト
Mike Cohnは書籍「Succeeding with Agile」の中で、テスト自動化の戦略をレイヤーを「UI」「Service」「Unit」の3つに分類し、「テスト自動化ピラミッド」と命名しています。「Unit」の層はいわゆるユニットテストに相当し、「UI」の層はエンドツーエンドのテストに相当します。このピラミッドの特徴は「Service」の層にあって、アプリケーションのインターフェースに対するテストを、UIを迂回して実行することです。
Succeeding with Agile: Software Development Using Scrum (Addison-Wesley Signature Series (Cohn))
- 作者: Mike Cohn
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2009/10/26
- メディア: ペーパーバック
- クリック: 63回
- この商品を含むブログ (3件) を見る
このピラミッド自体は一種の概念モデルですが、Sam Newmanは書籍「マイクロサービスアーキテクチャ」の中でこのモデルに着目しています。
- 作者: Sam Newman,佐藤直生,木下哲也
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/02/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
マイクロサービスアーキテクチャーにおけるサービステストとは、外部のサービス呼び出しをモック化した上で、個々のサービスの機能に対して、UIを迂回してテストを実行します。このことにより、ユニットテストよりも広い範囲をカバーするテストを、エンドツーエンドのテストよりも安定かつ高速に実行できることを目指しています。
まとめ
方向性としては、システムのコンポーネント間の関係、規模など、複雑度が増大するに伴い、自動化されたテスト、手動で行うテスト双方とも、レイヤーの分割を細かくして、テストのどこのレイヤーでどの品質を担保していくかを事前に設計した上で開発に望んでいくということになります。我が国では業界の生い立ちや歴史的背景から、ソフトウェア開発の職種とソフトウェアテストの職種の相互交流はまだはじまったばかりですが、開発エンジニアとテストエンジニアが共通の言語で会話しながら、システムの品質に対する責任を相互で分担できる未来が来ることを望みます。