[go: up one dir, main page]

JP2022178544A - プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム - Google Patents

プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム Download PDF

Info

Publication number
JP2022178544A
JP2022178544A JP2021085423A JP2021085423A JP2022178544A JP 2022178544 A JP2022178544 A JP 2022178544A JP 2021085423 A JP2021085423 A JP 2021085423A JP 2021085423 A JP2021085423 A JP 2021085423A JP 2022178544 A JP2022178544 A JP 2022178544A
Authority
JP
Japan
Prior art keywords
program
component
correction
information
test
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
JP2021085423A
Other languages
English (en)
Other versions
JP7686452B2 (ja
Inventor
康生 秦野
Yasuo Hatano
和矢 安田
Kazuya Yasuda
信治 伊藤
Shinji Ito
知倫 中村
Tomomichi Nakamura
真雄 原田
Masao Harada
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 Ltd
Original Assignee
Hitachi 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 Ltd filed Critical Hitachi Ltd
Priority to JP2021085423A priority Critical patent/JP7686452B2/ja
Publication of JP2022178544A publication Critical patent/JP2022178544A/ja
Application granted granted Critical
Publication of JP7686452B2 publication Critical patent/JP7686452B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

Figure 2022178544000001
【課題】プログラムの構成に応じて効率的なプログラム修正を行うプログラム修正装置、プログラム修正方法及びプログラム修正プログラムを提供する。
【解決手段】プログラム修正装置1は、検証対象プログラムの各構成要素の情報と、各構成要素を検証する各テストプログラムの情報とを対応づけた情報である構成要素情報を記憶する情報記憶部260と、各テストプログラムを実行することにより検証対象プログラムの不具合箇所を推定する不具合箇所推定部220と、推定した各不具合箇所に係る、検証対象プログラムの各構成要素を構成要素情報により特定し、特定した各構成要素間の関係に基づき、各構成要素の修正順位を決定する実行優先度決定部240と、決定した修正順位に従って、検証対象プログラムの各構成要素を、各構成要素に対応した修正プログラムにより修正する自動修正実行制御部250と、を備える。
【選択図】図1

Description

本発明は、プログラム修正装置、プログラム修正方法、及びプログラム修正プログラムに関する。
ソフトウェアに含まれる不具合(バグ)を特定し修正する技術として、Automated Program Repair(APR)が提案されている。APRは、例えば、「不具合箇所の特定」及び「パッチの生成」の2つのフェーズで構成される。具体的には、所定の不具合箇所検出プログラムにより、修正対象のソフトウェアにおける不具合箇所を特定した後、その不具合箇所に関する部分を書き換えることでソフトウェアを修正することが可能な修正プログラム(パッチ候補)を複数作成する。そして、作成した各パッチ候補の検証を行うことで、最適なパッチ候補(パッチ案)を特定する。このパッチ案を修正対象のソフトウェアに適用することで、バグが修復される。
APRに関連する技術として、例えば特許文献1には、テストスイートを用いてソフトウェアプログラム内の障害位置を特定し、機械学習を用いて、障害位置で可能な修復処理を実行することの潜在的な有効性を指し示す修復有効性インジケーションを決定し、修復有効性インジケーションに基づいて、障害位置で修復を行うことを優先順位付け、障害位置の優先順位付けに基づいて、ソフトウェアプログラムに対する修復処理を実行することが記載されている。
特開2017-102912号公報
このように、特許文献1は、ソフトウェアにおけるバグの箇所の修復の有効性を機械学習によって判定するものであり、この有効性は、ソフトウェアにおける個々の修復処理の実行結果に基づき判定されるものである。しかしながら、このような手法では効率良くバグの修復ができなくなるおそれがある。例えば、ソフトウェアの構成要素間に一定の依存関係があり、バグがバグを誘発するような状況があるような場合は、修復処理の順序によっては根本的なバグ修復に容易に到達しないことがある。また、修復を優先すべき箇所とそれ以外の箇所との区別がつけられず、ソフトウェア開発の実態に沿ったバグ修復が行えないおそれもある。
本発明はこのような事情に鑑みてなされたもので、その目的は、プログラムの構成に応じて効率的なプログラム修正を行うことが可能な、プログラム修正装置、プログラム修正方法、及びプログラム修正プログラムを提供することにある。
上記課題を解決するための本発明の一つは、プロセッサ及びメモリを有し、検証対象プログラムの各構成要素の情報と、前記各構成要素を検証する各テストプログラムの情報とを対応づけた情報である構成要素情報を記憶する情報記憶部と、前記各テストプログラムを実行することにより前記検証対象プログラムの不具合箇所を推定する不具合箇所推定部と、前記推定した各不具合箇所に係る、前記検証対象プログラムの各構成要素を前記構成
要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する実行優先度決定部と、前記決定した修正順位に従って、前記検証対象プログラムの各構成要素を、当該各構成要素に対応した修正プログラムにより修正する自動修正実行制御部と、を備える、プログラム修正装置、とする。
また、上記課題を解決するための本発明の一つは、情報処理装置が、検証対象プログラムの各構成要素の情報と、前記各構成要素を検証する各テストプログラムの情報とを対応づけた情報である構成要素情報を記憶する構成情報記憶処理と、複数の前記テストプログラムを実行することにより前記検証対象プログラムの不具合箇所を推定する不具合箇所推定処理と、前記推定した各不具合箇所に係る、前記検証対象プログラムの各構成要素を前記構成要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する実行優先度決定処理と、前記決定した修正順位に従って、前記検証対象プログラムの各構成要素を、当該各構成要素に対応した修正プログラムにより修正する自動修正実行制御処理と、を実行する、プログラム修正方法、とする。
また、上記課題を解決するための本発明の一つは、情報処理装置に、検証対象プログラムの各構成要素の情報と、前記各構成要素を検証する各テストプログラムの情報とを対応づけた情報である構成要素情報を記憶する構成情報記憶処理と、複数の前記テストプログラムを実行することにより前記検証対象プログラムの不具合箇所を推定する不具合箇所推定処理と、前記推定した各不具合箇所に係る、前記検証対象プログラムの各構成要素を前記構成要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する実行優先度決定処理と、前記決定した修正順位に従って、前記検証対象プログラムの各構成要素を、当該各構成要素に対応した修正プログラムにより修正する自動修正実行制御処理と、を実行させる、プログラム修正プログラム、とする。
本発明によれば、プログラムの構成に応じて効率的なプログラム修正を行うことができる。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
実施例1に係るプログラム修正装置が備える機能の一例を説明する図である。 ソースファイル情報の一例を示す図である。 テストプログラム情報の一例を示す図である。 プログラム修正装置が備えるハードウェアの一例を説明する図である。 プログラム修正装置が行う処理であるプログラム修正処理の一例を説明するフロー図である。 テスト結果情報の一例を示す図である。 不具合特定情報の一例を示す図である。 実行優先度情報の一例を示す図である。 修正履歴情報の一例を示す図である。 修正結果情報の一例を示す図である。 実行優先度決定処理の詳細を説明するフロー図である。 実施例2に係るプログラム修正処理の一例を説明する図である。
以下、本実施形態に係るプログラム修正装置1について説明する。
本実施形態のプログラム修正装置1は、不具合(バグ)を含む可能性のあるプログラム
(例えば、所定言語で記述されたソースコード。以下、検証対象プログラムという。)を修正する情報処理装置である。
具体的には、このプログラム修正装置1は、検証対象プログラムにおける不具合箇所を、所定のテストプログラムを実行することで推定し、推定した各不具合箇所を修正する修正プログラム(以下、パッチ又はパッチ候補という)を複数生成する。そして、プログラム修正装置1は、各修正プログラムを実行することにより修正された各検証対象プログラムに対して、再びテストプログラムを実行することで、最も適切に不具合箇所を修正した修正プログラムを特定し、特定した修正プログラムをパッチ案としてユーザに提示する。なお、プログラム修正装置1は、例えば修正された検証対象プログラムを再びテストプログラムに対して実行した場合において、そのテスト結果に変更がない場合又はより多くのテストケースに失敗する場合等、修正結果として適切でない場合には、修正失敗をユーザに提示してもよい。
この際、プログラム修正装置1は、検証対象プログラムにおける各不具合箇所間に係る構成要素の依存関係等に基づいて、各修正プログラムの実行順序を決定し、決定した実行順序に基づいて検証対象プログラムを修正する。これにより、検証対象プログラムに存在する不具合箇所を効率良くかつ確実に解消することができる。なお、構成要素とは、例えば、プログラムのパッケージ、クラス、メソッドである。
-実施例1-
以下、実施例1に係るプログラム修正装置1について説明する。
図1は、実施例1に係るプログラム修正装置1が備える機能の一例を説明する図である。プログラム修正装置1は、情報記憶部260、テスト実行部210、不具合箇所推定部220、パッチ候補生成部1010、パッチ検証部1020、プログラム修正部230、実行優先度決定部240、自動修正実行制御部250、及び情報記憶部270の各機能部を備える。
情報記憶部260は、ソースファイル情報261、テストプログラム情報262、テスト結果情報263、パッチ候補情報1001、不具合特定情報264、実行優先度情報265、及び修正履歴情報266、及び修正結果情報267の各情報を記憶する。
(ソースファイル情報)
図2は、ソースファイル情報261の一例を示す図である。ソースファイル情報261は、1又は複数のソースファイル320(検証対象プログラム)の情報を含む。各ソースファイル320には、その名称及び記憶場所310(ファイル名及びフォルダ等)が対応づけられて記憶されている。
(テストプログラム情報)
図3は、テストプログラム情報262の一例を示す図である。テストプログラム情報262は、1又は複数のテストファイル420(以下、テストプログラム又はテストケース群という)の集合であるテストクラスの情報である。各テストファイル420には、その名称及び記憶場所410(ファイル名及びフォルダ等)が対応づけて記憶されている。
各テストファイル420は、対応する構成要素(検証対象プログラムの構成要素)に不具合があるか否かを判定する。具体的には、テストファイル420は、1又は複数のテスト部421(テストケース)を有する。各テスト部421は、対応する構成要素に対する様々な入力値(例えば、変数又は定数)を指定して検証対象プログラムを実行する呼び出し部422と、呼び出し部422に基づく検証対象プログラムの実行結果と、予め指定し
た期待結果とが一致するか否かを判定する判定部423とを含む。
なお、構成要素は、例えば、検証対象プログラムの各パッケージ、パッケージを構成するクラス、クラスを構成するメソッド、メソッド内の各処理単位(パス)である。構成要素間には、例えば、ある構成要素が他の構成要素に依存するといった依存関係(処理の呼び出し、変数の参照等)が存在する場合がある。本実施形態では、プログラム修正装置1は、このような検証対象プログラムの構成要素間の関係を、構成要素情報として記憶しているものとする。ここで、プログラム修正装置1は、構成要素情報を、例えば、ソースファイル情報内の解析結果や設計情報から事前に生成する、又はテストプログラムの実行結果から生成してもよい。
判定部423は、「不具合なし」(実行結果と正解値が一致した場合)又は「不具合あり」(実行結果と正解値が一致しなかった場合)のいずれかを出力する。
次に、図1に示すテスト結果情報263は、検証対象プログラムの各構成要素の情報と、各構成要素の不具合を特定する各テストプログラムの情報と、各テストプログラムの実行結果(「不具合あり」又は「不具合なし」)とをそれぞれ対応づけて記憶する。
パッチ候補情報1001は、修正プログラム(パッチ候補)の情報である。
不具合箇所候補情報264は、テストプログラムの実行結果に基づき推定された、検証対象プログラムの不具合箇所に関する情報である。
実行優先度情報265は、修正プログラム(パッチ)により修正する各構成要素の、修正順位に関する情報である。
修正履歴情報266は、修正プログラムによる修正の履歴の情報である。履歴の情報は、例えば、各修正プログラムの適用時刻、各修正プログラムによる構成要素の修正の成否の履歴等の情報である。
また、情報記憶部270は、テストプログラムの実行時間の情報を前記各構成要素ごとに記憶する。
修正結果情報267は、上記修正順位に基づき修正された検証対象プログラムの情報である。
テスト結果情報263、不具合箇所候補情報264、実行優先度情報265、修正履歴情報266、及び修正結果情報267の詳細は後述する。
次に、テスト実行部210は、検証対象プログラムに対して、テストプログラムを実行する。
不具合箇所推定部220は、テストプログラムを実行することにより検証対象プログラムの不具合箇所を推定する。
パッチ候補生成部1010は、検証対象プログラムの構成要素の不具合箇所を修正する修正プログラム(パッチ候補)を生成する。この際、パッチ候補生成部1010は、後述する構成要素の修正順位に従ってパッチ候補を生成する。
パッチ検証部1020は、パッチ候補生成部1010が生成した各パッチ候補を検証対
象プログラムに適用した場合(実行した場合)の有効性(修正成功又は修正失敗)を検証する。パッチ検証部1020は、パッチ候補のうち有効性のあるパッチ候補をパッチ案として特定する。
プログラム修正部230は、パッチ案を検証対象プログラムに適用する(実行する)ことで、修正された検証対象プログラムを生成する。
実行優先度決定部240は、不具合箇所推定部220が推定した各不具合箇所に係る、検証対象プログラムの各構成要素を構成要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する。
例えば、実行優先度決定部240は、不具合箇所推定部220が特定した各構成要素の間に処理上の依存関係があるか否かを判定し、処理上の依存関係があると判定した場合に、その処理上の依存関係に基づいて、各構成要素の間に異なる修正順位を設定する。
自動修正実行制御部250は、実行優先度決定部240が決定した修正順位に従って、検証対象プログラムの各構成要素を、当該各構成要素に対応した修正プログラムにより修正する。
ここで、図4は、プログラム修正装置1が備えるハードウェアの一例を説明する図である。プログラム修正装置1は、CPU(Central Processing Unit)などのプロセッサ1
10と、RAM(Random Access Memory)、ROM(Read Only Memory)等の主記憶装置120と、HDD(Hard Disk Drive)、SSD(Solid State Drive)等の補助記憶装置130と、キーボード、マウス、タッチパネル等の入力装置140と、モニタ(ディスプレイ)等の出力装置150と、他の情報処理装置とデータ通信を行う、無線ネットワークインターフェース又はネットワークインターフェースカード等の通信装置160とを備える。
プログラム修正装置1の機能部は、プログラム修正装置1のプロセッサ110が、主記憶装置120又は補助記憶装置130に記憶されているプログラムを実行することによって実現される。これらのプログラムは、例えば、二次記憶デバイスや不揮発性半導体メモリ、ハードディスクドライブ、SSDなどの記憶デバイス、又は、ICカード、SDカード、DVDなどの、各ノードで読み取り可能な非一時的データ記憶媒体に格納されてもよい。
次に、プログラム修正装置1が行う処理について説明する。
図5は、プログラム修正装置1が行う処理であるプログラム修正処理の一例を説明するフロー図である。プログラム修正処理は、例えば、プログラム修正装置1に、ユーザから検証対象プログラムの指定の入力があった場合若しくはソースファイル情報の更新があった場合に、又は定期的なタスクとして開始される。
まず、テスト実行部210は、指定された検証対象プログラムを読み込む(s801)。そして、テスト実行部210は、テストプログラム情報262から各テストファイル420(テストプログラム)を取得し、取得した各テストプログラムを実行する(s802)。
不具合箇所推定部220は、各テストプログラムの実行結果をテスト結果情報263に記憶する(s803)。また、不具合箇所推定部220は、各テストプログラムの実行内容に基づき、検証対象プログラム内の各構成要素における不具合箇所を推定し、その結果を不具合特定情報264に記憶する(s803)。
具体的には、例えば、不具合箇所推定部220は、各テストプログラムの実行が成功又は失敗したかを示す情報をテスト結果情報263に設定する。また不具合箇所推定部220は、例えばSpectrum-Based Fault Localization(SBFL)に基づき、テストプログ
ラムにより実行された検証対象プログラム内の各処理の実行経路を特定することで、検証対象プログラム内の各処理の疑惑値を算出し、不具合箇所を特定する。
ここで、テスト結果情報263及び不具合特定情報264の例を説明する。
(テスト結果情報)
図6は、テスト結果情報263の一例を示す図である。テスト結果情報263は、各テストプログラム(テストケース群)のテスト番号2631、テスト番号2631に係るテストプログラムにより不具合の有無が検証される構成要素である対応要素2632、テスト番号2631に係るテストプログラムによるテスト結果2633、及び、テスト番号2631に係るテストプログラムの実行時間であるテスト実行時間2634の各データ項目を有する。なお、対応要素2632は予め、例えば、検証対象プログラムに関する所定の設計情報に基づき設定される。
テスト結果2633には当初は情報は設定されず、上記のテスト番号2631に係るテストプログラムが実行されることにより情報が設定される。
同図の例では、「テストプログラム1」は、クラス「CA」内のメソッド「m1」の不具合を検証する。また、「テストプログラム3」は、クラス「CB」内のメソッド「m2」及びクラス「CB」内のメソッド「m3」の不具合を検証する。また、「テストプログラム1」の実行は成功(○)し(不具合は存在せず)、「テストプログラム2」の実行は失敗(×)している(不具合が存在する)。なお、構成要素情報として、クラス「CB」内のメソッド「m3」はクラス「CB」内のメソッド「m2」に依存するという関係があるものとする。
(不具合特定情報)
図7は、不具合特定情報264の一例を示す図である。不具合特定情報264は、不具合箇所ごとに割り当てられた番号2641、及び、その不具合箇所を検出したテストプログラムである、1又は複数のテストケース群2642の各データ項目を有する。
このうちテストケース群2642は、不具合箇所2643及び疑惑値2644の各データ項目を有する。不具合箇所2643には、テストケース群2642に係るテストプログラムにより検出された不具合箇所の情報が設定される。疑惑値2644には、テストケース群2642に係るテストプログラムに基づき算出された、不具合箇所2643に係る疑惑値(不具合が存在する可能性の高さを示す情報)が設定される。
次に、図5のs804に示すように、実行優先度決定部240は、s803で生成したテスト結果情報263及び不具合特定情報264に基づき、各構成要素の修正順位を決定する実行優先度決定処理を実行する。実行優先度決定処理s804の詳細は後述する。
(実行優先度情報)
ここで、図8は、実行優先度決定処理により生成される実行優先度情報265の一例を示す図である。実行優先度情報265は、修正対象構成要素2651、優先度2652、及びAPR結果2653の各データ項目を有する。
修正対象構成要素2651には、検証対象プログラムの各構成要素の情報が設定される。
優先度2652には、修正対象構成要素2651に係る構成要素の修正順位が設定される。具体的には、優先度2652には、テスト結果情報263の各レコードのうちテスト結果2633が「×」であったレコードの対応要素2632に設定されている各構成要素の修正順位が設定される。
APR結果2653には、修正対象構成要素2651に係る構成要素に対する、パッチによる修正が成功したか否かを示す情報が設定される。
次に、図5に示すように自動修正実行制御部250は、以下に説明するs805~s809の処理(修正順位を決定した構成要素の修正)を繰り返し行う。
まず、自動修正実行制御部250は、これまでに修正を行っていない構成要素のうち、修正順位が最も高い構成要素を特定する(s804)。
具体的には、例えば、自動修正実行制御部250は、実行優先度情報265の各レコードを参照し、これまでに実施していない構成要素の修正(後述するs807)のうち最も高い修正順位に係るレコードの修正対象構成要素2651の内容を取得する。
自動修正実行制御部250は、s804で特定した構成要素の不具合箇所を修正する修正プログラム(パッチ候補)を生成又は取得し、また、s804で特定した構成要素の不具合の有無を検証するテストプログラムを取得する(s805)。
なお、修正プログラム(パッチ候補)は、例えば、構成要素の不具合箇所に様々な変更(例えば、条件式等の各式の追加、変更若しくは削除、変数の追加、変更若しくは削除、又は関数の追加、変更若しくは削除等)を行うプログラムであり、1又は複数作成される。
自動修正実行制御部250は、s805で取得した各修正プログラム(パッチ候補)を実行することで、s804で特定した構成要素を修正した一時的な検証対象プログラムをそれぞれ生成する(s807)。
そして、自動修正実行制御部250は、生成した各検証対象プログラムに対して、s805で取得したテストプログラムを実行することで、各パッチ候補からパッチ案を特定する。具体的には、自動修正実行制御部250は、検証対象プログラムに対して実行した各パッチ候補のうち、当該検証対象プログラムに対するテストプログラムの実行結果が成功(不具合なし)であったパッチ候補を、パッチ案として特定する(s807)。
なお、自動修正実行制御部250は、修正プログラム(パッチ候補)の実行結果を実行優先度情報265及び修正履歴情報266に記憶する。
具体的には、例えば、自動修正実行制御部250は、パッチ案を特定できた場合には、実行優先度情報265のAPR結果2653に「○」を設定し、パッチ案を特定できなかった場合には、実行優先度情報265のAPR結果2653に「×」を設定する。
(修正履歴情報)
図9は、修正履歴情報266の一例を示す図である。修正履歴情報266は、実行した修正プログラム(パッチ候補)の番号2661、そのパッチ候補により修正される修正対象構成要素2662、そのパッチ候補による修正がこれまでに成功した回数及び失敗した回数である修正成功失敗2663、及び、そのパッチ候補が適用された時刻の履歴である
修正適用時刻履歴2664の各データ項目を有する。
なお、修正履歴情報266には、パッチ候補だけでなく、生成したパッチ案に関する情報が設定されてもよい。例えば、パッチ案に基づき修正された検証対象プログラムが後に不具合を起こした場合に、その不具合を修正の失敗として修正履歴情報266に設定する。
次に、図5のs809に示すように、自動修正実行制御部250は、他に修正を行っていない構成要素があるか否かを判定する。
具体的には、例えば、自動修正実行制御部250は、実行優先度情報265の各レコードを参照し、優先度2652に情報が設定されており、かつ修正対象構成要素2651に係る構成要素の修正が実施されていないレコードがあるか否かを判定する。
他に修正を行っていない構成要素がある場合は(s809:YES)、自動修正実行制御部250はその構成要素についてs805以下の処理を繰り返し、他に修正を行っていない構成要素がない場合は(s809:NO)、プログラム修正処理は終了する(s810)。
(修正結果情報)
図10は、プログラム修正処理により修正された検証対象プログラムの情報である修正結果情報267の一例を示す図である。この修正結果情報267は、修正された1又は複数の検証対象プログラム920の情報を含み、検証対象プログラム920には、その名称及び記憶場所910(ファイル名及びフォルダ等)が対応づけられて記憶されている。
検証対象プログラム920には、例えば、修正プログラムにより新たな関数921が追加され、また一部の処理が削除される(符号922)。
次に、実行優先度決定処理の詳細を説明する。
<実行優先度決定処理>
図11は、実行優先度決定処理の詳細を説明するフロー図である。
実行優先度決定部240は、テスト結果情報263の対応要素2632及び、構成要素情報を参照することで、互いに依存関係がある構成要素を特定し、特定した依存関係に応じて、その各構成要素の修正順位を決定する(s821)。
具体的には、例えば、実行優先度決定部240は、あるメソッドが異なる1又は複数のメソッドを呼び出している(実行させている)という関係がある場合、呼び出しているメソッドの順位より、呼び出されているメソッドの順位を高くする。
また、例えば、実行優先度決定部240は、複数のメソッドのそれぞれが他の同一のメソッドを参照している場合、その参照されているメソッドの順位より、上記複数のメソッド(参照しているメソッド)の順位を高くする。
なお、実行優先度決定部240は、検証対象プログラムが互いに独立した実行経路(メソッド群)を有している場合は、テストプログラム情報262を、それぞれの実行経路に応じた複数のテストプログラム情報262に分割してもよい。
次に、実行優先度決定部240は、依存関係に基づき修正順位を設定した構成要素以外の構成要素について、それぞれの修正順位を決定する(s822)。
例えば、実行優先度決定部240は、各構成要素に係る修正プログラムの過去の修正の
成功率又は修正の必要度に基づき、各構成要素の修正順位を決定する。
成功率については、例えば、実行優先度決定部240は、修正履歴情報266の各レコードのパッチ成功失敗2663に基づき、各構成要素のパッチ候補による修正の成功率を算出する。実行優先度決定部240は、成功率に応じて(例えば、成功率が低い又は高い順に)、各構成要素の修正順位を設定する。なお、成功率に基づく修正順位の設定方法はここで説明したものに限らず、例えば、成功率が所定の閾値より低い又は高い構成要素のみについて異なる修正順位を設定してもよい。
必要度については、例えば、実行優先度決定部240は、修正履歴情報266の各レコードのパッチ適用履歴2664に基づき、各構成要素の修正頻度を算出し、修正頻度が所定の閾値を超える構成要素とその周辺の構成要素(例えば、直前又は直後に実行される構成要素)を特定する。実行優先度決定部240は、特定した構成要素の修正順位を、それ以外の構成要素の修正順位より高くする。なお、修正頻度に基づく修正順位の設定方法はここで説明したものに限らず、例えば、修正頻度の高い順に各構成要素の修正順位を設定してもよい。
また、例えば、実行優先度決定部240は、各構成要素の修正に利用したパッチ候補の数に基づき、各構成要素の修正順位を決定する。
具体的には、実行優先度決定部240は、修正履歴情報266の各レコードのパッチ適用履歴2664に基づき、構成要素の修正のために適用されたパッチ候補の数を、構成要素ごとに算出する。実行優先度決定部240は、パッチ候補の数に応じて(例えば、パッチ候補の数が多い又は少ない順に)、対応する構成要素の修正順位を設定する。
また、例えば、実行優先度決定部240は、各構成要素の不具合箇所の特定のために実行したテストプログラムの実行時間に基づき、各構成要素の修正順位を決定する。
具体的には、実行優先度決定部240は、テスト結果情報263のテスト実行時間2634を参照することで、各構成要素に係るテストプログラムの実行時間を特定する。実行優先度決定部240は、実行時間の長さに応じて(例えば、実行時間が長い順に)、対応する構成要素の修正順位を設定する。
また、例えば、実行優先度決定部240は、各構成要素に対して予め設定した重要度に基づき(例えば、重要度が高い順に)、各構成要素の修正順位を決定する。
以上のように、本実施例のプログラム修正装置1は、検証対象プログラムの各構成要素と、各構成要素を検証する各テストプログラムとを対応づけた構成要素情報を記憶しておき、テストプログラムを実行することにより推定した検証対象プログラムの不具合箇所に対応した検証対象プログラムの構成要素を構成要素情報により特定し、特定した各構成要素間の関係に基づき各構成要素の修正順位を決定し、この修正順位に従って、検証対象プログラムの各構成要素をその対応する修正プログラムにより修正する。
すなわち、本実施例のプログラム修正装置1は、各不具合箇所の修正順位を検証対象プログラムの構成要素に応じて設定し、この修正順位に従って検証対象プログラムを修正する。これにより、プログラムの構成に応じて効率的なプログラム修正を行うことができる。
さらに、本実施例のプログラム修正装置1は、不具合箇所を特定した各構成要素の間に処理上の依存関係があるか否かを判定し、処理上の依存関係があると判定した場合に、こ
れに基づいて各構成要素の間に異なる修正順位を設定する。これにより、プログラム内の各モジュール間の依存関係に応じて効率的なプログラム修正を行うことができる。
具体的には、例えば、本実施例のプログラム修正装置1は、不具合箇所を特定した各構成要素のうち第1の構成要素が第2の構成要素を実行させているという依存関係がある場合には、第2の構成要素に係る修正順位を第1の構成要素に係る修正順位より高く設定する。これにより、あるモジュールと他のモジュールが呼び出しと被呼び出しの関係にあるような複雑な構成を有するプログラムに対しても、効率的にプログラム修正を行うことができる。
また、例えば、本実施例のプログラム修正装置1は、不具合箇所を特定した各構成要素のうち第1の構成要素及び第2の構成要素が第3の構成要素の情報を参照しているという依存関係がある場合には、第3の構成要素に係る修正順位を第1の構成要素及び第2の構成要素に係る修正順位より高く設定する。これにより、複数のモジュールが他の共通のモジュールを参照しているといった構成を有するプログラムに対しても、効率的にプログラム修正を行うことができる。
さらに、本実施例のプログラム修正装置1は、不具合箇所を特定した各構成要素の修正の成功率又は必要度を各構成要素の修正履歴に基づき推定し、それらに基づいて各構成要素の修正順位を決定する。これにより、例えば、修正が奏功しにくい構成要素の修正の優先順位を下げる、修正頻度が高く修正の必要が高い構成要素を優先的に修正する、といった柔軟な対応が可能となる。
さらに、本実施例のプログラム修正装置1は、不具合箇所を特定した各構成要素の修正に用いた修正プログラムの数に基づき、各構成要素の修正順位を決定する。これにより、例えば、修正候補が多数存在するような構成要素を優先的に修正するといった柔軟な対応が可能となる。
さらに、本実施例のプログラム修正装置1は、不具合箇所を特定した各構成要素に係るテストプログラムの各実行時間に基づき、各構成要素の修正順位を決定する。これにより、対応に時間を要する修正については優先度を下げる等することで、プログラムの開発を効率よく行うことができる。
-実施例2-
実施例2では、プログラム修正装置1は、テストプログラムに基づき特定した不具合箇所に係る構成要素について、互いに依存関係のある構成要素の修正順位を決定した場合、依存元の構成要素のみを修正プログラムで修正することにより検証対象プログラムを更新しておく。そして、プログラム修正装置1は、更新した新たな検証対象プログラムに対して再び各テストプログラムを実行する。
図12は、実施例2に係るプログラム修正処理の一例を説明する図である。プログラム修正装置1は、構成要素Compαと、構成要素Compβと、構成要素Compα及び構成要素Compβに依存する構成要素CompAと、構成要素Compγとを有する検証対象プログラム1100に対する修正を行う。
プログラム修正装置1は、検証対象プログラム1100の各構成要素に対するテストプログラムを実行することで、各構成要素における不具合箇所を特定する(s901。実施例1のs802~s803に対応)。
プログラム修正装置1は、構成要素Compα、構成要素Compβ、構成要素Com
pγ、及び構成要素CompAの順に不具合箇所の特定を行い、構成要素Compα、構成要素Compγ、及び構成要素CompAに不具合箇所があることを特定する(s902。実施例1のs801~s803に対応)。そして、プログラム修正装置1は、構成要素Compα、構成要素Compγ、及び構成要素CompAのそれぞれに対する修正プログラム(パッチ候補)を生成する(s903。実施例1のs805~s806に対応)。
プログラム修正装置1は、構成要素Compα、構成要素Compγ、及び構成要素CompAの順に、構成要素を修正プログラムを検証対象プログラムに適用して検証対象プログラムを修正した場合のその修正の有効性の検証を行う(s904。実施例1のs807に対応)。プログラム修正装置1は、検証の結果、修正が有効であると判定された修正プログラムをパッチ案として特定する(s905。実施例1のs808に対応)。
ここで、プログラム修正装置1は、検証が有効とされた構成要素Compα、構成要素Compγ、及び構成要素CompAのうち、依存先の構成要素(構成要素CompA)を有する依存元の構成要素Compαのみに対して、s905で特定した構成要素Compαに対するパッチ案を適用することで、新たな検証対象プログラム1110を生成する(s906)。
その後、プログラム修正装置1は、構成要素Compαを修正した新たな検証対象プログラム1110に対して、s901と同様に、各構成要素に対するテストプログラムを実行することで、各構成要素における不具合箇所を特定する。構成要素Compαが修正されていることによりその依存先である構成要素CompAも修正されるので、新たな検証対象プログラム1110に対するテストプログラムにより、構成要素Compγのみが不具合箇所として特定される。
このように、本実施例のプログラム修正装置1は、(1)依存元及び依存先の関係にある構成要素のうち依存元の構成要素に対応した各修正プログラムにより修正された新たな検証対象プログラムを生成し、(2)その新たな検証対象プログラムに対して各テストプログラムを再実行することによりプログラムの不具合箇所を推定し、(3)推定した各不具合箇所に対応した各構成要素を特定して、それらの修正順位を決定する。このように、ある構成要素の前提となる構成要素(依存元の構成要素)に対して先に修正プログラムを適用して再度テストを実行することで、依存先の構成要素が修復できる可能性が高まる。このようにして、効率的なプログラム修正を行うことができる。
本発明は以上に説明した実施形態に限定されるものではなく、様々な変形例が含まれる。上記した実施形態は本発明のより良い理解のために詳細に説明したものであり、必ずしも説明の全ての構成を備えるものに限定されるものではない。
例えば、各実施例の各装置が備える各機能の一部は他の装置に設けてもよいし、別装置が備える機能を同一の装置に設けてもよい。
また、本実施形態で説明した検証対象プログラムの不具合箇所の推定方法はここで説明したものに限られない。例えば、疑惑値以外のパラメータを用いて不具合箇所を推定してもよい。
1 プログラム修正装置、260 情報記憶部、220 不具合箇所推定部、240 実行優先度決定部、250 自動修正実行制御部

Claims (10)

  1. プロセッサ及びメモリを有し、
    検証対象プログラムの各構成要素の情報と、前記各構成要素を検証する各テストプログラムの情報とを対応づけた情報である構成要素情報を記憶する情報記憶部と、
    前記各テストプログラムを実行することにより前記検証対象プログラムの不具合箇所を推定する不具合箇所推定部と、
    前記推定した各不具合箇所に係る、前記検証対象プログラムの各構成要素を前記構成要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する実行優先度決定部と、
    前記決定した修正順位に従って、前記検証対象プログラムの各構成要素を、当該各構成要素に対応した修正プログラムにより修正する自動修正実行制御部と、
    を備える、プログラム修正装置。
  2. 前記実行優先度決定部は、前記特定した各構成要素の間に処理上の依存関係があるか否かを判定し、処理上の依存関係があると判定した場合に、前記処理上の依存関係に基づいて、前記各構成要素の間に異なる修正順位を設定する、
    請求項1に記載のプログラム修正装置。
  3. 前記実行優先度決定部は、前記特定した各構成要素のうち第1の構成要素が第2の構成要素を実行させているという依存関係があるか否かを判定し、当該依存関係があると判定した場合には、前記第2の構成要素に係る修正順位を前記第1の構成要素に係る修正順位より高く設定する、
    請求項2に記載のプログラム修正装置。
  4. 前記実行優先度決定部は、前記特定した各構成要素のうち第1の構成要素及び第2の構成要素が第3の構成要素の情報を参照しているという依存関係があるか否かを判定し、当該依存関係があると判定した場合には、前記第3の構成要素に係る修正順位を前記第1の構成要素及び前記第2の構成要素に係る修正順位より高く設定する、
    請求項2に記載のプログラム修正装置。
  5. 前記修正プログラムによる前記各構成要素の修正履歴を記憶した情報記憶部をさらに備え、
    前記実行優先度決定部は、前記特定した各構成要素の修正の成功率又は必要度を前記修正履歴に基づき推定し、推定した成功率又は必要度に基づき、前記各構成要素の修正順位を決定する、
    請求項1に記載のプログラム修正装置。
  6. 前記各構成要素の修正に用いた前記修正プログラムの数の情報を当該各構成要素ごとに記憶する情報記憶部をさらに備え、
    前記実行優先度決定部は、前記特定した各構成要素の修正に用いた修正プログラムの数を、前記修正プログラムの数の情報に基づき特定し、特定した修正プログラムの数に基づき、前記各構成要素の修正順位を決定する、
    請求項1に記載のプログラム修正装置。
  7. 前記テストプログラムの実行時間の情報を前記各構成要素ごとに記憶する情報記憶部をさらに備え、
    前記実行優先度決定部は、前記特定した各構成要素に係るテストプログラムの各実行時間を、前記実行時間の情報に基づき推定し、推定した各実行時間に基づき、前記各構成要素の修正順位を決定する、
    請求項1に記載のプログラム修正装置。
  8. 前記自動修正実行制御部は、前記各構成要素の間の処理上の依存関係に関して、他の構成要素の前提となる構成要素を特定し、特定した構成要素に対応した前記修正プログラムにより修正された新たな検証対象プログラムを生成し、
    前記不具合箇所推定部は、前記新たな検証対象プログラムに対して、前記複数のテストプログラムを実行することにより前記検証対象プログラムの不具合箇所を推定し、
    前記実行優先度決定部は、前記推定した各不具合箇所に係る、前記新たな検証対象プログラムの各構成要素を前記構成要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する、
    請求項1に記載のプログラム修正装置。
  9. 情報処理装置が、
    検証対象プログラムの各構成要素の情報と、前記各構成要素を検証する各テストプログラムの情報とを対応づけた情報である構成要素情報を記憶する構成情報記憶処理と、
    複数の前記テストプログラムを実行することにより前記検証対象プログラムの不具合箇所を推定する不具合箇所推定処理と、
    前記推定した各不具合箇所に係る、前記検証対象プログラムの各構成要素を前記構成要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する実行優先度決定処理と、
    前記決定した修正順位に従って、前記検証対象プログラムの各構成要素を、当該各構成要素に対応した修正プログラムにより修正する自動修正実行制御処理と、
    を実行する、プログラム修正方法。
  10. 情報処理装置に、
    検証対象プログラムの各構成要素の情報と、前記各構成要素を検証する各テストプログラムの情報とを対応づけた情報である構成要素情報を記憶する構成情報記憶処理と、
    複数の前記テストプログラムを実行することにより前記検証対象プログラムの不具合箇所を推定する不具合箇所推定処理と、
    前記推定した各不具合箇所に係る、前記検証対象プログラムの各構成要素を前記構成要素情報により特定し、特定した各構成要素間の関係に基づき、前記各構成要素の修正順位を決定する実行優先度決定処理と、
    前記決定した修正順位に従って、前記検証対象プログラムの各構成要素を、当該各構成要素に対応した修正プログラムにより修正する自動修正実行制御処理と、
    を実行させる、プログラム修正プログラム。
JP2021085423A 2021-05-20 2021-05-20 プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム Active JP7686452B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021085423A JP7686452B2 (ja) 2021-05-20 2021-05-20 プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021085423A JP7686452B2 (ja) 2021-05-20 2021-05-20 プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム

Publications (2)

Publication Number Publication Date
JP2022178544A true JP2022178544A (ja) 2022-12-02
JP7686452B2 JP7686452B2 (ja) 2025-06-02

Family

ID=84239140

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021085423A Active JP7686452B2 (ja) 2021-05-20 2021-05-20 プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム

Country Status (1)

Country Link
JP (1) JP7686452B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7625737B1 (ja) 2024-02-28 2025-02-03 楽天グループ株式会社 複数のテストシーケンスを実行する順序を制御するプログラム、制御装置、ならびに、制御方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212387A (ja) * 1996-01-31 1997-08-15 Matsushita Electric Works Ltd プログラム開発支援装置
JPH09319611A (ja) * 1996-05-28 1997-12-12 Matsushita Electric Works Ltd プログラム開発支援装置
JPH11212824A (ja) * 1998-01-27 1999-08-06 Matsushita Electric Works Ltd プログラムテスト方法、プログラムテスト装置及びテストプログラム記憶媒体
JP2007041804A (ja) * 2005-08-02 2007-02-15 Sharp Corp プログラム生成装置、プログラム検証装置および検証プログラム
JP2015022386A (ja) * 2013-07-17 2015-02-02 株式会社日立製作所 鉄道運行管理システム及び検証装置
JP2018133081A (ja) * 2017-02-17 2018-08-23 富士通株式会社 ソフトウェアプログラム修復のためのメソッド呼び出し合成
JP2020129372A (ja) * 2019-02-07 2020-08-27 富士通株式会社 自動化されたソフトウェアプログラム修復

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212387A (ja) * 1996-01-31 1997-08-15 Matsushita Electric Works Ltd プログラム開発支援装置
JPH09319611A (ja) * 1996-05-28 1997-12-12 Matsushita Electric Works Ltd プログラム開発支援装置
JPH11212824A (ja) * 1998-01-27 1999-08-06 Matsushita Electric Works Ltd プログラムテスト方法、プログラムテスト装置及びテストプログラム記憶媒体
JP2007041804A (ja) * 2005-08-02 2007-02-15 Sharp Corp プログラム生成装置、プログラム検証装置および検証プログラム
JP2015022386A (ja) * 2013-07-17 2015-02-02 株式会社日立製作所 鉄道運行管理システム及び検証装置
JP2018133081A (ja) * 2017-02-17 2018-08-23 富士通株式会社 ソフトウェアプログラム修復のためのメソッド呼び出し合成
JP2020129372A (ja) * 2019-02-07 2020-08-27 富士通株式会社 自動化されたソフトウェアプログラム修復

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7625737B1 (ja) 2024-02-28 2025-02-03 楽天グループ株式会社 複数のテストシーケンスを実行する順序を制御するプログラム、制御装置、ならびに、制御方法

Also Published As

Publication number Publication date
JP7686452B2 (ja) 2025-06-02

Similar Documents

Publication Publication Date Title
CN109359468B (zh) 漏洞检测方法、装置及设备
US20080307264A1 (en) Parameterized test driven development
US10289536B2 (en) Distinguishing public and private code in testing environments
US9921947B2 (en) Test selection method and test selection apparatus
CN108255576B (zh) 虚拟机热迁移异常处理方法、装置和存储介质
US11314610B2 (en) Auto-recovery for software systems
US11023366B2 (en) Diminution of test templates in test suites
US20200341887A1 (en) Device, System, and Method for Automatically Detecting and Repairing a Bug in a Computer Program using a Genetic Algorithm
JP2022178544A (ja) プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム
US20150310332A1 (en) Predicting outcome based on input
JP2010102454A (ja) 情報処理装置、情報処理プログラム
JP2016167180A (ja) デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム
US11256813B2 (en) System vulnerability mitigation
JP6665576B2 (ja) 支援装置、支援方法及びプログラム
CN113297038B (zh) 监控与数据处理方法、装置、设备及监控系统、数据中心
JP5962350B2 (ja) プログラム、情報処理装置およびテスト方法
KR102002545B1 (ko) 가상화를 통한 코드 테스트 수행 자동화 방법 및 장치
JP7296426B2 (ja) 情報システムを管理する管理システム及び管理方法
JP7596213B2 (ja) プログラム修正装置、プログラム修正方法、及びプログラム修正プログラム
JP7504775B2 (ja) 計算機システム、プログラム、及びプログラム修正方法
JP5181699B2 (ja) コンピュータ試験方法,プログラムおよび情報処理装置
US20250138989A1 (en) Risk analysis of test failures that occurred during a testing phase of a continuous integration pipeline
JP7562483B2 (ja) 不具合箇所特定支援装置および不具合箇所特定支援方法
US20250021438A1 (en) Detecting an error in an updated software package by automatically rebuilding related downstream products
JP7456843B2 (ja) プログラム修正装置、プログラム修正方法、および、プログラム修正プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240213

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20241126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20241217

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20250213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20250311

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20250424

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20250521

R150 Certificate of patent or registration of utility model

Ref document number: 7686452

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150