IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特許7409197ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
<>
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図1
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図2
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図3A
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図3B
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図4
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図5A
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図5B
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図6A
  • 特許-ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 図6B
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-25
(45)【発行日】2024-01-09
(54)【発明の名称】ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
(51)【国際特許分類】
   G06F 11/36 20060101AFI20231226BHJP
【FI】
G06F11/36 104
【請求項の数】 20
(21)【出願番号】P 2020058005
(22)【出願日】2020-03-27
(65)【公開番号】P2021002326
(43)【公開日】2021-01-07
【審査請求日】2022-12-08
(31)【優先権主張番号】16/447535
(32)【優先日】2019-06-20
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】吉田 浩章
(72)【発明者】
【氏名】プラサド・ムクル
【審査官】円子 英紀
(56)【参考文献】
【文献】特開2019-029015(JP,A)
【文献】特開2017-151977(JP,A)
【文献】特開2018-133081(JP,A)
【文献】特表2017-519300(JP,A)
【文献】特開2006-236042(JP,A)
【文献】特開2008-250914(JP,A)
【文献】特開平09-185500(JP,A)
【文献】特開平11-085536(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
修復パターンセットを読み出すステップであって、前記修復パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習される、ステップと、
前記ソフトウェアプログラムの第2違反セットを読み出すステップであって、前記第2違反セットの各々は未確定違反である、ステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットから、第1ソフトウェアプログラムの未確定違反を選択するステップと、
前記修復パターンセットから修復パターンを選択するステップと、
前記修復パターンセットの精緻化のために第1動作セットを実行するステップであって、前記第1動作セットは、
前記選択された未確定違反に前記選択された修復パターンを適用して、修復結果を生成するステップと、
前記生成された修復結果が違反に対応するか否かを決定するステップと、
前記生成された修復結果が前記違反に対応するという結果に基づき、前記修復パターンセットから前記適用した修復パターンを削除するステップと、
前記修復パターンセットの中の次の修復パターンを前記選択された修復パターンとして再選択するステップと、を含む、ステップと、
前記選択された修復パターンに基づき、前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得するステップと、
を含む方法。
【請求項2】
前記第2違反セットは同じ違反タイプである、請求項1に記載の方法。
【請求項3】
前記修復パターンセットの各々は、修復例としての、前記ソフトウェアプログラムの中の前記第1違反セット又は前記第2違反セットの対応する違反を修復する1つ以上の編集動作に対応する、請求項1に記載の方法。
【請求項4】
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記修復パターンセットに対して前記第1動作セットを繰り返し実行するステップと、
前記読み出した第2違反セットの各々について前記第1動作セットを繰り返し実行する前記ステップに基づき、前記精緻化された修復パターンセットを取得するステップと、
を更に含む請求項1に記載の方法。
【請求項5】
前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、第2修復例セットを生成するステップ、を更に含み、
前記第1動作セットは、
前記適用した修復パターンに基づき、前記生成された修復結果が前記選択された未確定違反の修復に対応するか否かを決定するステップと、
前記生成された修復結果が前記選択された未確定違反の前記修復に対応するという決定に基づき、前記選択された未確定違反に関連付けられた修復例を生成するステップと、
前記生成された修復例を前記第2修復例セットに追加するステップと、
を更に含む、請求項1に記載の方法。
【請求項6】
前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記修復パターンセットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む請求項5に記載の方法。
【請求項7】
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記第1動作セットを繰り返し実行することにより、前記第2修復例セットを生成するステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記ソフトウェアプログラムの前記読み出した第2違反セットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む請求項5に記載の方法。
【請求項8】
データベースから、第2ソフトウェアプログラムの新たに発見した違反を受信するステップと、
前記受信した新たに発見した違反に前記精緻化された修復パターンセットのうちの1つを適用するステップと、
前記受信した新たに発見した違反への前記精緻化された修復パターンセットのうちの1つの適用に基づき、修復済み第2ソフトウェアプログラムを生成するステップと、
を更に含む請求項1に記載の方法。
【請求項9】
前記ソフトウェアプログラムの前記第2違反セットはデータベースから読み出される、請求項1に記載の方法。
【請求項10】
命令を格納するよう構成された1つ以上の非一時的コンピュータか独記憶媒体であって、前記命令は、実行されることに応答して、システムに動作を実行させ、前記動作は、
修復パターンセットを読み出すステップであって、前記修復パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習される、ステップと、
前記ソフトウェアプログラムの第2違反セットを読み出すステップであって、前記第2違反セットの各々は未確定違反である、ステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットから、第1ソフトウェアプログラムの未確定違反を選択するステップと、
前記修復パターンセットから修復パターンを選択するステップと、
前記修復パターンセットの精緻化のために第1動作セットを実行するステップであって、前記第1動作セットは、
前記選択された未確定違反に前記選択された修復パターンを適用して、修復結果を生成するステップと、
前記生成された修復結果が違反に対応するか否かを決定するステップと、
前記生成された修復結果が前記違反に対応するという結果に基づき、前記修復パターンセットから前記適用した修復パターンを削除するステップと、
前記修復パターンセットの中の次の修復パターンを前記選択された修復パターンとして再選択するステップと、を含む、ステップと、
前記選択された修復パターンに基づき、前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得するステップと、
を含む、1つ以上のコンピュータ可読記憶媒体。
【請求項11】
前記第2違反セットは同じ違反タイプである、請求項10に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項12】
前記修復パターンセットの各々は、修復例としての、前記ソフトウェアプログラムの中の前記第1違反セット又は前記第2違反セットの対応する違反を修復する1つ以上の編集動作に対応する、請求項10に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項13】
前記動作は、
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記修復パターンセットに対して前記第1動作セットを繰り返し実行するステップと、
前記読み出した第2違反セットの各々について前記第1動作セットを繰り返し実行する前記ステップに基づき、前記精緻化された修復パターンセットを取得するステップと、
を更に含む、請求項10に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項14】
前記動作は、
前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、第2修復例セットを生成するステップ、を更に含み、
前記第1動作セットは、
前記適用した修復パターンに基づき、前記生成された修復結果が前記選択された未確定違反の修復に対応するか否かを決定するステップと、
前記生成された修復結果が前記選択された未確定違反の前記修復に対応するという決定に基づき、前記選択された未確定違反に関連付けられた修復例を生成するステップと、
前記生成された修復例を前記第2修復例セットに追加するステップと、
を更に含む、請求項10に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項15】
前記動作は、
前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記修復パターンセットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む、請求項14に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項16】
前記動作は、前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記第1動作セットを繰り返し実行することにより、前記第2修復例セットを生成するステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記ソフトウェアプログラムの前記読み出した第2違反セットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む、請求項14に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項17】
前記動作は、
データベースから、第2ソフトウェアプログラムの新たに発見した違反を受信するステップと、
前記受信した新たに発見した違反に前記精緻化された修復パターンセットのうちの1つを適用するステップと、
前記受信した新たに発見した違反への前記精緻化された修復パターンセットのうちの1つの適用に基づき、修復済み第2ソフトウェアプログラムを生成するステップと、
を更に含む、請求項10に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項18】
前記ソフトウェアプログラムの前記第2違反セットはデータベースから読み出される、請求項10に記載の1つ以上のコンピュータ可読記憶媒体。
【請求項19】
電子装置であって、プロセッサを含み、前記プロセッサは、
修復パターンセットを読み出し、前記修復パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習され、
前記ソフトウェアプログラムの第2違反セットを読み出し、前記第2違反セットの各々は未確定違反であり、
前記ソフトウェアプログラムの前記読み出した第2違反セットから、第1ソフトウェアプログラムの未確定違反を選択し、
前記修復パターンセットから修復パターンを選択し、
前記修復パターンセットの精緻化のために第1動作セットを実行し、前記第1動作セットは、
前記選択された未確定違反に前記選択された修復パターンを適用して、修復結果を生成するステップと、
前記生成された修復結果が違反に対応するか否かを決定するステップと、
前記生成された修復結果が前記違反に対応するという結果に基づき、前記修復パターンセットから前記適用した修復パターンを削除するステップと、
前記修復パターンセットの中の次の修復パターンを前記選択された修復パターンとして再選択するステップと、を含み、
前記選択された修復パターンに基づき、前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得する、
よう構成される、電子装置。
【請求項20】
前記ソフトウェアプログラムの前記第2違反セットはデータベースから読み出される、請求項19に記載の電子装置。

【発明の詳細な説明】
【技術分野】
【0001】
本開示で議論される実施形態は、ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化に関する。
【背景技術】
【0002】
ソフトウェアプログラムの性能及び正確さに影響を与え得る又はプロジェクトのスタイルガイドラインに違反する疑わしいコードパターンを識別しフラグを立てるために、ソフトウェアプログラムのための多くの新しい技術が開発されている。疑わしいコードパターン又は違反は、ソフトウェアプログラムにより実行される動作に影響し得るだけでなく、ソフトウェアプログラムの全体の開発時間にも影響を与え得る。異なる分野における様々なソフトウェアプログラムから特定された異なる違反を修復するために、あるソリューションが開発されている。このようなソリューションは、対応する違反を修復し又は解決するための修復例と呼ばれている。
【0003】
本開示で請求される主題は、任意の欠点を解決する実施形態なたが]上述のような環境でのみ動作する実施形態に限定されない。むしろ、この背景技術は、本開示に記載の幾つかの実施形態が実施され得る一例である技術領域を説明するためにのみ提供される。
【発明の概要】
【0004】
一実施形態の一態様によると、動作は、修復パターンセットを読み出すステップを含んでよい。修正パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習されてよい。動作は、ソフトウェアプログラムの第2違反セットを読み出すステップを更に含んでよい。第2違反セットの各々は、未確定違反であってよい。動作は、ソフトウェアプログラムの読み出した第2違反セットから第1ソフトウェアプログラムの未確定違反を選択するステップと、修復パターンセットから修復パターンを選択するステップと、を更に含んでよい。動作は、修正パターンセットの精緻化のために、第1動作セットを実行するステップを更に含んでよい。第1動作セットは、選択された未確定違反に選択された修正パターンを適用して修復結果を生成するステップを更に含んでよい。第1動作セットは、生成された修復結果が違反に対応するか否かを決定するステップと、生成された修正結果が違反に対応するという決定に基づき、適用した修復パターンを修復パターンセットから削除するステップと、を更に含んでよい。第1動作セットは、修復パターンセットの中の次の修復パターンを選択された修復パターンとして再選択するステップを更に含んでよい。動作は、選択された修正パターンに基づき、修正パターンセットについて、第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得するステップを更に含んでよい。
【0005】
実施形態の目的及び利点は、請求項において特に指摘される要素、特徴、及び組み合わせにより少なくとも実現され達成される。
【0006】
前述の一般的説明及び以下の詳細な説明は両方とも例として与えられ、説明のためであり、請求される本発明の限定ではない。
【図面の簡単な説明】
【0007】
例示的な実施形態は、以下の添付の図面の使用を通じて更なる特殊性及び詳細事項により記載され説明される。
【0008】
図1】ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化に関連する例示的な環境を示す図である。
【0009】
図2】ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化のための例示的な電子装置を示すブロック図である。
【0010】
図3A】違反を含む欠陥ソフトウェアプログラム及び修復済みソフトウェアプログラムの例を示す。
【0011】
図3B】ソフトウェアプログラムの中の違反を修復するための例示的な修復パターンを示す。
【0012】
図4】ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化のための例示的な方法のフローチャートである。
【0013】
図5A】ソフトウェアプログラムの中の違反への修復パターンの適用に基づく修復パターンの精緻化のための例示的な方法のフローチャートを示す。
図5B】ソフトウェアプログラムの中の違反への修復パターンの適用に基づく修復パターンの精緻化のための例示的な方法のフローチャートを示す。
【0014】
図6A】人間のフィードバックに基づく修復パターンの精緻化のための例示的な方法のフローチャートを示す。
図6B】人間のフィードバックに基づく修復パターンの精緻化のための例示的な方法のフローチャートを示す。
【0015】
全図は、本開示に記載される少なくとも1つの実施形態に従う。
【発明を実施するための形態】
【0016】
本開示に記載の幾つかの実施形態は、ソフトウェアプログラムのプログラムコードの静的コード分析に基づき識別され得る違反の修正パターンの精緻化に関連する。標準的に、ソフトウェアプログラムは、多様なソリューションを提供するために、異なるドメイン固有言語で開発される。ソフトウェアプログラムの開発又は展開の間に、幾つかの問題(例えば、欠陥、バグ、疑わしいコード、又は違反)が検出されることがある。これらの問題は、ソフトウェアプログラムの必要な動作又は性能に影響するだけでなく、ソフトウェアプログラムの展開の達成のための全体的な時間にも影響を与え得る。
【0017】
特定の静的アナライザ又は静的コード分析ツールが、ソフトウェアプログラムの異なる違反を自動的に検出するために利用可能である。これらの静的コード分析ツールは、1つ以上の構文違反及び/又は意味的違反を検出し得る。これらの静的コード分析ツールは、識別された違反の異なる属性(例えば、種類、行番号、ノード名、又はノード属性)を検出し得る。さらに、これらの静的コード分析ツールは、文体違反、一般的なソフトウェアの欠点、セキュリティ脆弱性、及び/又は他のスタイルガイドライン違反も検出し得る。静的コードアナライザ又は静的コード分析ツールの例は、限定ではないが、FindBugs、SpotBugs、PMD、Coverity、Facebook Infer、Google error-prone、SonarQube、Splint、cppcheck、又はClang static analyzerを含み得る。このような静的コード分析ツールは、異なるドメイン固有言語(domain specific languages:DSL)のソフトウェアプログラムの中の違反を自動的に検出できる。
【0018】
標準的に、違反を修復し及び欠陥ソフトウェアプログラムを改良ソフトウェアプログラムに変換するために、修復動作または変更が使用され得る。ソフトウェアプログラムの開発の増加に伴い、検出される違反の数も優位に増大している。しかしながら、依然として、検出される違反の数の増大と比べて、修復動作の数は、限定的であり不十分である。
【0019】
異なる学習技術(例えば、機械学習)を通じて修復戦略(又は共通の修復パターン)を自動的に学習し生成するために、修復例として幾つかの修復動作を考慮した、特定のソリューションが開発された。このようなソリューションは、「例示プログラミング(programming by example:PbE)」に基づく修復パターン学習又は生成システムと呼ばれる。例えば、参照により全体がここに組み込まれる米国特許出願番号第16/109,434号、2018年8月22日出願は、1つ以上のソフトウェアプログラムの中の異なる検出した欠陥(つまり違反)に基づく、及び検出した欠陥に関連付けられた編集動作(つまり修復例)に基づく、修正パターン(以後、修復パターンと呼ぶ)の生成及び学習を議論している。参照された出願による修正パターン(又は修復パターン)を生成する方法は、単なる例であることに留意する。しかしながら、異なる修復例又は違反を修復するために実行される編集動作に基づき、修復パターンを生成し又は街区周する異なる他の方法が存在し得る。
【0020】
生成された修復パターンは、検出したソフトウェアプログラムに対して修復動作を実行するために使用され得る。修復パターンは、検出した違反に対して実行される1つ以上の編集動作(修復例としての)を一般化し又は表すこと、又は修復済みソフトウェアプログラムを得ることにも対応し得る。同様に、幾つかの改良されたソフトウェアプログラムは、異なる修復パターンを学習し又は生成するために、(違反を含む)異なる欠陥ソフトウェアプログラムに関して、1つ以上の編集動作を識別してよい。修復パターンは、修復パターンを用いて修復される違反を含む、ソフトウェアプログラムのソースコードと互換性のあるフォーマットで生成されてよい。図2A及び図2Bに、例えば、修復例及び修復パターンの特定の例が詳細に記載される。
【0021】
生成された修復パターンは、特定の報告された違反を修復することが可能であり得る。依然として、一般的修復パターンに対してテストされていない又は一般的修復パターンを用いて修復を試みられていない幾つかの未修正又は未知の違反が存在し得る。これは、修復パターン(又は修正パターン若しくは修復戦略)を生成するために不十分な数の修復例しかないことに起因し、これは、未修正又は未知の違反を修復するのに十分に一般的または可能でないことがある。したがって、異なる未確定違反を解決するために、自動的に生成された修復パターンの改良または精緻化が必要である。
【0022】
本開示の1つ以上の実施形態によると、ソフトウェアセキュリティ、ソフトウェアデバッグ、ソフトウェア検証及び妥当性確認(verification and validation:V&V)を含むソフトウェアプロジェクト管理の技術分野は、コンピューティングシステムが種々の未修正又は未知の違反に対する種々の修復パターン(又は戦略)を格納する訓練されたモデルを実行し、及び種々の未修正又は未知の違反に対する訓練されたモデルの実行に基づき格納された修復パターンを更に精緻化できるように、コンピュータシステムを構成することにより精緻化され得る。
【0023】
システムは、種々の修復例に基づき生成され/学習され得る格納された修復パターンを読み出すよう構成されてよい。システムは、データベースから未確定違反セットを読み出し、読み出した修正パターンの各々を読み出した未確定違反の各々に適用するよう更に構成されてよい。システムは、修復パターンの各々の読み出した未確定違反の各々への適用が未確定違反の修復をもたらすか否かを決定するよう更に構成されてよい。修復パターンが対応する未確定違反を修復できないと決定された場合、修復パターンの精緻化されたシステムを得るために、決定された修復パターンは、修復パターンの学習されたシステムから削除されてよい。精緻化された修復パターンは、幾つかの未修正又は新たに発見された違反を修復するために向上した精度(又は品質)を実証し得る。幾つかの実施形態では、精緻化されたシステムは、(「最良」修復パターンとして、)特定種類の全ての未確定違反を修復可能な1つの修復パターンを含んでよい。別の実施形態では、精緻化されたシステムは、特定種類の閾数の(例えば「90%」以上の)違反を修復するのに十分正確であり得る修復パターンセットを含んでよい。
【0024】
本開示の実施形態は、添付の図面を参照して説明される。
【0025】
図1は、本開示に記載される少なくとも1つの実施形態に従い構成される、ソフトウェアプログラム内の静的分析違反の修復パターンの精緻化に関連する例示的な環境を示す図である。図1を参照すると、環境100が示される。環境100は、電子装置102、データベース104、ユーザエンド装置106、及び通信ネットワーク108を含んでよい。電子装置102、データベース104、及びユーザエンド装置106は、通信ネットワーク108を介して互いに通信可能に結合されてよい。図1には、データベース104に格納された、修復パターンセット110、第1違反セット112、第1修復例セット114、及び第2違反セット116が更に示される。第2違反セット116は、データベース104に格納された未知又は未確定違反に対応してよい。電子装置102に関連付けられ又はそれを操作し得るユーザ118が更に示される。ユーザ118は、ソフトウェア開発、デバッグ、又はテスト経験を有する人物であってよい。
【0026】
電子装置102は、データベース104から修復パターンセット110を読み出すよう構成され得る、適切なロジック、回路、及びインタフェースを含んでよい。修正パターンセット110は、異なるソフトウェアプログラムの第1違反セット112に関連付けられた第1修復例セット114に基づき学習され又は生成されてよい。第1違反セット112は、修復例セット114が利用可能である、したがって確定違反と呼ばれる欠陥コードの一部に対応してよい。第2違反セットは、修復例セットが利用可能でない、したがって未確定違反と呼ばれる欠陥コードの一部に対応してよい。
【0027】
第1違反セット112及び第2違反セット116は、従来知られている種々の静的コード分析ツールによりソフトウェアプログラムから検出された欠陥またはバグに対応してよい。また、第1違反セット112及び第2違反セットの各々は、違反の説明及び違反カテゴリに関連付けられてよい。違反の説明及び関連する違反カテゴリの一例は、以下の表1に提供される。
[表1]例示的な違反の説明及びカテゴリ
【表1】
【0028】
電子装置102は、第2違反セット116(つまり、未確定又は未知の違反)をデータベース104から読み出し、読み出した修復パターンセット110の各々を第2違反セット116に適用するよう構成されてよい。電子装置102は、第1修復例セット114から自動的に学習された修復パターンセット110が、データベース104に格納された第2違反セット116の各々を修復又は解決できるか否かを決定するよう構成されてよい。電子装置102は、第2違反セット116の各々を修復できない可能性のある、修復パターンセット110からの修復パターンを決定するよう構成されてよい。電子装置102は、決定した修復パターンを削除し、決定した修復パターンの削除に基づき、修復パターンセット110を更に精緻化するよう更に構成されてよい。幾つかの実施形態では、第2違反セット116(つまり、精緻化のために修復パターンセット110と共に適用される)は、同じ種類又はカテゴリの違反に対応してよい。違反の種類の例は、限定ではないが、NULLポインタ逆参照、範囲外、セキュリティ問題、又は悪意のあるコードの脆弱性、危険なコード、性能問題、コード規則を含み得る。
【0029】
1つ以上の実施形態では、電子装置102は、異なる修復パターンの第2違反セット116(つまいr未確定違反)への適用により、種々の修復例を生成するよう構成されてよい。電子装置102は、ユーザ118からユーザ入力を受信するよう更に構成されてよい。ユーザ入力は、生成された修復例のうちの1つ以上の選択であってよい。電子装置102は、人間のフィードバック又は選択に基づく修復パターンの更なる精緻化のために、選択された修復例を修復パターンとして、第1修復例セット114に追加するよう構成されてよい。
【0030】
電子装置102の例は、限定ではないが、統合開発環境(integrated development environment:IDE)装置、ソフトウェアテスト装置、モバイル装置、デスクトップコンピュータ、ラップトップ、コンピュータワークステーション、コンピューティング装置、メインフレームマシン、クラウドサーバのようなサーバ、及びサーバ群を含んでよい。1つ以上の実施形態では、電子装置102は、ユーザエンド端末装置、及びユーザエンド端末装置に通信可能に結合されたサーバを含んでよい。ユーザエンド端末装置の例は、限定ではないが、モバイル装置、デスクトップコンピュータ、ラップトップ、及びコンピュータワークステーションを含んでよい。電子装置102は、プロセッサ、(例えば、1つ以上の動作を実行する又は実行を制御する)マイクロプロセッサ、FPGA(field-programmable gate array)、又はASIC(application-specific integrated circuit)を含むハードウェアを用いて実装されてよい。幾つかの他の例では、電子装置102は、ハードウェア及びソフトウェアの組み合わせを用いて実装されてよい。
【0031】
1つ以上の実施形態では、電子装置102は、第2違反セット116(未確定違反)のうちの1つ以上を修復した生成された修復セットに基づき修復パターンセット110を自動的に学習し生成するよう訓練されたニューラルネットワーク又は機械学習システムを含んでよい。ニューラルネットワークの例は、限定ではないが、深層ニューラルネットワーク(deep neural network:DNN)、リカレントニューラルネットワーク(recurrent neural network:RNN)、人工ニューラルネットワーク(artificial neural network:ANN)畳み込みニューラルネットワーク(convolutional neural network:CNN)、CNNリカレントニューラルネットワーク(CNN-RNN)、R-CNN、超短期記憶(Long Short Term Memory:LSTM)ネットワークに基づくRNN、完全接続ニューラルネットワーク、CTC(Connectionist Temporal Classification)に基づくRNN、深層ベイジアン(Bayesian)ニューラルネットワーク、敵対的生成ネットワーク(Generative Adversarial Network:GAN)、及び/又はこのようなネットワークの組み合わせを含んでよい。
【0032】
データベース104(例えば、Big Code)は、修復パターンセット110、第1違反セット112、第1修復例セット114、及び第2違反セット116(つまり未確定違反)を格納するよう構成されてよい、適切なロジック、インタフェース、及び/又はコードを含んでよい。幾つかの実施形態では、データベース104は、第1違反セット112、第1修復例セット114、及び第2違反セット116に関連付けられた、異なるソフトウェアプログラム、コード、ライブラリ、アプリケーション、スクリプト、又はルーチンを格納してよい。
【0033】
データベース104は、関係型又は非関係型データベースであってよい。また、幾つかの例では、データベース104は、クラウドサーバのようなサーバ上に格納されてよく、又は電子装置102上にキャッシュされ格納されてよい。データベース104のサーバは、データ、違反、又はプログラムを、電子装置102から通信ネットワーク108を介して提供するための要求を受信するよう構成されてよい。それに応答して、データベース104のサーバは、受信した要求に基づき、データ、違反、又はプログラムを読み出し、電子装置102へ通信ネットワーク108を介して提供するよう構成されてよい。追加又は代替として、データベース104は、プロセッサ、(例えば、1つ以上の動作を実行する又は実行を制御する)マイクロプロセッサ、FPGA(field-programmable gate array)、又はASIC(application-specific integrated circuit)を含むハードウェアを用いて実装されてよい。幾つかの他の例では、データベース104は、ハードウェア及びソフトウェアの組み合わせを用いて実装されてよい。
【0034】
ユーザエンド端末装置106は、生成された又は精緻化された修復パターンセット110が展開され得る、適切なロジック、回路、インタフェース、及び/又はコードを有してよい。ユーザエンド端末装置106は、種々のソフトウェア開発段階の間に、特にコードテスト又は検証及び妥当性確認(V&V)段階の間に、ソフトウェアプログラム内で識別され得る異なる違反を修復するために展開された修復パターンセット110をユーザ118に推奨し及び/又は適用し得る、統合開発環境(IDE)、コードエディタ、ソフトウェアデバッガ、ソフトウェア開発キット、又はテストアプリケーションのうちの1つ以上を含んでよい。ユーザエンド装置106の例は、限定ではないが、モバイル装置、デスクトップコンピュータ、ラップトップ、コンピュータワークステーション、コンピューティング装置、メインフレームマシン、クラウドサーバのようなサーバ、及びサーバ群を含んでよい。図1では、ユーザエンド装置106は電子装置102と別個であるが、しかしながら、幾つかの実施形態では、ユーザエンド装置106は、本開示の範囲から逸脱することなく、電子装置102に統合されてよい。
【0035】
通信ネットワーク108は、通信媒体であって、該通信媒体を通じて電子装置102が通信し得る通信媒体と、データベース104を格納し得るサーバと、ユーザエンド装置106と、を含んでよい。通信ネットワーク108の例は、限定ではないが、インターネット、クラウドネットワーク、Wi-Fi(Wireless Fidelity)ネットワーク、PAN(Personal Area Network)、LAN(Local Area Network)、及び/又はMAN(Metropolitan Area Network)を含んでよい。環境100内の種々の装置は、種々の有線及び無線通信プロトコルに従い、通信ネットワーク108に接続するよう構成されてよい。このような有線及び無線通信プロトコルの例は、限定ではないが、TCP/IP(Transmission Control Protocol and Internet Protocol)、UDP(User Datagram Protocol)、HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、ZigBee、EDGE、IEEE802.11、Li-Fi(light fidelity)、802.16、IEEE802.11s、IEEE802.11g、マルチホップ通信、無線アクセスポイント(AP)、装置間通信、セルラ通信プロトコル、及び/又はBT(Bluetooth(登録商標))通信プロトコル、又はそれらの組み合わせを含んでよい。
【0036】
変更、追加、又は省略が、本開示の範囲から逸脱することなく図1に対して行われてよい。例えば、環境100は、図示され本開示で説明されるよりも多数又は少数の要素を含んでよい。例えば、幾つかの実施形態では、環境100は、電子装置102を含むが、データベース104及びユーザエンド装置106を含まなくてよい。さらに、幾つかの実施形態では、データベース104及びユーザエンド装置106の各々の機能は、本開示の範囲から逸脱することなく、電子装置102に組み込まれてよい。
【0037】
図2は、本開示に記載される少なくとも1つの実施形態に従い構成される、ソフトウェアプログラム内の静的分析違反の修復パターンの精緻化のための例示的な電子装置を示すブロック図である。図2は、図1の要素と関連して説明される。図2を参照すると、電子装置102のブロック図200が示される。電子装置102は、プロセッサ204、メモリ206、永久データ記憶装置2087、入力/出力(I/O)装置210、ディスプレイスクリーン212、及びネットワークインタフェース214を含んでよい。
【0038】
プロセッサ204は、電子装置102により実行されるべき異なる動作に関連付けられたプログラム命令を実行するよう構成され得る、適切なロジック、回路、及び/又はインタフェースを含んでよい。例えば、動作のうちの幾つかは、修復パターンセット110及び第2違反セット116のデータベース104からの読み出し、修復パターンセット110の第2違反セット116への適用、修復例セットの生成、生成された修復例のうちの1つ以上を選択するためのユーザ入力の受信、及び適用及び選択に基づく修復パターンセット110の更なる精緻化、を含んでよい。プロセッサ204は、種々のコンピュータハードウェア又はソフトウェアモジュールを含む、任意の適切な専用又は汎用コンピュータ、コンピューティングエンティティ、又は処理装置を含んでよく、任意の適切なコンピュータ可読記憶媒体に格納された命令を実行するよう構成されてよい。例えば、プロセッサ204は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラム命令を解釈し及び/又は実行し及び/又はデータを処理するよう構成される任意の他のデジタル若しくはアナログ回路を含んでよい。
【0039】
図2には単一のプロセッサとして示されるが、プロセッサ204は、個々に又は集合的に本開示に記載のような電子装置102の任意の数の動作を実行する又は実行を指示するよう構成される任意の数のプロセッサを含んでよい。さらに、プロセッサのうちの1つ以上は、異なるサーバのような1つ以上の異なる電子装置上に存在してよい。幾つかの実施形態では、プロセッサ204は、プログラム命令を解釈し及び/又は実行し、及び/又はメモリ206及び/又は永久データ記憶装置208に格納されたデータを処理するよう構成されてよい。幾つかの実施形態では、プロセッサ204は、プログラム命令を永久データ記憶装置208からフェッチし、プログラム命令をメモリ206にロードしてよい。プログラム命令がメモリ206にロードされた後に、プロセッサ204は、プログラム命令を実行してよい。プロセッサ204の例のうちの幾つかは、GPU、CPU、RISCプロセッサ、ASICプロセッサ、CISCプロセッサ、コプロセッサ、及び/又はそれらの組み合わせであってよい。
【0040】
プロセッサ206は、プロセッサ204により実行可能なプログラム命令を格納するよう構成され得る、適切なロジック、回路、インタフェース及び/又はコードを含んでよい。特定の実施形態では、メモリ206は、オペレーティングシステム及び関連する特定用途情報を格納するよう構成されてよい。メモリ206は、格納されたコンピュータ実行可能命令またはデータ構造を運ぶ又は有するコンピュータ可読記憶媒体を含んでよい。このようなコンピュータ可読記憶媒体は、プロセッサ204のような汎用又は専用コンピュータによりアクセスされ得る任意の市販の媒体を含んでよい。例として、限定ではなく、このようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的消去可能なプログラマブル読み出し専用メモリ(EEPROM)、コンパクトディスク読み出し専用メモリ(CD-ROM)、又は他の光ディスク記憶装置、磁気ディスク記憶装置、又は他の磁気記憶装置、フラッシュメモリ素子(例えば、個体メモリ装置)、又はコンピュータ実行可能命令若しくはデータ構造の形式で特定のプログラムコードを運ぶ又は格納するために使用され得る且つ汎用又は専用コンピュータによりアクセスされ得る任意の他の記憶媒体、を含む有形又は非一時的コンピュータ可読媒体を含んでよい。上記の組み合わせも、コンピュータ可読記憶媒体の範囲に含まれてよい。コンピュータ実行可能命令は、例えば、プロセッサ204に、電子装置102に関連付けられた特定動作又は一群の動作を実行させるよう構成される命令及びデータを含んでよい。
【0041】
永久データ記憶装置208は、プロセッサ204により実行可能なプログラム命令、オペレーティングシステム、及び/又はログ及び特定用途データベースのような特定用途情報を格納するよう構成され得る、適切なロジック、回路、インタフェース、及び/又はコードを含んでよい。永久データ記憶装置208は、格納されたコンピュータ実行可能命令またはデータ構造を運ぶ又は有するコンピュータ可読記憶媒体を含んでよい。このようなコンピュータ可読記憶媒体は、プロセッサ204のような汎用又は専用コンピュータによりアクセスされ得る任意の市販の媒体を含んでよい。
【0042】
例として、限定ではなく、このようなコンピュータ可読記憶媒体は、CD-ROM(Compact Disc Read-Only Memory)又は他の光ディスク記憶装置、磁気ディスク記憶装置、又は他の磁気記憶装置(例えばHDD(Hard-Disk Drive))、フラッシュメモリ装置(例えば、SDD(Solid State Drive)、SD(Secure Digital)カード、他の個体メモリ装置)、又は特定のプログラムコードをコンピュータ実行可能命令またはデータ構造の形式で運び又は融資得る且つ汎用又は専用コンピュータによりアクセスされ得る任意の他の記憶媒体を含む有形又は非一時的コンピュータ可読記憶媒体を含んでよい。上記の組み合わせも、コンピュータ可読記憶媒体の範囲に含まれてよい。コンピュータ実行可能命令は、例えば、プロセッサ204に、電子装置102に関連付けられた特定動作又は一群の動作を実行させるよう構成される命令及びデータを含んでよい。
【0043】
幾つかの実施形態では、メモリ206、永久データ記憶装置208、又は組み合わせのいずれも、データベース104から読み出した修復パターンセット110及び第1違反セット116を格納してよい。幾つかの実施形態では、メモリ206、永久データ記憶装置208、又は組み合わせのどちらも、修復パターンセット110の第2違反セット116(つまり未確定違反)への適用の間に生成された1つ以上の修復例を格納してよい。幾つかの実施形態では、メモリ206、永久データ記憶装置208、又は組み合わせのどちらも、第2違反セット116のうちの1つ以上を修復するために生成された修復例に基づき、より多くの修復パターンを学習するニューラルネットワークを格納してよい。
【0044】
I/O装置210は、ユーザ入力(例えば、生成された修復例を選択するためのユーザ入力)を受信するよう構成され得る、適切なロジック、回路、インタフェース、及び/又はコードを含んでよい。I/O装置210は、ユーザ入力に応答して、出力を提供するよう更に構成されてよい。I/O装置210は、プロセッサ204及びネットワークインタフェース214のような他のコンポーネントと通信するよう構成され得る種々の入力及び出力装置を含んでよい。入力装置の例は、限定ではないが、タッチスクリーン、キーボード、マウス、ジョイスティック、及び/又はマイクロフォンを含んでよい。出力装置の例は、限定ではないが、ディスプレイ及び/又はスピーカを含んでよい。
【0045】
ディスプレイスクリーン212は、修復パターンセット110の精緻化のために修復パターンとして1つ以上の修復例を選択するために、生成された修復例をユーザ118にレンダリングするよう構成され得る、適切なロジック、回路、インタフェース、及び/又はコードを含んでよい。ディスプレイスクリーン212は、ユーザ118から、1つ以上の修復例を選択するためのユーザ入力を受信するよう構成されてよい。このような場合には、ディスプレイスクリーン212は、ユーザ入力を受信するタッチスクリーンであってよい。ディスプレイスクリーン212は、限定ではないが、液晶ディスプレイ(LCD)ディスプレイ、発光ダイオード(LED)ディスプレイ、プラズマディスプレイ、及び/又は有機LED(OLED)ディスプレイ技術、及び/又は他のディスプレイ技術のような、幾つかの知られている技術を通じて実現されてよい。
【0046】
ネットワークインタフェース214は、電子装置102、データベース104、及びユーザエンド装置106の間の通信を通信ネットワーク108を介して確立するよう構成され得る、適切なロジック、回路、インタフェース、及び/又はコードを有してよい。ネットワークインタフェース214は、通信ネットワーク108を介して電子装置102の有線又は無線通信をサポートする種々の知られている技術の使用により実装されてよい。ネットワークインタフェース214は、限定ではないが、アンテナ、無線周波数(RF)通信機、1つ以上の増幅器、チューナ、1つ以上の発信器、デジタル信号プロセッサ、コードデコーダ(CODEC)チップセット、加入者識別モジュール(SIM)カード、及び/又はローカルバッファを含んでよい。
【0047】
ネットワークインタフェース214は、無線通信により、インターネット、イントラネット、及び/又はセルラ電話ネットワーク、無線LAN、及び/又は都市域ネットワーク(MAN)のような無線ネットワークのようなネットワークと通信してよい。無線通信は、GSM(登録商標)(Global System for Mobile Communications)、EDGE(Enhanced Data GSM Environment)、W-CDMA(wideband code division multiple access)、LTE(Long Term Evolution)、CDMA(code division multiple access)、TDMA(time division multiple access)、Bluetooth、Wi-Fi(Wireless Fidelity)(例えばIEEE802.11a、IEEE802.11b、IEEE802.11g、及び/又はIEEE802.11n)、VoIP(voice over Internet Protocol)、Li-Fi(light fidelity)、又はWi-MAXのような、複数の通信規格、プロトコル、及び技術のうちのいずれかを使用してよい。
【0048】
変更、追加、又は省略が、本開示の範囲から逸脱することなく例示的な電子装置102に対して行われてよい。例えば、幾つかの実施形態では、例示的な電子装置102は、簡単のために明示され又は記載されないことのある任意の数の他のコンポーネントを含んでよい。
【0049】
図3Aは、本開示に記載される少なくとも1つの実施形態に従い構成される、違反を含む欠陥ソフトウェアプログラム及び修復済みソフトウェアプログラムの例を示す。図3Aは、図1及び図2の要素と関連して説明される。図3Aを参照すると、欠陥ソフトウェアプログラム302の一例が示される。欠陥ソフトウェアプログラム302は、ドメイン固有言語(domain specific language:DSL)、例えばJava(登録商標)に関連付けられた、コード、スクリプト、又はルーチンを含んでよい。欠陥ソフトウェアプログラム302は、1次ノード306において違反(例えば、図示のように「doc.get(field);」)を含んでよい。違反は、欠陥ソフトウェアプログラム302の性能に影響を与え得る欠陥又はバグを示してよい。幾つかの実施形態では、欠陥ソフトウェアプログラム302は、1次ノード306における違反を含む複数の違反を含んでよい。違反は、従来知られている静的コード分析ツールにより識別されてよい。違反は、また、欠陥ソフトウェアプログラム302内で検出された違反の位置に対応してよい。違反の位置は、1次ノード306(又は主ノード)として参照されてよい。この1次ノード306に関して、異なる編集ノードが識別されてよく、又は異なる編集動作が実行されてよい。
【0050】
図3Aには、改良ソフトウェアプログラム304も示される。改良ソフトウェアプログラム304は、欠陥ソフトウェアプログラム302の修復されたバージョンであってよい。欠陥ソフトウェアプログラム302は、改良ソフトウェアプログラム304を取得するために、欠陥ソフトウェアプログラム302に適用された修復例に基づき修復されてよい。修復例は、改良ソフトウェアプログラム304を取得するために欠陥ソフトウェアプログラム302に対して実行される1つ以上の編集動作に対応してよい。図3Aには、編集ノード308A~308Dのセットが示される。改良ソフトウェアプログラム304を得るために、欠陥ソフトウェアプログラム302の編集ノード308A~308Dのセットに対して実行される編集動作セット(つまり、1つ以上の命令/コマンドに対して実行される変更又は変換)も示される。通常、所与の編集ノードのための編集動作は、所与の編集ノードに関連付けられたコード部分に対する、置換/交換、コードの付加、訂正、新たな付加、柵状、位置シフト、又は他の変更、のうちの1つ以上に対応してよい。例えば、図3Aに示すように、第1編集動作(「Map.Entry<String,Object>entry」)は、第1編集ノード308Aに追加されてよく、第2編集動作(「doc.entrySet()」)は、第2編集ノード308Bにおいて変更されてよく、第3編集動作(「Stringfield=entry.getKey();」)は、第3編集ノード308Cに追加されてよく、第4編集動作(「entry.getValue();」)は、第4編集ノード308D(又は主ノード306)に追加されてよい。
【0051】
図3Aには、位置310A~310Cのセットも示される。これらは、違反の主ノード306と編集ノード308A~308D(つまり、コードを修復する必要がある位置)の各々との間の関係を示してよい。幾つかの実施形態では、位置310A~310Cのセット、又は主ノード306と編集ノード308A~308Dとの間の関係が分析されて、修復パターンセット110(確定パターンとも呼ばれる)を生成してよい。生成された修復パターンセット110は、編集ノード308A~308D、及び違反を修復するための及び改良ソフトウェアプログラム304を取得するための対応する編集動作を示してよい。
【0052】
図3Bは、本開示に記載される少なくとも1つの実施形態に従い構成される、ソフトウェアプログラム内の違反を修復するための例示的な修復パターンを示す。図3Bは、図1図2、及び図3Aの要素と関連して説明される。図3Bを参照すると、第1ソフトウェアプログラム312の一例が示される。第1ソフトウェアプログラム312は、1次ノード314において違反(例えば、図示のように「insQueries.get(name)」)を含んでよい。違反は、第1ソフトウェアプログラム312に対して静的コード分析ツールを使用して、第1ソフトウェアプログラム312から検出されてよい。図3Bには、第2ソフトウェアプログラム316も示される。第2ソフトウェアプログラム316は、第1修復パターン(確定パターン)に対応し、又は編集ノード及び編集ノードに対して実行される編集動作の識別に基づき生成されてよい。例えば、図3Bに示すように、第2ソフトウェアプログラム316は、第1編集動作(図示のように「Stringname=entry.getKey()」)が実行され得る第1編集ノード320を含んでよい。第1編集ノード320は、第2ソフトウェアプログラム316内の主ノード314に位置する違反文の第1親ノード318(つまり、「if(!params.isEmpty()){」により定められる)の前の行にあってよい。したがって、1次ノード314、第1親ノード318、及び第1編集ノード320に基づき、第1修復パターンが生成されてよい。第2ソフトウェアプログラム316は、主ノード314にいて編集動作(「entry.getValue()」)を示してよい。
【0053】
図3Bの第2ソフトウェアプログラム316内に示すように、第1修復パターンは、第1ロケータに対応してよい。第1ロケータは、1次ノード314と、1次ノード314における文の第1親ノード318の前の行に存在し得る第1編集ノード320との間の関係を表してよい。第1編集ノード320に対して実行される編集動作(つまり、「Stringname=entry.getKey()」)は、違反314の修復を確認するために、静的コード分析ツールにより更に分析されてよい。
【0054】
図3Bには、第2修復パターンに基づき修復され得る第3ソフトウェアプログラム322も示される。例えば、第2ソフトウェアプログラム316の静的コード分析が違反を示す場合には、第2ロケータが第2修復パターンとして識別されてよい。第2ロケータは、1次ノード314と、編集動作(図示しない)との間の関係を表してよい。該編集動作は、1次ノード314における違反文の第1親ノード318の前に存在し得る第2親ノードの本体(body)の開始位置に存在してよい。図示のように、第3ソフトウェアプログラム322内には文の第2親ノードが存在しないので、静的コード分析ツールは、第3ソフトウェアプログラム322を分析した後に、違反にフラグを立てて(flag)よい。
【0055】
図3Bには、第3修復パターンに基づき修復され得る第4ソフトウェアプログラム324も示される。第3修復パターンは、1次ノード314と第2編集ノード328との間の関係として、第3ロケータを示してよい。例えば、第3修復パターンは、1次ノード314における違反の第1パラメータ326(「name」)を識別し、更に第2編集ノード328における編集動作として第1パラメータ326の宣言を行うための処理を示してよい。ここで、第2編集ノード328は、1次ノード314における違反文の第1親ノード318の本体の開始位置にあってよい。
【0056】
ここで、図3Bに記載した第1修復パターン、第2修復パターン、及び第3修復パターンは、単に一例として提供されることに留意する。しかしながら、本開示の範囲から逸脱することなく、編集ノード、及び対応する編集ノードにおいて実行される編集動作を定めるための幾つかの種類の修復パターンが存在し得る。
【0057】
図4は、本開示に記載される少なくとも1つの実施形態に従い構成される、ソフトウェアプログラム内の静的分析違反の修復パターンの精緻化に関連する例示的な方法のフローチャートである。図4は、図1図2図3A及び図3Bの要素と関連して説明される。図4を参照すると、フローチャート400が示される。フローチャート400に示される方法は、402で開始してよく、任意の適切なシステム、機器、又は装置により、例えば図1又は図2の例示的な電子装置102により、実行されてよい。別個のブロックを示したが、フローチャート400のブロックのうちの1つ以上に関連するステップ及び動作は、特定の実装に依存して、追加ブロックに分けられ、少ないブロックに結合され、又は削除されてよい。
【0058】
ブロック402で、修復パターンセット110が読み出されてよい。幾つかの実施形態では、プロセッサ204は、データベース104から修復パターンセット110を読み出すよう構成されてよい。別の実施形態では、プロセッサ204は、メモリ206、永久データ記憶装置208、又はそれらの組み合わせのいずれあに格納された修復パターンセット110を読み出してよい。修復パターンセット110は、第1違反セット112を修復可能な第1修復例セット114(又は編集動作)に基づき学習され又は生成されてよい。幾つかの実施形態では、プロセッサ204は、第1違反セット112及び第1修復例セット114をデータベース104から読み出し、第1修復例セット114の分析に基づき修復パターンセット110を自動的に生成するよう構成されてよい。
【0059】
ブロック404で、第2違反セット116(つまり、「未知又は未確定違反」)が読み出される。幾つかの実施形態では、プロセッサ204は、メモリ206及び/又は永久データ記憶装置208に格納されたデータベース104から、第2違反セット116を読み出すよう構成されてよい。第2違反セット116は、修復例又は違反を修正するための編集動作により修復されていない、ソフトウェアプログラムの欠陥又はバグであってよい。幾つかの実施形態では、第2違反セット116内の全ての違反は,同じ違反種類であってよい。
【0060】
ブロック406で、修復パターンセット110の各々は、第2違反セット116の各々に適用されてよい。幾つかの実施形態では、プロセッサ204は、読み出した第2違反セット116の各々に対して、修復パターンセット110の各々を実行し又は適用するよう構成されてよい。プロセッサ204は、異なる修復パターン、又は修復パターンセット110により定められた編集動作を、第2違反セット116(未確定違反)に適用して、第2違反セットを修復するよう構成されてよい。図3Bに、修復パターンセット110の特定の例が記載される。
【0061】
ブロック408で、修復パターンセット110が精緻化されてよい。プロセッサ204は、第2違反セット116の各々又は第2違反セット116のうちの閾数(例えば「90%」より多く)を修復できない可能性のある修復パターンを決定してよい。プロセッサ204は、ブロック406のように、修復パターンセット110の第2違反セット116への適用に基づき、修復パターンセット110から、修復パターンを決定するよう構成されてよい。
【0062】
決定した修復パターンが第2違反セット116の中の1つ以上の未確定違反を修復できないので、プロセッサ204は、修復パターンセット110から決定した修復パターンを削除する又は除去するよう更に構成されてよい。プロセッサ204は、修復パターンセット110からの決定した修復パターンの削除に基づき、修復パターンセット110を精緻化するよう構成されてよい。したがって、開示の電子装置102のプロセッサ204は、修復パターンセット110に基づき自動的に学習された修復パターンセット110が、未確定又は未知の違反(つまり、第2違反セット116)も修復可能か否かを決定可能であってよい。可能ではない場合、このような修復パターンも、修復パターンセット110を精緻化するために削除される。その結果、精緻化された修復パターンセットは、ソフトウェアプログラム内の違反を修復するための制度の向上を提供する。幾つかの実施形態では、精緻化された修復パターンセットは、(「最良」修復パターンとして、)特定種類の全ての未確定違反を修復可能な1つの修復パターンを含んでよい。
【0063】
ブロック410で、1つ以上の修復例が、第2違反セット116に対する修復パターンセット110の適用に基づき生成されてよい。幾つかの実施形態では、プロセッサ204は、第2違反セット116の各々に対する修復パターンセット110の各々の実行に基づき、修復結果を生成するよう構成されてよい。修復結果は、修復パターンセット110のうちの1つを適用することにより、対応する未確定違反が修復された又は解決されたか否かを示してよい。幾つかの実施形態では、静的コード分析ツールは、修復パターンセット110の各々の第2違反セット116の各々への適用により取得されたソフトウェアプログラムの分析に基づき、修復結果(つまり、修復又は違反)を生成してよい。対応する未確定違反が修復されたと決定された場合、プロセッサ204は、修復されている対応する未確定違反に関連付けられた修復例を生成するよう構成されてよい(つまり、第1修復例セット114と異なってよい)。したがって、プロセッサ204は、第2違反セット116に対して修復パターンセットを繰り返し実行する又は適用することにより、第2修復例セットを生成してよい。
【0064】
ブロック412で、ユーザ入力は、第2修復例セットから1つ以上の修復例を選択するために受信されてよい。幾つかの実施形態では、プロセッサ204は、ユーザ入力をユーザ118から、I/O装置210又はディスプレイスクリーン212を通じて受信するよう構成されてよい。プロセッサ204は、(ブロック412で生成されたよ)第2修復例セットから1つ以上の修復例を選択するよう構成されてよい。
【0065】
ブロック414で、修復パターンセット110が、ユーザ入力に基づき精緻化されてよい。幾つかの実施形態では、プロセッサ204は、(ブロック408で先に精緻化されたように)修復パターンセット110を更に精緻化するよう構成されてよい。プロセッサ204は、ブロック412でユーザ118から受信したユーザ入力に基づき、選択された1つ以上の修復例を(追加修復パターン又は戦略として)精緻化された修復パターンセット110に追加してよい。したがって、修復パターンセット110の精緻化は、ユーザ118(例えば、経験を積んだソフトウェア開発者)から受信した介入又はフィードバックに更に基づいてよい。
【0066】
ブロック416で、精緻化された修復パターンセット110が、新たに受信した又は発見された違反に適用されてよい。幾つかの実施形態では、プロセッサ204は、データベース104から新たに発見された違反を読み出し又は受信するよう構成されてよい。新たに発見した違反は、第2ソフトウェアプログラムに含まれてよい。プロセッサ204は、(ブロック408及びブロック414で精緻化されたような)精緻化された修復パターンセット110を新たに発見した違反に適用するよう、又は、精緻化された修復パターンセット110がデータベース104内の新たに発見した違反を修復するために使用可能か否かを更にテストするよう、更に構成されてよい。修復の場合には、精緻化された修復パターンセット110の新たに受信した違反への適用は、修復済み第2ソフトウェアプログラムを生成してよい。したがって、未確定違反、人間のフィードバック、又は新たに発見された違反のうちの1つ又はそれらの組み合わせによる修復パターンセットの精緻化に基づき、未確定違反を修復する、学習された修復パターンセット110の精度又は品質が向上され得る。制御は終了する。
【0067】
フローチャート400は、402、404、406、408、410、412、414、及び416のような個別の動作として図示された。しかしながら、特定の実施形態では、開示の実施形態の本質を損なうことなく、特定の実装に依存して、このような個別の動作は、追加動作に更に分けられ、より少数の動作に結合され、又は削除されてよい。
【0068】
図5A及び5Bは、本開示に記載される少なくとも1つの実施形態に従い構成される、ソフトウェアプログラム内の違反に対する修復パターンの適用に基づく、修復パターンの精緻化のための例示的な方法のフローチャートを共同で示す。図5A及び5Bは、図1図2図3A図3B及び図4の要素と関連して説明される。図5A及び5Bを参照すると、フローチャート500が示される。フローチャート500に示される方法は、502で開始してよく、任意の適切なシステム、機器、又は装置により、例えば図1又は図2の例示的な電子装置102により、実行されてよい。別個のブロックを示したが、フローチャート500のブロックのうちの1つ以上に関連するステップ及び動作は、特定の実装に依存して、追加ブロックに分けられ、少ないブロックに結合され、又は削除されてよい。
【0069】
ブロック502で、修復パターンセット110及び第2違反セット116は、データベース104から読み出されてよい。幾つかの実施形態では、プロセッサ204は、ブロック402及びブロック404で決定されたように、修復パターンセット110(又は確定パターン)及び第2違反セット116を、データベース104から読み出すよう構成されてよい。
【0070】
ブロック504で、修復パターンセットの数又はサイズが「1」に等しいか否かが決定されてよい。プロセッサ204は、修復パターンセット110の数又はサイズが「1」であるか否かを決定するよう構成されてよい。決定した数が「1」である場合、第1修復例セット114に基づき生成された又は利用可能な1つの修復パターンのみが存在してよい。したがって、1つの修復パターンの更なる精緻化は可能でなく、制御は終了し、更なる精緻化は実行されない。その他の場合、制御はブロック506に進む。
【0071】
ブロック506で、(例示的な第1未確定違反について)未確定違反は、第2違反セット116から選択されてよい。幾つかの実施形態では、プロセッサ204は、データベース104から読み出した第2違反セット116から、第1未確定違反を選択するよう構成されてよい。選択された第1未確定違反は、特定のDSL内の特定のソフトウェアプログラムに関連付けられてよい。
【0072】
ブロック508で、修復パターン(例えば、第1修復パターン)は、(ブロック502でデータベース104から読み出されたような)修復パターンセット110から選択されてよい。幾つかの実施形態では、プロセッサ204は、修復パターンセット110から第1修復パターンを選択するよう構成されてよい。
【0073】
ブロック510で、選択された修復パターンは、選択された未確定違反に適用されてよい。プロセッサ204は、ソフトウェアプログラムの選択された未確定違反を修復する又は解決するために、修復パターンセット110から選択された修復パターンを、選択された未確定違反に対して適用し又は実行するよう構成されてよい。選択された修復パターンは、図3A及び3Bに詳述したように、選択された未確定違反に適用され得る1つ以上の編集動作に対応してよい。
【0074】
ブロック512で、修復結果が、選択された未確定違反に対する選択された修復パターンの適用に基づき生成されてよい。幾つかの実施形態では、プロセッサ204は、選択された修復パターンが選択された未確定違反を修復可能か否かを決定するために、修復結果を生成するよう構成されてよい。別の実施形態では、修復結果は、開示の電子装置102に関連付けられた静的コード分析ツールにより生成されてよい。
【0075】
ブロック514で、生成された修復結果が、違反、又は選択された未確定違反の修復に対応するか否かが決定されてよい。幾つかの実施形態では、プロセッサ204は、ブロック512における生成された修復結果が違反に対応するか否かを決定するよう構成されてよい。修復結果が違反に対応する場合、これは、適用された修復パターンが選択された未確定違反を修復できないことを示してよい。制御はブロック516に進む。その他の場合、生成された修復結果が選択れた未確定違反の修復に対応する場合、制御はブロック518に進む。
【0076】
ブロック516で、選択された未確定違反に適用された修復パターンは、修復パターンセット110から削除される。幾つかの実施形態では、プロセッサ204は、修復パターンセット110の精緻化のために、修復パターンセット110から、修復パターン(つまり、選択された未確定違反を修復できない可能性のあるもの)を削除するよう構成されてよい。
【0077】
ブロック518で、修復パターンセット110の全部が選択された未確定違反に適用されるか否かが決定されてよい。プロセッサ204は、修復パターンセット110の全部が選択された未確定違反に適用されるか否かを決定するよう構成されてよい。修復パターンセット110の全部が選択された未確定違反に適用されない場合、制御はブロック520に進む。その他の場合、制御はブロック522に進む。
【0078】
ブロック520で、修復パターンセット110のうちの次の修復パターンが選択されてよい。幾つかの実施形態では、プロセッサ204は、修復パターンセット110から次の修復パターンを選択するよう構成されてよい。制御はブロック510に進み、その結果、修復パターンセット110の各々が選択された未確定違反に適用されてよい。したがって、ブロック510~ブロック520の動作は、修復パターンセット110の選択された未確定違反への適用に基づき、電子装置102又はプロセッサ204により繰り返し実行されてよい。
【0079】
ブロック522で、第2違反セット116の全部が修復パターンセット110により処理されるか否かが決定されてよい。幾つかの実施形態では、プロセッサ204は、第2違反セット116の全部が修復パターンセット110により処理されるか否かを決定するよう構成されてよい。第2違反セットの全部が処理されない場合、制御はブロック524に進む。その他の場合、制御はブロック526に進む。
【0080】
ブロック524で、次の未確定違反が、第2違反セット116から選択されてよい。幾つかの実施形態では、プロセッサ204は、第2違反セット116から次の未確定違反を選択するよう構成されてよい。制御はブロック508に進み、その結果、修復パターンセット110の各々は、第2違反セット116の各々に適用されてよい。したがって、ブロック508~ブロック524の動作は、修復パターンセット110の第2違反セット116への適用に基づき、電子装置102又はプロセッサ204により繰り返し実行されてよい。
【0081】
ブロック526で、精緻化された修復パターンセットが格納され、ディスプレイスクリーン212に出力されてよい。一実施形態では、精緻化された修復パターンセットは、メモリ206又は永久データ記憶装置108に格納されてよい。幾つかの実施形態では、プロセッサ204は、データベース104に精緻化された修復パターンセットをコミットしてよい。幾つかの実施形態では、精緻化された修復パターンセットは、ディスプレイスクリーン212を通じてユーザ118に表示されてよい。幾つかの実施形態では、ブロック502~ブロック526で実行される修復パターンセット110の精緻化は、同じ違反種類の又は異なる違反種類の第2違反セット116に対して実行されてよい。
【0082】
フローチャート500は、502、504、506、508、510、512、514、516、518、520、522、524、及び526のような個別の動作として図示された。しかしながら、特定の実施形態では、開示の実施形態の本質を損なうことなく、特定の実装に依存して、このような個別の動作は、追加動作に更に分けられ、より少数の動作に結合され、又は削除されてよい。
【0083】
図6A及び6Bは、本開示に記載される少なくとも1つの実施形態に従い構成される、人間のフィードバックに基づく、修復パターンの精緻化のための例示的な方法のフローチャートを共同で示す。図6A及び6Bは、図1図2図3A図3B図4図5A及び図5Bの要素と関連して説明される。図6A及び6Bを参照すると、フローチャート600が示される。フローチャート600に示される方法は、602で開始してよく、任意の適切なシステム、機器、又は装置により、例えば図1又は図2の例示的な電子装置102により、実行されてよい。別個のブロックにより示したが、フローチャート600のブロックのうちの1つ以上に関連するステップ及び動作は、特定の実装に依存して、追加ブロックに分けられ、少ないブロックに結合され、又は削除されてよい。
【0084】
ブロック602で、(ブロック502でも実行されたように)修復パターンセット110及び第2違反セット116は、データベース104から読み出されてよい。ブロック604で、ブロック504で実行されたように、修復パターンセットの数又はサイズが「1」に等しいか否かが決定されてよい。
【0085】
ブロック606で、第2修復例セットはNULL値を指定されてよい。プロセッサ204は、NULL値を第2修復例(例えば、「E」として参照される)に割り当てるよう構成されてよい。NULL値は、第2修復例セットが任意の修復例を含まない可能性があることを表し得る。幾つかの実施形態では、プロセッサ204は、修復例セットの第1の数又は第1のサイズを「0」に初期化するよう構成されてよい。
【0086】
ブロック608で、(ブロック506でも実行されたように)未確定違反(例えば第1未確定違反について)は、第2違反セット116から選択されてよい。ブロック610で、(ブロック508でも実行されたように)修復パターン(例えば、第1修復パターン)は、修復パターンセット110から選択されてよい。
【0087】
ブロック612で、第3修復例セットはNULL値を指定されてよい。プロセッサ204は、NULL値を第3修復例(例えば、「E」として参照される)に割り当てるよう構成されてよい。NULL値は、第3修復例セットが任意の修復例を含まない可能性があることを表し得る。幾つかの実施形態では、プロセッサ204は、第2修復例セットの第2の数又は第2のサイズを「0」に初期化するよう構成されてよい。
【0088】
ブロック614で、(ブロック510でも実行されたように)選択された修復パターンは、選択された未確定違反に適用されてよい。ブロック616で、(ブロック512でも実行されたように)修復結果が、選択された未確定違反に対する選択された修復パターンの適用に基づき生成されてよい。
【0089】
ブロック618で、生成された修復結果が、選択された未確定違反の修復に対応するか否かが決定されてよい。一実施形態では、プロセッサ204は、生成された修復結果が選択された未確定違反の修復に対応するか否かを決定するよう構成されてよい。別の実施形態では、でんしそう}に関連付けられた静的コード分析ツールは、生成された修復結果が修復に対応するか否かを検出してよい。生成された修復結果が選択れた未確定違反の修復に対応する場合、制御は620に進む。その他の場合、制御は624に進む。
【0090】
ブロック620で、選択された未確定違反に関連付けられた修復例が生成されてよい。幾つかの実施形態では、プロセッサ204は、適用した修復パターンが選択された未確定違反の修復をもたらしたことに基づき、選択された未確定違反に対して実行された1つ以上の修復動作又は編集ノードを表し得る修復例を生成するよう構成されてよい。
【0091】
ブロック622で、生成された修復例は、第3修復例セット(E’と呼ばれる)に追加されてよい。幾つかの実施形態では、プロセッサ204は、生成された修復例を第3修復例セットに追加するよう構成されてよい。プロセッサ204は、第3修復例セットの第2の数又はサイズを「1」だけ増大するよう更に構成されてよい。
【0092】
ブロック624で、(ブロック518でも実行されたように)修復パターンセット110の全部が選択された未確定違反に適用されるか否かが決定されてよい。修復パターンセット110の全部が選択された未確定違反に適用されない場合、制御はブロック626に進む。その他の場合、制御はブロック628に進む。
【0093】
ブロック626で、(ブロック520でも実行されたように)修復パターンセット110のうちの次の修復パターンが選択されてよい。制御は614に進み、その結果、修復パターンセット110の各々は、選択された未確定違反に適用され、ブロック620で選択された未確定違反について修復として修復結果を生成された第3修復例セットを生成してよい。
【0094】
ブロック628で、(ブロック522でも実行されたように)第2違反セット116の全部が修復パターンセット110により処理されるか否かが決定されてよい。第2違反セットの全部が処理されない場合、制御はブロック630に進む。その他の場合、制御はブロック636に進む。
【0095】
ブロック630で、(ブロック524でも実行されたように)次の未確定違反が、第2違反セット116から選択されてよい。632で、第2の数の(又は第2のサイズの)第3修復例セット(E’と呼ばれる)が、第2修復例セット(Eと呼ばれる)の第1の数(又は第1のサイズ)より大きいか否かが決定されてよい。第2の数が第1の数より少ない場合、制御はブロック610に進む。その他の場合、制御は634に進む。
【0096】
ブロック634で、第2修復例セットは第3修復例セットを割り当てられてよい。幾つかの実施形態では、プロセッサ204は、第3修復例セットの中の生成された修復例(E’と呼ばれる)を、第2修復例セット(Eと呼ばれる)に割り当ててよい。この割り当ては、1つの未確定違反への修復パターンセット110の適用が、他の未確定違反に対する適用のときより多くの数の修復例を生成するとき、より多くの数の修復例が考慮されるべきである。これは、どの未確定違反において、最大数の修復パターンセット110が修復に成功したかを識別することを示してもよい。制御は610に進む。
【0097】
ブロック636で、ユーザ入力は、生成された第2修復例セットから1つ以上の修復例を選択するために受信されてよい。幾つかの実施形態では、プロセッサ204は、(ブロック412でも実行されたように)1つ以上の修復例を選択するために、ユーザ入力をユーザ118から、I/O装置210又はディスプレイスクリーン212を通じて受信するよう構成されてよい。人間のフィードバックとしてユーザ118により選択された1つ以上の修復例は、人間のフィードバック又はユーザ118から受信された選択に基づき修復パターンセット110を精緻化するために及び修復パターンセット110の精度を向上するために更に使用されてよい。
【0098】
ブロック638で、選択された1つ以上の修復例が、修復パターンとして、修復パターンセット110を更に精緻化するために、修復パターンセット110に追加されてよい。幾つかの実施形態では、人間のフィードバックに基づく精緻化として、プロセッサ204は、選択された1つ以上の修復例を、修復パターンとして、修復パターンセット110に追加するよう構成されてよい。
【0099】
ブロック640で、(ブロック526でも実行されたように)精緻化された修復パターンセットが格納され、ディスプレイスクリーン212に出力されてよい。制御は終了する。
【0100】
フローチャート600は、602、604、606、608、610、612、614、616、618、620、622、624、626、628、630、632、634、636、638、及び640のような個別の動作として図示された。しかしながら、特定の実施形態では、開示の実施形態の本質を損なうことなく、特定の実装に依存して、このような個別の動作は、追加動作に更に分けられ、より少数の動作に結合され、又は削除されてよい。
【0101】
本開示の種々の実施形態は、実行されることに応答してシステム(例えば、例示的な電子装置102)に動作を実行させる命令を格納するよう構成される1つ以上の非一時的コンピュータ可読記憶媒体を提供してよい。動作は、修復パターンセットを読み出すステップであって、修復パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習される、ステップを含んでよい。動作は、ソフトウェアプログラムの第2違反セットを読み出すステップであって、第2違反セットの各々は未確定違反である、ステップを更に含んでよい。動作は、ソフトウェアプログラムの読み出した第2違反セットから第1ソフトウェアプログラムの未確定違反を選択するステップと、修復パターンセットから修復パターンを選択するステップと、を更に含んでよい。動作は、修正パターンセットの精緻化のために、第1動作セットを実行するステップを更に含んでよい。第1動作セットは、選択された未確定違反に選択された修正パターンを適用して修復結果を生成するステップを含んでよい。第1動作セットは、生成された修復結果が違反に対応するか否かを決定するステップと、生成された修正結果が違反に対応するという決定に基づき、適用した修復パターンを修復パターンセットから削除するステップと、を更に含んでよい。第1動作セットは、修復パターンセットの中の次の修復パターンを選択された修復パターンとして再選択するステップを更に含んでよい。動作は、選択された修復パターンに基づき、修復パターンセットについて、第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得するステップを更に含んでよい。
【0102】
本開示で使用されるとき、用語「モジュール」又は「コンポーネント」は、モジュール又はコンポーネントの動作を実行するよう構成される特定ハードウェア実装、及び/又は、コンピューティングシステムの汎用ハードウェア(例えば、コンピュータ可読媒体、処理装置、等)により格納され及び/又は実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを表してよい。幾つかの実施形態では、本開示に記載されたものと異なるコンポーネント、モジュール、エンジン、及びサービスが、コンピューティングシステム上で実行するオブジェクト又はプロセス(例えば、別個のスレッド)として実装されてよい。本開示に記載されたシステム及び方法のうちの一部は、概して(汎用ハードウェアに格納される及び/又はそれにより実行される)ソフトウェアで実装されるとして記載されたが、専用ハードウェア実装又はソフトウェア及び専用ハードウェア実装の組み合わせも、可能であり想定される。この記載において、「コンピューティングエンティティ」は、本開示において前述した任意のコンピューティングシステム、又はコンピューティングシステム上で実行する任意のモジュール若しくはモジュールの組み合わせであってよい。
【0103】
本開示で及び特に添付の特許請求の範囲(例えば、添付の請求項本体)で使用される用語は、通常、「広義」の用語として意図される(例えば、用語「含む」は「含むが、これに限定されない」と解釈されるべきであり、用語「有する」は「有するが、これに限定されない」と解釈されるべきである、等)。
【0104】
さらに、特定数の導入された請求項の列挙が意図される場合、このような意図は、請求項中に明示的に示され、このような列挙のない場合、このような意図は存在しない。例えば、理解の支援として、以下の添付の請求項は、請求項の列挙を導入するために、導入フレーズ「少なくとも1つ」及び「1つ以上」の使用を含み得る。しかしながら、このようなフレーズの使用は、同じ請求項が導入フレーズ「1つ以上」又は「少なくとも1つ」及び不定冠詞「a」又は「an」を含むときでも(例えば、「a」及び/又は「an」は「少なくとも1つ」又は「1つ以上」を意味すると解釈されるべきである)、不定冠詞「a」又は「an」による請求項の列挙の導入が、このような導入された請求項の列挙を含む任意の特定の請求項を、1つのこのような列挙のみを含む実施形態に限定することを意味すると考えられるべきではない。つまり、同じことが、請求項の列挙を導入するために使用される定冠詞の使用にも当てはまる。
【0105】
さらに、特定数の導入された請求項の列挙が明示的に記載される場合、当業者は、このような列挙が、少なくとも列挙された数を意味すると解釈されるべきであることを理解する(例えば、他の修飾のない「2つの列挙」の記載は、少なくとも2つの列挙、又は2以上の列挙を意味する)。さらに、「A、B、及びC等のうちの少なくとも1つ」又は「A、B、及びC等のうちの1つ以上」と同様の記載が使用される例では、通常、このような構成は、A単独で、B単独で、C単独で、A及びBを一緒に、A及びCを一緒に、B及びCを一緒に、又はA、B、及びCを一緒に、等を含むことを意図する。
【0106】
さらに、2以上の選択的な用語を表す任意の離接的な語又はフレーズは、説明、請求項、又は図面にあるかにかかわらず、用語のうちの1つ、用語のうちのいずれか、又は両方の用語を含む可能性を想定すると理解されるべきである。例えば、フレーズ「A又はB」は、「A」又は「B」又は「A及びB」の可能性を含むと理解されるべきである。
【0107】
本開示に記載された全ての例及び条件付き言語は、読者が本開示及び本開示が技術を更に発展させることに貢献する概念を理解するのを支援する教示目的を意図しており、そのような具体的に列挙された例及び条件に限定されないと解釈されるべきである。本開示の実施形態は詳細に記載されたが、本開示の精神及び範囲から逸脱することなく、これらに種々の変更、代替、及び選択が行われ得る。
【0108】
以上の実施形態に加えて、更に以下の付記を開示する。
(付記1) 修復パターンセットを読み出すステップであって、前記修復パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習される、ステップと、
前記ソフトウェアプログラムの第2違反セットを読み出すステップであって、前記第2違反セットの各々は未確定違反である、ステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットから、第1ソフトウェアプログラムの未確定違反を選択するステップと、
前記修復パターンセットから修復パターンを選択するステップと、
前記修復パターンセットの精緻化のために第1動作セットを実行するステップであって、前記第1動作セットは、
前記選択された未確定違反に前記選択された修復パターンを適用して、修復結果を生成するステップと、
前記生成された修復結果が違反に対応するか否かを決定するステップと、
前記生成された修復結果が前記違反に対応するという結果に基づき、前記修復パターンセットから前記適用した修復パターンを削除するステップと、
前記修復パターンセットの中の次の修復パターンを前記選択された修復パターンとして再選択するステップと、を含む、ステップと、
前記選択された修復パターンに基づき、前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得するステップと、
を含む方法。
(付記2) 前記第2違反セットは同じ違反タイプである、付記1に記載の方法。
(付記3) 前記修復パターンセットの各々は、修復例としての、前記ソフトウェアプログラムの中の前記第1違反セット又は前記第2違反セットの対応する違反を修復する1つ以上の編集動作に対応する、付記1に記載の方法。
(付記4) 前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記修復パターンセットに対して前記第1動作セットを繰り返し実行するステップと、
前記読み出した第2違反セットの各々について前記第1動作セットを繰り返し実行する前記ステップに基づき、前記精緻化された修復パターンセットを取得するステップと、
を更に含む付記1に記載の方法。
(付記5) 前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、第2修復例セットを生成するステップ、を更に含み、
前記第1動作セットは、
前記適用した修復パターンに基づき、前記生成された修復結果が前記選択された未確定違反の修復に対応するか否かを決定するステップと、
前記生成された修復結果が前記選択された未確定違反の前記修復に対応するという決定に基づき、前記選択された未確定違反に関連付けられた修復例を生成するステップと、
前記生成された修復例を前記第2修復例セットに追加するステップと、
を更に含む、付記1に記載の方法。
(付記6) 前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記修復パターンセットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む付記5に記載の方法。
(付記7) 前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記第1動作セットを繰り返し実行することにより、前記第2修復例セットを生成するステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記ソフトウェアプログラムの前記読み出した第2違反セットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む付記5に記載の方法。
(付記8) データベースから、第2ソフトウェアプログラムの新たに発見した違反を受信するステップと、
前記受信した新たに発見した違反に前記精緻化された修復パターンセットのうちの1つを適用するステップと、
前記受信した新たに発見した違反への前記精緻化された修復パターンセットのうちの1つの適用に基づき、修復済み第2ソフトウェアプログラムを生成するステップと、
を更に含む付記1に記載の方法。
(付記9) 前記ソフトウェアプログラムの前記第2違反セットはデータベースから読み出される、付記1に記載の方法。
(付記10) 命令を格納するよう構成された1つ以上の非一時的コンピュータか独記憶媒体であって、前記命令は、実行されることに応答して、システムに動作を実行させ、前記動作は、
修復パターンセットを読み出すステップであって、前記修復パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習される、ステップと、
前記ソフトウェアプログラムの第2違反セットを読み出すステップであって、前記第2違反セットの各々は未確定違反である、ステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットから、第1ソフトウェアプログラムの未確定違反を選択するステップと、
前記修復パターンセットから修復パターンを選択するステップと、
前記修復パターンセットの精緻化のために第1動作セットを実行するステップであって、前記第1動作セットは、
前記選択された未確定違反に前記選択された修復パターンを適用して、修復結果を生成するステップと、
前記生成された修復結果が違反に対応するか否かを決定するステップと、
前記生成された修復結果が前記違反に対応するという結果に基づき、前記修復パターンセットから前記適用した修復パターンを削除するステップと、
前記修復パターンセットの中の次の修復パターンを前記選択された修復パターンとして再選択するステップと、を含む、ステップと、
前記選択された修復パターンに基づき、前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得するステップと、
を含む、1つ以上のコンピュータ可読記憶媒体。
(付記11) 前記第2違反セットは同じ違反タイプである、付記10に記載の1つ以上のコンピュータ可読記憶媒体。
(付記12) 前記修復パターンセットの各々は、修復例としての、前記ソフトウェアプログラムの中の前記第1違反セット又は前記第2違反セットの対応する違反を修復する1つ以上の編集動作に対応する、付記10に記載の1つ以上のコンピュータ可読記憶媒体。
(付記13) 前記動作は、
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記修復パターンセットに対して前記第1動作セットを繰り返し実行するステップと、
前記読み出した第2違反セットの各々について前記第1動作セットを繰り返し実行する前記ステップに基づき、前記精緻化された修復パターンセットを取得するステップと、
を更に含む、付記10に記載の1つ以上のコンピュータ可読記憶媒体。
(付記14) 前記動作は、
前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、第2修復例セットを生成するステップ、を更に含み、
前記第1動作セットは、
前記適用した修復パターンに基づき、前記生成された修復結果が前記選択された未確定違反の修復に対応するか否かを決定するステップと、
前記生成された修復結果が前記選択された未確定違反の前記修復に対応するという決定に基づき、前記選択された未確定違反に関連付けられた修復例を生成するステップと、
前記生成された修復例を前記第2修復例セットに追加するステップと、
を更に含む、付記10に記載の1つ以上のコンピュータ可読記憶媒体。
(付記15) 前記動作は、
前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記修復パターンセットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む、付記14に記載の1つ以上のコンピュータ可読記憶媒体。
(付記16) 前記動作は、前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記第1動作セットを繰り返し実行することにより、前記第2修復例セットを生成するステップと、
前記ソフトウェアプログラムの前記読み出した第2違反セットの各々について、前記生成された第2修復例セットから少なくとも1つの修復例を選択するためのユーザ入力を受信するステップと、
前記選択された少なくとも1つの修復例を修復パターンとして前記ソフトウェアプログラムの前記読み出した第2違反セットに追加することにより、前記精緻化された修復パターンセットを取得するステップと、
を更に含む、付記14に記載の1つ以上のコンピュータ可読記憶媒体。
(付記17) 前記動作は、
データベースから、第2ソフトウェアプログラムの新たに発見した違反を受信するステップと、
前記受信した新たに発見した違反に前記精緻化された修復パターンセットのうちの1つを適用するステップと、
前記受信した新たに発見した違反への前記精緻化された修復パターンセットのうちの1つの適用に基づき、修復済み第2ソフトウェアプログラムを生成するステップと、
を更に含む、付記10に記載の1つ以上のコンピュータ可読記憶媒体。
(付記18) 前記ソフトウェアプログラムの前記第2違反セットはデータベースから読み出される、付記10に記載の1つ以上のコンピュータ可読記憶媒体。
(付記19) 電子装置であって、プロセッサを含み、前記プロセッサは、
修復パターンセットを読み出し、前記修復パターンセットの各々は、ソフトウェアプログラムの第1違反セットに関連付けられた第1修復例セットに基づき学習され、
前記ソフトウェアプログラムの第2違反セットを読み出し、前記第2違反セットの各々は未確定違反であり、
前記ソフトウェアプログラムの前記読み出した第2違反セットから、第1ソフトウェアプログラムの未確定違反を選択し、
前記修復パターンセットから修復パターンを選択し、
前記修復パターンセットの精緻化のために第1動作セットを実行し、前記第1動作セットは、
前記選択された未確定違反に前記選択された修復パターンを適用して、修復結果を生成するステップと、
前記生成された修復結果が違反に対応するか否かを決定するステップと、
前記生成された修復結果が前記違反に対応するという結果に基づき、前記修復パターンセットから前記適用した修復パターンを削除するステップと、
前記修復パターンセットの中の次の修復パターンを前記選択された修復パターンとして再選択するステップと、を含み、
前記選択された修復パターンに基づき、前記修復パターンセットについて前記第1動作セットを繰り返し実行することにより、精緻化された修復パターンセットを取得する、
よう構成される、電子装置。
(付記20) 前記ソフトウェアプログラムの前記第2違反セットはデータベースから読み出される、付記19に記載の電子装置。
【符号の説明】
【0109】
100 環境
102 電子装置
104 データベース
106 ユーザエンド装置
108 通信ネットワーク
110 修復パターンセット
112 第1違反セット
114 第1修復例セット
116 第2違反セット
118 ユーザ
図1
図2
図3A
図3B
図4
図5A
図5B
図6A
図6B