QTP/UFT のビジネス プロセス テスト (BPT) フレームワーク

ビジネスプロセステストとは何ですか?

ビジネスプロセステスト(BPT) テスト ライフサイクルにおける複雑さ、時間の消費、労力を削減するために、ソフトウェア テスト プロセスをビジネス目標に合わせるプロセスです。ビジネス プロセス テストは、ビジネスと顧客の観点からソフトウェア アプリケーションの準備状況を確認するのに役立つエンドツーエンドのテストです。

BPTフレームワーク

BPT(ビジネスプロセステスト)フレームワーク は、Quality Center とともに使用される、マイクロに焦点を当てた組み込みの自動化フレームワークです。 BPT は、ビジネス アナリストや中小企業が自動化プロセスに取り組むのに役立ちます。 また、事前の自動化やコーディングの知識がなくても、自動化シナリオを設計し、要件に従って実行することもできます。

以下はBPTフレームワークの構成要素です。

  • コンポーネント
  • アプリケーションエリア
  • 流れ
  • ビジネスプロセステスト

コンポーネント: (ビジネス コンポーネントとも呼ばれます) は、AUT で事前定義された特定のタスクを実行する再利用可能な自動化ステートメントのセットです。 に似ています VBScript 関数と QTP アクションですが、BPT フレームワークで使用するように設計されています。

アプリケーションエリア: これは、ビジネス コンポーネントの開発に必要なすべてのリソースを含むリポジトリです。 リソースには共有オブジェクト リポジトリが含まれます。 再利用可能な関数ライブラリ…などこれは論理的なエンティティであり、ファイル システム内で物理的な存在を確認することはできません。

ビジネスプロセステスト: アプリケーションの特定のビジネス プロセスをテストするために設計された、ビジネス コンポーネントのシリアル フローで構成されるシナリオ。

フロー: 場合によっては、複数の BPT で同様のコンポーネントを同じ順序で使用する必要があります。 すべての BPT に同じコンポーネントを追加する代わりに、ビジネス コンポーネントのフローを作成できます。 各コンポーネントを個別に呼び出すのではなく、フローを直接呼び出すことができます。

なぜBPTなのか?

従来の自動化には、以下に示すいくつかの課題があります。

  • 手動テスター/対象分野の専門家と自動テスターの間の調整の欠如。
  • 自動化プロセスでは手動テスターの役割はありません。
  • 自動化開発における標準の欠如。
  • インテリジェントなフレームワークがないと、メンテナンスに多大な労力がかかる可能性があります。
  • 通常、自動化テスターはアプリケーションに関する十分な知識を持たず、非効率なスクリプトを開発する傾向があります。

BPT は、自動化開発の一環として中小企業/手動テスターを関与させ、BPT 開発の標準プロセスを定義する標準化されたフレームワークで上記の課題を克服します。

手動テスターは、必要な機能の手動コンポーネントを設計し、自動テスターに​​よって自動化されます。 手動/自動テスターは、これらの自動化されたコンポーネントを順番に配置して BPT を形成し、これがテスト シナリオとなります。

BPT は、さまざまなリソースによって実行されるさまざまな役割を定義します。 BPT は、リソースとその専門知識の利用の最適化に役立ちます。 BPT における役割は次のように分類されます。

  • EMS
  • QTPエキスパート
  • テスター

SME: 中小企業というのは、 ビジネスアナリスト またはアプリケーションに精通した手動テスター。 彼らは、特定のアクションまたは機能をテストするマニュアルのビジネス コンポーネントを設計します。 マニュアルのビジネス コンポーネントを設計する際、テストの手順と予想される結果について明確に言及します。

QTP エキスパート: QTP エキスパートは、マニュアルのコンポーネントに記載されている手順を自動化することにより、マニュアルのビジネス コンポーネントを自動コンポーネントに変換します。

コンポーネントが設計されると、SME または QTP エキスパートがそれらのコンポーネントを配置して BPT を形成し、テスト シナリオを形成します。

テスター: テスターは手動テスターでも、品質センターから BPT を実行できる QTP エキスパートでも構いません。

BPT の概要

ソフトウェア要件:

  • QTP/UFT (「QTP 最新バージョン「)有効なライセンス。
  • Business Components Module を使用して QC / ALM (QC 最新バージョン) にアクセスできる必要がありますが、これは QC には付属しません。 別途ライセンスを購入する必要があります。

