テストの適用
InfoQ ホームページ ニュース クラウドでのテスト駆動開発の適用
この商品は日本語で表示されます
2023 年 5 月 25 日 4 分で読む
による
ベン・リンダース
クラウドでは、アプリケーション開発は付随するインフラストラクチャとエンドツーエンドで処理できます。 これにより、アプリケーション全体でテスト駆動開発 (TDD) とリファクタリングを使用できるようになり、メンテナンス コストを削減できます。
Michal Svoboda は XP 2023 でクラウド アプリのテスト駆動開発について講演します。このカンファレンスは 6 月 13 日から 16 日までオランダのアムステルダムで開催されます。
クラウド アプリの場合、アプリケーションは、それに付随するインフラストラクチャとともに、一貫した 1 つのコードとして開発および展開できます。 Svoboda 氏によると、「インフラストラクチャ」を別個の要素として削除することで、TDD やリファクタリングなどのアジャイル エンジニアリング手法をクラウド リソースを含むアプリ全体の範囲に適用できるようになります。
クラウドの遅延と非同期の性質が問題になる場合があります。 リソースのプロビジョニングやタイムアウトの経過を待機すると、迅速な TDD サイクルが妨げられます。 Svoboda 氏は、増分更新モデルに切り替えること、つまり、各テストの終了時にリソースを破棄せず、統合する場合のみクリーンなデプロイメントを行うことを提案しています。
テストの高速化テクニックは、TDD のテクニック集から抜粋されました。 状態ベースのテストを戦術的に使用することや、コードの変更された部分のみをテストすることは、いくつかの例になります。 テストにおけるハードルは、開発サイクル全体に有益なフィードバックを提供することを覚えておくとよいでしょう。 このフィードバックにより、私たちはアーキテクチャと手順の選択を慎重に検討するようになりました。
Svoboda 氏によると、TDD はソフトウェア TCO の大きな部分を占めるアプリのメンテナンス コストを削減します。 TDD を使用すると、独自のコードであれ、クラウド リソースの使用であれ、何年後でも、どこにでも簡単に機能を追加したりリファクタリングしたりできます。
InfoQ は、TTD を使用したクラウド開発について Michal Svoboda にインタビューしました。
InfoQ: クラウドはインフラストラクチャのプロビジョニング方法にどのような影響を与えましたか?
ミハル・スヴォボダ : API を通じて、クラウド リソースを完全に自動化された方法で作成および破棄できます。 (厳密に言えば、これはクラウドだけではありません。クラウドプロバイダーは、この機能を非常にアクセスしやすくしているだけです。)アプリケーションから独立して存在するサーバーやネットワークのような「インフラストラクチャ」について考える必要はありません。 「インフラ」には特別なアプローチは必要なくなりました。
クラウドは、従来のインフラストラクチャに加えて、ストレージ、機能、ストリームなどの単一専門サービスを提供します。 多くのクラウド アプリはクラウド内で実行されるだけではなく、クラウドで構成されます。
InfoQ: クラウド アプリケーションのテスト駆動開発はどのように行っていますか?
スヴォボダ : クラウド アプリの TDD は、他のアプリの TDD と似ています。 コンストラクターや関数を呼び出してメモリ内にオブジェクトを作成する代わりに、API を呼び出してクラウド内にリソースを作成します。 ストリーム リソースの「配置、動作、アサート」テストを以下の疑似コードに示します。
[ストリームの書き込みと読み取りができることをテスト]
これは非常に単純な機能テストです。 状態ベースのテストは、リソースの「構成を照会」する API 呼び出しを使用して実行できます。 より複雑なリソースの設定も、同じ原理を使用してテストできます。
TDD に従って、最初にテストを作成し、失敗させ、その後に実装を行います。 重要なのは、フィードバックに耳を傾け、テストの困難を開発の原動力にできるようにすることです。 私たちのテクノロジー、アーキテクチャ、手順の選択は、テストのしやすさに基づいています。
InfoQ: どのような課題に直面し、どのように対処しましたか?
スヴォボダ : 利用可能なツールに問題がありました。 このクラウド上での TDD アプローチが適切に機能するには、リソース デプロイメント コードが、選択したプログラミング言語で第一級のものである必要があります。 最新のツールは、「クラウド Makefile」方式で独自の言語でモデルに対するコマンドライン インターフェイスを提供します。 これらのツールは「個別のインフラストラクチャ」パラダイムに従っているため、通信が面倒になる場合があります。 これは開発の初期段階でも素晴らしいフィードバックであり、ツールとプロバイダーの決定の方向性を決定しました。