◆◆DevOpsあれもこれも<第五回>◆◆

継続的テスト<Continuous Testing…

OpenText Japan  profile picture
OpenText Japan

7月 18, 20251 min read

この投稿を x に共有します。 LinkedIn に共有します。 メール送信先

継続的テスト<Continuous Testing>

CI(Continuous Integration : 継続的インテグレーション)、CD(Continuous Delivery : 継続的デリバリ)という言葉は既に広く浸透しており、システム開発にかかわる方であればご存じかと思います。

弊社OpenTextでは10年前からCT(Continuous Testing : 継続的テスト)という考えを推奨しており(その当時はHewlett Packard社でした)、現在までDevOpsにおける品質管理のを推進活動を続けています。

ここでいう継続的テストはxUnitに代表されるユニットテストだけにとどまらず、機能テスト/サービスのテスト/パフォーマンステストを開発の初期段階から計画し、イテレーションにおけるCI/CDプロセスにテストによる品質チェックを組み込むことによって、後半フェーズへの問題の持ち越しを防ぐ考え方です。

新しい開発手法やOS環境

継続的インテグレーションでは、定期的にビルドを実施してコンパイルエラーを取り除き、同時に静的ソースコード解析によってソースコード規約に違反しているコードや、パフォーマンス/脆弱性の問題を含んだコードを自動的に検出して早期修正を実施されるケースも多いと思います。ウォーターフォール開発では初期から実施可能なテストは静的なコード解析に限られていましたが、継続的にビルドを実施している現在ではユニットテストに加えて、画面の機能テストや負荷テストも実施可能な環境が整っていることになります。

また、開発したアプリが動作するOS(Windows、Linux, MacOS, iOS, Android)もクラウドとの兼ね合いを考えて早いサイクルで新しいバージョンがリリースされるようになっています。

開発手法やOSなどの環境面のサイクルが早くなった今、システムのテストも継続的に実施する必要があり、多くなったテスト回数に対応するためにはテスト自動化は必須と言えます。

図:継続的テスト(Continuous Testing)

継続的テストにおける画面の機能テスト

Agile開発を実施している環境でもっとも一般的なのは、xUnitの形式で呼び出し可能な画面の機能テストツールかもしれません。

その場合は、以下の図のようにGit等のソース管理サーバにテストスクリプトを保存し、CIツールのJobクライアントマシンに自動テストツールをインストールした状態にし、CIツールのJobによってテストスクリプトのダウンロードとテスト実施を実行します。

この場合、テスト結果として記録されるのは主に「成功」「失敗」の結果となるため、例えばテストが失敗した時にどの部分で失敗し、どこを修正すれば良いかなどはテスト結果を手作業でトレースする必要があるかもしれません。

図:xUnit形式の画面の機能テストツールをCIツールから使用する場合

テスト管理サーバと連動して自動実行可能なテスト自動ツールを使用する場合には、以下の構成で機能テストを「継続的テスト」にすることが出来ます。

図:テスト管理サーバと自動テストツールの組み合わせを使用する場合

テスト管理サーバの起用を使用することで、テストの成否とテスト結果レポート、バグ情報とのトレーサビリティ確保が可能となります。

継続的テストにおけるパフォーマンステスト

パフォーマンステストには、「負荷テスト」「ストレステスト」「スパイクテスト」など複数の種類がありますが、多く実施されているのは「負荷テスト」かもしれません。

その「負荷テスト」も、システム開発/テストの終盤で一度だけしか実施されていないのではないでしょうか。

図:従来のパフォーマンステスト

継続的テストにおいては開発の初期段階からパフォーマンステストのスクリプトを開発者が用意し、継続的にそのテストを実行することによってパフォーマンスの問題も早期に検出/対応し、そのスクリプトを後半の負荷テストでも使用することによって大規模な負荷テストの効率的な実施を目指します。

図:継続的パフォーマンステスト(Shift Everywhere)

