Functional Testingとは。

共同執筆者

Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Functional Testingの定義

Functional Testingは、指定された要件に基づいてアプリケーションの主要な機能が期待どおりに動作するかどうかをVerifyするソフトウェア・テスト・アプローチです。

ソフトウェア開発には、さまざまな種類のソフトウェア・テストがあります。それぞれ、少しずつ異なるアプローチでタスクに取り組みます。Functional Testingは、ユーザー体験の概念に最も近いものであり、1つの重要な質問に焦点を当てます。ソフトウェアの主要な機能が、指定された要件に従って、期待通りに動作するかということです。

ソフトウェアの品質は、多くの場合、ソフトウェア開発ライフサイクルの一部としてさまざまな角度から評価されます。Functional Testingに関する限り、テスターは基本機能を検証し、ソフトウェア機能がビジネス要件を十分にサポートできることを確認する必要があります。テスト実行により、DevOpsは実際の成果と期待される成果を比較できます。

テストは開発プロセスの重要な部分であり、Functional TestingはQAチームが事前の品質保証を行うことを可能にすることで、実際にワークフローをリリースする際にどのように動作するかを明確に把握できます。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

Functional Testingはどのように機能するか。

全体的なストラテジーの一環として採用されるソフトウェア・テストの種類に応じて、さまざまな運用要素にスポットライトが当てられます。Functional Testingは、さまざまなソフトウェア・モジュール間の全体的な互換性を評価します。これは、期待されるユーザー・インタラクションやユーザー・インターフェースの実現可能性など、他の関連側面に直接影響します。

Functional Testingで提供されるテスト環境は、ブラックボックスの一例と考えられており、テスターは(ホワイトボックス・テストに見られるような)システムの内部構造に関する洞察を得ることはなく、その代わりに、システムとそのパイプラインが希望通りに機能するかどうかに関する「合格/不合格」のレポートを渡されます。

Functional Testingの6つのステップ

通常、Functional Testingは、次の6つのステップを必要とするテスト・プロセスに従って行われます。

  1. ソフトウェアの実行に必要なさまざまな機能を特定します。
  2. 機能要件に応じてインプット・データを作成します。
  3. 機能仕様ごとに期待されるアウトプットを確立します。
  4. テスト・ケースを実施しましょう。
  5. 実際のアウトプットが期待されるアウトプットとどのように比較されるかを評価します。
  6. ソフトウェア・アプリケーションが期待どおりに動作するかどうかを判断します。
アプリケーション開発

さあ、クラウドでエンタープライズ・アプリケーション開発を始めましょう

この動画では、Peter Haumer博士が、IBM Z Open Editor、IBM Wazi、Zoweなどのさまざまなコンポーネントとプラクティスを実演しながら、ハイブリッドクラウドでの最新エンタープライズ・アプリケーション開発について説明します。

Functional Testingの種類

ソフトウェア・テスト・モデルにさまざまな種類があるのと同様に、Functional Testingにもさまざまな種類があります。その数は膨大であり、これはそのうちのほんの一部に過ぎません。Functional Testingの種類には幅広いニュアンスが含まれており、ここではアルファベット順に記載されています。

アドホック・テスト

ソフトウェア・テストでは、テスターは、正式なテスト・プロセスに従って、アドホック・テストを行うことがよくあります。この非公式な形式の探索テストは、テスターのスキルと直感に基づいて行われます。定義された構造はありません。代わりに、テスターの直感が、使用されるテスト手法を推進します。

例:開発者とテスターが協力してモジュールやアプリの改善に取り組む「バディ・テスト」。この形式のアドホック・テストでは、通常、テスターは修正プログラムが必要なバグやその他の要素を見つけますが、開発者はその修正プログラムに集中します。

APIテスト

アプリケーション・プログラミング・インターフェース(API)は、ソフトウェア開発を可能にし、異なるアプリやシステムの接続を可能にします。APIテストにより、API接続ポイントが必要に応じて動作できるようになります。また、ユーザーの権限やAPIを介したデータの管理方法に関する監視も可能です。

例:「ヘッドレス・テスト」は、ユーザー・インターフェースまたはユーザー・インターフェースのインプットフィールドが欠落している場合に行われます。このような状況では、多くの場合、インターフェース・サービスまたはアプリと共有されるインプット・データは、APIテストを通じてテストするのが最適です。

複雑なテスト・シナリオ

多くの組織は、テスト・プロセスに実際のユーザーの実際のエクスペリエンスを真に反映させたいと考えています。このような企業の場合、複雑なテスト・シナリオは望ましいレベルの精度を提供しますが、複雑さが増すと、実行するための事前の作業が増えてしまうということを指摘しなければなりません。

