(57)【要約】  ここに提示する実施形態は、抽出、変換、および、ロード（ＥＴＬ）プロジェクトに対するより大きなデータ統合ワークフローの一部分である、変換モジュールに対してテストケースを生成するための技術を提供する。本開示にしたがって生成したテストケースは、それを生成したアプリケーションから独立して、データ統合ワークフロー中で参照されるデータソースと宛先から独立して、実行されることができる。この独立性を達成するために、テストケースは、データ統合ワークフローにおいて変換モジュールと相互作用するデータソースと宛先をシミュレートする、コードを含むことができる。さらに、テストケースは、ユニットテストフレームワークに基づいたユニットテストであることがあり、選択したソフトウェアフレームワークと互換性がある。【選択図】図２
2019534523.tif 000002
【特許請求の範囲】
【請求項１】
データ統合ワークフローの変換モジュールに対するテストケースを生成する方法あって、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対する前記テストケースを定義するコードを生成することと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行できる、
方法。
【請求項２】
前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、
請求項１に記載の方法。
【請求項３】
前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに含む、請求項１に記載の方法。
【請求項４】
前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、請求項３に記載の方法。
【請求項５】
前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、請求項３に記載の方法。
【請求項６】
前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることを含む、請求項３に記載の方法。
【請求項７】
前記テストケースを実行することは、前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、請求項３に記載の方法。
【請求項８】
前記テストケースは、前記データ統合ワークフローのバージョンに関係付けられている、請求項１に記載の方法。
【請求項９】
命令を含む非一時的コンピュータ読取可能記憶媒体であって、前記命令が１つ以上のプロセッサによって実行されるとき、データ統合ワークフローの変換モジュールに対するテストケースを生成する動作を実行し、前記動作は、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対するテストケースを定義するコードを生成させることと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行される、
非一時的コンピュータ読取可能記憶媒体。
【請求項１０】
前記動作は、
前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、請求項８に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１１】
前記動作は、
前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに備える、請求項８に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１２】
前記動作は、
前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、請求項１１に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１３】
前記動作は、
前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、請求項１１に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１４】
前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることを含む、請求項１１に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１５】
前記テストケースを実行することは、前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、請求項１１に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１６】
前記テストケースは、前記データ統合ワークフローのバージョンに関係付けられている、請求項９に記載の非一時的コンピュータ読取可能記憶媒体。
【請求項１７】
データ統合ワークフローの変換モジュールに対するテストケースを生成するためのシステムであって、
１つ以上のプロセッサと、
１つ以上のアプリケーションを記憶しているメモリと、を備え、前記１つ以上のプロセッサ上で前記１つ以上のアプリケーションが実行されるとき、動作を実行し、
前記動作は、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対する前記テストケースを定義するコードを生成することと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行できる、
システム。
【請求項１８】
前記動作は、
前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、
請求項１７に記載のシステム。
【請求項１９】
前記動作は、
前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに備える、請求項１７に記載のシステム。
【請求項２０】
前記動作は、
前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、請求項１９に記載のシステム。
【請求項２１】
前記動作は、
前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、請求項１９に記載のシステム。
【請求項２２】
前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることを含む、請求項１９に記載のシステム。
【請求項２３】
前記テストケースを実行することは、前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、請求項１９に記載のシステム。
【発明の詳細な説明】
【背景】
【０００１】
【分野】
【０００２】
[0001]  本開示は、一般的に、データ統合ワークフローの要素に対してユニットテストを生成することに関する。より具体的には、本開示は、ユーザが選択したソフトウェアフレームワーク内で、コードを生成してユーザが選択したプログラムモジュールをテストするためのデータ統合ワークフローエディタに関する技術を提供する。
【関連技術】
【０００３】
[0002]  データを集め、保管するためのテクノロジーは、最近数十年で多いに向上している。特に、データ収集レート、データアクセススピードおよびデータ保管能力はすべて、大幅に進歩している。さらに、コンピュータプロセッサスピードも数桁増加しており、多数のコンピューティングリソースがクラウドを通して容易に利用可能になっている。結果として、数十年前は実現困難であった大規模なデータ分析が、現在可能である。
【０００４】
[0003]  多くの現代のビジネス、大学、政府および他のエンティティは、会計、研究、諜報、マーケティング、在庫、品質制御、トランザクションおよび他の目的のために、データを収集する。用語「ビッグデータ」は、エンティティが保持しているかもしれない大量のデータ（例えば、テラバイト）を指すように作られた。このビッグデータは、傾向を決定するために統計的に分析されることができ、有益な予測モデル（例えば、機械学習モデル）を生成するために使用されることができる。エンティティは、意思決定を通知し、傾向、問題および潜在的な機会を識別するために、このような分析およびモデルを使用することができる。
【０００５】
[0004]  エンティティが保持するビッグデータは、多くの異なるデータストアに渡って分散されることが多い。次に、異なるデータストアは、異なるフォーマットで記憶されている異なるタイプのデータを含んでいるかもしれない。結果として、統計的分析を実行でき、予測モデルを生成できるように、データは、異なるロケーションから抽出され、再フォーマットされ、組み合わされ、および、単一のデータレポジトリ中にロードされてもよい。このプロセスは、抽出、変換、および、ロード（ＥＴＬ）と呼ばれることが多い。
【図面の簡単な説明】
【０００６】
【図１】[0005]  図１は、１つの実施形態にしたがった、本開示の技術を適用するために使用されてもよい例示的なコンピューティング環境を図示している。
【図２】[0006]  図２は、１つの実施形態にしたがった、コンピューティングシステムのより詳細な図を図示している。
【図３】[0007]  図３は、１つの実施形態にしたがった、ディスプレイ上に示されるようなデータ統合ワークフローのグラフィカルモデルを図示している。
【図４】[0008]  図４は、１つの実施形態にしたがった、データ統合ワークフローの変換モジュールに対してテストケースを生成するための方法を図示したフローチャートである。
【図５】[0009]  図５は、１つの実施形態にしたがった、データ統合ワークフローの変換モジュールに対してテストケースを実行するための方法を図示したフローチャートである。
【図６】[0010]  図６は、１つの実施形態にしたがった、テストケースのためのコードを生成する例示的なデータ統合システムを図示している。
【詳細な説明】
【０００７】
[0011]  ここで説明する実施形態は、データ変換ワークフローのコンポーネントに対してユニットテストケースを生成するための技術を説明する。データ統合ワークフローエディタは、データ変換ワークフローのグラフィカルデータをユーザに表示する。ユーザは、データ変換ワークフロー内の変換モジュールを表すグラフィカルモデルの少なくとも１つのアイコンを選択する。ユーザは、変換モジュールに対するテストケースを生成するためのオプションを選択する。ユーザは、テストケースが特定のソフトウェアフレームワークと互換性があることも要求する。データ統合ワークフローエディタは、データ変換ワークフローにおいて、変換モジュールへの入力パスと変換モジュールからの出力パスを識別する。コード生成器は、変換モジュールに対するテストケースを生成する。テストケースは、ソフトウェアフレームワークを使用して実行できる。
【０００８】
[0012]  実行されるとき、テストケースは、（例えば、ユーザによって提供される）テスト入力データを使用して、変換モジュールを実行する。テストケースは、その後、変換モジュールからの実際の出力データと（例えば、ユーザによって提供される）ターゲット出力データを比較する。実際の出力データがターゲット出力データと一致する場合、テストケースは、テストが成功したことを示す。そうでなければ、テストケースは、テストが不合格であったことを示し、オプション的に、不合格についての追加の詳細を提供してもよい。
【０００９】
[0013]  ＥＴＬに関してソフトウェアを効率的に管理するために、継続的インテグレーションが使用されることがある。用語「継続的インテグレーション」は、チームに従事するコンピュータプログラマが頻繁に彼らの作業を統合し、統合エラーが即座に検出できるように、自動化された構造により各統合を検証するソフトウェア開発行為を指す。
【００１０】
[0014]  ＥＴＬプロジェクトに関するデータ統合ワークフローは、入力データのソース、入力データを処理する（例えば、プログラミングコードの）モジュール、モジュール出力が送られる宛先を特定してもよく、同様に、ソース、モジュールおよび宛先の間の関連を特定してもよい。用語「データ変換モジュール」は、１つ以上の入力ソースから入力データを受け取り、入力データ上の少なくとも１つの動作を実行し、出力データを作成し、出力データを宛先に送る、データ変換ワークフローのコンポーネントを指す。
【００１１】
[0015]  ＥＴＬプロジェクトに取り組むソフトウェア開発チームに従事するプログラマーは、経時的に変化するかもしれない。チームメンバーは、既存のデータ統合ワークフローのよく知らないコンポーネントを修正せざるを得ないことが多いかもしれない。これらのよく知らないコンポーネントの正しい構造または動作は、明らかでないかもしれない。このような状況下で、チームメンバーは、うっかりこれらのコンポーネントのコンピュータコードにエラーをもたらすことがある。これらのエラーのうちのいくつかは、作成の際にＥＴＬプロジェクトが正しくない結果を送出するまで察知されないかもしれない。ユニットテストは、予測された挙動または既知のエラー状態を開発者がテストすることを可能にするが、手動のコードユニットテストは、時間がかかり、複雑であることがある。
【００１２】
[0016]  ここで説明する実施形態は、手動のコーディングを必要とすることなく、変換モジュールに対するテストケースを生成するための技術を提供する。テストケースは、テストケースを生成するアプリケーションから独立して実行されることができる。テストケースは、データ統合ワークフロー中の変換モジュールに入力を提供するデータソースにアクセスすることなく、実行されることができる。さらに、テストケースは、データ統合ワークフロー中の変換モジュールから出力を受け取る宛先にアクセスすることなく、実行されることができる。これらの理由により、テストケースは、高度に持ち運び可能であり、データソースとデータ統合ワークフロー中で参照される宛先とから独立している。
【００１３】
[0017]  テストケースは、さまざまなデータソースと構造を正確にシミュレートでき、それにより、テスト目的のために、実際のデータベースシステムをセットアップすることなく、または、維持することなく、ダミーのまたは模造の入力データセットに対して開発者が変換モジュールを仮想的にテストすることを可能にする。（例えば、変換モジュールが変更される毎に、テストケースを自動的に実行するために、ボタンをクリックすること、または、オプションを選択することにより、）開発者は、テストケースに対する変換モジュールにおける各変化を確認できる。
【００１４】
[0018]  テストケースは、データ統合ワークフローのバージョンにも関係付けられることができる。変換モジュールの意図した機能性が後のバージョンで変化する場合、開発者は、テストケースが以前のバージョンに関係付けられていることを観測することにより、テストケースは陳腐化したと決定してもよい。
【００１５】
[0019]  図１は、１つの実施形態にしたがった、本開示の技術を適用するために使用されてもよい例示的なコンピューティング環境１００を図示している。コンピューティングシステム１０８、データストア１０４およびデータストア１０６は、ネットワーク１０２に接続されている。データ統合ワークフローエディタ１１０は、データ統合ワークフロー１１２のグラフィカルモデルをディスプレイ１１８上に表示する。
【００１６】
[0020]  ユーザは、グラフィカルモデル中の少なくとも１つのアイコンを選択し、ユニットテストフレームワーク１１４を使用するテストケースを、選択したアイコンによって表される変換モジュールに対して生成することを要求する。データ統合ワークフローエディタ１１０は、データ統合ワークフロー１１２中の変換モジュールが、データストア１０４からの入力を受け取り、出力をデータストア１０６に送るように構成されていると決定する。データ統合ワークフローエディタ１１０は、その後、テストケース１１６を生成する。
【００１７】
[0021]  テストケース１１６は、実行時、テスト入力上の変換モジュールを実行する。テストケース１１６は、データストア１０４以外のソースからテスト入力を受け取ることができ、さらに、データストア１０４を模倣する方法でテスト入力を変換モジュールに提供することができる。結果として、テストケース１１６が実行されるとき、データストア１０４は、アクセスされる必要はない。同様に、テストケース１１６は、データストア１０６を模倣する方法で、変換モジュールから出力を受け取ることができる。結果として、データストア１０６は、テストケースが実行されるとき、アクセスされる必要はない。
【００１８】
[0022]  テストケース１１６は、ユニットテストフレームワーク１１４を使用し、ユーザによって設計されたソフトウェアフレームワークで実行されることができる。（例えば、Ｊｕｎｉｔのような）ユニットテストフレームワーク１１４は、（例えば、Ｊａｖａ（登録商標）のような）プログラミング言語に関係付けられてもよい。ソフトウェアフレームワークは、Ａｐａｃｈｅ  Ｈａｄｏｏｐまたは他の何らかのフレームワークであってもよい。データ統合ワークフローエディタ１１０が動作していない場合でさえも、テストケース１１６は、ソフトウェアフレームワークを使用して、実行されることができる。さらに、テストケース１１６は、ユニットテストフレームワーク１１４とソフトウェアフレームワークとを使用できる他のコンピューティングシステムに移動可能である。言い換えると、テストケース１１６は、データ統合ワークフローエディタ１１０に依存しない。
【００１９】
[0023]  ユーザは、変換モジュールが変更される毎に、特定のテスト入力と特定のターゲット出力を使用して、テストケースを自動的に実行することも指定できる。この方法でテストケースを使用することは、ソフトウェア開発者が、変更がなされた後、変換モジュールが依然として適切に機能していることを確認することを可能にする。
【００２０】
[0024]  図２は、１つの実施形態にしたがった、コンピューティングシステム１０８のより詳細な図を図示している。コンピューティングシステム１０８、データストア１０４およびデータストア１０６は、ネットワーク１０２に接続されている。データ統合ワークフローエディタ１１０は、グラフィカルユーザインターフェース（ＧＵＩ）２０２、コード生成器２０４およびデータ統合ワークフロー１１２のグラフィカルモデル２０６を含んでいる。グラフィカルモデル２０６は、アイコン２０８を含んでいる。データ統合ワークフローエディタ１１０は、ディスプレイ１１８上で、ＧＵＩ２０２中においてデータ統合ワークフロー１１２のグラフィカルモデル２０６を表示する。
【００２１】
[0025]  ユーザは、グラフィカルモデル２０６中のアイコン２０８のうちの１つ以上を選択し、テストのためにデータ統合ワークフロー１１２の変換モジュール２１０を指定することができる。データ統合ワークフローエディタ１１０は、変換モジュール２１０がデータストア１０４から入力を受け取り、データストア１０６に出力を送るように構成されていることを決定する。コード生成器２０４は、その後、ユニットテストフレームワーク１１４を使用して、テストケース１１６を生成する。
【００２２】
[0026]  テストケース１１６は、実行時、テスト入力に関して変換モジュール２１０を実行する。テストケース１１６は、データストア１０４以外のソースからテスト入力を受け取ることができ、さらに、データストア１０４を模倣した方法で、テスト入力を変換モジュールに提供できる。結果として、データストア１０４は、テストケース１１６が実行されるとき、アクセスされる必要がない。同様に、テストケース１１６は、データストア１０６を模倣した方法で、変換モジュールから出力を受け取ることができる。結果として、データストア１０６は、テストケース１１６が実行されるとき、アクセスされる必要がない。
【００２３】
[0027]  テストケース１１６は、ユニットテストフレームワーク１１４を使用し、ユーザによって設計されるソフトウェアフレームワークで実行できる。ユニットテストフレームワーク１１４は、（例えば、Ｊａｖａに関係付けられているＪｕｎｉｔのような）プログラミング言語に関係付けられてもよい。例えば、ソフトウェアフレームワークは、Ａｐａｃｈｅ  ＨａｄｏｏｐまたはＳｐａｒｋ  ｆｒａｍｅｗｏｒｋであってもよい。たとえデータ統合ワークフローエディタ１１０が動作していないとしても、テストケース１１６は、ソフトウェアフレームワークを使用して実行される。さらに、テストケース１１６は、ユニットテストフレームワーク１１４とソフトウェアフレームワークを使用できる他のコンピューティングシステムに移動可能である。言い換えると、テストケース１１６は、データ統合ワークフローエディタ１１０に依存しない。
【００２４】
[0028]  図３は、１つの実施形態にしたがった、ディスプレイ３０２上に示されるようなデータ統合ワークフローのグラフィカルモデル３００を図示している。アイコン３０４は、変換モジュールを表す。アイコン３０６とアイコン３１０は、変換モジュールがデータ統合ワークフローにおいて入力を受け取るデータソースを表す。例えば、アイコン３０６は、データベースを表す一方で、アイコン３１０は、フラットファイルを表してもよい。アイコン３１４は、変換モジュールが出力を提供するデータソースを表す。
【００２５】
[0029]  矢印３１２は、アイコン３０４によって表された変換モジュールがアイコン３１０によって表されたデータソースから入力を受け取ることをユーザに示すために、グラフィカルモデル３００において示される。同様に、矢印３０８は、アイコン３０４によって表された変換モジュールがアイコン３０６によって表されたデータソースから入力を受け取ることもユーザに示すために、グラフィカルモデル３００において示される。矢印３１６は、アイコン３０４によって表された変換モジュールがアイコン３１４によって表されたデータソースに出力を提供することをユーザに示すために、グラフィカルモデル３００において示される。
【００２６】
[0030]  ユーザは、カーソル３１８を使用して、アイコン３０４を選択してもよい。いったんアイコン３０４が選択されると、ドロップダウンウインドウが現れ、テストケースを生成するオプションを提供する。ユーザは、オプションを選択し、テストとテストケースに対するソフトウェアフレームワークに関係付けるためのデータ統合ワークフローのバージョンのような、テストケースに対する追加の詳細を提供できる。ユーザからのこれらの入力に基づいて、コード生成器は、ユニットテストフレームワークを使用して、変換モジュールに対するテストケースを生成する。
【００２７】
[0031]  テストケース中に含まれるコードは、アイコン３０６とアイコン３１０によって表されたデータレポジトリ以外のソースからテスト入力データを受け取るように設計されている。しかしながら、テストケースが実行されるとき、それは、依然として変換モジュールを通常に実行することを可能にする方法で、テスト入力データをテストされる変換モジュールに提供する。例えば、変換モジュールが、あるフォーマットで、または、あるデータ構造で入力を受け取るように設計されている場合、テストケースは、そのフォーマットまたはデータ構造でテスト入力データを提供できるコードを含んでいる。同様に、変換モジュールが、あるフォーマットで、または、あるデータ構造でアイコン３１４によって表されたデータレポジトリに出力を提供する場合、テストケースは、そのフォーマットまたはデータ構造で、出力を途切れなく受け取るためのコードを含む。テストケースは、変換モジュールからの出力をターゲット出力と比較するコードも含んでいる。
【００２８】
[0032]  図４は、１つの実施形態にしたがった、データ統合ワークフローの変換モジュールに対するテストケースを生成するための方法４００を図示したフローチャートである。ステップ４０２において、データ統合ワークフローエディタは、グラフィカルユーザインターフェースにおいて、データ統合ワークフローのグラフィカルモデルを表示する。
【００２９】
[0033]  ステップ４０４において、データ統合ワークフローエディタは、グラフィカルモデルにおいて、ユーザによって選択された変換モジュールを識別する。グラフィカルモデル中の１つ以上のアイコンは、変換モジュールを表してもよい。
【００３０】
[0034]  ステップ４０６において、データ統合ワークフローエディタは、データ統合ワークフローにおいて、変換モジュールへの入力パスを識別する。入力パスは、グラフィカルモデル中の変換モジュールを表すアイコンに向けて指している矢印によって表されてもよい。ステップ４０８において、データ統合ワークフローエディタは、変換モジュールへの追加の入力パスがあるか否かを決定し、各追加の入力パスに対してステップ４０６を繰り返す。
【００３１】
[0035]  ステップ４１０において、データ統合ワークフローエディタは、データ統合ワークフローにおいて、変換モジュールから出力パスを識別する。出力パスは、グラフィカルモデル中の変換モジュールを表すアイコンから離れて指している矢印によって表されてもよい。ステップ４１２において、データ統合ワークフローエディタは、変換モジュールから追加の出力パスがあるか否かを決定し、各追加の出力パスに対してステップ４１０を繰り返す。
【００３２】
[0036]  ステップ４１４において、データ統合ワークフローエディタは、ユーザによって選択されたソフトウェアフレームワークを識別する。ステップ４１６において、コード生成器は、選択した変換モジュールに対するテストケースを定義するコードを生成する。テストケースは、データ統合ワークフローにおいて入力パスに接続されている実際のデータソースよりもむしろ、ユーザが特定したデータソースから、ステップ４０６−４０８において識別された各入力パスに対するテスト入力データを受け取るためのコードを含んでいる。テストケースは、テストケースが変換モジュールを実行するとき、実際のデータソースを模倣する方法で、テスト入力データを変換モジュールに提供するためのコードも含んでいる。
【００３３】
[0037]  さらに、テストケースは、ステップ４１０−４１２において識別された各出力パスに対するターゲット出力データを受け取るためのコードを含んでいる。テストケースがテストプロセスの一部として変換モジュールを実行するとき、テストケースは、各出力パスに対する変換モジュールから実際の出力データを受け取るためのコードも含んでいる。テストケースは、各パスに対して、ターゲット出力データを実際の出力データを比較するためのコードを含んでいる。ターゲット出力データと実際の出力データとの間に何らかの矛盾がある場合、テストケースは、変換モジュールがテストの少なくとも一部分において失敗したこと示す。
【００３４】
[0038]  図５は、１つの実施形態にしたがった、データ統合ワークフローの変換モジュールに対してテストケースを実行するための方法５００を図示したフローチャートである。テストケースは、ユニットテストフレームワークを用い、ソフトウェアフレームワークと互換性のあるユニットテストであってもよい。
【００３５】
[0039]  ステップ５０２において、テストケースは、変換モジュールに対するテスト入力データを受け取る。テスト入力データは、フラットファイルまたは他の何らかのフォーマットで受け取られてもよい。ステップ５０４において、テストケースは、ターゲット出力データを受け取る。テスト入力データのように、ターゲット入力データは、フラットファイルまたは他の何らかのフォーマットで受け取られてもよい。ターゲット出力データは、変換モジュールがテスト入力データを入力として使用して実行されるとき、変換モジュールが出力することになっているものを示す。
【００３６】
[0040]  ステップ５０６において、テストケースは、テスト入力データを（テストケースがテストプロセスの一部として実行する）変換モジュールに提供するための、第１のデータソースをシミュレートする。データ統合ワークフロー内で、変換モジュールは、第１のデータソースから入力を受け取るように構成されている。しかしながら、テストケースによって変換モジュールが実行されるとき、テストケースは、変換モジュールが第１のデータソースにアクセスすることを可能にしない。代わりに、テストケースは、テスト入力データを変換モジュールに提供する場合、第１のデータソースがするのと同じ方法で変換モジュールとインターフェースすることにより、第１のデータソースをシミュレートする。これは、テストケースが第１のデータソースから独立することを可能にする。
【００３７】
[0041]  ステップ５０８において、テストケースは、変換モジュールから実際の出力データを受け取るために、第２のデータソースをシミュレートする。データ統合ワークフロー内で、変換モジュールは、出力を第１のデータソースに送るように構成されている。しかしながら、変換モジュールがテストケースによって実行されるとき、テストケースは、変換モジュールが第２のデータソースにアクセスすることを可能にしない。代わりに、テストケースは、変換モジュールから実際の出力データを受け取る場合、第２のデータソースがするのと同じ方法で変換モジュールとインターフェースすることにより、第２のデータソースをシミュレートする。これは、テストケースが第２のデータソースから独立することを可能にする。
【００３８】
[0042]  ステップ５１０において、テストケースは、実際の出力データをターゲット出力データと比較する。ステップ５１２において、テストケースは、比較に基づいてテスト結果を提供する。実際の出力データが出力データと一致する場合、テスト結果は、変換モジュールがテストに合格したことを示す。そうでなければ、テスト結果は、変換モジュールがテストに不合格であったことを示す。テストに合格したか不合格であったかの表示は、テストに関係付けられることができ、記憶されることができる。
【００３９】
[0043]  ステップ５１４において、テストケースが生成されたデータ統合ワークフローエディタは、テストケースが実行された前回以来、変換モジュールが変更されたか否かを決定する。変換モジュールが変更された場合、ステップ５０２−５１２を繰り返す。そうでなければ、方法５００は終了する。１つの実施形態において、ステップ５１４はオプション的である。ユーザは、データ統合ワークフローエディタにおいて、変換モジュールが変更される度にテストケースが実行されることを要求するオプションを選択してもよい。
【００４０】
[0044]  図６は、１つの実施形態にしたがった、テストケースに対するコードを生成する例示的なデータ統合システム６００を図示している。図示されるように、データ統合システム６００は、中央処理ユニット（ＣＰＵ）６０２、さまざまなＩ／Ｏデバイス６１４（例えば、キーボード、ディスプレイ、マウスデバイス、ペン入力等）のデータ統合システム６００への接続を可能にしてもよい１つ以上の入力／出力（Ｉ／Ｏ）デバイスインターフェース６０４、ネットワークインターフェース６０６、メモリ６０８、記憶装置６１０およびインターコネクト６１２を含んでいる。
【００４１】
[0045]  ＣＰＵ６０２は、メモリ６０８中に記憶されているプログラミング命令を検索し、実行してもよい。同様に、ＣＰＵ６０２は、メモリ６０８中に存在するアプリケーションデータを検索し、記憶してもよい。インターコネクト６１２は、ＣＰＵ６０２、Ｉ／Ｏデバイスインターフェース６０４、ネットワークインターフェース６０６、メモリ６０８および記憶装置６１０間で、プログラミング命令とアプリケーションデータを送信する。ＣＰＵ６０２は、単一のＣＰＵ、複数のＣＰＵ、複数の処理コアを有する単一のＣＰＵ、および、これらに類するものを表すことができる。さらに、メモリ６０６は、ランダムアクセスメモリを表す。さらに、記憶装置６１０は、ディスクドライブであってもよい。単一のユニットで示されているが、記憶装置６１０は、固定ディスクドライブ、取り外し可能メモリカードまたは光学記憶装置、ネットワーク接続型記憶装置（ＮＡＳ）、または、ストレージエリアネットワーク（ＳＡＮ）のような、固定されたおよび／または取り外し可能な記憶デバイスの組み合わせであってもよい。
【００４２】
[0046]  図示されるように、メモリ６０８は、データ統合ワークフローエディタ１１０を含んでいる。データ統合ワークフローエディタ１１０は、データ統合ワークフロー１１２のグラフィカルモデルを表示する。ユーザは、データ統合ワークフロー１１２内で変換モジュールを表すグラフィカルモデル中の１つ以上のアイコンを選択してもよい。ユーザは、データ統合ワークフローエディタ１１０が、変換モデルに対するユニットテストを定義するためのコードを生成することも要求してもよい。それに応じて、データ統合ワークフローディタ１１０は、ユニットテストフレームワーク１１４に基づいて、テストケース１１６を生成する。
【００４３】
[0047]  本発明のさまざまな実施形態の説明は、実例の目的のために提示されているが、開示した実施形態に網羅的である、または、開示した実施形態に限定されることを意図してはいない。説明した実施形態の範囲および精神から逸脱することなく、多くの修正およびバリエーションが当業者に明らかだろう。ここで使用される専門用語は、実施形態の原理、市場において見出された技術を超える実用的アプリケーションまたは技術的改善を最良に説明するように、あるいは、他の当業者がここで開示した実施形態を理解できるようにするように、選択された。
【００４４】
[0048]  データ変換ワークフローのコンポ―ネントに対してユニットテストケースを生成するさらなる例は、添付の付録中に提供されている。
【００４５】
[0049]  上記は、本開示の実施形態に向けられているが、本開示の他の実施形態およびさらなる実施形態を、その基本的な範囲から逸脱することなく考案することができ、その範囲は、下記の特許請求の範囲によって決定される。
【図１】
2019534523.tif 000003
【図２】
2019534523.tif 000004
【図３】
2019534523.tif 000005
【図４】
2019534523.tif 000006
【図５】
2019534523.tif 000007
【図６】
2019534523.tif 000008
【手続補正書】
【提出日】令和1年5月16日(2019.5.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ統合ワークフローの変換モジュールに対するテストケースを生成する方法あって、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対する前記テストケースを定義するコードを生成することと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行できる、
方法。
【請求項２】
前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、
請求項１に記載の方法。
【請求項３】
前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに含む、請求項１に記載の方法。
【請求項４】
前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、請求項３に記載の方法。
【請求項５】
前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、請求項３に記載の方法。
【請求項６】
前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることを含む、請求項３に記載の方法。
【請求項７】
前記テストケースを実行することは、前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、請求項３に記載の方法。
【請求項８】
前記テストケースは、前記データ統合ワークフローのバージョンに関係付けられている、請求項１に記載の方法。
【請求項９】
データ統合ワークフローの変換モジュールに対するテストケースを生成するためのシステムであって、
１つ以上のプロセッサと、
１つ以上のアプリケーションを記憶しているメモリと、を備え、前記１つ以上のプロセッサ上で前記１つ以上のアプリケーションが実行されるとき、動作を実行し、
前記動作は、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対する前記テストケースを定義するコードを生成することと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行できる、
システム。
【請求項１０】
前記動作は、
前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、
請求項９に記載のシステム。
【請求項１１】
前記動作は、
前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに備える、請求項９に記載のシステム。
【請求項１２】
前記動作は、
前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、請求項１１に記載のシステム。
【請求項１３】
前記動作は、
前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、請求項１１に記載のシステム。
【請求項１４】
前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることと、
前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、請求項１１に記載のシステム。
【請求項１５】
命令を含むコンピュータ読取可能媒体であって、前記命令が１つ以上のプロセッサによって実行されるとき、データ統合ワークフローの変換モジュールに対するテストケースを生成する動作を実行し、前記動作は、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対するテストケースを定義するコードを生成することと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行できる、
コンピュータ読取可能媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】変更
【補正の内容】
【００４５】
[0049]  上記は、本開示の実施形態に向けられているが、本開示の他の実施形態およびさらなる実施形態を、その基本的な範囲から逸脱することなく考案することができ、その範囲は、下記の特許請求の範囲によって決定される。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［１］  データ統合ワークフローの変換モジュールに対するテストケースを生成する方法あって、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対する前記テストケースを定義するコードを生成することと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行できる、
方法。
［２］  前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、
［１］に記載の方法。
［３］  前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに含む、［１］に記載の方法。
［４］  前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、［３］に記載の方法。
［５］  前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、［３］に記載の方法。
［６］  前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることを含む、［３］に記載の方法。
［７］  前記テストケースを実行することは、前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、［３］に記載の方法。
［８］  前記テストケースは、前記データ統合ワークフローのバージョンに関係付けられている、［１］に記載の方法。
［９］  命令を含む非一時的コンピュータ読取可能記憶媒体であって、前記命令が１つ以上のプロセッサによって実行されるとき、データ統合ワークフローの変換モジュールに対するテストケースを生成する動作を実行し、前記動作は、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対するテストケースを定義するコードを生成させることと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行される、
非一時的コンピュータ読取可能記憶媒体。
［１０］  前記動作は、
前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、［８］に記載の非一時的コンピュータ読取可能記憶媒体。
［１１］  前記動作は、
前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに備える、［８］に記載の非一時的コンピュータ読取可能記憶媒体。
［１２］  前記動作は、
前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、［１１］に記載の非一時的コンピュータ読取可能記憶媒体。
［１３］  前記動作は、
前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、［１１］に記載の非一時的コンピュータ読取可能記憶媒体。
［１４］  前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることを含む、［１１］に記載の非一時的コンピュータ読取可能記憶媒体。
［１５］  前記テストケースを実行することは、前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、［１１］に記載の非一時的コンピュータ読取可能記憶媒体。
［１６］  前記テストケースは、前記データ統合ワークフローのバージョンに関係付けられている、［９］に記載の非一時的コンピュータ読取可能記憶媒体。
［１７］  データ統合ワークフローの変換モジュールに対するテストケースを生成するためのシステムであって、
１つ以上のプロセッサと、
１つ以上のアプリケーションを記憶しているメモリと、を備え、前記１つ以上のプロセッサ上で前記１つ以上のアプリケーションが実行されるとき、動作を実行し、
前記動作は、
ソフトウェアフレームワークと互換性のある前記データ統合ワークフローの変換モジュールに対するテストケースを生成させるための要求を受け取ることと、
前記データ統合ワークフロー中で、第１のデータソースから前記変換モジュールへの入力パスを識別することと、
前記データ統合ワークフロー中で、前記変換モジュールから第２のデータソースへの出力パスを識別することと、
前記変換モジュールに対する前記テストケースを定義するコードを生成することと、を備え、ここにおいて、前記テストケースは、前記第１のデータソースまたは前記第２のデータソースにアクセスすることなく、前記ソフトウェアフレームワーク中で実行できる、
システム。
［１８］  前記動作は、
前記データ統合ワークフローのグラフィカルモデルをグラフィカルユーザインターフェース（ＧＵＩ）中に表示することと、ここにおいて、前記グラフィカルモデルの少なくとも１つのアイコンは、前記変換モジュールを表し、
前記グラフィカルユーザインターフェースを介して、前記要求を受け取ることと、をさらに備え、ここにおいて、ユーザは、前記少なくとも１つのアイコンを選択することにより、前記変換モジュールを識別する、
［１７］に記載のシステム。
［１９］  前記動作は、
前記テストケースに対するテスト入力データを受け取ることと、
前記テストケースに対するターゲット出力データを受け取ることと、
前記テストケースを実行することであって、
前記テスト入力データを使用して、前記変換モジュールを実行すること、
前記変換モジュールから実際の出力データを受け取ること、および、
前記実際の出力データを前記ターゲット出力データと比較することにより、
前記テストケースを実行することと、をさらに備える、［１７］に記載のシステム。
［２０］  前記動作は、
前記実際の出力データの前記ターゲット出力データとの比較に基づいて、前記テストケース、前記テスト入力データ、および、前記ターゲット出力データによって定義されたテストに、前記変換モジュールが合格したか不合格であったかを決定することと、
前記決定の表示を記憶することと、をさらに備える、［１９］に記載のシステム。
［２１］  前記動作は、
前記変換モジュールが変更されていると決定することと、
前記決定に応答して、前記テストケースを実行することと、をさらに備える、［１９］に記載のシステム。
［２２］  前記テストケースを実行することは、前記テスト入力データを前記変換モジュールに提供するために、前記第１のデータソースをシミュレートすることを含む、［１９］に記載のシステム。
［２３］  前記テストケースを実行することは、前記実際の出力データを前記変換モジュールから受け取るために、前記第２のデータソースをシミュレートすることを含む、［１９］に記載のシステム。
【国際調査報告】
2019534523.tif 000009
2019534523.tif 000010
2019534523.tif 000011