後工程のテスト効率化も可能であることから、弊社ではこのプロセス全体をカバーするパフォーマンステストの考え方を、Shift Leftではなく「Shift Everywhere」と呼んでいます。

継続的テストにおけるサービスのテスト

Webサービスやマイクロサービスの形式で作成されたシステムが多くなってくると、画面部分とサービス部分を分けて開発することも可能となります。

呼び出されるサービスのテスト:開発の初期フェーズでサービスをテストする場合には、それを呼び出すスクリプトを作成して実行する方法や、サービスの定義を記述して呼び出すツールを使用する方法を使用することが可能です。

呼び出す画面のテスト:開発の初期フェーズで画面をテストする場合には、呼び出されるサービスのモックなどを作成し、それを呼び出す形で画面を実行します。サービスを仮想的に立ち上げることが可能なツール(Service Virtualization)を使用する場合には、サービスの定義を記述するか呼び出しをキャプチャするなどして、サービスのテストを作成します。

図:Web/マイクロサービス関連のテスト

この環境を用意することによって、初期フェーズで開発途中のサービスや画面がある場合にも、継続的テストによって品質のチェックを回すことが可能となります。

継続的テストにおける脆弱性のテスト

脆弱性に対する静的ソースコード解析のテストは一般的であり、パスワード的なものをクリアテキストで扱っている場合や、Web画面で入力値をチェックせずにそのまま別処理に使用しているケースなどを検出して修正方法を教えてくれます。ですが、Web画面の脆弱性は実際に画面を表示させて、問題を起こす可能性がある内容を入力してみないと判断出来ないことが多く、動的なチェックが非常に重要になります。

図:継続的な脆弱性テスト

Web画面の動的チェックはWebアプリの構造や攻撃手段、既知の脆弱性などの知識が必要となるため、セキュリティの専門家ではない開発者が自分でチェックするのは難しい場合も多くあります。

こちらも信頼性のある脆弱性診断ツールを活用することをお勧めいたします。

今回のまとめ

システム開発におけるテストは、非常に重要だとわかっていてもどうしても開発の作業に時間をとられて後工程にずれ込んだり、テスト不足になったりすることもあるかと思います。

加えて、テストを継続的に行うには同じテストを何度も実施する必要があるため、人手による作業では対応出来なくなり、自動テストツールの出番となります。

ツールは上手く使えば非常に便利なものではありますが、あくまで人を手助けするためのツールでしかありませんので、人間が考えて対応すべきところとツールで代替可能なところを見極めて、本当に重要な部分に人間がフォーカス出来る環境を構築することが大事なのだと考えます。

Share this post

この投稿を x に共有します。 LinkedIn に共有します。 メール送信先
OpenText Japan avatar image

OpenText Japan

OpenText™ は、情報管理ソフトウェアおよびサービスのグローバル・リーディングカンパニーです。 ビジネスクラウド、ビジネスAI、ビジネステクノロジーの包括的なスイートを提供し、企業が複雑化するグローバルな問題を解決できるよう支援しています。 オープンテキスト(NASDAQ/TSX: OTEX)の詳細については、https://www.opentext.com/ja-jpをご覧ください。

See all posts

著者の他の記事

AIのポテンシャルを最大限に引き出す

AIのポテンシャルを最大限に引き出す

最近の調査では、成熟した実践と強固な基盤が鍵となることが明らかになった。

10月 21, 2025

1 min read

OpenText Business Networkによるサプライチェーン・エクセレンスの実現:香港マキシムグループ

OpenText Business Networkによるサプライチェーン・エクセレンスの実現:香港マキシムグループ

香港マキシムグループは、アジア全域で食のパイオニア…

10月 01, 2025

1 min read

EDI vs. API:現代のサプライチェーンにおいて、両者が依然として不可欠な理由

EDI vs. API:現代のサプライチェーンにおいて、両者が依然として不可欠な理由

サプライチェーンがデジタル化・グローバル化・複雑化…

9月 26, 2025

1 min read