例:オンライン注文処理はシームレスなオペレーションのように見えます。その舞台裏では、買い物客のオンラインカートにどれだけ簡単に商品を追加できるか、割引の適用などの機能がどれだけ迅速に統合されるか、そのような購入がどれだけスムーズに行われるかなど、テストすべきプロセスがたくさんあります。

統合テスト

統合テストは、問題の早期検知やテストカバレッジの広さなどのメリットから、多くの場合単体テストと同時に実施されます。データフォーマットの一致を助けることに加えて、統合テストはマイクロサービスに対する洞察とマイクロサービスの性能を提供します。

例:注文管理システムが、支払い処理を管理する何らかのモジュールと統合されているとします。統合テストは、2つのエンティティー間で将来、不具合が発生する可能性があることを示し、開発者は統合問題を早期かつ低コストで修正するための統合テストの設計図を得ることができます。

回帰テスト

完璧な世界では、Functional Testingに合格すれば、必ず合格します。しかし、現実ではそうではありません。ソフトウェアは、新しいコードの変更で、知らないうちにエラーを引き起こす可能性のある開発者から、ソフトウェアに影響を受けることがよくあります。回帰テストは、安定したベースラインが維持されていることを確認します。

例:コードが変更されるたびに、いずれかの形式または別の形式の回帰テストが使用されます。これには、バグの修正プログラムや新機能の導入後、またはソフトウェアの更新後に行われる関連する更新が含まれます。

正気性テスト

健全性テストは、比較的小さな変更や修正プログラムの追加によって既存の機能が損なわれていることを確認する迅速かつアジャイルな方法です。健全性テストは、新しい機能がシステムの他の機能を損なわないことを確認する簡単な方法として使用される傾向があります。

例:回帰テストと同様、健全性テストでは、性能の改善を検証し、基本的なオペレーションを確認し、システムが期待どおりに動作していることを確認するために、システムを以前の機能に「巻き戻す」ことができます。コードが変更されるたびに、いずれかの形式または別の形式の回帰テストが使用されます。これには、バグの修正プログラムや新機能の導入後、またはソフトウェアの更新後に行われる関連する更新が含まれます。

Smokeテスト

「煙があるところに火がある」という古いことわざがあります。この格言が「Smokeテスト」という名前にインスピレーションを与えたようです。Smokeテストは開発プロセスの早い段階で実施され、実行されると、エンド・ツー・エンドの機能を判断します。機能に障害が発生した場合、QAチームは必要な修正を行います。

:スモークテストは、継続的統合と継続的パイプラインを検証するために、新しいソフトウェアビルド(または大規模なコード変更)をデプロイする前の最終チェックとして使用できます。

システム・テスト

エンド・ツー・エンド・テストとも呼ばれるシステム・テストは、ソフトウェア・システム全体のソフトウェアがどのように連携して動作するかを評価する目的で機能します。システム・テストでは、多くの場合、特定のソフトウェア・システム内で連携して動作する場合とそうでない複数の個別のソフトウェア・システムの分析が含まれます。

例:エンド・ツー・エンドのシナリオでは、テスト実施者は完全なワークフローを評価することができます。オンライン小売オペレーションの場合、これは、元の注文書から全体の履行プロセスまで、利用者が体験する小売エクスペリエンスを意味する可能性があります。

単体テスト

単体テストは、小宇宙におけるテストの一形態です。ここでは、システム全体をテストするのではなく、限られたコードのみをテストしますコードのセクションは分離されたテスト環境で評価され、単体テストが失敗した場合は(テスト・データと機能目標との比較に基づいて)、システム全体のレベルで追加のテストを実行できます。

例:かなり基本的な計算要素は、単体テストによって適切にテストされます。摂氏温度を華氏温度に変換する単純な関数を考えてみましょう。テスト環境には、問題のコードと関連するテスト・ケースが含まれます。

ユーザー受け入れテスト

ソフトウェア・テストの後半段階として、ユーザー受け入れテストでは、作成されるソフトウェアの対象とする層を代表する人々によって実施される性能テストを組み込み、そこから学習することを目指します。これらのエンド・ユーザーは、テスト・プロセスにさらなる現実性をもたらします。

例:ソフトウェア・プランのユーザーは、次のサービス層にアップグレードし、全ての新しい機能を解き放つことができるようになります。ユーザー受け入れテストでは、ユーザーが主要な機能へのアクセスを予想どおり増加させることができることをVerifyします。

Functional TestingとNon-Functional Testingの比較

その名前が示すように、Non-Functional Testingは、通常は機能を確認するために重要とは見なされないアプリケーションの動作を評価します。それでも、よく整理された愉快なユーザー体験を提供することは、現在ではソフトウェア開発の不可欠な部分と考えられています。Non-Functional Testingでは、特にソフトウェアがより優れた拡張性を実証するために最大化されている場合に、潜在的なシステムの問題が明らかになります。

