JPH11282722A - プログラム検証方法 - Google Patents

プログラム検証方法

Info

Publication number
JPH11282722A
JPH11282722A JP10087378A JP8737898A JPH11282722A JP H11282722 A JPH11282722 A JP H11282722A JP 10087378 A JP10087378 A JP 10087378A JP 8737898 A JP8737898 A JP 8737898A JP H11282722 A JPH11282722 A JP H11282722A
Authority
JP
Japan
Prior art keywords
program
test data
corrected
specification change
change
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
Application number
JP10087378A
Other languages
English (en)
Inventor
Mutsumi Komuro
睦 小室
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 Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co 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 Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP10087378A priority Critical patent/JPH11282722A/ja
Publication of JPH11282722A publication Critical patent/JPH11282722A/ja
Pending legal-status Critical Current

Links

Landscapes

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

Abstract

(57)【要約】 【課題】 プログラム構成が複雑で、ドキュメントもな
いソフトウェアシステムについて、必要修正箇所を効率
的に見い出し、さらに修正の良否、性能の劣化を効率的
に検証可能にすること。 【解決手段】 仕様変更によって修正が必要となる1つ
の修正対象プログラムに対し、変更後の仕様条件を満た
す第1のテストデータと、この第1のテストデータの処
理結果と同一処理結果となる第2のテストデータを入力
し、これらの第1、第2のテストデータに対する処理を
前記修正対象プログラムの所定分割単位でコンピュータ
に実行させ、第1、第2のテストデータに対する実行状
況、結果を比較し、その異同によって仕様変更に対する
修正対象プログラムの修正必要個所を所定分割単位で特
定する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソフトウェア開発
に伴うプログラム中のバグ検出やプログラムの正しさを
検証する際に使用するプログラム検証方法に関するもの
であり、特に、仕様変更に伴う修正必要箇所の自動検
出、修正したプログラムの修正の良否や性能の劣化など
のテストを支援するのに好適なプログラム検証方法に関
するものである。
【0002】
【従来の技術】従来において、プログラムが仕様通りに
作成されているかどうかの検証方法として各種の方法が
提唱されているが、仕様の記述に特別の技術が必要な
上、検証作業も簡単ではなく、工数も多くかかるため、
現実には用いられていない。
【0003】また、実際に出来上がったプログラムに対
するバグの抽出は十分な量のテストデータを流して不具
合がないかどうかを調べるやり方が一般的で、従来、行
われていた対策はバグ抽出の環境を整える方法か、バグ
が最初から入り込まないように設計時のレビューを徹底
するといったエンジニアリング的な解決策が主であり、
バグの系統的な発見方法はほとんど知られていなかっ
た。
【0004】一方、既に作成済みのプログラムの保守に
関してはプログラムを静的に解析してサブルーチン呼出
しや変数の依存関係を調べる手法が知られている。
【0005】
【発明が解決しようとする課題】ところで、西暦200
0年には現在稼働しているコンピュータシステムの多く
が正しく動作しなくなると言われている。これは、その
システムを構成するプログラム内部での年月処理が西暦
の下2桁のみを用いて行われていることに起因してい
る。すなわち、もともと2000年以降まで使用するこ
とを想定して設計されていないプログラムをその年月処
理の限界を越えて使用する状況が生じたことが原因であ
る。同様の状況は、16ビットコンピュータが32ビッ
トへと、あるいはさらに64ビットへと機能拡張される
ような時にも生じる。
【0006】このような場合、既に作成してから年月が
経っているため、もともとのシステムの設計者を捜すこ
とは困難である。また、度重なる顧客要求への対応から
システム全体のプログラムの構成も複雑化し、しかもシ
ステム構築に当てられる費用、日数が限られているため
ドキュメントも整備されていないのが現実である。した
がって、使用されているプログラムのソースを直接調べ
る必要がある。
【0007】そこで、上記のように、プログラムを静的
に解析してサブルーチン呼出しや変数の依存関係を調べ
る手法を用いて対象プログラムの修正必要箇所を探し出
すことが考えられる。
【0008】しかしながら、この手法では変数の依存関
係などの間接的な情報しか得られず、修正必要個所を直
接的に特定することができず、修正必要個所を特定する
までに長時間を要するという問題があった。
【0009】また、解析時の環境が実際に稼働する時の
環境と異なるため、解析結果が不必要に多過ぎたり、少
な過ぎたりするなど、適切な解析結果が得られないとい
う問題があった。
【0010】さらに、他システムへの呼出しが生じるよ
うな処理を含む場合、実際にどのような呼出しが生じる
かを決定できないため、他システムへの呼出しを行なう
ステップ以降の解析が進められなくなるといった問題点
があった。
【0011】さらに、最近の業務プログラムの開発では
CASEツールの使用が一般化し、簡易プログラム記述
から生成されたプログラムが用いられている場合があ
る。このような場合、使用しているプログラムのソース
コードは人間が直接読んで理解することが著しく困難で
ある。この場合、元の簡易プログラム記述とプログラム
作成に使用したのと同じバージョンのCASEツールが
入手できればよいが、多くの場合それは困難であり、難
解なソースコードを解読して解析を進めざるを得なくな
り、修正必要個所を特定するまでに長時間を要するとい
う問題があった。
【0012】一方、修正を必要とするプログラムは、既
に稼働中のシステムであるから、修正後でも最低限、現
在利用している範囲の機能はそのまま使用可能であるこ
とが必要である。
【0013】そこで、稼働中のシステムを最初に設計さ
れた限界を越えて引き続き使用したいという時に生じる
ソフトウェアの修正作業およびそれに引き続くテスト作
業を自動化あるいは支援することが可能な方法の実現が
強く望まれている。
【0014】本発明は、このような事情を解決すべくな
されたものであり、その目的は、プログラム構成が複雑
で、ドキュメントもないソフトウェアシステムについ
て、必要修正箇所を効率的に見い出し、さらに新たな仕
様通りに修正されたことを検証し、さらに、修正前と同
じ稼働条件ではもともとのシステムと同じ機能をそのま
ま使用できることを効率的に検証することができるプロ
グラム検証方法を提供することである。
【0015】
【課題を解決するための手段】上記目的を達成するため
に、本発明は、仕様変更によって修正が必要となる1つ
の修正対象プログラムに対し、変更後の仕様条件を満た
す第1のテストデータと、この第1のテストデータの処
理結果と同一処理結果となる第2のテストデータを入力
し、これらの第1、第2のテストデータに対する処理を
前記修正対象プログラムの所定分割単位でコンピュータ
に実行させ、第1、第2のテストデータに対する処理手
順を比較し、その異同によって仕様変更に対する修正対
象プログラムの修正必要個所を所定分割単位で特定する
ようにしたことを特徴とする。
【0016】あるいは、仕様変更によって修正が必要と
なる1つの修正対象プログラムに対し、変更後の仕様条
件を満たす第1のテストデータと、この第1のテストデ
ータの処理結果と同一処理結果となる第2のテストデー
タを入力し、これらの第1、第2のテストデータに対す
る処理を前記修正対象プログラムの所定分割単位でコン
ピュータに実行させ、指定した変数集合の指定した複数
のアドレスでの値の集合の組を作成し、それぞれの値集
合について予め与えておいた等式を満たすか否かを調べ
ることによって仕様変更に対する修正対象プログラムの
修正必要個所を所定分割単位で特定するようにしたこと
を特徴とする。
【0017】ここで、第1、第2のテストデータに対す
る修正対象プログラムの処理は、並列解釈可能な解釈手
段を用いて所定分割単位で並列解釈し、実行するように
構成することが可能である。この場合、所定分割単位の
最小単位は命令文の1行、あるいは1行をさらに細かく
分けたもので構成される。
【0018】
【発明の実施の形態】以下、図面を参照して本発明の実
施形態を詳細に説明する。本発明は次のような状況で実
施される。すなわち、既に利用実績のあるプログラムP
に対し、設計時に考えていた限界を越えて稼働させたい
というユーザ要求があり、プログラムPを修正して新し
いプログラムP'を作成したいというような状況であ
る。本発明の実施においては次の仮定を置く。
【0019】(仮定1) プログラムPを分割する仕方
Δ(P)が与えられており、修正はこの分割を保つ。すな
わち、P'に対しても分割Δ(P')が定義でき、Δ(P)と
Δ(P')の間には図1に示すように1:1の対応関係φ
がつくものとする。
【0020】もっとも簡単な場合は、Δはプログラムの
1行への分割であり、φは同じ行番号を持つ行同士を対
応させる関係である。
【0021】前述の場合、プログラムPと入力データD
を与えると、分割Δ(P)上の遷移系列が定まる。これを
δ(P,D)で表わすことにする。また、φによりΔ(P)
上の遷移系列の空間SとΔ(P')上の遷移系列の空間S'
との間の同型写像が存在する。これをΦとする。
【0022】(仮定2) 修正後プログラムP’の定義
域D(P')から修正前プログラムPの定義域D(P)への
写像ψが存在し、図1の図式が可換となる。これは式で
書けば、δ(P’,T)=Φ(δ(P,φ(T)))がすべての
T∈D(P')に対して成り立つということである。
【0023】例えば、いわゆる「2000年問題」の場
合には19XX年代(XX=00〜99)のデータがD
(P)であり、一方D(P’)は2000年以降のデータも
含む。φは2000年以降のデータから日付をシフトし
て19XX年代のデータを得る写像である。このこと
は、例えば2000年の9月1日を基点として延べ日数
を用いて、2001年の5月1日時点の利息計算を行う
というような場合には、1998年9月1日を基点とし
て1999年5月1日時点の利息計算を行うようにシフ
トすればよいことを意味する。
【0024】このような前提のもとで、既に利用実績の
あるプログラムPに対し、設計時に考えていた限界を越
えて稼働させたいというユーザ要求があり、プログラム
Pを修正して新しいプログラムP'を作成したいとす
る。このような場合、プログラムPの検証を行いたい適
当な分割Δ(P)を選び、仕様変更後のテストデータTに
ついて、修正前プログラムPが正しく動く限界内のデー
タT0で、P(T0)とP'(T)とが同じ処理手順を与え
るものを選定し、修正前のプログラムPに入力し、処理
を実行させる。前記仮定2より、例えばT0=φ(T)
とすれば、このようにすることが可能である。ここで、
P(T)を考えると修正前プログラムPにはまだ修正作業
を施していないので正しくは動かないはずである。そこ
で、遷移系列δ(P,T0),δ(P,T)を比較す
る。分割Δ(P)が適切に選ばれていれば、遷移系列δ
(P,T0),δ(P,T)に違いが生じる。その違い
の生じた分割Δ∈Δ(P)に要修正箇所がある筈である。
分割Δ(P)に従って実行する場合、プログラムP,P'
の1分割上の実行を並列に行い、同期をとって比較して
ゆくことが望ましい。本発明は、基本的にはこのように
して修正必要個所を検出する。
【0025】修正必要個所が判明し、必要な修正を実施
したならば、修正前のプログラムPに対しテストデータ
T0を与え、さらに修正後のプログラムP'に対しテス
トデータTを与え、これらのプログラムP,P'を分割
単位Δで実行させ、その遷移系列δ(P,T0),δ
(P,T)を比較する。すると、修正作業が正常に行な
われているならば、2つのプログラムP,P'の処理手
順は同一になる筈であるから、遷移系列が同一であれば
修正正常、同一でなければ、修正不良として検出する。
【0026】さらに、必要な修正の良否を確認したなら
ば、修正前のプログラムPおよび修正後のプログラム
P'に対し、同じテストデータT0を与え、その遷移系
列δ(P,T0),δ(P,T)を比較する。この結
果、処理手順が同じでも、その処理手順を導き出すまで
の時間が長くなっていれば、修正後のプログラムP'の
性能は明らかに劣化しているものとして検出する。逆
に、処理手順を導き出すまでの時間が短くなっていれ
ば、性能が向上しているものとして検出する。
【0027】図2は、本発明を実施するための最も基本
的なシステム構成を示した図であり、2つのプログラム
を所定分割単位(例えば、1行単位)で交互に実行可能
な解釈器202をコンピュータ(図示せず)内部に用意
しておき、修正対象のプログラムP201に対し、変更
後の仕様条件を満たすテストデータTと、このテストデ
ータTと同一処理結果となるテストデータT0を入力
し、処理を実行させ、その処理手順を比較することによ
り、修正前プログラムP201の修正必要個所を検出
し、修正必要個所メッセージ203を出力するという構
成である。
【0028】解釈器202は、例えば図4に示すように
入力器2021、評価器2022、比較器2023、メ
ッセージ出力器2024から構成され、評価器2022
がプログラムP201の命令文を所定分割単位で解釈
し、入力器2021から2つのテストデータT0,Tを
読み込み、このテストデータT0,Tに対する処理を実
行させる。プログラムP201の命令文を所定分割単位
を例えば、1行単位とした場合、評価器2022がプロ
グラムP201の命令文を1行単位で解釈し、入力器2
021から2つのテストデータT0,Tを交互に読み込
み、このテストデータT0,Tに対する処理を1行単位
で実行させる。そして、その実行手順を比較する。処理
手順が同一ならば、その行は修正不要として検出する。
しかし、処理手順が同一でなければ、異なる動作をして
いることになるので、その異なる手順を与える行は新し
い仕様条件を満たすことができず、修正を必要とする個
所として検出し、メッセージ出力器2024から修正必
要個所メッセージ203を出力させる。このようにし
て、Φ(δ(P,T0)),δ(P,T)の比較が行わ
れる。
【0029】ここで、本発明の方法をさらに一般化して
考えると次の通りになる。いま、既に利用実績のあるプ
ログラムPに対し、設計時に考えていた限界を越えて稼
働させたいというユーザ要求があり、そのプログラムP
を修正して新しいプログラムP'を作成したいとする。
プログラムPの稼働限界を越えたデータをTとすると、
その処理手順P(T)は正しく動作しない可能性がある
ため、プログラムPを修正したプログラムP'を作成す
る必要がある。そこで、P(ψ(T))を考えると、前
述の仮定(2)からδ(P',T)=Φ(δ(P,φ(T)))
であるから、P(φ(T))は分割Δ上の遷移系列のみに着
目するなら、P'(T)をシミュレートしている。
【0030】そこで、P(T)とP(φ(T))の動作を比
較し、δ(P,T)=δ(P,φ(T))が成立しているかど
うかを調べる。これは図3に示すように図2の解釈器2
02を用いて遷移系列δ(P,T)とδ(P,ψ(T))を順
に比較していくことで実現される。
【0031】すなわち、評価器2022は、プログラム
Pのカレント評価位置L1とカレント評価環境ENV1
およびプログラムP'のカレント評価位置L2とカレン
ト評価環境ENV2を保持している。評価器2022
は、プログラムPにデータT0を環境ENV1で与えた
ときの位置L1での実行結果と、プログラムP'にデー
タTを環境ENV2で与えたときの位置L2での実行結
果とをそれぞれ新しい環境と新しい評価位置の組(EN
V1,L1),(ENV2,L2)として出力する(ス
テップ301)。このようにして新しい評価位置が決定
される。
【0032】比較器2023は、L1とL2とを比較し
(ステップ302)、L1とL2の位置はΔ(P)上で
同じ分割単位に属するか否かを判定する。すなわち、L
1=φ(L2)か否かを判定する。
【0033】L1=φ(L2)でない場合、P(T)と
P(ψ(T))の遷移系列が異なっていることになるため、
この部分の分割単位L1,L2を修正必要個所としてそ
のカレント評価環境の情報ENV1,ENV2と共にメ
ッセージ出力する(ステップ303)。しかし、L1=
φ(L2)であった場合、P(T)とP(φ(T))の遷移
系列は同じであることになるため、修正不要の個所とし
て判定し、入力器2021から次の分割単位の文を入力
させる。以上の動作をプログラムPのファイル終了コー
ドEOFが見つかるまで(ステップ304)、繰り返し
実行する。
【0034】本発明の検証方法により処理手順P(T
0),P(T)を比較する場合、単に処理手順を比較する
だけでなく、次に実行されるべき分割単位(例えば行番
号)や経路、指定した変数集合の指定した複数のアドレ
スでの値の集合の組などを含めて比較することにより、
さらに高度の検証が可能になる。
【0035】1行の文を解釈した結果である次に実行さ
れるべき分割単位(例えば行番号)を採用した場合、次
に実行されるべき分割単位が一致しない場合には修正必
要個所として検出するという構成になる。また、指定し
た変数集合の指定した複数のアドレスでの値の集合の組
を採用した場合、指定した変数集合の指定した複数のア
ドレスでの値の集合の組を作成し、それぞれの値集合に
ついて予め与えておいた等式を満たすか否かを調べるこ
とによって仕様変更に対する修正対象プログラムPの修
正必要個所を検出するという構成になる。
【0036】なお、2つの文を並列処理可能な解釈器2
02を用いて2つのテストデータT0,Tに対する処理
を交互に実行させているが、解釈器202に代えて、同
一機能の解釈器を内蔵した2つのコンピュータを用意
し、この2つのコンピュータに修正対象の同一プログラ
ムPを同期して実行させ、一方のコンピュータに入力し
たテストデータT0に対する処理手順と他方のコンピュ
ータに入力したテストデータTに対する処理手順とを第
3のコンピュータで比較し、その異同によって仕様変更
に対する修正必要個所を検出するように構成することが
できる。
【0037】次に、以上のようにして検出した修正前プ
ログラムPの修正必要個所を仕様変更後の条件に合うよ
うに修正し、その修正したプログラムP’の修正が正し
く行なわれているかどうかを検証する方法について説明
する。
【0038】図5(a)は、修正の正しさを検証するた
めの基本的なシステム構成を示したものであり、図2の
場合と同様の解釈器202をコンピュータ内部に用意し
ておき、さらにそのコンピュータ内には修正前プログラ
ムP501と修正後プログラムP’502を実行可能状
態で格納しておく。この構成において、修正後プログラ
ムP’502に対して変更後の仕様条件を満たすテスト
データTを入力すると共に、修正前プログラムPに対し
ては、このテストデータTと同一処理結果となるテスト
データT0を入力し、処理を所定分割単位で並列に実行
させ、その処理手順の比較によりδ(P’,T)=Φ(δ
(P,ψ(T)))であるか否かを比較し(例えば、次に実行
すべき行番号が同じであるか否かを比較し)、処理手順
が等しくなければ、その所定分割単位における修正は不
良であるとして検出し、修正不良個所メッセージ503
を出力するという構成である。
【0039】図6は、この場合の検証方法手順を示した
フローチャートであり、評価器2022は、プログラム
Pのカレント評価位置L1とカレント評価環境ENV1
およびプログラムP'のカレント評価位置L2とカレン
ト評価環境ENV2を保持している。評価器2022
は、プログラムPにデータT0を環境ENV1で与えた
ときの位置L1での実行結果と、プログラムP'にデー
タTを環境ENV2で与えたときの位置L2での実行結
果とをそれぞれ新しい環境と新しい評価位置の組(EN
V1,L1),(ENV2,L2)として出力する(ス
テップ601)。このようにして新しい評価位置が決定
される。
【0040】比較器2023は、L1とL2とを比較し
(ステップ602)、L1とL2の位置はΔ(P)上で
同じ分割単位に属するか否かを判定する。すなわち、L
1=φ(L2)か否かを判定する。
【0041】L1=φ(L2)でない場合、修正前プロ
グラムP501と修正後プログラムP'502の動作が
異なっていることになるため、修正後プログラムP'5
02の行L2の修正は正しくないものとしてそのカレン
ト評価環境情報ENV1,ENV2と共にメッセージ出
力する(ステップ603)。しかし、L1=φ(L2)
であった場合、P(T)とP(φ(T))の遷移系列は同じ
であることになるため、修正不要の個所として判定し、
入力器2021から次の分割単位の文を入力させる。以
上の動作をプログラムPのファイル終了コードEOFが
見つかるまで(ステップ604)、繰り返し実行する。
【0042】これにより、修正後プログラムP’502
の修正が正しく行なわれているか否かを自動的に検証す
ることができる。
【0043】ここで、2つの文を解釈器202を用いて
2つのテストデータT0,Tに対する処理を交互に実行
させているが、図5(b)に示すように、解釈器202
に代えて、同一機能の解釈器を内蔵した2つのコンピュ
ータ504,505を用意し、この2つのコンピュータ
504,505に修正前プログラムP501と修正後プ
ログラムP’502を組み込み、これらのプログラムP
501およびP’502を第3のコンピュータ506の
同期制御部507の同期制御動作によって同期して実行
させ、一方のコンピュータ504に入力したテストデー
タT0に対する処理手順と他方のコンピュータ505に
入力したテストデータTに対する処理手順とを第3のコ
ンピュータ506で比較し、その異同によって仕様変更
に対する修正が正しく行なわれているかどうかを検証
し、仕様変更に対する修正が正しく行なわれていなけれ
ば、修正不良個所メッセージ503を出力するように構
成することができる。
【0044】このように、δ(P',T)=Φ(δ(P,ψ
(T)))∈D(P’)が成立しているか否かにより、仕様
変更に対する修正が正しく行なわれているかどうかを検
証することができる。
【0045】また、修正の際に、修正すべきでない個所
を誤って変更したためにプログラムP’が劣化する可能
性がある。いま、T∈D(P)を任意にとると、この範
囲では修正前プログラムPも修正後プログラムP’も同
じ動作を示すべきである。すなわち、δ(P',T)=Φ
(δ(P,T))が成立しなければならない。これは、図7
に示すような手順を実行することにより、修正後プログ
ラムP’が劣化しているかどうかを検証することができ
る。
【0046】図7において、評価器2022は、プログ
ラムPのカレント評価位置L1とカレント評価環境EN
V1およびプログラムP'のカレント評価位置L2とカ
レント評価環境ENV2を保持している。評価器202
2は、プログラムPにデータTを環境ENV1で与えた
ときの位置L1での実行結果と、プログラムP'にデー
タTを環境ENV2で与えたときの位置L2での実行結
果とをそれぞれ新しい環境と新しい評価位置の組(EN
V1,L1),(ENV2,L2)として出力する(ス
テップ701)。このようにして新しい評価位置が決定
される。
【0047】比較器2023は、L1とL2とを比較し
(ステップ702)、L1=φ(L2)か否かを判定す
る。
【0048】L1=φ(L2)でない場合、P(T)と
P’(T)の遷移系列が異なっていることになるため、こ
の部分の分割単位L1,L2を性能劣化個所としてその
カレント環境の情報ENV1,ENV2と共にメッセー
ジ出力する(ステップ703)。しかし、L1=φ(L
2)であった場合、P(T)とP’(T)の遷移系列は同
じであることになるため、正常個所として判定し、入力
器2021から次の分割単位の文を入力させる。以上の
動作をプログラムP,P’のファイル終了コードEOF
が見つかるまで(ステップ704)、繰り返し実行す
る。
【0049】ここで、従来においても、プログラムを稼
働させて得た最終結果を比較する形での劣化防止テスト
は行われていたが、その方法では、結果には直接現れな
い処理途中の段階での動作の違いを検出できない。
【0050】しかし、本発明の方法によれば、処理途中
の段階の動作の相違を検出しているため、高い検出能力
で劣化の有無を検出することができる。
【0051】この劣化検出方法の拡張として、Φを通し
た動作の対応チェック時に付加的なチェックを行うこと
もできる。図8は、予め指定した変数集合{V1,V
2,...,Vn}の値の比較を考慮した場合の処理手順を
示すフローチャートである。
【0052】図8において、評価器2022は、プログ
ラムPのカレント評価位置L1とカレント評価環境EN
V1およびプログラムP'のカレント評価位置L2とカ
レント評価環境ENV2を保持している。評価器202
2は、プログラムPにデータT0を環境ENV1で与え
たときの位置L1での実行結果と、プログラムP'にデ
ータφ(T)を環境ENV2で与えたときの位置L2で
の実行結果とをそれぞれ新しい環境と新しい評価位置の
組(ENV1,L1),(ENV2,L2)として出力
する(ステップ801)。このようにして新しい評価位
置が決定される。
【0053】比較器2023は、L1とL2とを比較し
(ステップ802)、L1=φ(L2)か否かを判定す
る。
【0054】L1=φ(L2)でない場合、P(T)と
P’(ψ(T))の遷移系列が異なっていることになるた
め、この部分の分割単位L1,L2を性能劣化個所とし
てそのカレント環境の情報ENV1,ENV2と共にメ
ッセージ出力する(ステップ803)。しかし、L1=
φ(L2)であった場合、P(T)とP’(ψ(T))の遷
移系列は同じであることになるため、正常個所として判
定する。
【0055】次に、変数i=1とし(ステップ80
4)、L1の位置における変数ViとL2の位置におけ
る変数Viを評価し、その評価結果の「評価(Vi,E
NV1)」、「評価(Vi,ENV2)」を比較器20
23に渡す。比較器2023は、「評価(Vi,ENV
1)」と「評価(Vi,ENV2)」とを比較し、両者
が等しいかどうかを、i>nになるまでiを1ずつ更新
しながら判定し、等しくない場合は、そのL1の位置に
おける変数ViとL2の位置における変数Viとが不一
致であることを示すメッセージ「L1,L2,ENV
1,ENV2」を出力する(ステップ805,806,
807,808)。すなわち、L1の位置における変数
集合V1〜VnとL2の位置における変数集合V1〜V
nとが不一致であることを示すメッセージを出力する。
【0056】i>nに達したならば、入力器2021か
ら次の分割単位の文を入力させる。以上の動作をプログ
ラムP,P’のファイル終了コードEOFが見つかるま
で(ステップ809)、繰り返し実行する。
【0057】このように、プログラムP,P’の処理途
中における変数集合の値が所定の関係を満たすかどうか
をも付加して調べることにより、実際に出力される変数
の値が変化していることによる修正後プログラムP’の
劣化を検出することができる。
【0058】このような処理途中における変数集合の値
が所定の関係を満たすかどうかをも付加して調べる方法
は、劣化検出のみだけでなく、修正が正しく行なわれて
いるかどうかを検証する方法および修正必要個所を検出
する方法にも全く同様に適用することができる。
【0059】また、変数集合の値を比較するのに代え
て、実行経路と順序の相違を検出し、修正前プログラム
Pの修正必要個所の検出、修正後プログラムP’の修正
の良否および性能劣化の検出を行なうようにしてもよ
い。また、実行経路と順序の相違に加え、各実行経路に
おける変数の値やループ回数などの値の相違を検出し、
修正前プログラムPの修正必要個所の検出、修正後プロ
グラムP’の修正の良否および性能劣化の検出を行なう
ようにしてもよい。
【0060】すなわち、仕様変更によって修正が必要と
なる修正前の修正対象プログラムに対し、変更前の仕様
に基づく第1のテストデータを与えてコンピュータに実
行させ、プログラム中のどの経路をどの順序で通ったか
を予め調べておき、仕様変更後の第2のテストデータを
与えて実行させたときの経路および順序の変化を比較す
ることによって仕様変更に対する修正対象プログラムの
修正必要箇所を特定するようにしてもよい。
【0061】また、仕様変更によって修正が必要となる
修正前の修正対象プログラムに対し、変更前の仕様に基
づく第1のテストデータを与えてコンピュータに実行さ
せ、プログラム中のどの経路をどの順序で通ったかを予
め調べておき、同じ計算手順になるべき仕様変更後の第
2のテストデータを修正後のプログラムに与えて実行さ
せたときの経路および順序の変化を比較することによっ
て仕様変更に伴う修正後プログラムの修正の良否を検証
するようにしてもよい。
【0062】また、仕様変更によって修正が必要となる
修正前の修正対象プログラムに対し、変更前の仕様に基
づく第1のテストデータを与えてコンピュータに実行さ
せ、プログラム中のどの経路をどの順序で通ったかを予
め調べておき、仕様変更の影響を受けない範囲に属する
第2のテストデータを修正後のプログラムに与えて実行
させたときの経路および順序の変化を比較することによ
って仕様変更に伴う修正後プログラムの劣化の有無を検
証するようにしてもよい。
【0063】また、仕様変更によって修正が必要となる
修正前の修正対象プログラムに対し、変更前の仕様に基
づく第1のテストデータを与えてコンピュータに実行さ
せ、プログラム中のどの経路をどの順序で通ったかを予
め調べておき、仕様変更後の第2のテストデータを与え
て実行させたときの途中の変数の値、ループの回数等の
途中経過を示す値が仕様変更前のものから予め定めた限
界範囲以内に収まっているか否かを比較することによっ
て仕様変更に対する修正対象プログラムの修正必要箇所
を特定するようにしてもよい。
【0064】また、仕様変更によって修正が必要となる
修正前の修正対象プログラムに対し、変更前の仕様に基
づく第1のテストデータを与えてコンピュータに実行さ
せ、プログラム中のどの経路をどの順序で通ったかを予
め調べておき、同じ計算手順になるべき仕様変更後の第
2のテストデータを修正後のプログラムに与えて実行さ
せたときの途中の変数の値、ループの回数等の途中経過
を示す値が仕様変更前のものから予め定めた限界範囲以
内に収まっているか否かを比較することによって仕様変
更に伴う修正後プログラムの修正の良否を検証するよう
にしてもよい。
【0065】さらに、仕様変更によって修正が必要とな
る修正前の修正対象プログラムに対し、変更前の仕様に
基づく複数のテストデータを修正前のプログラムに与え
てコンピュータに実行させ、プログラム中のどの経路を
どの順序で通ったかを予め調べておき、仕様変更の影響
を受けない範囲に属する第2のテストデータを修正後の
プログラムに与えて実行させたときの途中の変数の値、
ループの回数等の途中経過を示す値が仕様変更前のもの
から予め定めた限界範囲以内に収まっているか否かを比
較することによって仕様変更に伴う修正後のプログラム
の劣化の有無を検証するようにしてもよい。
【0066】このような実行途中経過の情報を用いるこ
とにより、修正後プログラムPによる実行結果の全体が
既にわかっているので、指定した繰り返し制御文での繰
り返しの回数の比が2:1の範囲に収まっているかどう
かなど、緩いチェックや経路、実行順序全体を通した大
域的比較が可能となる。
【0067】また、他のシステムへの呼出しが生じるよ
うな処理を含むプログラムについては、次のようにして
修正の良否および性能劣化を検出することができる。
【0068】すなわち、仕様変更によって修正が必要と
なる修正前の修正対象プログラムに対し、変更前の仕様
に基づく第1のテストデータをに与えてコンピュータに
実行させ、データベースへの検索、他システムの呼出
し、ユーザ入力のいずれかを含む外部とのデータ入出力
の履歴を収集し、これらをスタブ化することで同じ計算
手順になるべき仕様変更後の第2のテストデータを修正
後のプログラムに与えて実行させたときの動作の比較を
検証用の環境で実現し、仕様変更に伴う修正後プログラ
ムの修正の良否を検証する。
【0069】また、仕様変更によって修正が必要となる
修正前の修正対象プログラムに対し、変更前の仕様に基
づく第1のテストデータを与えてコンピュータに実行さ
せ、データベースへの検索、他システムの呼出し、ユー
ザ入力のいずれかを含む外部とのデータ入出力の履歴を
収集し、これらをスタブ化することで仕様変更の影響を
受けない範囲に属する第2のテストデータを修正後のプ
ログラムに与えて実行させたときの動作の比較を検証用
の環境で実現し、仕様変更に伴う修正後プログラムの劣
化の有無を検証する。
【0070】このようにすることによって、他のシステ
ムへの呼出しが生じるような処理を含むプログラムにつ
いても修正の良否および性能劣化を確実に検出すること
ができる。
【0071】ところで、解釈器202は、図9に示すよ
うに専用の「マクロ命令replace」901による指定に
よって修正後プログラムP,修正前プログラムP’の両
方または一方を解釈して実行するように構成され、検証
時には2つのプログラムの並列解釈を可能にし、修正後
プログラムP’の顧客納入時には修正後プログラムP’
のみの解釈を可能にしている。
【0072】なお、以上説明した検証方法を直接適用し
ないものについては、外部仕様から、あるいは稼働シス
テムに実際データを流すことによりスタブを作成し、検
証システムではこのスタブを用いて検証を行うようにす
る。
【0073】
【発明の効果】以上の説明から明らかなように本発明に
よれば、プログラム構成が複雑で、ドキュメントもない
内部構成が不明のプログラムについて、必要修正箇所を
効率的に特定することができる。
【0074】また、新たな仕様通りに修正されたことを
効率的に検証し、さらに、修正前と同じ稼働条件ではも
ともとのシステムと同じ機能をそのまま使用できること
を効率的に検証することができる。
【0075】さらに、修正後プログラムの性能が修正前
より劣化しているか否かを効率的に検証することができ
る。
【0076】従って、「2000年問題」に代表される
ように、稼動限界を越えて使用するプログラムにおい
て、その修正を必要とする個所を特定し、さらに修正し
たプログラムの良否、性能の劣化を検証する場合に適用
することにより、極めて有効な効果が得られる。
【図面の簡単な説明】
【図1】本発明の前提となる修正前プログラムと修正後
プログラムとの関係を示す図である。
【図2】本発明の基本的なシステム構成の例を示す図で
ある。
【図3】修正必要個所を特定する手順の一例を示すフロ
ーチャートである。
【図4】解釈器に内部構成の一例を示す図である。
【図5】修正後プログラムの修正の良否を検出するシス
テム構成の一例を示す図である。
【図6】修正後プログラムの修正の良否を検出する手順
の一例を示すフローチャートである。
【図7】修正後プログラムの性能の劣化を検出する手順
の一例を示すフローチャートである。
【図8】修正後プログラムの性能の劣化を変数集合の値
も含めて検出する手順の一例を示すフローチャートであ
る。
【図9】修正後プログラムに実装する専用のマクロ命令
の例を示す図である。
【符号の説明】
201…修正前プログラム、202…解釈器、203…
修正必要個所メッセージ、501…修正前プログラム、
502…修正後プログラム、503…修正不良個所メッ
セージ、504,505…コンピュータ、901…マク
ロ命令。

Claims (17)

    【特許請求の範囲】
  1. 【請求項1】 仕様変更によって修正が必要となる1つ
    の修正対象プログラムに対し、変更後の仕様条件を満た
    す第1のテストデータと、この第1のテストデータの処
    理結果と同一処理結果となる第2のテストデータを入力
    し、これらの第1、第2のテストデータに対する処理を
    前記修正対象プログラムの所定分割単位でコンピュータ
    に実行させ、第1、第2のテストデータに対する処理手
    順を比較し、その異同によって仕様変更に対する修正対
    象プログラムの修正必要個所を所定分割単位で特定する
    ことを特徴とするプログラム検証方法。
  2. 【請求項2】 仕様変更によって修正が必要となる1つ
    の修正対象プログラムに対し、変更後の仕様条件を満た
    す第1のテストデータと、この第1のテストデータの処
    理結果と同一処理結果となる第2のテストデータを入力
    し、これらの第1、第2のテストデータに対する処理を
    前記修正対象プログラムの所定分割単位でコンピュータ
    に実行させ、指定した変数集合の指定した複数のアドレ
    スでの値の集合の組を作成し、それぞれの値集合につい
    て予め与えておいた等式を満たすか否かを調べることに
    よって仕様変更に対する修正対象プログラムの修正必要
    個所を所定分割単位で特定することを特徴とするプログ
    ラム検証方法。
  3. 【請求項3】 第1、第2のテストデータに対する修正
    対象プログラムの処理を並列解釈可能な解釈手段を用い
    て所定分割単位で並列解釈し、実行することを特徴とす
    る請求項1または2記載のプログラム検証方法。
  4. 【請求項4】 仕様変更前の第1のプログラムと仕様変
    更後の第2のプログラムに対し、仕様変更の影響を受け
    ない範囲に属する同一のデータを与えて所定分割単位で
    コンピュータに実行させ、その処理手順を比較し、その
    異同により仕様変更に伴う第2のプログラムの性能を検
    証することを特徴とするプログラム検証方法。
  5. 【請求項5】 仕様変更前の第1のプログラムと仕様変
    更後の第2のプログラムに対し、仕様変更の影響を受け
    ない範囲に属する同一のデータを与えて所定分割単位で
    コンピュータに実行させ、指定した変数集合の指定した
    複数のアドレスでの値の集合の組を作成し、それぞれの
    値集合について予め与えておいた等式を満たすか否かを
    調べることによって仕様変更に伴う第2のプログラムの
    性能を検証することを特徴とするプログラム検証方法。
  6. 【請求項6】 仕様変更前の第1のプログラムと仕様変
    更後の第2のプログラムに対し、同じ計算手順となるべ
    きテストデータを入力し、このテストデータに対する処
    理を第1、第2のプログラムの所定分割単位でコンピュ
    ータに実行させ、その処理手順を比較し、その異同によ
    って仕様変更後の第2のプログラムの修正の良否を検証
    することを特徴とするプログラム検証方法。
  7. 【請求項7】 仕様変更前の第1のプログラムと仕様変
    更後の第2のプログラムに対し、同じ計算手順となるべ
    きテストデータを入力し、このテストデータに対する処
    理を第1、第2のプログラムの所定分割単位でコンピュ
    ータに実行させ、指定した変数集合の指定した複数のア
    ドレスでの値の集合の組を作成し、それぞれの値集合に
    ついて予め与えておいた等式を満たすか否かを調べるこ
    とによって仕様変更後の第2のプログラムの修正の良否
    を検証することを特徴とするプログラム検証方法。
  8. 【請求項8】 第1、第2のプログラムの処理を並列解
    釈可能な解釈手段を用いて所定分割単位で並列解釈し、
    実行することを特徴とする請求項4ないし7記載のいず
    れかのプログラム検証方法。
  9. 【請求項9】 仕様変更によって修正が必要となる修正
    前の修正対象プログラムに対し、変更前の仕様に基づく
    第1のテストデータを与えてコンピュータに実行させ、
    プログラム中のどの経路をどの順序で通ったかを予め調
    べておき、仕様変更後の第2のテストデータを与えて実
    行させたときの経路および順序の変化を比較することに
    よって仕様変更に対する修正対象プログラムの修正必要
    箇所を特定することを特徴とするプログラム検証方法。
  10. 【請求項10】 仕様変更によって修正が必要となる修
    正前の修正対象プログラムに対し、変更前の仕様に基づ
    く第1のテストデータを与えてコンピュータに実行さ
    せ、プログラム中のどの経路をどの順序で通ったかを予
    め調べておき、同じ計算手順になるべき仕様変更後の第
    2のテストデータを修正後のプログラムに与えて実行さ
    せたときの経路および順序の変化を比較することによっ
    て仕様変更に伴う修正後プログラムの修正の良否を検証
    することを特徴とするプログラム検証方法。
  11. 【請求項11】 仕様変更によって修正が必要となる修
    正前の修正対象プログラムに対し、変更前の仕様に基づ
    く第1のテストデータを与えてコンピュータに実行さ
    せ、プログラム中のどの経路をどの順序で通ったかを予
    め調べておき、仕様変更の影響を受けない範囲に属する
    第2のテストデータを修正後のプログラムに与えて実行
    させたときの経路および順序の変化を比較することによ
    って仕様変更に伴う修正後プログラムの性能を検証する
    ことを特徴とするプログラム検証方法。
  12. 【請求項12】 仕様変更によって修正が必要となる修
    正前の修正対象プログラムに対し、変更前の仕様に基づ
    く第1のテストデータを与えてコンピュータに実行さ
    せ、プログラム中のどの経路をどの順序で通ったかを予
    め調べておき、仕様変更後の第2のテストデータを与え
    て実行させたときの途中の変数の値、ループの回数等の
    途中経過を示す値が仕様変更前のものから予め定めた限
    界範囲以内に収まっているか否かを比較することによっ
    て仕様変更に対する修正対象プログラムの修正必要箇所
    を特定することを特徴とするプログラム検証方法。
  13. 【請求項13】 仕様変更によって修正が必要となる修
    正前の修正対象プログラムに対し、変更前の仕様に基づ
    く第1のテストデータを与えてコンピュータに実行さ
    せ、プログラム中のどの経路をどの順序で通ったかを予
    め調べておき、同じ計算手順になるべき仕様変更後の第
    2のテストデータを修正後のプログラムに与えて実行さ
    せたときの途中の変数の値、ループの回数等の途中経過
    を示す値が仕様変更前のものから予め定めた限界範囲以
    内に収まっているか否かを比較することによって仕様変
    更に伴う修正後プログラムの修正の良否を検証すること
    を特徴とするプログラム検証方法。
  14. 【請求項14】 仕様変更によって修正が必要となる修
    正前の修正対象プログラムに対し、変更前の仕様に基づ
    く複数のテストデータを修正前のプログラムに与えてコ
    ンピュータに実行させ、プログラム中のどの経路をどの
    順序で通ったかを予め調べておき、仕様変更の影響を受
    けない範囲に属する第2のテストデータを修正後のプロ
    グラムに与えて実行させたときの途中の変数の値、ルー
    プの回数等の途中経過を示す値が仕様変更前のものから
    予め定めた限界範囲以内に収まっているか否かを比較す
    ることによって仕様変更に伴う修正後のプログラムの性
    能を検証することを特徴とするプログラム検証方法。
  15. 【請求項15】 仕様変更によって修正が必要となる修
    正前の修正対象プログラムに対し、変更前の仕様に基づ
    く第1のテストデータをに与えてコンピュータに実行さ
    せ、データベースへの検索、他システムの呼出し、ユー
    ザ入力のいずれかを含む外部とのデータ入出力の履歴を
    収集し、これらをスタブ化することで同じ計算手順にな
    るべき仕様変更後の第2のテストデータを修正後のプロ
    グラムに与えて実行させたときの動作の比較を検証用の
    環境で実現し、仕様変更に伴う修正後プログラムの修正
    の良否を検証することを特徴とするプログラム検証方
    法。
  16. 【請求項16】 仕様変更によって修正が必要となる修
    正前の修正対象プログラムに対し、変更前の仕様に基づ
    く第1のテストデータを与えてコンピュータに実行さ
    せ、データベースへの検索、他システムの呼出し、ユー
    ザ入力のいずれかを含む外部とのデータ入出力の履歴を
    収集し、これらをスタブ化することで仕様変更の影響を
    受けない範囲に属する第2のテストデータを修正後のプ
    ログラムに与えて実行させたときの動作の比較を検証用
    の環境で実現し、仕様変更に伴う修正後プログラムの性
    能を検証することを特徴とするプログラム検証方法。
  17. 【請求項17】 前記解釈手段は、制御文による指定に
    よって第1,第2のプログラムの両方または一方を解釈
    して実行する手段を備えることを特徴とする請求項3ま
    たは8記載のいずれかのプログラム検証方法。
JP10087378A 1998-03-31 1998-03-31 プログラム検証方法 Pending JPH11282722A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP10087378A JPH11282722A (ja) 1998-03-31 1998-03-31 プログラム検証方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP10087378A JPH11282722A (ja) 1998-03-31 1998-03-31 プログラム検証方法

Publications (1)

Publication Number Publication Date
JPH11282722A true JPH11282722A (ja) 1999-10-15

Family

ID=13913244

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10087378A Pending JPH11282722A (ja) 1998-03-31 1998-03-31 プログラム検証方法

Country Status (1)

Country Link
JP (1) JPH11282722A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008077215A (ja) * 2006-09-19 2008-04-03 Toshiba Corp 精算プログラムの検査装置及び検査方法
US8479165B1 (en) 2011-05-23 2013-07-02 International Business Machines Corporation System for testing operation of software
WO2018150504A1 (ja) * 2017-02-16 2018-08-23 三菱電機株式会社 動作検証装置、動作検証方法および動作検証プログラム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008077215A (ja) * 2006-09-19 2008-04-03 Toshiba Corp 精算プログラムの検査装置及び検査方法
US8479165B1 (en) 2011-05-23 2013-07-02 International Business Machines Corporation System for testing operation of software
US8707268B2 (en) 2011-05-23 2014-04-22 Interntional Business Machines Corporation Testing operations of software
US8745588B2 (en) 2011-05-23 2014-06-03 International Business Machines Corporation Method for testing operation of software
WO2018150504A1 (ja) * 2017-02-16 2018-08-23 三菱電機株式会社 動作検証装置、動作検証方法および動作検証プログラム

Similar Documents

Publication Publication Date Title
US8966449B2 (en) Test case pattern matching
US5926638A (en) Program debugging system for debugging a program having graphical user interface
US7895575B2 (en) Apparatus and method for generating test driver
US7178135B2 (en) Scope-based breakpoint selection and operation
CN109101410B (zh) 一种风险驱动测试方法和装置以及计算机可读存储介质
CN111897727A (zh) 软件测试方法、装置、计算机设备及存储介质
JPH0748182B2 (ja) プログラム・エラー検出方法
JP6567212B2 (ja) 等価性検証装置および等価性検証プログラム
US10642716B1 (en) Automated software program repair
US10761962B1 (en) Automated software program repair
JPH11282722A (ja) プログラム検証方法
US11740895B2 (en) Generation of software program repair explanations
US5956511A (en) Program development support apparatus, program development support method, and storage medium therefor
JP6878707B2 (ja) 試験装置、試験方法および試験プログラム
CN113656318A (zh) 软件版本测试方法、装置及计算机设备
JP2016071774A (ja) 検証支援装置、検証支援方法およびコンピュータプログラム
WO2023058611A1 (ja) ソフトウェア不具合分析装置及びソフトウェア不具合分析方法
WO2024079800A1 (ja) 解析機能付与装置、解析機能付与方法および解析機能付与プログラム
JPWO2019142266A1 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
CN112580282B (zh) 用于集成电路设计验证的方法、装置、设备以及存储介质
JP4149047B2 (ja) シミュレータ
JP2024012759A (ja) ソフトウェア分析システム、ソフトウェア分析方法
CN115934500A (zh) 流水线构建方法、装置、计算机设备和存储介质
JP2001051864A (ja) データ処理装置の試験実行方式
KR20240041017A (ko) 소프트웨어 회귀 테스트를 위한 최적의 테스트 케이스 선정 방법 및 장치

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040427