ソフトウェア構成:

  • QTP: [他の HP 製品によるテストとコンポーネントの実行を許可する] オプションを有効にします。
  • QC: 次のアドインをインストールする必要があります。
  • QC接続アドイン
  • QTPアドイン

BPT フレームワークの実装:

これは組み込みフレームワークであるため、フレームワークを構築するためのコードを記述する必要はありません。 BPT の構成要素を構築する必要なアーティファクトを準備するだけです。

Quality Center (HP ALM) の重要なモジュールを簡単に学習してみましょう

ビジネスコンポーネントモジュール: ビジネス プロセスで特定の機能を実行するためのステップが含まれる、再利用可能なビジネス コンポーネントを作成、管理、自動化できるようにします。 コンポーネントは通常、次のように分類されます。

  • マニュアルコンポーネント
  • 自動化されたコンポーネント
  • キーワード駆動型コンポーネント
  • スクリプト化されたコンポーネント

テスト計画モジュール: これは、コンポーネントを論理的な順序でドラッグ アンド ドロップして XNUMX つのテスト シナリオを形成する BPT を準備し、コンポーネントをデバッグできるモジュールです。

テストラボモジュール: ビジネス プロセス テストを実行し、結果を表示できるようにします。 このモジュールを使用すると、異なるマシンで BPT を並列実行することもできます。

一般的な BPT 自動化プロセスには、次の段階が含まれます。

  1. マニュアルコンポーネントの作成
  2. コンポーネントの自動化
  3. フローまたは BPT の開発
  4. BPT のデバッグ
  5. BPT の実行

ステップ 1) マニュアルコンポーネントの作成

QCにログイン

マニュアルコンポーネントの作成

ビジネス コンポーネント モジュールに移動します。

マニュアルコンポーネントの作成

ビジネス コンポーネントとフォルダーは、以下に示すコンポーネント ツリー内の特定のアイコンによって識別されます。

マニュアルコンポーネントの作成

フォルダ: コンポーネントを論理的に分類するために使用されます。

マニュアルコンポーネントの作成

コンポーネントリクエストフォルダー: 手動テスターまたは SME は、自動化したいコンポーネントを配置します。

マニュアルコンポーネントの作成

廃止されたフォルダー: すべての無効なコンポーネントをこのフォルダーに移動すると、QC から完全に削除する前に確認できるようになります。

マニュアルコンポーネントの作成

コンポーネント: コンポーネントを表すために使用されるシンボルです。 手動ビジネス コンポーネントは、コンポーネント アイコン上の M 記号で表されます。 以下に示すように。

マニュアルコンポーネントの作成

コンポーネントは、指定された時間内に、それぞれ開発中、準備完了、メンテナンス、エラーのいずれかのステータスになります。

マニュアルコンポーネントの作成
マニュアルコンポーネントの作成
マニュアルコンポーネントの作成
マニュアルコンポーネントの作成

コンポーネントリクエストが開始されると、 テスト計画 モジュールの場合、「未実装」ステータスになります (以下を参照)。 この特定のコンポーネントがリクエスト フォルダーからコンポーネント フォルダーに移動されると、「開発中」ステータスに変更されます。

マニュアルコンポーネントの作成

ビジネスコンポーネントモジュールのツールバー

マニュアルコンポーネントの作成

新しいマニュアル ビジネス コンポーネントを作成します。

新しいフォルダーを作成して、アプリケーション関連のコンポーネントをすべて XNUMX か所で作成できるようにします。

「コンポーネント」フォルダーを選択し、「新しいフォルダー」をクリックします。

マニュアルコンポーネントの作成

アプリケーションを表す意味のあるフルネームを入力し、「OK」をクリックします。 メインフォルダーの下にサブフォルダーを作成することもできます。

コンポーネントを作成するフォルダーを選択 -> [新しいコンポーネント] ボタンをクリックします

マニュアルコンポーネントの作成

実行するアクションに似たコンポーネント名を入力すると、BPT の準備中にコンポーネントを選択しやすくなります。 [OK]ボタンをクリックします。

新しいコンポーネントが右側に作成されます。

コンポーネントのさまざまなタブを調べてみましょう

I. 詳細タブ: これには、コンポーネント名、作成者、作成日などの基本的なフィールドが含まれています。

