(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-18
(45)【発行日】2023-12-26
(54)【発明の名称】ソフトウェアプログラム不良位置の識別
(51)【国際特許分類】
G06F 11/36 20060101AFI20231219BHJP
【FI】
G06F11/36 192
(21)【出願番号】P 2019224603
(22)【出願日】2019-12-12
【審査請求日】2022-08-09
(32)【優先日】2018-12-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】サハ・リポン ケイ
(72)【発明者】
【氏名】プラサド・ムクル アール
(72)【発明者】
【氏名】ゴーシュ・インドラディープ
【審査官】山本 俊介
(56)【参考文献】
【文献】特開2014-182451(JP,A)
【文献】特開2009-087354(JP,A)
【文献】特開2017-151977(JP,A)
【文献】特開2007-025820(JP,A)
【文献】特開2016-091138(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
プログラムの複数のプログラミングコード行を取得するステップと、
前記プログラムをテストするための複数のテストケースを取得するステップであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ステップと、
前記テストケースの各々について前記プログラムを実行するステップと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別するステップと、
前記複数のプログラミングコード行のうち少なくとも1つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出するステップであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも1つが不良を含む可能性を示
し、所与のコード行についてのリスクスコアは、不合格で前記所与のコード行により影響されるアサーションの数と、不合格で前記所与のコード行により影響されないアサーションの数と、合格で前記所与のコード行により影響されるアサーションの数と、合格で前記所与のコード行により影響されないアサーションの数とのうち1つ以上を含む、複数のファクタに基づく、ステップと、
を含む方法。
【請求項2】
前記リスクスコアを算出するステップは、正の結果をもたらした少なくとも1つのテストケースと負の結果をもたらした少なくとも1つのテストケースとにさらに基づく、請求項1に記載の方法。
【請求項3】
影響したプログラミング行を識別するステップは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別するステップと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす1つ以上の変数を識別するステップと、
前記1つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見するステップと、
前記1つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別するステップと、
を含む、請求項1に記載の方法。
【請求項4】
前記影響したプログラミングコード行を識別するステップは、プログラムの実行からのデータ依存性に基づく、請求項1に記載の方法。
【請求項5】
前記プログラムの前記複数のプログラミングコード行と前記プログラミングコード行の各々についての対応するリスクスコアとの表示を生成するステップ、をさらに含む請求項1に記載の方法。
【請求項6】
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、請求項1に記載の方法。
【請求項7】
1つ以上のプロセッサ
に動作を実行させ
るコンピュータプログラムであって、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも1つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも1つが不良を含む可能性を示
し、所与のコード行についてのリスクスコアは、不合格で前記所与のコード行により影響されるアサーションの数と、不合格で前記所与のコード行により影響されないアサーションの数と、合格で前記所与のコード行により影響されるアサーションの数と、合格で前記所与のコード行により影響されないアサーションの数とのうち1つ以上を含む、複数のファクタに基づく、ことと、
を含む
、コンピュータ
プログラム。
【請求項8】
前記リスクスコアを算出することは、正の結果をもたらした少なくとも1つのテストケースと負の結果をもたらした少なくとも1つのテストケースとにさらに基づく、請求項7に記載のコンピュータ
プログラム。
【請求項9】
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別する
ことと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換する
ことと、
をさらに含む、請求項7に記載のコンピュータ
プログラム。
【請求項10】
システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサにより実行されたときに当該システムに動作を実行させる命令を含む1つ以上の非一時的コンピュータ読取可能媒体と、
を含み、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも1つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも1つが不良を含む可能性を示
し、所与のコード行についてのリスクスコアは、不合格で前記所与のコード行により影響されるアサーションの数と、不合格で前記所与のコード行により影響されないアサーションの数と、合格で前記所与のコード行により影響されるアサーションの数と、合格で前記所与のコード行により影響されないアサーションの数とのうち1つ以上を含む、複数のファクタに基づく、ことと、
を含む、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示で論じられる実施形態は、ソフトウェアプログラム不良位置の識別に関する。
【背景技術】
【0002】
ソフトウェアプログラムは、その中に不良(一般に「バグ」と呼ばれる)をしばしば有し、これらは、意図したとおりに動作しない可能性がある。ソフトウェアプログラム内の不良を識別し、訂正しようとして、しばしば、自動化された修復システムが使用される。
【0003】
本開示において請求される対象事項は、何らかの欠点を解決し又は上述されたような環境においてのみ動作する実施形態に限定されない。むしろ、この背景技術は、本開示に記載されるいくつかの実施形態が実施され得る1つの例示的な技術分野を示すためにのみ提供される。
【発明の概要】
【0004】
本開示の1つ以上の実施形態が、プログラムの複数のプログラミングコード行を取得するステップと、プログラムをテストするための複数のテストケースを取得するステップであり、テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ステップと、を含む方法を含むことができる。該方法は、テストケースの各々についてプログラムを実行するステップと、アサーションに影響を及ぼす、影響したプログラミングコード行を識別するステップと、をさらに含んでもよい。該方法は、プログラミングコード行のうち少なくとも1つについてのリスクスコアを、影響したプログラミングコード行とアサーションとに基づいて算出するステップであり、リスクスコアは、プログラミングコード行のうち少なくとも1つが不良を含む可能性を示す、ステップをさらに含んでもよい。
【0005】
実施形態の目的及び利点は、少なくとも特許請求の範囲において特に指し示された要素、特徴、及び組み合わせにより実現され、達成される。
【0006】
前述の一般的な説明及び以下の詳細な説明の双方が例として与えられ、説明的であり、請求される発明の限定ではない。
【図面の簡単な説明】
【0007】
例示的な実施形態が、添付図面の使用を通してさらなる特定性及び詳細と共に記載され、説明される。
【
図1】ソフトウェアプログラム内の不良の位置特定に関連する一例示的な環境を表す図である。
【
図2】ソフトウェアプログラム内の不良位置を識別する一例示的な方法のフローチャートを示す。
【
図3】所与のテストケースの帰結を知らせるアサーションに影響を及ぼす、プログラミングコードの行を識別する一例示的な方法のフローチャートを示す。
【
図4】ソフトウェアプログラムのコード行についてのリスクスコアを決定する一例示的な方法のフローチャートを示す。
【
図5】一例示的なコンピューティングシステムを示す。
【発明を実施するための形態】
【0008】
本開示は、ソフトウェアプログラム内の不良(faults)の位置の識別に関し得る。本開示は、特に、テストケースが合格(passed)か否か、あるいは不合格(failed)か否かに基づくのでなく、解析されているプログラム内のコード行についてのリスクスコアを生成する際に複数のファクタを考慮することができ、リスクスコアは、特定のコード行が不良を含む可能性を表す。例えば、リスクスコアを決定する際に、本開示は、コード行が所与のテストケースのアサーションに影響するか否か(例えば、コード行が、テストケースが合格か又は不合格かを決定するテストケースのステートメントにおいて使用される変数又は関数を利用するかどうか)を考慮することを企図する。さらに又は代わりに、リスクスコアを決定するために、本開示は、どのようなコード行が合格及び不合格の双方のテストケースのアサーションに影響するかと、コード行がテストケースに影響しない、合格及び不合格のテストケースの数とを考慮することを企図する。
【0009】
本開示の実施形態は、ソフトウェア不良検出の技術分野に対する向上を提供する。特に、本開示は、実行されているときにどのようなファクタがテストケースに影響している可能性があり、あるいは影響していない可能性があるかについて、より詳細で、より粒度の細かいレベルの解析を企図している。例えば、本開示は、テストケースが不合格か否かを見るだけ、又はどのようなコード行が不合格のテストケースにより実行されるかを見るだけでなく、テストケースのアサーションに実際に影響するコード行(例えば、それが合格か又は不合格かを決定するテストケース内のステートメント)を見る。増加した粒度レベルを使用することにより、コード行が不良を含む可能性があるか否かについて、より正確なリスクスコアが提供され得る。
【0010】
さらに、このような教示は、その技術分野を向上させるだけでなく、その結果には、コンピュータ効率の増大及びコンピューティングリソースの保存がある。例えば、自動化されたコンピュータプログラム訂正システムでは、この自動化システムは、閾値を上回るリスクスコアを有するプログラミングコードの行を調整し、かつ/あるいは全てのコード行を解析することができる。しかしながら、本開示に記載の向上したアプローチを使用することにより、もたらされる偽陽性(例えば、不良が存在しないときに、そのような不良を含むと考えられたコード行)はより少なく、それにより、そのような自動化システムにより解析又は置換されなければならないコード行はより少ない。ゆえに、本開示は、偽陽性のために費やされるコンピューティングリソースを保存すること、又は多数の区別不能なコード行のうちのいずれが不良を実際に含むかを決定することにより、そのようなコンピュータの機能を向上させる。
【0011】
本開示の実施形態は、添付の図面を参照して説明される。
【0012】
図1は、本開示の1つ以上の実施形態による、ソフトウェアプログラム内の不良の位置特定に関連する一例示的な環境100を表す図である。環境100は、不良位置特定器(fault locator)130及び不良訂正器(fault corrector)150を含むことができる。動作において、不良位置特定器130は、プログラム110及びテストケース120を取得することができる。不良位置特定器は、処理を実行してプログラム110内の不良の位置を識別する出力140を提供することができる。出力140は不良訂正器150に提供されて、修正プログラム180を生成することができる。いくつかの実施形態において、不良訂正器150は、ユーザ160からの入力に基づいて動作するように構成されてもよく、あるいは人工知能(AI)プログラムなどのコンピューティングデバイス170からのコマンドに基づいて修正プログラム180を自動的に生成してもよい。
【0013】
プログラム110は、コンピューティングデバイスに動作のセットを実行させることができる任意のコンピュータ読取可能命令を含むことができる。プログラム110は、人間により読取可能なコード又はマシン読取可能コードを含んでもよい。いくつかの実施形態において、プログラム110は、C++、Java(登録商標)、Python、PHP、Perlなどのコンピュータプログラミング言語における命令を含んでもよい。コンピュータプログラム110が人間のユーザにより書かれるとき、コンピュータプログラム110は、プログラム110に誤って動作させる不良を含む可能性もあり、あるいは含まない可能性もある。いくつかの実施形態において、プログラム110は、プログラムのコード、ライブラリ、アプリケーション、スクリプト、又は処理デバイスによる実行のための他の論理若しくは命令を含んでもよい。いくつかの実施形態において、プログラム110は、各々のコード行が独立して参照され得る複数のコード行を含んでもよい。いくつかの実施形態において、プログラム110は、ソフトウェアプログラムの完全なインスタンスより小さいインスタンスを含んでもよく、それにより、より完全なプログラムの一部分のみが解析されてもよい。
【0014】
本開示はプログラミングコードの行を参照するが、プログラム110の任意の他のスライシング又は指定が企図される。例えば、プログラム110は、コード行と区別可能又は別個であるステートメントにスライスされてもよく、それにより、所与のステートメントは複数のコード行をカバーすることができ、かつ/あるいはコード行の一部分のみであり得る。いくつかの実施形態において、そのようなスライシングは静的な方法で行われてもよく、それにより、ステートメントは制御フロー及び/又はデータフロー解析に基づいて識別される。さらに又は代わりに、プログラムのスライシングは動的な方法で実行されてもよく、それにより、ステートメントは所与の入力に対するプログラム110の実行からのデータ依存性に基づいて識別される。ゆえに、コード行と呼ばれるが、プログラム110の任意のそのような部分又はスライスが、そのような部分が不良を含むかどうかを決定するために解析されるものとして企図される。
【0015】
テストケース120の各々は、プログラム110が正しく動作するか否かへの洞察を提供する1つ以上のアサーションを含むことができる。例えば、各テストケースは、テストケースが合格か否か、あるいは不合格か否かを規定するアサーション(例えば、テストケースを使用するプログラムの動作に基づいて、真又は偽の結果を有するステートメント)を含んでもよい。合格したテストケースは、プログラム110が正しく動作したか又はその他の方法で期待どおりに動作したことを示すことができ、不合格だったテキストケースは、プログラム110が1つ以上の不良を含むことを示すことができる。いくつかの実施形態において、テストケース120は、プログラム110への1つ以上の入力を含んでもよい。例えば、所与のテストケースが既知の入力を含むことができ、期待される結果を有することができ、期待される結果が返された場合、この所与のテストケースは合格であってもよく、一方、期待されない結果が返された場合、この所与のテストケースは不合格であってもよい。別の例として、未知の入力又は一連のランダム入力がテストケース120のうち1つ以上として利用されて、プログラム110が変化のある入力にどのように応答するかを観察してもよい。プログラム110が、変化のある又はランダムな入力の各々と共に完了に対して成功裏に実行し、動くことができる場合、関連づけられたテストケースは合格であってもよく、プログラム110が、実行のいずれかの間にクラッシュする場合、関連づけられたテストケースは不合格であってもよい。
【0016】
単一のアサーションを有する所与のテストケースでは、アサーションの合格又は不合格は、それが所与のテストケースの合格又は不合格に対処する唯一のアサーションであるため、所与のテストケースの合格又は不合格に直接対応することができる。このような状況において、合格したアサーションは、所与のテストケースの合格として参照されてもよい。複数のアサーションを有する他の所与のテストケースでは、該他の所与のテストケースは、アサーションの全てが合格した場合に合格することになり、1つの不合格のアサーションが該他の所与のテストケースを不合格にさせることになる。いくつかの実施形態において、複数のアサーションを有するテストケースについて、テストケースは、各々が単一のアサーションを有する複数のテストケースに分離されてもよい。
【0017】
不良位置特定器130は、テストケース120に基づいてプログラム110内の不良の識別を容易にするように構成されたプロセス、プログラミング命令のセット、ハードウェア、ソフトウェア、又はこれらの任意の組み合わせを含むことができる。いくつかの実施形態において、不良位置特定器130は、プログラム110内の所与のコード行が不良を有する確率を決定するように構成されてもよい。不良位置特定器130は、プログラム110の全ての行、又はそのサブセットに対して動作するように構成されてもよい。
【0018】
いくつかの実施形態において、不良位置特定器130は、テストケースの実行中にどのコード行が実行されるかを追跡するように構成されてもよい。例えば、トレース、又は追跡のための他の特徴がプログラム110内に散在してもよく、それにより、テストケース120の実行中、不良位置特定器130は、プログラム110の動作中にどのコード行が実行されたかを決定してテストケースを確認することができる。いくつかの実施形態において、そのようなトレースは、任意の実行された行について行番号を印刷させる命令又は他の手段を含んでもよく、それにより、実行後、コードの行番号、それらの順序等がプログラム110の実行後に観察されてもよい。
【0019】
いくつかの実施形態において、不良位置特定器130は、どのコード行がテストケース120の帰結(outcome)に影響し、あるいはその他の方法で影響を及ぼすかを識別するように構成されてもよい。例えば、所与のテストケースについて、テストケースは、テストケースの合格又は不合格のいずれかを結果としてもたらすアサーションを含み得る。不良位置特定器130は、プログラム110内のどのコード行が所与のテストケースのアサーションに実際に影響を及ぼすかを識別するように構成されてもよい。例えば、所与のテストケースを確認するために実行されているとき、10行のコードが所与のテストケースを確認するために実行される可能性があるが、これら10行のうち2行のみがどちらにしても所与のテストケースに対する決定に実際に影響し、これら2行が、所与のテストケースに影響するコード行として指定されてもよい。
【0020】
影響した(affected)コード行の識別を容易にするために、いくつかの実施形態において、不良位置特定器は、アサーションに影響を及ぼす所与のテストケース内の関数又は変数を識別することができ、プログラミングコードの行は、所与のテストケースに基づく実行中に実行されるプログラムコードの行内でこれらの関数又は変数がどこで使用されるかを識別するためにパースされ(parsed)てもよい。さらに又は代わりに、所与のテストケースが、所与のテストケース内のアサーションを識別するためにパースされてもよく、アサーションは、所与のテストケースの帰結に影響を及ぼす及び/又は該帰結を規定する変数及び/又は関数を決定するために解析されてもよい。所与のテストケースの帰結に影響を及ぼす及び/又は該帰結を規定する変数及び/又は関数の識別に続いて、プログラム110は、該変数及び/又は関数を使用するプログラム110内のコード行を発見するために解析されてもよい。これら及び他の実施形態において、影響したコード行の各々は、コード行により影響されるテストケースが合格したか不合格だったかを決定するために追跡されてもよい。
【0021】
いくつかの実施形態において、不良位置特定器130は、プログラム110内の各々のコード行についてリスクスコアを潜在的に決定することを含め、プログラム110内の1つ以上のコード行についてリスクスコアを決定するように構成されてもよい。これら及び他の実施形態において、所与のコード行についてのリスクスコアは、不合格でコード行により影響されるアサーションの数(a
f)と、不合格でコード行により影響されないアサーションの数(n
f)と、合格でコード行により影響されるアサーションの数(a
p)と、合格でコード行により影響されないアサーションの数(n
p)とのうち1つ以上を含む、複数のファクタに基づいてもよい。リスクスコアを決定する種々の例が、
図4を参照して説明され得る。
【0022】
いくつかの実施形態において、不良位置特定器130は、リスクスコアを使用してプログラム110内の不良位置を識別してもよい。例えば、不良位置特定器130は、閾値を上回るリスクスコアを有するコード行を、プログラム110内の不良の位置であるとして識別してもよい。いくつかの実施形態において、不良位置特定器130は、出力140を、リスクスコアに基づいてソートされたプログラム110のプログラムコードの行のソートされたリストとして生成してもよい。
【0023】
出力140は、不良位置特定器130により出力されたプログラム110内の不良の位置を示す任意の情報又はデータの集合を含むことができる。いくつかの実施形態において、出力140は、不良を含むとして指定された1つ以上のコード行を有するプログラム110のコピーであってもよい。さらに又は代わりに、出力140は、リスクスコアによりソートされたコード行の各々の列挙を含んでもよく、それにより、不良を含む可能性が最も高いコード行は、コード行のセットの上部に列挙される。出力140は、さらに又は代わりに、リスクスコアについて算出された数値を含んでもよい。
【0024】
不良訂正器150は、出力140内に識別された不良の訂正を容易にするように構成されたプロセス、プログラミング命令のセット、ハードウェア、ソフトウェア、又はこれらの任意の組み合わせを含んでもよい。不良訂正器150は、出力140の全ての識別された不良、又はそのサブセットに対して動作するように構成されてもよい。例えば、不良訂正器150は、閾値を上回る関連づけられたリスクスコアを有するコード行を訂正し、あるいはその他の方法で置換するように動作してもよい。
【0025】
不良訂正器150は、プログラム110内の1つ以上の不良を修復又は訂正するために使用され得る、プログラム110に関する一連の修復動作を実行するように構成されてもよい。いくつかの実施形態において、不良訂正器150は、出力140に含まれる1つ以上の不良位置に関して修復動作の1つ以上を実行するように構成されてもよい。修復動作は、特定のコード行に含まれ得る不良を修復し得る、該特定のコード行に対する任意の変更を含むことができる。いくつかの実施形態において、変更は、ユーザ160からの入力に基づいて、又はコンピューティングデバイス170からの入力に基づいて行われてもよい。いくつかの実施形態において、不良訂正器150は、修正プログラム180を出力するように構成されてもよく、修正プログラム180は、出力140内に識別された1つ以上の不良位置に関する1つ以上の修正されたコード行を含んでもよい。
【0026】
いくつかの実施形態において、人間のオペレータ160は、出力140を提示されてもよく、不良訂正器150を利用してプログラム110の1つ以上の行を手動で置換又は修正して、出力140内に位置する不良に対処してもよい。例えば、人間のオペレータ160は、特定のコード行を手動で再タイプしてもよく、特定のコード行に対して示唆されたコード行又は示唆された編集を提示されてもよい、などである。
【0027】
いくつかの実施形態において、コンピューティングデバイス170は、不良訂正器150を介して動作して、修正プログラム180を自動的に生成することができる。例えば、コンピューティングデバイス170は、動作可能であると発見された例示的なプログラミングコード行のバンクを解析する人工知能システムを利用してもよく、不良を含むとして出力140内に識別されたコード行を、コンピューティングデバイス170の人工知能システムにより識別された修正されたコード行と置換してもよい。これら及び他の実施形態において、コンピューティングデバイス170は、種々のファクタのうち任意のものを考慮して、プログラム110の作成者、不良を含むコード行の周囲のコード行、不良を含むコード行内で呼び出される変数及び関数、プログラム110により呼び出されるライブラリ等を含む、置換コード行として使用されるコード行を決定してもよい。
【0028】
本開示の範囲から逸脱することなく、
図1に対して修正、追加、又は省略がなされてもよい。例えば、環境100は、本開示において図示及び説明されるものより多くの又は少ない要素を含んでもよい。例えば、いくつかの実施形態において、テストケース120、不良位置特定器130、不良訂正器150、及び/又はコンピューティングデバイス170を実現する1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部分が、組み合わせられ、あるいは分離されてもよい。いくつかの実施形態において、動作は、上述されたものと異なる順序で実行されてもよい。
【0029】
さらに、いくつかの実施形態において、出力140は、環境100の外部で使用されてもよい。これら又は他の実施形態において、環境100は、不良位置特定器130を含んでもよく、しかし不良訂正器150を含まなくてもよい。
【0030】
図2は、本開示の1つ以上の実施形態による、ソフトウェアプログラム内の不良位置を識別する一例示的な方法200のフローチャートを示す。方法200は、テスト下のコードに関して、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、
図1の不良位置特定器130及び/又は不良訂正器150、又は(例えば、不良位置特定器により指示される)
図5のコンピューティングシステム500が、ソフトウェアプログラムに関して、方法200に関連づけられた動作のうち1つ以上を実行し、あるいはその実行を指示することができる。別個のブロックで示されているが、方法200のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックへ結合されてもよく、あるいは消去されてもよい。
【0031】
ブロック205において、プログラミングコード行を有するプログラムが取得されてもよい。例えば、不良位置特定器(例えば、
図1の不良位置特定器130)が、プログラム(例えば、
図1のプログラム110)を提供されてプログラムの不良を識別することができる。いくつかの実施形態において、プログラムを取得することは、ユーザがプログラムをリモートのコンピューティングデバイスにアップロードすること、プログラムを別個の解析プログラム(例えば、不良位置特定器)にサブミットすること、又は不良について解析されるべきプログラムを不良位置特定器が取得できる任意の他のアプローチを含んでもよい。
【0032】
ブロック210において、プログラムをテストするためにテストケースが取得されてもよく、テストケースの各々は、それぞれのテストケースの帰結を決定するアサーションを含んでもよい。例えば、不良位置特定器が、テストケースのデータベースから1つ以上のテストケースを引き出すことができる。別の例として、ユーザが、プログラム内の不良を識別するために使用されるべき1つ以上のテストケースを提供してもよい。さらなる例として、ユーザが、不良についてユーザがチェックしたいプログラムの1つ以上の特徴を指定してもよく、選択された特徴及び/又はプログラムのプログラミングコードの行に基づいて、1つ以上のテストケースが生成されてもよい。
【0033】
ブロック215において、テストケースの各々についてプログラムが実行されてもよい。例えば、不良位置特定器が、プログラムを実行して、テストケースの各々でプログラムが合格か否か、あるいは不合格か否かを決定することができる。これら及び他の実施形態において、不良位置特定器は、プログラムの実行をトレース又は追跡して、特定のテストケースのテスト中にどのコード行が実行されたかを識別してもよい。
【0034】
ブロック220において、影響したプログラミングコード行が識別されてもよい。例えば、不良位置特定器が、プログラミングコード行のいずれがアサーションに影響を及ぼすかを識別することができる。上述のように、影響したコード行は、テストするケースの帰結に影響を及ぼすプログラミングコード行内の変数及び/又は関数に基づいて識別されてもよい。ブロック220に関連づけられた動作の一例が、
図3に関連して示され得る。
【0035】
ブロック225において、影響したプログラミングコード行及びアサーションに基づいて、所与のプログラミングコード行についてのリスクスコアが算出されてもよい。例えば、不良位置特定器が、所与のコード行についてのリスクスコアを、所与のプログラミングコード行がテストケースのアサーションの1つ以上に影響したか否かと、これらのテストケースが合格したか否か、あるいは不合格だったか否かとに基づいて算出するように構成されてもよい。さらに又は代わりに、リスクスコアは、所与のプログラミングコード行が所与のテストケースのアサーションに影響しなかった場合の合格した及び/又は不合格だったテストケースの数に基づいてもよい。リスクスコアを算出する例が、
図4を参照して説明され得る。
【0036】
ブロック230において、ブロック225の所与のプログラミングコード行についてのリスクスコアが閾値を上回るかどうかについて決定が行われてもよい。リスクスコアが閾値を上回る場合、本方法はブロック235に進み得る。リスクスコアが閾値を上回らない場合、本方法はブロック240に進み得る。
【0037】
ブロック235において、閾値を上回るリスクスコアを有するプログラミングコード行が、改訂されたプログラミングコード行で自動的に置換されてもよい。例えば、(
図1の不良訂正器150などの)不良訂正器が、置換プログラミングコード行を識別して、閾値を上回るリスクスコアを有するプログラミングコード行を置換することができ、該プログラミングコード行を置換して、改訂されたプログラムを生成することができる。
【0038】
ブロック240において、解析されるべきさらなるプログラミングコード行が存在して、該さらなるプログラミングコード行についてのリスクスコアを識別するかどうかについて、決定が行われてもよい。リスクスコアをまだ決定されていないさらなるコード行が存在する場合、本方法はブロック225に戻り、次のコード行についてのリスクスコアを決定することができる。リスクスコアが決定されるべきさらなるコード行が存在しない場合、本方法は終了し得る。ブロック225~240を反復的に通過することにより、プログラミングコード行の各々が、関連づけられたリスクスコアを算出され得る。
【0039】
本開示の範囲から逸脱することなく、方法200に対して修正、追加、又は省略がなされてもよい。例えば、方法200の動作は異なる順序で実現されてもよい。さらに又は代わりに、2つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションへ結合されてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。例えば、いくつかの実施形態において、ブロック230及び/又は235は、省略されてもよく、かつ/あるいは、ソートされているか否かにかかわらず関連づけられたリスクスコアを有するプログラミングコード行のリストの生成で置換されてもよい。
【0040】
図3は、本開示の1つ以上の実施形態による、所与のテストケースの帰結を知らせるアサーションに影響を及ぼすプログラミングコードの行を識別する一例示的な方法300のフローチャートを示す。方法300は、テスト下のコードに関して、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、
図1の不良位置特定器130、又は(例えば、不良位置特定器により指示される)
図5のコンピューティングシステム500が、ソフトウェアプログラムに関して、方法300に関連づけられた動作のうち1つ以上を実行し、あるいはその実行を指示することができる。別個のブロックで示されているが、方法300のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックへ結合されてもよく、あるいは消去されてもよい。方法300は、
図2のブロック220に関連づけられた動作の一例示的なセットを表し得る。
【0041】
ブロック310において、所与のテストケースが、所与のテストケース内のアサーションを識別するためにパースされてもよい。例えば、(
図1の不良位置特定器130などの)不良位置特定器が、所与のテストケースをパースして、テストケースが合格か又は不合格かの決定力のあるテストケース内のステートメントを識別するように構成されてもよい。
【0042】
ブロック320において、アサーションが、アサーションの帰結に影響を及ぼす変数を識別するために解析されてもよい。さらに又は代わりに、アサーションの関数、ライブラリ、又は他の特徴若しくは態様が、アサーションの帰結を規定し得るアサーション内で識別されてもよい。
【0043】
ブロック330において、識別された変数を使用するプログラミングコード行が発見されてもよい。さらに、アサーションの関数、ライブラリ、又は他の特徴若しくは態様を呼び出し、決定し、あるいはその他の方法で影響を及ぼすプログラミングコード行が発見されてもよい。
【0044】
ブロック340において、ブロック330で発見されたプログラミングコード行が、影響したプログラミングコード行として識別されてもよい。例えば、ブロック330で発見されたプログラミングコード行は、アサーションに関連づけられたテストケースが合格か否か、あるいは不合格か否かを規定する実際のコード行であり得、なぜならば、テストケースがアサーションに依存し、アサーションは、アサーションの変数、関数等を使用するプログラミングコードの行により決定されるからである。
【0045】
本開示の範囲から逸脱することなく、方法300に対して修正、追加、又は省略がなされてもよい。例えば、方法300の動作は異なる順序で実現されてもよい。さらに又は代わりに、2つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションへ結合されてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【0046】
図4は、本開示の1つ以上の実施形態による、ソフトウェアプログラムのコード行についてのリスクスコアを決定する一例示的な方法のフローチャートを示す。方法400は、テスト下のコードに関して、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、
図1の不良位置特定器130、又は(例えば、不良位置特定器により指示される)
図5のコンピューティングシステム500が、ソフトウェアプログラムに関して、方法400に関連づけられた動作のうち1つ以上を実行し、あるいはその実行を指示することができる。別個のブロックで示されているが、方法400のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックへ結合されてもよく、あるいは消去されてもよい。
【0047】
ブロック410において、プログラムが取得されてもよい。ブロック410は、
図2のブロック205と同様であり、あるいは相当し得る。
【0048】
ブロック420において、正(positive)及び負(negative)双方のテストケースがプログラムに対して動かされてもよい。例えば、複数のテストケースが実行されてもよく、該テストケースのうちいくつかが合格であり、該テストケースのうちいくつかが不合格である。いくつかの実施形態において、プログラムは、テストケースの実行中に追跡又はトレースされてもよく、それにより、テストケースの実行中に使用又は実行され得るコード行が識別されてもよい。
【0049】
ブロック430において、テストケースのアサーションに影響するコード行が、合格及び不合格アサーションの双方について識別されてもよい。例えば、プログラミングコード行が、テストケースに対するアサーション内に位置する変数又は関数を含むコード行を識別するためにパースされ、あるいは検索されてもよい。
【0050】
ブロック440において、各々のコード行について、ファクタap、np、af、及びnfが抽出されてもよい。例えば、ファクタapは、合格でコード行により影響されるアサーションの数を示すことができ、ファクタnpは、合格でコード行により影響されないアサーションの数を示すことができ、ファクタafは、不合格でコード行により影響されるアサーションの数を示すことができ、nfは、不合格でコード行により影響されないアサーションの数を示す。
【0051】
ブロック412において、各々のコード行について、リスクスコアが決定されてもよい。いくつかの実施形態において、リスクスコアは、それぞれのステートメントについて決定された使用ファクタに基づいて決定されてもよい。例えば、いくつかの実施形態において、各々のコード行についてのリスクスコアは、それぞれのコード行のa
p、n
p、a
f、及びn
fに基づいてもよい。リスクスコアを算出するためのいくつかの関数には、以下が含まれる:
【数1】
【0052】
いくつかの実施形態において、リスクスコアは正規化されてもよい。例えば、いくつかの例において、リスクスコアは、「0」と「1」との間の値を有するように正規化されてもよく、「1」のスコアは、それぞれのコード行が不良を含むことのかなり高い可能性(likelihood)を示し、「0」のスコアは、それぞれのコード行が不良を含むことのかなり低い又はゼロの可能性を示す。以下は、特定のコード行についての正規化されたリスクスコアを決定する一例示的な式である:
【数2】
【0053】
上記式において、「コード行のリスクスコア(Risk Score of the Line of Code)」は、特定のコード行について決定されたリスクスコアを参照してもよく、「任意のコード行の最大リスクスコア(Maximum Risk Score of Any Line of Code)」は、解析されているプログラムのコード行の全てに関して決定され得る最も高いリスクスコアを参照してもよい。最も高いリスクスコアを有するコード行については、分子と分母は同じであることに留意する。いくつかの実施形態において、正規化は、あらゆるコード行についてリスクスコアが決定された後、実行されてもよい。
【0054】
ブロック460において、プログラミングコード行がリスクスコアによりランク付けされてもよい。例えば、コード行は、プログラミングコード行のリスクスコアに基づいてソート及び表示され、記憶され、あるいはその他の方法で編成されてもよい。
【0055】
本開示の範囲から逸脱することなく、方法400に対して修正、追加、又は省略がなされてもよい。例えば、方法400の動作は異なる順序で実現されてもよい。さらに又は代わりに、2つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションへ結合されてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【0056】
図5は、本開示に記載された少なくとも1つの実施形態による、一例示的なコンピューティングシステムを示す。システム500は、ソフトウェアプログラムにおける不良の位置の識別に参加するように構成された任意の適切なシステム、装置、又はデバイスを含んでもよい。コンピューティングシステム500は、プロセッサ510、メモリ520、データ記憶装置530、及び通信ユニット540を含んでもよく、これらは全て、通信上結合されてもよい。データ記憶装置530は、不良を含むことの高いリスクを有するプログラミングコードの行の位置を識別するための動作を実行する、コンピュータ読取可能命令などの種々のタイプのデータを含んでもよい。
【0057】
一般に、プロセッサ510は、種々のコンピュータハードウェア又はソフトウェアモジュールを含む、任意の適切な専用若しくは汎用コンピュータ、コンピューティングエンティティ、又は処理デバイスを含んでもよく、任意の適用可能なコンピュータ読取可能記憶媒体に記憶された命令を実行するように構成されてもよい。例えば、プロセッサ510は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラム命令を解釈及び/又は実行するよう及び/又はデータを処理するように構成された任意の他のデジタル若しくはアナログ回路を含んでもよい
【0058】
図5において単一のプロセッサとして示されているが、プロセッサ510は、より一般的には、本開示において説明された任意数の動作を個々又は集合的に実行するように構成された、任意数のネットワーク又は物理位置にわたり分散された任意数のプロセッサを含んでもよい。いくつかの実施形態において、プロセッサ510は、メモリ520、データ記憶装置530、又はメモリ520及びデータ記憶装置530に記憶されたプログラム命令を解釈及び/又は実行し、かつ/あるいはデータを処理することができる。いくつかの実施形態において、プロセッサ510は、データ記憶装置530からプログラム命令を取り出し、プログラム命令をメモリ520にロードすることができる。
【0059】
プログラム命令がメモリ520にロードされた後、プロセッサ550は、
図2、
図3、及び
図4の方法200、300、及び/又は400をそれぞれ実行するための命令などの、プログラム命令を実行してもよい。例えば、プロセッサ510は、プログラムのテストケースを動かすことと、どのコード行がテストケースのアサーションに影響するか及びテストケースが合格か又は不合格かを決定することとに関する命令を取得ことができる。
【0060】
メモリ520及びデータ記憶装置530は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有する複数のコンピュータ読取可能記憶媒体又は1つ以上のコンピュータ読取可能記憶媒体を含むことができる。そのようなコンピュータ読取可能記憶媒体は、プロセッサ510などの汎用又は専用コンピュータによりアクセスされ得る任意の利用可能な媒体であってもよい。いくつかの実施形態において、コンピューティングシステム500は、メモリ520及びデータ記憶装置530のいずれかを含んでもよく、あるいは含まなくてもよい。
【0061】
限定でなく例として、そのようなコンピュータ読取可能記憶媒体は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、コンパクトディスク読取専用メモリ(CD‐ROM)若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又はコンピュータ実行可能命令又はデータ構造の形式で所望のプログラムコードを搬送又は記憶するために使用でき、かつ汎用又は専用コンピュータによりアクセスできる任意の他の記憶媒体を含む、非一時的コンピュータ読取可能記憶媒体を含んでもよい。上記の組み合わせもまた、コンピュータ読取可能記憶媒体の範囲内に含まれてもよい。コンピュータ実行可能命令は、例えば、プロセッサ510に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
【0062】
通信ユニット540は、ネットワークを通じて情報を送信又は受信するように構成された任意のコンポーネント、デバイス、システム、又はこれらの組み合わせを含んでもよい。いくつかの実施形態において、通信ユニット540は、他の場所、同じ場所における他のデバイス、又はさらには同じシステム内の他のコンポーネントと通信してもよい。例えば、通信ユニット540は、モデム、ネットワークカード(無線又は有線)、光通信デバイス、赤外線通信デバイス、無線通信デバイス(アンテナなど)、及び/又はチップセット(Bluetooth(登録商標)デバイス、802.6デバイス(例えば、メトロポリタンエリアネットワーク(MAN))、WiFiデバイス、WiMaxデバイス、セルラー通信設備等)などを含んでもよい。通信ユニット540は、本開示に記載されるネットワーク及び/又は任意の他のデバイス若しくはシステムとの間でデータが交換されることを可能にしてもよい。例えば、通信ユニット540は、システム500がコンピューティングデバイス及び/又は他のネットワークなどの他のシステムと通信することを可能にしてもよい。
【0063】
本開示の範囲から逸脱することなく、システム500に対して修正、追加、又は省略がなされてもよい。例えば、データ記憶装置530は、複数の場所に位置し、かつネットワークを通してプロセッサ510によりアクセスされる複数の異なる記憶媒体であってもよい。
【0064】
上述のように、本開示に記載される実施形態は、以下でより詳細に論じられるように、種々のコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用コンピュータ(例えば、
図5のプロセッサ510)の使用を含んでもよい。さらに、上述のように、本開示に記載される実施形態は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能媒体(例えば、
図5のメモリ520)を使用して実現されてもよい。
【0065】
本開示において用いられるとき、用語「モジュール」又は「コンポーネント」は、モジュール又はコンポーネントのアクションを実行するように構成された特定のハードウェア実装、及び/又はコンピューティングシステムの汎用ハードウェア(例えば、コンピュータ読取可能媒体、処理デバイス等)に記憶され及び/又は汎用ハードウェアにより実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを参照し得る。いくつかの実施形態において、本開示に記載される異なるコンポーネント、モジュール、エンジン、及びサービスが、コンピューティングシステム上で実行するオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実現されてもよい。本開示に記載されるシステム及び方法のいくつかは、一般に、(汎用ハードウェアに記憶され、及び/又は汎用ハードウェアにより実行される)ソフトウェアで実現されるものとして記載されるが、特定のハードウェア実装、又はソフトウェアと特定のハードウェア実装との組み合わせもまた可能であり、企図される。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又はコンピューティングシステム上で動作する任意のモジュール又はモジュレートの組み合わせであってもよい。
【0066】
本開示において、特に別記の特許請求の範囲(例えば、別記の特許請求の範囲の本文)において用いられる用語は、一般に「開放的」な用語として意図されている(例えば、用語「含んでいる」は、「含んでいるがこれに限定されない」と解釈されるべきであり、用語「有する」は、「少なくとも有する」と解釈されるべきであり、用語「含む」は、「含むがこれに限定されない」と解釈されるべきである、等)。
【0067】
さらに、特定数の導入された請求項記載が意図されている場合、そのような意図は請求項に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、以下の別記の特許請求の範囲は、請求項記載を導入するために、導入フレーズ「少なくとも1つの」及び「1つ以上の」の使用を含むことがある。しかしながら、そのようなフレーズの使用は、不定冠詞「一の」(“a”又は“an”)による請求項記載の導入が、同じ請求項が導入フレーズ「1つ以上の」又は「少なくとも1つの」と「一の」などの不定冠詞とを含むときでも、そのような導入された請求項記載を含む任意の特定の請求項を1つのそのような記載のみ含む実施形態に限定することを暗に示すように見なされるべきではない(例えば、「一の」(“a”及び/又は“an”)は「少なくとも1つの」又は「1つ以上の」を意味するよう解釈されるべきである)。請求項記載を導入するために用いられる定冠詞の使用についても同様である。
【0068】
さらに、特定数の導入された請求項記載が明示的に記載されている場合であっても、当業者は、そのような記載は少なくとも記載された数を意味するよう解釈されるべきであることを認識するであろう(例えば、他の修飾語を伴わない「2つの記載」というただそれだけの記載は、少なくとも2つの記載を意味するか、あるいは2つ以上の記載を意味する)。さらに、「A、B、及びC等のうち少なくとも1つ」又は「A、B、及びC等のうち1つ以上」と類似の規定が用いられている例において、一般に、そのような構造は、A単独、B単独、C単独、A及びB共に、A及びC共に、B及びC共に、又はA、B、及びC共に等を含むことが意図される。
【0069】
さらに、明細書においてか、特許請求の範囲においてか、又は図面においてかにかかわらず、2つ以上の代替的な用語を提示するいかなる分離的なワード又はフレーズも、用語のうち1つ、用語のうちいずれか、又は双方の用語を含む可能性を考慮するよう理解されるべきである。例えば、フレーズ「A又はB」は、「A」又は「B」又は「A及びB」の可能性を含むよう理解されるべきである。
【0070】
本開示に記載された全ての例及び条件付き言語は、本開示と発明者が当該分野を促進するために寄与した概念とを理解する際に読者を助けるための教育的目的を意図されており、そのような具体的に記載された例及び条件への限定を伴わないとみなされるべきである。本開示の実施形態が詳細に記載されたが、本開示の主旨及び範囲から逸脱することなく、種々の変更、置換、及び改変をこれに行うことができる。
上記の実施形態につき以下の付記を残しておく。
(付記1)
プログラムの複数のプログラミングコード行を取得するステップと、
前記プログラムをテストするための複数のテストケースを取得するステップであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ステップと、
前記テストケースの各々について前記プログラムを実行するステップと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別するステップと、
前記複数のプログラミングコード行のうち少なくとも1つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出するステップであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも1つが不良を含む可能性を示す、ステップと、
を含む方法。
(付記2)
前記リスクスコアを算出するステップは、正の結果をもたらした少なくとも1つのテストケースと負の結果をもたらした少なくと1つのテストケースとにさらに基づく、付記1に記載の方法。
(付記3)
前記リスクスコアを算出するステップは、正の結果をもたらした少なくとも1つのテストケースにさらに基づく、付記1に記載の方法。
(付記4)
影響したプログラミング行を識別するステップは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別するステップと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす1つ以上の変数を識別するステップと、
前記1つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見するステップと、
前記1つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別するステップと、
を含む、付記1に記載の方法。
(付記5)
前記コード行を発見するステップは、制御フロー解析及びデータフロー解析のうち少なくとも1つに基づく、付記4に記載の方法。
(付記6)
前記影響したプログラミングコード行を識別するステップは、プログラムの実行からのデータ依存性に基づく、付記1に記載の方法。
(付記7)
前記プログラムの前記複数のプログラミングコード行と前記プログラミングコード行の各々についての対応するリスクスコアとの表示を生成するステップ、をさらに含む付記1に記載の方法。
(付記8)
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、付記1に記載の方法。
(付記9)
命令を含む非一時的コンピュータ読取可能媒体であって、1つ以上のプロセッサにより実行されたことに応じてシステムに動作を実行させ、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも1つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも1つが不良を含む可能性を示す、ことと、
を含む、非一時的コンピュータ読取可能媒体。
(付記10)
前記リスクスコアを算出することは、正の結果をもたらした少なくとも1つのテストケースと負の結果をもたらした少なくとも1つのテストケースとにさらに基づく、付記9に記載のコンピュータ読取可能媒体。
(付記11)
前記リスクスコアを算出することは、正の結果をもたらした少なくとも1つのテストケースにさらに基づく、付記9に記載のコンピュータ読取可能媒体。
(付記12)
影響したプログラミング行を識別することは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別することと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす1つ以上の変数を識別することと、
前記1つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見することと、
前記1つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別することと、
を含む、付記9に記載のコンピュータ読取可能媒体。
(付記13)
前記コード行を発見することは、制御フロー解析及びデータフロー解析のうち少なくとも1つに基づく、付記12に記載のコンピュータ読取可能媒体。
(付記14)
前記影響したプログラミングコード行を識別することは、プログラムの実行からのデータ依存性に基づく、付記9に記載のコンピュータ読取可能媒体。
(付記15)
前記プログラムの前記複数のプログラミングコード行と前記プログラミングコード行の各々についての対応するリスクスコアとの表示を生成するステップ、をさらに含む付記9に記載のコンピュータ読取可能媒体。
(付記16)
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、付記9に記載のコンピュータ読取可能媒体。
(付記17)
システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサにより実行されたときに当該システムに動作を実行させる命令を含む1つ以上の非一時的コンピュータ読取可能媒体と、
を含み、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも1つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも1つが不良を含む可能性を示す、ことと、
を含む、システム。
(付記18)
前記リスクスコアを算出することは、正の結果をもたらした少なくとも1つのテストケースと負の結果をもたらした少なくとも1つのテストケースとにさらに基づく、付記17に記載のシステム。
(付記19)
影響したプログラミング行を識別することは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別することと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす1つ以上の変数を識別することと、
前記1つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見することと、
前記1つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別することと、
を含む、付記17に記載のシステム。
(付記20)
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、付記17に記載のシステム。