(57)【要約】【課題】開発中のソフトウェアに関して、プログラムのサイズが大きい場合でも、工数増大を抑えつつ、プログラム性能測定を実現できる技術を提供する。【解決手段】ソフトウェア性能測定システム２の第２ＰＣ２０は、自動テストシステム１の第１ＰＣ１０から、プログラム３０のテストの実行結果として、テストを構成するテスト要素毎のテスト実行時間を含む、テスト結果情報３２を入力し、テストを構成するテスト要素の情報を含むテストシナリオ情報３１を入力し、テスト結果情報３２及びテストシナリオ情報３１に基づいて、テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、その方程式を解くことで、テスト要素毎の実行時間を算出する処理を行い、プログラム３０の性能を表す情報として、テスト要素毎の実行時間を含む情報を、ユーザに対して出力する。【選択図】図１
2018112959.tif 000002
【特許請求の範囲】
【請求項１】
計算機上で、開発中のソフトウェアを構成するプログラムの性能を測定する情報処理を行うソフトウェア性能測定システムであって、
前記プログラムのテストの実行結果として、前記テストを構成するテスト要素毎のテスト実行時間を含む、テスト結果情報を入力し、
前記テストを構成する前記テスト要素の情報を含む、テスト規定情報を入力し、
前記テスト結果情報及び前記テスト規定情報に基づいて、前記テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、前記方程式を解くことで、前記テスト要素毎の前記実行時間を算出する処理を行い、
前記プログラムの性能を表す情報として、前記テスト要素毎の前記実行時間を含む情報を、ユーザに対して出力する、
ソフトウェア性能測定システム。
【請求項２】
請求項１記載のソフトウェア性能測定システムにおいて、
前記テストを構成する前記テスト要素として、処理内容が同等とみなせる複数のテスト要素については、同じ前記目的変数を設定し、
最小二乗法を用いて前記方程式を解く、
ソフトウェア性能測定システム。
【請求項３】
請求項２記載のソフトウェア性能測定システムにおいて、
前記処理内容が同等とみなせる複数のテスト要素についてグループに分類したテスト要素分類表を入力し、
前記テスト規定情報と前記テスト要素分類表とから、前記テストの前記テスト要素を解析して、前記処理内容が同等とみなせる複数のテスト要素に同じ前記目的変数を設定して、テスト要素解析結果情報を出力し、
前記テスト結果情報及び前記テスト要素解析結果情報に基づいて、前記テスト要素毎の前記実行時間を算出する処理を行う、
ソフトウェア性能測定システム。
【請求項４】
請求項１記載のソフトウェア性能測定システムにおいて、
前記テスト規定情報は、テストシナリオとして記述された自動テストを構成する複数の前記テスト要素の情報を含み、
テスト実行環境において所定のタイミングで前記テストシナリオに基づいた前記自動テストが実行された結果を前記テスト結果情報として入力し、
前記テスト結果情報の入力のタイミングに応じて、前記テスト要素毎の前記実行時間を算出する処理を行う、
ソフトウェア性能測定システム。
【請求項５】
請求項１記載のソフトウェア性能測定システムにおいて、
所定のタイミングで実行される複数回の前記テストの結果を前記テスト結果情報として入力して記憶し、
最新の時点の前記テストの結果に基づいた前記テスト要素毎の前記実行時間と、過去の時点の前記テストの結果に基づいた前記テスト要素毎の前記実行時間とを比較して、両者の相違の大きさから、性能変動を検出し、
前記相違の大きさが閾値以上である場合には、前記ユーザに対して警告を出力する、
ソフトウェア性能測定システム。
【請求項６】
請求項５記載のソフトウェア性能測定システムにおいて、
前記性能変動を検出した場合、前記相違の大きい前記テスト要素の箇所に関連付けられる前記プログラムのソースコードの変更差分情報を、前記ユーザに対して出力する、
ソフトウェア性能測定システム。
【請求項７】
請求項１記載のソフトウェア性能測定システムにおいて、
前記テストを構成する複数の前記テスト要素の前記実行時間から、前記テストの単位での実行時間を計算し、前記ユーザに対して出力する、
ソフトウェア性能測定システム。
【請求項８】
開発中のソフトウェアを構成するプログラムの性能を測定する情報処理を計算機に実行させるソフトウェア性能測定プログラムであって、
前記プログラムのテストの実行結果として、前記テストを構成するテスト要素毎のテスト実行時間を含む、テスト結果情報を入力する処理と、
前記テストを構成する前記テスト要素の情報を含む、テスト規定情報を入力する処理と、
前記テスト結果情報及び前記テスト規定情報に基づいて、前記テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、前記方程式を解くことで、前記テスト要素毎の前記実行時間を算出する処理と、
前記プログラムの性能を表す情報として、前記テスト要素毎の前記実行時間を含む情報を、ユーザに対して出力する処理と、
を前記計算機に実行させる、ソフトウェア性能測定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理技術に関し、ソフトウェアの性能を測定や評価するための技術に関する。
【背景技術】
【０００２】
ＩＴシステム開発におけるアプリケーションプログラム等を含むソフトウェアの開発方式としては、アジャイル方式等が挙げられる。アジャイル方式では、コーディングやテストやデバッグ等の工程が反復で行われる。例えばプログラムの第１版が作成され、第１テストが行われ、第１テストの結果から必要に応じて修正して第２版が作成され、第２テストが行われ、といったように工程が繰り返される。
【０００３】
ソフトウェアのテストの方式としては、例えばシナリオテスト方式等がある。シナリオテスト方式では、想定される利用状況等の流れを表すシナリオに従ってプログラムを動作させて問題が無いかどうか確認するテストが行われる。テストによって、プログラムの欠陥があれば検出される。
【０００４】
プログラム開発では、プログラムの性能を考慮しながら開発を行うことが重要である。例えば、プログラムによる機能が十分でも、性能が不足している場合、つまり実行時間が長い場合等には、そのプログラムに問題があるとみなされることや、ＩＴシステムに障害を引き起こすことがある。例えば、一般的なインターネットを通じて利用される買い物サイトを構成するプログラムの場合、利用者が画面で購入ボタンを押せば１秒以内に反応があるべきである。つまり、そのプログラムの実行時間ないし応答時間として１秒以内が望ましい。もし、そのプログラムの性能不足によってその時間が１０秒かかる場合、利用者は、反応の無さに不安になり、ボタンを連打してシステムに不要な負担をかける、接続を切ってしまう、等の恐れがある。また、例えば電子商取引システムの場合、プログラムの性能不足によって、目的の取引ができなくなり、金銭的損害を発生させる恐れもある。上記のように、ＩＴシステムにおいてプログラムの性能は重要であるため、プログラムを実用に供する前に、性能が十分かどうかの検討、測定や評価が行われることが望ましい。
【０００５】
ソフトウェアの性能測定等に係わる先行技術例としては、特開２０１０−６１４６１号公報（特許文献１）が挙げられる。特許文献１には、ソフトウェアの自動性能評価システムとして、開発したアプリケーションソフトウェアの性能評価を自動かつ継続的に行う旨や、以下の旨が記載されている。そのシステムでは、ソフトウェア部品のソースに基づいて実行プログラムを作成し、計測プログラムを実行プログラムに埋め込んだ計測付実行プログラムを作成し、計測付実行プログラムを実機にインストールして実行し、その実行結果と閾値とを比較した結果に基づいて、ソフトウェアの性能評価を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−６１４６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のように、ソフトウェア開発では、プログラムのテストと共に、プログラムの性能の測定や評価も重要である。しかし、プログラムの性能の測定については、プログラムのサイズが大きくなるほど、測定のための工数が大きくなる。その理由は以下である。プログラムの性能の測定のためには、例えば以下の方式が用いられることが多い。プログラムの要所に、通過したことをログとして出力するためのコードが埋め込まれる。言い換えると、そのコードを含む性能測定用プログラムが作成される。そして、そのプログラムが、システムを稼働する環境で実行され、その結果、ログが出力される。出力されたログが参照され、そのログに記載の情報から、そのプログラムの実行時間が把握される。その実行時間から、そのプログラムの性能が十分かどうかが検討される。
【０００８】
しかし、上記ログ出力のためのコード追加の作業工数が一定量必要である。そのため、大きなサイズのプログラムでは、その作業工数が増大し、開発上のコスト増加となる。そのうえ、プログラムに不用意にコードが追加されると、プログラムの挙動が変化する可能性がある。そのプログラムの実行の場合、ログ出力のためにディスクへの書き込み等が増えるため、その分プログラムの性能は確実に低下し、正確な実行時間値は得られない。
【０００９】
これに対し、他の方式としては、上記ログ出力を使わずに、ハードウェアのエミュレータを使用して、実行ステップ等を計測する方式も存在する。しかし、この方式は、エミュレータを含む性能測定装置自体が高価であり、容易に実行可能とは言い難い。
【００１０】
上記のような理由から、プログラム性能測定は頻繁には行われないことが一般的である。通常、プログラムのコーディングの途中で性能測定が行われることは無く、開発終盤でのみ性能測定が行われることが一般的である。ただし、開発終盤で性能不足が判明した場合、プログラムのどこに問題があるかの調査や問題修正等に大きな工数が必要となる。
【００１１】
上記のように、開発中のソフトウェアのテストや性能測定に関して、工数増大等の課題がある。なお、特許文献１のような技術でも、ソフトウェア性能測定のための仕組み、即ち追加コードの埋め込み等が必要であるため、作業工数等に課題がある。
【００１２】
本発明の目的は、開発中のソフトウェアのテストや性能測定等を行う情報処理技術に関して、プログラムのサイズが大きい場合でも、工数増大を抑えつつ、プログラム性能測定を実現できる技術を提供することである。言い換えると、プログラムに追加コードを埋め込む等の追加工数を必要とせず、また、専用の高価な性能測定装置を設ける追加コスト等を必要とせずに、その性能測定を実現できる技術を提供することである。また、本発明の目的は、ソフトウェア開発中、特にテスト中に、早期に性能変動を検出でき、これにより開発効率を向上できる技術を提供することである。
【課題を解決するための手段】
【００１３】
本発明のうち代表的な実施の形態は、ソフトウェア性能測定システムであって、以下に示す構成を有することを特徴とする。
【００１４】
一実施の形態のソフトウェア性能測定システムは、計算機上で、開発中のソフトウェアを構成するプログラムの性能を測定する情報処理を行うソフトウェア性能測定システムであって、前記プログラムのテストの実行結果として、前記テストを構成するテスト要素毎のテスト実行時間を含む、テスト結果情報を入力し、前記テストを構成する前記テスト要素の情報を含む、テスト規定情報を入力し、前記テスト結果情報及び前記テスト規定情報に基づいて、前記テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、前記方程式を解くことで、前記テスト要素毎の前記実行時間を算出する処理を行い、前記プログラムの性能を表す情報として、前記テスト要素毎の前記実行時間を含む情報を、ユーザに対して出力する。
【発明の効果】
【００１５】
本発明のうち代表的な実施の形態によれば、開発中のソフトウェアのテストや性能測定等を行う情報処理技術に関して、プログラムのサイズが大きい場合でも、工数増大を抑えつつ、プログラム性能測定を実現できる。言い換えると、プログラムに追加コードを埋め込む等の追加工数を必要とせず、また、専用の高価な性能測定装置を設ける追加コスト等を必要とせずに、その性能測定を実現できる。また、本発明のうち代表的な実施の形態によれば、ソフトウェア開発中、特にテスト中に、早期に性能変動を検出でき、これにより開発効率を向上できる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態のソフトウェア性能測定システムの構成を示す図である。
【図２】実施の形態で、テストシナリオ情報の構成例を示す図である。
【図３】実施の形態で、テスト結果情報の構成例を示す図である。
【図４】実施の形態で、テスト要素分類表の構成例を示す図である。
【図５】実施の形態で、テストシナリオ解析部の処理フローを示す図である。
【図６】実施の形態で、テスト要素解析結果情報の構成例を示す図である。
【図７】実施の形態で、テスト要素解析結果情報に基づいた方程式を示す図である。
【図８】実施の形態で、テスト要素実行時間情報の構成例を示す図である。
【図９】実施の形態で、性能変動検出部の処理フローを示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において同一部には原則として同一符号を付し、その繰り返しの説明は省略する。
【００１８】
（実施の形態）
図１〜図９を用いて、本発明の実施の形態のソフトウェア性能測定システム等について説明する。実施の形態のソフトウェア性能測定プログラムは、実施の形態のソフトウェア性能測定システムの計算機に処理を実行させるプログラムである。
【００１９】
［ソフトウェア性能測定システム（１）］
図１は、実施の形態のソフトウェア性能測定システムを含んで構成されるソフトウェア開発システムの構成を示す。このソフトウェア開発システムは、自動テストシステム１と、ソフトウェア性能測定システム２と、の少なくとも２つのシステムを含んでいる。２つのシステムは、例えばＬＡＮ等の通信手段を通じて接続されている。
【００２０】
自動テストシステム１は、第１ＰＣ１０等によって構成されている。自動テストシステム１は、公知技術によって構成可能であり、例えば、既存の自動テストツール等によって構成されるテスト実行環境１１が適用可能である。テスト実行環境１１は、従来の回帰テストやシナリオテスト等で使用されている。第１ＰＣ１０は、自動テストを行う機能を持つ計算機であり、テスト装置である。テスト作業を行うユーザは、第１ＰＣ１０を操作する。
【００２１】
なお、第１ＰＣ１０及び第２ＰＣ２０は、一般的なＰＣと同様の構成であり、図示しないが、ＣＰＵ、ＲＯＭ、ＲＡＭ、ストレージ、入力機器、出力機器、通信インタフェース装置、バス等の要素を備え、それらの要素が接続されている。また、第１ＰＣ１０や第２ＰＣ２０は、単一装置に限らず、クライアントサーバシステム等で構成されてもよい。また、自動テストシステム１の第１ＰＣ１０と、ソフトウェア性能測定システム２の第２ＰＣ２０とが、１つのシステム及び単一装置として併合された形態としてもよい。また、テストや性能測定の作業を行うユーザは、同一ユーザとしてもよいし、それぞれ複数人が同様に存在して分担作業を行う方式でもよい。
【００２２】
自動テストシステム１の第１ＰＣ１０において、テスト実行環境１１、入出力部１２、プログラム３０、テストシナリオ情報３１、テスト結果情報３２等を有する。テスト実行環境１１は、第１ＰＣ１０のＣＰＵがソフトウェアプログラム処理を実行することにより実現される。入出力部１２は、入力機器や出力機器が接続される入出力インタフェースを含む部分である。入出力部１２は、図示しない表示装置の表示画面に画像情報を表示する処理、例えば、自動テストに係わるグラフィカル・ユーザ・インタフェース（ＧＵＩ）やコマンドライン・ユーザ・インタフェース（ＣＵＩ）の画面を表示する処理、等を行う。また、入出力部１２は、ＧＵＩ等の画面に対し、図示しないキーボードやマウス等の入力機器を通じて、ユーザからの入力操作を受け付ける処理、等を行う。
【００２３】
プログラム３０は、開発中のソフトウェアを構成するプログラムであり、テスト対象であると共に、性能測定対象である。プログラム３０は、入出力部１２を通じて第１ＰＣ１０内に入力され、図示しないメモリに格納される。
【００２４】
テストシナリオ情報３１は、テスト規定情報であり、自動テストで用いるテストシナリオが記述されている。テストシナリオ情報３１は、入出力部１２を通じて、第１ＰＣ１０内のメモリに格納される。また、ユーザは、入出力部１２を通じて、テストシナリオ情報３１の内容の確認や設定が可能である。実施の形態では、自動テストでテストシナリオ方式を用いる。テストシナリオ情報３１は、その方式に対応するテストの内容を規定する情報である。
【００２５】
第１ＰＣ１０では、入出力部１２を通じたユーザの操作に基づいて、テスト実行環境１１上の自動テストの実行が制御される。テスト実行環境１１は、自動テストの際、入力されるプログラム３０及びテストシナリオ情報３１に基づいて、自動テストを実行し、その結果を、テスト結果情報３２として出力する。第１ＰＣ１０は、テスト実行環境１１上で、プログラム３０を実行し、そのプログラム３０に対し、テストシナリオ情報３１に基づいたテストを実行する。
【００２６】
テスト結果情報３２には、自動テスト結果情報が記載されている。ユーザは、入出力部１２を通じて、テスト結果情報３２の内容を確認できる。
【００２７】
更に、実施の形態では、テスト結果情報３２及びテストシナリオ情報３１が、通信を通じて、ソフトウェア性能測定システム２の第２ＰＣ２０に入力され、第２ＰＣ２０内の図示しないメモリ等に格納される。
【００２８】
自動テストシステム１でプログラム３０の自動テストを行ってテスト結果情報３２を出力するまでが、第１の仕組み及び工程である。第２の仕組み及び工程は、ソフトウェア性能測定システム２で、自動テスト結果を用いてプログラム３０の性能測定を行って、その結果を出力するまでである。性能測定の結果を表す情報として、テスト要素実行時間情報３５（性能測定情報３６）が算出される。
【００２９】
ソフトウェア性能測定システム２は、第２ＰＣ２０等によって構成されている。ソフトウェア性能測定システム２の第２ＰＣ２０は、性能測定等の機能を実現するための特有のプログラムを有する。そのプログラムである実施の形態のソフトウェア性能測定プログラムは、第２ＰＣ２０内の図示しない記憶装置に格納されている。第２ＰＣ２０は、ＣＰＵによってそのプログラムをメモリに読み出してそのプログラムに従った処理を実行することにより、その性能測定等の機能を実現する。その機能を構成する複数の部位として、テストシナリオ解析部２１、テスト要素実行時間取得部２２、性能変動検出部２３を有する。
【００３０】
第２ＰＣ２０は、性能測定を行う機能を持つ計算機であり、性能測定装置である。性能測定作業を行うユーザは、第２ＰＣ２０を操作する。第２ＰＣ２０は、テストシナリオ解析部２１、テスト要素実行時間取得部２２、性能変動検出部２３、入出力部２９、テスト要素分類表３３、テスト要素解析結果情報３４、テスト要素実行時間情報３５、ＤＢ４０、性能測定情報３６、性能変動検出情報３７、ソース情報３８、等を有する。
【００３１】
テスト要素分類表３３は、入出力部２９を通じて、第２ＰＣ２０内に入力される。ユーザは、入出力部２９を通じて、テスト要素分類表３３の内容の確認や設定が可能である。
【００３２】
テストシナリオ解析部２１は、テストシナリオ情報３１及びテスト要素分類表３３から、テスト及びテストシナリオの内容を解析し、その解析結果を、テスト要素解析結果情報３４として記載するようにして出力する。テスト要素解析結果情報３４は、第２ＰＣ２０内に保持される。
【００３３】
テスト要素実行時間取得部２２は、言い換えると性能測定処理部である。テスト要素実行時間取得部２２は、テスト要素解析結果情報３４及びテスト結果情報３２を用いて、テストを構成しているテスト要素毎の実行時間を算出し、その算出結果を、テスト要素実行時間情報３５として記載するようにして出力する。テスト時点毎にテスト結果情報３２が入力される。テスト要素実行時間取得部２２は、テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、その方程式を解くことで、テスト要素毎の実行時間を算出する処理を行う。
【００３４】
テスト要素実行時間情報３５は、テスト時点毎の性能測定情報３６として得られる。ＤＢ４０内には、複数のテスト要素実行時間情報３５である複数の性能測定情報３６が、時系列で整理された状態で格納される。なお、ＤＢ４０は、第２ＰＣ２０内のストレージ等で構成されてもよいし、第２ＰＣ２０外のＤＢサーバ等で構成されてもよい。ユーザは、入出力部２９を通じて、性能測定情報３６の内容の確認や外部出力が可能である。
【００３５】
更に、ソフトウェア性能測定システム２では、複数回のテストのテスト結果情報３２及びそれらに対応付けられる性能測定情報３６に基づいて、プログラム３０に関する性能変動を検出する機能を備える。その機能は、性能変動検出部２３を用いて実現される。
【００３６】
自動テストシステム１の第１ＰＣ１０は、制御や設定に基づいて、所定のタイミングでテストを実行する。特に、所定の各タイミングで複数回のテストが自動テストとして実行される。これにより、時系列での複数回の分のテスト結果情報３２が得られる。ソフトウェア性能測定システム２は、その複数回の各回のテスト結果情報３２を取得して、各回の性能測定及び性能変動検出に用いる。なお、ＤＢ４０には、性能測定情報３６だけでなく、複数回のテスト結果情報３２や、図１に示す他の必要な情報が格納されてもよい。
【００３７】
性能変動検出部２３は、複数回のテスト分のテスト要素実行時間情報３５（対応する性能測定情報３６）を用いて、プログラム３０の性能変動を検出し、その検出結果を、性能変動検出情報３７として出力する。ユーザは、入出力部２９を通じて、性能変動検出情報３７の内容の確認や外部出力が可能である。特に、性能変動検出部２３は、最新のテスト結果の性能測定情報３６と、過去のテスト結果の性能測定情報３６とを比較して、性能変動を検出する。なお、性能変動検出情報３７は、性能測定情報３６内の一部として記述されてもよい。
【００３８】
また、性能変動検出部２３は、後述するが、ソース情報３８を用いて、性能変動に係わるソースコード変更差分情報を出力する機能も備える。ソース情報３８は、自動テストシステム１のリポジトリＤＢ９０の情報に基づいた情報である。ソース情報３８は、入出力部２９を通じて、第２ＰＣ２０内に入力される。なお、この機能を省略した形態も可能である。
【００３９】
［ソフトウェア性能測定システム（２）］
ソフトウェア性能測定システム２の機能等の概要は以下である。ソフトウェア性能測定システム２は、ソフトウェア開発中に行う自動テストの結果を利用して、プログラム３０の性能として実行時間を測定する機能を有する。ソフトウェア性能測定システム２は、テスト結果から、回帰分析の手法を用いて、テスト要素毎の実行時間を測定する。また、ソフトウェア性能測定システム２は、性能測定の結果に基づいて、性能変動を検出する。
【００４０】
テスト方式としては、シナリオテスト方式が用いられる。この自動テストでは、予め作成されたテストシナリオ（テストシナリオ情報３１に含む）に基づいて、テスト実行エンジン（図１のテスト実行環境１１）がテストを実行する。テストシナリオ情報３１には、どのようなテストの処理を行うかが、テストを構成するテスト要素の組合せで記述されている。そのテストの結果として、テストの合否、及びテストを実施した際に要したテスト実行時間を含む、テスト結果情報３２が出力される。上記のような前提で、自動テストシステム１は、対象のプログラム３０に対し、テストシナリオに基づいたテストを実行し、そのテスト結果であるテスト実行時間等の情報がテスト結果情報３２に記録される。
【００４１】
ソフトウェア性能測定システム２のテストシナリオ解析部２１は、テストシナリオ情報３１のテストシナリオから、テストの手順に対応するテスト要素を抽出する。テストシナリオ解析部２１は、各手順のテスト要素に、回帰分析の目的変数を割り当てる。例えば、テストシナリオで記述されているテストのうち、第１テストを有する。その第１テストにおいて、複数の手順である複数のテスト要素として、ユーザ入力操作（第１手順）、内容チェック処理（第２手順）、サーバへの問合せ処理（第３手順）、及び結果出力処理（第４手順）、といった複数の手順のテスト要素に分解される。これらの複数の手順のテスト要素のそれぞれに対し、変数ａ，ｂ，ｃ，ｄといったように変数が割り当てられる。各変数の値は、テスト要素毎のテスト実行時間を表す。このように割り当てられた変数の和、例えば（ａ＋ｂ＋ｃ＋ｄ）値は、プログラム３０の性能を表す実行時間になる。
【００４２】
ソフトウェア性能測定システム２は、このような処理を、実行したテストの数だけ同様に行う。この際、複数のテストシナリオの複数のテスト間で、殆ど同じ処理内容とみなせる手順のテスト要素については、同じ目的変数を割り当てるようにする。例えば、上記「ユーザ入力操作」（第１手順）に対応する「ユーザ入力処理」が、各テストシナリオのテストに同様に存在する。その場合、ソフトウェア性能測定システム２は、それらのテスト要素の処理に、同じ目的変数を割り当てる。上記のように変数を割り当てるのは、同等の処理には殆ど同じ実行時間がかかるであろうという仮定に基づいている。
【００４３】
例えば、２つ目の第２テストを有する。第２テストの手順は、第１テストの手順と比べて、上記「サーバへの問合せ処理」（第３手順）だけ内容が異なるとする。その場合、同等の処理とみなせる第１手順、第２手順、及び第４手順については、変数ａ，ｂ，ｄのように第１テストと同じ目的変数が割り当てられる。両者で異なる第３手順のみ、異なる目的変数が割り当てられる。
【００４４】
ソフトウェア性能測定システム２は、これらの処理を、複数のテストシナリオのテストについて同様に行う。すると、後述するが、テストシナリオの数に対応した方程式が得られる。よって、ソフトウェア性能測定システム２は、その方程式を、重回帰分析における最小二乗法等によって解くことで、各目的変数の値を得る。こうして得られた値は、テストの各手順のテスト要素の処理の実行時間に相当する。ソフトウェア性能測定システム２は、この実行時間値の取得、即ち性能測定を、定期的なタイミングで行う。このタイミングは、開発の区切り等のタイミングとしてもよいし、ユーザが設定可能である。これにより、時系列の時点毎に、プログラム３０の性能測定値として実行時間値が得られる。これにより、ユーザは、ソフトウェア開発中、特に自動テスト中に、プログラム３０の性能を測定することができる。
【００４５】
上記性能測定の結果、処理の実行時間には大きな変動が無いはずなのに測定結果の実行時間が長くなることが観察される場合がある。例えば、過去（例えば前回）の測定値と最新の測定値との相違が、ある程度以上に大きいことが観察される場合がある。その場合、ソフトウェア性能測定システム２は、性能変動として、プログラム３０の実装（コーディング）またはシステム等に問題が発生した可能性があることを、迅速に検出できる。ソフトウェア性能測定システム２は、例えばプログラム３０のコード変更の影響によってその性能変動が生じたものと推測できる。これにより、ユーザは、ソフトウェア開発中、特に自動テスト中に、その性能変動を迅速に知ることができる。よって、ユーザは、早期に調査やコード修正等の対応ができる。従って、開発全体の工数の増加を抑制できる。
【００４６】
上記重回帰分析による実行時間値の導出には一般に誤差が含まれているが、ソフトウェア性能測定システム２では、多数のテスト結果情報を用いるので、導出される値、即ち性能測定値である実行時間値に関して、実用的な精度を確保できる。ソフトウェア性能測定システム２では、前提となるテストとしては、纏めて複数の種類のテストシナリオのテスト、一般には１００種類以上の多数のテストが実行されることが殆どである。そのため、ソフトウェア性能測定システム２は、回帰分析を用いた性能測定に関して、実用的な精度を確保できる。
【００４７】
［テストシナリオ］
図２は、テストシナリオ情報３１の構成例を示す。テストシナリオ情報３１は、複数のテスト（言い換えるとテスト規定情報）を含む。テストは、テストシナリオで記述されている。テストシナリオ情報３１は、複数のテストシナリオ及び対応する複数のテストから階層的に構成されている。ある１つのテストは、下位階層の複数のテストから構成されてもよい。
【００４８】
図２の例では、テストシナリオ情報３１は、複数のテストとして、テストＡ，テストＢ，……等を含む。テストＡは、テストＡを実行するためのテストシナリオＡで記述されている。テストＢは、テストＢを実行するためのテストシナリオＢで記述されている。
【００４９】
テストシナリオのテストは、複数の手順の処理に対応付けられる複数のテスト要素で構成されている。例えば、テストシナリオＡは、テスト要素Ａ１〜Ａ６を含む。テストシナリオＢは、テスト要素Ｂ１〜Ｂ６を含む。なお、“Ａ”，“Ａ１”等は、説明上の識別情報を示す。テストシナリオを構成する複数の行における１行分の処理を、テスト要素と呼ぶ。テストシナリオのテストは、テスト要素の集合として定義されている。
【００５０】
テスト実行環境１１において、あるタイミングで、それぞれのテストシナリオのテスト（対応するプログラム処理）を実行することで、それらの全体として１つの自動テストが行われる。この自動テストの結果が、テスト結果情報３２として出力される。テスト結果情報３２は、テストが行われたタイミング等を識別する情報も含む。
【００５１】
図２のテストシナリオ情報３１のテストシナリオ及びテストの構成例を説明する。本例では、テストの内容として、ユーザ画面からの入力によってサーバにデータを要求し、その結果が正しいか及び表示が正しいかを確認する。テストシナリオは、日本語のような自然言語の文で記述されており、記述されているテスト要素の順に処理が実行される。
【００５２】
テストシナリオＡに記述されている内容は以下である。テストシナリオＡは、テスト要素Ａ１〜Ａ６で構成されている。まず、テスト要素Ａ１では、「「入力欄１」に文字列「001」を「入力」。」と記述されている。この手順は、ユーザがユーザ画面の「入力欄１」に文字列「001」を入力する旨を表している。次に、テスト要素Ａ２では、「「入力欄１」の内容で「商品名検索」を実行。」と記述されている。この手順は、上記テスト要素Ａ１の「入力」が完了したタイミングで、「入力欄１」の入力内容である文字列「001」を用いて、サーバに対し、「商品名検索」の処理を行うように要求する旨を表している。
【００５３】
次に、テスト要素Ａ３は、「「得られた値」が「パソコン」であることを確認。」と記述されている。この手順は、上記テスト要素Ａ２の要求に対してサーバから応答として得られた文字列が「パソコン」であることを確認する旨を表している。更に、テスト要素Ａ３内では、上記確認の結果、両者（「得られた値」，「パソコン」）の値が異なる場合には、「テスト失敗（エラーコード＝１）」を出力して終了する旨が記述されている。即ち、この処理の結果、得られた値が「パソコン」ではない場合、エラーコード＝１が出力され、テストＡが終了される。エラーではない場合、即ち得られた値が「パソコン」である場合には、次の手順に続く。
【００５４】
次に、テスト要素Ａ４は、「「出力欄１」に「得られた値」を「出力」。」と記述されている。この手順は、上記テスト要素Ａ３の「得られた値」である「パソコン」を、ユーザ画面の「出力欄１」に表示する旨を表している。次に、テスト要素Ａ５は、「「出力欄１」の表示が「画像１」と同じかを確認。」と記述されている。この手順は、上記テスト要素Ａ４の「出力欄１」の表示内容が正しいかを、別途保存されている「画像１」と比較して確認する旨を表している。更に、テスト要素Ａ５内では、上記確認の結果、両者（「出力欄１」の表示内容、「画像１」）が異なっている場合には、「テスト失敗（エラーコード＝２）」を出力してテストＡを終了する旨が記述されている。即ち、この処理の結果、両者が不一致の場合には、エラーコード＝２が出力され、テストＡが終了される。両者が一致の場合には、次の手順に続く。
【００５５】
テスト要素Ａ６は、「テスト成功で終了（エラーコード＝０）」と記述されている。この手順は、テスト結果を成功として、テストシナリオＡのテストＡを終了する旨を表している。
【００５６】
テストＢのテストシナリオＢについても同様である。テスト要素Ｂ１は、「「入力欄２」に文字列「002」を「入力」。」と記述されている。テスト要素Ｂ２は、「「入力欄２」の内容で「納品期限日検索」を実行。」と記述されている。テスト要素Ｂ３は、「「得られた値」が「2001/01/01」以降であることを確認。」等と記述されている。テスト要素Ｂ４は、「「出力欄２」に「得られた値」を「出力」。」と記述されている。テスト要素Ｂ５は、「「出力欄２」の表示が「画像２」と同じかを確認。」等と記述されている。テスト要素Ｂ６は、「テスト成功で終了（エラーコード＝０）」と記述されている。
【００５７】
上記例のように、テストシナリオＡ（テストＡ）とテストシナリオＢ（テストＢ）とでは、概略同じような内容のテスト要素が含まれている。例えば、テスト要素Ａ１の「入力」の処理と、テスト要素Ｂ１の「入力」の処理とは、概略同じような内容である。テスト要素Ａ４の「出力」の処理とテスト要素Ｂ４の「出力」の処理についても同様である。同様に、あるプログラム３０のテストにおける複数のテストシナリオのテスト間では、概略同じような内容のテスト要素が共通に含まれていることが多い。
【００５８】
［テスト結果情報］
図３は、テスト結果情報３２の構成例を示す。図２、図３を用いて、テストシナリオ情報３１とテスト結果情報３２との関係を説明する。図３のテスト結果情報３２の表は、項目（列）として、テスト、テスト合否、テスト実行時間を含む。［テスト］項目は、テストシナリオに対応付けられたテストの識別情報を示す。図３の例では、図２のテストの実行結果が記載されている。［テスト］項目には、前述のテストＡ、テストＢ等がある。［テスト合否］項目は、［テスト］項目のテスト結果として、合格（成功、例えば値が０）または不合格（例えば値が１）を示す。例えばテストＡの結果が合格、テストＢの結果が不合格である。［テスト実行時間］項目は、［テスト］項目のテストの処理の実行に要した時間が記載される。この［テスト実行時間］は、自動テストシステム１の既存のテスト実行環境１１（自動テストツール）の機能によって得られる時間であって、ソフトウェア性能測定システム２の目的として性能測定しようとしているプログラム３０の実行時間とは異なる。例えば、テストＡの実行時間が０．０３秒、テストＢの実行時間が０．０５秒となっている。
【００５９】
上記のように、テスト結果情報３２には、ある日時（回）の１つの自動テストを構成している複数の各々のテストシナリオのテストの結果情報が登録されている。次の日時（回）の自動テストの際にも同様に結果情報が登録される。なお、テスト結果情報３２は、日時（回）毎に別の表として作成されてもよいし、１つの表の中に、複数の日時（回）毎に情報が記載されてもよい。
【００６０】
［テスト要素分類表］
図４は、テスト要素分類表３３の構成例を示す。テスト要素分類表３３は、テスト要素のグループへの分類を表す情報が設定されている。図４の（Ａ）は、設定例を示す。テスト要素分類表３３は、テストシナリオ情報３１に記載されている複数のテスト要素のうち、どのテスト要素を同じものとみなして分類するかについての設定情報が記載されている。例えば、前述のテスト要素Ａ１とテスト要素Ｂ１とを同じ内容のテスト要素とみなす場合には、それらのテスト要素Ａ１とテスト要素Ｂ１は、同じグループに分類されるように設定される。ユーザは、テスト要素分類表３３に、テスト要素に関するグループの分類をユーザ設定可能である。
【００６１】
テストシナリオのテストにおけるテスト要素の処理が実行される際には、必ずその分のテスト実行時間が発生する。これらのテスト実行時間は、テスト要素のそれぞれにおいて基本的には別の値になる。しかしながら、複数のテスト要素間では、テスト実行時間が明らかに同一になるものがある。また、複数のテスト要素間では、テスト実行時間の差異が非常に小さくなるものがある。それらのテスト要素及びテスト実行時間については、性能測定の目的上、同一とみなしても問題無い。よって、テスト要素分類表３３には、それらの同一とみなせるテスト要素が、同一のグループに分類されるように設定される。
【００６２】
例えば、前述のテスト要素Ａ１の「入力欄１」への値の「入力」の処理やテスト要素Ｂ１の「入力欄２」への値の「入力」の処理は、自動テストである場合、一瞬で実行できる。そのため、テスト要素Ａ１やテスト要素Ｂ１のテスト実行時間の値が小さくなることが明らかである。同様に、テスト要素Ａ４の「出力」の処理やテスト要素Ｂ４の「出力」の処理も、一瞬で実行できる。このように、テスト実行時間が殆ど同等と考えられるテスト要素、あるいは事前の計測等によってテスト実行時間が同じと判明しているテスト要素がある。ユーザは、それらのテスト要素については、同じグループに分類しておく。
【００６３】
具体的には、図４の（Ａ）のテスト要素分類表３３の例では、複数のグループとして、グループＡ、グループＢ等を有する。本例では、グループが自然言語で記述されている。グループＡは、「「入力欄＊」への「入力」。」という行４０１や、「「出力欄＊」への「出力」。」という行４０２が記述されている。グループＢは、「画像の総ピクセル数の差が±１０％未満の画像比較。」という行４０３が記述されている。各行は、テスト要素（手順）に対応している。グループＡは、例えば、行４０１の「「入力欄＊」への「入力」。」という内容や行４０２の「「出力欄＊」への「出力」。」という内容に該当する全てのテスト要素については、同じグループＡに属することを表している。なお、記述中の記号「＊」（アスタリスク）は、全てを表している。例えば前述の「入力欄１」や「入力欄２」、他の「入力欄Ｚ」等は、「入力欄＊」に含まれる対象になる。テスト要素分類表３３の記述には、一般的な正規表現を用いてもよい。
【００６４】
テスト要素の分類は、図４の（Ａ）の方式に限らず可能である。図４の（Ｂ）には、他の設定例を示す。このテスト要素分類表３３は、項目として、テスト要素、グループを有する。［テスト要素］項目は、テスト要素の識別情報が記載されている。［グループ］項目には、グループの識別情報が記載されている。即ち、このテスト要素分類表３３は、それぞれのテスト要素毎に、分類するグループとの関連付けが設定されている。例えば、テスト要素Ａ１、テスト要素Ａ４、テスト要素Ｂ１等には、同じグループＡが設定されている。
【００６５】
［テストシナリオ解析部］
図５は、テストシナリオ解析部２１の処理フローを示す。この処理は、テスト要素分類表３３に基づいて、テストシナリオ情報３１に記載のテスト要素を解析し、解析結果をテスト要素解析結果情報３４として出力する処理である。この処理では、グループに分類されるテスト要素毎に、回帰分析の目的変数が割り当てられ、回帰分析の方程式が生成される。この回帰分析の方程式は、特に、複数の変数を持つ重回帰分析の方程式である。
【００６６】
図５の処理は、ステップＳ１１〜Ｓ１５を有する。以下、ステップの順に説明する。Ｓ１１で、まず、テストシナリオ解析部２１は、テストシナリオ情報３１から、順に１つのテストシナリオのテストの情報を読み込み、そのテストシナリオのテストから順に１行のテスト要素毎に読み込む。そして、テストシナリオ解析部２１は、読み込んだテスト要素に、個別に初期目的変数を割り当てる処理を行う。初期目的変数は、グループ分類を考慮せずに１つずつ順に異なる変数が割り当てられればよい。テストシナリオ解析部２１は、後述の図６のテスト要素解析結果情報３４の［初期目的変数］項目に、割り当てた初期目的変数を記載する。Ｓ１２で、テストシナリオ解析部２１は、Ｓ１１の処理を、対象のテストシナリオの全てのテスト要素の行について行ったかを確認する。テストシナリオ解析部２１は、その確認をしながら、全てのテスト要素に割り当てるまで、Ｓ１１，Ｓ１２の処理を同様に繰り返す。
【００６７】
次に、Ｓ１３で、テストシナリオ解析部２１は、テスト要素分類表３３から順に１つずつグループを参照し、そのグループ及びそれに対応付けられるテスト要素に注目する。テストシナリオ解析部２１は、Ｓ１２の結果で初期目的変数が割り当てられているテスト要素に対して、注目するグループに属しているテスト要素があるかを判断する。そして、テストシナリオ解析部２１は、同じグループに属している全てのテスト要素について、同じ共通の目的変数である最終目的変数を割り当てるように設定する処理を行う。テストシナリオ解析部２１は、後述の図６のテスト要素解析結果情報３４の［最終目的変数］項目に、割り当てた最終目的変数を記載する。Ｓ１４で、テストシナリオ解析部２１は、Ｓ１３の処理を、テスト要素分類表３３の全てのグループについて行ったかを確認する。テストシナリオ解析部２１は、その確認をしながら、全てのグループについて行うまで、Ｓ１３，Ｓ１４の処理を同様に繰り返す。
【００６８】
Ｓ１５で、テストシナリオ解析部２１は、Ｓ１１〜Ｓ１４の処理を、テストシナリオ情報３１の全てのテストシナリオのテストについて行ったかを確認し、全てについて行ったら、本処理フローを終了する。
【００６９】
上記解析処理によって、最終的に、図６のようなテスト要素解析結果情報３４の最終目的変数（ｙ１〜ｙ５等）が得られる。
【００７０】
上記解析処理では、テスト要素分類表３３を用いて、同等とみなせるテスト要素の処理をグループに纏めて、グループ毎に目的変数を設定している。この方式には、以下のような理由もある。ソフトウェア性能測定システム２では、回帰分析の方程式を用いて、性能を表す実行時間を算出するために、テスト要素毎に目的変数を設定する。ここで、例えば、グループＡの「「入力欄＊」への「入力」」等に該当するテスト要素の処理は、テスト実行時間が比較的短く、かつ、ある自動テストの中で大量に表れる処理である。このような複数のテスト要素の処理は、それらの全てに個別に異なる目的変数（初期目的変数が相当する）を割り当てた場合、目的変数の個数が多くなり、方程式が解けない、または、分析精度が低くなる。分析精度が低くなるのを避けるために、それらの同等とみなせる複数のテスト要素に対しては、同じ目的変数を割り当てる。前述のように、「入力」や「出力」等の処理は、簡単であることが多く、同等とみなしても問題無い。実施の形態では、そのような仮定に基づいて、上記のように共通の最終目的変数に纏める処理を行っている。これにより、目的変数の個数が比較的少なくなり、重回帰分析の方程式を最小二乗法によって解くことができ、分析精度が高くなる。
【００７１】
また、実施の形態では、テストシナリオ解析部２１によって、テスト要素分類表３３に基づいてテスト要素解析結果情報３４を生成する処理を行っている。ユーザは、テスト要素分類表３３を設定し、解析を指示すれば、後は、テスト要素解析結果情報３４が生成される。変形例としては、これに限らず可能であり、テストシナリオ解析部２１を用いずに、ユーザが手動で直接的に、テスト要素分類表３３に基づいてテスト要素解析結果情報３４（回帰分析のための方程式）を設定してもよい。即ち、その場合、テストシナリオ解析部２１の実装は不要であり、ユーザは、第２ＰＣ２０で、入出力部２９を通じて、ＧＵＩ画面に対し、テスト要素解析結果情報３４の回帰分析のための方程式の設定作業を行えばよい。
【００７２】
［テスト要素解析結果情報］
図６は、テスト要素解析結果情報３４の構成例を示す。図６のテスト要素解析結果情報３４の表は、項目（列）として、テスト、テスト要素、初期目的変数、最終目的変数を有する。［テスト］項目は、テストシナリオのテストの識別情報が格納されている。［テスト要素］項目は、テストシナリオのテストを構成する１つ以上のテスト要素の識別情報や文（行）を示し、テストシナリオ情報３１に基づいた情報である。［初期目的変数］項目は、テスト要素毎に割り当てられた前述の初期目的変数が格納されている。初期目的変数の例を“ａ１”等で示す。例えば、テストＡにおけるテスト要素Ａ１には初期目的変数ａ１が割り当てられている。テスト要素Ａ２には変数ａ２、テスト要素Ａ３には変数ａ３、テスト要素Ａ４には変数ａ４、テスト要素Ａ５には変数ａ５、といったように割り当てられている。同様に、テストＢにおけるテスト要素Ｂ１には初期目的変数ｂ１、といったように割り当てられている。［最終目的変数］項目は、テスト要素の初期目的変数に対して割り当てられた前述の最終目的変数が格納されている。最終目的変数の例を“ｙ１”等で示す。例えば、テストＡにおけるテスト要素Ａ１の初期目的変数ａ１には最終目的変数ｙ１が割り当てられている。テスト要素Ａ２の初期目的変数ａ２には最終目的変数ｙ２が割り当てられている。テスト要素Ａ３の初期目的変数ａ３には最終目的変数ｙ３が割り当てられている。テスト要素Ａ４の初期目的変数ａ４には、テスト要素Ａ１の初期目的変数ａ１と同じく、最終目的変数ｙ１が割り当てられている。テスト要素Ａ５の初期目的変数ａ５には、テスト要素Ａ２の初期目的変数ａ２と同じく、最終目的変数ｙ２が割り当てられている。即ち、テストＡのテスト要素Ａ１〜Ａ５の初期目的変数ａ１〜ａ５に対しては、最終目的変数｛ｙ１，ｙ２，ｙ３，ｙ１，ｙ２｝を有する。同様に、テストＢのテスト要素Ｂ１〜Ｂ５の初期目的変数ｂ１〜ｂ５に対しては、最終目的変数｛ｙ１，ｙ４，ｙ５，ｙ１，ｙ２｝を有する。
【００７３】
［回帰分析の方程式］
図７は、テスト要素解析結果情報３４に基づいて立てられた回帰分析の方程式を示す。この方程式は、図６のテスト要素解析結果情報３４の表（特に最終目的変数）を、数式として表現したものである。テスト要素実行時間取得部２２は、テスト結果情報３２と、テスト要素解析結果情報３４とから、このような方程式を作成する。
【００７４】
図７の（Ａ）は、図６のテスト要素解析結果情報３４の例を数式化した方程式を示す。この方程式は、説明変数行列７１、目的変数ベクトル７２、及び、テスト実行時間ベクトル７３からなる。この方程式は、説明変数行列７１と目的変数ベクトル７２とを乗算した結果がテスト実行時間ベクトル７３と同じであることを表す。
【００７５】
図７の（Ｂ）は、図７の（Ａ）の方程式を一般化した方程式であり、回帰分析の行列式を示す。行列式をＡＹ＝Ｂで表す。行列Ａは、説明変数行列７１に対応する。１列であるベクトルＹ｛ｃ，ｙ１，ｙ２，……，ｙｍ｝は、目的変数ベクトル７２に対応する。１列であるベクトルＢ｛ｔ１，ｔ２，……，ｔｎ｝は、テスト実行時間ベクトル７３に対応する。
【００７６】
図７の（Ａ）で、説明変数行列７１における行は、係数が並んでおり、目的変数ベクトル７２のそれぞれの目的変数が、どのテスト要素に関係付けられているかを表している。目的変数ベクトル７２は、自動テストの全てのテストのテスト要素に対して割り当てられた目的変数を羅列したものであり、図６の［最終目的変数］と対応する。テスト実行時間ベクトル７３は、説明変数行列７１に目的変数ベクトル７２を乗じた式であり、それぞれの値は、前述のテスト実行時間（図３の［テスト実行時間］）に等しい。
【００７７】
目的変数ベクトル７２中の変数“ｃ”は、定数であり、全てのテストにおいて均等に要するテスト要素として、テストシナリオ情報３１に記述されていない処理を纏めたものである。例えば、ログを出力するためにかかる時間等がこの定数に相当する。
【００７８】
例えば、説明変数行列７１における１行目｛１，２，２，１，０，０，…｝は、テストＡに対応している。テストＡのテスト要素Ａ１〜Ａ５に対し、最終目的変数｛ｙ１，ｙ２，ｙ３，ｙ１，ｙ２｝が割り当てられている。例えば、変数ｙ１は、２つのテスト要素Ａ１，Ａ４に共通に割り当てられているので、説明変数行列７１の１行目の２番目の係数が“２”となっている。例えば、説明変数行列７１の１行目と目的変数ベクトル７２との乗算結果は、テスト実行時間ベクトル７３の１番目の値として、ｃ＋２ｙ１＋２ｙ２＋ｙ３と表される。この値は、テスト結果で得られた［テスト実行時間］の値と等しい。図３のテストＡの［テスト実行時間］の値をｔ１とおくと、ｔ１＝ｃ＋２ｙ１＋２ｙ２＋ｙ３である。
【００７９】
図７の（Ｂ）の方程式（ＡＹ＝Ｂ）において、添え字“ｍ”は、自動テストの全てのテストに対して割り当てられた目的変数の個数である。添え字“ｎ”は、自動テストを構成するテストの総数である。“ｔｎ”は、ｎ番目のテストの［テスト実行時間］を示す。例えば、行列Ａの１行目については、ｃ＋ａ１１ｙ１＋ａ１２ｙ２＋……＋ａ１ｍｙｍ＝ｔ１と表される。
【００８０】
ＡＹ＝Ｂにおいて、誤差を考慮しない場合、Ｙ＝（ＡＴ・Ａ）−１・ＡＴ・Ｂ、という行列式で表せることが知られている。なお、ここで、ＸＴは、行列Ｘの転置行列を示し、Ｘ−１は、行列Ｘの逆行列を示す。上記方程式を用いて、ベクトルＹから目的変数を求めることができる。
【００８１】
テスト要素実行時間取得部２２は、上記のような重回帰分析の方程式を、最小二乗法を用いて解くことで、最終目的変数｛ｙ１，……，ｙｍ｝の値、即ちテスト要素毎の実行時間値、を取得する。テスト要素実行時間取得部２２は、得られたテスト要素毎の実行時間値を、テストシナリオのテスト毎に加算することで、テスト毎の実行時間値を得ることができる。例えば、テストＡの実行時間値は、ｙ１＋ｙ２＋ｙ３＋ｙ１＋ｙ２＝２ｙ１＋２ｙ２＋ｙ３として得られる。
【００８２】
［テスト要素実行時間情報］
図８は、テスト要素実行時間情報３５の構成例を示す。図８の上側は、テスト要素毎の結果を纏めた表を示す。図８の下側は、テスト毎の結果を纏めた表を示す。図８の上側のテスト要素実行時間情報３５の表は、項目（列）として、最終目的変数、テスト要素例、実行時間（性能実行時間）、誤差、出力相違、を有する。［最終目的変数］項目は、前述のベクトルＹに対応する最終目的変数（“ｙ１”等）及び定数（“ｃ”）を示す。［テスト要素例］項目は、その最終目的変数に関係付けられるテスト要素の例の文を示す。これは、前述のテストシナリオ情報３１またはテスト要素解析結果情報３４に基づいて、１つの最終目的変数に集約されている共通のテスト要素のうちの１つのテスト要素の文が記載される。本例では、「テスト要素例」に、１つのテスト要素のみが記載されているが、これに限らず可能であり、共通の複数のテスト要素の文が記載されてもよい。いずれにしろ、［テスト要素例］項目は、ユーザがこの表を見た時に内容の把握が容易になるように設けられているので、不要であれば省略可能である。
【００８３】
［実行時間］項目は、上記重回帰分析によって得られた、テスト要素毎の実行時間値、即ち、性能測定値である実行時間値が格納されている。例えば変数ｙ１のテスト要素に関する実行時間値が５ミリ秒（msec）、変数ｙ２のテスト要素に関する実行時間値が１００ミリ秒である。［誤差］項目は、重回帰分析で得られた［実行時間］値に関する誤差の値を示し、％等で表される。
【００８４】
［出力相違］項目は、後述の性能変動検出機能に係わる結果情報であり、時系列で、複数回の自動テストが行われた場合に、そのテスト要素に関する［実行時間］に関して、ある程度以上に大きい相違や変動があるか否かを表す値、あるいは、その相違や変動の大きさを表す値、等が格納されている。
【００８５】
図８の下側の表では、同様に、テストシナリオのテスト毎の実行時間値等が格納されている。例えば、テストＡの実行時間がＴＡミリ秒、テストＢの実行時間がＴＢミリ秒であったことを示す。
【００８６】
上記のようなテスト要素実行時間情報３５が、自動テストの回数や日時等の情報と共に、性能測定情報３６として、ＤＢ４０に格納される。上記のように、実施の形態によれば、開発中ソフトウェアの性能として実行時間が測定できる。更に、実施の形態では、下記のように、開発中ソフトウェアの性能に関する変動検出機能を備えている。
【００８７】
［性能変動検出部］
図９は、性能変動検出部２３の性能変動検出処理のフローを示す。この処理は、複数回の自動テストの結果に基づいて、実行時間の変動によって、プログラム３０の性能変動を検出する処理である。前述のように、プログラム３０に関する自動テストが、例えば定期的に複数回のタイミングで実施され、それぞれのタイミングに合わせて、性能測定処理が行われる。自動テストの回数分、テスト結果情報３２やテスト要素実行時間情報３５が同様に得られる。テスト要素実行時間取得部２２は、各回のテスト要素実行時間情報３５に対応する性能測定情報３６を、ＤＢ４０に時系列で保存しておく。
【００８８】
性能変動検出部２３は、最新のテスト時点に対応するテスト要素実行時間情報３５（性能測定情報３６）と、ＤＢ４０から参照できる過去のテスト時点に対応するテスト要素実行時間情報３５（性能測定情報３６）とを相互に比較する。性能変動検出部２３は、両者における対応する［実行時間］の値を比較する。性能変動検出部２３は、各時点の実行時間値における相違や変動を観測し、性能変動を検出する。性能変動検出部２３は、性能変動を検出した場合、その内容や警告を表す性能変動検出情報３７を出力する。
【００８９】
図９は、ステップＳ２１〜Ｓ２６を有する。以下、ステップの順に説明する。Ｓ２１で、性能変動検出部２３は、最新の自動テストの時点のテスト要素実行時間情報３５または性能測定情報３６を参照し、順に１行を読み込み、テスト要素毎の実行時間値及びその誤差値を参照する。Ｓ２２で、性能変動検出部２３は、ＤＢ４０から、過去の自動テストの時点のテスト要素実行時間情報３５または性能測定情報３６を参照し、順に１行を読み込み、テスト要素毎の実行時間値及びその誤差値を参照する。実施の形態では、比較対象とする過去の時点としては、１つ前の回の自動テストの時点とする。これに限らず、比較対象とする過去の時点としては、任意の過去の時点としてもよく、各種の変形例が可能である。
【００９０】
Ｓ２３で、性能変動検出部２３は、Ｓ２１の最新の時点の実行時間値と、Ｓ２２の過去の時点の対応する実行時間値とを、回帰分析の誤差（±％）を考慮しつつ、比較する。この誤差は、前述の図８の［誤差］項目の値である。Ｓ２３の比較処理は、両者の値を単純比較する方式を用いてもよいが、実施の形態では以下の方式を用いる。
【００９１】
性能変動検出部２３は、最新の実行時間値と、過去の実行時間値との差分値を算出し、その差分値を、所定の閾値と比較することで、両者の相違の大きさを判断する。また、性能変動検出部２３は、回帰分析の誤差（±％）の値を反映した上限値及び下限値を用いる。性能変動検出部２３は、最新の時点の実行時間値に、正の誤差（＋％）を加算で反映した上限値と、負の誤差（−％）を加算で反映した下限値とを計算する。同様に、性能変動検出部２３は、過去の時点の実行時間値に、正負の誤差を反映した上限値及び下限値を計算する。そして、性能変動検出部２３は、最新の実行時間値の上限値及び下限値と、過去の最新の実行時間値の上限値及び下限値とで比較する。
【００９２】
Ｓ２４で、性能変動検出部２３は、Ｓ２３の比較の結果、最新の実行時間値と過去の実行時間値との間で、ある程度以上に大きい相違があるかどうかを判断する。例えば、性能変動検出部２３は、最新時点の実行時間値と前回時点の実行時間値との差分値が、閾値以上である場合に、相違が大きいと判断し、性能変動として検出してもよい。その閾値は、例えば、比率（例えば５０％）を用いて設定されてもよい。あるいは、性能変動検出部２３は、最新時点の実行時間値の下限値が前回時点の実行時間値の上限値よりも大きい場合や、最新時点の実行時間値の上限値が前回時点の実行時間値の下限値よりも小さい場合に、相違が大きいと判断してもよい。Ｓ２４の結果で、相違が大きい場合（Ｙ）にはＳ２５へ進み、相違が小さい場合（Ｎ）にはＳ２６へ進む。
【００９３】
Ｓ２５で、性能変動検出部２３は、相違が大きい、即ち性能変動が大きい旨を表す警告を、ユーザに対して出力する。警告の出力は、例えば画面表示とするが、音声出力でもよいし、メール通知等でもよい。性能変動検出部２３は、入出力部２９を通じて、ＧＵＩ画面に、警告情報を含む性能変動検出情報３７を、即座に表示する。
【００９４】
警告出力に関して、変形例としては、以下でもよい。ソフトウェア性能測定システム２で、ユーザ設定に基づいて、テストに伴う所定のタイミングで性能測定処理を自動実行し、その性能測定結果のログ（性能測定情報３６または性能変動情報３７に相当する）を出力する。性能変動がある場合には、そのログ中に、警告情報が記述される。ユーザは、所望の時点でそのログを確認することで、性能変動及びその警告を認識できる。
【００９５】
例えば、Ｓ２３の比較の際に比率の閾値（例えば５０％）を用いる場合、最新時点の実行時間値が、前回時点の実行時間値に対して５０％以上の相違があった場合には、性能変動の警告が出力される。
【００９６】
Ｓ２６で、性能変動検出部２３は、上記Ｓ２１〜Ｓ２５の処理を、比較対象となるテスト要素実行時間情報３５（性能測定情報３６）の全てのテスト要素について行ったかを確認しながら、全てについて行うまで、同様に繰り返し実行する。上記処理例は、テスト要素毎の実行時間値に関する比較としたが、テスト毎の実行時間値に関する比較を同様に行って性能変動を検出してもよい。
【００９７】
なお、変形例としては、最新時点の実行時間値と、過去の複数回の実行時間値の統計値（平均値等）とを比較してもよい。
【００９８】
［ソースコード表示機能］
更に、実施の形態のソフトウェア性能測定システム２では、上記性能変動検出と共に、性能変動に関連付けられるソフトウェアのソースコードの変更差分情報を同時に出力する機能を有する。上記性能変動検出機能に基づいて、実行時間の相違や変動に関する、テストシナリオのテストのテスト要素における寄与の大きい箇所が、予め、あるいはテスト後の性能測定の結果、特定される。性能変動検出部２３は、その実行時間の相違が大きい箇所のテスト要素が特定できた場合、そのテスト要素の処理に関与しているソースコードにおける変更差分情報を特定し、ユーザに対して出力する。
【００９９】
性能変動検出部２３は、上記ソースコードの変更差分情報を表示する機能を、リポジトリＤＢ９０に基づいたソース情報３８を用いて実現する。既存のソフトウェア開発システムでは、ソフトウェア（プログラム３０）のソースコードの変更に伴う変更差分情報が、時系列でリポジトリＤＢ９０に格納、管理されている。即ち、既存のリポジトリＤＢ９０の情報を参照すれば、ソースコード変更差分情報がわかる。ソース情報３８は、自動テストシステム１のリポジトリＤＢ９０の情報の参照に基づいて設定されている情報である。ソース情報３８には、テスト要素とソースコードとの対応関係が情報として記載されている。性能変動検出部２３は、性能変動を検出した場合には、ソース情報３８を参照し、相違が大きかったテスト要素の箇所に関係付けられるソースコードの変更差分情報を特定して抽出する。性能変動検出部２３は、性能変動検出情報３７に、警告等と共に、その抽出したソースコード変更差分情報を記載し、ユーザに対して出力する。例えば、ＧＵＩ画面に、そのソースコード変更差分情報が表示される。
【０１００】
これにより、ユーザは、性能測定の結果、例えば性能低下の警告があった場合に、その性能低下に関与したと考えられるソースコード変更差分情報を、即座にＧＵＩ画面で見て確認できる。これにより、開発中ソフトウェアに関する問題解析やコード改善等を迅速に進めることを支援できる。
【０１０１】
［効果等］
上記のように、実施の形態のソフトウェア性能測定システムによれば、対象のプログラム３０のサイズが大きい場合でも、工数増大を抑えつつ、そのプログラム３０の性能測定を実現できる。言い換えると、実施の形態によれば、性能測定のために、プログラム３０のソースコードにログ出力等のための追加コードを埋め込む等の追加工数を必要とせずに、性能測定を実現できる。実施の形態によれば、専用の高価な性能測定装置を設ける追加コスト等を必要とせずに、性能測定を実現できる。実施の形態によれば、開発中のシステムへの悪影響を皆無として、プログラム３０の性能測定を実現できる。
【０１０２】
実施の形態によれば、ソフトウェア開発中、特に自動テスト中に、早期に性能変動を検出することができ、これにより、全体の工数を抑え、開発効率を向上できる。実施の形態によれば、ソフトウェア開発の一般的なプロセスであるテストの結果に基づいて、性能として実行時間を測定できる。実施の形態によれば、テスト工程と性能測定工程とを殆ど同じ期間に合わせて実行できる。実施の形態によれば、テストと性能測定とを独立に行うシステムに比べて、効率的に実現できる。
【０１０３】
実施の形態によれば、テスト結果情報３２のようなログ（テスト要素のテスト実行時間またはそれが算出可能な情報が含まれているログ）、及びテストシナリオ情報３１（テスト要素等が規定されている情報）を含むデータや情報があれば、テスト要素毎の実行時間を測定して、プログラム３０の性能を測定できる。実施の形態によれば、そのログ等のデータや情報があれば、自動テスト中であっても、自動テスト実施後にある程度時間が経過した後であっても、プログラム３０の性能を測定できる。
【０１０４】
また、一般にプログラム実行中には、不確定な要因によってプログラム性能が変動する場合がある。例えば、インタプリタ系の実行環境では、空きメモリを収集する処理であるガベージコレクション等が不定期に実行されている。これにより、プログラム実行環境の性能が低下し、実行時間が延びることがしばしばある。従来の性能測定方式では、プログラム性能測定中にこのような性能低下が生じ得るので、その性能低下の影響を少なくするためには、複数回の性能測定が必要であった。あるいは、従来の方式では、性能測定の際、システムのログを並行して取得し、そのシステムのログと、性能測定のためのログとを突き合せて原因を明確にし、例えばガベージコレクション等の動作の影響があったデータかどうかを判断する必要があった。このように、従来の方式では、作業工数が大きかった。
【０１０５】
一方、実施の形態によれば、開発中に複数回、一般には数百回以上の回数で実行される自動テストの結果を利用して、性能測定ができる。そのため、少ない作業工数において、上記のような不確定な要因による性能低下の影響を抑えることができる。不確定な要因があったとしても、回帰分析で推定される実行時間値の分析精度には大きな影響は与えない。即ち、実施の形態によれば、十分に高い精度でプログラム３０の性能測定が実現できる。
【０１０６】
実施の形態は、特に、テストシナリオに基づいたテストを実施してテスト実行時間を出力する機能を持つ自動テストツール及びその自動テストシステム等に対して、好適に適用可能である。
【０１０７】
以上、本発明を実施の形態に基づいて具体的に説明したが、本発明は前述の実施の形態に限定されず、その要旨を逸脱しない範囲で種々変更可能である。
【符号の説明】
【０１０８】
１…自動テストシステム、２…ソフトウェア性能測定システム、１０…第１ＰＣ、１１…テスト実行環境、１２…入出力部、２０…第２ＰＣ、２１…テストシナリオ解析部、２２…テスト要素実行時間取得部、２３…性能変動検出部、２９…入出力部、３０…プログラム、３１…テストシナリオ情報、３２…テスト結果情報、３３…テスト要素分類表、３４…テスト要素解析結果情報、３５…テスト要素実行時間情報、３６…性能測定情報、３７…性能変動検出情報、３８…ソース情報、４０…ＤＢ、９０…リポジトリＤＢ。
【図１】
2018112959.tif 000003
【図２】
2018112959.tif 000004
【図３】
2018112959.tif 000005
【図４】
2018112959.tif 000006
【図５】
2018112959.tif 000007
【図６】
2018112959.tif 000008
【図７】
2018112959.tif 000009
【図８】
2018112959.tif 000010
【図９】
2018112959.tif 000011