当学校区の Description タブには、概要、前提条件、事後条件の 3 つのセクションがあります。

要約 セクションでは、コンポーネントの機能とその結果の簡単な説明について言及できます。

事前条件 セクションでは、このコンポーネントを使用するために必要なアプリケーションのステータスについて説明します。

事後条件 セクションでは、コンポーネントの手順を実行した後のアプリケーションのステータスについて説明します。

BPT を作成するコンポーネントの論理シーケンスを作成するときは、事前条件と事後条件に留意してください。

ディスカッションエリア、 コンポーネントに関連するコメントを追加できます。

マニュアルコンポーネントの作成

II. スナップショットタブ: このタブを使用して、コンポーネントが属する特定のページのスナップショットをキャプチャできます。

Ⅲ. 「パラメータ」タブ: コンポーネントにデータを渡したり、コンポーネントからデータを取得したりする場合は、このタブを使用できます。 これらは、QTP のアクション/テスト パラメーターに似ています。

以下を行うには、 新しいリンク 新しいパラメータを追加するには、

  • パラメータ名: パラメータの名前。
  • 値のタイプ: パラメータのタイプ (数値、日付、文字列、パスワードなど)。
  • デフォルト値: コンポーネントから値を渡さなかった場合に使用できるデフォルト値を入力できます。
  • 説明: パラメータの簡単な説明を記載できます。

マニュアルコンポーネントの作成

出力パラメータは、入力パラメータと同様に追加または削除できます。 コンポーネントから値を返したい場合は、出力パラメータを使用する必要があります。

IV. 「設計ステップ」タブ: コンポーネントが実行する必要がある手順が含まれます。デザイン タブのボタンは次の順序で表示されます。

新しいステップの追加、編集、削除、コピー、貼り付け、パラメータの作成/選択、パラメータの完成、検索、RowHeight、保存および自動化

マニュアルコンポーネントの作成

ステップを追加するには、「新しいステップの追加」をクリックすると、コンポーネント ステップ エディターが開きます。ステップを説明するステップ名、説明 (アプリケーションで実行する正確な操作)、および予想される結果 (ステップを実行した後のアプリケーションの状態) を入力します。

ステップを選択してステップ編集ボタンをクリックすると、ステップ エディターも開きます。

ステップ エディターにはテキスト エディター ツールバーがあり、これを使用して文字列を太字、斜体、下線などの書式設定することができます。

マニュアルコンポーネントの作成

V. 「自動化」タブ: コンポーネントがすでに自動化されている場合、コンポーネントに関連する自動化ステップが表示されます。 このステップについては、次のステップ「手動コンポーネントの自動化」で詳しく説明します。

VI. 「依存関係」タブ: コンポーネント、BPT、フロー、テストリソース、アプリケーション領域などの他のエンティティ間の依存関係を表示します。依存関係タブには次の3つのタブがあります。

[リソース]タブ コンポーネントによって使用されるアプリケーション領域 (コンポーネントを自動化するために必要なすべてのリソースの論理グループ/名前) を表示します。

「使用者」タブ 現在選択されているコンポーネントを含む BPTS とフローの詳細が表示されます。特定の BPT またはフローに移動する場合は、テストまたはフローの名前をクリックするだけで、テスト プラン モジュールの BPT またはフローに移動できます。

アプリケーションエリア タブには、コンポーネントによって使用されるアプリケーション領域の名前が表示されます。また、アプリケーション領域を使用するエンティティとアプリケーション領域が使用するリソースを表示する「使用者」グリッドと「使用中」グリッドも表示されます。

VII. 履歴タブ: エンティティ内のフィールドに加えられた変更を表示します。 変更ごとに、変更のタイムスタンプと変更を行ったユーザー名が表示されます。 [履歴] タブには XNUMX つのサブタブが含まれています。

「監査ログ」タブ さまざまなフィールド、タイムスタンプ、ユーザーの詳細に加えられた変更のリストを表示します。

ビジネスタブ 選択したコンポーネントのさまざまなバージョンを表示します。

ステップ 2) 手動コンポーネントの自動化

アプリケーション領域の構築

