ソフトウェアアーキテクチャは過去30年間で大幅に進化し、ソフトウェアテストへのアプローチはその発達に追いつくために変化してこなければなりませんでした。本記事では、NashTechのシニアテストチームマネージャーであるVinh Phamが、今日のマイクロサービスを基盤とするアプリをテストするための最も効率的なアプローチについて解説します。
マイクロサービスとは?
マイクロサービスはソフトウェアアーキテクチャの一種です。基本概念は、1つのアプリケーションは多数の小規模な独立したサービス(マイクロサービスと呼ばれる)から構築されることです。各サービスは個別に実行、開発、および展開できるようにするアーキテクチャーです。グローバルではマイクロサービスを活用したアプリ開発の需要が高まっています。同時に、最先端のアーキテクチャであるが故にローンチまでのテストにおいても専門性が必要となっています。
マイクロサービスのテストにおける課題
ソフトウェアアーキテクチャは絶えず進化しています。1990年代のスパゲッティのようなデザインから、2000年代初頭までにラザニアのようなレイヤードアーキテクチャへと移行してきました。そして現在、ソフトウェアアーキテクチャは、ラビオリのようなイメージになっています。小さなパッケージ(マイクロサービス)がソースに浮かんでいるのです。
マイクロサービスアーキテクチャは、ソフトウェアアプリを、定義されたAPIを使用して相互に通信する一連の小さなサービスとして構築できるようにしました。従来の「画一主義」なアーキテクチャと比較すると、マイクロサービスアーキテクチャは、さまざまなプログラミング言語とテクノロジーを駆使してアプリを構築する柔軟性を提供しています。さらに、マイクロサービスアーキテクチャは、拡張性も向上させ、継続的インテグレーション / 継続的デリバリー(CI / CD)またはDevOpsアプローチにより適しています。
しかし、他の新しいアーキテクチャと同様、テストへの新しいアプローチが必要です。 マイクロサービスアーキテクチャの場合、テスト戦略は、サービスの通信方法、各サービスのセキュリティ、データの一貫性、各サービスが他のサービスに与える影響などの側面をカバーしなければなりません。機能テスト、非機能テスト、および各プロジェクトに合わせたツールを組み合わせる必要があります。また、コンポーネントサービスの個別のテストと、システム全体の動作をサポートする必要があります。
マイクロサービスアーキテクチャには、テストに関する課題も多くあります。 テストケースを正しく作成するには、各サービスを深く理解しなければなりません。さらに、各サービスが以下2点をどのように実行すべきかを明確に理解する必要があります。
使用中のAPIエンドポイントごとに明確な要求/応答が必要で、さらに第三者のアプリまたはパートナーからサービスを実行できる必要があります。
マイクロサービスにおける5段階のテスト
マイクロサービス基盤のアプリが正しく機能していることを確認するために、ユニット、統合、構成要素、契約、そして最初から最後までの動作のテストで構成される5段階のアプローチを適用します。
モックやスタブなどのテストダブルを使用して、構成要素のすべての依存関係を取り除きます。
コンポーネントの外部動作をテストします。
構成要素テスト
アプリの各部分(構成要素またはマイクロサービス)を個別にテストすることで、マイクロサービス基盤のアプリで頻繁に見られる複雑さを回避します。他のサービスのテストダブルまたはモックアップを使用して依存関係を置き換えることにより、各構成要素のみをテストします。 構成要素テストは、マイクロサービスのテストをより簡単に、より速く、より信頼できるものにするのに役立ちます。
統合テスト
構成要素、またはマイクロサービス間の通信パスと相互作用を実行して、依存関係が正しく機能していることを確認するための機会を提供します。ボトムアップ、トップダウン、またはサンドイッチ/ハイブリッドのアプローチを使用し、マイクロサービスが円滑に連携し、ビジネス要件を満たしているか否かをテストすることが出来ます。
契約テスト
マイクロサービスの明示的および暗黙的な契約が、公示されたとおりに機能することを確認できます。以下2つの視点から確認します。
マイクロサービスを使用する存在
マイクロサービスを提供する存在
契約テストは、契約の観点から公示されているとおりに機能するか否かを確認することに重点を置いています。つまり、APIを介して転送されるデータの属性または形式、および応答を確認することを意味します。この確認により、APIエンドポイントコードが予想どおりに実行され、 さらに、消費者契約主導のテストを使用して、消費者ワークフローのバグを発見することが出来ます。
最初から最後までの動作のテスト
アプリのプロセス全体とすべてのユーザーフローをテストして、ビジネスプロセスが正しくスムーズに機能し、要件を満たしていることを確認することを目的としたテストです。 このテストには、すべてのサービスとデータベース統合が含まれます。
マイクロサービスベースのアプリのすべての可動部分は、最初から最後までの動作テストでカバーされています。 また、サービス間のギャップをカバーし、マイクロサービス間の依存関係がテストされていることも確認します。
セキュリティとパフォーマンスのテスト
5つの主要なテストレイヤーに加えて、セキュリティテストを実行し、データ転送でのAPIの要求/応答が安全であることを確認しています。特に、マイクロサービスアプリで第三者のサービスが使用されている場合はこのテストを実行しています。
マイクロサービスアーキテクチャでは、パフォーマンステスト(または「負荷テスト」)が必要です。これは、アプリが分離されているものの、相互に依存している複数のサービスから構築されているためです。このアプリには、多くの場合、外部環境(PaaS)からの第三者サービスが含まれます。 これらがうまく機能しない場合は、アプリの全体的なパフォーマンスに大きな影響を与える可能性があるのです。
テストの自動化
マイクロサービス基盤のアーキテクチャでは、テストにおいて自動化が重要な役割を果たします。自動化により、漸進的なリリースとそれに続くサービスAPIバージョンの更新を通して、各テストレイヤーで回帰テストをすばやく簡単に実行して、アプリ全体が正しく機能していることを確認出来ます。
テストの自動化への投資収益率は、アプリアーキテクチャの詳細と変更の頻度によって異なります。 統合レイヤーのテストにPostmanやSoapUIなどのツールを使用すると有利な場合があります。
マイクロサービスについて、詳細の解説をご希望の方へ
NashTechソフトウェアテストサービスの詳細については、sales.japan@nashtechglobal.comに電子メールを送信してください。チームのメンバーから連絡させていただきます。