JP2013232166A - 計算機システム、情報処理方法、および、情報処理プログラム - Google Patents
計算機システム、情報処理方法、および、情報処理プログラム Download PDFInfo
- Publication number
- JP2013232166A JP2013232166A JP2012105070A JP2012105070A JP2013232166A JP 2013232166 A JP2013232166 A JP 2013232166A JP 2012105070 A JP2012105070 A JP 2012105070A JP 2012105070 A JP2012105070 A JP 2012105070A JP 2013232166 A JP2013232166 A JP 2013232166A
- Authority
- JP
- Japan
- Prior art keywords
- test item
- function
- program
- call
- executed
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】関数呼出しを含む関数の処理を変更した際のテスト項目を精度よく抽出する。
【解決手段】第1のプログラムは、関数部分と関数呼出し部分とを含み、メモリは、第1のプログラムをテストするためのテスト項目と、テスト項目を実行することによって実行される関数部分と、を示す値を含むテスト項目実行情報を保持し、計算機システムは、第1のプログラムのうち、第1のプログラムに基づいて生成された第2のプログラムと異なる変更部分を取得する変更部分解析部と、変更部分が実行された場合、必ず実行される関数呼出し部分を、第1のプログラムから抽出する呼出し解析部と、テスト項目実行情報に基づいて、抽出された関数呼出し部分が呼び出す関数部分が実行されるテスト項目を、変更部分をテストするためのテスト項目の候補として、選択する実行判定部と、選択されたテスト項目の候補を出力するためのデータを生成する出力部とを有する。
【選択図】図1
【解決手段】第1のプログラムは、関数部分と関数呼出し部分とを含み、メモリは、第1のプログラムをテストするためのテスト項目と、テスト項目を実行することによって実行される関数部分と、を示す値を含むテスト項目実行情報を保持し、計算機システムは、第1のプログラムのうち、第1のプログラムに基づいて生成された第2のプログラムと異なる変更部分を取得する変更部分解析部と、変更部分が実行された場合、必ず実行される関数呼出し部分を、第1のプログラムから抽出する呼出し解析部と、テスト項目実行情報に基づいて、抽出された関数呼出し部分が呼び出す関数部分が実行されるテスト項目を、変更部分をテストするためのテスト項目の候補として、選択する実行判定部と、選択されたテスト項目の候補を出力するためのデータを生成する出力部とを有する。
【選択図】図1
Description
本発明は、計算機システムに関し、特に、プログラムのテストを支援する計算機システムに関する。
ソフトウェア開発において、開発者が既存のプログラムを修正することによって、プログラムの不良を修正する機会、または、機能を変更する機会が多い。プログラムが修正された後にプログラムがテストされる場合、開発者は、プログラムの修正前に正常に実行されていた処理が、修正後も同じ動作をするか否かを確認するため、修正前に実行されたテスト項目を修正後に再度実行し、実行結果を確認する。
大規模なソフトウェア開発において、このようなテストに必要なテスト項目の数は膨大である。このため、開発者が、これらのテスト項目すべてをプログラムを修正するごとに再実行するのは現実的でない。このため、修正内容に関係するテスト項目を適切に選択することが重要となる。
テスト項目の過去の実行情報を用いて、修正に関係するテスト項目を選択する方法が、従来から提案されている(例えば、特許文献1および特許文献2参照)。
特許文献1では、テスト項目の過去の実行情報とプログラム解析情報とに基づき、テストケースに優先度をつける方法が提案される。特許文献1に開示された方法は、過去に行われたテストケースについてのStatement(すなわち、文)情報を保存しておき、そのStatement情報と対象プログラムを解析して得られた依存関係とを組み合わせることにより、優先度をつける。
特許文献2では、過去の実行情報としてモジュールの通過情報を保存し、通過情報に基づいて、ソースコードの変更が行われたモジュールを通過するテスト項目を抽出する方法が提案される。
特許文献1に記載されたシステムは、Statement単位の実行情報を記憶し、プログラムを実行する際に、プログラム変更部分および依存関係のある部分を通過したか(すなわち、実行したか)否かを、実行情報に基づいて判定する。しかし、Statement単位に実行情報を取得した場合、情報取得のオーバーヘッドによってテスト実行時間(すなわち、テスト項目の優先度をつけるための時間)が増大し、また、情報記憶量の増大が問題となる。すなわち、特許文献1に記載された方法を、大規模プログラムに適用することは困難である。
一方で、特許文献2に記載されたシステムは、モジュール単位の実行情報を記憶することによって、大規模プログラムにおけるテスト実行時間等の問題点を解決できる。しかし、プログラムのmainモジュールのように必ず実行されるモジュールが修正された場合、すべてのテスト項目が修正モジュールを通過するため、テスト項目を絞り込むことができない。
そこで、本発明は、テスト項目を選択するための時間の増大を回避しながら、より精度よくテスト項目を選択するシステムの提供を目的とする。
本発明の代表的な一形態によると、計算機システムであって、前記計算機システムは、プロセッサおよびメモリを備え、前記メモリは、第1のプログラムを保持し、前記第1のプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、前記メモリは、前記第1のプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、前記計算機システムは、前記第1のプログラムのうち、前記第1のプログラムに基づいて生成された第2のプログラムと異なる変更部分を取得する変更部分解析部と、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第1のプログラムから抽出する呼出し解析部と、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定部と、前記選択されたテスト項目の候補を出力するためのデータを生成する出力部と、を有する。
本発明の一実施例によると、テスト項目を選択するための時間の増大を回避しながら、より精度よくテスト項目を選択できる。
以下、図面を用いて本発明の実施例について説明する。
本実施例は、関数単位に取得されたテスト項目の実行情報と、プログラムの静的解析とを用いて、関数呼出しを含む関数内を変更した場合、呼び出された関数に関連するテスト項目の候補を選択する。
図1は、本実施例1の計算機システムを示すブロック図である。
本実施例の計算機システムは、ユーザによるプログラムのテストを支援するためのテスト支援システムである。本実施例の計算機システムは、変更前プログラム101、変更後プログラム102、プログラム変更部分解析部103、プログラム変更部分情報104、テスト項目実行情報105、コマンド入力装置106、テスト項目選択部107、判定結果表示部111、および、表示画面112を、少なくとも備える。
変更前プログラム101は、変更前のプログラムを示す情報である。また、変更後プログラム102は、変更後のプログラムを示す情報である。プログラム変更部分情報104は、変更前のプログラムと変更後のプログラムとの差、すなわち、変更部分を示す情報である。
プログラム変更部分解析部103は、変更前プログラム101と変更後プログラム102とに基づいて抽出された変更部分を、プログラム変更部分情報104に格納する処理部である。
テスト項目実行情報105は、複数のテスト項目を変更前プログラム101に実行した際に取得された実行情報である。テスト項目実行情報105は、どの関数を通過したかを示す通過関数情報を含む。テスト項目実行情報105は、本実施例の計算機システムの記憶装置に格納される。
なお、本実施例における「通過する」は、「処理する」または「実行する」と同義である。
コマンド入力装置106は、本実施例の計算機システムに対するユーザのコマンド指定を受け付けるための装置である。テスト項目選択部107は、本実施例に示す方法によって、テスト項目の候補を選択する処理部である。テスト項目選択部107は、呼出し解析部108、通過判定部109、および、テスト項目選択結果110を有する。
呼出し解析部108は、変更前プログラム101とプログラム変更部分情報104とに基づいて、プログラムの変更部分と関数呼出し文との関係を解析する処理部である。本実施例における関数呼出し文とは、ソースコードに含まれる関数を呼び出す文の意味である。
通過判定部109は、呼出し解析部108による呼出し解析結果と、テスト項目実行情報105とに基づいて、各テスト項目が変更部分を通過するか否かを判定する。
テスト項目選択結果110は、通過判定部109による判定結果示す情報である。テスト項目選択結果110は、本実施例の計算機システムの記憶装置に格納される。
判定結果表示部111は、テスト項目選択部107によって生成される結果、すなわち、テスト項目の候補を、ユーザに出力するためのデータを生成するための処理部である。
表示画面112は、テスト項目選択部107によって生成されたテスト項目の候補を、ユーザに表示するための装置である。なお、表示画面112は、ディスプレイであるが、プリンタ等の出力装置でもよい。
本実施例における関数とは、プログラムを実行した際に特定の処理を行う一連の処理を示す処理単位である。プログラムにおいて関数が用いられる場合、特定の処理を行う一連の処理には、一つの関数名が割り当てられる。そして、プログラムにおいて特定の処理を行うことが必要な場合、割り当てられた関数名がプログラムにおいて呼び出されることによって、特定の処理が実行される。関数は、一般的に、サブルーチン、または、サブプログラムとも呼ばれる。
図2は、本実施例1の計算機システムが稼働する計算機システムの構成を示すブロック図である。
図2に示す計算機システムは、図1に示す計算機システムを実装するための計算機システムの一例である。
図2に示す計算機システムは、プロセッサ201、ディスプレイ装置202、キーボード203、マウス204、主記憶装置205、および、外部記憶装置206を備える。計算機システムに備わる各装置は、バスによって接続される。
プロセッサ201は、例えば、CPU(Central Processing Unit)等の演算装置である。プロセッサ201は、主記憶装置205に展開されたプログラムを実行する。
ディスプレイ装置202は、図1に示す表示画面112を実装するための装置である。すなわち、ディスプレイ装置202には、本実施例の計算機システムによって選択されたテスト項目の候補が出力される。
キーボード203、および、マウス204は、図1に示すコマンド入力装置106を実装するための装置である。キーボード203、および、マウス204によって、本実施例の計算機システムは、計算機システムの起動指示、テスト項目を選択する対象のプログラムの指定、および、テストする対象のテスト項目の指定等、ユーザからのコマンド入力による指定を受け付ける。
外部記憶装置206には、図1に示す計算機システムにおける、変更前プログラム101、変更後プログラム102、プログラム変更部分情報104、テスト項目実行情報105、および、テスト項目選択結果110が格納される。外部記憶装置206は、ハードディスク、または、SSD(Solid State Drive)等の記憶装置であってもよい。
主記憶装置205には、図1に示す計算機システムにおける、プログラム変更部分解析部103、テスト項目選択部107、呼出し解析部108、通過判定部109、および、判定結果表示部111が格納される。これらの各処理部は、プロセッサ201によって実行される。さらに主記憶装置205には、これらの処理部による処理の過程において生成される、通過関数表207、関数呼出し表208、呼出し解析結果登録表209、および、判定結果登録表210が格納される。
以降の処理において、本実施例の計算機システムが、図2に示す計算機システムによって実装された場合の処理を示すが、本実施例の計算機システムは、いかなるシステムによって実装されてもよい。例えば、主記憶装置205に格納された各処理部は、集積回路等によって実装された複数の装置によって実装されてもよい。
また、図1および図2に示す各ブロック間を接続する情報線および制御線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての情報線および制御線を示しているとは限らない。実際にはほとんどすべての構成が相互に接続されていると考えてもよい。
また、主記憶装置205および外部記憶装置206に格納される各プログラムおよび各テーブル等の情報は、ICカード、SDカード、または、DVD等の記録媒体に置くことができる。
図3は、本実施例1のテスト項目選択処理を示すフローチャートである。
図3に示すフローチャートは、本実施例においてテスト項目の候補を選択し、テスト項目の候補を出力するための処理の概要を示す。
ユーザがテスト項目の選択を本実施例の計算機システムに指示した場合、本実施例の計算機システムが起動された場合等において、図3に示すテスト項目選択処理が開始される。なお、図3に示すテスト項目選択処理の開始時、主記憶装置205に格納される通過関数表207、関数呼出し表208、呼出し解析結果登録表209、および、判定結果登録表210には、値が含まれていない。
テスト項目選択処理おいて、プログラム変更部分解析部103は、変更前プログラム101および変更後プログラム102を比較することによって、プログラムにおける変更部分を取得する。そして、取得された変更部分をプログラム変更部分情報104に格納する(301)。
なお、図3に示すテスト項目選択処理が開始されるまでに、ユーザはキーボード203またはマウス204を用いて、テスト項目を選択する対象の変更後のプログラムを変更後プログラム102に、変更前のプログラムを変更前プログラム101に入力してもよい。また、図3に示すテスト項目選択処理が開始されるまでに、本実施例の計算機システムとは異なる計算機システムから、変更前プログラム101に格納される情報と変更後プログラム102に格納される情報とが送信されてもよい。
プログラム変更部分解析部103は、ステップ301において、プログラムにおける変更部分を、変更された文(変更文)の集合として、プログラム変更部分情報104に格納する。また、プログラムに含まれる実行文(以下、単に文と記載)は、識別子として文番号があらかじめ割り当てられる。
また、プログラム変更部分解析部103は、ステップ301において、プログラム変更部分情報104に、変更前プログラム101の変更部分をマージさせたソースコード、すなわち、変更後プログラム102のソースコードを格納する。このため、プログラム変更部分情報104は、変更後プログラム102と、変更部分と、ソースコードにおける各文の文番号とを示す情報が含まれる。
プログラム変更部分解析部103は、ステップ301において、変更前プログラム101に格納されるソースコードと変更後プログラム102に格納されるソースコードとの差分を抽出することによって、変更部分を取得する。
しかし、プログラム変更部分解析部103は、変更前プログラム101のソースコードに対する変更部分を、ユーザによって入力されてもよい。この場合、計算機システムは、すべての変更部分ではなく、テストしたい変更部分を指示されることによって、ユーザがテストしたいソースコードの部分を重点的にテストするテスト項目を選択することができる。
ステップ301の後、呼出し解析部108は、ステップ301において取得された変更部分が実行された際に必ず実行される関数呼出し文を特定する(302)。ステップ302の後、通過判定部109は、特定された関数呼出し文に従って、所定のテスト項目がテスト項目の候補として選択されるべきかを判定する(303)。ステップ303の後、判定結果表示部111は、判定結果を表示する(304)。
ステップ302とステップ303とは、詳細を後述する。ステップ302の処理手順の詳細を、図4に示す。
図4は、本実施例1の関数呼出し文を特定する処理を示すフローチャートである。
ステップ301の後、呼出し解析部108は、変更前プログラム101のソースコードを参照し、変更前プログラム101のソースコードに含まれるすべての関数呼出し文を、関数呼出し表208に登録する(401)。
呼出し解析部108は、ステップ401において、変更前プログラム101のソースコードを参照し、他の処理を呼び出す定義を含む関数呼出し文を特定し、関数呼出し表208に登録してもよい。また、呼出し解析部108は、関数名をあらかじめ保持し、保持された関数名を呼び出す関数呼出し文を特定してもよい。
図5は、本実施例1の関数呼出し表208を示す説明図である。
関数呼出し表208は、変更前プログラム101に含まれる各関数呼出し文を示す情報である。関数呼出し表208は、呼出しID欄501、呼出し文欄502、所属関数欄503、および、呼出し関数欄504を含む。
呼出しID欄501は、プログラムに含まれる各関数呼出し文を一意に識別するための識別子を含む。呼出し文欄502は、関数呼出し文が含まれる文を、プログラムに含まれるすべての文において一意に識別するための文番号を含む。
所属関数欄503は、関数呼出し文が含まれる関数を一意に識別するための関数名を含む。呼出し関数欄504は、関数呼出し文によって呼び出される関数名を含む。
なお、本実施例における所属関数とは、各文が含まれる関数を意味する。
ステップ401の後、呼出し解析部108は、ステップ301において生成されたプログラム変更部分情報104に含まれる各変更文を参照し、プログラム変更部分情報104に、ステップ408以降の処理が未処理である変更文が含まれるか否かを判定する(402)。
ステップ403以降の処理が未処理である変更文が含まれる場合、呼出し解析部108は、ステップ402において、ステップ403以降の処理が未処理である変更文を一つ抽出する。その後、呼出し解析部108は、ステップ403へ進む。
未処理の変更文が含まれない場合、呼出し解析部108は、図4に示す処理を終了する。
ステップ403〜ステップ406において、呼出し解析部108は、抽出された変更文を解析し、解析結果を呼出し解析結果登録表209へ登録する。
図6は、本実施例1の呼出し解析結果登録表209を示す説明図である。
呼出し解析結果登録表209は、変更文が実行される際に必ず実行される関数呼出し文を示す情報である。呼出し解析結果登録表209は、変更文欄601と、呼出しID欄602とを含む。呼出し解析結果登録表209の各エントリには、一つの変更文に対し、複数の呼出しIDが登録されてもよい。
変更文欄601は、各変更文に割り当てられた文番号を含む。
呼出しID欄602は、関数呼出し文を示す識別子を含む。呼出しID欄602に格納される値と、関数呼出し表208の呼出しID欄501に格納される値とは、対応する。
呼出し解析部108は、ステップ403において、呼出し解析結果登録表209に新たなエントリを追加する。そして、呼出し解析部108は、ステップ402において抽出された変更文の文番号を、新たなエントリの変更文欄601に登録する。
ステップ404〜ステップ406において、呼出し解析部108は、ステップ402において抽出された変更文と、関数呼出し表208が示す関数呼出し文との関係を解析する。
ステップ403の後、呼出し解析部108は、関数呼出し表208に、ステップ405以降の処理が実行されていないエントリが含まれるか否かを判定する(404)。ステップ405以降の処理が実行されていないエントリが関数呼出し表208に含まれない場合、呼出し解析部108は、ステップ402に戻る。
ステップ405以降の処理を実行されていないエントリが関数呼出し表208に含まれると判定された場合、呼出し解析部108は、ステップ404において、ステップ405以降の処理が実行されていない関数呼出し表208のエントリを一つ抽出する。その後、呼出し解析部108は、ステップ405を実行する。
呼出し解析部108は、ステップ405において、関数呼出し表208の呼出し文欄502が示す関数呼出し文と、変更文との関係を解析し、変更文が実行された際に、呼出し文欄502が示す関数呼出し文が必ず実行されるか否かを判定する。判定の結果、変更文が実行された際に、呼出し文欄502が示す関数呼出し文が必ず実行される場合、呼出し解析部108は、ステップ406を実行する。
ステップ405における判定の結果、変更文が実行された際に呼出し文欄502が示す関数呼出し文が実行されない場合、呼出し解析部108は、ステップ404に戻り、関数呼出し表208に含まれる他の関数呼出し文を解析する。
呼出し解析部108は、変更前プログラム101に含まれるソースコードに基づいて、変更文と呼出し文欄502が示す関数呼出し文との関係を解析することによって、ステップ405における判定処理を行う。ステップ405における判定処理の具体例を以下に示す。
例えば、変更文S1が実行された際に、関数呼出し文S2が必ず実行されるための条件は、関数呼出し文S2が属する基本ブロックB2が、変更文S1が属する基本ブロックB1を支配または後支配することである。このため、呼出し解析部108は、ステップ405において変更前プログラム101に含まれるソースコードを解析し、変更文と関数呼出し文とに支配関係または後支配関係がある場合、変更文が実行された際に関数呼出し文が必ず実行されると判定する。
プログラム解析における基本ブロックに関しては、例えば、「Alfred V.Ahoら著、Compilers:Principles,Techniques,and Tools(2nd Edition)、2006年」の8.4節に記載されている。
また、基本ブロックB2が基本ブロックB1を支配するとは、プログラムの入り口から基本ブロックB1に到達する経路上で必ず基本ブロックB2を通ることを意味する。すなわち、基本ブロックB2が基本ブロックB1を支配するとは、プログラムを実行した場合、基本ブロックB1が実行されるまでに実行される処理において、必ず、基本ブロックB2が実行されることを意味する。
また、基本ブロックB2が基本ブロックB1を後支配するとは、基本ブロックB1からプログラムの出口に達する経路上で必ず基本ブロックB2を通ることを意味する。すなわち、基本ブロックB2が基本ブロックB1を後支配するとは、プログラムを実行した場合、基本ブロックB1が実行された後に実行される処理において、必ず、基本ブロックB2が実行されることを意味する。
前述のような支配関係の解析方法については、Alfred V.Ahoらの文献の9.6.1節に記載され、後支配関係の解析方法については10.4.1節に記載される。
また、ステップ405における判定処理の簡易な方法として、呼出し解析部108は、変更文S1と関係呼出し文S2とが同一の基本ブロックに含まれる場合、変更文S1が実行された際に関数呼出し文S2が必ず実行されると判定してもよい。
なお、変更文S1が関数呼出し文S2である場合、呼出し解析部108は、変更文S1が実行された際に関数呼出し文S2が必ず実行されると判定する。
本実施例の呼出し解析部108は、前述のような方法によって、変更前プログラム101に含まれる関数呼出し文が、変更文が実行される際に必ず実行される関数呼出し文であるか否かを判定することによって、変更文をテストするためのテスト項目を、精度よく選択することができる。
ステップ405において、変更文が実行された際に関数呼出し文が必ず実行される場合、呼出し解析部108は、判定された変更文を示す呼出し解析結果登録表209のエントリの呼出しID欄602に、ステップ404において抽出されたエントリの呼出しID欄501の値を登録する(406)。
ステップ405およびステップ406によって、関数呼出し表208に含まれるすべての関数呼出し文と変更文との解析が終了した場合、ステップ402へ戻り、呼出し解析部108は、ステップ403以降の処理が未処理の変更文に、ステップ403以降の処理を行う。このようにして、すべての変更文と関数呼出し文との組合せについて、解析処理を行う。
図4に示す処理によって、ステップ302が終了する。そして、図4に示す処理によって、本実施例の計算機システムは、変更文が実行される際に必ず実行される関数呼出し文を取得できる。
ステップ302の後、ステップ303のテスト項目判定処理が実行される。
ステップ303において、呼出し解析部108は、テスト項目実行情報105から抽出された通過関数表207を参照する。テスト項目実行情報105は、変更前プログラム101に対して複数のテスト項目を実行した際の実行情報を保持する。
図7は、本実施例1の通過関数表207を示す説明図である。
通過関数表207は、変更前プログラム101に行われたテスト項目と、各テスト項目において実行された関数とを示す。通過関数表207は、テスト項目欄801、および、通過関数欄802を含む。
テスト項目欄801は、テスト項目を一意に識別するための識別子を含む。通過関数欄802は、各テスト項目を実行した際に実行された関数を示す関数名を含む。
通過関数欄802には、複数の関数名が格納されてもよい。通過関数欄802に格納される値は、関数呼出し表208の所属関数欄503および呼出し関数欄504に格納される値に対応する。
図8は、本実施例1の判定結果登録表210を示す説明図である。
判定結果登録表210は、ステップ303における判定結果、すなわち、ステップ303によって選択されたテスト項目を示す。判定結果登録表210は、テスト項目欄901、選択結果欄902、および、選択理由欄903を含む。
テスト項目欄901は、テスト項目を一意に識別するための識別子を含む。テスト項目欄901に格納される値は、通過関数表207のテスト項目欄801に格納される値に対応する。
選択結果欄902は、変更後プログラム102をテストするためのテスト項目として選択されたか否かを示す値を含む。本実施例において、テスト項目として選択されたエントリの選択結果欄902は、「選択」を示す。また、テスト項目として選択されなかったエントリの選択結果欄902は、「非選択」を示す。
選択理由欄903は、テスト項目として選択された理由となる変更文の文番号を含む。選択理由欄903に格納される値は、呼出し解析結果登録表209の変更文欄601に格納される値に対応する。
ステップ303の詳細な処理手順を、図9に示す。
図9は、本実施例1のテスト項目判定処理を示すフローチャートである。
ステップ302の後、通過判定部109は、通過関数表207のエントリが示すテスト項目に、ステップ702以降の処理が実行されていないテスト項目があるか否かを判定する(701)。
ステップ702以降の処理が実行されていないテスト項目がある場合、通過判定部109は、ステップ701において、通過関数表207から一つのエントリを抽出する。そして、通過判定部109は、抽出されたエントリのテスト項目欄801の値をテスト項目t1とする。その後、通過判定部109は、ステップ702に進む。
ステップ702以降の処理が実行されていないテスト項目が、通過関数表207にない場合、通過判定部109は、図9に示す処理を終了する。
通過判定部109は、ステップ702において、判定結果登録表210に新たなエントリを追加する。そして、通過判定部109は、判定結果登録表210の新たなエントリのテスト項目欄901にテスト項目t1の識別子を格納し、選択結果欄902に初期値として「非選択」を格納する。
ステップ703以降において、通過判定部109は、テスト項目t1を、各変更文に対するテスト項目の候補として選択するか否かを判定する。通過判定部109は、テスト項目t1が変更文のいずれかを通過する可能性がある場合、テスト項目t1を変更文に対するテスト項目の候補として選択する。
ステップ702の後、通過判定部109は、ステップ704以降の処理が実行されていない変更文が呼出し解析結果登録表209に含まれるか否かを判定する(703)。
ステップ704以降の処理が実行されていない変更文が、呼出し解析結果登録表209に含まれる場合、通過判定部109は、ステップ703において、ステップ704以降の処理を実行していない変更文の一つを変更文s1として抽出する。その後、通過判定部109は、ステップ704に進む。
呼出し解析結果登録表209に含まれるすべての変更文にステップ704以降の処理が実行済みである場合、通過判定部109は、ステップ701へ戻り、次のテスト項目の処理に進む。
通過判定部109は、変更文s1の所属関数を、プログラム変更部分情報104のソースコードから抽出する。そして、抽出された所属関数がテスト項目t1を示す通過関数表207のエントリの通過関数欄802に含まれるか否かを判定する(704)。なお、呼出し解析部109がステップ406において、変更文s1の所属関数を取得し、通過判定部109は、呼出し解析部109によって取得された変更文s1の所属関数を用いてステップ704における判定を行ってもよい。
抽出された所属関数がテスト項目t1の通過関数欄802に含まれない場合、テスト項目t1が実行される際に変更文s1が実行される可能性は低い。このため、通過判定部109は、ステップ703に戻り、次の変更文の処理に進む。
抽出された所属関数がテスト項目t1の通過関数欄802に含まれる場合、テスト項目t1が実行される際に変更文s1が実行される可能性が高い。このため、通過判定部109は、呼出し解析結果登録表209の変更文s1に対応する呼出しID欄602に値が格納されているか否かを判定する(705)。
変更文s1に対応する呼出しID欄602に値が格納されない場合においても、テスト項目t1が実行される際に変更文s1が実行される可能性があるため、通過判定部109は、テスト項目t1を示す判定結果登録表210のエントリの選択結果欄902に「選択」を登録する(708)。ステップ708の後、選択理由欄903に変更文s1を示す識別子を追加する(709)。
ステップ705における判定の結果、変更文s1に対応する呼出しID欄602に値が格納されている場合、通過判定部109は、変更文s1に対応する呼出しID欄602に、ステップ707の処理が実行されていない値が含まれるか否かを判定する(706)。
ステップ706の判定の結果、変更文s1に対応する呼出しID欄602のすべての値にステップ707の処理が実行された場合、通過判定部109は、ステップ708に進む。
ステップ706の判定の結果、変更文s1に対応する呼出しID欄602に、ステップ707の処理が実行されていない値が含まれる場合、通過判定部109は、ステップ706において、変更文s1に対応する呼出しID欄602の値のうち、ステップ707の処理が実行されていない値を、関数呼出し文c1として抽出する。その後、通過判定部109は、ステップ707を実行する。
通過判定部109は、ステップ707において、関数呼出し表208の呼出しID欄501が関数呼出し文c1を示すエントリの呼出し関数欄504の値を特定する。そして、通過判定部109は、特定された呼出し関数欄504の値がテスト項目t1を示す通過関数表207のエントリの通過関数欄802に含まれるか否かを判定する(707)。
特定された呼出し関数欄504の値がテスト項目t1を示す通過関数表207のエントリの通過関数欄802に含まれない場合、テスト項目t1が実行される際、変更文s1が実行される可能性は低い。このため、通過判定部109は、ステップ703に戻り、次の変更文の処理に進む。
特定された呼出し関数欄504の値がテスト項目t1を示す通過関数表207のエントリの通過関数欄802に含まれる場合、ステップ706に戻る。そして、ステップ706およびステップ707を繰り返すことによって、通過判定部109は、変更文s1が実行される際に必ず実行される関数をすべて実行するテスト項目を、テスト項目の候補として抽出できる。そして、抽出されたテスト項目を示す判定結果登録表210のエントリの選択結果欄902に、ステップ708において「選択」を登録することができる。
なお、テスト項目t1を選択する条件は、テスト項目t1が変更文のいずれかを通過する可能性があることである。このため、テスト項目t1を選択するのみであれば、ステップ704において変更文s1の所属関数がテスト項目t1に対応する通過関数欄802に含まれると判定された場合、通過判定部109はステップ708を実行してもよい。
しかし、本実施例における通過判定部109は、選択理由欄903に変更文を示す値を登録するため、すべての変更文に対してステップ705〜ステップ707の判定処理を行う。
図9に示す処理によって、判定結果登録表210の選択結果欄902および選択理由欄903に値が格納される。また、図9に示す処理によって、ステップ303が終了する。
また、図9に示す処理によって、本実施例の計算機システムは、テストにおいて実行される関数を示す通過関数表802に従って、テスト項目の候補を選択する。これによって、プログラムに含まれるすべての文に関する実行情報に従ってテスト項目の候補を選択するよりも、本実施例の計算機システムは、テスト項目の候補を選択するための処理時間を短くできる。また、すべての文が実行されるか否かを示す実行情報を取得するために長時間をかける必要がない。
さらに、通過関数表802に従ってテスト項目の候補を選択することによって、モジュール単位の実行結果を用いてテスト項目の候補を選択するよりも、必要なテスト項目を精度よく選択することができる。
図3に示すステップ304において出力される判定結果の表示画面の一例を、図10に示す。
図10は、本実施例1の判定結果を表示する画面1000を示す説明図である。
図10に示す画面1000は、判定結果表示部111によって生成されたデータを、表示画面112がディスプレイ装置202を介して表示した画面である。判定結果表示部111は、ステップ303において生成された判定結果登録表210に基づいて、画面1000を表示するためのデータをステップ304において生成する。
本実施例の画面1000は、テスト項目選択結果欄1010と、選択理由詳細欄1020とを含む。テスト項目選択結果欄1010は、判定結果登録表210の内容を示す領域である。
選択理由詳細欄1020は、判定結果登録表210の選択理由欄903が示す変更文が変更文601に含まれる呼出し解析結果登録表209のエントリの、変更文601の値と呼出しID602の値とを示す領域である。なお、本実施例の選択理由詳細欄1020には、変更文601の値として、変更文601に相当するソースコードが表示され、呼出しID602の値として、読出しID602が示す関数呼出し文のソースコードが表示される。
判定結果表示部111は、テスト項目選択結果欄1010に、テスト項目欄901に格納された値として、テスト項目の識別子を表示させる。また、判定結果表示部111は、選択結果欄902に格納された値が「選択」である場合、テスト項目選択結果欄1010に「Yes」を表示させ、選択結果欄902に格納された値が「非選択」である場合、テスト項目選択結果欄1010に「No」を表示させる。
また、判定結果表示部111は、選択理由欄903が示す変更文のソースコードを、プログラム変更部分情報104から取得し、取得された変更文のソースコードを、テスト項目選択結果欄1010に表示させる。これによって、判定結果表示部111は、各テスト項目において通過する可能性があると判定された変更文の一覧を画面1000に表示させる。
なお、呼出し解析部109がステップ406において、変更文のソースコードを呼出し解析結果登録表209に格納し、判定結果表示部111は、呼出し解析結果登録表209に格納された変更文のソースコードを、テスト項目選択結果欄1010に表示させてよい。
さらに、判定結果表示部111は、選択理由詳細欄1020に、選択された各テスト項目(すなわち、テスト項目選択結果欄1010において「Yes」が表示されたテスト項目)の選択理由の詳細を表示させる。判定結果表示部111は、選択された各テスト項目の通過関数(通過関数欄802の値に相当)を表示させ、選択されたテスト項目において実行される可能性がある各変更文と、各変更文が実行される際に必ず実行される関数呼出し文とのリストを表示させる。
ユーザは、画面1000によって、候補として選択されたテスト項目を参照することができ、変更後プログラム102のソースコードをテストするために用いるテスト項目を決定することができる。また、ユーザは、選択理由詳細欄1020を参照することによって、テスト項目が候補として選択された理由を把握することができる。本実施例における選択された理由とは、選択されたテスト項目が、いずれの変更文をテストするために選択されたテスト項目であるか、また、いずれの関数が呼び出されるために選択されたテスト項目であるかを示す理由である。
以上で説明した本実施例1を、図11に示すC言語で記述されたソースコードに適用した場合の処理について説明する。
図11は、本実施例1のソースコードの例を示す説明図である。
図11に示すソースコード1100は、プログラム変更部分情報104に格納されるソースコードである。ソースコード1100は、プログラム変更部分情報104のソースコードと、ステップ301において特定された変更部分を示す値とを含む。
ソースコード1100は、行欄1101、文番号欄1102、変更欄1103、および、ソースコード欄1104を含む。行欄1101は、ソースコードの各行を一意に識別するための識別子を含む。
文番号欄1102は、ソースコードに含まれる文を一意に識別するための識別子を含む。文番号欄1102に格納される値は、関数呼出し表208の呼出し文欄502に格納される値、および、呼出し解析結果登録表209の変更文欄601に格納される値に対応する。ソースコード欄1104は、変更後プログラム102のソースコード(または、変更部分と変更前プログラム101とのマージ結果)を行ごとに示す。
プログラム変更部分解析部103は、ステップ301において、ソースコード欄1104に含まれる各文について、変更の有無を解析し、解析された結果を示す値を変更欄1103に格納する。変更欄1103は、ソースコード欄1104に示される文が変更ありと解析された場合、「Y」を格納され、ソースコード欄1104に示される文が変更なしと解析された場合、「N」を格納される。本例において、変更文は、文番号がS5である変更文S5、および、文番号がS8である変更文S8である。
呼出し解析部108が、ソースコード欄1104に対応する変更前プログラム101に、図4に示すステップ401を実行した場合、図5に示す関数呼出し表208が生成されるものとする。すなわち、呼出し解析部108は、以下の例において、変更前プログラム101から、4箇所の関数呼出し文(funcA、funcB、および、funcC)を抽出し、図5に示す関数呼出し表208を生成したものとする。
呼出し解析部108は、図4に示すステップ404〜ステップ406において、変更文S5と、ソースコード1100に含まれる関数呼出し文との関係を解析する。変更文S5と関数呼出し文S6とは、ソースコード1100において、同じ基本ブロックに属する。このため、呼出し解析部108は、ステップ406において、呼出し解析結果登録表209の変更文S5を示すエントリの呼出しID欄602に、関数呼出し文S6の識別子である「C2」を格納する。
また、呼出し解析部108は、図4に示すステップ404〜ステップ406において、変更文S8と、ソースコード1100に含まれる関数呼出し文との関係を解析する。変更文S8と関数呼出し文S9とは、ソースコード1100において同じ基本ブロックに属する。このため、呼出し解析部108は、ステップ406において、呼出し解析結果登録表209の変更文S8を示すエントリの呼出しID欄602に、関数呼出し文S9の識別子である「C3」を格納する。
また、関数呼出し文S6の属する基本ブロックは、変更文S8の属する基本ブロックを支配するため、変更文S8が実行される前には必ず関数呼出し文S6が実行される。従って、呼出し解析部108は、呼出し解析結果登録表209の変更文S8を示すエントリの呼出しID欄602に、関数呼出し文S6の識別子である「C2」を格納する。
以上の図4に示す処理、すなわち、ステップ302による処理によって、図6に示す呼出し解析結果登録表209が生成される。
通過判定部109が、図9に示す処理によって、図7の通過関数表207に含まれる6個のテスト項目から、ソースコード1100についてのテスト項目を選択する処理を説明する。通過判定部109は、まず、図9に示す処理によって、テスト項目欄801が「T1」であるテスト項目T1を、各変更文のテスト項目の候補として選択するか否かを判定する。
通過判定部109は、ステップ704〜ステップ709において、テスト項目T1を変更文S5のテスト項目の候補として選択するか否かを判定する。ステップ704において、通過判定部109は、変更文S5の所属関数mainが、テスト項目t1を示す通過関数表207の通過関数欄802に含まれると判定する。そして、通過判定部109は、ステップ705およびステップ706において、変更文S5に対応する呼出しID欄602が示す関数呼出しC2は、テスト項目T1に対応する通過関数欄802に含まれないと判定する。このため、通過判定部109は、テスト項目T1を変更文S5のテスト項目の候補として選択しない。
さらに、ステップ704〜ステップ709において、テスト項目T1を変更文S8のテスト項目の候補として選択するか否かを判定する。しかし、変更文S8に対応する呼出しID欄602は関数呼出しC2および関数呼出しC3を示し、関数呼出しC2に対応する呼出し関数欄504が示すfuncBと、関数呼出しC3の呼出し関数欄504が示すfuncCとは、いずれもテスト項目T1の通過関数欄802に含まれない。このため、通過判定部109は、テスト項目T1を、変更文S8のテスト項目の候補として選択しない。
次に、通過判定部109は、図9に示す処理によって、テスト項目T2を、各変更文のテスト項目の候補として選択するか否かを判定する。
通過判定部109は、まず、ステップ704〜ステップ709において、テスト項目T2を変更文S5のテスト項目の候補として選択するか否かを判定する。変更文S5に対応する呼出しID欄602は関数呼出しC1を示し、関数呼出しC2に対応する呼出し関数欄504が示すfuncBは、テスト項目T2に対応する通過関数欄802に含まれる。このため、ステップ708とステップ709とにおいて、通過判定部109は、テスト項目T2を変更文S5のテスト項目の候補として選択し、選択理由欄903に「S5」を登録する。
さらに、変更文S8に対応する呼出しID欄602には、関数呼出しC2および関数呼出しC3が含まれ、関数呼出しC2の呼出し関数欄504が示すfuncBと、関数呼出しC3の呼出し関数欄504が示すfuncCとは、テスト項目T2の通過関数欄802に含まれる。このため、通過判定部109は、テスト項目T2を変更文S8のテスト項目の候補として選択し、選択理由欄903に「S8」を追加する。
次に、通過判定部109は、図9に示す処理によって、テスト項目T3を各変更文のテスト項目の候補として選択するか否かを判定する。
変更文S5に対応する呼出しID欄602は関数呼出しC2を示し、関数呼出しC2に対応する呼出し関数欄504が示すfuncBは、テスト項目T3の通過関数欄802に含まれる。このため、通過判定部109は、テスト項目T3を変更文S5のテスト項目の候補として選択し、テスト項目T3の選択理由欄903に「S5」を登録する。
変更文S8に対応する呼出しID欄602は関数呼出しC2および関数呼出しC3を示し、関数呼出しC2に対応する呼出し関数欄504が示すfuncBは、テスト項目T3の通過関数欄802に含まれる。しかし、関数呼出しC3の呼出し関数funcCは、テスト項目T3の通過関数欄802に含まれない。
このため、通過判定部109は、ステップ707において、特定された呼出し関数欄504の値がテスト項目t1を示す通過関数表207のエントリの通過関数欄802に含まれないと判定する。そして、ステップ703に戻り、テスト項目T3を変更文S8のテスト項目の候補として選択しない。
通過判定部109は、テスト項目T4、テスト項目T5、および、テスト項目T6について、同様の処理を行った結果、図8に示す判定結果登録表210を生成する。
図8に示す判定結果登録表210の表示例は、図11に示す画面1000のテスト項目選択結果欄1010である。テスト項目選択結果欄1010において、各テスト項目に対応する、図8に示す選択結果欄902の値が、YesまたはNoによって表示される。
また、図11に示すテスト項目選択結果欄1010には、関連変更文として、変更文S5および変更文S8に対応する値が表示される。具体的には、テスト項目選択結果欄1010には、ソースコード1100の7行目および10行目のソースコード(ソースコード1104の値に対応)と行番号(行欄1101の値に対応)とが表示される。
選択理由詳細欄1020には、例えば、テスト項目T2と、テスト項目T2に対応する図7に示す通過関数欄802の値とが表示される。また、選択理由詳細欄1020には、選択理由欄903の変更文S5および変更文S8に対応する、行番号(行欄1101の値に対応)、ソースコード(ソースコード1104の値に対応)、および、所属関数が表示される。また、図6に示す各変更文に対応する呼出しID欄602が示す関数呼出し文のソースコードが示される。
前述の判定結果表示部111は、図11に示す画面1000のように、テスト項目の候補をディスプレイ装置202に表示させた。これによって、ユーザはテスト項目の候補の中から、変更後プログラム102のソースコードに対して行うテスト項目を決定することができる。
しかし、本実施例の判定結果表示部111は、テスト項目の候補をテスト項目と決定し、決定されたテスト項目を、変更後のプログラムをテストするシステムに送信してもよい。これによって、ユーザの入力作業を介することなく、変更後のプログラムのテストを実行できる。
実施例1によれば、テスト項目を選択するために、プログラムのソースコードから変更部分を抽出し、さらに、変更部分が実行される際に必ず実行される関数呼出しを抽出する。また、抽出された関数呼出しが呼び出す関数と、プログラムの修正前に行われたテストにおいて実行された関数とが同じであるテスト項目を、テスト項目の候補として選択する。これによって、精度よくテスト項目を選択できる。そして、これによって、テスト実行時間の増大を回避できる。
実施例1によれば、テストにおいて実行される関数を示す通過関数表802に従って、テスト項目の候補を選択する。これによって、プログラムに含まれるすべての文に関する実行情報に従ってテスト項目の候補を選択するよりも、本実施例の計算機システムは、テスト項目の候補を選択するための処理時間および処理の負荷を低減できる。また、すべての文が実行されるか否かを示す実行情報を取得するために長時間をかける必要がない。
すなわち、本実施例の計算機システムは、テスト項目を選択するための時間の増大を回避でき、さらに、処理の負荷を低減できる。
さらに、通過関数表802に従ってテスト項目の候補を選択することによって、モジュール単位の実行結果を用いてテスト項目の候補を選択するよりも、必要なテスト項目を精度よく選択することができる。
以下に示す本実施例2は、テスト項目実行情報105が通過関数情報として関数間の呼出し関係を含む場合の、テスト項目の選択処理である。すなわち、実施例1における通過判定部109は、変更文が実行される際に必ず実行される関数呼出し文が、テスト項目において実行されるか否かに従ってテスト項目を選択した。しかし、実施例2における通過判定部109は、変更文が実行される際に必ず実行される関数呼出し文と、その関数呼出し文の所属関数との組合せが、テスト項目においてテストされているか否かに従って、テスト項目を選択する。
実施例2における計算機システムは、実施例1における計算機システムと同様であるが、実施例2における主記憶装置207は、実施例1の通過関数表207の代わりに通過関数表1200を保持する。また、実施例2における通過判定部109は、実施例1における通過判定部109が実行する処理と、一部の処理が異なる処理を実行する。すなわち、実施例2における計算機システムは、通過関数表1200、および、通過判定部109以外、実施例1における計算機システムと同じ構成を有する。
図12は、本実施例2の通過関数表1200を示す説明図である。
通過関数表1200は、テスト項目実行情報105に含まれる通過関数情報から抽出されたテーブルである。通過関数表1200は、テスト項目欄1201、および、通過関数欄1202を含む。
テスト項目欄1201は、テスト項目を一意に識別するための識別子を含む。通過関数欄1202は、テスト項目において実行される関数の呼出し関係を示す値を含む。
実施例2の通過関数欄1202において、矢印は、呼出し関係を示す。具体的には、「A→B」は、関数Aから関数Bを呼び出したことを示す。
また、「A→(B,C)」のように括弧内にコンマ区切りで関数名が記載された場合、主となる関数が複数の関数を呼び出したことを示す。具体的には、「A→(B,C)」は、関数Aから関数Bと関数Cとが呼び出されたことを示す。この場合、「A→B」と「A→C」との2個の呼出し関係があるとみなす。
実施例2における処理は、ステップ301、ステップ302、および、ステップ304は、実施例1と同じ処理である。ただし、ステップ303におけるテスト項目を選択する処理が実施例2と実施例1とで異なる。以下において、ステップ303における処理を示す。
図13は、本実施例2のテスト項目判定処理を示すフローチャートである。
図13に示す処理は、ステップ1307を除いて、図9に示す処理と同じである。すなわち、ステップ1301〜ステップ1306は、図9に示すステップ701〜ステップ706と同じであり、ステップ1308およびステップ1309は、図9に示すステップ708およびステップ709と同じである。
通過判定部109は、ステップ1307において、ステップ1306において抽出された関数呼出しc1と、関数呼出しc1の所属関数(所属関数欄503の値に対応)とが、テスト項目t1に対応する通過関数欄1202に示される呼出し関係であるか否かを判定する。そして、呼出しID欄602が示すすべての関数呼出しc1と、関数呼出しc1の所属関数とが、テスト項目t1に対応する通過関数欄1202に示される呼出し関係である場合、ステップ1308において、テスト項目t1を変更文s1のテスト項目の候補として選択する。
例として、図11に示したソースコード1100を用いた場合の、実施例2のテスト項目判定処理を以下に示す。なお、実施例2において、変更文はソースコード欄1104において3行目の変更文S2であるとする。
変更文S2を実行した際に必ず実行される関数呼出し文は、ソースコード1100において文S3のfuncAの関数呼出しである。図12に示す各エントリのテスト項目において、funcAの関数読出しが実行されるか否かを判定するため、通過判定部109は、ステップ1307において、funcAの所属関数mainと、funcAとの関係(すなわち、「main→funcA」)が、通過関数表1200の通過関数欄1202に含まれるか否かを判定する。
テスト項目T1およびテスト項目T2に対応する通過関数欄1202には、「main→funcA」が含まれない。しかし、テスト項目T3、テスト項目T4、および、テスト項目T5に対応する通過関数欄1202には、「main→funcA」が含まれる。
このため、通過判定部109は、ステップ1308において、テスト項目T3、テスト項目T4、および、テスト項目T5を変更文S2のテスト項目の候補として選択する。
ここで、テスト項目T6に対応する通過関数欄1202は、所属関数mainおよびfuncAの呼出し関係を含むが、funcAはfuncBから直接呼び出されている。これは、ソースコード1100において、関数呼出し文S11によってfuncAが呼び出され、呼出し文S3が実行されないことに対応する。このため、通過判定部109は、ステップ1308において、テスト項目T6を選択しない。
実施例1において、図7の通過関数表207に示すように、テスト項目T3とテスト項目T6との通過関数欄802が同じであり、変更文が文S2であった場合、通過判定部109は、テスト項目T3とテスト項目T6との両方を、テスト項目の候補として選択する。
しかし、前述の実施例2のように、通過関数欄802に、関数呼出し文と関数呼出し文の所属関数との呼出し関係を保持することによって、通過判定部109は、より精度よくテスト項目の候補を選択することができる。
なお、本実施例は前述に限定されるものではなく、様々な変形例が含まれる。すなわち、前述した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
104・・・プログラム変更部分情報、105・・・テスト項目実行情報、108・・・呼出し解析部、109・・・通過判定部、111・・・判定結果表示部、207・・・通過関数表、209・・・呼出し解析結果登録表、210・・・判定結果登録表
Claims (15)
- 計算機システムであって、
前記計算機システムは、プロセッサおよびメモリを備え、
前記メモリは、第1のプログラムを保持し、
前記第1のプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、
前記メモリは、前記第1のプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、
前記計算機システムは、
前記第1のプログラムのうち、前記第1のプログラムに基づいて生成された第2のプログラムと異なる変更部分を取得する変更部分解析部と、
前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第1のプログラムから抽出する呼出し解析部と、
前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定部と、
前記選択されたテスト項目の候補を出力するためのデータを生成する出力部と、を有することを特徴とする計算機システム。 - 請求項1に記載された計算機システムであって、
前記第1のプログラムは、前記関数呼出し部分を含む所属関数部分を、さらに含み、
前記テスト項目実行情報は、前記関数部分を呼び出す関数呼出し部分を含む所属関数部分を示す値を、さらに含み、
前記実行判定部は、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す関数部分と、前記抽出された関数呼出し部分を含む所属関数部分との両方が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択することを特徴とする計算機システム。 - 請求項1または2に記載された計算機システムであって、
前記実行判定部は、前記選択されたテスト項目の候補と、前記変更部分とを含む判定結果情報を、前記メモリに格納し、
前記出力部は、前記選択されたテスト項目の候補と、前記変更部分と、前記抽出された関数呼出し部分とを、前記テスト項目が選択された理由として出力するためのデータを、前記判定結果情報と前記テスト項目実行情報とに基づいて生成することを特徴とする計算機システム。 - 請求項1または2に記載された計算機システムであって、
前記計算機システムは、ユーザからデータを入力されるための入力部を、さらに備え、
前記変更部分解析部は、前記入力部を介して前記ユーザから前記変更部分を示すデータを入力されることによって、前記変更部分を取得することを特徴とする計算機システム。 - 請求項1または2に記載された計算機システムであって、
前記呼出し解析部は、前記変更部分を支配する前記関数呼出し部分、または、前記変更部分を後支配する前記関数呼出し部分を前記第1のプログラムから抽出することによって、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を抽出することを特徴とする計算機システム。 - 計算機システムによる情報処理方法であって、
前記計算機システムは、プロセッサおよびメモリを備え、
前記メモリは、第1のプログラムを保持し、
前記第1のプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、
前記メモリは、前記第1のプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、
前記方法は、
前記プロセッサが、前記第1のプログラムのうち、前記第1のプログラムに基づいて生成された第2のプログラムと異なる変更部分を取得する変更部分解析手順と、
前記プロセッサが、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第1のプログラムから抽出する呼出し解析手順と、
前記プロセッサが、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定手順と、
前記プロセッサが、前記選択されたテスト項目の候補を出力するためのデータを生成する出力手順と、を含むことを特徴とする情報処理方法。 - 請求項6に記載された情報処理方法であって、
前記第1のプログラムは、前記関数呼出し部分を含む所属関数部分を、さらに含み、
前記テスト項目実行情報は、前記関数部分を呼び出す関数呼出し部分を含む所属関数部分を示す値を、さらに含み、
前記実行判定手順は、前記プロセッサが、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す関数部分と、前記抽出された関数呼出し部分を含む所属関数部分との両方が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する手順を含むことを特徴とする情報処理方法。 - 請求項6または7に記載された情報処理方法であって、
前記実行判定手順は、前記プロセッサが、前記選択されたテスト項目の候補と、前記変更部分とを含む判定結果情報を、前記メモリに格納する手順を含み、
前記出力手順は、前記プロセッサが、前記選択されたテスト項目の候補と、前記変更部分と、前記抽出された関数呼出し部分とを、前記テスト項目が選択された理由として出力するためのデータを、前記判定結果情報と前記テスト項目実行情報とに基づいて生成する手順を含むことを特徴とする情報処理方法。 - 請求項6または7に記載された情報処理方法であって、
前記計算機システムは、ユーザからデータを入力されるための入力部を、さらに備え、
前記変更部分解析手順は、前記プロセッサが、前記入力部を介して前記ユーザから前記変更部分を示すデータを入力されることによって、前記変更部分を取得する手順を含むことを特徴とする情報処理方法。 - 請求項6または7に記載された情報処理方法であって、
前記呼出し解析手順は、前記プロセッサが、前記変更部分を支配する前記関数呼出し部分、または、前記変更部分を後支配する前記関数呼出し部分を前記第1のプログラムから抽出することによって、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を抽出する手順を含むことを特徴とする情報処理方法。 - 計算機システムが備えるメモリに保持される情報処理プログラムであって、
前記計算機システムは、プロセッサを備え、
前記メモリは、第1のソフトウェアプログラムを保持し、
前記第1のソフトウェアプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、
前記メモリは、前記第1のソフトウェアプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、
前記情報処理プログラムは、前記プロセッサに、
前記第1のソフトウェアプログラムのうち、前記第1のソフトウェアプログラムに基づいて生成された第2のソフトウェアプログラムと異なる変更部分を取得する変更部分解析手順と、
前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第1のソフトウェアプログラムから抽出する呼出し解析手順と、
前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定手順と、
前記選択されたテスト項目の候補を出力するためのデータを生成する出力手順と、を実行させるための情報処理プログラム。 - 請求項11に記載された情報処理プログラムであって、
前記第1のソフトウェアプログラムは、前記関数呼出し部分を含む所属関数部分を、さらに含み、
前記テスト項目実行情報は、前記関数部分を呼び出す関数呼出し部分を含む所属関数部分を示す値を、さらに含み、
前記実行判定手順は、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す関数部分と、前記抽出された関数呼出し部分を含む所属関数部分との両方が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する手順を含む情報処理プログラム。 - 請求項11または12に記載された情報処理プログラムであって、
前記実行判定手順は、前記選択されたテスト項目の候補と、前記変更部分とを含む判定結果情報を、前記メモリに格納する手順を含み、
前記出力手順は、前記選択されたテスト項目の候補と、前記変更部分と、前記抽出された関数呼出し部分とを、前記テスト項目が選択された理由として出力するためのデータを、前記判定結果情報と前記テスト項目実行情報とに基づいて生成する手順を含むことを特徴とする情報処理プログラム。 - 請求項11または12に記載された情報処理プログラムであって、
前記計算機システムは、ユーザからデータを入力されるための入力部を、さらに備え、
前記変更部分解析手順は、前記入力部を介して前記ユーザから前記変更部分を示すデータを入力されることによって、前記変更部分を取得する手順を含む情報処理プログラム。 - 請求項11または12に記載された情報処理プログラムであって、
前記呼出し解析手順は、前記変更部分を支配する前記関数呼出し部分、または、前記変更部分を後支配する前記関数呼出し部分を前記第1のソフトウェアプログラムから抽出することによって、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を抽出する手順を含む情報処理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012105070A JP2013232166A (ja) | 2012-05-02 | 2012-05-02 | 計算機システム、情報処理方法、および、情報処理プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012105070A JP2013232166A (ja) | 2012-05-02 | 2012-05-02 | 計算機システム、情報処理方法、および、情報処理プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013232166A true JP2013232166A (ja) | 2013-11-14 |
Family
ID=49678527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012105070A Pending JP2013232166A (ja) | 2012-05-02 | 2012-05-02 | 計算機システム、情報処理方法、および、情報処理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2013232166A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016189721A1 (ja) * | 2015-05-28 | 2016-12-01 | 三菱電機株式会社 | ソースコード評価装置及びソースコード評価方法及びソースコード評価プログラム |
-
2012
- 2012-05-02 JP JP2012105070A patent/JP2013232166A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016189721A1 (ja) * | 2015-05-28 | 2016-12-01 | 三菱電機株式会社 | ソースコード評価装置及びソースコード評価方法及びソースコード評価プログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9389849B2 (en) | Test case pattern matching | |
US10162739B2 (en) | Test case generation system and recording medium wherein test case is recorded | |
JP6440895B2 (ja) | ソフトウェア分析装置及びソフトウェア分析方法 | |
JP2010122959A (ja) | テスト支援システム、方法、及び、プログラム | |
JP2018073054A (ja) | オブジェクト分析装置、オブジェクト分析方法、及びプログラム | |
US20140172344A1 (en) | Method, system and apparatus for testing multiple identical components of multi-component integrated circuits | |
EP3570173B1 (en) | Equivalence verification apparatus and equivalence verification program | |
WO2019142266A1 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
US20140281719A1 (en) | Explaining excluding a test from a test suite | |
JP2016164727A (ja) | テストケース選択装置 | |
JP2015184824A (ja) | 情報処理プログラム、情報処理方法および情報処理装置 | |
US8516453B2 (en) | Partition-based static analysis of computer software applications | |
JP2013232166A (ja) | 計算機システム、情報処理方法、および、情報処理プログラム | |
WO2020194455A1 (ja) | テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム | |
US9710360B2 (en) | Optimizing error parsing in an integrated development environment | |
JP2009193488A (ja) | ソフトウェアテスト項目編集支援装置およびソフトウェアテスト項目編集支援方法 | |
KR20070035266A (ko) | 소프트웨어 검사방법 | |
JP2015069400A (ja) | ソフトウェアテストシステム | |
US20150199183A1 (en) | Program analysis apparatus and program analysis method | |
WO2016001982A1 (ja) | テストデータ生成支援装置、及びテストデータ生成支援方法 | |
JP5755861B2 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
JP3094475B2 (ja) | プログラム検証方法 | |
JP2002014847A (ja) | プログラム検査装置、プログラム検査方法及び検査を行うためのプログラムを格納した記録媒体 | |
JP2018005637A (ja) | 検索プログラム、検索方法および検索装置 | |
JP2006236042A (ja) | ソースプログラム解析装置およびその方法 |