アプリケーションエリアは、アプリケーションまたはアプリケーションの一部を自動化するために必要なすべてのリソースをグループ化するのに役立つ論理エンティティです。 アプリケーション領域には、共有オブジェクト リポジトリ、関数ライブラリ、およびコンポーネントを自動化するために必要なその他すべての設定が含まれます。

アプリケーション全体に対して XNUMX つのアプリケーション領域を作成することも、要件に応じてアプリケーションのさまざまな部分に対して同じ数のアプリケーション領域を作成することもできます。

QTP を開き、ファイル -> 新規 -> アプリケーション領域

次のウィンドウが表示され、4 つのモジュールが含まれます。

手動コンポーネントの自動化

一般: アプリケーション領域の名前、アプリケーション領域を作成した作成者、場所など、アプリケーション領域に関する一般的な情報が表示されます。 Description および関連するアドイン。

アドインを削除したい場合は、変更ボタンをクリックして不要なアドインを削除します。

追加の設定には、通常の記録と実行の設定および QTP に似た記録と実行の設定が含まれます。

手動コンポーネントの自動化

回復オプションを使用して、アプリケーション領域に関連付ける回復シナリオを追加することもできます。 アドインに基づいて、他の環境関連の設定オプションを選択しました。

手動コンポーネントの自動化

関数ライブラリ

このモジュールは、必要なすべての関数ライブラリをアプリケーション領域に関連付けるのに役立ちます。

手動コンポーネントの自動化

オブジェクトリポジトリ

このモジュールは、関数ライブラリと同様に、必要な共有オブジェクト リポジトリを関連付けるのに役立ちます。

手動コンポーネントの自動化

キーワード

キーワード ペインには、すべての組み込みメソッド、関数ライブラリ内のすべてのユーザー定義関数、およびオブジェクト リポジトリ内のオブジェクトが表示されます。 さらに、キーワード ペインには、アドイン拡張機能を使用して当社またはサードパーティが開発したテスト オブジェクト クラスのメソッドとプロパティも表示されます。

手動コンポーネントの自動化

必要な関数ライブラリ、共有オブジェクト リポジトリを追加し、必要な設定を行った後、アプリケーション領域を保存できます。

手動コンポーネントを自動コンポーネントに変換する

自動化する特定のコンポーネントの [QC および設計] タブに戻ります。 以下に示すように自動化ボタンをクリックし、キーワード駆動コンポーネントまたはスクリプトコンポーネントの変換を選択します。 コンポーネントが自動コンポーネントに変換されると、それを手動コンポーネントに戻すことはできません。

手動コンポーネントの自動化

手動コンポーネントの自動化

キーワード駆動型コンポーネント

「自動化」タブに移動します。

「ステップを作成するには、まずアプリケーション領域の選択をクリックしてアプリケーション領域を選択する必要があります」というメッセージが表示されます。

手動コンポーネントの自動化

アプリケーション領域の選択をクリックすると、次のウィンドウが表示され、利用可能なアプリケーション領域のリストが表示され、そこから目的のアプリケーション領域を選択できます。

手動コンポーネントの自動化

選択アプリケーション領域は、自動化タブの下部に表示されます。

手動コンポーネントの自動化

QTP でキーワード ビューを使用して自動化するのと同様に、コンポーネントを自動化できます。 コンポーネントのステップを自動化すると、次のようになります。

手動コンポーネントの自動化

スクリプト化されたコンポーネント

「自動化」タブに移動します。 QTP を起動するための「起動」ボタンが表示されます。

手動コンポーネントの自動化

「Launch」ボタンをクリックすると (QTP は同じマシンにインストールされている必要があります)、QTP が開き、アプリケーション領域をコンポーネントに関連付けるように求めるポップアップが表示されます。

手動コンポーネントの自動化

アプリケーション領域がコンポーネントに関連付けられると、コンポーネントはすべてのリソースを使用できるようになり、これを使用してコンポーネントのスクリプトを作成できます。

ステップ 3) BPT の開発

BPT は自動テストまたは手動テストで行うことができます。 マニュアルのビジネスコンポーネントから構成される BPT をマニュアル BPT と呼ぶことができます。 自動化されたコンポーネントを使用して作成された BPT は、自動化された BPT と呼ばれます。

手動または自動の BPT を作成するには、QC でテスト計画モジュールを使用する必要があります。

左側のペインでテスト計画モジュールのアイコンをクリックします。

BPTの開発