負荷テスト

負荷テストは、Non-Functional Testingの主要な形式の1つです。理論的には、システムは単一のシステム・リクエストを送信するのと同じ緊急性で、何千ものシステム・リクエストを処理できなければなりません。しかし、その論理は現実的な経験によって裏付けられていません。負荷テストは、システムがピーク負荷や極端なワークロードの急増に対応できるかどうかを確認するために機能します。

パフォーマンス・テスト

別の形式のNon-Functional Testingでは、性能に特に注意を払います。性能を向上させるには、システムがリクエストにスムーズかつ迅速に応答することが重要です。性能テストのテスト計画では、ユーザーがリクエストが処理されるまでの待ち時間を評価します。性能テストを慎重に作成すると、早い段階でレイテンシーを最小限に抑えることができます。

セキュリティー・テスト

データ・セキュリティーの重要性を考えると、ある形式のテストがこの現代の目的に的確に対応することは驚くべきことではありません。動的アプリケーション・セキュリティー・テスト(DAST)や静的アプリケーション・セキュリティー・テスト(SAST)などのセキュリティー・テスト手法は、テスターがセキュリティーの脆弱性をチェックするのに役立ちます。企業のセキュリティー・テストの方法は、潜在的な脅威に応じて選択されます。

ユーザビリティー・テスト

Non-Functional Testing・タイプの1つは、ユーザー体験(UX)の品質を重視するものです。ユーザビリティー・テストは、小規模での使用に最適な手動テスト・プロセスです。ただし、特にアプリケーションのローカライズなどの動きを実行する場合には、可能な限り適用する必要があります。人為的ミスの原因となる複雑性が伴う場合は危険が伴うことがあります。

Functional Testingツール

ほとんどのツールは異なるプラットフォームや種類のアプリケーションをサポートしているため、さまざまなFunctional Testingをすべて正確に追跡し続けるには作業がかかります。この急成長するマーケットプレイスに追いつく方法はありませんが(数百、場合によっては数千ものFunctional Testingが容易に製造されていると推定されています)、実績のある人気と認められたユーティリティーにおいて際立った存在となるツールをいくつかご紹介します。

  • Appium:Functional Testing・マーケットプレイスには多くのオープンソース・ツールが存在し、その中でもAppiumがトップを占めています。Appiumは複数のプログラミング言語をサポートしています。さらに、Appiumを使用すると、iOSとAndroidの両方のプラットフォームで、ネイティブなモバイルとWebおよびハイブリッド・アプリケーションを自動化できます。
  • Katalon Studio:オートメーション・プラットフォームであるKatalon Studioは、回帰テストやエンド・ツー・エンド・テストによって生成された成果を確立および評価するための手段を提供します。レコードおよびプレイバック機能とクロスプラットフォームの連携を特徴としています。
  • マイクロフォーカス統一Functional Testing(UFT):Micro FocusのUFTはもう一つの商用テストツールで、テスターにウェブサービス、アプリケーション・プログラミング・インターフェース(API)、グラフィカル・ユーザー・インターフェース(GUI)の利用を明確かつマルチプラットフォームで体験できる窓を提供します。
  • Playwright:Microsoftは、Webブラウザーを自動化するために、この商用フレームワークを開発しました。これは信頼性を強化することで知られています。Playwrightは現代のウェブの主要な機能をサポートしていますが、プログラミング言語を扱うための選択肢は限られています。
  • Selenium:オープンソース・フレームワークであるSeleniumは、最も人気のあるテスト自動化ツールの1つです。このブラウザベースのツールにより、テスターは、JavaScriptTM、NodeJS、Pythonなど、さまざまな一般的なプログラミング言語でテスト・スクリプトを作成して評価できます。
関連ソリューション
IBMのエンタープライズ向けJavaアプリケーション・サービス

Javaアプリケーションを開発および配信するためのフルマネージドのシングルテナント・サービス。

Javaアプリの詳細はこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。

DevOpsソリューションの詳細はこちら
エンタープライズ・アプリケーション開発サービス

クラウド・アプリケーション開発は、一度構築すれば、迅速に反復し、どこにでもデプロイできます。

アプリケーション開発サービス
次のステップ

IBM Cloudアプリケーション開発コンサルティング・サービスは、クラウド戦略を合理化するための専門家のガイダンスと革新的なソリューションを提供します。IBMのクラウドおよび開発のエキスパートと提携して、アプリケーションをモダナイズ、拡張、高速化し、ビジネスに変革をもたらします。

アプリケーション開発サービスの詳細はこちら IBM Cloudを無料で構築開始