(57)【要約】      （修正有）【課題】ソフトウェアプログラム不良位置の識別を可能にする方法、コンピュータ読取可能媒体、及びシステムを提供する。【解決手段】プログラムの複数のプログラミングコード行を取得するステップと、プログラムをテストするための複数のテストケースを取得するステップを有する方法であり、テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む。更に方法は、テストケースの各々についてプログラムを実行するステップと、アサーションに影響を及ぼすプログラミングコード行を識別するステップとを含む。また、方法は、プログラミングコード行のうち少なくとも１つについてのリスクスコアを、影響したプログラミングコード行とアサーションとに基づいて算出するステップを含む。リスクスコアは、プログラミングコード行のうち少なくとも１つが不良を含む可能性を示す。【選択図】図２
2020102209.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの複数のプログラミングコード行を取得するステップと、
前記プログラムをテストするための複数のテストケースを取得するステップであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ステップと、
前記テストケースの各々について前記プログラムを実行するステップと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別するステップと、
前記複数のプログラミングコード行のうち少なくとも１つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出するステップであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも１つが不良を含む可能性を示す、ステップと、
を含む方法。
【請求項２】
前記リスクスコアを算出するステップは、正の結果をもたらした少なくとも１つのテストケースと負の結果をもたらした少なくとも１つのテストケースとにさらに基づく、請求項１に記載の方法。
【請求項３】
影響したプログラミング行を識別するステップは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別するステップと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす１つ以上の変数を識別するステップと、
前記１つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見するステップと、
前記１つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別するステップと、
を含む、請求項１に記載の方法。
【請求項４】
前記影響したプログラミングコード行を識別するステップは、プログラムの実行からのデータ依存性に基づく、請求項１に記載の方法。
【請求項５】
前記プログラムの前記複数のプログラミングコード行と前記プログラミングコード行の各々についての対応するリスクスコアとの表示を生成するステップ、をさらに含む請求項１に記載の方法。
【請求項６】
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
命令を含む非一時的コンピュータ読取可能媒体であって、１つ以上のプロセッサにより実行されたことに応じてシステムに動作を実行させ、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも１つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも１つが不良を含む可能性を示す、ことと、
を含む、非一時的コンピュータ読取可能媒体。
【請求項８】
前記リスクスコアを算出することは、正の結果をもたらした少なくとも１つのテストケースと負の結果をもたらした少なくとも１つのテストケースとにさらに基づく、請求項７に記載のコンピュータ読取可能媒体。
【請求項９】
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、請求項７に記載のコンピュータ読取可能媒体。
【請求項１０】
システムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサにより実行されたときに当該システムに動作を実行させる命令を含む１つ以上の非一時的コンピュータ読取可能媒体と、
を含み、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも１つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも１つが不良を含む可能性を示す、ことと、
を含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示で論じられる実施形態は、ソフトウェアプログラム不良位置の識別に関する。
【背景技術】
【０００２】
ソフトウェアプログラムは、その中に不良（一般に「バグ」と呼ばれる）をしばしば有し、これらは、意図したとおりに動作しない可能性がある。ソフトウェアプログラム内の不良を識別し、訂正しようとして、しばしば、自動化された修復システムが使用される。
【０００３】
本開示において請求される対象事項は、何らかの欠点を解決し又は上述されたような環境においてのみ動作する実施形態に限定されない。むしろ、この背景技術は、本開示に記載されるいくつかの実施形態が実施され得る１つの例示的な技術分野を示すためにのみ提供される。
【発明の概要】
【０００４】
本開示の１つ以上の実施形態が、プログラムの複数のプログラミングコード行を取得するステップと、プログラムをテストするための複数のテストケースを取得するステップであり、テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ステップと、を含む方法を含むことができる。該方法は、テストケースの各々についてプログラムを実行するステップと、アサーションに影響を及ぼす、影響したプログラミングコード行を識別するステップと、をさらに含んでもよい。該方法は、プログラミングコード行のうち少なくとも１つについてのリスクスコアを、影響したプログラミングコード行とアサーションとに基づいて算出するステップであり、リスクスコアは、プログラミングコード行のうち少なくとも１つが不良を含む可能性を示す、ステップをさらに含んでもよい。
【０００５】
実施形態の目的及び利点は、少なくとも特許請求の範囲において特に指し示された要素、特徴、及び組み合わせにより実現され、達成される。
【０００６】
前述の一般的な説明及び以下の詳細な説明の双方が例として与えられ、説明的であり、請求される発明の限定ではない。
【図面の簡単な説明】
【０００７】
例示的な実施形態が、添付図面の使用を通してさらなる特定性及び詳細と共に記載され、説明される。
【図１】ソフトウェアプログラム内の不良の位置特定に関連する一例示的な環境を表す図である。
【図２】ソフトウェアプログラム内の不良位置を識別する一例示的な方法のフローチャートを示す。
【図３】所与のテストケースの帰結を知らせるアサーションに影響を及ぼす、プログラミングコードの行を識別する一例示的な方法のフローチャートを示す。
【図４】ソフトウェアプログラムのコード行についてのリスクスコアを決定する一例示的な方法のフローチャートを示す。
【図５】一例示的なコンピューティングシステムを示す。
【発明を実施するための形態】
【０００８】
本開示は、ソフトウェアプログラム内の不良（faults）の位置の識別に関し得る。本開示は、特に、テストケースが合格（passed）か否か、あるいは不合格（failed）か否かに基づくのでなく、解析されているプログラム内のコード行についてのリスクスコアを生成する際に複数のファクタを考慮することができ、リスクスコアは、特定のコード行が不良を含む可能性を表す。例えば、リスクスコアを決定する際に、本開示は、コード行が所与のテストケースのアサーションに影響するか否か（例えば、コード行が、テストケースが合格か又は不合格かを決定するテストケースのステートメントにおいて使用される変数又は関数を利用するかどうか）を考慮することを企図する。さらに又は代わりに、リスクスコアを決定するために、本開示は、どのようなコード行が合格及び不合格の双方のテストケースのアサーションに影響するかと、コード行がテストケースに影響しない、合格及び不合格のテストケースの数とを考慮することを企図する。
【０００９】
本開示の実施形態は、ソフトウェア不良検出の技術分野に対する向上を提供する。特に、本開示は、実行されているときにどのようなファクタがテストケースに影響している可能性があり、あるいは影響していない可能性があるかについて、より詳細で、より粒度の細かいレベルの解析を企図している。例えば、本開示は、テストケースが不合格か否かを見るだけ、又はどのようなコード行が不合格のテストケースにより実行されるかを見るだけでなく、テストケースのアサーションに実際に影響するコード行（例えば、それが合格か又は不合格かを決定するテストケース内のステートメント）を見る。増加した粒度レベルを使用することにより、コード行が不良を含む可能性があるか否かについて、より正確なリスクスコアが提供され得る。
【００１０】
さらに、このような教示は、その技術分野を向上させるだけでなく、その結果には、コンピュータ効率の増大及びコンピューティングリソースの保存がある。例えば、自動化されたコンピュータプログラム訂正システムでは、この自動化システムは、閾値を上回るリスクスコアを有するプログラミングコードの行を調整し、かつ／あるいは全てのコード行を解析することができる。しかしながら、本開示に記載の向上したアプローチを使用することにより、もたらされる偽陽性（例えば、不良が存在しないときに、そのような不良を含むと考えられたコード行）はより少なく、それにより、そのような自動化システムにより解析又は置換されなければならないコード行はより少ない。ゆえに、本開示は、偽陽性のために費やされるコンピューティングリソースを保存すること、又は多数の区別不能なコード行のうちのいずれが不良を実際に含むかを決定することにより、そのようなコンピュータの機能を向上させる。
【００１１】
本開示の実施形態は、添付の図面を参照して説明される。
【００１２】
図１は、本開示の１つ以上の実施形態による、ソフトウェアプログラム内の不良の位置特定に関連する一例示的な環境１００を表す図である。環境１００は、不良位置特定器（fault  locator）１３０及び不良訂正器（fault  corrector）１５０を含むことができる。動作において、不良位置特定器１３０は、プログラム１１０及びテストケース１２０を取得することができる。不良位置特定器は、処理を実行してプログラム１１０内の不良の位置を識別する出力１４０を提供することができる。出力１４０は不良訂正器１５０に提供されて、修正プログラム１８０を生成することができる。いくつかの実施形態において、不良訂正器１５０は、ユーザ１６０からの入力に基づいて動作するように構成されてもよく、あるいは人工知能（ＡＩ）プログラムなどのコンピューティングデバイス１７０からのコマンドに基づいて修正プログラム１８０を自動的に生成してもよい。
【００１３】
プログラム１１０は、コンピューティングデバイスに動作のセットを実行させることができる任意のコンピュータ読取可能命令を含むことができる。プログラム１１０は、人間により読取可能なコード又はマシン読取可能コードを含んでもよい。いくつかの実施形態において、プログラム１１０は、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｐｙｔｈｏｎ、ＰＨＰ、Ｐｅｒｌなどのコンピュータプログラミング言語における命令を含んでもよい。コンピュータプログラム１１０が人間のユーザにより書かれるとき、コンピュータプログラム１１０は、プログラム１１０に誤って動作させる不良を含む可能性もあり、あるいは含まない可能性もある。いくつかの実施形態において、プログラム１１０は、プログラムのコード、ライブラリ、アプリケーション、スクリプト、又は処理デバイスによる実行のための他の論理若しくは命令を含んでもよい。いくつかの実施形態において、プログラム１１０は、各々のコード行が独立して参照され得る複数のコード行を含んでもよい。いくつかの実施形態において、プログラム１１０は、ソフトウェアプログラムの完全なインスタンスより小さいインスタンスを含んでもよく、それにより、より完全なプログラムの一部分のみが解析されてもよい。
【００１４】
本開示はプログラミングコードの行を参照するが、プログラム１１０の任意の他のスライシング又は指定が企図される。例えば、プログラム１１０は、コード行と区別可能又は別個であるステートメントにスライスされてもよく、それにより、所与のステートメントは複数のコード行をカバーすることができ、かつ／あるいはコード行の一部分のみであり得る。いくつかの実施形態において、そのようなスライシングは静的な方法で行われてもよく、それにより、ステートメントは制御フロー及び／又はデータフロー解析に基づいて識別される。さらに又は代わりに、プログラムのスライシングは動的な方法で実行されてもよく、それにより、ステートメントは所与の入力に対するプログラム１１０の実行からのデータ依存性に基づいて識別される。ゆえに、コード行と呼ばれるが、プログラム１１０の任意のそのような部分又はスライスが、そのような部分が不良を含むかどうかを決定するために解析されるものとして企図される。
【００１５】
テストケース１２０の各々は、プログラム１１０が正しく動作するか否かへの洞察を提供する１つ以上のアサーションを含むことができる。例えば、各テストケースは、テストケースが合格か否か、あるいは不合格か否かを規定するアサーション（例えば、テストケースを使用するプログラムの動作に基づいて、真又は偽の結果を有するステートメント）を含んでもよい。合格したテストケースは、プログラム１１０が正しく動作したか又はその他の方法で期待どおりに動作したことを示すことができ、不合格だったテキストケースは、プログラム１１０が１つ以上の不良を含むことを示すことができる。いくつかの実施形態において、テストケース１２０は、プログラム１１０への１つ以上の入力を含んでもよい。例えば、所与のテストケースが既知の入力を含むことができ、期待される結果を有することができ、期待される結果が返された場合、この所与のテストケースは合格であってもよく、一方、期待されない結果が返された場合、この所与のテストケースは不合格であってもよい。別の例として、未知の入力又は一連のランダム入力がテストケース１２０のうち１つ以上として利用されて、プログラム１１０が変化のある入力にどのように応答するかを観察してもよい。プログラム１１０が、変化のある又はランダムな入力の各々と共に完了に対して成功裏に実行し、動くことができる場合、関連づけられたテストケースは合格であってもよく、プログラム１１０が、実行のいずれかの間にクラッシュする場合、関連づけられたテストケースは不合格であってもよい。
【００１６】
単一のアサーションを有する所与のテストケースでは、アサーションの合格又は不合格は、それが所与のテストケースの合格又は不合格に対処する唯一のアサーションであるため、所与のテストケースの合格又は不合格に直接対応することができる。このような状況において、合格したアサーションは、所与のテストケースの合格として参照されてもよい。複数のアサーションを有する他の所与のテストケースでは、該他の所与のテストケースは、アサーションの全てが合格した場合に合格することになり、１つの不合格のアサーションが該他の所与のテストケースを不合格にさせることになる。いくつかの実施形態において、複数のアサーションを有するテストケースについて、テストケースは、各々が単一のアサーションを有する複数のテストケースに分離されてもよい。
【００１７】
不良位置特定器１３０は、テストケース１２０に基づいてプログラム１１０内の不良の識別を容易にするように構成されたプロセス、プログラミング命令のセット、ハードウェア、ソフトウェア、又はこれらの任意の組み合わせを含むことができる。いくつかの実施形態において、不良位置特定器１３０は、プログラム１１０内の所与のコード行が不良を有する確率を決定するように構成されてもよい。不良位置特定器１３０は、プログラム１１０の全ての行、又はそのサブセットに対して動作するように構成されてもよい。
【００１８】
いくつかの実施形態において、不良位置特定器１３０は、テストケースの実行中にどのコード行が実行されるかを追跡するように構成されてもよい。例えば、トレース、又は追跡のための他の特徴がプログラム１１０内に散在してもよく、それにより、テストケース１２０の実行中、不良位置特定器１３０は、プログラム１１０の動作中にどのコード行が実行されたかを決定してテストケースを確認することができる。いくつかの実施形態において、そのようなトレースは、任意の実行された行について行番号を印刷させる命令又は他の手段を含んでもよく、それにより、実行後、コードの行番号、それらの順序等がプログラム１１０の実行後に観察されてもよい。
【００１９】
いくつかの実施形態において、不良位置特定器１３０は、どのコード行がテストケース１２０の帰結（outcome）に影響し、あるいはその他の方法で影響を及ぼすかを識別するように構成されてもよい。例えば、所与のテストケースについて、テストケースは、テストケースの合格又は不合格のいずれかを結果としてもたらすアサーションを含み得る。不良位置特定器１３０は、プログラム１１０内のどのコード行が所与のテストケースのアサーションに実際に影響を及ぼすかを識別するように構成されてもよい。例えば、所与のテストケースを確認するために実行されているとき、１０行のコードが所与のテストケースを確認するために実行される可能性があるが、これら１０行のうち２行のみがどちらにしても所与のテストケースに対する決定に実際に影響し、これら２行が、所与のテストケースに影響するコード行として指定されてもよい。
【００２０】
影響した（affected）コード行の識別を容易にするために、いくつかの実施形態において、不良位置特定器は、アサーションに影響を及ぼす所与のテストケース内の関数又は変数を識別することができ、プログラミングコードの行は、所与のテストケースに基づく実行中に実行されるプログラムコードの行内でこれらの関数又は変数がどこで使用されるかを識別するためにパースされ（parsed）てもよい。さらに又は代わりに、所与のテストケースが、所与のテストケース内のアサーションを識別するためにパースされてもよく、アサーションは、所与のテストケースの帰結に影響を及ぼす及び／又は該帰結を規定する変数及び／又は関数を決定するために解析されてもよい。所与のテストケースの帰結に影響を及ぼす及び／又は該帰結を規定する変数及び／又は関数の識別に続いて、プログラム１１０は、該変数及び／又は関数を使用するプログラム１１０内のコード行を発見するために解析されてもよい。これら及び他の実施形態において、影響したコード行の各々は、コード行により影響されるテストケースが合格したか不合格だったかを決定するために追跡されてもよい。
【００２１】
いくつかの実施形態において、不良位置特定器１３０は、プログラム１１０内の各々のコード行についてリスクスコアを潜在的に決定することを含め、プログラム１１０内の１つ以上のコード行についてリスクスコアを決定するように構成されてもよい。これら及び他の実施形態において、所与のコード行についてのリスクスコアは、不合格でコード行により影響されるアサーションの数（ａｆ）と、不合格でコード行により影響されないアサーションの数（ｎｆ）と、合格でコード行により影響されるアサーションの数（ａｐ）と、合格でコード行により影響されないアサーションの数（ｎｐ）とのうち１つ以上を含む、複数のファクタに基づいてもよい。リスクスコアを決定する種々の例が、図４を参照して説明され得る。
【００２２】
いくつかの実施形態において、不良位置特定器１３０は、リスクスコアを使用してプログラム１１０内の不良位置を識別してもよい。例えば、不良位置特定器１３０は、閾値を上回るリスクスコアを有するコード行を、プログラム１１０内の不良の位置であるとして識別してもよい。いくつかの実施形態において、不良位置特定器１３０は、出力１４０を、リスクスコアに基づいてソートされたプログラム１１０のプログラムコードの行のソートされたリストとして生成してもよい。
【００２３】
出力１４０は、不良位置特定器１３０により出力されたプログラム１１０内の不良の位置を示す任意の情報又はデータの集合を含むことができる。いくつかの実施形態において、出力１４０は、不良を含むとして指定された１つ以上のコード行を有するプログラム１１０のコピーであってもよい。さらに又は代わりに、出力１４０は、リスクスコアによりソートされたコード行の各々の列挙を含んでもよく、それにより、不良を含む可能性が最も高いコード行は、コード行のセットの上部に列挙される。出力１４０は、さらに又は代わりに、リスクスコアについて算出された数値を含んでもよい。
【００２４】
不良訂正器１５０は、出力１４０内に識別された不良の訂正を容易にするように構成されたプロセス、プログラミング命令のセット、ハードウェア、ソフトウェア、又はこれらの任意の組み合わせを含んでもよい。不良訂正器１５０は、出力１４０の全ての識別された不良、又はそのサブセットに対して動作するように構成されてもよい。例えば、不良訂正器１５０は、閾値を上回る関連づけられたリスクスコアを有するコード行を訂正し、あるいはその他の方法で置換するように動作してもよい。
【００２５】
不良訂正器１５０は、プログラム１１０内の１つ以上の不良を修復又は訂正するために使用され得る、プログラム１１０に関する一連の修復動作を実行するように構成されてもよい。いくつかの実施形態において、不良訂正器１５０は、出力１４０に含まれる１つ以上の不良位置に関して修復動作の１つ以上を実行するように構成されてもよい。修復動作は、特定のコード行に含まれ得る不良を修復し得る、該特定のコード行に対する任意の変更を含むことができる。いくつかの実施形態において、変更は、ユーザ１６０からの入力に基づいて、又はコンピューティングデバイス１７０からの入力に基づいて行われてもよい。いくつかの実施形態において、不良訂正器１５０は、修正プログラム１８０を出力するように構成されてもよく、修正プログラム１８０は、出力１４０内に識別された１つ以上の不良位置に関する１つ以上の修正されたコード行を含んでもよい。
【００２６】
いくつかの実施形態において、人間のオペレータ１６０は、出力１４０を提示されてもよく、不良訂正器１５０を利用してプログラム１１０の１つ以上の行を手動で置換又は修正して、出力１４０内に位置する不良に対処してもよい。例えば、人間のオペレータ１６０は、特定のコード行を手動で再タイプしてもよく、特定のコード行に対して示唆されたコード行又は示唆された編集を提示されてもよい、などである。
【００２７】
いくつかの実施形態において、コンピューティングデバイス１７０は、不良訂正器１５０を介して動作して、修正プログラム１８０を自動的に生成することができる。例えば、コンピューティングデバイス１７０は、動作可能であると発見された例示的なプログラミングコード行のバンクを解析する人工知能システムを利用してもよく、不良を含むとして出力１４０内に識別されたコード行を、コンピューティングデバイス１７０の人工知能システムにより識別された修正されたコード行と置換してもよい。これら及び他の実施形態において、コンピューティングデバイス１７０は、種々のファクタのうち任意のものを考慮して、プログラム１１０の作成者、不良を含むコード行の周囲のコード行、不良を含むコード行内で呼び出される変数及び関数、プログラム１１０により呼び出されるライブラリ等を含む、置換コード行として使用されるコード行を決定してもよい。
【００２８】
本開示の範囲から逸脱することなく、図１に対して修正、追加、又は省略がなされてもよい。例えば、環境１００は、本開示において図示及び説明されるものより多くの又は少ない要素を含んでもよい。例えば、いくつかの実施形態において、テストケース１２０、不良位置特定器１３０、不良訂正器１５０、及び／又はコンピューティングデバイス１７０を実現する１つ以上のルーチン、１つ以上の命令、又はコードの少なくとも一部分が、組み合わせられ、あるいは分離されてもよい。いくつかの実施形態において、動作は、上述されたものと異なる順序で実行されてもよい。
【００２９】
さらに、いくつかの実施形態において、出力１４０は、環境１００の外部で使用されてもよい。これら又は他の実施形態において、環境１００は、不良位置特定器１３０を含んでもよく、しかし不良訂正器１５０を含まなくてもよい。
【００３０】
図２は、本開示の１つ以上の実施形態による、ソフトウェアプログラム内の不良位置を識別する一例示的な方法２００のフローチャートを示す。方法２００は、テスト下のコードに関して、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、図１の不良位置特定器１３０及び／又は不良訂正器１５０、又は（例えば、不良位置特定器により指示される）図５のコンピューティングシステム５００が、ソフトウェアプログラムに関して、方法２００に関連づけられた動作のうち１つ以上を実行し、あるいはその実行を指示することができる。別個のブロックで示されているが、方法２００のブロックの１つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックへ結合されてもよく、あるいは消去されてもよい。
【００３１】
ブロック２０５において、プログラミングコード行を有するプログラムが取得されてもよい。例えば、不良位置特定器（例えば、図１の不良位置特定器１３０）が、プログラム（例えば、図１のプログラム１１０）を提供されてプログラムの不良を識別することができる。いくつかの実施形態において、プログラムを取得することは、ユーザがプログラムをリモートのコンピューティングデバイスにアップロードすること、プログラムを別個の解析プログラム（例えば、不良位置特定器）にサブミットすること、又は不良について解析されるべきプログラムを不良位置特定器が取得できる任意の他のアプローチを含んでもよい。
【００３２】
ブロック２１０において、プログラムをテストするためにテストケースが取得されてもよく、テストケースの各々は、それぞれのテストケースの帰結を決定するアサーションを含んでもよい。例えば、不良位置特定器が、テストケースのデータベースから１つ以上のテストケースを引き出すことができる。別の例として、ユーザが、プログラム内の不良を識別するために使用されるべき１つ以上のテストケースを提供してもよい。さらなる例として、ユーザが、不良についてユーザがチェックしたいプログラムの１つ以上の特徴を指定してもよく、選択された特徴及び／又はプログラムのプログラミングコードの行に基づいて、１つ以上のテストケースが生成されてもよい。
【００３３】
ブロック２１５において、テストケースの各々についてプログラムが実行されてもよい。例えば、不良位置特定器が、プログラムを実行して、テストケースの各々でプログラムが合格か否か、あるいは不合格か否かを決定することができる。これら及び他の実施形態において、不良位置特定器は、プログラムの実行をトレース又は追跡して、特定のテストケースのテスト中にどのコード行が実行されたかを識別してもよい。
【００３４】
ブロック２２０において、影響したプログラミングコード行が識別されてもよい。例えば、不良位置特定器が、プログラミングコード行のいずれがアサーションに影響を及ぼすかを識別することができる。上述のように、影響したコード行は、テストするケースの帰結に影響を及ぼすプログラミングコード行内の変数及び／又は関数に基づいて識別されてもよい。ブロック２２０に関連づけられた動作の一例が、図３に関連して示され得る。
【００３５】
ブロック２２５において、影響したプログラミングコード行及びアサーションに基づいて、所与のプログラミングコード行についてのリスクスコアが算出されてもよい。例えば、不良位置特定器が、所与のコード行についてのリスクスコアを、所与のプログラミングコード行がテストケースのアサーションの１つ以上に影響したか否かと、これらのテストケースが合格したか否か、あるいは不合格だったか否かとに基づいて算出するように構成されてもよい。さらに又は代わりに、リスクスコアは、所与のプログラミングコード行が所与のテストケースのアサーションに影響しなかった場合の合格した及び／又は不合格だったテストケースの数に基づいてもよい。リスクスコアを算出する例が、図４を参照して説明され得る。
【００３６】
ブロック２３０において、ブロック２２５の所与のプログラミングコード行についてのリスクスコアが閾値を上回るかどうかについて決定が行われてもよい。リスクスコアが閾値を上回る場合、本方法はブロック２３５に進み得る。リスクスコアが閾値を上回らない場合、本方法はブロック２４０に進み得る。
【００３７】
ブロック２３５において、閾値を上回るリスクスコアを有するプログラミングコード行が、改訂されたプログラミングコード行で自動的に置換されてもよい。例えば、（図１の不良訂正器１５０などの）不良訂正器が、置換プログラミングコード行を識別して、閾値を上回るリスクスコアを有するプログラミングコード行を置換することができ、該プログラミングコード行を置換して、改訂されたプログラムを生成することができる。
【００３８】
ブロック２４０において、解析されるべきさらなるプログラミングコード行が存在して、該さらなるプログラミングコード行についてのリスクスコアを識別するかどうかについて、決定が行われてもよい。リスクスコアをまだ決定されていないさらなるコード行が存在する場合、本方法はブロック２２５に戻り、次のコード行についてのリスクスコアを決定することができる。リスクスコアが決定されるべきさらなるコード行が存在しない場合、本方法は終了し得る。ブロック２２５〜２４０を反復的に通過することにより、プログラミングコード行の各々が、関連づけられたリスクスコアを算出され得る。
【００３９】
本開示の範囲から逸脱することなく、方法２００に対して修正、追加、又は省略がなされてもよい。例えば、方法２００の動作は異なる順序で実現されてもよい。さらに又は代わりに、２つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションへ結合されてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。例えば、いくつかの実施形態において、ブロック２３０及び／又は２３５は、省略されてもよく、かつ／あるいは、ソートされているか否かにかかわらず関連づけられたリスクスコアを有するプログラミングコード行のリストの生成で置換されてもよい。
【００４０】
図３は、本開示の１つ以上の実施形態による、所与のテストケースの帰結を知らせるアサーションに影響を及ぼすプログラミングコードの行を識別する一例示的な方法３００のフローチャートを示す。方法３００は、テスト下のコードに関して、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、図１の不良位置特定器１３０、又は（例えば、不良位置特定器により指示される）図５のコンピューティングシステム５００が、ソフトウェアプログラムに関して、方法３００に関連づけられた動作のうち１つ以上を実行し、あるいはその実行を指示することができる。別個のブロックで示されているが、方法３００のブロックの１つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックへ結合されてもよく、あるいは消去されてもよい。方法３００は、図２のブロック２２０に関連づけられた動作の一例示的なセットを表し得る。
【００４１】
ブロック３１０において、所与のテストケースが、所与のテストケース内のアサーションを識別するためにパースされてもよい。例えば、（図１の不良位置特定器１３０などの）不良位置特定器が、所与のテストケースをパースして、テストケースが合格か又は不合格かの決定力のあるテストケース内のステートメントを識別するように構成されてもよい。
【００４２】
ブロック３２０において、アサーションが、アサーションの帰結に影響を及ぼす変数を識別するために解析されてもよい。さらに又は代わりに、アサーションの関数、ライブラリ、又は他の特徴若しくは態様が、アサーションの帰結を規定し得るアサーション内で識別されてもよい。
【００４３】
ブロック３３０において、識別された変数を使用するプログラミングコード行が発見されてもよい。さらに、アサーションの関数、ライブラリ、又は他の特徴若しくは態様を呼び出し、決定し、あるいはその他の方法で影響を及ぼすプログラミングコード行が発見されてもよい。
【００４４】
ブロック３４０において、ブロック３３０で発見されたプログラミングコード行が、影響したプログラミングコード行として識別されてもよい。例えば、ブロック３３０で発見されたプログラミングコード行は、アサーションに関連づけられたテストケースが合格か否か、あるいは不合格か否かを規定する実際のコード行であり得、なぜならば、テストケースがアサーションに依存し、アサーションは、アサーションの変数、関数等を使用するプログラミングコードの行により決定されるからである。
【００４５】
本開示の範囲から逸脱することなく、方法３００に対して修正、追加、又は省略がなされてもよい。例えば、方法３００の動作は異なる順序で実現されてもよい。さらに又は代わりに、２つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションへ結合されてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【００４６】
図４は、本開示の１つ以上の実施形態による、ソフトウェアプログラムのコード行についてのリスクスコアを決定する一例示的な方法のフローチャートを示す。方法４００は、テスト下のコードに関して、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、図１の不良位置特定器１３０、又は（例えば、不良位置特定器により指示される）図５のコンピューティングシステム５００が、ソフトウェアプログラムに関して、方法４００に関連づけられた動作のうち１つ以上を実行し、あるいはその実行を指示することができる。別個のブロックで示されているが、方法４００のブロックの１つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックへ結合されてもよく、あるいは消去されてもよい。
【００４７】
ブロック４１０において、プログラムが取得されてもよい。ブロック４１０は、図２のブロック２０５と同様であり、あるいは相当し得る。
【００４８】
ブロック４２０において、正（positive）及び負（negative）双方のテストケースがプログラムに対して動かされてもよい。例えば、複数のテストケースが実行されてもよく、該テストケースのうちいくつかが合格であり、該テストケースのうちいくつかが不合格である。いくつかの実施形態において、プログラムは、テストケースの実行中に追跡又はトレースされてもよく、それにより、テストケースの実行中に使用又は実行され得るコード行が識別されてもよい。
【００４９】
ブロック４３０において、テストケースのアサーションに影響するコード行が、合格及び不合格アサーションの双方について識別されてもよい。例えば、プログラミングコード行が、テストケースに対するアサーション内に位置する変数又は関数を含むコード行を識別するためにパースされ、あるいは検索されてもよい。
【００５０】
ブロック４４０において、各々のコード行について、ファクタａｐ、ｎｐ、ａｆ、及びｎｆが抽出されてもよい。例えば、ファクタａｐは、合格でコード行により影響されるアサーションの数を示すことができ、ファクタｎｐは、合格でコード行により影響されないアサーションの数を示すことができ、ファクタａｆは、不合格でコード行により影響されるアサーションの数を示すことができ、ｎｆは、不合格でコード行により影響されないアサーションの数を示す。
【００５１】
ブロック４１２において、各々のコード行について、リスクスコアが決定されてもよい。いくつかの実施形態において、リスクスコアは、それぞれのステートメントについて決定された使用ファクタに基づいて決定されてもよい。例えば、いくつかの実施形態において、各々のコード行についてのリスクスコアは、それぞれのコード行のａｐ、ｎｐ、ａｆ、及びｎｆに基づいてもよい。リスクスコアを算出するためのいくつかの関数には、以下が含まれる：
【数１】
2020102209.tif 000003
【００５２】
いくつかの実施形態において、リスクスコアは正規化されてもよい。例えば、いくつかの例において、リスクスコアは、「０」と「１」との間の値を有するように正規化されてもよく、「１」のスコアは、それぞれのコード行が不良を含むことのかなり高い可能性（likelihood）を示し、「０」のスコアは、それぞれのコード行が不良を含むことのかなり低い又はゼロの可能性を示す。以下は、特定のコード行についての正規化されたリスクスコアを決定する一例示的な式である：
【数２】
2020102209.tif 000004
【００５３】
上記式において、「コード行のリスクスコア（Risk  Score  of  the  Line  of  Code）」は、特定のコード行について決定されたリスクスコアを参照してもよく、「任意のコード行の最大リスクスコア（Maximum  Risk  Score  of  Any  Line  of  Code）」は、解析されているプログラムのコード行の全てに関して決定され得る最も高いリスクスコアを参照してもよい。最も高いリスクスコアを有するコード行については、分子と分母は同じであることに留意する。いくつかの実施形態において、正規化は、あらゆるコード行についてリスクスコアが決定された後、実行されてもよい。
【００５４】
ブロック４６０において、プログラミングコード行がリスクスコアによりランク付けされてもよい。例えば、コード行は、プログラミングコード行のリスクスコアに基づいてソート及び表示され、記憶され、あるいはその他の方法で編成されてもよい。
【００５５】
本開示の範囲から逸脱することなく、方法４００に対して修正、追加、又は省略がなされてもよい。例えば、方法４００の動作は異なる順序で実現されてもよい。さらに又は代わりに、２つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションへ結合されてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【００５６】
図５は、本開示に記載された少なくとも１つの実施形態による、一例示的なコンピューティングシステムを示す。システム５００は、ソフトウェアプログラムにおける不良の位置の識別に参加するように構成された任意の適切なシステム、装置、又はデバイスを含んでもよい。コンピューティングシステム５００は、プロセッサ５１０、メモリ５２０、データ記憶装置５３０、及び通信ユニット５４０を含んでもよく、これらは全て、通信上結合されてもよい。データ記憶装置５３０は、不良を含むことの高いリスクを有するプログラミングコードの行の位置を識別するための動作を実行する、コンピュータ読取可能命令などの種々のタイプのデータを含んでもよい。
【００５７】
一般に、プロセッサ５１０は、種々のコンピュータハードウェア又はソフトウェアモジュールを含む、任意の適切な専用若しくは汎用コンピュータ、コンピューティングエンティティ、又は処理デバイスを含んでもよく、任意の適用可能なコンピュータ読取可能記憶媒体に記憶された命令を実行するように構成されてもよい。例えば、プロセッサ５１０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又はプログラム命令を解釈及び／又は実行するよう及び／又はデータを処理するように構成された任意の他のデジタル若しくはアナログ回路を含んでもよい
【００５８】
図５において単一のプロセッサとして示されているが、プロセッサ５１０は、より一般的には、本開示において説明された任意数の動作を個々又は集合的に実行するように構成された、任意数のネットワーク又は物理位置にわたり分散された任意数のプロセッサを含んでもよい。いくつかの実施形態において、プロセッサ５１０は、メモリ５２０、データ記憶装置５３０、又はメモリ５２０及びデータ記憶装置５３０に記憶されたプログラム命令を解釈及び／又は実行し、かつ／あるいはデータを処理することができる。いくつかの実施形態において、プロセッサ５１０は、データ記憶装置５３０からプログラム命令を取り出し、プログラム命令をメモリ５２０にロードすることができる。
【００５９】
プログラム命令がメモリ５２０にロードされた後、プロセッサ５５０は、図２、図３、及び図４の方法２００、３００、及び／又は４００をそれぞれ実行するための命令などの、プログラム命令を実行してもよい。例えば、プロセッサ５１０は、プログラムのテストケースを動かすことと、どのコード行がテストケースのアサーションに影響するか及びテストケースが合格か又は不合格かを決定することとに関する命令を取得ことができる。
【００６０】
メモリ５２０及びデータ記憶装置５３０は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有する複数のコンピュータ読取可能記憶媒体又は１つ以上のコンピュータ読取可能記憶媒体を含むことができる。そのようなコンピュータ読取可能記憶媒体は、プロセッサ５１０などの汎用又は専用コンピュータによりアクセスされ得る任意の利用可能な媒体であってもよい。いくつかの実施形態において、コンピューティングシステム５００は、メモリ５２０及びデータ記憶装置５３０のいずれかを含んでもよく、あるいは含まなくてもよい。
【００６１】
限定でなく例として、そのようなコンピュータ読取可能記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、電気的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、コンパクトディスク読取専用メモリ（ＣＤ‐ＲＯＭ）若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又はコンピュータ実行可能命令又はデータ構造の形式で所望のプログラムコードを搬送又は記憶するために使用でき、かつ汎用又は専用コンピュータによりアクセスできる任意の他の記憶媒体を含む、非一時的コンピュータ読取可能記憶媒体を含んでもよい。上記の組み合わせもまた、コンピュータ読取可能記憶媒体の範囲内に含まれてもよい。コンピュータ実行可能命令は、例えば、プロセッサ５１０に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
【００６２】
通信ユニット５４０は、ネットワークを通じて情報を送信又は受信するように構成された任意のコンポーネント、デバイス、システム、又はこれらの組み合わせを含んでもよい。いくつかの実施形態において、通信ユニット５４０は、他の場所、同じ場所における他のデバイス、又はさらには同じシステム内の他のコンポーネントと通信してもよい。例えば、通信ユニット５４０は、モデム、ネットワークカード（無線又は有線）、光通信デバイス、赤外線通信デバイス、無線通信デバイス（アンテナなど）、及び／又はチップセット（Ｂｌｕｅｔｏｏｔｈ（登録商標）デバイス、８０２．６デバイス（例えば、メトロポリタンエリアネットワーク（ＭＡＮ））、ＷｉＦｉデバイス、ＷｉＭａｘデバイス、セルラー通信設備等）などを含んでもよい。通信ユニット５４０は、本開示に記載されるネットワーク及び／又は任意の他のデバイス若しくはシステムとの間でデータが交換されることを可能にしてもよい。例えば、通信ユニット５４０は、システム５００がコンピューティングデバイス及び／又は他のネットワークなどの他のシステムと通信することを可能にしてもよい。
【００６３】
本開示の範囲から逸脱することなく、システム５００に対して修正、追加、又は省略がなされてもよい。例えば、データ記憶装置５３０は、複数の場所に位置し、かつネットワークを通してプロセッサ５１０によりアクセスされる複数の異なる記憶媒体であってもよい。
【００６４】
上述のように、本開示に記載される実施形態は、以下でより詳細に論じられるように、種々のコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用コンピュータ（例えば、図５のプロセッサ５１０）の使用を含んでもよい。さらに、上述のように、本開示に記載される実施形態は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能媒体（例えば、図５のメモリ５２０）を使用して実現されてもよい。
【００６５】
本開示において用いられるとき、用語「モジュール」又は「コンポーネント」は、モジュール又はコンポーネントのアクションを実行するように構成された特定のハードウェア実装、及び／又はコンピューティングシステムの汎用ハードウェア（例えば、コンピュータ読取可能媒体、処理デバイス等）に記憶され及び／又は汎用ハードウェアにより実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを参照し得る。いくつかの実施形態において、本開示に記載される異なるコンポーネント、モジュール、エンジン、及びサービスが、コンピューティングシステム上で実行するオブジェクト又はプロセスとして（例えば、別個のスレッドとして）実現されてもよい。本開示に記載されるシステム及び方法のいくつかは、一般に、（汎用ハードウェアに記憶され、及び／又は汎用ハードウェアにより実行される）ソフトウェアで実現されるものとして記載されるが、特定のハードウェア実装、又はソフトウェアと特定のハードウェア実装との組み合わせもまた可能であり、企図される。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又はコンピューティングシステム上で動作する任意のモジュール又はモジュレートの組み合わせであってもよい。
【００６６】
本開示において、特に別記の特許請求の範囲（例えば、別記の特許請求の範囲の本文）において用いられる用語は、一般に「開放的」な用語として意図されている（例えば、用語「含んでいる」は、「含んでいるがこれに限定されない」と解釈されるべきであり、用語「有する」は、「少なくとも有する」と解釈されるべきであり、用語「含む」は、「含むがこれに限定されない」と解釈されるべきである、等）。
【００６７】
さらに、特定数の導入された請求項記載が意図されている場合、そのような意図は請求項に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、以下の別記の特許請求の範囲は、請求項記載を導入するために、導入フレーズ「少なくとも１つの」及び「１つ以上の」の使用を含むことがある。しかしながら、そのようなフレーズの使用は、不定冠詞「一の」（“a”又は“an”）による請求項記載の導入が、同じ請求項が導入フレーズ「１つ以上の」又は「少なくとも１つの」と「一の」などの不定冠詞とを含むときでも、そのような導入された請求項記載を含む任意の特定の請求項を１つのそのような記載のみ含む実施形態に限定することを暗に示すように見なされるべきではない（例えば、「一の」（“a”及び／又は“an”）は「少なくとも１つの」又は「１つ以上の」を意味するよう解釈されるべきである）。請求項記載を導入するために用いられる定冠詞の使用についても同様である。
【００６８】
さらに、特定数の導入された請求項記載が明示的に記載されている場合であっても、当業者は、そのような記載は少なくとも記載された数を意味するよう解釈されるべきであることを認識するであろう（例えば、他の修飾語を伴わない「２つの記載」というただそれだけの記載は、少なくとも２つの記載を意味するか、あるいは２つ以上の記載を意味する）。さらに、「Ａ、Ｂ、及びＣ等のうち少なくとも１つ」又は「Ａ、Ｂ、及びＣ等のうち１つ以上」と類似の規定が用いられている例において、一般に、そのような構造は、Ａ単独、Ｂ単独、Ｃ単独、Ａ及びＢ共に、Ａ及びＣ共に、Ｂ及びＣ共に、又はＡ、Ｂ、及びＣ共に等を含むことが意図される。
【００６９】
さらに、明細書においてか、特許請求の範囲においてか、又は図面においてかにかかわらず、２つ以上の代替的な用語を提示するいかなる分離的なワード又はフレーズも、用語のうち１つ、用語のうちいずれか、又は双方の用語を含む可能性を考慮するよう理解されるべきである。例えば、フレーズ「Ａ又はＢ」は、「Ａ」又は「Ｂ」又は「Ａ及びＢ」の可能性を含むよう理解されるべきである。
【００７０】
本開示に記載された全ての例及び条件付き言語は、本開示と発明者が当該分野を促進するために寄与した概念とを理解する際に読者を助けるための教育的目的を意図されており、そのような具体的に記載された例及び条件への限定を伴わないとみなされるべきである。本開示の実施形態が詳細に記載されたが、本開示の主旨及び範囲から逸脱することなく、種々の変更、置換、及び改変をこれに行うことができる。
上記の実施形態につき以下の付記を残しておく。
（付記１）
プログラムの複数のプログラミングコード行を取得するステップと、
前記プログラムをテストするための複数のテストケースを取得するステップであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ステップと、
前記テストケースの各々について前記プログラムを実行するステップと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別するステップと、
前記複数のプログラミングコード行のうち少なくとも１つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出するステップであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも１つが不良を含む可能性を示す、ステップと、
を含む方法。
（付記２）
前記リスクスコアを算出するステップは、正の結果をもたらした少なくとも１つのテストケースと負の結果をもたらした少なくと１つのテストケースとにさらに基づく、付記１に記載の方法。
（付記３）
前記リスクスコアを算出するステップは、正の結果をもたらした少なくとも１つのテストケースにさらに基づく、付記１に記載の方法。
（付記４）
影響したプログラミング行を識別するステップは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別するステップと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす１つ以上の変数を識別するステップと、
前記１つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見するステップと、
前記１つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別するステップと、
を含む、付記１に記載の方法。
（付記５）
前記コード行を発見するステップは、制御フロー解析及びデータフロー解析のうち少なくとも１つに基づく、付記４に記載の方法。
（付記６）
前記影響したプログラミングコード行を識別するステップは、プログラムの実行からのデータ依存性に基づく、付記１に記載の方法。
（付記７）
前記プログラムの前記複数のプログラミングコード行と前記プログラミングコード行の各々についての対応するリスクスコアとの表示を生成するステップ、をさらに含む付記１に記載の方法。
（付記８）
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、付記１に記載の方法。
（付記９）
命令を含む非一時的コンピュータ読取可能媒体であって、１つ以上のプロセッサにより実行されたことに応じてシステムに動作を実行させ、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも１つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも１つが不良を含む可能性を示す、ことと、
を含む、非一時的コンピュータ読取可能媒体。
（付記１０）
前記リスクスコアを算出することは、正の結果をもたらした少なくとも１つのテストケースと負の結果をもたらした少なくとも１つのテストケースとにさらに基づく、付記９に記載のコンピュータ読取可能媒体。
（付記１１）
前記リスクスコアを算出することは、正の結果をもたらした少なくとも１つのテストケースにさらに基づく、付記９に記載のコンピュータ読取可能媒体。
（付記１２）
影響したプログラミング行を識別することは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別することと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす１つ以上の変数を識別することと、
前記１つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見することと、
前記１つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別することと、
を含む、付記９に記載のコンピュータ読取可能媒体。
（付記１３）
前記コード行を発見することは、制御フロー解析及びデータフロー解析のうち少なくとも１つに基づく、付記１２に記載のコンピュータ読取可能媒体。
（付記１４）
前記影響したプログラミングコード行を識別することは、プログラムの実行からのデータ依存性に基づく、付記９に記載のコンピュータ読取可能媒体。
（付記１５）
前記プログラムの前記複数のプログラミングコード行と前記プログラミングコード行の各々についての対応するリスクスコアとの表示を生成するステップ、をさらに含む付記９に記載のコンピュータ読取可能媒体。
（付記１６）
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、付記９に記載のコンピュータ読取可能媒体。
（付記１７）
システムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサにより実行されたときに当該システムに動作を実行させる命令を含む１つ以上の非一時的コンピュータ読取可能媒体と、
を含み、前記動作は、
プログラムの複数のプログラミングコード行を取得することと、
前記プログラムをテストするための複数のテストケースを取得することであり、前記テストケースの各々は、それぞれのテストケースの結果が基礎とするアサーションを含む、ことと、
前記テストケースの各々について前記プログラムを実行することと、
前記アサーションに影響を及ぼす、影響したプログラミングコード行を識別することと、
前記複数のプログラミングコード行のうち少なくとも１つについてのリスクスコアを、前記影響したプログラミングコード行と前記アサーションとに基づいて算出することであり、前記リスクスコアは、前記複数のプログラミングコード行のうち前記少なくとも１つが不良を含む可能性を示す、ことと、
を含む、システム。
（付記１８）
前記リスクスコアを算出することは、正の結果をもたらした少なくとも１つのテストケースと負の結果をもたらした少なくとも１つのテストケースとにさらに基づく、付記１７に記載のシステム。
（付記１９）
影響したプログラミング行を識別することは、
所与のテストケースをパースして、前記所与のテストケース内の前記アサーションを識別することと、
前記アサーションを解析して、前記アサーションの帰結に影響を及ぼす１つ以上の変数を識別することと、
前記１つ以上の変数を使用する、前記複数のプログラミングコード行内のコード行を発見することと、
前記１つ以上の変数を使用する前記コード行を、前記影響したプログラミングコード行として識別することと、
を含む、付記１７に記載のシステム。
（付記２０）
閾値スコアを上回る対応するリスクスコアを有する、前記プログラムのうちリスクのあるプログラミングコード行を識別するステップと、
前記対応するリスクスコアが閾値を上回ることに応じて、前記リスクのあるプログラミングコード行を改訂されたプログラミングコード行で自動的に置換するステップと、
をさらに含む、付記１７に記載のシステム。
【図１】
2020102209.tif 000005
【図２】
2020102209.tif 000006
【図３】
2020102209.tif 000007
【図４】
2020102209.tif 000008
【図５】
2020102209.tif 000009