「フォルダーの追加」アイコンをクリックして、ビジネス プロセス テストを作成するフォルダーを作成します。

BPTの開発

フォルダー名を入力し、「OK」ボタンをクリックします

BPTの開発

「新しいテストの作成」アイコンをクリックします。

BPTの開発

テスト タイプとして「ビジネス プロセス」を選択し、BPT に意味のある名前を入力します。

BPTの開発

以下のように表示されます

BPTの開発

「テストスクリプト」タブを選択し、「コンポーネントの選択」サブタブを選択します。

右側にすべてのコンポーネント情報を含むコンポーネント モジュール ツリーが表示されます。

BPTの開発

コンポーネントを論理的な順序でドラッグ アンド ドロップして、ビジネス シナリオを形成します。 コンポーネントを選択し、ドラッグ アンド ドロップの代わりに矢印記号を使用することもできます。 以下のコンポーネントを配置した後のサンプル BPT を以下に示します。

BPTの開発

新しいコンポーネントがテスト計画モジュール自体のコンポーネント ツリーで利用できない場合でも、[新しいコンポーネントのリクエスト] をクリックすることでリクエストできます。

コンポーネントがテスト スクリプト エディター ペインに配置されると、5 つの列構造として表示されます。

  1. コンポーネント/フロー: コンポーネントが含まれている場合は、スナップショット画像とともにコンポーネントが表示されます。
  2. ステータス: コンポーネントのステータス。前に説明したステータスのいずれかになります。
  3. 入力: 入力パラメータがある場合は、この列に表示されます。
  4. 出力: 出力パラメータがある場合は、この列に表示されます。
  5. 失敗時: コンポーネントの失敗時に BPT を実行する内容を選択できるドロップダウンが表示されます。 BPT を続行するか終了するかを選択できます。

    BPTの開発

入力パラメータの設定

コンポーネントの入力パラメータを設定するには、特定のコンポーネントの入力列にある入力パラメータのリンクをクリックするか、コンポーネントを右クリックして入力パラメータ値 -> 反復を選択することもできます。

BPTの開発

入力パラメータ リンクをクリックすると、コンポーネント反復ダイアログ ボックスが開きます。

BPTの開発

コンポーネントのすべての入力パラメータを入力できます。 コンポーネントを複数回実行したい場合は、「反復の追加」をクリックしてデータを入力することで、複数の反復を追加できます。

反復を削除したい場合は、まず反復を選択し、「反復の削除」をクリックすると、選択した反復が削除されます。

選択した反復のみを実行したい場合は、「反復の選択」を使用し、以下に示すように実行する反復の範囲を指定できます。

BPTの開発

外部のカンマ区切りファイルから入力パラメータをインポートしたり、インポートおよびエクスポート オプションを使用して特定のコンポーネントに使用したリスト パラメータをエクスポートしたりすることもできます。

インポート オプションをクリックすると、以下に示すように、必要なファイルを選択できるファイル ダイアログ ボックスが表示されます。

BPTの開発

選択すると、パラメータのマップ ダイアログ ボックスが表示され、ファイル内の列見出しをコンポーネント内のパラメータにマップする必要があります。この演習はすべての入力パラメータに対して実行する必要があります。

BPTの開発

BPTの開発

以前のコンポーネントの出力パラメータを使用する場合は、パラメータ列名の下の出力チェックボックスをクリックする必要があります。

出力パラメータ リスト ウィンドウに、以前のコンポーネントのすべての出力パラメータのリストが表示されます。そこから目的の出力パラメータを選択し、[OK] ボタンをクリックできます。

BPTの開発

コンポーネントのグループ化/グループ解除

BPT 内のコンポーネントをグループ化して複数回一緒に実行する場合、コンポーネントをグループ化する必要がある場合があります。 まず、グループ化するコンポーネントを選択し、[コンポーネントのグループ化] イメージをクリックするか、コンポーネントを選択して右クリックし、[グループ化] > [コンポーネントのグループ化] を選択します。

BPTの開発

コンポーネントをグループ化すると以下のようになります。 コンポーネントのグループ化を解除する場合は、グループを選択し、「コンポーネントのグループ化を解除」アイコンをクリックします。

BPTの開発

グループ化されたコンポーネントへのパラメータ/反復の追加

