(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-18
(45)【発行日】2024-09-27
(54)【発明の名称】ソースコード修正支援装置及びソースコード修正支援方法
(51)【国際特許分類】
G06F 11/36 20060101AFI20240919BHJP
G06F 8/75 20180101ALI20240919BHJP
【FI】
G06F11/36 184
G06F8/75
(21)【出願番号】P 2021101977
(22)【出願日】2021-06-18
【審査請求日】2024-02-01
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000176
【氏名又は名称】弁理士法人一色国際特許事務所
(72)【発明者】
【氏名】佐藤 直人
(72)【発明者】
【氏名】ファン ティタン フエン
【審査官】松平 英
(56)【参考文献】
【文献】特開2010-266909(JP,A)
【文献】特開平5-210537(JP,A)
【文献】特開2009-217664(JP,A)
【文献】特開2020-67859(JP,A)
【文献】米国特許第8479169(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/38
8/60-8/77
9/44-9/445
9/451
11/07
11/28-11/36
(57)【特許請求の範囲】
【請求項1】
不具合が発生する入力条件に基づき開発者によって更新された更新済みソースコードを保持する記憶装置と、
前記更新済みソースコードを評価するための評価コードのひな型として、前記入力条件の成否の各ケースに関する条件分岐文を含むひな型を生成する処理と、所定の評価者の端末に対し、前記ひな型に基づく前記評価コードの作成依頼を通知する処理と、前記作成依頼に応じた前記評価者による、前記更新済みソースコードへのアクセスを制御する処理と、前記ひな型における前記条件分岐文の本文に対して、前記評価者による編集を受け付ける処理と、前記編集を経た前記評価コードの全ての制御パスを実行する入力値のリストを生成し、当該入力値を入力に前記評価コードを自動実行する評価コードドライバを生成する処理を実行する演算装置と、
を含むことを特徴とするソースコード修正支援装置。
【請求項2】
前記演算装置は、
前記ひな型の生成に際し、前記入力条件が成立しない場合の前記条件分岐文の本文において、更新前のソースコードの出力結果と前記更新済みのソースコードの出力結果が一致するかを評価する手続きを記述するものである、
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項3】
前記演算装置は、
前記ひな型の生成に際し、前記入力条件の成否の各ケースについて、更新前のソースコードに対して記号実行を行うことで得られるパス制約条件を構成する節、及び当該節を構成する変数の境界値に基づく条件分岐文を記述するものである、
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項4】
前記演算装置は、
前記ひな型の生成に際し、前記入力条件の成否の各ケースについて、前記更新済みのソースコードに対して記号実行を行うことで得られるパス制約条件を構成する節、及び当該節を構成する変数の境界値に基づく条件分岐文を記述するものである、
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項5】
前記演算装置は、
前記ひな型の生成に際し、前記入力条件の成否の各ケースについて、前記入力条件を構成する任意の2変数間の関係式に基づく条件分岐文を記述するものである、
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項6】
前記演算装置は、
前記評価者による、更新済みのソースコードに関して得られるパス制約条件を構成する節、及び当該節を構成する変数の境界値に基づく条件分岐文を踏まえた、前記変数の境界値に基づく特定の条件分岐文が不要との判断に対応し、当該条件分岐文を結合する入力を受け付けて、当該条件分岐文を結合した結果を画面表示する処理と、
前記画面表示において、前記条件分岐文の本文に対して、前記評価者による編集を受け付け、前記編集の結果を、前記ひな型に反映する処理を実行するものである、
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項7】
前記演算装置は、
前記ひな型に関して作成した条件分岐文の分岐条件の充足可能性を判定し、充足不能の場合、当該分岐条件を削除するものである、
ことを特徴とする請求項1に記載のソースコード修正支援装置。
【請求項8】
情報処理装置が、
不具合が発生する入力条件に基づき開発者によって更新された更新済みソースコードを保持する記憶装置を備えて、
前記更新済みソースコードを評価するための評価コードのひな型として、前記入力条件の成否の各ケースに関する条件分岐文を含むひな型を生成する処理と、所定の評価者の端末に対し、前記ひな型に基づく前記評価コードの作成依頼を通知する処理と、前記作成依頼に応じた前記評価者による、前記更新済みソースコードへのアクセスを制御する処理と、前記ひな型における前記条件分岐文の本文に対して、前記評価者による編集を受け付ける処理と、前記編集を経た前記評価コードの全ての制御パスを実行する入力値のリストを生成し、当該入力値を入力に前記評価コードを自動実行する評価コードドライバを生成する処理と、
を実行することを特徴とするソースコード修正支援方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコード修正支援装置及びソースコード修正支援方法に関するものである。
【背景技術】
【0002】
ソフトウェアの不具合を検出するための手段としてテストが一般的である。しかし、入力パラメータの数が多く、各パラメータの取り得る値の範囲が広いソフトウェアの場合、あらゆる入力値の組合せを網羅的にテストすることは困難である。これは、いわゆる組合せ爆発と呼ばれる状況に該当する。
【0003】
そのため、稀な条件下で発生する不具合をソフトウェアに作り込んでしまった場合、その稼働前のテストでは検出できず、本番稼働後に不具合が発現することがある。本番稼働後に不具合が発生すると、原因分析の手がかりとなる情報を十分に取得できないケースが多い。その場合、不具合発生条件の特定に時間がかかることがある。
【0004】
その結果、不具合の修正が遅れ、長期間のシステム停止や、大規模なリコールに繋がりうるという問題がある。
【0005】
こうした問題に対応する従来技術としては、例えば、プログラムの修正前のテスト資産を利用して、プログラム修正後のテストのコストを削減する技術(特許文献1参照)などが提案されている。
【0006】
この技術は、不具合の発生をログから検知した場合に、その不具合が発生する入力条件とその際の実行パスを提示する方法を示している。これにより、ソフトウェア開発者は、不具合が発生した場所と条件を認識して、修正方針の検討が可能となる。また、そのことで、不具合の修正にかかる時間を短縮可能とされている。
【0007】
また他にも、誤判定の疑いがあるテスト結果の検出効率の向上を図る情報処理装置(特許文献2参照)なども提案されている。
【0008】
この情報処理装置は、第1のプログラムおよび前記第1のプログラムが変更された第2のプログラムから共に期待値が返される入力値を前記第1のプログラムに与えた場合の第1の実行経路に関する条件式の系列を示すパスコンディションと、前記第1の実行経路に関する返値を示す数式と、を含む第1のシンボリック実行結果を取得する第1の取得部と、前記入力値を前記第2のプログラムに与えた場合の第2の実行経路に関する条件式の系列を示すパスコンディションと、前記第2の実行経路に関する返値を示す数式と、を含む第2のシンボリック実行結果を取得する第2の取得部と、前記第1の取得部によって取得された第1のシンボリック実行結果内のパスコンディションに、前記第2の取得部によって取得された第2のシンボリック実行結果内のパスコンディションが包含されているか否か、または、前記第1および第2のシンボリック実行結果内の数式が一致するか否か、に基づいて、前記入力値による前記第2のプログラムのテスト結果に関する信頼性の高さの指標になる信頼度を決定する決定部と、前記決定部によって決定された信頼度を出力する出力部と、有するものである。
【0009】
また、Webアプリケーションのテスト工数を削減することのできるテストデータ生成装置、テストデータ生成方法及びプログラムを提供する技術(特許文献3参照)なども提案されている。
【0010】
この技術は、Webアプリケーションが提供する画面遷移に関するテストのテストデータを生成するテストデータ生成装置であって、前記画面遷移のうち、1以上の画面遷移の選択を受け付ける選択受付手段と、前記Webアプリケーションのフレームワークで規定又は定義されている制約の記述仕様を用いて、前記Webアプリケーションのソースコードを解析し、該ソースコードから制約を抽出する抽出手段と、前記選択された画面遷移の遷移元の画面に含まれる入力フォームの前記制約を用いて、同値分割及び境界値分析のテスト観点を満たす複数のテストデータを生成する生成手段と、
【0011】
を有するテストデータ生成装置に関するものである。
【先行技術文献】
【特許文献】
【0012】
【文献】特開2014-21686号公報
【文献】特開2013-196350号公報
【文献】特開2020-67859号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
上記先行技術を適用することで、本番稼働中に発生した不具合の特定を効率的に行うことができるようになる。しかし、不具合の修正は人手で行うため、修正の間違いや漏れ、またはリグレッションの可能性がある。
【0014】
これらの修正誤りを防止するためには、修正後のソフトウェアをテストすることが重要である。ところが、稼働前のテストでは当該不具合を検出できなかったことを考えると、既存のテストコードは有効ではない。
【0015】
そのため、新たなテストコードを作成する必要がある。一方、ソースコードの修正を行った開発者がテストコード作成も担当する場合、ソースコードと同様の誤りをテストコードに埋め込む可能性が高い。
【0016】
そのため通常は、評価者によるソースコードレビューを行う。しかし、評価者は既に誤りが埋め込まれたソースコードをレビューするため、開発者と同じ思考に陥り、誤りを見逃す可能性がある。
【0017】
特にソフトウェアの仕様が複雑あるいは曖昧で、仕様を実装する方法が複数考えられる場合、開発者は、ソースコードの実行速度向上や可読性向上などの観点から、不具合に直接関係する箇所だけでなく、ソースコード全体の構造を修正することがある。
【0018】
その結果、修正後のソースコードが、「不具合が発生する入力条件」(特許文献1の技術により特定されうる)とは異なる条件で分岐するような制御フローで構成されるケースがある。すると評価者は、上記「不具合が発生する入力条件」に関わる処理を過不足なく修正できているか正しく確認できず、誤りを見逃す可能性がある。
【0019】
また従来は、開発者がテストコードを作成した後、評価者によるコードレビューを行うため、ソースコードの修正が完了するまで時間がかかる問題もある。
【0020】
そこで本発明の目的は、修正後のソースコードを適宜に評価し、修正の漏れや誤り等を効率良く回避可能とする技術を提供することにある。
【課題を解決するための手段】
【0021】
上記課題を解決する本発明のソースコード修正支援装置は、不具合が発生する入力条件に基づき開発者によって更新された更新済みソースコードを保持する記憶装置と、前記更新済みソースコードを評価するための評価コードのひな型として、前記入力条件の成否の各ケースに関する条件分岐文を含むひな型を生成する処理と、所定の評価者の端末に対し、前記ひな型に基づく前記評価コードの作成依頼を通知する処理と、前記作成依頼に応じた前記評価者による、前記更新済みソースコードへのアクセスを制御する処理と、前記ひな型における前記条件分岐文の本文に対して、前記評価者による編集を受け付ける処理と、前記編集を経た前記評価コードの全ての制御パスを実行する入力値のリストを生成し、当該入力値を入力に前記評価コードを自動実行する評価コードドライバを生成する処理を実行する演算装置と、を含むことを特徴とする。
【0022】
また、本発明のソースコード修正支援方法は、情報処理装置が、不具合が発生する入力条件に基づき開発者によって更新された更新済みソースコードを保持する記憶装置を備えて、前記更新済みソースコードを評価するための評価コードのひな型として、前記入力条件の成否の各ケースに関する条件分岐文を含むひな型を生成する処理と、所定の評価者の端末に対し、前記ひな型に基づく前記評価コードの作成依頼を通知する処理と、前記作成依頼に応じた前記評価者による、前記更新済みソースコードへのアクセスを制御する処理と、前記ひな型における前記条件分岐文の本文に対して、前記評価者による編集を受け付ける処理と、前記編集を経た前記評価コードの全ての制御パスを実行する入力値のリストを生成し、当該入力値を入力に前記評価コードを自動実行する評価コードドライバを生成する処理と、を実行することを特徴とする。
【発明の効果】
【0023】
本発明によれば、修正後のソースコードを適宜に評価し、修正の漏れや誤り等を効率良く回避可能となる。
【図面の簡単な説明】
【0024】
【
図1】本実施形態のソースコード修正支援装置を含むネットワーク構成図である。
【
図2】本実施形態におけるソースコード修正支援装置のハードウェア構成例を示す図である。
【
図3】本実施形態におけるソースコード修正支援装置のブロック構成例を示す図である。
【
図4】本実施形態におけるソースコード修正・評価の流れを示す概念図である。
【
図5】本実施形態におけるソースコード修正支援方法のフロー例を示す図である。
【
図6】本実施形態における評価者アドレスの構成例を示す図である。
【
図7】本実施形態におけるソースコード修正支援方法のフロー例を示す図である。
【
図8】本実施形態における不具合発生したソースコードの例を示す図である。
【
図9】本実施形態における更新済みソースコードの例を示す図である。
【
図10】本実施形態における不具合が発生する入力条件の例を示す図である。
【
図11】本実施形態における更新前後のソースコードの概念例を示す図である。
【
図12】本実施形態における評価コードひな型の意義を示す図である。
【
図13】本実施形態における評価コードひな型の例を示す図である。
【
図14】本実施形態のソースコード修正支援方法のフロー例を示す図である。
【
図15】本実施形態における評価コードドライバの例を示す図である。
【
図16】本実施形態のソースコード修正支援方法のフロー例を示す図である。
【
図17】本実施形態における評価コードひな型への追記例を示す図である。
【
図18】本実施形態における分岐条件結合レビューの例を示す図である。
【
図19】本実施形態における分岐条件結合レビューの例を示す図である。
【
図20】本実施形態における分岐条件結合レビューの例を示す図である。
【発明を実施するための形態】
【0025】
<システム構成>
以下に本発明の実施形態について図面を用いて詳細に説明する。
図1は、本実施形態のソースコード修正支援装置100を含むネットワーク構成例を示す図である。
図1に示すソースコード修正支援装置100は、修正後のソースコードを適宜に評価し、修正の漏れや誤り等を効率良く回避可能とするコンピュータである。
【0026】
本実施形態のソースコード修正支援装置100は、
図1で示すように、ネットワーク1を介して、開発者端末200及び評価者端300と通信可能に接続されている。よって、これらを総称して、ソースコード修正支援システム10としてもよい。
【0027】
なお、開発者端末200は、ソフトウェアの開発者が操作する端末である。具体的には、スマートフォン、タブレット端末、パーソナルコンピュータなどを想定できる。この開発者は、不具合が発生する入力条件に関して修正するとともに、当該修正箇所以外についてもソースコードを更新する者である。開発者端末200で更新されたソースコードすなわち更新済みソースコードは、ネットワーク1を介してソースコード修正支援装置100に提供される。
【0028】
また、評価者端末300は、本実施形態のソースコード修正支援装置100からの依頼に応じた評価者が操作する端末である。この依頼は、上述の更新済みソースコードを評価するための評価コードのひな型に基づく、評価コードの作成依頼である。なお、評価者は、上述の開発者とは異なる人物である。また、評価者は、評価者端末300を操作し、上述のひな型における条件分岐文の本文に対して編集を実行する。評価者端末300は、こうした評価者による編集内容についてソースコード修正支援装置100に提供する。
【0029】
<ハードウェア構成>
また、本実施形態のソースコード修正支援装置100のハードウェア構成は、
図2に以下の如くとなる。すなわちソースコード修正支援装置100は、外部記憶装置101、メモリ103、CPU104、入力装置105、表示装置106、通信装置107、及び外部媒体入出力装置108、を備える。
【0030】
このうち外部記憶装置101は、SSD(Solid State Drive)やハードディスクドライブなど適宜な不揮発性記憶素子で構成される。
【0031】
また、メモリ103は、RAMなど揮発性記憶素子で構成される。
【0032】
また、CPU104は、外部記憶装置101に保持されるプログラム102をメモリ103に読み出すなどして実行し装置自体の統括制御を行なうとともに各種判定、演算及び制御処理を行なう演算装置である。
【0033】
また、入力装置105は、ユーザからのキー入力や音声入力を受け付けるキーボードやマウス、マイクなどを想定する。
【0034】
また、表示装置106は、CPU104による処理データの表示を行うディスプレイを想定する。
【0035】
また、通信装置107は、ネットワーク1と接続して開発者端末200及び評価者端末300との通信処理を担うネットワークインターフェイスカード等を想定する。
【0036】
また、外部媒体入出力装置108は、DVDやUSBメモリなどの外部記憶媒体とデータの授受可能に接続するインターフェイスを想定する。
【0037】
また、外部記憶装置101には、本実施形態のソースコード修正支援装置として必要な機能を実装する為のプログラム102に加えて、評価者アドレス125が少なくとも記憶されている(後述)。また、外部記憶装置104ないしメモリ103は、不具合発生条件126、更新済みソースコード127、更新前ソースコード128、及び評価コード129、を少なくとも処理に必要な時間に応じて一時的に保持する。
【0038】
<機能構成>
続いて、本実施形態のソースコード修正支援装置100の備える構成について説明する。
図3は、本実施形態におけるソースコード修正支援装置100のブロック構成例を示す図である。また、
図4は、本実施形態におけるソースコード修正・評価の流れを示す概念図である。
【0039】
本実施形態のソースコード修正支援装置100は、評価リクエスト機能110、更新済みソースコードアクセス制御機能111、評価コードひな型生成機能112、評価コード編集機能113、評価コード編集支援機能114、及び評価コードドライバ生成機能115の各機能を備える。これら各機能は、CPU104がプログラム102を実行することで実装される。
【0040】
また、ソースコード修正支援装置100は、上述の各機能における処理に伴い、評価者アドレス125、不具合発生入力条件126、更新済みソースコード127、更新前ソースコード128、及び評価コード129の各データを、外部記憶装置101ないしメモリ103で保持するものとする。
【0041】
このうち評価リクエスト機能110は、評価者アドレス125に基づき特定した評価者の評価者端末300に対し、ひな型に基づく評価コード129の作成依頼を通知する。このひな型は、更新済みソースコード127を評価するための評価コードのひな型である。また、更新済みソースコード127は、不具合が発生する入力条件126に基づき開発者によって修正、更新されたソースコードである。
【0042】
なお、更新済みソースコード127は、不具合ソースコードすなわち更新前ソースコードに関して発生した不具合発生箇所とその入力条件に基づいて、開発者が不具合解消のための修正やそれに伴うソースコード全体の記載見直しを行った結果である。この更新済みソースコード127は、開発者端末200でからソースコード修正支援装置100に登録される。
【0043】
こうしたソースコード修正支援装置100が備える機能のうち、更新済みソースコードアクセス制御機能111は、更新済みソースコード127に対してアクセス可能な者を、開発者のみに制御する。この制御は、例えば、予め保持する開発者の識別情報に基づき実行することを想定できる。
【0044】
また、評価コードひな型生成機能112は、更新済みソースコード127を評価するための評価コードのひな型として、上述の入力条件126の成否の各ケースに関する条件分岐文を含むひな型を生成する。
【0045】
また、評価コード編集機能113は、上述のひな型における条件分岐文の本文に対して、評価者による編集を受け付ける。
【0046】
また、評価コード編集支援機能114は、上述の評価者による、更新済みのソースコード127に関して得られるパス制約条件を構成する節、及び当該節を構成する変数の境界値に基づく条件分岐文を踏まえた、変数の境界値に基づく特定の条件分岐文が不要との判断に対応し、当該条件分岐文を結合する入力を受け付けて、当該条件分岐文を結合した結果を画面表示する。また、評価コード編集支援機能114は、この画面表示において、条件分岐文の本文に対して、評価者による編集を受け付け、当該編集の結果を上述のひな型に反映する。
【0047】
また、評価コードドライバ生成機能115は、上述の評価者による編集を経た評価コードの全ての制御パスを実行する入力値のリストを生成し、当該入力値を入力に評価コードを自動実行する評価コードドライバを生成する。また、評価コードドライバ生成機能115は、上述のひな型に関して作成した条件分岐文の分岐条件の充足可能性を判定し、充足不能の場合、当該分岐条件を削除する。
【0048】
<フロー例:評価リクエスト機能>
以下、本実施形態におけるソースコード修正支援方法の実際手順について図に基づき説明する。以下で説明するソースコード修正支援方法に対応する各種動作は、ソースコード修正支援装置100がメモリ等に読み出して実行するプログラムによって実現される。そして、このプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【0049】
図5は、本実施形態における修正支援方法のフロー例を示す図である。この場合、修正支援装置100の評価リクエスト機能110は、開発者端末200からの更新済みソースコード127の送信を受け付けて、これを検知する(s1)。
【0050】
続いて、上述の評価リクエスト機能110は、更新済みソースコード127と対応する更新前ソースコード128、及び不具合発生入力条件126を取得する(s2)。
【0051】
この処理のため、ソースコード修正支援装置100は、外部記憶装置101において、更新済みソースコード127と送信前ソースコード128を対応付けて保持しているものとする。また、不具合発生入力条件126は、後述する記号実行により得られるものとする。
【0052】
続いて、上述の評価リクエスト機能110は、外部記憶装置101から評価者アドレス125を取得する(s3)。なお、上述の評価者アドレス125は、
図6で示すように、評価者を一意に特定するIDをキーとして、当該評価者のアドレスを紐付けレコードの集合体となっている。なお、この場合のアドレスは、評価者端末300に付与されたメールアドレスやIPアドレスを想定する。
【0053】
また、上述の評価リクエスト機能110は、評価コードひな型生成機能112を実行することで、評価コードひな型を取得する(s4)。この評価コードひな型生成機能112における処理の詳細は後述する。
【0054】
また、上述の評価リクエスト機能110は、評価者端末300に対して、更新前ソースコード128、不具合発生入力条件126、およびs4で得た評価コードひな型を送信し(s5)、処理を終了する。
【0055】
<フロー例:評価コードひな型生成機能>
続いて、上述の評価コードひな型生成機能112における処理フローについて、
図7~
図13に基づき説明する。この場合、ソースコード修正支援装置100の評価コードひな
型生成機能112は、不具合発生入力条件126の成否に基づく条件分岐文を作成する(s10)。
【0056】
また、評価コードひな型生成機能112は、不具合発生入力条件126、更新前ソースコード128の分岐条件、または更新済みソースコード127の分岐条件に含まれる変数の境界条件を取得する(s11)。
【0057】
なお、上述の更新前ソースコード128の具体的な例を
図8にて示す。この更新前ソースコード128は、不具合が発生したソースコードである。
図8で示す例では、x=0、y=0の時は、「high」になるべきところ、「low」になってしまうという不具合(仕様不一致)が発生しているソースコードとなっている。
【0058】
また、更新済みソースコード127の具体的な例を
図9に示す。この更新済みソースコード127は、開発者が上述の不具合に関して該当箇所を修正し、また可読性などを踏まえた全体として見直しをかけて更新したソースコードである。ここでは、x==0 an
d y==0の時の誤りは開発者により修正されたが、(x<0 and y==0)
or (x>0 and y==0)の時に、いわゆるゼロ割が発生する。つまり、新たな不具合が内在した状態となっている。
【0059】
この場合、評価コードひな型生成機能112は、この更新済みソースコード127に関して記号実行を実施し、不具合が発生する入力条件すなわち不具合発生入力条件126(
図10参照)を取得する。
【0060】
図8~
図10で示す更新前後のソースコードそれぞれにおける不具合について、
図11にてxy座標面での領域別に示した。更新前ソースコード128における不具合発生入力条件126は、既に述べたように、x=0、y=0のケースであり、原点座標上の点がこの不具合に対応する。一方、更新済みソースコード127における不具合発生入力条件126は、(x<0 and y==0) or (x>0 and y==0)のケースで
あり、y軸線上におけるx=0以外の線分領域に対応する。
【0061】
また、評価コードひな型生成の意義について、
図12に示す。
図12で示すように、更新前ソースコード128を記号実行して得た不具合発生入力条件126が、「パス制約α」、「パス制約β」、「パス制約γ」、だったとする。
【0062】
この不具合発生入力条件126を解消すべく、開発者がソースコードの修正や更新を行った結果、この更新後のソースコード上では不具合発生入力条件126の境界が埋没する。そのため、更新済みソースコード127のみをレビューすると、開発者による修正や更新の誤りを見逃す可能性が高い。そこで、評価コードひな型によって、そのような修正誤りの見逃しを低減することに意義がある。
【0063】
また、評価コードひな型生成機能112は、不具合発生入力条件126を構成する任意の2変数について、それら2変数の関係式を作成する(s12)。
図13に示す評価コードひな型の例では、変数x、変数yの関係(x==y)について、分岐条件に採用している。
【0064】
なお、
図13にて示す評価コードひな型の例では、こうした2変数の関係式の具体例の他、不具合発生入力条件の成否それぞれにケースに関して、不具合発生入力条件126での分岐を規定する分岐条件、変数xに関する境界条件で規定した分岐条件、変数yに関する境界条件で規定した分岐条件、更新前ソースコード128の境界条件で既定した分岐条件、などについても生成し、記述した状態を示している。
【0065】
続いて、評価コードひな型生成機能112は、上述のs10で作成した条件分岐文のうち、上述の関係式を未作成の分岐条件があるか判定する(s13)。
【0066】
上述の判定の結果、関係式未作成の分岐条件がない場合(s13:No)、評価コードひな型生成機能112は、処理をs18に遷移させる。
【0067】
一方、上述の判定の結果、関係式未作成の分岐条件がある場合(s13:Yes)、評価コードひな型生成機能112は、上述の境界条件および関係式を用いて任意の分岐条件を作成する(s14)。
【0068】
続いて、評価コードひな型生成機能112は、作成した分岐条件は充足可能か判定する(s15)。この判定は既知のソルバーを用いて実施すればよい。
【0069】
また、評価コードひな型生成機能112は、上述の判定の結果、作成した分岐条件は充足可能でない場合(s15:No)、充足不能な分岐条件を削除し(s16)、処理をs17に遷移させる。
【0070】
一方、上述の判定の結果、作成した分岐条件は充足可能である場合(s15:Yes)、
【0071】
評価コードひな型生成機能112は、上述の不具合発生入力条件126の成否に基づく条件分岐文の本文に、s10で作成した分岐条件を用いた条件分岐文を作成し(s17)、処理をs13に戻す。
【0072】
また、評価コードひな型生成機能112は、上述の不具合発生入力条件126が成立する条件分岐文の本文に、更新前ソースコード128の出力結果を返す手続きを記入し(s18)、処理を終了する。
【0073】
<フロー例:評価コードドライバ生成機能>
続いて、上述の評価コードドライバ生成機能115における処理フローについて、
図14及び
図15に基づき説明する。この場合、ソースコード修正支援装置100の評価コードドライバ生成機能115は、評価コードに対して記号実行を行う(s20)。これにより、評価コードドライバ生成機能115は全てのパスを取得し、そのパスを通るテスト入力値を作成する(
図15)。
【0074】
また、評価コードドライバ生成機能115は、上述の記号実行(
図15:「symbolicExec(spec)」)によって得られたパス制約条件に対して、充足可能性チェックを行うことで充足解を求める(s21)。
【0075】
続いて、評価コードドライバ生成機能115は、s21の結果、充足解が得られたか判定する(s22)。
【0076】
上述の判定の結果、充足解が得られなかった場合(s22:No)評価コードドライバ生成機能115は、処理をs24に遷移させる。
【0077】
一方、上述の判定の結果、充足解が得られた場合(s22:Yes)、評価コードドライバ生成機能115は、上述の充足解をテスト入力値(
図15:m)として与え、評価コ
ード(
図15:「spec」)をオラクルに、更新済みソースコード127(
図15:main_updated(m[x],m[y]))のテストを実行するソースコードを作成し(s23)、処理を終了
する。
【0078】
続いて、評価コードドライバ生成機能115は、充足解のない実行パスを、評価コードから削除し(s24)、処理を終了する。
【0079】
<フロー例:評価コード編集支援機能>
続いて、上述の評価コード編集支援機能114における処理フローについて、
図16~
図20に基づき説明する。この場合、評価コード編集支援機能114は、評価コードの表示画面において、評価者端末300から、複数の分岐条件の指定を受け付ける(s30)。
図18で例示するビューでは、「if y==0」、「else」について指定を受け、また、「結合」ボタンが押下されている。
【0080】
また、評価コード編集支援機能114は、上述の指定および結合指示に応じて、指定された分岐条件を論理和で結合した式の充足可能性を、既知のソルバーによってチェックする(s31)。
【0081】
続いて、評価コード編集支援機能114は、上述の充足可能性のチェックの結果、結合した式が充足可能ではない場合(s32:No)、評価コード編集支援機能114は、処理を終了する。
【0082】
一方、上述の判定の結果、充足可能である場合(s32:Yes)、評価コード編集支援機能114は、評価コードの表示画面において、指定された分岐条件を結合した条件分岐文を表示する(s33)。
図19にて例示するビューでは、上述のs30で指定された分岐条件をマージして、これを評価者端末300にて表示させている。
【0083】
続いて、評価コード編集支援機能114は、上記条件分岐文の本文に対して、評価者からの、期待する出力値の入力を受け付ける(s34)。ここで受け付けた出力値は、例えば、「return“x is high”」であるとする。
【0084】
また、評価コード編集支援機能114は、評価コードにおいて、上記期待する出力値を、結合対象となった条件分岐文の本文に追記し(s35)、処理を終了する。
図19にて例示するビューでは、上述のマージされた条件分岐文に、評価者端末300から入力された出力値(期待するもの)である、「return“x is high”」を追記している。なお、
図20で示すように、評価コード編集支援機能114は、上述のマージはあくまでビュー上でのことで、実コード上ではマージをしない運用とする。
【0085】
以上、本発明を実施するための最良の形態などについて具体的に説明したが、本発明はこれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【0086】
こうした本実施形態によれば、開発者とは別のユーザが、先入観を持たずに修正後のソースコードを評価するため、修正誤りを見逃す可能性が低くなる。また、不具合が発生する入力条件に関して、その論理境界および数値境界を漏れなく評価できるため、修正漏れ、修正間違い、リグレッション(以降、まとめて修正誤りと呼ぶ)を見逃す可能性が低くなる。さらには、従来はテストコード作成とコードレビューの2ステップで行っていた評価作業を、評価コード作成の1ステップに短縮できるため、ソースコード修正にかかる時間を短縮できる。
【0087】
すなわち、修正後のソースコードを適宜に評価し、修正の漏れや誤り等を効率良く回避可能となる。
【0088】
本明細書の記載により、少なくとも次のことが明らかにされる。すなわち、本実施形態のソースコード修正支援装置において、前記演算装置は、前記ひな型の生成に際し、前記入力条件が成立しない場合の前記条件分岐文の本文において、更新前のソースコードの出力結果と前記更新済みのソースコードの出力結果が一致するかを評価する手続きを記述するものである、としてもよい。
【0089】
これによれば、更新前後でのソースコード間の整合性を出力値から効率良く検証可能となる。ひいては、修正後のソースコードを適宜に評価し、修正の漏れや誤り等をより効率良く回避可能となる。
【0090】
また、本実施形態のソースコード修正支援装置において、前記演算装置は、前記ひな型の生成に際し、前記入力条件の成否の各ケースについて、更新前のソースコードに対して記号実行を行うことで得られるパス制約条件を構成する節、及び当該節を構成する変数の境界値に基づく条件分岐文を記述するものである、としてもよい。
【0091】
これによれば、更新前の、例えば不具合発生条件が成立しない場合も、不具合発生条件の境界条件での条件分岐を記述し、リグレッションテストを不具合発生の境界値で行うことが可能となる。ひいては、修正後のソースコードを適宜に評価し、修正の漏れや誤り等をより効率良く回避可能となる。
【0092】
また、本実施形態のソースコード修正支援装置において、前記演算装置は、前記ひな型の生成に際し、前記入力条件の成否の各ケースについて、前記更新済みのソースコードに対して記号実行を行うことで得られるパス制約条件を構成する節、及び当該節を構成する変数の境界値に基づく条件分岐文を記述するものである、としてもよい。
【0093】
これによれば、不具合が発生する入力条件に関して、その論路境界及び数値境界を漏れなく評価して、修正漏れ等を的確に回避しやくなる。ひいては、修正後のソースコードを適宜に評価し、修正の漏れや誤り等をより効率良く回避可能となる。
【0094】
また、本実施形態のソースコード修正支援装置において、前記演算装置は、前記ひな型の生成に際し、前記入力条件の成否の各ケースについて、前記入力条件を構成する任意の2変数間の関係式に基づく条件分岐文を記述するものである、としてもよい。
【0095】
これによれば、変数間の関係についても踏まえた条件分岐を記述し、修正漏れ等を的確に回避しやくなる。ひいては、修正後のソースコードを適宜に評価し、修正の漏れや誤り等をより効率良く回避可能となる。
【0096】
また、本実施形態のソースコード修正支援装置において、前記演算装置は、前記評価者による、更新済みのソースコードに関して得られるパス制約条件を構成する節、及び当該節を構成する変数の境界値に基づく条件分岐文を踏まえた、前記変数の境界値に基づく特定の条件分岐文が不要との判断に対応し、当該条件分岐文を結合する入力を受け付けて、当該条件分岐文を結合した結果を画面表示する処理と、前記画面表示において、前記条件分岐文の本文に対して、前記評価者による編集を受け付け、前記編集の結果を、前記ひな型に反映する処理を実行するものである、としてもよい。
【0097】
これによれば、不要な条件分岐文の削除に関して的確かつ効率的に対処可能となる。ひいては、修正後のソースコードを適宜に評価し、修正の漏れや誤り等をより効率良く回避可能となる。
【0098】
また、本実施形態のソースコード修正支援装置において、前記演算装置は、前記ひな型
に関して作成した条件分岐文の分岐条件の充足可能性を判定し、充足不能の場合、当該分岐条件を削除するものである、としてもよい。
【0099】
これによれば、ひな型およびそれに基づく評価コードの品質を効率的に維持可能となる。ひいては、修正後のソースコードを適宜に評価し、修正の漏れや誤り等をより効率良く回避可能となる。
【符号の説明】
【0100】
1 ネットワーク
10 ソースコード修正支援システム
100 ソースコード修正支援装置
101 外部記憶装置
102 プログラム
103 メモリ
104 CPU(演算装置)
105 入力装置
106 表示装置
107 通信装置
108 外部媒体入出力装置
110 評価リクエスト機能
111 更新済みソースコードアクセス制御機能
112 評価コードひな型生成機能
113 評価コード編集機能
114 評価コード編集支援機能
115 評価コードドライバ生成機能
125 評価者アドレス
126 不具合発生入力条件
127 更新済みソースコード
128 更新前ソースコード
129 評価コード
200 開発者端末
300 評価者端末