JP6841667B2 - ソフトウェア性能測定システム及びプログラム - Google Patents

ソフトウェア性能測定システム及びプログラム Download PDF

Info

Publication number
JP6841667B2
JP6841667B2 JP2017003857A JP2017003857A JP6841667B2 JP 6841667 B2 JP6841667 B2 JP 6841667B2 JP 2017003857 A JP2017003857 A JP 2017003857A JP 2017003857 A JP2017003857 A JP 2017003857A JP 6841667 B2 JP6841667 B2 JP 6841667B2
Authority
JP
Japan
Prior art keywords
test
information
execution time
performance measurement
test element
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017003857A
Other languages
English (en)
Other versions
JP2018112959A (ja
Inventor
森本 義章
義章 森本
和道 山本
和道 山本
知之 上原
知之 上原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Systems Ltd
Original Assignee
Hitachi Systems Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Systems Ltd filed Critical Hitachi Systems Ltd
Priority to JP2017003857A priority Critical patent/JP6841667B2/ja
Publication of JP2018112959A publication Critical patent/JP2018112959A/ja
Application granted granted Critical
Publication of JP6841667B2 publication Critical patent/JP6841667B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

本発明は、情報処理技術に関し、ソフトウェアの性能を測定や評価するための技術に関する。
ITシステム開発におけるアプリケーションプログラム等を含むソフトウェアの開発方式としては、アジャイル方式等が挙げられる。アジャイル方式では、コーディングやテストやデバッグ等の工程が反復で行われる。例えばプログラムの第1版が作成され、第1テストが行われ、第1テストの結果から必要に応じて修正して第2版が作成され、第2テストが行われ、といったように工程が繰り返される。
ソフトウェアのテストの方式としては、例えばシナリオテスト方式等がある。シナリオテスト方式では、想定される利用状況等の流れを表すシナリオに従ってプログラムを動作させて問題が無いかどうか確認するテストが行われる。テストによって、プログラムの欠陥があれば検出される。
プログラム開発では、プログラムの性能を考慮しながら開発を行うことが重要である。例えば、プログラムによる機能が十分でも、性能が不足している場合、つまり実行時間が長い場合等には、そのプログラムに問題があるとみなされることや、ITシステムに障害を引き起こすことがある。例えば、一般的なインターネットを通じて利用される買い物サイトを構成するプログラムの場合、利用者が画面で購入ボタンを押せば1秒以内に反応があるべきである。つまり、そのプログラムの実行時間ないし応答時間として1秒以内が望ましい。もし、そのプログラムの性能不足によってその時間が10秒かかる場合、利用者は、反応の無さに不安になり、ボタンを連打してシステムに不要な負担をかける、接続を切ってしまう、等の恐れがある。また、例えば電子商取引システムの場合、プログラムの性能不足によって、目的の取引ができなくなり、金銭的損害を発生させる恐れもある。上記のように、ITシステムにおいてプログラムの性能は重要であるため、プログラムを実用に供する前に、性能が十分かどうかの検討、測定や評価が行われることが望ましい。
ソフトウェアの性能測定等に係わる先行技術例としては、特開2010−61461号公報(特許文献1)が挙げられる。特許文献1には、ソフトウェアの自動性能評価システムとして、開発したアプリケーションソフトウェアの性能評価を自動かつ継続的に行う旨や、以下の旨が記載されている。そのシステムでは、ソフトウェア部品のソースに基づいて実行プログラムを作成し、計測プログラムを実行プログラムに埋め込んだ計測付実行プログラムを作成し、計測付実行プログラムを実機にインストールして実行し、その実行結果と閾値とを比較した結果に基づいて、ソフトウェアの性能評価を行う。
特開2010−61461号公報
上記のように、ソフトウェア開発では、プログラムのテストと共に、プログラムの性能の測定や評価も重要である。しかし、プログラムの性能の測定については、プログラムのサイズが大きくなるほど、測定のための工数が大きくなる。その理由は以下である。プログラムの性能の測定のためには、例えば以下の方式が用いられることが多い。プログラムの要所に、通過したことをログとして出力するためのコードが埋め込まれる。言い換えると、そのコードを含む性能測定用プログラムが作成される。そして、そのプログラムが、システムを稼働する環境で実行され、その結果、ログが出力される。出力されたログが参照され、そのログに記載の情報から、そのプログラムの実行時間が把握される。その実行時間から、そのプログラムの性能が十分かどうかが検討される。
しかし、上記ログ出力のためのコード追加の作業工数が一定量必要である。そのため、大きなサイズのプログラムでは、その作業工数が増大し、開発上のコスト増加となる。そのうえ、プログラムに不用意にコードが追加されると、プログラムの挙動が変化する可能性がある。そのプログラムの実行の場合、ログ出力のためにディスクへの書き込み等が増えるため、その分プログラムの性能は確実に低下し、正確な実行時間値は得られない。
これに対し、他の方式としては、上記ログ出力を使わずに、ハードウェアのエミュレータを使用して、実行ステップ等を計測する方式も存在する。しかし、この方式は、エミュレータを含む性能測定装置自体が高価であり、容易に実行可能とは言い難い。
上記のような理由から、プログラム性能測定は頻繁には行われないことが一般的である。通常、プログラムのコーディングの途中で性能測定が行われることは無く、開発終盤でのみ性能測定が行われることが一般的である。ただし、開発終盤で性能不足が判明した場合、プログラムのどこに問題があるかの調査や問題修正等に大きな工数が必要となる。
上記のように、開発中のソフトウェアのテストや性能測定に関して、工数増大等の課題がある。なお、特許文献1のような技術でも、ソフトウェア性能測定のための仕組み、即ち追加コードの埋め込み等が必要であるため、作業工数等に課題がある。
本発明の目的は、開発中のソフトウェアのテストや性能測定等を行う情報処理技術に関して、プログラムのサイズが大きい場合でも、工数増大を抑えつつ、プログラム性能測定を実現できる技術を提供することである。言い換えると、プログラムに追加コードを埋め込む等の追加工数を必要とせず、また、専用の高価な性能測定装置を設ける追加コスト等を必要とせずに、その性能測定を実現できる技術を提供することである。また、本発明の目的は、ソフトウェア開発中、特にテスト中に、早期に性能変動を検出でき、これにより開発効率を向上できる技術を提供することである。
本発明のうち代表的な実施の形態は、ソフトウェア性能測定システムであって、以下に示す構成を有することを特徴とする。
一実施の形態のソフトウェア性能測定システムは、計算機上で、開発中のソフトウェアを構成するプログラムの性能を測定する情報処理を行うソフトウェア性能測定システムであって、前記プログラムのテストの実行結果として、前記テストを構成するテスト要素毎のテスト実行時間を含む、テスト結果情報を入力し、前記テストを構成する前記テスト要素の情報を含む、テスト規定情報を入力し、前記テスト結果情報及び前記テスト規定情報に基づいて、前記テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、前記方程式を解くことで、前記テスト要素毎の前記実行時間を算出する処理を行い、前記プログラムの性能を表す情報として、前記テスト要素毎の前記実行時間を含む情報を、ユーザに対して出力する。
本発明のうち代表的な実施の形態によれば、開発中のソフトウェアのテストや性能測定等を行う情報処理技術に関して、プログラムのサイズが大きい場合でも、工数増大を抑えつつ、プログラム性能測定を実現できる。言い換えると、プログラムに追加コードを埋め込む等の追加工数を必要とせず、また、専用の高価な性能測定装置を設ける追加コスト等を必要とせずに、その性能測定を実現できる。また、本発明のうち代表的な実施の形態によれば、ソフトウェア開発中、特にテスト中に、早期に性能変動を検出でき、これにより開発効率を向上できる。
本発明の実施の形態のソフトウェア性能測定システムの構成を示す図である。 実施の形態で、テストシナリオ情報の構成例を示す図である。 実施の形態で、テスト結果情報の構成例を示す図である。 実施の形態で、テスト要素分類表の構成例を示す図である。 実施の形態で、テストシナリオ解析部の処理フローを示す図である。 実施の形態で、テスト要素解析結果情報の構成例を示す図である。 実施の形態で、テスト要素解析結果情報に基づいた方程式を示す図である。 実施の形態で、テスト要素実行時間情報の構成例を示す図である。 実施の形態で、性能変動検出部の処理フローを示す図である。
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において同一部には原則として同一符号を付し、その繰り返しの説明は省略する。
(実施の形態)
図1〜図9を用いて、本発明の実施の形態のソフトウェア性能測定システム等について説明する。実施の形態のソフトウェア性能測定プログラムは、実施の形態のソフトウェア性能測定システムの計算機に処理を実行させるプログラムである。
[ソフトウェア性能測定システム(1)]
図1は、実施の形態のソフトウェア性能測定システムを含んで構成されるソフトウェア開発システムの構成を示す。このソフトウェア開発システムは、自動テストシステム1と、ソフトウェア性能測定システム2と、の少なくとも2つのシステムを含んでいる。2つのシステムは、例えばLAN等の通信手段を通じて接続されている。
自動テストシステム1は、第1PC10等によって構成されている。自動テストシステム1は、公知技術によって構成可能であり、例えば、既存の自動テストツール等によって構成されるテスト実行環境11が適用可能である。テスト実行環境11は、従来の回帰テストやシナリオテスト等で使用されている。第1PC10は、自動テストを行う機能を持つ計算機であり、テスト装置である。テスト作業を行うユーザは、第1PC10を操作する。
なお、第1PC10及び第2PC20は、一般的なPCと同様の構成であり、図示しないが、CPU、ROM、RAM、ストレージ、入力機器、出力機器、通信インタフェース装置、バス等の要素を備え、それらの要素が接続されている。また、第1PC10や第2PC20は、単一装置に限らず、クライアントサーバシステム等で構成されてもよい。また、自動テストシステム1の第1PC10と、ソフトウェア性能測定システム2の第2PC20とが、1つのシステム及び単一装置として併合された形態としてもよい。また、テストや性能測定の作業を行うユーザは、同一ユーザとしてもよいし、それぞれ複数人が同様に存在して分担作業を行う方式でもよい。
自動テストシステム1の第1PC10において、テスト実行環境11、入出力部12、プログラム30、テストシナリオ情報31、テスト結果情報32等を有する。テスト実行環境11は、第1PC10のCPUがソフトウェアプログラム処理を実行することにより実現される。入出力部12は、入力機器や出力機器が接続される入出力インタフェースを含む部分である。入出力部12は、図示しない表示装置の表示画面に画像情報を表示する処理、例えば、自動テストに係わるグラフィカル・ユーザ・インタフェース(GUI)やコマンドライン・ユーザ・インタフェース(CUI)の画面を表示する処理、等を行う。また、入出力部12は、GUI等の画面に対し、図示しないキーボードやマウス等の入力機器を通じて、ユーザからの入力操作を受け付ける処理、等を行う。
プログラム30は、開発中のソフトウェアを構成するプログラムであり、テスト対象であると共に、性能測定対象である。プログラム30は、入出力部12を通じて第1PC10内に入力され、図示しないメモリに格納される。
テストシナリオ情報31は、テスト規定情報であり、自動テストで用いるテストシナリオが記述されている。テストシナリオ情報31は、入出力部12を通じて、第1PC10内のメモリに格納される。また、ユーザは、入出力部12を通じて、テストシナリオ情報31の内容の確認や設定が可能である。実施の形態では、自動テストでテストシナリオ方式を用いる。テストシナリオ情報31は、その方式に対応するテストの内容を規定する情報である。
第1PC10では、入出力部12を通じたユーザの操作に基づいて、テスト実行環境11上の自動テストの実行が制御される。テスト実行環境11は、自動テストの際、入力されるプログラム30及びテストシナリオ情報31に基づいて、自動テストを実行し、その結果を、テスト結果情報32として出力する。第1PC10は、テスト実行環境11上で、プログラム30を実行し、そのプログラム30に対し、テストシナリオ情報31に基づいたテストを実行する。
テスト結果情報32には、自動テスト結果情報が記載されている。ユーザは、入出力部12を通じて、テスト結果情報32の内容を確認できる。
更に、実施の形態では、テスト結果情報32及びテストシナリオ情報31が、通信を通じて、ソフトウェア性能測定システム2の第2PC20に入力され、第2PC20内の図示しないメモリ等に格納される。
自動テストシステム1でプログラム30の自動テストを行ってテスト結果情報32を出力するまでが、第1の仕組み及び工程である。第2の仕組み及び工程は、ソフトウェア性能測定システム2で、自動テスト結果を用いてプログラム30の性能測定を行って、その結果を出力するまでである。性能測定の結果を表す情報として、テスト要素実行時間情報35(性能測定情報36)が算出される。
ソフトウェア性能測定システム2は、第2PC20等によって構成されている。ソフトウェア性能測定システム2の第2PC20は、性能測定等の機能を実現するための特有のプログラムを有する。そのプログラムである実施の形態のソフトウェア性能測定プログラムは、第2PC20内の図示しない記憶装置に格納されている。第2PC20は、CPUによってそのプログラムをメモリに読み出してそのプログラムに従った処理を実行することにより、その性能測定等の機能を実現する。その機能を構成する複数の部位として、テストシナリオ解析部21、テスト要素実行時間取得部22、性能変動検出部23を有する。
第2PC20は、性能測定を行う機能を持つ計算機であり、性能測定装置である。性能測定作業を行うユーザは、第2PC20を操作する。第2PC20は、テストシナリオ解析部21、テスト要素実行時間取得部22、性能変動検出部23、入出力部29、テスト要素分類表33、テスト要素解析結果情報34、テスト要素実行時間情報35、DB40、性能測定情報36、性能変動検出情報37、ソース情報38、等を有する。
テスト要素分類表33は、入出力部29を通じて、第2PC20内に入力される。ユーザは、入出力部29を通じて、テスト要素分類表33の内容の確認や設定が可能である。
テストシナリオ解析部21は、テストシナリオ情報31及びテスト要素分類表33から、テスト及びテストシナリオの内容を解析し、その解析結果を、テスト要素解析結果情報34として記載するようにして出力する。テスト要素解析結果情報34は、第2PC20内に保持される。
テスト要素実行時間取得部22は、言い換えると性能測定処理部である。テスト要素実行時間取得部22は、テスト要素解析結果情報34及びテスト結果情報32を用いて、テストを構成しているテスト要素毎の実行時間を算出し、その算出結果を、テスト要素実行時間情報35として記載するようにして出力する。テスト時点毎にテスト結果情報32が入力される。テスト要素実行時間取得部22は、テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、その方程式を解くことで、テスト要素毎の実行時間を算出する処理を行う。
テスト要素実行時間情報35は、テスト時点毎の性能測定情報36として得られる。DB40内には、複数のテスト要素実行時間情報35である複数の性能測定情報36が、時系列で整理された状態で格納される。なお、DB40は、第2PC20内のストレージ等で構成されてもよいし、第2PC20外のDBサーバ等で構成されてもよい。ユーザは、入出力部29を通じて、性能測定情報36の内容の確認や外部出力が可能である。
更に、ソフトウェア性能測定システム2では、複数回のテストのテスト結果情報32及びそれらに対応付けられる性能測定情報36に基づいて、プログラム30に関する性能変動を検出する機能を備える。その機能は、性能変動検出部23を用いて実現される。
自動テストシステム1の第1PC10は、制御や設定に基づいて、所定のタイミングでテストを実行する。特に、所定の各タイミングで複数回のテストが自動テストとして実行される。これにより、時系列での複数回の分のテスト結果情報32が得られる。ソフトウェア性能測定システム2は、その複数回の各回のテスト結果情報32を取得して、各回の性能測定及び性能変動検出に用いる。なお、DB40には、性能測定情報36だけでなく、複数回のテスト結果情報32や、図1に示す他の必要な情報が格納されてもよい。
性能変動検出部23は、複数回のテスト分のテスト要素実行時間情報35(対応する性能測定情報36)を用いて、プログラム30の性能変動を検出し、その検出結果を、性能変動検出情報37として出力する。ユーザは、入出力部29を通じて、性能変動検出情報37の内容の確認や外部出力が可能である。特に、性能変動検出部23は、最新のテスト結果の性能測定情報36と、過去のテスト結果の性能測定情報36とを比較して、性能変動を検出する。なお、性能変動検出情報37は、性能測定情報36内の一部として記述されてもよい。
また、性能変動検出部23は、後述するが、ソース情報38を用いて、性能変動に係わるソースコード変更差分情報を出力する機能も備える。ソース情報38は、自動テストシステム1のリポジトリDB90の情報に基づいた情報である。ソース情報38は、入出力部29を通じて、第2PC20内に入力される。なお、この機能を省略した形態も可能である。
[ソフトウェア性能測定システム(2)]
ソフトウェア性能測定システム2の機能等の概要は以下である。ソフトウェア性能測定システム2は、ソフトウェア開発中に行う自動テストの結果を利用して、プログラム30の性能として実行時間を測定する機能を有する。ソフトウェア性能測定システム2は、テスト結果から、回帰分析の手法を用いて、テスト要素毎の実行時間を測定する。また、ソフトウェア性能測定システム2は、性能測定の結果に基づいて、性能変動を検出する。
テスト方式としては、シナリオテスト方式が用いられる。この自動テストでは、予め作成されたテストシナリオ(テストシナリオ情報31に含む)に基づいて、テスト実行エンジン(図1のテスト実行環境11)がテストを実行する。テストシナリオ情報31には、どのようなテストの処理を行うかが、テストを構成するテスト要素の組合せで記述されている。そのテストの結果として、テストの合否、及びテストを実施した際に要したテスト実行時間を含む、テスト結果情報32が出力される。上記のような前提で、自動テストシステム1は、対象のプログラム30に対し、テストシナリオに基づいたテストを実行し、そのテスト結果であるテスト実行時間等の情報がテスト結果情報32に記録される。
ソフトウェア性能測定システム2のテストシナリオ解析部21は、テストシナリオ情報31のテストシナリオから、テストの手順に対応するテスト要素を抽出する。テストシナリオ解析部21は、各手順のテスト要素に、回帰分析の目的変数を割り当てる。例えば、テストシナリオで記述されているテストのうち、第1テストを有する。その第1テストにおいて、複数の手順である複数のテスト要素として、ユーザ入力操作(第1手順)、内容チェック処理(第2手順)、サーバへの問合せ処理(第3手順)、及び結果出力処理(第4手順)、といった複数の手順のテスト要素に分解される。これらの複数の手順のテスト要素のそれぞれに対し、変数a,b,c,dといったように変数が割り当てられる。各変数の値は、テスト要素毎のテスト実行時間を表す。このように割り当てられた変数の和、例えば(a+b+c+d)値は、プログラム30の性能を表す実行時間になる。
ソフトウェア性能測定システム2は、このような処理を、実行したテストの数だけ同様に行う。この際、複数のテストシナリオの複数のテスト間で、殆ど同じ処理内容とみなせる手順のテスト要素については、同じ目的変数を割り当てるようにする。例えば、上記「ユーザ入力操作」(第1手順)に対応する「ユーザ入力処理」が、各テストシナリオのテストに同様に存在する。その場合、ソフトウェア性能測定システム2は、それらのテスト要素の処理に、同じ目的変数を割り当てる。上記のように変数を割り当てるのは、同等の処理には殆ど同じ実行時間がかかるであろうという仮定に基づいている。
例えば、2つ目の第2テストを有する。第2テストの手順は、第1テストの手順と比べて、上記「サーバへの問合せ処理」(第3手順)だけ内容が異なるとする。その場合、同等の処理とみなせる第1手順、第2手順、及び第4手順については、変数a,b,dのように第1テストと同じ目的変数が割り当てられる。両者で異なる第3手順のみ、異なる目的変数が割り当てられる。
ソフトウェア性能測定システム2は、これらの処理を、複数のテストシナリオのテストについて同様に行う。すると、後述するが、テストシナリオの数に対応した方程式が得られる。よって、ソフトウェア性能測定システム2は、その方程式を、重回帰分析における最小二乗法等によって解くことで、各目的変数の値を得る。こうして得られた値は、テストの各手順のテスト要素の処理の実行時間に相当する。ソフトウェア性能測定システム2は、この実行時間値の取得、即ち性能測定を、定期的なタイミングで行う。このタイミングは、開発の区切り等のタイミングとしてもよいし、ユーザが設定可能である。これにより、時系列の時点毎に、プログラム30の性能測定値として実行時間値が得られる。これにより、ユーザは、ソフトウェア開発中、特に自動テスト中に、プログラム30の性能を測定することができる。
上記性能測定の結果、処理の実行時間には大きな変動が無いはずなのに測定結果の実行時間が長くなることが観察される場合がある。例えば、過去(例えば前回)の測定値と最新の測定値との相違が、ある程度以上に大きいことが観察される場合がある。その場合、ソフトウェア性能測定システム2は、性能変動として、プログラム30の実装(コーディング)またはシステム等に問題が発生した可能性があることを、迅速に検出できる。ソフトウェア性能測定システム2は、例えばプログラム30のコード変更の影響によってその性能変動が生じたものと推測できる。これにより、ユーザは、ソフトウェア開発中、特に自動テスト中に、その性能変動を迅速に知ることができる。よって、ユーザは、早期に調査やコード修正等の対応ができる。従って、開発全体の工数の増加を抑制できる。
上記重回帰分析による実行時間値の導出には一般に誤差が含まれているが、ソフトウェア性能測定システム2では、多数のテスト結果情報を用いるので、導出される値、即ち性能測定値である実行時間値に関して、実用的な精度を確保できる。ソフトウェア性能測定システム2では、前提となるテストとしては、纏めて複数の種類のテストシナリオのテスト、一般には100種類以上の多数のテストが実行されることが殆どである。そのため、ソフトウェア性能測定システム2は、回帰分析を用いた性能測定に関して、実用的な精度を確保できる。
[テストシナリオ]
図2は、テストシナリオ情報31の構成例を示す。テストシナリオ情報31は、複数のテスト(言い換えるとテスト規定情報)を含む。テストは、テストシナリオで記述されている。テストシナリオ情報31は、複数のテストシナリオ及び対応する複数のテストから階層的に構成されている。ある1つのテストは、下位階層の複数のテストから構成されてもよい。
図2の例では、テストシナリオ情報31は、複数のテストとして、テストA,テストB,……等を含む。テストAは、テストAを実行するためのテストシナリオAで記述されている。テストBは、テストBを実行するためのテストシナリオBで記述されている。
テストシナリオのテストは、複数の手順の処理に対応付けられる複数のテスト要素で構成されている。例えば、テストシナリオAは、テスト要素A1〜A6を含む。テストシナリオBは、テスト要素B1〜B6を含む。なお、“A”,“A1”等は、説明上の識別情報を示す。テストシナリオを構成する複数の行における1行分の処理を、テスト要素と呼ぶ。テストシナリオのテストは、テスト要素の集合として定義されている。
テスト実行環境11において、あるタイミングで、それぞれのテストシナリオのテスト(対応するプログラム処理)を実行することで、それらの全体として1つの自動テストが行われる。この自動テストの結果が、テスト結果情報32として出力される。テスト結果情報32は、テストが行われたタイミング等を識別する情報も含む。
図2のテストシナリオ情報31のテストシナリオ及びテストの構成例を説明する。本例では、テストの内容として、ユーザ画面からの入力によってサーバにデータを要求し、その結果が正しいか及び表示が正しいかを確認する。テストシナリオは、日本語のような自然言語の文で記述されており、記述されているテスト要素の順に処理が実行される。
テストシナリオAに記述されている内容は以下である。テストシナリオAは、テスト要素A1〜A6で構成されている。まず、テスト要素A1では、「「入力欄1」に文字列「001」を「入力」。」と記述されている。この手順は、ユーザがユーザ画面の「入力欄1」に文字列「001」を入力する旨を表している。次に、テスト要素A2では、「「入力欄1」の内容で「商品名検索」を実行。」と記述されている。この手順は、上記テスト要素A1の「入力」が完了したタイミングで、「入力欄1」の入力内容である文字列「001」を用いて、サーバに対し、「商品名検索」の処理を行うように要求する旨を表している。
次に、テスト要素A3は、「「得られた値」が「パソコン」であることを確認。」と記述されている。この手順は、上記テスト要素A2の要求に対してサーバから応答として得られた文字列が「パソコン」であることを確認する旨を表している。更に、テスト要素A3内では、上記確認の結果、両者(「得られた値」,「パソコン」)の値が異なる場合には、「テスト失敗(エラーコード=1)」を出力して終了する旨が記述されている。即ち、この処理の結果、得られた値が「パソコン」ではない場合、エラーコード=1が出力され、テストAが終了される。エラーではない場合、即ち得られた値が「パソコン」である場合には、次の手順に続く。
次に、テスト要素A4は、「「出力欄1」に「得られた値」を「出力」。」と記述されている。この手順は、上記テスト要素A3の「得られた値」である「パソコン」を、ユーザ画面の「出力欄1」に表示する旨を表している。次に、テスト要素A5は、「「出力欄1」の表示が「画像1」と同じかを確認。」と記述されている。この手順は、上記テスト要素A4の「出力欄1」の表示内容が正しいかを、別途保存されている「画像1」と比較して確認する旨を表している。更に、テスト要素A5内では、上記確認の結果、両者(「出力欄1」の表示内容、「画像1」)が異なっている場合には、「テスト失敗(エラーコード=2)」を出力してテストAを終了する旨が記述されている。即ち、この処理の結果、両者が不一致の場合には、エラーコード=2が出力され、テストAが終了される。両者が一致の場合には、次の手順に続く。
テスト要素A6は、「テスト成功で終了(エラーコード=0)」と記述されている。この手順は、テスト結果を成功として、テストシナリオAのテストAを終了する旨を表している。
テストBのテストシナリオBについても同様である。テスト要素B1は、「「入力欄2」に文字列「002」を「入力」。」と記述されている。テスト要素B2は、「「入力欄2」の内容で「納品期限日検索」を実行。」と記述されている。テスト要素B3は、「「得られた値」が「2001/01/01」以降であることを確認。」等と記述されている。テスト要素B4は、「「出力欄2」に「得られた値」を「出力」。」と記述されている。テスト要素B5は、「「出力欄2」の表示が「画像2」と同じかを確認。」等と記述されている。テスト要素B6は、「テスト成功で終了(エラーコード=0)」と記述されている。
上記例のように、テストシナリオA(テストA)とテストシナリオB(テストB)とでは、概略同じような内容のテスト要素が含まれている。例えば、テスト要素A1の「入力」の処理と、テスト要素B1の「入力」の処理とは、概略同じような内容である。テスト要素A4の「出力」の処理とテスト要素B4の「出力」の処理についても同様である。同様に、あるプログラム30のテストにおける複数のテストシナリオのテスト間では、概略同じような内容のテスト要素が共通に含まれていることが多い。
[テスト結果情報]
図3は、テスト結果情報32の構成例を示す。図2、図3を用いて、テストシナリオ情報31とテスト結果情報32との関係を説明する。図3のテスト結果情報32の表は、項目(列)として、テスト、テスト合否、テスト実行時間を含む。[テスト]項目は、テストシナリオに対応付けられたテストの識別情報を示す。図3の例では、図2のテストの実行結果が記載されている。[テスト]項目には、前述のテストA、テストB等がある。[テスト合否]項目は、[テスト]項目のテスト結果として、合格(成功、例えば値が0)または不合格(例えば値が1)を示す。例えばテストAの結果が合格、テストBの結果が不合格である。[テスト実行時間]項目は、[テスト]項目のテストの処理の実行に要した時間が記載される。この[テスト実行時間]は、自動テストシステム1の既存のテスト実行環境11(自動テストツール)の機能によって得られる時間であって、ソフトウェア性能測定システム2の目的として性能測定しようとしているプログラム30の実行時間とは異なる。例えば、テストAの実行時間が0.03秒、テストBの実行時間が0.05秒となっている。
上記のように、テスト結果情報32には、ある日時(回)の1つの自動テストを構成している複数の各々のテストシナリオのテストの結果情報が登録されている。次の日時(回)の自動テストの際にも同様に結果情報が登録される。なお、テスト結果情報32は、日時(回)毎に別の表として作成されてもよいし、1つの表の中に、複数の日時(回)毎に情報が記載されてもよい。
[テスト要素分類表]
図4は、テスト要素分類表33の構成例を示す。テスト要素分類表33は、テスト要素のグループへの分類を表す情報が設定されている。図4の(A)は、設定例を示す。テスト要素分類表33は、テストシナリオ情報31に記載されている複数のテスト要素のうち、どのテスト要素を同じものとみなして分類するかについての設定情報が記載されている。例えば、前述のテスト要素A1とテスト要素B1とを同じ内容のテスト要素とみなす場合には、それらのテスト要素A1とテスト要素B1は、同じグループに分類されるように設定される。ユーザは、テスト要素分類表33に、テスト要素に関するグループの分類をユーザ設定可能である。
テストシナリオのテストにおけるテスト要素の処理が実行される際には、必ずその分のテスト実行時間が発生する。これらのテスト実行時間は、テスト要素のそれぞれにおいて基本的には別の値になる。しかしながら、複数のテスト要素間では、テスト実行時間が明らかに同一になるものがある。また、複数のテスト要素間では、テスト実行時間の差異が非常に小さくなるものがある。それらのテスト要素及びテスト実行時間については、性能測定の目的上、同一とみなしても問題無い。よって、テスト要素分類表33には、それらの同一とみなせるテスト要素が、同一のグループに分類されるように設定される。
例えば、前述のテスト要素A1の「入力欄1」への値の「入力」の処理やテスト要素B1の「入力欄2」への値の「入力」の処理は、自動テストである場合、一瞬で実行できる。そのため、テスト要素A1やテスト要素B1のテスト実行時間の値が小さくなることが明らかである。同様に、テスト要素A4の「出力」の処理やテスト要素B4の「出力」の処理も、一瞬で実行できる。このように、テスト実行時間が殆ど同等と考えられるテスト要素、あるいは事前の計測等によってテスト実行時間が同じと判明しているテスト要素がある。ユーザは、それらのテスト要素については、同じグループに分類しておく。
具体的には、図4の(A)のテスト要素分類表33の例では、複数のグループとして、グループA、グループB等を有する。本例では、グループが自然言語で記述されている。グループAは、「「入力欄*」への「入力」。」という行401や、「「出力欄*」への「出力」。」という行402が記述されている。グループBは、「画像の総ピクセル数の差が±10%未満の画像比較。」という行403が記述されている。各行は、テスト要素(手順)に対応している。グループAは、例えば、行401の「「入力欄*」への「入力」。」という内容や行402の「「出力欄*」への「出力」。」という内容に該当する全てのテスト要素については、同じグループAに属することを表している。なお、記述中の記号「*」(アスタリスク)は、全てを表している。例えば前述の「入力欄1」や「入力欄2」、他の「入力欄Z」等は、「入力欄*」に含まれる対象になる。テスト要素分類表33の記述には、一般的な正規表現を用いてもよい。
テスト要素の分類は、図4の(A)の方式に限らず可能である。図4の(B)には、他の設定例を示す。このテスト要素分類表33は、項目として、テスト要素、グループを有する。[テスト要素]項目は、テスト要素の識別情報が記載されている。[グループ]項目には、グループの識別情報が記載されている。即ち、このテスト要素分類表33は、それぞれのテスト要素毎に、分類するグループとの関連付けが設定されている。例えば、テスト要素A1、テスト要素A4、テスト要素B1等には、同じグループAが設定されている。
[テストシナリオ解析部]
図5は、テストシナリオ解析部21の処理フローを示す。この処理は、テスト要素分類表33に基づいて、テストシナリオ情報31に記載のテスト要素を解析し、解析結果をテスト要素解析結果情報34として出力する処理である。この処理では、グループに分類されるテスト要素毎に、回帰分析の目的変数が割り当てられ、回帰分析の方程式が生成される。この回帰分析の方程式は、特に、複数の変数を持つ重回帰分析の方程式である。
図5の処理は、ステップS11〜S15を有する。以下、ステップの順に説明する。S11で、まず、テストシナリオ解析部21は、テストシナリオ情報31から、順に1つのテストシナリオのテストの情報を読み込み、そのテストシナリオのテストから順に1行のテスト要素毎に読み込む。そして、テストシナリオ解析部21は、読み込んだテスト要素に、個別に初期目的変数を割り当てる処理を行う。初期目的変数は、グループ分類を考慮せずに1つずつ順に異なる変数が割り当てられればよい。テストシナリオ解析部21は、後述の図6のテスト要素解析結果情報34の[初期目的変数]項目に、割り当てた初期目的変数を記載する。S12で、テストシナリオ解析部21は、S11の処理を、対象のテストシナリオの全てのテスト要素の行について行ったかを確認する。テストシナリオ解析部21は、その確認をしながら、全てのテスト要素に割り当てるまで、S11,S12の処理を同様に繰り返す。
次に、S13で、テストシナリオ解析部21は、テスト要素分類表33から順に1つずつグループを参照し、そのグループ及びそれに対応付けられるテスト要素に注目する。テストシナリオ解析部21は、S12の結果で初期目的変数が割り当てられているテスト要素に対して、注目するグループに属しているテスト要素があるかを判断する。そして、テストシナリオ解析部21は、同じグループに属している全てのテスト要素について、同じ共通の目的変数である最終目的変数を割り当てるように設定する処理を行う。テストシナリオ解析部21は、後述の図6のテスト要素解析結果情報34の[最終目的変数]項目に、割り当てた最終目的変数を記載する。S14で、テストシナリオ解析部21は、S13の処理を、テスト要素分類表33の全てのグループについて行ったかを確認する。テストシナリオ解析部21は、その確認をしながら、全てのグループについて行うまで、S13,S14の処理を同様に繰り返す。
S15で、テストシナリオ解析部21は、S11〜S14の処理を、テストシナリオ情報31の全てのテストシナリオのテストについて行ったかを確認し、全てについて行ったら、本処理フローを終了する。
上記解析処理によって、最終的に、図6のようなテスト要素解析結果情報34の最終目的変数(y1〜y5等)が得られる。
上記解析処理では、テスト要素分類表33を用いて、同等とみなせるテスト要素の処理をグループに纏めて、グループ毎に目的変数を設定している。この方式には、以下のような理由もある。ソフトウェア性能測定システム2では、回帰分析の方程式を用いて、性能を表す実行時間を算出するために、テスト要素毎に目的変数を設定する。ここで、例えば、グループAの「「入力欄*」への「入力」」等に該当するテスト要素の処理は、テスト実行時間が比較的短く、かつ、ある自動テストの中で大量に表れる処理である。このような複数のテスト要素の処理は、それらの全てに個別に異なる目的変数(初期目的変数が相当する)を割り当てた場合、目的変数の個数が多くなり、方程式が解けない、または、分析精度が低くなる。分析精度が低くなるのを避けるために、それらの同等とみなせる複数のテスト要素に対しては、同じ目的変数を割り当てる。前述のように、「入力」や「出力」等の処理は、簡単であることが多く、同等とみなしても問題無い。実施の形態では、そのような仮定に基づいて、上記のように共通の最終目的変数に纏める処理を行っている。これにより、目的変数の個数が比較的少なくなり、重回帰分析の方程式を最小二乗法によって解くことができ、分析精度が高くなる。
また、実施の形態では、テストシナリオ解析部21によって、テスト要素分類表33に基づいてテスト要素解析結果情報34を生成する処理を行っている。ユーザは、テスト要素分類表33を設定し、解析を指示すれば、後は、テスト要素解析結果情報34が生成される。変形例としては、これに限らず可能であり、テストシナリオ解析部21を用いずに、ユーザが手動で直接的に、テスト要素分類表33に基づいてテスト要素解析結果情報34(回帰分析のための方程式)を設定してもよい。即ち、その場合、テストシナリオ解析部21の実装は不要であり、ユーザは、第2PC20で、入出力部29を通じて、GUI画面に対し、テスト要素解析結果情報34の回帰分析のための方程式の設定作業を行えばよい。
[テスト要素解析結果情報]
図6は、テスト要素解析結果情報34の構成例を示す。図6のテスト要素解析結果情報34の表は、項目(列)として、テスト、テスト要素、初期目的変数、最終目的変数を有する。[テスト]項目は、テストシナリオのテストの識別情報が格納されている。[テスト要素]項目は、テストシナリオのテストを構成する1つ以上のテスト要素の識別情報や文(行)を示し、テストシナリオ情報31に基づいた情報である。[初期目的変数]項目は、テスト要素毎に割り当てられた前述の初期目的変数が格納されている。初期目的変数の例を“a1”等で示す。例えば、テストAにおけるテスト要素A1には初期目的変数a1が割り当てられている。テスト要素A2には変数a2、テスト要素A3には変数a3、テスト要素A4には変数a4、テスト要素A5には変数a5、といったように割り当てられている。同様に、テストBにおけるテスト要素B1には初期目的変数b1、といったように割り当てられている。[最終目的変数]項目は、テスト要素の初期目的変数に対して割り当てられた前述の最終目的変数が格納されている。最終目的変数の例を“y1”等で示す。例えば、テストAにおけるテスト要素A1の初期目的変数a1には最終目的変数y1が割り当てられている。テスト要素A2の初期目的変数a2には最終目的変数y2が割り当てられている。テスト要素A3の初期目的変数a3には最終目的変数y3が割り当てられている。テスト要素A4の初期目的変数a4には、テスト要素A1の初期目的変数a1と同じく、最終目的変数y1が割り当てられている。テスト要素A5の初期目的変数a5には、テスト要素A2の初期目的変数a2と同じく、最終目的変数y2が割り当てられている。即ち、テストAのテスト要素A1〜A5の初期目的変数a1〜a5に対しては、最終目的変数{y1,y2,y3,y1,y2}を有する。同様に、テストBのテスト要素B1〜B5の初期目的変数b1〜b5に対しては、最終目的変数{y1,y4,y5,y1,y2}を有する。
[回帰分析の方程式]
図7は、テスト要素解析結果情報34に基づいて立てられた回帰分析の方程式を示す。この方程式は、図6のテスト要素解析結果情報34の表(特に最終目的変数)を、数式として表現したものである。テスト要素実行時間取得部22は、テスト結果情報32と、テスト要素解析結果情報34とから、このような方程式を作成する。
図7の(A)は、図6のテスト要素解析結果情報34の例を数式化した方程式を示す。この方程式は、説明変数行列71、目的変数ベクトル72、及び、テスト実行時間ベクトル73からなる。この方程式は、説明変数行列71と目的変数ベクトル72とを乗算した結果がテスト実行時間ベクトル73と同じであることを表す。
図7の(B)は、図7の(A)の方程式を一般化した方程式であり、回帰分析の行列式を示す。行列式をAY=Bで表す。行列Aは、説明変数行列71に対応する。1列であるベクトルY{c,y1,y2,……,ym}は、目的変数ベクトル72に対応する。1列であるベクトルB{t1,t2,……,tn}は、テスト実行時間ベクトル73に対応する。
図7の(A)で、説明変数行列71における行は、係数が並んでおり、目的変数ベクトル72のそれぞれの目的変数が、どのテスト要素に関係付けられているかを表している。目的変数ベクトル72は、自動テストの全てのテストのテスト要素に対して割り当てられた目的変数を羅列したものであり、図6の[最終目的変数]と対応する。テスト実行時間ベクトル73は、説明変数行列71に目的変数ベクトル72を乗じた式であり、それぞれの値は、前述のテスト実行時間(図3の[テスト実行時間])に等しい。
目的変数ベクトル72中の変数“c”は、定数であり、全てのテストにおいて均等に要するテスト要素として、テストシナリオ情報31に記述されていない処理を纏めたものである。例えば、ログを出力するためにかかる時間等がこの定数に相当する。
例えば、説明変数行列71における1行目{1,2,2,1,0,0,…}は、テストAに対応している。テストAのテスト要素A1〜A5に対し、最終目的変数{y1,y2,y3,y1,y2}が割り当てられている。例えば、変数y1は、2つのテスト要素A1,A4に共通に割り当てられているので、説明変数行列71の1行目の2番目の係数が“2”となっている。例えば、説明変数行列71の1行目と目的変数ベクトル72との乗算結果は、テスト実行時間ベクトル73の1番目の値として、c+2y1+2y2+y3と表される。この値は、テスト結果で得られた[テスト実行時間]の値と等しい。図3のテストAの[テスト実行時間]の値をt1とおくと、t1=c+2y1+2y2+y3である。
図7の(B)の方程式(AY=B)において、添え字“m”は、自動テストの全てのテストに対して割り当てられた目的変数の個数である。添え字“n”は、自動テストを構成するテストの総数である。“tn”は、n番目のテストの[テスト実行時間]を示す。例えば、行列Aの1行目については、c+a11y1+a12y2+……+a1mym=t1と表される。
AY=Bにおいて、誤差を考慮しない場合、Y=(A・A)−1・A・B、という行列式で表せることが知られている。なお、ここで、Xは、行列Xの転置行列を示し、X−1は、行列Xの逆行列を示す。上記方程式を用いて、ベクトルYから目的変数を求めることができる。
テスト要素実行時間取得部22は、上記のような重回帰分析の方程式を、最小二乗法を用いて解くことで、最終目的変数{y1,……,ym}の値、即ちテスト要素毎の実行時間値、を取得する。テスト要素実行時間取得部22は、得られたテスト要素毎の実行時間値を、テストシナリオのテスト毎に加算することで、テスト毎の実行時間値を得ることができる。例えば、テストAの実行時間値は、y1+y2+y3+y1+y2=2y1+2y2+y3として得られる。
[テスト要素実行時間情報]
図8は、テスト要素実行時間情報35の構成例を示す。図8の上側は、テスト要素毎の結果を纏めた表を示す。図8の下側は、テスト毎の結果を纏めた表を示す。図8の上側のテスト要素実行時間情報35の表は、項目(列)として、最終目的変数、テスト要素例、実行時間(性能実行時間)、誤差、出力相違、を有する。[最終目的変数]項目は、前述のベクトルYに対応する最終目的変数(“y1”等)及び定数(“c”)を示す。[テスト要素例]項目は、その最終目的変数に関係付けられるテスト要素の例の文を示す。これは、前述のテストシナリオ情報31またはテスト要素解析結果情報34に基づいて、1つの最終目的変数に集約されている共通のテスト要素のうちの1つのテスト要素の文が記載される。本例では、「テスト要素例」に、1つのテスト要素のみが記載されているが、これに限らず可能であり、共通の複数のテスト要素の文が記載されてもよい。いずれにしろ、[テスト要素例]項目は、ユーザがこの表を見た時に内容の把握が容易になるように設けられているので、不要であれば省略可能である。
[実行時間]項目は、上記重回帰分析によって得られた、テスト要素毎の実行時間値、即ち、性能測定値である実行時間値が格納されている。例えば変数y1のテスト要素に関する実行時間値が5ミリ秒(msec)、変数y2のテスト要素に関する実行時間値が100ミリ秒である。[誤差]項目は、重回帰分析で得られた[実行時間]値に関する誤差の値を示し、%等で表される。
[出力相違]項目は、後述の性能変動検出機能に係わる結果情報であり、時系列で、複数回の自動テストが行われた場合に、そのテスト要素に関する[実行時間]に関して、ある程度以上に大きい相違や変動があるか否かを表す値、あるいは、その相違や変動の大きさを表す値、等が格納されている。
図8の下側の表では、同様に、テストシナリオのテスト毎の実行時間値等が格納されている。例えば、テストAの実行時間がTAミリ秒、テストBの実行時間がTBミリ秒であったことを示す。
上記のようなテスト要素実行時間情報35が、自動テストの回数や日時等の情報と共に、性能測定情報36として、DB40に格納される。上記のように、実施の形態によれば、開発中ソフトウェアの性能として実行時間が測定できる。更に、実施の形態では、下記のように、開発中ソフトウェアの性能に関する変動検出機能を備えている。
[性能変動検出部]
図9は、性能変動検出部23の性能変動検出処理のフローを示す。この処理は、複数回の自動テストの結果に基づいて、実行時間の変動によって、プログラム30の性能変動を検出する処理である。前述のように、プログラム30に関する自動テストが、例えば定期的に複数回のタイミングで実施され、それぞれのタイミングに合わせて、性能測定処理が行われる。自動テストの回数分、テスト結果情報32やテスト要素実行時間情報35が同様に得られる。テスト要素実行時間取得部22は、各回のテスト要素実行時間情報35に対応する性能測定情報36を、DB40に時系列で保存しておく。
性能変動検出部23は、最新のテスト時点に対応するテスト要素実行時間情報35(性能測定情報36)と、DB40から参照できる過去のテスト時点に対応するテスト要素実行時間情報35(性能測定情報36)とを相互に比較する。性能変動検出部23は、両者における対応する[実行時間]の値を比較する。性能変動検出部23は、各時点の実行時間値における相違や変動を観測し、性能変動を検出する。性能変動検出部23は、性能変動を検出した場合、その内容や警告を表す性能変動検出情報37を出力する。
図9は、ステップS21〜S26を有する。以下、ステップの順に説明する。S21で、性能変動検出部23は、最新の自動テストの時点のテスト要素実行時間情報35または性能測定情報36を参照し、順に1行を読み込み、テスト要素毎の実行時間値及びその誤差値を参照する。S22で、性能変動検出部23は、DB40から、過去の自動テストの時点のテスト要素実行時間情報35または性能測定情報36を参照し、順に1行を読み込み、テスト要素毎の実行時間値及びその誤差値を参照する。実施の形態では、比較対象とする過去の時点としては、1つ前の回の自動テストの時点とする。これに限らず、比較対象とする過去の時点としては、任意の過去の時点としてもよく、各種の変形例が可能である。
S23で、性能変動検出部23は、S21の最新の時点の実行時間値と、S22の過去の時点の対応する実行時間値とを、回帰分析の誤差(±%)を考慮しつつ、比較する。この誤差は、前述の図8の[誤差]項目の値である。S23の比較処理は、両者の値を単純比較する方式を用いてもよいが、実施の形態では以下の方式を用いる。
性能変動検出部23は、最新の実行時間値と、過去の実行時間値との差分値を算出し、その差分値を、所定の閾値と比較することで、両者の相違の大きさを判断する。また、性能変動検出部23は、回帰分析の誤差(±%)の値を反映した上限値及び下限値を用いる。性能変動検出部23は、最新の時点の実行時間値に、正の誤差(+%)を加算で反映した上限値と、負の誤差(−%)を加算で反映した下限値とを計算する。同様に、性能変動検出部23は、過去の時点の実行時間値に、正負の誤差を反映した上限値及び下限値を計算する。そして、性能変動検出部23は、最新の実行時間値の上限値及び下限値と、過去の最新の実行時間値の上限値及び下限値とで比較する。
S24で、性能変動検出部23は、S23の比較の結果、最新の実行時間値と過去の実行時間値との間で、ある程度以上に大きい相違があるかどうかを判断する。例えば、性能変動検出部23は、最新時点の実行時間値と前回時点の実行時間値との差分値が、閾値以上である場合に、相違が大きいと判断し、性能変動として検出してもよい。その閾値は、例えば、比率(例えば50%)を用いて設定されてもよい。あるいは、性能変動検出部23は、最新時点の実行時間値の下限値が前回時点の実行時間値の上限値よりも大きい場合や、最新時点の実行時間値の上限値が前回時点の実行時間値の下限値よりも小さい場合に、相違が大きいと判断してもよい。S24の結果で、相違が大きい場合(Y)にはS25へ進み、相違が小さい場合(N)にはS26へ進む。
S25で、性能変動検出部23は、相違が大きい、即ち性能変動が大きい旨を表す警告を、ユーザに対して出力する。警告の出力は、例えば画面表示とするが、音声出力でもよいし、メール通知等でもよい。性能変動検出部23は、入出力部29を通じて、GUI画面に、警告情報を含む性能変動検出情報37を、即座に表示する。
警告出力に関して、変形例としては、以下でもよい。ソフトウェア性能測定システム2で、ユーザ設定に基づいて、テストに伴う所定のタイミングで性能測定処理を自動実行し、その性能測定結果のログ(性能測定情報36または性能変動情報37に相当する)を出力する。性能変動がある場合には、そのログ中に、警告情報が記述される。ユーザは、所望の時点でそのログを確認することで、性能変動及びその警告を認識できる。
例えば、S23の比較の際に比率の閾値(例えば50%)を用いる場合、最新時点の実行時間値が、前回時点の実行時間値に対して50%以上の相違があった場合には、性能変動の警告が出力される。
S26で、性能変動検出部23は、上記S21〜S25の処理を、比較対象となるテスト要素実行時間情報35(性能測定情報36)の全てのテスト要素について行ったかを確認しながら、全てについて行うまで、同様に繰り返し実行する。上記処理例は、テスト要素毎の実行時間値に関する比較としたが、テスト毎の実行時間値に関する比較を同様に行って性能変動を検出してもよい。
なお、変形例としては、最新時点の実行時間値と、過去の複数回の実行時間値の統計値(平均値等)とを比較してもよい。
[ソースコード表示機能]
更に、実施の形態のソフトウェア性能測定システム2では、上記性能変動検出と共に、性能変動に関連付けられるソフトウェアのソースコードの変更差分情報を同時に出力する機能を有する。上記性能変動検出機能に基づいて、実行時間の相違や変動に関する、テストシナリオのテストのテスト要素における寄与の大きい箇所が、予め、あるいはテスト後の性能測定の結果、特定される。性能変動検出部23は、その実行時間の相違が大きい箇所のテスト要素が特定できた場合、そのテスト要素の処理に関与しているソースコードにおける変更差分情報を特定し、ユーザに対して出力する。
性能変動検出部23は、上記ソースコードの変更差分情報を表示する機能を、リポジトリDB90に基づいたソース情報38を用いて実現する。既存のソフトウェア開発システムでは、ソフトウェア(プログラム30)のソースコードの変更に伴う変更差分情報が、時系列でリポジトリDB90に格納、管理されている。即ち、既存のリポジトリDB90の情報を参照すれば、ソースコード変更差分情報がわかる。ソース情報38は、自動テストシステム1のリポジトリDB90の情報の参照に基づいて設定されている情報である。ソース情報38には、テスト要素とソースコードとの対応関係が情報として記載されている。性能変動検出部23は、性能変動を検出した場合には、ソース情報38を参照し、相違が大きかったテスト要素の箇所に関係付けられるソースコードの変更差分情報を特定して抽出する。性能変動検出部23は、性能変動検出情報37に、警告等と共に、その抽出したソースコード変更差分情報を記載し、ユーザに対して出力する。例えば、GUI画面に、そのソースコード変更差分情報が表示される。
これにより、ユーザは、性能測定の結果、例えば性能低下の警告があった場合に、その性能低下に関与したと考えられるソースコード変更差分情報を、即座にGUI画面で見て確認できる。これにより、開発中ソフトウェアに関する問題解析やコード改善等を迅速に進めることを支援できる。
[効果等]
上記のように、実施の形態のソフトウェア性能測定システムによれば、対象のプログラム30のサイズが大きい場合でも、工数増大を抑えつつ、そのプログラム30の性能測定を実現できる。言い換えると、実施の形態によれば、性能測定のために、プログラム30のソースコードにログ出力等のための追加コードを埋め込む等の追加工数を必要とせずに、性能測定を実現できる。実施の形態によれば、専用の高価な性能測定装置を設ける追加コスト等を必要とせずに、性能測定を実現できる。実施の形態によれば、開発中のシステムへの悪影響を皆無として、プログラム30の性能測定を実現できる。
実施の形態によれば、ソフトウェア開発中、特に自動テスト中に、早期に性能変動を検出することができ、これにより、全体の工数を抑え、開発効率を向上できる。実施の形態によれば、ソフトウェア開発の一般的なプロセスであるテストの結果に基づいて、性能として実行時間を測定できる。実施の形態によれば、テスト工程と性能測定工程とを殆ど同じ期間に合わせて実行できる。実施の形態によれば、テストと性能測定とを独立に行うシステムに比べて、効率的に実現できる。
実施の形態によれば、テスト結果情報32のようなログ(テスト要素のテスト実行時間またはそれが算出可能な情報が含まれているログ)、及びテストシナリオ情報31(テスト要素等が規定されている情報)を含むデータや情報があれば、テスト要素毎の実行時間を測定して、プログラム30の性能を測定できる。実施の形態によれば、そのログ等のデータや情報があれば、自動テスト中であっても、自動テスト実施後にある程度時間が経過した後であっても、プログラム30の性能を測定できる。
また、一般にプログラム実行中には、不確定な要因によってプログラム性能が変動する場合がある。例えば、インタプリタ系の実行環境では、空きメモリを収集する処理であるガベージコレクション等が不定期に実行されている。これにより、プログラム実行環境の性能が低下し、実行時間が延びることがしばしばある。従来の性能測定方式では、プログラム性能測定中にこのような性能低下が生じ得るので、その性能低下の影響を少なくするためには、複数回の性能測定が必要であった。あるいは、従来の方式では、性能測定の際、システムのログを並行して取得し、そのシステムのログと、性能測定のためのログとを突き合せて原因を明確にし、例えばガベージコレクション等の動作の影響があったデータかどうかを判断する必要があった。このように、従来の方式では、作業工数が大きかった。
一方、実施の形態によれば、開発中に複数回、一般には数百回以上の回数で実行される自動テストの結果を利用して、性能測定ができる。そのため、少ない作業工数において、上記のような不確定な要因による性能低下の影響を抑えることができる。不確定な要因があったとしても、回帰分析で推定される実行時間値の分析精度には大きな影響は与えない。即ち、実施の形態によれば、十分に高い精度でプログラム30の性能測定が実現できる。
実施の形態は、特に、テストシナリオに基づいたテストを実施してテスト実行時間を出力する機能を持つ自動テストツール及びその自動テストシステム等に対して、好適に適用可能である。
以上、本発明を実施の形態に基づいて具体的に説明したが、本発明は前述の実施の形態に限定されず、その要旨を逸脱しない範囲で種々変更可能である。
1…自動テストシステム、2…ソフトウェア性能測定システム、10…第1PC、11…テスト実行環境、12…入出力部、20…第2PC、21…テストシナリオ解析部、22…テスト要素実行時間取得部、23…性能変動検出部、29…入出力部、30…プログラム、31…テストシナリオ情報、32…テスト結果情報、33…テスト要素分類表、34…テスト要素解析結果情報、35…テスト要素実行時間情報、36…性能測定情報、37…性能変動検出情報、38…ソース情報、40…DB、90…リポジトリDB。

Claims (8)

  1. 計算機上で、開発中のソフトウェアを構成するプログラムの性能を測定する情報処理を行うソフトウェア性能測定システムであって、
    前記プログラムのテストの実行結果として、前記テストを構成するテスト要素毎のテスト実行時間を含む、テスト結果情報を入力し、
    前記テストを構成する前記テスト要素の情報を含む、テスト規定情報を入力し、
    前記テスト結果情報及び前記テスト規定情報に基づいて、前記テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、前記方程式を解くことで、前記テスト要素毎の前記実行時間を算出する処理を行い、
    前記プログラムの性能を表す情報として、前記テスト要素毎の前記実行時間を含む情報を、ユーザに対して出力する、
    ソフトウェア性能測定システム。
  2. 請求項1記載のソフトウェア性能測定システムにおいて、
    前記テストを構成する前記テスト要素として、処理内容が同等とみなせる複数のテスト要素については、同じ前記目的変数を設定し、
    最小二乗法を用いて前記方程式を解く、
    ソフトウェア性能測定システム。
  3. 請求項2記載のソフトウェア性能測定システムにおいて、
    前記処理内容が同等とみなせる複数のテスト要素についてグループに分類したテスト要素分類表を入力し、
    前記テスト規定情報と前記テスト要素分類表とから、前記テストの前記テスト要素を解析して、前記処理内容が同等とみなせる複数のテスト要素に同じ前記目的変数を設定して、テスト要素解析結果情報を出力し、
    前記テスト結果情報及び前記テスト要素解析結果情報に基づいて、前記テスト要素毎の前記実行時間を算出する処理を行う、
    ソフトウェア性能測定システム。
  4. 請求項1記載のソフトウェア性能測定システムにおいて、
    前記テスト規定情報は、テストシナリオとして記述された自動テストを構成する複数の前記テスト要素の情報を含み、
    テスト実行環境において所定のタイミングで前記テストシナリオに基づいた前記自動テストが実行された結果を前記テスト結果情報として入力し、
    前記テスト結果情報の入力のタイミングに応じて、前記テスト要素毎の前記実行時間を算出する処理を行う、
    ソフトウェア性能測定システム。
  5. 請求項1記載のソフトウェア性能測定システムにおいて、
    所定のタイミングで実行される複数回の前記テストの結果を前記テスト結果情報として入力して記憶し、
    最新の時点の前記テストの結果に基づいた前記テスト要素毎の前記実行時間と、過去の時点の前記テストの結果に基づいた前記テスト要素毎の前記実行時間とを比較して、両者の相違の大きさから、性能変動を検出し、
    前記相違の大きさが閾値以上である場合には、前記ユーザに対して警告を出力する、
    ソフトウェア性能測定システム。
  6. 請求項5記載のソフトウェア性能測定システムにおいて、
    前記性能変動を検出した場合、前記相違の大きい前記テスト要素の箇所に関連付けられる前記プログラムのソースコードの変更差分情報を、前記ユーザに対して出力する、
    ソフトウェア性能測定システム。
  7. 請求項1記載のソフトウェア性能測定システムにおいて、
    前記テストを構成する複数の前記テスト要素の前記実行時間から、前記テストの単位での実行時間を計算し、前記ユーザに対して出力する、
    ソフトウェア性能測定システム。
  8. 開発中のソフトウェアを構成するプログラムの性能を測定する情報処理を計算機に実行させるソフトウェア性能測定プログラムであって、
    前記プログラムのテストの実行結果として、前記テストを構成するテスト要素毎のテスト実行時間を含む、テスト結果情報を入力する処理と、
    前記テストを構成する前記テスト要素の情報を含む、テスト規定情報を入力する処理と、
    前記テスト結果情報及び前記テスト規定情報に基づいて、前記テスト要素毎に実行時間を目的変数として設定した回帰分析の方程式を作成し、前記方程式を解くことで、前記テスト要素毎の前記実行時間を算出する処理と、
    前記プログラムの性能を表す情報として、前記テスト要素毎の前記実行時間を含む情報を、ユーザに対して出力する処理と、
    を前記計算機に実行させる、ソフトウェア性能測定プログラム。
JP2017003857A 2017-01-13 2017-01-13 ソフトウェア性能測定システム及びプログラム Active JP6841667B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017003857A JP6841667B2 (ja) 2017-01-13 2017-01-13 ソフトウェア性能測定システム及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017003857A JP6841667B2 (ja) 2017-01-13 2017-01-13 ソフトウェア性能測定システム及びプログラム

Publications (2)

Publication Number Publication Date
JP2018112959A JP2018112959A (ja) 2018-07-19
JP6841667B2 true JP6841667B2 (ja) 2021-03-10

Family

ID=62912334

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017003857A Active JP6841667B2 (ja) 2017-01-13 2017-01-13 ソフトウェア性能測定システム及びプログラム

Country Status (1)

Country Link
JP (1) JP6841667B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115604078B (zh) * 2022-09-28 2023-08-15 卓品智能科技无锡股份有限公司 低成本高效率can报文自动测试方法及系统

Also Published As

Publication number Publication date
JP2018112959A (ja) 2018-07-19

Similar Documents

Publication Publication Date Title
JP6978541B2 (ja) 動的外れ値偏り低減のコンピュータ実装方法、コンピュータシステム及びコンピュータ装置
US8386851B2 (en) Functional coverage using combinatorial test design
US8867848B2 (en) Display test device, display test method, and storage medium
Nassif et al. Revisiting turnover-induced knowledge loss in software projects
US20090007078A1 (en) Computer-Implemented Systems And Methods For Software Application Testing
US20080256392A1 (en) Techniques for prioritizing test dependencies
Kalinowski et al. Evidence-based guidelines to defect causal analysis
US20140033174A1 (en) Software bug predicting
JP2009181536A (ja) ソフトウェアの障害管理装置、テスト管理装置、ならびにそれらのプログラム
Kadry A new proposed technique to improve software regression testing cost
JP2018147280A (ja) データ分析装置及びデータ分析方法
Nguyen et al. Automated verification of load tests using control charts
US20070074151A1 (en) Business process to predict quality of software using objective and subjective criteria
JP6975086B2 (ja) 品質評価方法および品質評価装置
JP6841667B2 (ja) ソフトウェア性能測定システム及びプログラム
CN111858377B (zh) 测试脚本的质量评价方法、装置、电子设备及存储介质
JP4502535B2 (ja) ソフトウエア品質検査支援システム及び方法
Dhanalaxmi et al. A fault prediction approach based on the probabilistic model for improvising software inspection
JP5834991B2 (ja) 図式プログラムのテスト網羅性測定装置およびその方法、並びにプログラム
JP7190246B2 (ja) ソフトウェア不具合予測装置
Wong et al. A business operation stability by improving the speed of restoration on software application service
JP2016143107A (ja) ソースコード評価システム及び方法
JP6989477B2 (ja) 繰り返し故障防止装置、繰り返し故障防止システム及び繰り返し故障防止方法
Sawadpong Toward a defect prediction model of exception handling method call structures
Borjesson Industrial applicability of visual GUI testing for system and acceptance test automation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191227

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201221

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210126

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210218

R150 Certificate of patent or registration of utility model

Ref document number: 6841667

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250