これは、単一コンポーネントのパラメータのデータを入力する方法と似ていますが、唯一の違いは、グループ化されたコンポーネントの入力パラメータ リンクをクリックすると、すべてのコンポーネントの入力パラメータがまとめて表示されることです。

BPTステータス

コンポーネントが異なるステータスを持つのと同様に、BPT も BPT の作成とその進行状況に基づいて異なるステータスを持ちます。BPT は、任意の時点で次のいずれかのステータスになります。

BPTの開発6 開発中
BPTの開発7準備
BPTの開発8メンテナンス
BPTの開発9エラー

BPT のステータスは、そのコンポーネントのステータスによって判断できます。 BPT ステータスは、そのすべてのコンポーネントの最も深刻な状態によって決定されます。

たとえば、次の内容を含むビジネス プロセス テストがあるとします。

  • 3 準備完了コンポーネント
  • 1 メンテナンスコンポーネント
  • 2 開発中のコンポーネント
  • 1 エラーコンポーネント
  • 1 開発中 (要求された) コンポーネント

この例では、テスト ステータスは次のとおりです。 エラーエラーはテストにおけるビジネス コンポーネントの最も重大なステータスであるためです。

ステップ 4) BPT のデバッグ

BPT を設計したら、BPT を実行して、コンポーネントが適切な順序で配置されているか、渡したデータが適切に機能しているかどうかを確認する必要があります。 に似ています テスト 可能なすべての方法 (ポジティブおよびネガティブ) とデータを使用して自動化スクリプトを作成し、スクリプトの精度をチェックします。

テスト計画モジュールで、テスト スクリプト ツールバーの [テストの実行またはデバッグ] ボタンをクリックします。

BPT のデバッグ

実行ボタンをクリックすると、「テストの実行またはデバッグ」ウィンドウが表示されます。実行ウィンドウには、BPT の実行方法に関する 2 つのオプションがあります。

  1. ノーマル
  2. デバッグ

    BPT のデバッグ

デバッグモード: このモードでコンポーネントを実行すると、デフォルトでコンポーネントの最初の行にブレークポイントが追加され、コンポーネントを行ごとにデバッグするのに役立ちます。

ノーマルモード: このモードでは、テストは一時停止せずに最初から最後まで実行され、テスト内の次のコンポーネントにすぐに続行されます。

要件に応じて、各コンポーネントのモードのいずれかを選択できます。 同じ BPT または別の BPT で一部のコンポーネントをすでに検証している場合は、直接通常モードに進むことができます。

実行が完了すると、BPT のすべてのコンポーネントの実行概要が表示されます。

BPT のデバッグ

ステップ 5) BPT の実行

BPT が開発され、徹底的にテストされたら、回帰、正常性、またはその他のテスト サイクルの一部として、これらの BPT を実行する必要がある場合があります。

BPT を実行するには、QC の Test Lab モジュールを使用する必要があります。 [テスト ラボ] に移動し、これらの BPT を実行するテスト計画フォルダーとテスト セットを選択します。

BPTの実行

テスト ラボ グリッドから [テストの選択] オプションを選択すると、右側に、すべてのテスト ケースを含むテスト プラン ツリー構造のペインが 1 つ表示されます。実行する BPT を選択し、矢印ボタンをクリックすると、BPT が [実行グリッド] に追加されます。ドラッグ アンド ドロップ機能を使用して、実行する BPT を選択することもできます。

BPT が実行グリッドに追加されたら、「実行」ボタンをクリックする必要があります。

「実行」ボタンをクリックすると、別の「自動ランナー」ウィンドウが表示されます。このウィンドウで、これらの BPT を実行するマシンを指定する必要があります。実行するマシンでは、QTP ソフトウェアが使用可能である必要があります。テストは、同じマシンで実行できます。

BPTの実行

「ホスト上で実行」列にマシン名を指定した後、「自動ランナー」ウィンドウ内のすべてのテストを実行する場合は「すべて実行」をクリックするか、選択した BPT のみを実行する場合は「実行」を選択する必要があります。

QC は、指定されたマシンに自動的に接続し、BPT を実行し、結果を合格または不合格のステータスで QC に更新します。

BPTの実行

特定のテストをダブルクリックすると、そのテストの詳細な結果が表示されます。

BPTの実行

このチュートリアルは、Narender Reddy Nukala 氏の貢献によって可能になりました。