JP2016018253A - ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法 - Google Patents

ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法 Download PDF

Info

Publication number
JP2016018253A
JP2016018253A JP2014138721A JP2014138721A JP2016018253A JP 2016018253 A JP2016018253 A JP 2016018253A JP 2014138721 A JP2014138721 A JP 2014138721A JP 2014138721 A JP2014138721 A JP 2014138721A JP 2016018253 A JP2016018253 A JP 2016018253A
Authority
JP
Japan
Prior art keywords
program
stub
type
return value
return
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.)
Granted
Application number
JP2014138721A
Other languages
English (en)
Other versions
JP6390217B2 (ja
Inventor
朝子 片山
Asako Katayama
朝子 片山
忠弘 上原
Tadahiro Uehara
忠弘 上原
翔一朗 藤原
Shoichiro Fujiwara
翔一朗 藤原
一樹 宗像
Kazuki Munakata
一樹 宗像
スッパシット モンプラターンチャイ
Monpratarnchai Supasit
スッパシット モンプラターンチャイ
晋 徳本
Susumu Tokumoto
晋 徳本
前田 芳晴
Yoshiharu Maeda
芳晴 前田
文義 笹川
Fumiyoshi Sasagawa
文義 笹川
英生 谷田
Hideo Tanida
英生 谷田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014138721A priority Critical patent/JP6390217B2/ja
Publication of JP2016018253A publication Critical patent/JP2016018253A/ja
Application granted granted Critical
Publication of JP6390217B2 publication Critical patent/JP6390217B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】スタブによる返り値の型の種類の網羅度の向上を支援すること。
【解決手段】ソフトウェア変更プログラムは、第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行い、前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定し、前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する、処理をコンピュータに実行させる。
【選択図】図7

Description

本発明は、ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法に関する。
プログラムのシンボリック実行とは、特別な実行基盤上において、プログラム中の変数に具体的な値を代入せずに、変数を記号(シンボル値)として扱ってプログラムを実行することをいう。
図1は、シンボリック実行の対象のプログラムの処理手順の一例を示す図である。図1には、method(int a、int b)というメソッドの処理手順が示されている。すなわち、変数a及び変数bの値は、当該メソッドの引数として与えられる。シンボリック実行では、プログラムのソースコードが参照されるが、図1では、便宜上、ソースコードに記述されている処理手順がフローチャートによって示されている。
図2は、シンボリック実行を説明するための図である。図2に付されているステップ番号は、図1に示されているステップ番号に対応する。
シンボリック実行では、図2に示されるように、実行可能な全てのパスが抽出される。例えば、ステップS11における分岐において「a!=0」が満たされたと仮定されて、ステップS12に進む。ステップS12では「a>5」が満たされたと仮定されて、ステップS13に進む。なお、各分岐条件において満たされた状態は、記憶されている。すなわち、ステップS13の時点において「a!=0」かつ「a>5」であることが記憶されている。したがって、ステップS13において「a=0」が満たされることは無いと判定され、ステップS14は実行できないことが検出される。一方、「a!=0」は満たされるため、ステップS15が実行される。続いて、ステップS21において「b<=0」が満たされると仮定されて、ステップS22が実行される。以上で一つのパスが抽出される。
その後、例えば、満たされたことが仮定されていない分岐先が残っている分岐のうちの末端の分岐まで戻り、他方の分岐条件が満たされた状態で、当該分岐以降の処理が実行され、新たなパスが抽出される。具体的には、ステップS21において「b>0」が満たされたと仮定されて、ステップS23及びS24が実行される。
更に、ステップS12において「a<=15」が満たされたと仮定されて、ステップS16以降が実行される。また、ステップS11において「a=0」が満たされたと仮定されて、ステップS18以降が実行される。その結果、6通りのパスが実行可能なパスとして抽出される。以上のようなシンボリック実行により、例えば、図3に示されるような出力情報が得られる。
図3は、シンボリック実行の出力情報の一例を示す図である。図3に示されるように、シンボリック実行では、抽出されたパスごとに、パス条件及び発生エラー等が出力される。なお、「No.」の列は、便宜的に付加されている。
パス条件は、当該パスを通るために変数が取り得る値である。パス条件において、「∧」は、かつ(AND)を意味する。発生エラーは、当該パスにおいてエラーが発生する場合に、その内容を示す情報である。例えば、1番目のパス条件は、「(a==0)∧(b>0)」である。この場合にはステップS23が実行されるが、ステップS23では、aによる除算が定義されている。したがって、0除算のエラーが発生する。また、5番目のパス条件における(b+1<=0)の項や、6番目のパス条件における(b+1>0)の項のように、当該パス中における変数の更新後の状態(ここでは、ステップS16の実行後の状態)に対する条件についても、パス条件に含まれる。なお、シンボリック実行では、パスごとに返り値の型も出力可能であるが、図3では、便宜上、省略されている。
このような出力情報に基づいて、ユーザは、例えば、図3のテスト入力の列に示されるように、テスト時における各変数への入力値を作成することができる。すなわち、それぞれのパスのパス条件を満たす値が、各変数に対する入力値とされる。その結果、プログラム内において実行可能なパスを網羅的にテストすることができる。
他方において、プログラムのテストには、スタブと呼ばれるプログラムが利用される場合が有る。スタブとは、テスト対象のプログラムから呼び出される本来のプログラム(以下、「オリジナルプログラム」という。)の代用プログラムである。例えば、テスト対象のプログラムとオリジナルプログラムとの開発が並行して行われる場合や、オリジナルプログラムを利用するにはデータベースの構築が必要とれる場合等において、スタブの利用は効果的である。
従来、オリジナルプログラムのインタフェース仕様に基づいて、スタブを自動生成する技術が有る。インタフェース仕様とは、引数及び返り値のデータ型をいう。
図4は、インタフェース仕様のみに基づくスタブの自動生成を説明するための図である。図4において左側は、インタフェース仕様の一例を示す。右側は、インタフェース仕様に基づいて自動生成されるスタブの一例を示す。インタフェース仕様に基づくスタブの自動生成技術においては、例えば、返り値のデータ型に従った値を返却するようにスタブが生成される。
特開平6−250884号公報 特開2012−68869号公報
しかしながら、インタフェース仕様に基づくスタブの自動生成技術では、オリジナルプログラムの内部ロジックは考慮されない。したがって、インタフェース仕様には現れない型の返り値をオリジナルプログラムが返却する可能性が有る場合、インタフェース仕様に基づくスタブの自動生成技術では、オリジナルプログラムの返り値の型の種類を網羅したスタブを生成するのは困難である。
図5は、インタフェース仕様に基づくスタブの自動生成技術では網羅できないオリジナルプログラムの返り値の型の一例を説明するための図である。図5において左側のツリー構造は、オリジナルメソッドがとりうるパスを示す。右側のツリー構造は、スタブメソッドがとりうるパスを示す。
左側のツリー構造によれば、オリジナルメソッドは、変数jの値が10000以下である場合、値がnullでないList型の変数arrayを返却するときと、nullを返却するときとが有ることが示されている。また、変数jの値が10000を超える場合は、Exception型の例外がスローされ、ログが記録されることが示されている。
右側のツリー構造によれば、スタブメソッドは、値がnullでないList型の変数arrayを返却する場合と、nullを返却する場合とが有ることが示されている。しかしながら、スタブメソッドには、Exception型の返り値を返却するパスは無い。インタフェース仕様では、例外のスロー可能性を知るのは困難なためである。
スタブの振る舞いは、スタブを利用するプログラムのテストの妥当性に影響する。特に、スタブを利用してシンボリック実行が行われる場合、スタブによるオリジナルプログラムの返り値の型の種類の網羅度は、シンボリック実行によって抽出されるパスの精度に大きく影響する。
そこで、一側面では、スタブによる返り値の型の種類の網羅度の向上を支援することを目的とする。
一つの案では、ソフトウェア変更プログラムは、第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行い、前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定し、前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する、処理をコンピュータに実行させる。
一態様によれば、スタブによる返り値の型の種類の網羅度の向上を支援することができる。
シンボリック実行の対象のプログラムの処理手順の一例を示す図である。 シンボリック実行を説明するための図である。 シンボリック実行の出力情報の一例を示す図である。 インタフェース仕様のみに基づくスタブの自動生成を説明するための図である。 インタフェース仕様に基づくスタブの自動生成技術では網羅できないオリジナルプログラムの返り値の型の一例を説明するための図である。 本発明の実施の形態におけるスタブ編集装置のハードウェア構成例を示す図である。 本発明の実施の形態におけるスタブ編集装置の機能構成例を示す図である。 スタブの編集処理の処理手順の一例を説明するためのフローチャートである。 スタブ及びオリジナルに対するシンボリック実行の出力情報の一例を示す図である。 コードテンプレートの一例を示す図である。 コードテンプレートにおいて必用な部分の一例を示す図である。 コードテンプレートからの必用な部分の抽出結果の一例を示す図である。 スタブに対するコードテンプレートの適用例を示す図である。 返り値の型の種類の追加後のスタブの一例を示す図である。
以下、図面に基づいて本発明の実施の形態を説明する。図6は、本発明の実施の形態におけるスタブ編集装置のハードウェア構成例を示す図である。図6のスタブ編集装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、インタフェース装置105、表示装置106、及び入力装置107等を有する。
スタブ編集装置10での処理を実現するプログラムは、記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってスタブ編集装置10に係る機能を実現する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。表示装置106はプログラムによるGUI(Graphical User Interface)等を表示する。入力装置107はキーボード及びマウス等であり、様々な操作指示を入力させるために用いられる。
なお、記録媒体101の一例としては、CD−ROM、DVDディスク、又はUSBメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置102の一例としては、HDD(Hard Disk Drive)又はフラッシュメモリ等が挙げられる。記録媒体101及び補助記憶装置102のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
なお、スタブ編集装置10は、表示装置106及び入力装置107を有していなくてもよい。例えば、スタブ編集装置10は、ネットワークを介してスタブ編集装置10に接続される端末から、遠隔操作されてもよい。
図7は、本発明の実施の形態におけるスタブ編集装置の機能構成例を示す図である。図7において、スタブ編集装置10は、シンボリック実行部11、比較部12、及びスタブ編集部13等を有する。これら各部は、スタブ編集装置10にインストールされたプログラムが、CPU104に実行させる処理により実現される。スタブ編集装置10は、また、オリジナル記憶部14、スタブ記憶部15、及びテンプレート記憶部16等を利用する。これら各記憶部は、補助記憶装置102、又はスタブ編集装置10にネットワークを介して接続される記憶装置等を用いて実現可能である。
オリジナル記憶部14は、オリジナルプログラムを記憶する。本実施の形態において、オリジナルプログラムとは、スタブによって代用されるプログラムをいう。以下、オリジナルプログラムを、単に「オリジナル」という。スタブ記憶部15は、スタブを記憶する。スタブとは、例えば、オリジナルのメソッド等を呼び出すプログラムのテスト等において、オリジナルの代わりに利用されるプログラムをいう。
シンボリック実行部11は、オリジナルと、当該オリジナルに対応するスタブとのそれぞれについて、シンボリック実行を行う。シンボリック実行とは、図1〜図3において説明したように、プログラム中の変数に具体的な値を代入せずに、変数を記号(シンボル値)として扱ってプログラムを実行することをいう。シンボリック実行によって、オリジナル及びスタブのそれぞれに関して、実行可能なパスごとに、パス条件及び返り値(戻り値)の型(データ型)等が出力される。
比較部12は、オリジナルに関するシンボリック実行の出力情報と、スタブに関するシンボリック実行の出力情報とを比較して、相違点の有無を判定する。例えば、比較部12は、オリジナルの返り値の型の種類と、スタブの返り値の型の種類との間における相違点の有無を判定する。
スタブ編集部13は、比較部12によって相違点が有ると判定された場合に、当該相違点を解消するように、スタブを編集(変更)する。スタブの編集には、テンプレート記憶部16に記憶されているコードテンプレートが利用される。コードテンプレートは、スタブの返り値の型の種類を増加させるために予め用意された雛形としてのソースコードである。
以下、スタブ編集装置10が実行する処理手順について説明する。図8は、スタブの編集処理の処理手順の一例を説明するためのフローチャートである。
ステップS101において、シンボリック実行部11は、スタブとオリジナルとのそれぞれについて、シンボリック実行を行う。処理対象のスタブは、スタブ記憶部15から取得される。処理対象のオリジナルは、オリジナル記憶部14から取得される。各記憶部から取得されるスタブ又はオリジナルは、例えば、ユーザによる入力に基づいて特定されてもよい。例えば、ユーザによって、スタブ及びオリジナルのファイル名が入力されてもよい。又は、スタブ及びオリジナルに対する共通の識別情報が入力されてもよい。
図9は、スタブ及びオリジナルに対するシンボリック実行の出力情報の一例を示す図である。図9において、スタブ20及びオリジナル30は、ステップS101においてシンボリック実行の対象とされる、メソッドAに関するスタブ又はオリジナルの一例である。
スタブ20は、オリジナル30に対するスタブである。スタブ20は、if22文とelse文24とを一組とする一つの分岐条件を含む。当該分岐条件が満たされる場合、記述21においてnullが代入された、List型の変数listの値(つまり、null)が、return文23によって返却される。当該分岐条件が満たされない場合、記述24においてnull以外の値が代入された変数listの値が、return文26によって返却される。なお、当該分岐条件は、変数_nullListの値がtrueである場合に満たされる。変数_nullListは、true又はfalseの値をとる、真偽値型(boolean型)の変数であり、例えば、メソッドAを呼び出すドライバプログラム内において、スタブ20内からも参照可能なように定義されている。以下、変数_nullListのように、分岐条件の判定に用いられる変数を、「シンボリック変数」という。シンボリック変数は、シンボリック実行時のパス条件を構成する変数であるともいえる。なお、スタブ20は、例えば、メソッドAのインタフェース仕様に基づいて、人手によって作成されてもよいし、公知の技術を利用して自動生成されてもよい。いずれの場合であっても、スタブ20は、変数_nullListの値に基づく分岐の分岐先ごとに、返り値を返却するように作成される。
このようなスタブ20に対して、ステップS101においてシンボリック実行が行われると、例えば、テーブルT20に示されるような情報が出力される。すなわち、シンボリック変数_nullListがtureである場合とそうでない場合との2通りのパス条件が出力され、パス条件ごとに、返り値の型がList型であることが出力される。
一方、オリジナル30は、if文32による一つの分岐条件を含む。当該分岐条件が満たされる場合、throw文33によってException型の例外がスローされ、当該分岐条件が満たされない場合、記述31においてメソッドxx.getList()の返り値が代入された、List型の変数listの値が、return文34によって返却される。なお、当該分岐条件は、メソッドxx.getMaxIndex()の返り値が10000を超える場合に満たされる。xxは、XXXXClass型の変数である。すなわち、オリジナル30においては、XXXXClassのgetMaxIndexメソッドの返り値が、シンボリック変数に相当する。
このようなオリジナル30に対して、ステップS101においてシンボリック実行が行われると、例えば、テーブルT30に示されるような情報が出力される。すなわち、XXXXClass.getMaxIndex()の返り値が10000以下である場合と、10000を超える場合との2通りのパス条件が出力される。また、XXXXClass.getMaxIndex()の返り値が10000以下である場合の返り値の型は、List型であり、10000を超える場合の返り値の型は、Exception型であることが出力される。
続いて、比較部12は、スタブ20に対するシンボリック実行の出力情報が示す返り値の型の種類と、オリジナル30に対するシンボリック実行の出力情報とを比較して、双方の間における相違点の有無を判定する(S102)。
例えば、テーブルT20において、返り値の型はList型の1種類である。一方、テーブルT30において、返り値の型の種類は、List型とException型との2種類である。すなわち、オリジナル30は、スタブ20によっては返却されないException型の返り値を返却する。したがって、スタブ20の返り値の型と、オリジナルの返り値の型との間には相違点が有ると判定される。
このように、本実施の形態では、スタブ20とオリジナル30との間における、返り値の型の種類の相違点を検出するために、シンボリック実行が利用される。
該当する相違点が無い場合(S102でNo)、スタブ20を修正する必用は無いため、図8の処理は終了する。該当する相違点が有る場合(S102でYes)、スタブ編集部13は、変数Nに対して、オリジナルの返り値の型の種類の数を代入し、変数Mに対して、スタブの返り値の種類の数を代入する(S103)。ここでは、オリジナル30は、2種類の型の返り値を返却するため、変数Nには2が代入される。また、スタブ20は、1種類の型の返り値を返却するため、変数Mには1が代入される。
続いて、スタブ編集部13は、オリジナル30には無い種類の型の返り値が、スタブ20の返り値の型の種類に含まれているか否かを判定する(S104)。例えば、オリジナルの返り値の型の種類が、A、B、及びCであり、スタブの返り値の型の種類が、A及びDである場合、Dについては、オリジナルには無い。このような場合、ステップS104の判定は、肯定的なものとなる。
オリジナル30には無い種類の型の返り値が、スタブ20の返り値の型の種類に含まれていない場合(S104でNo)、ステップS107に進む。本実施の形態では、該当する返り値は無いため、ステップS107に進む。オリジナル30には無い種類の型の返り値が、スタブ20の返り値の型の種類に含まれていない場合(S104でYes)、スタブ編集部13は、スタブ20から、該当する返り値を返却する分岐先に関する定義を削除する(S105)。この際、当該分岐先の削除によって、プログラミング言語の文法違反に該当する箇所が発生する場合は、当該箇所が修正される。例えば、先頭の分岐先に対応するif文が削除された場合、当該if文に対応するelse if文が、if文に変更される。続いて、スタブ編集部13は、ステップS105において削除された返り値の種類の数を、変数Mの値から減ずる(S106)。ここで減ぜられる値は、削除された分岐先の数ではなく、削除された分岐先において返却される返り値の型の種類の数である。例えば、2つの分岐先が削除され、各分岐先における返り値の型が同じであれば、変数Mからは1が減ぜられる。
続いて、スタブ編集部13は、変数Nの値が、変数Mの値より大きいか否かを判定する(S107)。すなわち、オリジナル30の返り値の型の種類の方が、スタブ20の返り値の型の種類より多いか否かが判定される。変数Nの値が、変数Mの値以下である場合(S107でNo)、図1の処理は終了する。この場合、ステップS105の実行により、スタブ20とオリジナル30との間における、返り値の型の種類の相違点は解消されたからである。
変数Nの値が変数Mの値より大きい場合(S107でYes)、スタブ編集部13は、スタブ20の返り値の型の種類を増加させるため、テンプレート記憶部16に記憶されているコードテンプレートから、必用な部分を抽出する(S108)。
図10は、コードテンプレートの一例を示す図である。図10において、コードテンプレート50は、n個のシンボル変数(シンボル変数1〜シンボル変数n)の値の組み合わせ分の分岐先を含む。シンボル変数の値の組み合わせとは、各シンボル変数の値が真である場合と偽である場合とに関して形成される組み合わせをいう。コードテンプレート50では、分岐先ごとに、相互に異なる返り値(返り値1〜返り値z)が返却されるように定義されている。なお、nの値は、例えば、テスト対象の各スタブに対応する各オリジナルの返り値の種類の数の最大値に基づいて決定されてもよい。例えば、テスト対象の各スタブに対応する各オリジナルの返り値の最大値が、5であれば、5個のシンボル変数(シンボル変数1〜シンボル変数5)の値の組み合わせ分の分岐先を含むコードテンプレートが作成されてもよい。
ステップ105における必用な部分とは、本実施の形態では、図11に示される部分に相当する。
図11は、コードテンプレートにおいて必用な部分の一例を示す図である。コードテンプレート50において必用な部分とは、シンボリック変数Nまでの組み合わせの部分である。本実施の形態において、変数Nの値(すなわち、オリジナル30の返り値の型の種類の数)は2である。したがって、シンボリック変数2までの組み合わせの部分(すなわち、破線Cで囲まれた部分)が必用な部分となる。但し、破線Lで囲まれた部分までで、シンボリック変数1及び2の値に関して全ての組み合わせが出現している。換言すれば、シンボリック変数1及び2の値の組み合わせに関して、破線Lで囲まれていない部分は、既に出現している組み合わせのいずれかと同じ組み合わせである。したがって、破線Lで囲まれていない部分は、不要な部分となる。すなわち、返り値の種類に関しては、返り値N+1番目まで(すなわち、返り値3まで)が必用な部分とされる。なお、コードテンプレート50は、シンボル変数1から順に、全ての値の組み合わせが先に出現するように作成されている。
上記より、ステップS108では、破線C及び破線Lによって囲まれた部分が抽出される。
図12は、コードテンプレートからの必用な部分の抽出結果の一例を示す図である。図12に示されるコードテンプレート60は、コードテンプレート50から、破線C及び破線Lによって囲まれた部分が抽出された結果である。
続いて、スタブ編集部13は、スタブ20に対してコードテンプレート60を適用して、オリジナル30に対して不足している返り値の型を返却するための分岐先をスタブ20に追加する(S109)。
図13は、スタブに対するコードテンプレートの適用例を示す図である。図13において、破線で囲まれた部分が、コードテンプレート60に基づいて追加された部分である。
まず、スタブ20における各分岐における各シンボリック変数に関する条件が、コードテンプレート60に対するシンボリック変数1から順に当てはめられる。本実施の形態では、当該条件は、スタブ20のif文22における「_nullList==null」である。当該条件が、コードテンプレート60のシンボリック変数1に対して当てはめられる。この際、シンボル変数1の否定(「!シンボル変数1」)に対しては、「_nullList==null」の否定である「_nullList!=null」が当てはめられる。また、スタブ20の各分岐先におけるreturn文が、分岐先の順に、コードテンプレート60のreturn文に当てはめられる。具体的には、スタブ20のreturn文23、return文26が、コードテンプレート60のreturn文61、return文62にそれぞれ当てはめられる。
当てはめの後、スタブ20と、当てはめが行われたコードテンプレート60との差分が、スタブ20に転記される。当該差分が、図13において破線で囲まれた部分である。スタブ20に対してコードテンプレート60が適用されることにより、スタブ20の分岐先が2つから3つに増加する。その結果、新たな返り値を返却するための分岐先が確保される。図13では、最後の分岐先が、新たな型の返り値を返却するための分岐先に相当する。なお、スタブ20に対するコードテンプレート60の適用は、上記以外の手順又は方法によって行われてもよい。
続いて、スタブ編集部13は、図13のスタブ20において、コードテンプレート60から転記されたreturn文に関して、式の値を、オリジナル30とスタブ20との相違点に係る型(Exception型)の返り値に置き換える(S110)。図13では、最後の分岐先のreturn文の式の値が、Exception型の返り値に置き換えられる。その結果、スタブ20の返り値の型の種類が増加し、返り値の型の種類に関して、オリジナル30との相違点を解消することができる。
図14は、返り値の型の種類の追加後のスタブの一例を示す図である。図14において、破線で囲まれた部分が、ステップS110において置換された部分である。すなわち、当該部分は、「返り値3」から「Exception()」に置換されている。
なお、スタブ20に対する分岐及び返り値の型の追加には、コードテンプレート50が利用されなくてもよい。例えば、スタブ編集部13のプログラムロジック内に、コードテンプレート50に相当する知識が組み込まれていてもよい。
上述したように、本実施の形態によれば、オリジナルとスタブとのそれぞれに対するシンボリック実行によって、それぞれの返り値の型の種類を自動的に得ることができ、双方の種類が相互に異なる場合に、異なる点を解消するためのスタブの変更を自動的に行うことができる。したがって、スタブによる返り値の型の種類の網羅度の向上を支援することができる。
なお、本実施の形態は、初版のオリジナルに対応させるためのスタブの修正のみならず、オリジナルがバージョンアップされた場合に、スタブによる返り値の型の種類について、バージョンアップ後のオリジナルに対する過不足を解消させることを目的として実施されてもよい。
なお、本実施の形態において、スタブ編集装置10は、ソフトウェア変更装置の一例である。シンボリック実行部11は、実行部の一例である。比較部12は、判定部の一例である。スタブ編集部13は、変更部の一例である。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行い、
前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定し、
前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する、
処理をコンピュータに実行させるソフトウェア変更プログラム。
(付記2)
前記変更する処理は、前記第一のプログラムは返却し、前記第二のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムに追加する、
ことを特徴とする付記1記載のソフトウェア変更プログラム。
(付記3)
前記変更する処理は、前記第二のプログラムは返却し、前記第一のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムから削除する、
ことを特徴とする付記1又は2記載のソフトウェア変更プログラム。
(付記4)
第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行う実行部と、
前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定する判定部と、
前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する変更部と、
を有することを特徴とするソフトウェア変更装置。
(付記5)
前記変更部は、前記第一のプログラムは返却し、前記第二のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムに追加する、
ことを特徴とする付記4記載のソフトウェア変更装置。
(付記6)
前記変更部は、前記第二のプログラムは返却し、前記第一のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムから削除する、
ことを特徴とする付記4又は5記載のソフトウェア変更装置。
(付記7)
第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行い、
前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定し、
前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する、
処理をコンピュータが実行するソフトウェア変更方法。
(付記8)
前記変更する処理は、前記第一のプログラムは返却し、前記第二のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムに追加する、
ことを特徴とする付記7記載のソフトウェア変更方法。
(付記9)
前記変更する処理は、前記第二のプログラムは返却し、前記第一のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムから削除する、
ことを特徴とする付記7又は8記載のソフトウェア変更方法。
10 スタブ編集装置
11 シンボリック実行部
12 比較部
13 スタブ編集部
14 オリジナル記憶部
15 スタブ記憶部
16 テンプレート記憶部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
106 表示装置
107 入力装置
B バス

Claims (5)

  1. 第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行い、
    前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定し、
    前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する、
    処理をコンピュータに実行させるソフトウェア変更プログラム。
  2. 前記変更する処理は、前記第一のプログラムは返却し、前記第二のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムに追加する、
    ことを特徴とする請求項1記載のソフトウェア変更プログラム。
  3. 前記変更する処理は、前記第二のプログラムは返却し、前記第一のプログラムは返却しない型の返り値を返却する分岐先を、前記第二のプログラムから削除する、
    ことを特徴とする請求項1又は2記載のソフトウェア変更プログラム。
  4. 第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行う実行部と、
    前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定する判定部と、
    前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する変更部と、
    を有することを特徴とするソフトウェア変更装置。
  5. 第一のプログラムと前記第一のプログラムに対する代用のプログラムである第二のプログラムとのそれぞれについてシンボリック実行を行い、
    前記シンボリック実行によって出力される、前記第一のプログラムによる返り値の型の種類と、前記第二のプログラムによる返り値の型の種類とについて、相違の有無を判定し、
    前記相違が有る場合に、前記第二のプログラムにおいて返り値を返却する分岐の定義を変更する、
    処理をコンピュータが実行するソフトウェア変更方法。
JP2014138721A 2014-07-04 2014-07-04 ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法 Expired - Fee Related JP6390217B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014138721A JP6390217B2 (ja) 2014-07-04 2014-07-04 ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014138721A JP6390217B2 (ja) 2014-07-04 2014-07-04 ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法

Publications (2)

Publication Number Publication Date
JP2016018253A true JP2016018253A (ja) 2016-02-01
JP6390217B2 JP6390217B2 (ja) 2018-09-19

Family

ID=55233467

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014138721A Expired - Fee Related JP6390217B2 (ja) 2014-07-04 2014-07-04 ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法

Country Status (1)

Country Link
JP (1) JP6390217B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022044376A1 (ja) * 2020-08-27 2022-03-03 株式会社日立製作所 不具合解析装置、プログラムおよび不具合解析方法
JP7549992B2 (ja) 2020-08-27 2024-09-12 株式会社日立製作所 不具合解析装置、プログラムおよび不具合解析方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030041288A1 (en) * 2001-08-10 2003-02-27 Adam Kolawa Method and system for dynamically invoking and/or checking conditions of a computer test program
JP2003296139A (ja) * 2002-03-29 2003-10-17 Denso Corp スタブ作成装置、及びプログラム
JP2008140263A (ja) * 2006-12-04 2008-06-19 Mitsubishi Electric Corp 単体試験支援装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030041288A1 (en) * 2001-08-10 2003-02-27 Adam Kolawa Method and system for dynamically invoking and/or checking conditions of a computer test program
JP2003296139A (ja) * 2002-03-29 2003-10-17 Denso Corp スタブ作成装置、及びプログラム
JP2008140263A (ja) * 2006-12-04 2008-06-19 Mitsubishi Electric Corp 単体試験支援装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
片山 朝子 他: "「業務システムを対象としたシンボリック実行による検証試行」", 情報処理学会 ソフトウェアエンジニアリングシンポジウム 2013, JPN6018004385, 2 September 2013 (2013-09-02), JP, pages 第1頁-第8頁 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022044376A1 (ja) * 2020-08-27 2022-03-03 株式会社日立製作所 不具合解析装置、プログラムおよび不具合解析方法
JP7549992B2 (ja) 2020-08-27 2024-09-12 株式会社日立製作所 不具合解析装置、プログラムおよび不具合解析方法

Also Published As

Publication number Publication date
JP6390217B2 (ja) 2018-09-19

Similar Documents

Publication Publication Date Title
US10885201B2 (en) Apparatus for quantifying security of open-source software package, and apparatus and method for optimizing open-source software package
US9740473B2 (en) Software and associated hardware regression and compatibility testing system
US8863087B2 (en) Comprehensively testing functionality of a computer program based on program code changes
JP6003699B2 (ja) テストデータ生成プログラム、方法及び装置
JP6268029B2 (ja) テストケース生成装置及びテストケース生成方法
CN110442371B (zh) 一种发布代码的方法、装置、介质及计算机设备
US9582270B2 (en) Effective feature location in large legacy systems
JP6245006B2 (ja) テストケース生成装置、方法、及びプログラム
WO2014050424A1 (ja) シグニチャ検証装置及びシグニチャ検証方法及びプログラム
JP6390217B2 (ja) ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法
US8918763B2 (en) Marked test script creation
JP7131119B2 (ja) ソースアプリケーションからのソースデータをターゲットアプリケーションのターゲットデータへとマージするためのシステムおよび方法
US20210349808A1 (en) Source quality check service
JP5595304B2 (ja) プログラム試験装置、プログラム試験装置のプログラム試験方法およびプログラム試験プログラム
JP6287093B2 (ja) ソフトウェア開発支援装置、ソフトウェア開発支援方法及びプログラム
JP5578625B2 (ja) プログラム分析装置、プログラム分析方法、及びプログラム
JP6818568B2 (ja) 通信装置、通信仕様差分抽出方法及び通信仕様差分抽出プログラム
KR20160025881A (ko) 공유 라이브러리 파일의 악성을 진단하기 위한 장치 및 방법
JP2021103354A (ja) プログラムの試験方法
JP6974707B2 (ja) テストプログラム、テスト装置及びテスト方法
JP5343840B2 (ja) プログラムの解析装置及び解析方法
US9678776B2 (en) Suppress newer facilities when simulating an older machine
JP2016173756A (ja) テストケース生成プログラム、テストケース生成方法およびテストケース生成装置
JP6556091B2 (ja) システム仕様検証支援装置及びシステム仕様検証支援方法
CN111143229A (zh) 软件测试方法及装置、计算机设备及计算机可读存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180227

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: 20180724

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180806

R150 Certificate of patent or registration of utility model

Ref document number: 6390217

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees