首页 / 专利库 / 软件 / 软件回归测试 / Software regression test system, regression test program and regression test method

Software regression test system, regression test program and regression test method

阅读:714发布:2020-07-27

专利汇可以提供Software regression test system, regression test program and regression test method专利检索,专利查询,专利分析的服务。并且PROBLEM TO BE SOLVED: To efficiently and automatically perform a regression test by automatically extracting a portion to be preferentially tested according to a changed part so as to avoid an excessive large number of test items when performing the test. SOLUTION: This regression system performs a test by storing information on test cases of the tests performed in the past and combining a dependency relation acquired by analyzing the information and an object program. COPYRIGHT: (C)2008,JPO&INPIT,下面是Software regression test system, regression test program and regression test method专利的具体信息内容。

  • ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
    前記格納手段に格納された、前記ソフトウェアプログラムにおける各Statementの依存関係を参照して、変更されたStatementと関係あるStatementを抽出する、Statement抽出手段と、
    前記抽出したStatementと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Statementとの対応についての情報から、前記抽出したStatementと関連のあるテストケースを検出する、テストケース検出手段と、
    前記検出されたテストケースの実行を行う、テスト実行手段と、
    として機能させるためのプログラム。
  • 前記Statement抽出手段では、前記変更されたStatementからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでStatementを抽出し、
    前記閾値を変動させて、前記Statement抽出手段と、前記テストケース検出手段と、前記テスト実行手段とをテストする時間がある限り繰り返すことを特徴とする請求項1記載のプログラム。
  • 前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする請求項2記載のプログラム。
  • 更に前記情報処理装置に、前記テスト実行手段において実行されたテストケースについて前記格納手段に記録するテストケース記録手段として機能させることを特徴とする請求項1また請求項2記載のプログラム。
  • 更に前記情報処理装置に、テスト時間終了後に、変更されたStatementによって変更された依存関係を、前記格納手段に更新する依存関係更新手段として機能させることを特徴とする請求項2記載のプログラム。
  • ソフトウェアのリグレッションテストを行うシステムであって、
    前記ソフトウェアプログラムにおけるStatementと該Statementを識別するための識別子の対応テーブルを格納するStatement識別子格納手段と、
    Statement識別子を用いて記述された、前記ソフトウェアプログラムにおける各Statementの依存関係を格納する依存関係格納手段と、
    過去に行われたテストのテストケースについて、Statement識別子を用いて記述した情報を格納するテストケース格納手段と、
    前記依存関係格納手段に格納された依存関係に基づいて、変更されたStatementと関係あるStatementを抽出する依存関係解析手段と、
    前記抽出したStatementと関連付けられたテストケースを前記テストケース格納手段から検索し、前記Statement識別子格納手段を参照して該当するプログラム部分を実行しテストを行うテスト実行手段と、
    を備えることを特徴とするシステム。
  • ソフトウェアプログラムのリグレッションテストを、情報を記憶する格納手段を備える情報処理装置で実行するための方法であって、
    該情報処理装置は、
    前記格納手段に格納された、前記ソフトウェアプログラムにおける各Statementの依存関係を参照して、変更されたStatementと関係あるStatementを抽出し、
    前記抽出したStatementと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Statementとの対応についての情報から、前記抽出したStatementと関連のあるテストケースを検出し、
    前記検出されたテストケースの実行を行う、
    ことを特徴とする方法。
  • ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
    前記格納手段に格納された、前記ソフトウェアプログラムにおける各Statementの依存関係を参照して、変更されたStatementと関係あるStatementを抽出する、Statement抽出手段と、
    前記抽出したStatementと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Statementとの対応についての情報から、前記抽出したStatementと関連のあるテストケースを検出する、テストケース検出手段と、
    前記検出されたテストケースの実行を行う、テスト実行手段と、
    として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
  • 说明书全文

    本発明は、ソフトウェア開発においてプログラムを変更した際に、その変更によって予想外の影響が現れていなかどうか確認するためのリグレッションテスト(回帰テスト)を行うシステム、またはリグレッションテストを行うシステムを実現するためのプログラム、またはリグレッションテストを行う方法に関する。

    ソフトウェア開発における、ソフトウェアテストの効率化、自動化については、必要なテストの自動生成や、重複するテストの発見、最適化などについての方法、システム等が考案されている。

    特許文献1では、予め各テストケースで実行して実行回数を記録しておき、修正の影響をうけるテストケースを抽出することが開示されている。
    特許文献2では、プログラムに関する情報を基に、全てのテストケースの中から各テストケースをプログラム全体の機能における重要度順に選択するプログラムテスト装置を開示している。

    また、プログラムの依存関係について、データ依存や制御依存といった依存の種類や解析方法(非特許文献1)などについて多くの提案がなされている。
    特許文献3では、プログラムの修正による影響を受ける変数を分析し、またプログラムの実行順序をたどり計算経路を検出し、プログラムに施した修正の影響を分析する影響分析装置を開示している。

    また特許文献4では、変数間の代入元と代入先の依存関係を調べてソースプログラムを修正した際の影響範囲を調査することを開示している。
    ソフトウェア開発における修正作業(デバッグ)においては、行った修正(変更)が誤っていないか、また行った修正(変更)がそれまでは正常に動作していた他の部分に影響を及ぼし、新たな問題を引き起こすことが無いかどうかを調べるために、リグレッションテストを行うことが必須である。 しかし、ソフトウェアの規模が大きくなり、それに伴いテストケースの数が膨大になると、変更のたびに全てのテストを再実行するのは不可能である。

    そのため変更内容に関連するテストケースを絞り込み、リグレッションテストを行うことが求められる。 しかし、ソフトウェアの規模が大きく、テストケースの数も多くなっており、手作業でリグレッションテストに必要なテストケースを絞り込み、実行することは非常に困難である。 また、ソフトウェアが複雑化しているために変更の影響が把握しきれず必要なテストケースを見落としてしまうことも問題となっている。

    特公平8−1609号公報

    特開昭63−116248号公報

    特許第2634011号

    特開平8−190475号公報

    Frank Tip,A Survey of Program Slicing Techniques,Journal of Programming Languages, Vol. 3, No. 3, pp. 121−189,1995

    そこで、本発明の課題は、プログラムの変更によって予想外の影響が現れていなかどうか確認するためのリグレッションテストを行う場合に、テスト項目が膨大になってしまわないように、変更した箇所に応じて優先的にテストすべき部分を自動的に抽出し、リグレッションテストを効率的、自動的に行うことを可能にすることにある。

    上述した課題を解決するために、本発明では、過去に行われたテストのテストケースについての情報を保存しておき、その情報と対象プログラムを解析して得られた依存関係を組み合わせることによりテストを行うリグレッションシステムを構成した。

    すなわち、変更を加えた部分に関連するテストケースに絞り込んでテストを行うためには、
    (1)各テストケースにおいてソフトウェアのどの部分が実行されるか、ということと、(2)行われた変更による影響がソフトウェア中のどこに及ぶか、ということが、
    分からなければならない。

    そこで、本発明では上記(1)を実現するために、各テストケースについてテストを行った際に実行されたStatementをテストケースと関連付け、その情報を保存し、また上記(2)を実現するために、対象となるプログラムを解析し、依存関係を抽出し、該依存関係を用いて、変更された部分と依存関係があり、実行結果が変わると予想される部分を推定するように構成した。

    そして、変更された部分とどの程度強い依存関係があるかを依存の段数や種類から解析し、変更部分と強く依存している、すなわち変更の影響を強く受ける部分について、過去に実行されたテストケースとプログラム中のStatementの対応情報に基づいて該当するテストケースを抽出し、テストを実行するように構成した。

    このように構成することにより、変更された部分から依存関係の強いテストケースを確実に潰していくことが可能となり、リグレッションテストの効率化を図ることが可能である。

    本発明によれば、ソフトウェアの開発における修正作業(デバッグ)において、リグレッションテストを効率的、自動的に行うことが可能である。 これにより、ソフトウェア開発の効率自体を上げることが可能となる。

    以下、図面を参照して、本発明の実施の形態について説明する。
    図1に、本発明のソフトウェアリグレッションテストシステム101を示す。
    リグレッションテストシステム101は、プログラム格納部102、依存関係格納部103、ユーザインタフェース104、プログラム解析部105、テスト実行部106、依存関係解析部107、テストケース格納部108、Statement ID格納部109を備えて成る。

    プログラム格納部102には、テスト対象プログラムのソースファイルが保存される。
    依存関係格納部103は、プログラム中のStatement間の依存関係についての情報を保存するデータベースである。 ソースファイルごとに、各Statementについて、影響を受けるStatementと影響を与えるStatementのリストを持つ。

    図2に依存関係格納部103の概要を示す。 また、図2を依存関係格納部103で実現する場合のデータ構造を図3に示す。
    また、テストケース格納部108はテストケース実行時に実行されたプログラムの部分についての情報を保存するデータベースである。 各テストケースに対し、そのテストケースが実行されたときに、実際に実行されたプログラム中のStatementのリストを持つ。

    図4にテストケース格納部108の概要を示す。 また、図4をテストケース格納部108で実現する場合のデータ構造を図5に示す。
    Statement ID格納部109には、テスト対象プログラムの各Statementと識別子(ID)の対応を示したテーブルが保存される。

    ユーザインタフェース104は、ソフトウェア開発者などのユーザからのテスト実行指示などの入を受け付け、テスト結果を表示して通知するなど、ユーザとシステムの仲介を行う。

    プログラム解析部105は、テスト対象プログラムを静的に解析して、プログラム中の依存関係を抽出し、依存関係格納部103に出力する。 また、プログラムが部分的に修正、変更された際には、修正や変更の行われた部分から関連のある部分について、再度依存関係を抽出し、依存関係格納部103に更新する。

    依存関係解析部107は、テスト実行部106からプログラムの修正、変更された部分についての情報を受け取り、依存関係格納部103に格納された依存関係を用いて、修正、変更された部分に関連のある部分を解析し、その結果をテスト実行部106に出力する。

    テスト実行部106は、依存関係解析部107から出力された結果をもとに、テストケース格納部108から必要なテストケースの選択・実行を行う。
    図6に、図1に示したリグレッションテストシステム101において、プログラムが修正、変更された場合に、該修正、変更した部分に関係するテストを選択し、実行する際の処理の流れを示す。

    尚、図6が実行される前に、プログラム格納部102に格納されたテスト対象プログラムは、プログラム解析部105によって解析され、依存関係格納部103に依存関係に関わる情報が格納されており、また、過去のテストに関するテストケースについてテストケース格納部108に格納されている。

    また、以下の説明では、修正、変更されたStatementとの依存関係の強さを表す指標として「優先度」を用いる。 「優先度」は、修正、変更されたStatementとの依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて増加するように設定されたものであり、優先度の値が大きくなれば大きくなるほどそのStatementの依存関係は修正、変更Statementとの関係は低い、ということを意味する。

    また、依存関係の種類とは、少なくともデータ依存、制御依存、関数呼び出しのいずれかであるとする。
    まず、S601でテスト実行部106が依存関係解析部107へ、プログラム中の修正、変更されたStatementと、修正、変更されたStatementからどの程度関連が強いStatementまで抽出するかをきめる優先度の閾値を通知する。

    S602で、依存関係解析部107は、通知された、修正、変更されたStatementと優先度の閾値をもとに、依存関係格納部103に格納された依存関係を用いて、関連するStatementの抽出を行う。 この抽出処理の詳細を図7に示す。

    図7において、S701でStatementと優先度のペアの集合S1,S2,S3を用意し、すべて空にする。
    S702で、プログラム中の修正、変更されたStatementと優先度の値0のペアをS1,S2に入れる。

    S703で、S2に入っているStatementと依存関係にあるStatementと、その優先度のペアをS3に入れる。 S703の処理の詳細を図8に示す。
    図8において、S801で、Statementと優先度のペアの集合S2'を用意し、S2の内容をコピーする。 S802で、S2'が空か否かを判断する。 S2'が空(Yes)の場合は図8の処理を終了し、図7のS704に進む。 S2'が空でない(No)場合は、S803に進む。

    S803で、S2'からStatementと優先度のペア(s,p)を一つ取り出す。
    S804で、依存関係格納部103に格納された依存関係を用いて、sに依存関係のあるStatement s1、s2、s3、・・・について、pと依存関係の種類から優先度p1、p2、p3、・・・を求める。

    S805で、(s1,p1)、(s2,p2)、(s3,p3)、・・・をS3に入れる。 この際、S3に既にあるStatementについては、新しいペアの優先度の値が小さい、すなわち依存関係がより強い場合は置き換え、優先度の値が大きい、すなわち依存関係が弱い場合には捨てる。

    このように図8の処理により、S2に入っているStatementと依存関係にあるStatementとその優先度のペアをS3に得ることができる。
    そして図7のS704に進む。 S704で、S3から、優先度が閾値を超えているものを取り除く。 S705で、S3に入っているペアのうち、そのStatementがS1に入っており、優先度の値がS3よりもS1のほうが大きいものをS3から取り除く。 すなわち、依存関係の弱いものをS3から取り除く。

    S706で、S3に入っているStatementをS1に入れる。 このとき、S1に既に同じStatementについてのペアが入っている場合は、S3のペアで置き換える。

    次にS707で、S3が空か否かを判断する。 S3が空の場合(Yes)、図6に戻り、S603に進む。 S3が空でない場合(No)、S708に進み、S2を空にする。 そして、S709でS3の中身をS2に入れ、S3を空にし、S703に戻る。

    上述のように図7の処理を行うことで、終了時にS1に入っているStatementが、優先度の閾値を超えない、修正・変更されたStatementから依存関係の強いStatementである、という結果を得る。

    そして、図6のS603に進む。 S603では、依存関係解析部107がテスト実行部106へ、図7、図8の処理の結果である、抽出されたStatementを通知する。 そして、S604でテスト実行部106は通知されたStatementと関連付けられたテストケースをテストケース格納部108から検索し、見つかったテストケースの実行を行う。 この際、図6に示すリグレッションテストのサイクルの中で既に実行されたテストケースについては実行を行わない。 また、S605で、実行されたテストケースについて、当該テストケースが行われたことであることを記録し、テストケース格納部108を更新する。

    その後、S606で、またテストを続行する時間的余裕があるかどうかを判断し、余裕がある場合(Yes)には、S607に進む。 余裕がない場合(No)には、S608に進む。

    S607では、修正、変更されたStatementからどの程度関連が強いStatementまで抽出するかを決定する閾値の値を大きくし(より依存関係の弱いStatementまで抽出するように値を設定)、S601に戻り、図6のフローを繰り返す。

    S608では、十分なリグレッションテストが行われる、もしくはテスト時間に余裕がなくなり、一連のリグレッションテストが終了した後に、プログラム中の修正された箇所について依存関係格納部108の部分更新を行う。

    図9にS608を詳細に説明する。
    まず、S901でユーザからプログラムの修正、変更したStatementがユーザインタフェース104を介して指定される。 このとき、Statementを新たに追加した場合には、追加したStatementが含まれる関数やソースファイルを指定することにより対応することができる。

    次にS902で、プログラム解析部105は、指定された箇所のStatementから直接依存を受けている、もしくは直接依存を及ぼしているStatementについて、依存関係格納部103より検索する。

    この検索されたStatementが含まれるソースファイルについて依存関係抽出処理(後述の、図12、図13参照)を行い、依存関係格納部103の該当エントリのみを更新する。

    以上、図1から図9を参照して本発明のリグレッションテストシステムを詳細に説明した。
    以下、本発明のリグレッションテストの動作について、具体的な例を用いて説明する。

    今、図10に示したC言語ライクな言語で書かれたサンプルプログラムの修正作業(デバッグ)において、本発明のリグレッションテストシステムを用いているとする。
    まず、図10のプログラムについて、プログラム解析部105は依存関係格納部103に依存関係についての情報を格納する。

    また、図10のプログラムにおける各StatementとStatement IDとの対応は図11に示すテーブルであるとする。 図11に示すテーブルは、Statement ID格納部109に保存される。

    図10のプログラムにおける各Statementの依存関係を解析し、該依存関係に関わる情報を生成する処理の詳細については、非特許文献1に開示されている。
    今回の例では、注目する依存関係としてデータ依存と制御依存、関数呼び出しを用いる。 これらの依存関係は、プログラムのStatemetをノードとし、実行時のStatement間の遷移をエッジとして表現したコントロールフローグラフとして作成し、作成したコントロールフローグラフを各ノードでの変数の代入と参照、エッジのパスを見ながら辿ることにより求めることができる。

    図12に、図10のサンプルプログラムから作成されたコントロールフローグラフを示す。
    このグラフを用いて、データ依存については、例えばノード(i=1)では、変数iへの代入が行われており、ノード(while(i<=max))では、変数iが参照されていて、かつノード(i=1)からノード(while(i<=max))までの間に、変数iへの代入が行われないパスが存在するため、このノード間にはデータ依存が存在することがわかる。

    また、制御依存については、例えばノード(while(i<=max))からはノード(fact = fact * i)へのパス以外にもSTOPへ繋がるパスがあるため、このノード間には制御依存が存在するということがわかる。

    このように、プログラムからコントロールフローグラフを作成し、依存関係を解析すると、図13に示すようなプログラム依存関係グラフを得ることができる。 このグラフにおいて、実線がデータ依存を、一点鎖線が制御依存を、二点鎖線が関数呼び出しを示している。

    上述のように作成したプログラム依存関係グラフを、プログラム解析部105は依存関係格納部103に保存する。 すなわち、上述したようにプログラム依存関係グラフは図2のように表現することが可能で、図10のサンプルプログラムの依存関係は図14に示す通りとなる。 そして、図14は図15に示したデータ構造の形で依存関係格納部103に保存される。

    尚、図14、図15については、以下の説明に用いる、Statement ID:0とStatement ID:10の影響を与えるリスト、影響を受けるリストのみを記述している。

    Statement ID:0 の write(int x) については、Statement
    ID:9、10のStatementから関数呼び出しされているため、影響を受けるStatementのリストにStatement ID:9、10が登録されている。

    また、Statement ID:10の write(sum) については、Statement ID:0のStatementから関数呼び出しを受けているために、影響を与えるStatementのリストにStatement ID:0が登録されている。 また、Statement ID:3、6のStatementからデータ依存を、Statement ID:9のStatementから制御依存を受けているために影響を受けるStatementリストにStatement ID:3,6,9が登録されている。

    上述のように依存関係が依存関係格納部103に格納されるのと同時に、テストケース格納部108に過去のテストについての情報が格納される。
    ここではサンプルとして過去にテストケース1、テストケース2、テストケース3のテストが実行されていたとする。 過去の実行では、テストケース1では、Statement ID:0,1,2,3,4,5,6,7,8,9,10,11が実行され、テストケース2ではStatement ID:1,2,3,4,5,9が実行され、テストケース3ではいずれのStatementも実行されなかったとする。 このような場合に、図16に示すように、過去のテストの各テストケースにおいて実行されたStatementがリストにされて表現され、図17に示すデータ構造の形でテストケース格納部108
    に格納される。

    以上のように、依存関係格納部103に図14、図15に示した依存関係が格納され、テストケース格納部108に図16、図17に示した過去のテストで行われた各テストケースとプログラムのStatementとの関係に関わる情報が格納されたところで、リグレッションテストの行う処理の例として、サンプルプログラム中のStatment 「write(sum)」(Statement ID:10)が修正されたときのリグレッションテストの処理について説明する。

    本発明のリグレッションテストシステムでは、図6で示したフローに沿って、Statement「write(sum)」から関連が強いStatementを実行するテストケースを探し、実行していく。

    今回の例では、関連性の指標である優先度は、修正、変更されたStatementとの依存関係としてデータ依存、制御依存、関数呼び出しのいずれかを一段挟むごとに1増加するように設定されたものとする。 すなわち、優先度の値は小さいほうが依存関係が強いことを意味する。

    図18に示すように、例えば図10のサンプルプログラム中の「write(sum)」からの依存関係の強さを考えた場合、データ依存、制御依存、関数呼び出しで直接、関係のある「write(int x)」、「sum=0」、「sum=sum+i」、「if(print)」の優先度は1となり、更にこれら優先度1のStatementを挟んで関係のある「main()」、「i=1」、「while(i<=max)」、「i=i+1」、「write(fact)」の優先度は2となる。

    さて、図6において、S601でテスト実行部106は、依存関係解析部107に修正、変更されたStatement IDとして「10」と、どの程度依存関係が強いStatementまで抽出するかを決める優先度として「0」を通知する。

    S602で依存関係解析部107は、Statement ID:10と依存関係のあるStatementを抽出する。
    図7のS702で、S1=S2={(10,0)}((10,0)はStatement ID:10と優先度の値が0のペアであることを表す。)とし、S703の処理を実行する。

    S703の処理は図8のフローで示した処理で、S801で、S2'={(10,0)}となり、S803でStatementと優先度のペア(10,0)をS2'から取り出す。 次にS804を実行する。

    今回は優先度0のStatement ID:10について注目しており、依存関係データベースを参照すると、Statement ID:10と依存関係があるのはStatement ID:0,3,6,9であり、それぞれ関数呼び出し、データ依存、制御依存で関係しているため、それぞれの優先度は「0(Statement ID:0の優先度)+1(関数呼び出しを一段挟んだときの優先度増加値)=1」、「0+1(データ依存を一段挟んだときの優先度増加値)=1」、「0+1(データ依存を一段挟んだときの優先度増加値)=1」、「0+1(制御依存を一段挟んだときの優先度増加値) =1」となる。

    次にS805でS3にいれ、S3 = {(0,1),(3,1),(6,1),(9,1)}となる。 この後、S802に戻るが、S2'からは(10,0)が取り出されて空になっているため、図8の処理(図7のS703)は終了し、図7のS704に進む。

    S704では、今回は優先度の閾値が0と設定されており、S3に入っているペアは全て0を超えているために取り除かれ、S3は空となる。 このためS705、S706では何も処理は行われず、S707で図7の処理は終了する(図6のS602)。

    S602では、S1に入っているStatementが、抽出されたStatementとされ、S603に進む。 S603では、依存関係解析部107が抽出したStatementをテスト実行部106に通知する。

    S604で、S1 = {(10,0)}となっているので、優先度の閾値を0としたときには関連するStatementはStatement ID:10のみとなる。 テストケース格納部103を参照すると、(sample.c:10)を通るテストケースはテストケース1のみであるので、このサイクルではテストケース1が実行される。

    そして実行後、S605でテストケース格納部103を更新して、実行したテストケースについて記録する。
    テスト時間がまだ存在するので、S607に進み、次に優先度の閾値を1とする。

    図6において、S601でテスト実行部106は、依存関係解析部107に修正、変更されたStatement IDとして「10」と、どの程度依存関係が強いStatementまで抽出するかを決める優先度として「1」を通知する。

    S602で依存関係解析部107は、Statement ID:10と依存関係のあるStatementを抽出する。
    図7のS702で、S1=S2={(10,0)}とし、S703の処理(図8の処理)を実行する。

    図8のS801でS2' = {(10,0)}となり、S803でStatementと優先度のペア(10,0)をS2'から取り出す。 次にS804を実行する。 今回は優先度0のStatement ID:10について注目しており、依存関係データベースを参照すると、Statement ID:10と依存関係があるのはStatement ID:0,3,6,9であり、それぞれ関数呼び出し、データ依存、データ依存、制御依存で関係しているため、それぞれの優先度は0(Statement ID:0の優先度)+1(関数呼び出しを一段挟んだときの優先度減少値)=1, 0+1(データ依存を一段挟んだときの優先度減少値)=1, 0+1(データ依存を一段挟んだときの優先度減少値) =1, 0+1(制御依存を一段挟んだときの優先度減少値) =1となる。

    これをS805でS3にいれ、S3 = {(0,1),(3,1),(6,1),(9,1)}となる。 この後S802へ戻るが、S2'からは(10,0)が取り出されて空になっているため、図8で表される処理(図7のS703)は終了する。 次のS704において、今回は優先度の閾値が1と設定されており、S3に入っているペアは全て優先度が1以下であるため、取り除かれずそのままとなる。 このとき、S1 = {(10,0)}、S3 = {(0,1),(3,1),(6,1),(9,1)}となっており、S1とS3には同じStatementについてのペアは入っていないため、S705,S706でS3に入っているペアをS1へ入れ、S1 = {(10,0),(0,1),(3,1),(6,1),(9,1)}とする。 ここでS3は空で無いため、S707で終了せず、S708、S709でS2 ={(0,1),(3,1),(6,1),(9,1)}としてから再びS703で依存関係のあるStatementの探索を行う。

    二回目の図8のS801ではS2'= {(0,1),(3,1),(6,1),(9,1)}となり、含まれる4組のペアについてS803,S804,S805を行っていく。
    まず(0,1)について依存関係格納部103を参照して依存関係のあるStatementを検索すると、依存関係があるStatementがStatement ID:10,11であり、関数呼び出しで関係しているので、Statementとその優先度のペアとしてS3 = {(10,2),(11,2)}が得られる。

    次に(3,1)について検索すると、関係するStatementとその優先度として{(1,2),(6,2),(10,2)}が得られ、前に(0,1)について求めた{(10,2),(11,2)}とS805においてマージされ、S3 = {(1,2),(6,2),(10,2),(11,2)}が得られる。

    次に(6,1)について検索すると、関係するStatementとその優先度として{(2,2),(3,2),(5,2),(8,2),(10,2)}が得られ、これまでに求められた{(1,2),(6,2),(10,2),(11,2)}とS805においてマージされ、S3 = {(1,2),(2,2),(3,2),(5,2),(6,2),(8,2),(10,2),(11,2)}が得られる。

    最後に(9,1)について検索すると、関係するStatementとその優先度として{(1,2),(10,2),(11,2)}が得られ、これまでに求められた{(1,2),(2,2),(3,2),(5,2),(6,2),(8,2),(10,2),(11,2)}とS805においてマージされ、最終的にS3 = {(1,2),(2,2),(3,2),(5,2),(6,2),(8,2),(10,2),(11,2)}となり、図8で表される処理(図7のS703)は終了する。

    次のS704において、今回は優先度の閾値が1と設定されており、S3に入っているペアは全て優先度が1を超えているために取り除かれ、S3は空となる。 このためS705,S706では何も処理が行われず、S707でそのまま終了(図6のS602)する。

    S602では、S1に入っているStatementが、抽出されたStatementとされ、S603に進む。 S603では、依存関係解析部107が抽出したStatementをテスト実行部106に通知する。 ここで、S1= {(10,0),(0,1),(3,1),(6,1),(9,1)}となっているので、優先度の閾値を1としたとき、関係するStatementはStatement ID:0,3,6,9,10となる。 テストケース格納部103を参照すると、これらのStatementを通るテストケースはテストケース1、2である。 テストケース1は前のサイクルで既に実行されているため、このサイクルではテストケース2が実行される。

    そして実行後、S605でテストケース格納部103を更新して、実行したテストケースについて記録する。
    以上のようなフローで、優先度の閾値を増加させながら、時間がある限り繰り返され、修正、変更されたStatementと依存関係の強いテストケースから順にテストが行われるリグレッションテストが実現される。

    そして、十分なリグレッションテストが行われる、もしくはテスト時間に余裕がなくなり、一連のリグレッションテストが終了した後に、プログラム中の修正、変更された箇所について依存関係格納部108の部分更新がS608で行われる。

    S608の依存関係格納部108の部分更新処理は、プログラム解析部105が、指定された箇所のStatementから直接依存を受けている、もしくは直接依存を及ぼしているStatementについて、依存関係格納部103より検索し、該検索されたS
    tatementが含まれるソースファイルについて依存関係抽出し、依存関係格納部103の該当エントリのみを更新するものである。 依存関係の抽出については図10、図12、図13を用いて説明した通りである。 S608では図13のように抽出された依存関係と古い依存関係を比較し、異なる部分のみを更新する。

    以上のように本発明のリグレッションテストシステムについて図1から図18を参照して詳細に説明した。 しかしながら、本発明な上述したリグレッションシステムの構成に限定されるものではなく、コンピュータなどの情報処理装置上で動作するソフトウェアプログラムとして実現されてもよい。

    図19に本発明のソフトウェアリグレッションテストシステムを実現する情報処理装置のハードウェア構成を示す。
    情報処理装置1900は、CPU1901、メモリ1902、入力装置1903、出力装置1904、外部記憶装置1905、媒体駆動装置1906、及びネットワーク接続装置1907を備え、それらはバス1908により互いに接続されている。

    メモリ1902は、例えばROM(Read Only Memory)、RAM(Random Access Memory)等を含み、リグレッションテストシステムを実現するためのプログラムやデータを格納する。

    CPU1901は、メモリ1902を利用してプログラムを実行することによりリグレッションテストシステムを実現する。
    入力装置1903は、例えば、キーボード、ポインティングデバイス、タッチパネル等であり利用者からの指示や情報の入力に用いられる。 出力装置1904は、例えばディスプレイやプリンタ等であり、情報処理装置1900の利用者への問い合わせ、処理結果等の出力に用いられる。

    外部記憶装置1905は、例えば磁気ディスク装置、光ディスク装置、光磁気ディスク装置等である。 この外部記憶装置1905にプログラムとデータを保存しておき、必要に応じて、それらをメモリ1902上にロードして使用することもできる。

    媒体駆動装置1906は、可搬型記録媒体1909を駆動し、その記録内容にアクセスする。 可搬型記録媒体1909としては、メモリカード、メモリスティック、フレキシブルディスク、CD−ROM(Compact Disc Read Only Memory、光ディスク、光磁気ディスク、DVD(Digital Versatile Disk)等、任意のコンピュータで読み取り可能な記録媒体が用いられる。この可搬型記録媒体1909にプログラムとデータを格納しておき、必要に応じて、それらをメモリ1902にロードして使用することもできる。

    ネットワーク接続装置1907は、LAN,WAN等の任意のネットワーク(回線)を介して外部の装置と通信し、通信に伴うデータ変換を行う。 また、必要に応じて、プログラムとデータを外部装置から受け取り、それらをメモリ1902にロードして使用することもできる。

    情報処理装置上で動作するプログラムは、情報処理装置のメモリ1902等を用いて、図6、図7、図8、図9のフローを処理するように構成される。
    本発明のリグレッションテストシステムが情報処理装置上のプログラムを実行することによって実現される場合に、当該プログラムを情報処理装置へローディングする方法について図20に示しておく。
    図20の(a)は、情報処理装置2001のハードディスクなどの外部記憶装置に格納されたプログラムやデータ2002を情報処理装置2001がローディングする方法を示したものである。

    図20の(b)は、CD−ROMやDVDなどの可搬型の記憶媒体に記録されたプログラムやデータ2004が、情報処理装置2001の媒体駆動装置を介してローディングする方法を示したものである。

    図20の(c)は、ネットワークなどの回線を介して、情報提供者が提供するプログラムやデータ2003を、情報処理装置2001の通信装置を介してローディングする方法を示したものである。

    以上のように本発明は、上述したシステムの各機能と同様の機能をコンピュータなどの情報処理装置に行わせるためのプログラムとして構成してもよい。 また、本発明は、上述した機能と同様の機能をコンピュータなどの情報処理装置に行わせるためのプログラムを記録したコンピュータ読み出し可能記録媒体として構成することもできる。 また、本発明は、搬送波に具現化された、上述のプログラムを表現するコンピュータ・データ・シグナルとして構成することもできる。

    以上のように、過去に行われたテストのテストケースについての情報を保存しておき、その情報と対象プログラムを解析して得られた依存関係を組み合わせることによりテストを行うように構成した、本発明のリグレッションシステムによれば、変更された部分と依存関係の強いテストケースを優先的に潰していくことが可能となり、リグレッションテストの効率化を図ることが可能である。 これにより、ソフトウェア開発の効率自体を上げることが可能となる。

    (付記1) ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
    前記格納手段に格納された、前記ソフトウェアプログラムにおける各Statementの依存関係を参照して、変更されたStatementと関係あるStatementを抽出する、Statement抽出手段と、
    前記抽出したStatementと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Statementとの対応についての情報から、前記抽出したStatementと関連のあるテストケースを検出する、テストケース検出手段と、
    前記検出されたテストケースの実行を行う、テスト実行手段と、
    として機能させるためのプログラム。 (1)(図1、図6)
    (付記2) 前記Statement抽出手段では、前記変更されたStatementからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでStatementを抽出し、
    前記閾値を変動させて、前記Statement抽出手段と、前記テストケース検出手段と、前記テスト実行手段とをテストする時間がある限り繰り返すことを特徴とする請求項1記載のプログラム。 (2)(図1、図6、図7、図8)
    (付記3) 前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記2記載のプログラム。 (3)(図1、図6、図7、図8、図18)
    (付記4) 更に前記情報処理装置に、前記テスト実行手段において実行されたテストケースについて前記格納手段に記録するテストケース記録手段として機能させることを特徴とする請求項1また請求項2記載のプログラム。 (4)
    (付記5)更に前記情報処理装置に、テスト時間終了後に、変更されたStatemen
    tによって変更された依存関係を、前記格納手段に更新する依存関係更新手段として機能させることを特徴とする請求項2記載のプログラム。 (5)(図1、図6、図9)
    (付記6) 前記テスト実行手段では、前記テストケース記録手段により記録されたテストケースについては重複してテストを行わないことを特徴とする付記4記載のプログラム。
    (付記7) 前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記3記載のプログラム。
    (付記8) ソフトウェアのリグレッションテストを行うシステムであって、
    前記ソフトウェアプログラムにおけるStatementと該Statementを識別するための識別子の対応テーブルを格納するStatement識別子格納手段と、
    Statement識別子を用いて記述された、前記ソフトウェアプログラムにおける各Statementの依存関係を格納する依存関係格納手段と、
    過去に行われたテストのテストケースについて、Statement識別子を用いて記述した情報を格納するテストケース格納手段と、
    前記依存関係格納手段に格納された依存関係に基づいて、変更されたStatementと関係あるStatementを抽出する依存関係解析手段と、
    前記抽出したStatementと関連付けられたテストケースを前記テストケース格納手段から検索し、前記Statement識別子格納手段を参照して該当するプログラム部分を実行しテストを行うテスト実行手段と、
    を備えることを特徴とするシステム。 (6)(図1、図6)
    (付記9) 前記依存関係解析手段では、前記変更されたStatementからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでStatementを抽出し、
    テストする時間がある限り、前記閾値を変動させて前記テスト実行手段によるテストを繰り返すことを特徴とする付記8記載のシステム。 (図1、図6、図7、図8)
    (付記10) 前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記9記載のシステム。 (図1、図6、図7、図8、図18)
    (付記11) 前記テスト実行手段は、テストを行ったテストケースについて前記テストケース格納手段に記録することを特徴とする付記8または付記9記載のシステム。
    (付記12) 更に、テスト時間終了後に、変更されたStatementによって変更された依存関係を部分更新する、プログラム解析部を備えることを特徴とする請求項9記載のシステム。
    (付記13) 前記テスト実行手段は、前記テストケース格納手段を参照して、一度行ったテストケースについては重複してテストを行わないことを特徴とする付記11記載のシステム。 (図1、図6、図9)
    (付記14) 前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記10記載のシステム。
    (付記15) ソフトウェアプログラムのリグレッションテストを、情報を記憶する格納手段を備える情報処理装置で実行するための方法であって、
    該情報処理装置は、
    前記格納手段に格納された、前記ソフトウェアプログラムにおける各Statementの依存関係を参照して、変更されたStatementと関係あるStatementを抽出し、
    前記抽出したStatementと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Statementとの対応についての情報から、前記抽出したStatementと関連のあるテストケースを検出し、
    前記検出されたテストケースの実行を行う、
    ことを特徴とする方法。 (7)(図1、図6)
    (付記16) 前記変更されたStatementと関係あるStatementを抽出する際には、該変更されたStatementからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでSatementを抽出し、
    前記閾値を変動させて、テストする時間がある限り前記変更されたStatementと関係あるStatementの抽出と、前記テストケースの検出と、前記テストケースの実行を繰り返すことを特徴とする付記15記載の方法。 (図1、図6、図7、図8)
    (付記17) 前記関連性の指標として定義された優先度は、データ依存、制御依存などの依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記16記載の方法。 (図1、図6、図7、図8、図18)
    (付記18) 更に、前記検索されたテストケースのテストを行う際に、実行されたテストケースについて前記格納手段に記録する、ことを特徴とする付記15記載または付記16記載の方法。
    (付記19) 更に、テスト時間終了後、変更されたStatementによって変更された依存関係を、前記格納手段に更新する、ことを特徴とする付記16記載の方法。 (図1、図6、図9)
    (付記20) 前記検索されたテストケースを行う際に、前記格納手段に記録された、既に実行されたテストケースについては重複してテストを行わないことを特徴とする付記18記載の方法。
    (付記21) 前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記17記載のシステム。
    (付記22)ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
    前記格納手段に格納された、前記ソフトウェアプログラムにおける各Statementの依存関係を参照して、変更されたStatementと関係あるStatementを抽出する、Statement抽出手段と、
    前記抽出したStatementと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Statementとの対応についての情報から、前記抽出したStatementと関連のあるテストケースを検出する、テストケース検出手段と、
    前記検出されたテストケースの実行を行う、テスト実行手段と、
    として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。 (8)(図1、図6)
    (付記23) 前記Statement抽出手段では、前記変更されたStatementからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでStatementを抽出し、
    前記閾値を変動させて、前記Statement抽出手段と、前記テストケース検出手段と、前記テスト実行手段とをテストする時間がある限り繰り返すことを特徴とする請求項22記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。 (図1、図6、図7、図8)
    (付記24) 前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記23記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。 (図1、図6、図7、図8、図18)
    (付記25) 更に前記情報処理装置に、前記テスト実行手段において実行されたテストケースについて前記格納手段に記録するテストケース記録手段として機能させることを特徴とする請求項22また請求項23記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
    (付記26)更に前記情報処理装置に、テスト時間終了後に、変更されたStateme
    ntによって変更された依存関係を、前記格納手段に更新する依存関係更新手段として機能させることを特徴とする請求項23記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。 (図1、図6、図9)
    (付記27) 前記テスト実行手段では、前記テストケース記録手段により記録されたテストケースについては重複してテストを行わないことを特徴とする付記25記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
    (付記28) 前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記24記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。

    本発明のリグレッションテストシステムの構成を示す図である。

    依存関係格納部103の概要を示す図である。

    依存関係格納部103のデータ構造を示す図である。

    テストケース格納部108の概要を示す図である。

    テストケース格納図108のデータ構造を示す図である。

    本発明のソフトウェアリグレッションテストシステムにおける、テストの選択・実行のフローを示す図である。

    図6のS602の詳細フローを示す図である。

    図7のS703の詳細フローを示す図である。

    図6のS608の詳細フローを示す図である。

    サンプルプログラムを示す図である。

    サンプルプログラムのStatementとStatement IDとの関係を定義するテーブルを示す図である。

    サンプルプログラムのコントロールフローグラフを示す図である。

    プログラム依存関係グラフを示す図である。

    サンプルプログラムの依存関係を示す図である。

    サンプルプログラムの依存関係を依存関係格納部に格納する場合のデータ構造を示す図である。

    テストケース格納部に格納された各テストケースとStatementの関係を示す図である。

    図16の関係をテストケース格納部に格納する場合のデータ構造を示す図である。

    優先度の説明をする図である。

    ソフトウェアリグレッションテストシステムを実現する情報処理装置の構成を示す図である。

    プログラムの情報処理装置へのローディングを説明する図である。

    符号の説明

    101 ソフトウェアリグレッションテストシステム 102 プログラム格納部 103 依存関係格納部 104 ユーザインタフェース 105 プログラム解析部 106 テスト実行部 107 依存関係解析部 108 テストケース格納部 109 Statement ID格納部 1900 情報処理装置 1901 CPU
    1902 メモリ 1903 入力装置 1904 出力装置 1905 外部記憶装置 1906 媒体駆動装置 1907 ネットワーク接続装置 1908 バス 1909 可搬記録媒体 2001 情報処理装置 2002 外部記憶装置に記録されたプログラムやデータ 2003 情報提供者が提供するプログラムやデータ 2004 可搬記録媒体に記録されたプログラムやデータ

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