(57)【要約】      （修正有）【課題】静的解析ツールにより、対象のプログラムポイントに関し、ユーザに有用な情報を提供し、警告のレビューをより簡単にする。【解決手段】ソフトウエアコードから、レビューされる静的解析警告を示す、第１のプログラムポイントが選択される。プログラムポイントは、変数のセットを含むプログラミング表現を有する。生成される警告が安全であるか安全で無いかをユーザが判定するために、少なくとも一つの変数に関する値について、レビュー支援情報（関連する変更ポイント及び制御条件）が、判別される。更に、変数に関する第２のプログラムポイントにより示される制御条件により、レビュー支援情報が提示される。関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントが除外される。除外後、システムは、ソフトウエアコードの検証を促進するために、ユーザに体系的方法でレビュー支援情報を提示する。【選択図】図４
2015088191.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウエアコードの検証を促進する方法において、
検証されるソフトウエアコードに対して生成される警告を示す第１のプログラムポイントを選択するステップであって、第１のプログラムポイントは、変数のセットを含むプログラミング表現を有し、警告は、変数のセットのうちの、少なくとも一つの変数値が静的に判別されないとき、生成される、ステップと、
少なくとも一つの変数に関する値が第１のプログラミングポイントを安全な条件に導くのか、安全で無い条件に導くのか、ユーザが判定するために、レビュー支援情報を判別するステップであって、レビュー支援情報は、
少なくとも一つの変数に値を割り当てる、ソフトウエアコードからの、変更ポイントのセット、
変更ポイントのセットにて割り当てられる値が、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるか、ユーザに提示できないときに、ソフトウエアコードからの、少なくとも一つの変数に関する第２のプログラムポイントにより示される制御条件であって、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるかについて、ユーザが判別する助けとなる、制御条件、及び、
変更ポイントのセット、制御条件、及び、第１のプログラムポイントの間の、パス
のうちの少なくとも一つを他動的に配置することにより判別される、ステップと、
ユーザにレビュー支援情報を提示するステップと
を含み、
前記ユーザにレビュー支援情報を提示するステップは、
一つ以上の関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントを除外するステップと、
一つ以上の関連する変更ポイント若しくは制御条件をユーザに表示するステップであって、一つ以上の関連する変更ポイント若しくは制御条件は生成される警告に対する根本的原因を示し、これによりソフトウエアコードの検証を促進する、ステップと
で構成され、
前記選択するステップ、前記判別するステップ、及び前記提示するステップは、プロセッサにより実行される、方法。
【請求項２】
警告は、ソフトウエアコードに関して実行される静的解析に基づいて生成され、静的解析は更に結果としてソフトウエアコードに対する安全な条件及び安全で無い条件となる、
請求項１に記載の方法。
【請求項３】
除外された後の非有用な変更ポイントがユーザの要求に基づいて表示され、非有用な変更ポイントがユーザへ識別表現で表示される、
請求項１に記載の方法。
【請求項４】
ソフトウエアコードの制御条件と関数コールポイントの観点でパスを他動的に表示するステップを、更に含む、
請求項１に記載の方法。
【請求項５】
ソフトウエアコードの検証を促進するシステムにおいて、
検証されるソフトウエアコードに対して生成される警告を示す第１のプログラムポイントを選択する選択モジュール２１０であって、第１のプログラムポイントは、変数のセットを含むプログラミング表現を有し、警告は、変数のセットのうちの、少なくとも一つの変数値が静的に判別されないとき、生成される、選択モジュール２１０と、
少なくとも一つの変数に関する値が第１のプログラミングポイントを安全な条件に導くのか、安全で無い条件に導くのか、ユーザが判定するために、レビュー支援情報を判別する判別モジュール２１２であって、レビュー支援情報は、
少なくとも一つの変数に値を割り当てる、ソフトウエアコードからの、変更ポイントのセット、
変更ポイントのセットにて割り当てられる値が、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるか、ユーザに提示できないときに、ソフトウエアコードからの、少なくとも一つの変数に関する第２のプログラムポイントにより示される制御条件であって、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるかについて、ユーザが判別する助けとなる、制御条件、及び、
変更ポイントのセット、制御条件、及び、第１のプログラムポイントの間の、パス
のうちの少なくとも一つを他動的に配置することにより判別される、判別モジュール２１２と、
ユーザにレビュー支援情報を提示するユーザインタフェースモジュール２１４と
を含み、
前記ユーザにレビュー支援情報を提示するユーザインタフェースモジュール２１４は、
一つ以上の関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントを除外するステップと、
一つ以上の関連する変更ポイント若しくは制御条件をユーザに表示するステップであって、一つ以上の関連する変更ポイント若しくは制御条件は生成される警告に対する根本的原因を示し、これによりソフトウエアコードの検証を促進する、ステップと
を行う、
システム。
【請求項６】
警告は、ソフトウエアコードに関して実行される静的解析に基づいて生成され、静的解析は更に結果としてソフトウエアコードに対する安全な条件及び安全で無い条件となる、
請求項５に記載のシステム。
【請求項７】
除外された後の非有用な変更ポイントがユーザの要求に基づいて表示され、非有用な変更ポイントがユーザへ識別色で表示される、
請求項５に記載のシステム。
【請求項８】
判別モジュール２１２は更に、ソフトウエアコードの制御条件と関数コールポイントの観点でパスを他動的に表示する、
請求項５に記載のシステム。
【請求項９】
ソフトウエアコードの検証を促進するコンピュータ装置内で実行可能なプログラムを具体化する持続性コンピュータ読み取り可能媒体において、
プログラムは、
検証されるソフトウエアコードに対して生成される警告を示す第１のプログラムポイントを選択するプログラムコードであって、第１のプログラムポイントは、変数のセットを含むプログラミング表現を有し、警告は、変数のセットのうちの、少なくとも一つの変数値が静的に判別されないとき、生成される、プログラムコードと、
少なくとも一つの変数に関する値が第１のプログラミングポイントを安全な条件に導くのか、安全で無い条件に導くのか、ユーザが判定するために、レビュー支援情報を判別するプログラムコードであって、レビュー支援情報は、
少なくとも一つの変数に値を割り当てる、ソフトウエアコードからの、変更ポイントのセット、
変更ポイントのセットにて割り当てられる値が、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるか、ユーザに提示できないときに、ソフトウエアコードからの、少なくとも一つの変数に関する第２のプログラムポイントにより示される制御条件であって、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるかについて、ユーザが判別する助けとなる、制御条件、及び、
変更ポイントのセット、制御条件、及び、第１のプログラムポイントの間の、パス
のうちの少なくとも一つを他動的に配置することにより判別される、プログラムコードと、
ユーザにレビュー支援情報を提示するプログラムコードと
を含み、
前記ユーザにレビュー支援情報を提示するプログラムコードは、
一つ以上の関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントを除外するステップと、
一つ以上の関連する変更ポイント若しくは制御条件をユーザに表示するステップであって、一つ以上の関連する変更ポイント若しくは制御条件は生成される警告に対する根本的原因を示し、これによりソフトウエアコードの検証を促進する、ステップと
を行うものである、
持続性コンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２０１３年１０月３１日出願の印度仮特許出願番号第３４６１／ＭＵＭ／２０１３号（特許文献１）の優先権を主張するものであり、その全体は参照の上本明細書に組み込まれる。
【０００２】
本明細書に記載の本主題は、概略、ソフトウエアコードのユーザインタフェース使用可能検証を促進するシステム及び方法に関する。
【背景技術】
【０００３】
静的解析（若しくは静的解析ツール）は、ゼロ除算、バッファオーバフロー、アレイインデクスアウトオブバウンド、及び、ポインタのヌル／イリーガル逆参照などの、一般的なプログラミングのバグを検出するのに有用且つ実効的であることが知られている。それは、これらツールにより十分な情報が利用可能である若しくは計算可能であるとき、安全である若しくは安全でないとして、対象のプログラムポイントをレポートする。別の場合、十分な情報が静的には利用可能で無い若しくは計算可能で無いならば、それは、警告／アラームとしてそれらプログラムポイントをレポートする。対象のプログラムポイントは、そのような一般的なプログラミングの欠陥の存在がチェックされる／検出されるべき、コード内のロケーション／ポイントに対応する。
【０００４】
静的解析は、通常、複数の警告の結果となる。ユーザは、個々の警告を手作業で解析することが想定されている。個々の警告は最高度の注意で取り扱うことが要求される。警告の解析はソフトウエアアプリケーションを検証することが要求されるからである。警告のレビューにより、システム障害、即ち、一般的なプログラミングのエラーにより発生するランタイム時のエラーが無いことの保証が与えられる。この警告の手作業によるレビューは、コストが掛かり、時間も消費し、更に退屈である。更に、警告の手作業によるレビューの繰り返し及び単調さにより、ユーザの解析作業はよりつまらないものとなる。
【０００５】
最近の研究領域は、静的解析を実際により正確にし、生成される警告を少なくすることに焦点を当てている。現在利用可能な静的解析ツールは、対象のプログラムポイントが安全であるか安全で無いかをユーザに知らせるに過ぎず、それらはユーザに何ら有用な情報を提供する助けとならず、又、ユーザにとって警告のレビューがより簡単になるように助けをするものではない。更に、警告のレビューの間、ユーザは、多数のコードを詳しく検討し、警告を安全として若しくは安全で無いとして判別するのに要求される必要情報を収集することが想定される。このコードトラバースは、概略、手作業のレビューの間に費やされる時間の半分以上掛かってしまう。また、ユーザは非常に大きいサイズのアプリケーションに関して要求される情報を正確に特定し得ないので、要求される情報を収集する手作業のプロセスでは間違いが生じやすい。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】印度仮特許出願番号第３４６１／ＭＵＭ／２０１３号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
この概要は、ソフトウエアコードの検証を促進するシステム及び方法に関する形態を導入すべく示されており、コンセプトは以下の詳細な説明に更に記載されている。この概要は、発明の主題の本質的特徴を特定することを意図するものでは無く、発明の主題の範囲を判別したり限定したりするのに用いることを意図するものでも無い。
【課題を解決するための手段】
【０００８】
一つの実装では、ソフトウエアコードの検証を促進するシステムが開示される。システムはプロセッサ及びプロセッサに結合されるメモリを含む。プロセッサは、メモリ内に格納される複数のモジュールを含む。複数のモジュールは、選択モジュール、判別モジュール、及びユーザインタフェースモジュールを含む。選択モジュールは、検証されるソフトウエアコードに対して生成される警告を示す第１のプログラムポイントを選択し得る。第１のプログラムポイントは、変数のセットを含むプログラミング表現を有する。更に、警告は、変数のセットのうちの、少なくとも一つの変数値が静的に判別されないとき、生成される。更に判別モジュールは、少なくとも一つの変数に関する値が第１のプログラミングポイントを安全な条件に導くのか、安全で無い条件に導くのか、ユーザが判定するために、レビュー支援情報を判別し得る。レビュー支援情報は、少なくとも一つの変数に値を割り当てる、ソフトウエアコードからの、変更ポイントのセットを他動的に配置することにより判別され得る。レビュー支援情報は更に、変更ポイントのセットにて割り当てられる値が、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるか、ユーザに提示できないときに、ソフトウエアコードからの、少なくとも一つの変数に関する第２のプログラムポイントにより示される制御条件を他動的に配置することにより判別され得る。更に、制御条件は、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるかについて、ユーザが判別する助けとなり得る。レビュー支援情報は更に、変更ポイントのセット、制御条件、及び、第１のプログラムポイントの間の、パスを他動的に配置することにより判別され得る。更に、ユーザインタフェースモジュールは、一つ以上の関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントを除外することにより、ユーザにレビュー支援情報を提示し得る。ユーザインタフェースモジュールは更に、一つ以上の関連する変更ポイント若しくは制御条件をユーザに表示し得る。一つ以上の関連する変更ポイント若しくは制御条件は、生成される警告に対する根本的原因を示し、これによりソフトウエアコードの検証を促進し得る。
【０００９】
別の実装では、ソフトウエアコードの検証を促進する方法が開示される。方法は、検証されるソフトウエアコードに対して生成される警告を示す第１のプログラムポイントを選択するステップを含み得る。第１のプログラムポイントは、変数のセットを含むプログラミング表現を有する。更に、警告は、変数のセットのうちの、少なくとも一つの変数値が静的に判別されないとき、生成される。方法は、少なくとも一つの変数に関する値が第１のプログラミングポイントを安全な条件に導くのか、安全で無い条件に導くのか、ユーザが判定するために、レビュー支援情報を判別するステップを含み得る。レビュー支援情報は、少なくとも一つの変数に値を割り当てる、ソフトウエアコードからの、変更ポイントのセットを他動的に配置することにより判別され得る。レビュー支援情報は更に、変更ポイントのセットにて割り当てられる値が、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるか、ユーザに提示できないときに、ソフトウエアコードからの、少なくとも一つの変数に関する第２のプログラムポイントにより示される制御条件を他動的に配置することにより判別され得る。更に、制御条件は、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるかについて、ユーザが判別する助けとなり得る。レビュー支援情報は、変更ポイントのセット、制御条件、及び、第１のプログラムポイントの間の、パスを他動的に配置することにより判別され得る。更に方法は、ユーザにレビュー支援情報を提示するステップを含み得る。レビュー支援情報は、一つ以上の関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントを除外することにより、提示され得る。レビュー支援情報は更に、一つ以上の関連する変更ポイント若しくは制御条件をユーザに表示することにより、提示され得る。一つ以上の関連する変更ポイント若しくは制御条件は生成される警告に対する根本的原因を示し、これによりソフトウエアコードの検証を促進し得る。前記選択するステップ、前記判別するステップ、及び前記提示するステップからなる前記方法は、プロセッサにより実行される。
【００１０】
更に別の実装では、ソフトウエアコードの検証を促進するコンピュータ装置内で実行可能なプログラムを具体化する持続性コンピュータ読み取り可能媒体が、開示される。プログラムは、検証されるソフトウエアコードに対して生成される警告を示す第１のプログラムポイントを選択するプログラムコードを含み得る。第１のプログラムポイントは、変数のセットを含むプログラミング表現を有する。更に、警告は、変数のセットのうちの、少なくとも一つの変数値が静的に判別されないとき、生成される。更に、プログラムは、少なくとも一つの変数に関する値が第１のプログラミングポイントを安全な条件に導くのか、安全で無い条件に導くのか、ユーザが判定するために、レビュー支援情報を判別するプログラムコードを含み得る。レビュー支援情報は、少なくとも一つの変数に値を割り当てる、ソフトウエアコードからの、変更ポイントのセットを他動的に配置することにより判別される。レビュー支援情報は更に、変更ポイントのセットにて割り当てられる値が、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるか、ユーザに提示できないときに、ソフトウエアコードからの、少なくとも一つの変数に関する第２のプログラムポイントにより示される制御条件を他動的に配置することにより判別され得る。制御条件は、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるかについて、ユーザが判別する助けとなり得る。レビュー支援情報は更に、変更ポイントのセット、制御条件、及び、第１のプログラムポイントの間の、パスを配置することにより判別され得る。更に、プログラムは、ユーザにレビュー支援情報を提示するプログラムコードを含み得る。レビュー支援情報は、一つ以上の関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントを除外することにより、提示され得る。レビュー支援情報は更に、一つ以上の関連する変更ポイント若しくは制御条件をユーザに表示することにより、提示され得る。一つ以上の関連する変更ポイント若しくは制御条件は生成される警告に対する根本的原因を示し、これによりソフトウエアコードの検証を促進し得る。
【図面の簡単な説明】
【００１１】
発明の詳細な説明は、添付の図面を参照して記載されている。図面では、参照番号の最左の数字が、参照番号が最初に現れる図を特定する。同じ特徴及びコンポーネントを参照するのに、同じ数字が図面全体を通して用いられる。
【図１】図１は、本発明の実施形態に係る、ソフトウエアコードの検証を促進するシステムのネットワーク実装を示す。
【図２】図２は、本発明の実施形態に係る、システムを示す。
【図３Ａ】図３Ａ−図３Ｂは、本発明の実施形態に係る、詳細なソフトウエアコードの検証を促進する種々の例を示す。
【図３Ｂ】図３Ａ−図３Ｂは、本発明の実施形態に係る、詳細なソフトウエアコードの検証を促進する種々の例を示す。
【図３Ｃ】図３Ｃ−図３Ｄは、本発明の実施形態に係る、詳細なソフトウエアコードの検証を促進する種々の例を示す。
【図３Ｄ】図３Ｃ−図３Ｄは、本発明の実施形態に係る、詳細なソフトウエアコードの検証を促進する種々の例を示す。
【図３Ｅ】図３Ｅ−図３Ｆは、本発明の実施形態に係る、詳細なソフトウエアコードの検証を促進する種々の例を示す。
【図３Ｆ】図３Ｅ−図３Ｆは、本発明の実施形態に係る、詳細なソフトウエアコードの検証を促進する種々の例を示す。
【図４】図４は、本発明の実施形態に係る、ソフトウエアコードの検証を促進する方法を示す。
【発明を実施するための形態】
【００１２】
ソフトウエアコードの検証を促進するシステム及び方法を記載する。これらのプログラムコードは、概略、埋め込まれたシステム内に実装される。しかし、埋め込まれたシステムの展開若しくは始動の前に、ランタイムの間にこれら埋め込まれたシステムの障害を回避するために、ソフトウエアコードの検証が要求される。検証の行うための第１のステップは、市場で入手可能な静的解析ツールの助けにより、複数のプログラムポイントを有するソフトウエアを解析することである。解析の後、これらのツールは、安全なもの、安全でないもの、若しくは警告として、ソフトウエアコードのプログラムポイントをレポートする。安全なものとしてレポートされたプログラムポイントは、これらのプログラムポイントにてソフトウエアコード内には欠陥／バグは無いことを示し、他方、安全でないものとしてレポートされたプログラムポイントは、これらのプログラムポイントにてソフトウエアコード内に存在するプログラミングバグに関してユーザに明確に示す。一方で、警告としてレポートされたプログラムポイントは、プログラムポイントが安全である状態にあるか若しくは安全でない状態にあるか、解析ツールが不確かであるということをユーザに示す。
【００１３】
生成された警告は、警告としてレポートされたプログラムポイントが安全である状態に該当するか若しくは安全でない状態に該当するか、を判別するのに手作業の注意を必要とするほど、通常、多い数である。これを手作業で解析するために、ユーザは、ソフトウエアコードから警告としてレポートされたプログラムポイントの各々を、チェックしなければならない。手作業の解析の間、ユーザは、警告としてレポートされたプログラムポイントが安全であるか安全で無いかを判別するために、ソフトウエアコード内の多数を詳しく検討しなければならないことがある。解析を行う間、ユーザが自分の焦点を維持することが、退屈となることがある。この手作業の解析の間、ユーザの注意をガイドし集中させるのに利用可能な、助けとなるような情報は無い。そんな状態を回避するために、本開示では、警告の実効的なレビューのために、レビューの助けとなる情報を判別してユーザに提示する、ユーザインタフェース使用可能システム及び方法が、提供される。
【００１４】
本開示の実施形態によると、レビューの助けとなる情報は、レビュープロセスを促進するために、二つのカテゴリ、即ち、変更ポイントと制御条件とのセットで、判別され得る。レビューの助けとなる情報（変更ポイントのセットと制御条件）は、警告をレビューするのにユーザに要求する労力と時間とが少なくなるように、体系的に示され得る。更に、システムは、変更ポイントと、ソフトウエアのための警告を示すプログラムポイント若しくはレビュープロセスの間に取得される任意の他の変更ポイントとの間の、パスを判別し得る。レビューの助けとなる情報を提示する間、パスは、ソフトウエアコードから他の情報／ステートメント（例えば、代入文、不適切な関数呼び出し）を除去することにより、制御条件及びコールポイントの観点で表示される。このろ過（除去）により、システムでは、ユーザへ有用な／関連のレビューの助けとなる情報のみをディスプレイする時間がより少なくなり得る。よって、ユーザインタフェース上へ有用な／関連のレビューの助けとなる情報をディスプレイするに当たり、システムは非常に実効的に作動する。ソフトウエアコードの検証のために警告をユーザがレビューするに当たり、このことは今度は容易な経験となる。
【００１５】
ソフトウエアコードの検証を促進する記載のシステム及び方法の形態は、任意の数の様々なコンピュータシステム、環境、及び／又は、構成にて実装可能であるが、実施形態は、以下の例示のシステムの文脈で記載される。
【００１６】
図１を参照すると、本発明の実施形態に係る、ソフトウエアコードの検証を促進するシステム２００のネットワーク実装１００が示される。システム１０２はコンピュータシステムとして実装されると想定して本発明は説明されるが、当然ながら、ラップトップコンピュータ、デスクトップコンピュータ、ノートブック、ワークステーション、メインフレームコンピュータ、サーバ、ネットワークサーバ、タブレット、携帯電話などの、様々なコンピュータシステムとして、システム１０２は実装され得る。一つの実装では、システム１０２は、クラウドベース環境で実装され得る。当然ながら、システム１０２は、以降、まとめてユーザデバイス１０４として参照される一つ以上のユーザデバイス１０４−１、１０４−２・・・１０４−Ｎを介して、又は、ユーザデバイス１０４上に駐在するアプリケーションを介して、多数のユーザによりアクセスされ得る。ユーザデバイス１０４の例は、ポータブルコンピュータ、パーソナルデジタルアシスタント、ハンドヘルドデバイス、及びワークステーションを含み得るが、これらに限定されない。ユーザデバイス１０４は、ネットワーク１０６を介してシステム１０２に通信結合する。
【００１７】
一つの実施形態では、ネットワーク１０６は、無線ネットワークでも、有線ネットワークでも、若しくはそれらの組み合わせでもよい。ネットワーク１０６は、イントラネット、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、インターネットなどの、様々なタイプのネットワークの一つとして、実装され得る。ネットワーク１０６は、専用ネットワークでも、共有ネットワークでもいずれでもよい。共有ネットワークは、相互の通信のための、例えば、ハイパートランスファープロトコル（ＨＴＴＰ）、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）、ワイアレスアクセスプロトコル（ＷＡＰ）などの、様々なプロトコルを利用する様々なタイプのネットワークの接続を表す。更に、ネットワーク１０６は、ルータ、ブリッジ、サーバ、コンピュータ装置、記憶装置などの、種々のネットワークデバイスを含み得る。
【００１８】
図２を参照して、本発明の実施形態に係るシステム１０２が示される。一つの実施形態では、システム１０２は、少なくとも一つのプロセッサ２０２、インプット／アウトプット（Ｉ／Ｏ）インタフェース２０４、及びメモリ２０６を含み得る。少なくとも一つのプロセッサ２０２は、一つ以上のマイクロプロセッサ、ミクロコンピュータ、マイクロコントローラ、デジタルシグナルプロセッサ、中央処理装置、ステートマシン、論理回路、及び／又は、演算命令に基づいて信号を操作する任意のデバイスとして、実装され得る。他の機能のうちでも、少なくとも一つのプロセッサ２０２は、メモリ２０６内に格納されたコンピュータ読み取り可能命令、若しくはモジュールをフェッチして実行するように構成される。
【００１９】
Ｉ／Ｏインタフェース２０４は、種々のソフトウエア及びハードウエアインタフェース、例えば、ウェブインタフェース、グラフィカルユーザインタフェースなどを、含み得る。Ｉ／Ｏインタフェース２０４により、システム１０２はユーザと直接に若しくはクライアントデバイス１０４を介して相互作用し得る。更に、Ｉ／Ｏインタフェース２０４により、システム１０２は、ウェブサーバや外部データサーバ（図示せず）などの、他のコンピュータ装置と通信することができる。Ｉ／Ｏインタフェース２０４は、例えば、ＬＡＮ、ケーブルなどの有線ネットワークや、ＷＬＡＮ、セルラー若しくは衛星などの無線ネットワークを含む、広範なネットワーク及びプロトコルタイプの範囲内で多重通信を促進することができる。Ｉ／Ｏインタフェース２０４は、多数のデバイスを相互に、若しくは別のサーバに接続するための一つ以上のポートを含み得る。
【００２０】
メモリ２０６は、例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）やダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの揮発性メモリ、及び／又は、リードオンリメモリ（ＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、光学ディスク、コンパクトディスク（ＣＤ）、デジタル多用途ディスク即ちデジタルビデオディスク（ＤＶＤ）及び磁気テープなどの不揮発性メモリを含む、当業者に秀知の任意のコンピュータ読み取り可能媒体若しくはコンピュータプログラムプロダクトを含み得る。
【００２１】
モジュール２０８は、特定のタスクを実行する、若しくは特定の抽象データタイプを実装する、ルーティン、プログラム、オブジェクト、コンポーネント、データストラクチャなどを含む。一つの実装では、モジュール２０８は、選択モジュール２１０、判別モジュール２１２、ユーザインタフェースモジュール２１４，及び他のモジュール２１６を含み得る。他のジュール２１６は、システム１０２のアプリケーション及び関数を補完するプログラム若しくはコード化命令を含み得る。
【００２２】
データ２１８は、とりわけ、一つ以上のモジュール２０８により処理され、受信され、及び生成されるデータを格納するリポジトリとして作用する。データ２１８は、ルール及びレビュー支援情報データベース２２０、並びに他のデータ２２２も含んでもよい。
【００２３】
本発明の実施形態に係る、システム１０２により実装されるソフトウエアコードの検証を促進する様々な例を詳細に示す、図３Ａ〜図３Ｂ、図３Ｃ〜図３Ｄ、及び図３Ｅ〜図３Ｆを参照する。第１の例は、変更ポイントのセットのレポートの要求を示す図３Ａ〜図３Ｂに示される。この例では、検証されるソフトウエアコードは、図３Ａに３０２として示される。ソフトウエアコード３０２は、複数のプログラムポイント（ライン１−１９）を含む。本開示の実施形態によると、システム１０２の選択モジュール２１０は、検証されるソフトウエアコード３０２に対して生成される警告を示す、第１のプログラムポイント３０４を選択し得る。図３Ａから、第１のプログラムポイント３０４は「ａ」、「ｂ」、及び「ｃ」の変数のセットを有するプログラミング表現「ｃ＝ｂ／ａ」を有する。変数「ａ」（分母）の値は静的には決定し得ないので、ゼロ除算（ゼロによる除算）検証のための警告が生成される。生成される警告は、図３Ｂのテーブル３０６に示される。
【００２４】
更に、生成された警告が安全であるか安全で無いか判定するために、ユーザは、ソフトウエアコード３０２から手作業でレビュー支援情報を収集しなければならない、というものであってもよい。レビュー支援情報を収集するために、ユーザは、ソフトウエアコード３０２を介して大量に詳しく検討しなければならない、というものであってもよい。変数「ａ」は分母変数であり、ソフトウエアコード３０２の関数「ｆｕｎｃ」内に割り当てられないので、ユーザは値を変数「ａ」に割り当てる変更ポイントを全て検索しなければならない。この例では、ユーザは、（ソフトウエアコード３０２のライン７及び１４にある）関数「ｆｕｎｃ」のコールポイントを特定／検索して、変数「ａ」が変更されるこれらのプログラムポイントに向かって逆方向にトレースしなければならない。そのようなユーザの介入を回避するために、システム１０２の判別モジュール２１２は、ユーザのためのレビュー支援情報として、ライン６及び１３における変更ポイントのセットを自動的に判別してもよい。更に、システム１０２のユーザインタフェースモジュール２１４は、図３Ｂのテーブル３０８に示されるレビュー支援情報を表示してもよい。
【００２５】
テーブルの「パス情報」カラム下の「パスを示す」ボタンをクリックすると、変更ポイント（ライン６及び１３）から第１のプログラムポイントへのパス、即ち警告が、ユーザに表示され得る。生成されるパスは、別のウインドウで、又は、同じ若しくは独立のポップアップフォームで、示され得る。更に、「変更ポイント位置詳細」カラム下の「Ｆｉｌｅ．ｃ＃１３」をクリックすると、Ｆｉｌｅ．ｃを表示する独立のウインドウがポップアップされ、ライン１３が独立のソースコードウインドウで高輝度化され得る。更に、このソースコードウインドウでは、「パスを示す」ボタンをクリックした後に示されるパス内に含まれるステートメント／コードも、高輝度化され得る。更に、テーブル３０８の「他動性変数」カラム下のＶ１、Ｖ２をクリックすると、カラム「変更ポイント位置詳細」下で示される位置における変数「Ｖ１」及び「Ｖ２」の変更ポイントを表示する、独立のポップアップウインドウが生成され得る。このように、ユーザインタフェースモジュール２１４は、ソフトウエアコード３０２の検証のためにユーザにレビュー支援情報を表示し得る。
【００２６】
制御条件のレポートの要求を示す図３Ｃ〜図３Ｄに、第２の例が示される。この例によると、検証されるソフトウエアコード３０２は、図３Ｃの３１０として示される。ソフトウエアコード３１０は、複数のプログラムポイント（ライン１−１７）を含む。システム１０２の選択モジュール２１０は、ソフトウエアコード３１０に対して生成される警告を示す、第１のプログラムポイントを選択し得る。この例では、選択される第１のプログラムポイントは、図３Ｃの３１２（ライン１５）として示される。第１のプログラムポイント３１２は「ａ」、「ｔｅｍｐＶａｒ」、及び「ｃ」の変数のセットを含むプログラミング表現「ｃ＝ｔｅｍｐＶａｒ／ａ」を有する。この例では、変数「ａ」（即ち、分母）の値は、静的には決定し得ず、故に、ゼロ除算検証のための警告が生成される。生成される警告は、図３Ｄのテーブル３１４に示される。
【００２７】
ところで、このケースでは、判別モジュール２１２は、二つのカテゴリ、即ち、「変更ポイントのセット」及び「制御条件」にてレビュー支援情報を判別してもよい。最初に、判別モジュール２１２は、変数「ａ」に値を割り当てる変更ポイントのセットを判別してもよい。この例では、一つのみの変更ポイントが、ソフトウエアコード３０２のライン５にて判別される。しかし、この時点にて、判別される変更ポイント（即ち、ライン５）は、生成される警告が安全であるか安全で無いかを判定することをユーザに対して、提示する助けとならない／提示することができない。
【００２８】
この状況では、ユーザは、ソフトウエアコード３１０内を手作業でチェックして、警告（ゼロ除算）を回避するため制御条件をけんさくしなければならない、というものであってもよい。第１のインスタンスでは、制御条件はソフトウエアコード３１０のライン１３にて特定され得る。ライン１３において変数「ａ」がポインタ「＊ｐｔｒ」と比較されることがわかる。この制御条件、即ち「ｉｆ（ａ＝＝＊ｐｔｒ）」から、「＊ｐｔｒ」が非ゼロである場合のみ、変数「ａ」はライン１５にて「非ゼロ」であるとわかり得る。このために、ユーザは、更に「＊ｐｔｒ」の値をチェックせねばならず、このため彼／彼女はソフトウエアコード３１０のライン８にてポインタ割り当てを検索しなければならない。ライン８では、ポインタ割り当ては、「＊ｐｔｒ」値が変数「ｂ」の値であることを示す。ここで、ユーザの焦点は、変数「ａ」から変数「ｂ」へシフトする。次のインスタンスでは、変数「ｂ」に係る変更ポイント、即ちソフトウエアコード３１０のライン７が、判別される。
【００２９】
ユーザは、ライン５からライン１３−ライン８−ライン７へ詳しく検討しなければならないことが、上記２段落からわかる。これらのラインを介して詳しく検討することは、ユーザに多くの努力と時間を課すものである。よって、この例によると、判別モジュール２１２は、レビュー支援情報として、変数「ａ」に関する制御条件を判別し得る。更に、両方のカテゴリ、即ち、変更ポイント及び制御条件におけるレビュー支援情報は、ユーザインタフェースモジュール２１４によりユーザに提示され得る。更に、判別されたレビュー支援情報は、図３Ｄのテーブル３１６に示され得る。制御条件「ａ＝＝＊ｐｔｒ」と共に変更ポイント「ｆｓｃａｎｆ（“％ｄ”，＆ａ）；」は、「変更ポイント」カラム及び「制御条件」カラム下に、夫々示される。更に、「変更ポイント位置詳細」カラム下の「Ｆｉｌｅ１．ｃ＃５」をクリックすると、独立のソースコードウインドウ内に対応するソースコードが表示され得る。更に、ユーザは、テーブル３１６の「制御条件」カラム下の「ａ＝＝＊ｐｔｒ」をクリックすることにより、「＊ｐｔｒ」に関するより詳細（即ち、ポインタ情報、＊ｐｔｒに関する変更ポイントの全て、など）も得ることができる。この情報は、別のポップアップウインドウに表示し得る。このように、レビュー支援情報（変更ポイント及び制御条件）は、ソフトウエアコード３１０の検証を促進するためにユーザに表示され得る。
【００３０】
ところで、変更ポイント／制御条件、及び、レビュー支援情報内の他動性をオンデマンドでレポートする要求を示す図３Ｅ〜図３Ｆにて、第３の例が示される。この例で検証されるソフトウエアコードは、図３Ｅの３１８として示される。ソフトウエアコード３１８は、複数のプログラムポイント（ライン１〜２８）を含む。システム１０２の選択モジュール２１０は、ソフトウエアコード３１８のために生成される警告を示す（ライン２７における）第１のプログラムポイント３２０を選択し得る。生成される警告は、図３Ｆのテーブル３２２内で見られる。更に、選択される第１のプログラムポイントは変数「ａ」及び「ｃ」のセットを有するプログラミング表現「ｃ＝＝ａｒｒ［ａ］」を有する。このケースでは、警告は、アレイインデクスアウトオブバウンド（ＡＩＯＢ）検証のために生成される。ＡＩＯＢ検証では、インデクス値（変数「ａ」の値）が常にアレイのサイズ／境界の範囲（即ち、１０）内であるかどうかインデクス値がチェックされる。変数「ａ」の値は静的に判別され得ないので警告としてレポートされる。よって、変数「ａ」の値が０と９の間の値（両方を含む）を取るかどうかチェックすることが、要求される。
【００３１】
この例で実行されるプロセスは、変数「ａ」に値を割り当てる変更ポイントのセットの特定で開始する。第１のインスタンスでは、変数「ａ」に対応する、特定される変更ポイントは、ソフトウエアコード３１８のライン２６におけるものである。ライン２６は、値が変数「ｂ」から取られること、即ち、値が「ｂ」から他動的に取られることを示す。ここで、値をチェックするための、対象の変数は「ａ」の代わりに「ｂ」になる。よって、変数「ｂ」に関する変更ポイントを特定することが要求される。変数「ｂ」のために特定される変更ポイントは、ソフトウエアコード３１８のライン２１及び１５である。ライン２１における変更ポイントは、値５を変数「ｂ」に常に割り当てることを示す。更に、ライン１５における変更ポイントは、変数「ｃ」を変数「ｂ」に割り当てることを示す。
【００３２】
よって、他動性により、ここで変数「ｃ」が対象の変数であり、値を変数「ｃ」に割り当てる変更ポイントの全てを特定するために、手作業の解析が要求され得る。ここで変数「ｃ」のために特定される次の変更ポイントは、ソフトウエアコード３１８のライン８におけるものである。よって、変更ポイント（ライン８）に基づいて、ユーザは、変数に対して割り当てられる値は０〜９であることを特定できる。このような深い解析とコードトラバースにより、第１のプログラムポイント（即ち、ライン２７）における警告は、「安全である」とレビューされ得る。
【００３３】
よって、上記パラグラフで説明した、変更ポイントのセット（即ち、ライン２６、ライン２１、ライン１５及びライン８）を特定するために実行される全体のプロセスは、ユーザの相当量の努力と時間を必要とし得る。このような問題を回避するため、システム１０２の判別モジュール２１２は、レビュー支援情報として、ソフトウエアコード３１８から変更ポイントのセット（ライン２６、ライン２１、ライン１５及びライン８）を判別し得る。この例では、判別される変更ポイントのセットが、生成される警告が安全であるか安全で無いかを、ユーザに提示できるので、判別モジュール２１２は、制御条件を判別しなかったことがわかる。
【００３４】
変更ポイントのセットの特定の後、システム１０２のユーザインタフェースモジュール２１４により実行される次のステップは、ユーザにレビュー支援情報を示すことである。本開示の実施形態によると、ユーザインタフェースモジュール２１４は、変更ポイントのセット（ライン２６、ライン２１、ライン１５及びライン８）から、非有用な変更ポイントを除外し得る。この除外は、警告のタイプ、及び変更ポイントにより割り当てられる値に拠って、実行される。例えば、ユーザインタフェースモジュール２１４は、ライン２７の警告ポイントが常に安全であるので、ライン２１を除外し得る。更に、この例では、ユーザインタフェースモジュール２１４は、ライン２６及びライン１５を非有用な変更ポイントであると考えて、それらを除外し得る。これらのポイントは値割り当て内の他動性を示すからである。除外後、ユーザインタフェースモジュール２１４は、ユーザインタフェース上にて、関連する変更ポイントのみ、即ち、ライン８をユーザに表示し得る。更に、ユーザにレビュー支援情報を示す間、テーブル３２４内に示す非有用な変更ポイント（即ち、ライン２６、２１及び１５）はユーザインタフェースモジュール２１４によって表示されることはない。図３Ｆのテーブル３２４に示す、関連する変更ポイントは、生成される警告に対する根本的原因を示す。更に、テーブル３２４の「パス情報」カラム下の「パスを示す」ボタンをクリックすると、変更ポイントのセットから、生成される警告（即ち、第１のプログラムポイント）へのパスが、ユーザに表示され得る。生成されるパスは、独立のウインドウ若しくはポップアップフォーム内で、又は、同じフォーム内で、ユーザに示され得る。また、ユーザの要求に基づいて、非有用な変更ポイントがユーザインタフェース上に表示され得る。本開示の実施形態によると、非有用な変更ポイントが、ユーザに対して独立のウインドウ内で識別色により表示され得る。よって、ソフトウエアコード３１８の検証を促進するために、関連する変更ポイント（ライン８）のみがユーザに表示され得る。更に、上記の例で説明したレビュー支援情報（変更ポイントと制御条件のセット）は、レビュー支援情報データベース２２０内に格納され得る。
【００３５】
ここで図４を参照して、本発明の実施形態に係る、ソフトウエアコードの検証を促進する方法が示される。方法４００は、コンピュータ実行可能命令の一般コンテキストで記載され得る。概略、コンピュータ実行可能命令は、特定の関数を実行し、若しくは特定の抽象データタイプを実装する、ルーティン、プログラム、オブジェクト、コンポーネント、データストラクチャ、プロシジュアなどを含み得る。方法４００は、通信ネットワークを介してリンクする遠隔処理デバイスにより関数が実行される、分散コンピュータ環境内でも実施され得る。分散コンピュータ環境内では、コンピュータ実行可能命令は、メモリ格納デバイスを含む、ローカルとリモートとの両方のコンピュータ格納媒体に配置され得る。
【００３６】
方法４００が記載される順序は、限定として解釈されることを意図するものでは無く、記載の方法のブロックの幾つでも、方法を実装するため若しくは方法を交互に入れ替えるため、どの順序で組み合わされてもよい。更に、個別のブロックは、方法４００から削除可能であり、本明細書に記載の本発明の精神及び範囲から乖離することも無い。更に、方法は、適切なハードウエア、ソフトウエア、ファームウエア、若しくはそれらの組み合わせで実装され得る。しかしながら、方法４００は、前述のシステム２００で実装されることが想定され得る。
【００３７】
ブロック４０２では、警告を示す第１のプログラムポイントが、検証されるソフトウエアコードから選択され得る。更に、第１のプログラミングポイントは、変数のセットを含むプログラミング表現を有する。変数のセットのうちの、少なくとも一つの変数値が静的に判別されないとき、警告は生成される。
【００３８】
ブロック４０４では、少なくとも一つの変数に関する値が第１のプログラミングポイントを安全な条件に導くのか、安全で無い条件に導くのか、ユーザが判定するために、レビュー支援情報が判別され得る。
【００３９】
ブロック４０６では、判別されるレビュー支援情報は、少なくとも一つの変数に値を割り当てる、ソフトウエアコードからの、変更ポイントのセットを、含み得る。
【００４０】
ブロック４０８では、判別されるレビュー支援情報は、ソフトウエアコードからの、少なくとも一つの変数に関する第２のプログラムポイントにより示される制御条件を、含み得る。更に、変更ポイントのセットにて割り当てられる値が、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるか、ユーザに提示できないときに、制御条件が判別される。更に、制御条件は、第１のプログラムポイントについて安全な条件であるか安全で無い条件であるかについて、即ち、警告について、ユーザが判別する助けとなり得る。
【００４１】
ブロック４１０では、一つ以上の関連する変更ポイントを特定するために、変更ポイントのセットから非有用な変更ポイントを除外することにより、レビュー支援情報がユーザに提示され得る。両方とも生成される警告に対する根本的原因を示す、一つ以上の関連する変更ポイントと制御条件とを表示することにより、レビュー支援情報が更に提示され得る。提示されるレビュー支援情報は更に、ユーザにより特定される二つのプログラムポイント間で計算されるパスから、構成され得る。よって、ユーザに表示されるそれらレビュー支援情報の助けにより、ソフトウエアコードの検証を促進する。
【００４２】
ソフトウエアコードの検証を促進する方法及びシステムの実装を、構造上の特徴及び／又は方法に特有の言語で記載してきたが、当然ながら添付の請求項は、記載された具体的な特徴若しくは方法に必ずしも限定されない。寧ろ、具体的特徴及び方法は、データセットから抽出されるルール及び例外の可視化を提供するための実装の例として、開示される。
【符号の説明】
【００４３】
１０２・・・システム、２０２・・・プロセッサ、２０４・・・Ｉ／Ｏインタフェース、２０６・・・メモリ、２０８・・・モジュール、２１０・・・選択モジュール、２１２・・・判別モジュール、２１４・・・ユーザインタフェースモジュール、２１６・・・他のモジュール、２１８・・・データ、２２０・・・レビュー支援情報データベース、２２２・・・他のデータ。
【図１】
2015088191.tif 000003
【図２】
2015088191.tif 000004
【図３Ａ】
2015088191.tif 000005
【図３Ｂ】
2015088191.tif 000006
【図３Ｃ】
2015088191.tif 000007
【図３Ｄ】
2015088191.tif 000008
【図３Ｅ】
2015088191.tif 000009
【図３Ｆ】
2015088191.tif 000010
【図４】
2015088191.tif 000011
【外国語明細書】
2015088191.tif 000012
2015088191.tif 000013
2015088191.tif 000014
2015088191.tif 000015
2015088191.tif 000016
2015088191.tif 000017
2015088191.tif 000018
2015088191.tif 000019
2015088191.tif 000020
2015088191.tif 000021
2015088191.tif 000022
2015088191.tif 000023
2015088191.tif 000024
2015088191.tif 000025
2015088191.tif 000026
2015088191.tif 000027
2015088191.tif 000028
2015088191.tif 000029
2015088191.tif 000030
2015088191.tif 000031
2015088191.tif 000032
2015088191.tif 000033
2015088191.tif 000034
2015088191.tif 000035
2015088191.tif 000036
2015088191.tif 000037
2015088191.tif 000038
2015088191.tif 000039