クラウドネイティブのアプリや技術に関わる開発者にとって、ソフトウェアのテストと品質保証は重要な課題です。昨今、CI/CD(継続的インテグレーション/継続的デリバリー)パイプラインをコードが通過する際のテストには、「シフトレフト」の考え方が組み込まれており、DevOpsをはじめとする新しい開発手法が、品質保証の方法論にも影響していることが分かります。
従来の品質テストの手法ではクラウドのスピードについていけない
今日のアプリはエンドツーエンドで開発・運用されています。製品ライフサイクルの早い段階でテストを実施して潜在的なバグを見付けることが時間とコストを削減し、結果的にお客さまの満足度を高めます。
さらに、エンドツーエンドのAPI(Application Programming Interface)テストやブラウザーテストがCI/CDパイプラインに組み込まれ、テストと品質保証の範囲が拡大していることも近年の傾向と言えます。さまざまなブラウザー上でコードがどのように動作するか、また、重要なデータソースとどのように相互作用するかの品質テストがプロセスの初期段階で実施されるようになったことで、ユニットテストやセキュリティテストなどのプロセスにシフトレフトが反映され、品質保証全体に対する新たな考え方が生まれました。
企業のIT環境がクラウドに移行し、DevOpsに沿ったアジャイル開発手法の採用が広がるにつれ、コードを迅速にリリースすることと、各リリースで最高レベルの品質を維持することという、相反する要求が生じるようになりました。
手作業による従来のテスト手法は、アジャイル開発のワークフローに対応したものではなく、コードを本番環境にデプロイする前に個別にテストを行う、従来のウォーターフォール開発をサポートするものでした。特定の品質保証チームが本番直前に全てのテストを担当するとクラウド環境での開発スピードを妨げることになり、アジャイル開発においては最適なアプローチとは言えません。このような理由からテストは、開発プロセスの初期段階へとシフトレフトされ、各エンジニアリングチームによって手動で行われています。
クラウドネイティブな開発によりテストはCI/CDパイプラインにシフト
アジャイル開発の一環としてCI/CDが活用され、コードが常にデプロイ可能な状態に置かれるようになりました。コードがCI/CDパイプラインを通過する時、開発者は早い段階でバグを確実に把握したいと考えますし、そのために、より早期に、より頻繁にテストが行われるようになりました。
特に、CIプロセスの構築を通してエンドツーエンドのテストを行うことの必要性が高まっています。例えばAPIテストでは、HTTPリクエストとAPIコールをリンクすることで、エンドツーエンドのワークフローを検証することができ、また、世界中の異なる拠点からシステムの全レイヤーを検証することができます。一方、ブラウザーテストでは、重要なトランザクションにおけるユーザーの視点を捉え、ユーザーインターフェース(UI)の変更がウェブアプリケーションに与える影響を把握することができます。
開発ライフサイクルの早い段階でバグを修正する方が、バグが複雑化して影響範囲が大きくなってから修正するよりはるかにコストが少ないため、この2つのテストをCI/CDパイプラインに移行することで、時間とコストを削減することができるのです。

また、他のエンジニアによる手作業での検証ではなく、多くの問題を開発者自身が発見できるようになります。開発者が自らコードを修正し、テスト環境に再デプロイすることができるようになるため、バグを発見するのに必要なサイクルが組織全体としては減少します。こうして手戻りや不具合の有無が早期に発見されれば、開発者は製品の価値を高めることに専念できるようになります。