(57)【要約】      （修正有）【課題】コンピュータプログラムのランタイム実行障害について静的解析を実施するシステム及び方法を提供する。【解決手段】システムは、識別モジュール２１２と、解析モジュール２１４と、修正モジュール２１６と、静的解析モジュール２１８とを備える。識別モジュール２１２は、コンピュータプログラムにおいて関心点を識別する。解析モジュール２１４は、変数または式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行する。修正モジュール２１６は、その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可する。静的解析モジュール２１８は、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行する。【選択図】図２
2014089700.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムのランタイム実行障害について静的解析を実施する方法であって、
前記コンピュータプログラムを静的に解析することにより、前記コンピュータプログラムにおいて、前記ランタイム実行障害の原因となる変数または式を含む関心点を識別することと、
その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数またはその式への前の代入を特定することと、
その変数の値を新しい値に変更することを許可すること、または、その式を新しい式に変更することを許可することと、
修正されたコンピュータプログラムを生成するため、その新しい値またはその新しい式に基づいて前記コンピュータプログラムを修正することと、
前記コンピュータプログラムにおいて変更を確認するため、前記修正されたコンピュータプログラムにおいて静的増分解析を実行することとを有し、
前記識別すること、前記特定すること、前記許可すること、前記コンピュータプログラムを修正すること、前記静的増分解析を実行することは、メモリに記憶されたプログラム命令を用いてプロセッサにより実行される
ことを特徴とする方法。
【請求項２】
前記値は、意図した値と等しくなく、このとき、その意図した値は、前記コンピュータプログラムを実行するのに必要な値である
請求項１に記載の方法。
【請求項３】
前記静的解析は、１つまたは複数のデータフロー解析法を用いて実行される
請求項１に記載の方法。
【請求項４】
コンピュータプログラムのランタイム実行障害を解析する静的解析を実施するシステムであって、
プロセッサと、
前記プロセッサに接続されたメモリとを備え、前記プロセッサは、前記メモリに記憶された複数のモジュールを実行することが可能であり、
その複数のモジュールは、
前記コンピュータプログラムにおいて関心点を識別する識別モジュールあって、前記関心点は、前記ランタイム実行障害の原因となる変数または式を含む識別モジュールと、
その変数またはその式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行するように構成された解析モジュールと、
その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するように構成された修正モジュールであって、これにより、修正されたコンピュータプログラムを生成するように、その新しい値またはその新しい式に基づいて前記コンピュータプログラムを修正する、修正モジュールと、
前記コンピュータプログラムにおいて変更を確認するため、前記修正されたコンピュータプログラムにおいて静的増分解析を実行するように構成された静的解析モジュールとを備える
ことを特徴とするシステム。
【請求項５】
前記値は、意図した値と等しくなく、このとき、その意図した値は、前記コンピュータプログラムを実行するのに必要な値である
請求項４に記載のシステム。
【請求項６】
前記静的解析は、１つまたは複数のデータフロー解析法を用いて実行される
請求項４に記載のシステム。
【請求項７】
コンピュータプログラムのランタイム実行障害を解析する静的解析を実施するコンピュータプログラム・プロダクトであって、
前記コンピュータプログラムを静的に解析することにより、前記コンピュータプログラムにおいて関心点を識別するためのプログラムコードであって、前記ランタイム実行障害の原因となる変数または式を含む関心点を識別するためのプログラムコードと、
その変数に関連付けられた値に応じて、その変数またはその式への前の代入を特定するためのプログラムコードと、
その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するためのプログラムコードと、
修正されたコンピュータプログラムを生成するため、その新しい値またはその新しい式に基づいて前記コンピュータプログラムを修正するためのプログラムコードと、
前記コンピュータプログラムにおいて変更を確認するため、前記修正されたコンピュータプログラムにおいて静的増分解析を実行するためのプログラムコードとを含む
ことを特徴とするコンピュータプログラム・プロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、広くは、コンピュータプログラム解析の分野に関する。具体的には、本発明は、ランタイム実行障害のソースを識別すること、及び実際のコンピュータプログラムコードを変更することなくコンピュータプログラムの静的解析を実行することに関するものである。
【背景技術】
【０００２】
ソフトウェアの正当性を得ることは、数十年にも及ぶ研究と実践にもかかわらず、困難な作業であることが判明している。利用可能なソフトウェアの多くは、欠陥を含んでいる。コンピュータプログラムの欠陥またはエラーまたはランタイム実行障害を発見することは、決して発見されないものが一部あってもよいのであれば、簡単である。すべての欠陥を発見することができない理由は、テスト中に現れたり現われなかったりする欠陥があり得ることである可能性がある。いくつかの例では、比較的頻繁に現れる欠陥が見過ごされることがある。そのような欠陥が見過ごされたままとなる理由は、それらが欠陥もしくはエラーとして明白ではないか、または、それらが深刻なものではないか、いずれかである。コンピュータプログラムの欠陥には、いくつかの可能性のあるタイプがあり、それには、論理エラー、機能エラー、ランタイムエラーなどが含まれる。ソフトウェア展開フェーズの後の段階で欠陥を修正することは、通常、経済的ではなく、より大きな経済的支援が費やされる。
【０００３】
様々なタイプのソフトウェア欠陥は、静的型付け言語用の現在利用可能なコンパイラを用いて検出することができる。欠陥は、ＳＤＬＣの様々なフェーズで検出され得る。欠陥は、コードレビュープロセスの早い段階で発見されることがあり、あるいは作成フェーズで発見されることがある。また、欠陥は、静的解析ツールによって発見されることがあり、あるいは手動コードレビューの際に発見されることがある。欠陥を発見するための最もよくあるアプローチは、ソフトウェアテストである。ソフトウェアテストによって、ほとんどの欠陥は識別されるものの、すべての欠陥を発見するためには、テストは現実的ではない。テストは、開発プロセスの終わり頃に実行可能コードに適用されるのみであるので、無用な労力を要し、さらには多くの時間がかかる。
【０００４】
ソフトウェアの欠陥を検出するための別のアプローチは、静的解析ツールを用いることである。静的解析ツールは、コードを実行することなく、ランタイムエラー、リソース・リーク、及びセキュリティの脆弱性を、静的に発見するために用いられる。静的プログラム解析は、実際にプログラムを実行することなく実施されるコンピュータソフトウェア解析である。現在の静的解析ツールは、コードにおける欠陥とレビューポイントをレポートする。そのようなツールによってレポートされた欠陥及びレビューポイントをレビューするには、かなりの時間を費やす必要がある。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
これらのアプローチのいずれかによって、いずれかの時点で欠陥がレポートされると、存在する欠陥の根本原因、及び欠陥を除去することができる方法を分析することは、手動で行われるため、かなりの時間が費やされる。欠陥を修正して、その効果を検証するためには、ユーザは、実際のソースコードで必要な変更を行って、ソースコード全体について再度テストまたは静的解析の同じプロセスを辿ることが必要となり得る。さらに、ユーザは、欠陥の存在を発見したり、あるいは実際のコードの変更によって別の欠陥が取り込まれたかどうかを分析したりしなければならない場合がある。ソースコードで行われた変更の効果を迅速にチェックするために利用できるソリューションは限られている。
【課題を解決するための手段】
【０００６】
本概要は、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステム及び方法に関するコンセプトを紹介するために提示されるものであり、それらのコンセプトは以下の詳細な説明において更に記載される。本概要は、特許請求の対象である本質的な特徴を特定するものではなく、また、特許請求の対象範囲を決定もしくは限定するものでもない。
【０００７】
一実施態様において、コンピュータプログラムのランタイム実行障害について静的解析を実施するための方法を開示する。その方法は、コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別することを含む。関心点は、ランタイム実行障害の原因となる変数または式を含む。その方法は、さらに、その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数または式への前の代入を特定することを含む。その方法は、さらに、その変数の値を新しい値に変更することを許可すること、または、その式を新しい式に変更することを許可することを含む。その方法は、さらに、修正されたコンピュータプログラムを生成するため、新しい値または新しい式に基づいてコンピュータプログラムを修正することを含む。その方法は、さらに、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行することを含む。その方法の識別するステップ、特定するステップ、許可するステップ、コンピュータプログラムを修正するステップ、静的増分解析を実行するステップは、メモリに記憶されたプログラム命令を用いてプロセッサにより実行される。
【０００８】
一実施態様において、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステムを開示する。そのシステムは、プロセッサと、プロセッサに接続されたメモリと、を備える。プロセッサは、メモリに記憶された複数のモジュールを実行することができる。これら複数のモジュールには、コンピュータプログラムにおいて関心点を識別するように構成された識別モジュールが含まれる。関心点は、ランタイム実行障害の原因となる変数または式を含む。複数のモジュールには、その変数または式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行するように構成された解析モジュールが含まれる。複数のモジュールには、さらに、その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するように構成された修正モジュールが含まれ、これにより、修正されたコンピュータプログラムを生成するように、新しい値または新しい式に基づいてコンピュータプログラムを修正する。複数のモジュールには、さらに、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行するように構成された静的解析モジュールが含まれる。
【０００９】
一実施態様において、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのコンピュータプログラム・プロダクトを開示する。そのコンピュータプログラム・プロダクトは、コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別するためのプログラムコードを含む。関心点は、ランタイム実行障害の原因となる変数または式を含む。そのコンピュータプログラム・プロダクトは、さらに、その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数または式への前の代入を特定するためのプログラムコードを含む。そのコンピュータプログラム・プロダクトは、さらに、その変数の値を新しい値に変更することを許可するため、または、その式を新しい式に変更することを許可するためのプログラムコードを含む。そのコンピュータプログラム・プロダクトは、さらに、修正されたコンピュータプログラムを生成するため、新しい値または新しい式に基づいてコンピュータプログラムを修正するためのプログラムコードを含む。そのコンピュータプログラム・プロダクトは、さらに、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行するためのプログラムコードを含む。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステムのネットワークの実現形態を示す説明図
【図２】本発明の一実施形態によるシステムの種々のモジュールを示す説明図
【図３】本発明の一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施する方法を示すフローチャート
【図４】本発明の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート
【図５Ａ】本発明の別の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート
【図５Ｂ】本発明の別の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート
【図５Ｃ】本発明の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート
【発明を実施するための形態】
【００１１】
添付の図面を参照して、詳細な説明を記載する。図面において、参照番号の左端の桁は、その参照番号が最初に表示される図面を示している。図面全体を通して、同様の機能及び構成要素を参照するのに同一の番号を用いている。
【００１２】
コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステム及び方法について説明する。コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別する。関心点は、コンピュータプログラムのランタイム実行障害の原因となる変数または式または組み合わせを含み得る。バックワードパスを実行することにより、すなわち前の代入及び他の関与する式（複数の場合もある）を辿ることにより、ランタイム実行障害のソースを特定する。
【００１３】
その変数の値または式は、変数の定義位置または任意のプログラム位置において変更することができ、これによって、コンピュータプログラムを修正する。修正されたコンピュータプログラムにおいて静的増分解析を実行することで、コンピュータプログラムの実行におけるその変更の効果を確認する。新しい値または新しい式によりなされたコンピュータプログラムへの変更は、コンピュータプログラムの実行における変更の効果に応じて、承認または拒否することができる。
【００１４】
コンピュータプログラムのランタイム実行障害について静的解析を実施するための記載のシステム及び方法の様々な側面は、いくつもの異なるコンピューティングシステム、環境、及び／または構成で実現することができるが、以下の例示的なシステムの文脈において実施形態について説明する。
【００１５】
ここで図１を参照すると、本主題の一実施形態により、ランタイム実行障害について静的解析を実施するためのシステム１０２のネットワークの実現形態１００を示している。一実施形態において、システム１０２は、コンピュータプログラムにおいて静的解析を実施する。ランタイム障害の原因となっている可能性のある関心点が識別される。関心点における変数の前の値または関与する式（複数の場合もある）を特定するため、バックワードパス代入（バックワードパス）を実行することができる。変数の値または式は、新しい値または新しい式に変更することができる。新しい値または新しい式によるコンピュータプログラムにおいて静的増分解析を実行することで、コンピュータプログラムの実行における変更を確認する。
【００１６】
システム１０２はサーバ上に実装されるものと考えて、本主題について説明するが、システム１０２は、ラップトップコンピュータ、デスクトップコンピュータ、ノートブックコンピュータ、ワークステーション、メインフレームコンピュータ、サーバ、ネットワークサーバなど、様々なコンピュータシステムに実装することもできると認められる。なお、明らかなように、システム１０２には、以下でまとめてユーザ１０４と呼ぶ１つまたは複数のユーザ装置１０４‐１、１０４‐２、．．．１０４‐Ｎ、またはユーザ装置１０４上に常駐するアプリケーションを介して、複数のユーザがアクセスすることができる。ユーザ装置１０４の例として、限定するものではないが、ポータブルコンピュータ、パーソナルデジタルアシスタント、ハンドヘルドデバイス、ワークステーションを含むことができる。ユーザ装置１０４は、ネットワーク１０６を介してシステム１０２に通信接続される。
【００１７】
一実施形態において、ネットワーク１０６は、無線ネットワーク、有線ネットワーク、またはそれらの組み合わせとすることができる。ネットワーク１０６は、イントラネット、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、インターネットなど、様々なタイプのネットワークの１つで実現することができる。ネットワーク１０６は、専用ネットワークまたは共有ネットワークのいずれかとすることができる。共有ネットワークとは、相互に通信するために、例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）、ワイヤレスアプリケーションプロトコル（ＷＡＰ）など、様々なプロトコルを用いる様々なタイプのネットワークを接続したものを意味する。また、ネットワーク１０６は、ルータ、ブリッジ、サーバ、コンピュータ装置、記憶装置など、様々なネットワーク装置を備えることができる。
【００１８】
次に図２を参照すると、本主題の一実施形態によるシステム１０２を示している。一実施形態において、システム１０２は、少なくとも１つのプロセッサ２０２と、入力／出力（Ｉ／Ｏ）インタフェース２０４と、メモリ２０６と、を備えることができる。少なくとも１つのプロセッサ２０２は、１つまたは複数のマイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、状態機械、論理回路、及び／または演算命令に基づき信号を操作する任意のデバイスで実現することができる。少なくとも１つのプロセッサ２０２は、数ある機能の中でも特に、メモリ２０６に記憶されたコンピュータ可読命令を取り出して実行するように構成されている。
【００１９】
Ｉ／Ｏインタフェース２０４として、例えば、ウェブインタフェース、グラフィカルユーザインタフェースなど、様々なソフトウェア及びハードウェア・インタフェースを含むことができる。Ｉ／Ｏインタフェース２０４は、システム１０２がユーザと直接またはクライアント装置１０４を介して対話することを可能にすることができる。さらに、Ｉ／Ｏインタフェース２０４は、システム１０２がウェブサーバ及び外部データサーバ（図示せず）といった他のコンピュータ装置と通信することを可能にすることができる。Ｉ／Ｏインタフェース２０４によって、例えば、ＬＡＮ、ケーブルネットワークなどの有線ネットワークと、ＷＬＡＮ、セルラネットワーク、または衛星ネットワークなどの無線ネットワークとを含む様々なタイプのネットワーク及びプロトコルの間での多重通信を円滑にすることができる。Ｉ／Ｏインタフェース２０４は、多くのデバイスを相互に、または別のサーバに接続するため、１つ以上のポートを備えることができる。
【００２０】
メモリ２０６は、当技術分野で周知の任意のコンピュータ可読媒体を備えることができ、例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの揮発性メモリ、及び／または読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ、フラッシュメモリ、ハードディスク、光ディスク、磁気テープなどの不揮発性メモリが含まれる。メモリ２０６には、モジュール２０８とデータ２１０とを入れることができる。
【００２１】
モジュール２０８には、特定のタスクを実行するか、または特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。一実施形態において、モジュール２０８として、識別モジュール２１２、解析モジュール２１４、修正モジュール２１６、静的解析モジュール２１８、及びその他モジュール２２０を含むことができる。その他モジュール２２０には、システム１０２のアプリケーション及び機能を補助するプログラムまたはコード化された命令を含むことができる。
【００２２】
データ２３０は、数ある中でも特に、モジュール２０８のうちの１つ以上により処理、受信、生成されるデータを記憶するためのリポジトリをなすものである。また、データ２３０には、システムデータベース２３２、及びその他データ２３４を含むこともできる。その他データ２３４には、その他モジュール２２０のうちの１つ以上のモジュールの実行の結果として生成されるデータを含むことができる。
【００２３】
一実施形態において、実際のコンピュータプログラムコードを実行することなく、コンピュータプログラムにおいて静的解析が実行される。コンピュータプログラムは、そのコンピュータプログラムのランタイム実行障害の原因となる１つ以上の変数または式を含み得る。識別モジュール２１２は、ランタイム実行障害のソースを発見するため、コンピュータプログラムにおいて関心点を識別するように構成することができる。関心点は、静的解析ツールによって、または手動コードレビューの際に、またはテストフェーズにおいて、または作成フェーズにおいて、識別することができる。上記以外の他の方法によりコンピュータプログラムにおいて関心点を識別することは、当業者には明らかである。関心点は、ランタイム実行障害の原因となる変数または式を含み得る。一実施形態において、ランタイム実行障害は、コンピュータプログラムの欠陥（複数の場合もある）と同様のものであり得る。さらに、関心点は、式をなすように少なくとも２つの変数を含み得る１つ以上の式を含むことができる。
【００２４】
一実施形態において、解析モジュール２１４は、その変数または式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行するように構成することができる。静的解析は、コンピュータプログラムのランタイム実行障害の各々のソースまたはランタイム実行障害のクラスを識別することができる、ランタイム実行障害のタイプ、ランタイム実行障害のクラスに基づいて、実行することができる。一実施形態において、ランタイム実行障害は、変数の値のゼロ除算、または配列の添字が範囲外であること、または変数の値のオーバフローもしくはアンダフローに起因する場合があり、あるいは他のパラメータに起因する場合がある。ランタイム実行障害は、周知であり得る他のパラメータに起因する場合があり、それは当業者に明らかである。
【００２５】
バックワードパスを実行することによって、その変数への前の代入を特定することができる。バックワードパスによって、ユーザは、コンピュータプログラムの関心点までの変数の値を定義し得る１つ以上の宣言または定義に達することが容易となる。バックワードパスを実行することによって、変数または他の関与する式（複数の場合もある）の前の定義において、ランタイム障害のソースを特定することができる。ランタイム障害は、変数への代入によって定められ得る値が意図した値に等しくないことに起因する場合がある。一実施形態において、意図した値は、コンピュータプログラムの実行に必要な値とすることができる。その変数または式は、それぞれ、意図した値または意図した式に等しくない可能性がある値または式を含むことがある。意図したものではない等しくない値または等しくない式は、ランタイム障害のソースとなり得る。一実施形態において、バックワードパスによって、プログラムのエントリポイント関数から関心点までの複数のパスを示すこと、及び、辿るパスを選択することを、容易とすることができる。
【００２６】
一実施形態において、ランタイム障害の原因となる変数または式への前の代入を特定したら、その変数の値を変更することができる。修正モジュール２１６は、ユーザがその変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するように構成することができ、これによって、修正されたコンピュータプログラムを生成するように、新しい値または新しい式に基づいてコンピュータプログラムを修正する。システム１０２によって、ユーザが、ランタイム実行障害の原因となる値または式を、その変数または式の定義において、新しい値または新しい式に変更することを容易とすることができる。
【００２７】
一実施形態において、静的解析モジュール２１８は、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行するように構成することができる。一実施形態において、システム１０２は、ユーザが、コンピュータプログラムにおける変更の効果を分析するため、フォワードパス代入（フォワードパス）を実行することを可能にすることができる。フォワードパスによって、ユーザは、コンピュータプログラムにおけるその変数の１つ以上の次の使用または代入に達することが容易となる。一実施形態において、ユーザは、コンピュータプログラムにおいて変数の値または式をそれぞれ新しい値または新しい式に変更した結果であり得る１つ以上の可能性のある解を提示されることがある。
【００２８】
一実施形態において、フォワードパスは、その変数の関心点から次の使用を求めて実行することができる。また、フォワードパスを実行することで、ユーザは、変数の定義から次のその変数への代入であって、コンピュータプログラムにおいてその変数の値を変更するためのものであり得る代入に達することが容易となる。変数の定義から次のその変数への代入が、ランタイム障害の原因となる値を含むことがあり、その場合、ユーザは、やはり、コンピュータプログラムにおいてその変数の値を新しい値に変更することができる。
【００２９】
一実施形態において、システム１０２は、ユーザが、コンピュータプログラムにおいて新しい値または新しい式によりなされた変更の効果を検証することを可能にすることができる。当業者には明らかである１つ以上のデータフロー解析法を用いて、コンピュータプログラムにおいて静的解析を実行することができる。
【００３０】
システム１０２によりコンピュータプログラムにおいて実行される静的解析は、コンピュータプログラムのデバッグとは異なる。コンピュータプログラムをデバッグするプロセスでは、コンピュータプログラムのある特定の部分と、コンピュータプログラムへの厳密な入力とが必要となり得る。さらに、そのコンピュータプログラムと、コンピュータプログラムコードへの厳密な入力は、コンピュータプログラムにおいて変更の効果を確認するために実行されることがある。システム１０２は、静的解析を実行することで、ランタイム実行障害のソースを特定することにより、ランタイム実行障害を解析する。システム１０２は、ユーザがランタイム実行障害の原因となる値または式を修正することを許可し、コンピュータプログラムにおいて変更の効果を分析する。一実施形態において、ユーザは、コンピュータプログラムのランタイム実行に応じて、コンピュータプログラムの変更の効果を承認または拒否することができる。
【００３１】
一実施形態において、システム１０２により、関心点に関して、コンピュータプログラムの折り畳み表示を提供することを容易とすることができる。関心点に関する折り畳み表示は、関心点に影響を与えている可能性のあるコンピュータプログラム部分とすることができる。折り畳み表示によって、ユーザは、コンピュータプログラムにおいてランタイム実行障害のソースに達することが容易となる。一実施形態では、実際のコンピュータプログラムコードにおいて変数が複数のパスによる複数の値を持つ場合に、システム１０２は、その変数が生成された前のその変数への厳密な代入を視覚化することができる。
【００３２】
次に図３を参照すると、本主題の一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するための方法３００を示している。方法３００について、コンピュータ実行可能命令という一般的文脈において説明することができる。一般に、コンピュータ実行可能命令として、特定の機能を実行するか、または特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造、プロシージャ、モジュール、関数などを含むことができる。また、方法３００は、通信ネットワークを介して接続された遠隔処理装置によって種々の機能を実行する分散コンピューティング環境において実施することもできる。分散コンピューティング環境では、コンピュータ実行可能命令は、記憶装置を含むローカルとリモートの両方のコンピュータ記憶媒体に置くことができる。
【００３３】
方法３００について記載する順序は、限定と解釈されるものではなく、記載する方法のブロックのうち任意の数のブロックを任意の順序で組み合わせて、本方法３００または他の方法を実現することができる。また、個々のブロックは、本明細書に記載の主題の趣旨及び範囲から逸脱することなく、方法３００から削除することができる。さらに、本方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせで実現することができる。しかしながら、以下で記載する実施形態では、説明を簡単にするため、方法３００は上記のシステム１０２で実施されるものと考えることができる。
【００３４】
ブロック３０２において、コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別することができる。関心点は、ランタイム実行障害の原因となる変数または式を含み得る。一実施形態において、関心点は、識別モジュール２１２により識別することができる。
【００３５】
ブロック３０４において、その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数または他の関与する式（複数の場合もある）への前の代入を特定することができる。一実施形態において、この解析は、解析モジュール２１４により実行することができる。
【００３６】
ブロック３０６では、コンピュータプログラムにおいて、その変数の値またはその式を新しい値または新しい式に変更することができる。さらに、ブロック３０８において、修正されたコンピュータプログラムを生成するため、新しい値または新しい式に基づいてコンピュータプログラムを修正することができる。一実施形態において、コンピュータプログラムは、修正モジュール２１６により修正することができる。
【００３７】
ブロック３１０では、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行することができる。この静的解析は、静的解析モジュール２１８により実行することができる。
【００３８】
次に図４を参照すると、本主題の例示的な一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するための、限定するものではない例示的な方法４００を示している。ステップ４０４において、変数‘ａ’、‘ｂ’、‘ｃ’を初期化する。変数‘ｂ’には値２を、‘ｃ’には０を、それぞれ代入することができる。ステップ４０６において、変数‘ｂ’の値が１に等しいかどうかチェックすることができる。変数‘ｂ’の値が１に等しい場合は、ステップ４０８において、変数‘ｂ’の値を変数‘ａ’に代入する。変数‘ｂ’の値が１に等しくない場合は、ステップ４１０において、変数‘ｃ’の値を変数‘ａ’に代入することができる。ステップ４１２において、変数‘ｂ’の値を変数‘ａ’の値で除算して得られる値を、変数‘ｃ’に代入する。
【００３９】
関心点は、識別モジュール２１２によって識別することができる。コンピュータプログラムにおける関心点は、ステップ４１２における‘ａ’であると考えられ、この場合、
ステップ４１２において‘ａ’の値が‘０’であることで、ランタイム実行障害の原因となる。コンピュータプログラムにおいて静的解析を実行することで、バックワードパスを用いて、関心点において変数の値が‘０’となるソースをチェックする。解析モジュール２１４により静的解析を実行することによって、その変数または他の関与する式（複数の場合もある）への前の代入を特定することができる。関心点すなわちステップ４１２から後戻りした前の定義において、変数‘ａ’がハイライト表示される。‘ａ’の値は、ステップ４１０で定義されているので、ステップ４１０をハイライト表示することができる。また、ステップ４１０で定義されている式‘ａ＝ｃ’を、次の関心点とすることができる。‘ｃ’の前の定義すなわちステップ４０４が、ハイライト表示される。この解析によって、ランタイム実行障害のソースは、ステップ４０４の‘ｃ＝０’と特定することができる。ユーザは、ステップ４０４における‘ｃ’の値を変更して、コンピュータプログラムの実行における変更の効果をチェックすることができる。一実施形態において、システム１０２は、ユーザが、ランタイム実行障害は値のゼロ除算に起因するとする手助けをすることができる。
【００４０】
システム１０２は、変数‘ａ’に関して、コンピュータプログラムの折り畳み表示をステップ４１２で提供することができる。また、ユーザは、折り畳み表示を選択して、または選択することなく、コンピュータプログラムにおいてバックワードパスを実行することにより、ランタイム実行障害のソースを特定することができる。
【００４１】
さらに、修正モジュール２１６によって、新しい値または新しい式に基づいてコンピュータプログラムを修正することで、修正されたコンピュータプログラムを生成することができる。上記の例では、ユーザは、ステップ４０４における変数‘ｃ’の値を１に修正すると考えられる。静的解析モジュール２１８により、修正されたコンピュータプログラムにおいて静的増分解析を実行することで、コンピュータプログラムにおいて変更を確認することができる。フォワードパスを実行することにより、変数‘ｃ’の次の使用すなわちステップ４１０をハイライト表示することができる。変数‘ａ’の値は１に変更され得る。さらに、フォワードパスを実行すると、変数‘ａ’の次の使用すなわちステップ４１２をハイライト表示することができる。ステップ４１２での‘ａ’の値が１に変更されたことによって、関心点での値は修正されている。ユーザは、修正されたコンピュータプログラムにおける変更の効果に応じて、コンピュータプログラムの変更を承認または拒否することができる。システム１０２は、変数‘ａ’に関して、コンピュータプログラムの折り畳み表示をステップ４１２で提供することができる。
【００４２】
次に図５Ａ、図５Ｂ、及び図５Ｃを参照すると、本主題の別の例示的な一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するための、限定するものではない例示的な方法５００を示している。ステップ５０４において、変数‘ａ’、‘ｂ’、‘ｃ’、‘ｄ’、及びｒｅｓｕｌｔを初期化することができる。さらに、ステップ５０６において、関数ｇｅｔＶａｌｕｅ（）によって返される値を、変数‘ｂ’に代入することができる。ステップ５０８において、関数ｆｏｏ（ｄ）によって返される値を、変数‘ｄ’に代入することができる。さらに、ステップ５１０において、変数‘ｄ’の値が１に等しいかどうかチェックすることができる。変数‘ｄ’の値が１に等しい場合は、ステップ５１２において、変数‘ｄ’の値を１でインクリメントすることによる値を変数‘ｄ’に代入することができる。ステップ５１４において、変数‘ｂ’の値を評価することにより、スイッチ文を起動する。ステップ５１６において、変数‘ｂ’の値が１に等しいかどうかチェックすることができる。変数‘ｂ’の値が１に等しい場合には、ステップ５１８及び５２０を実行する。ステップ５１８では、１でインクリメントされた変数‘ｃ’の値を、変数‘ａ’に代入することができる。さらに、ステップ５２０で、変数‘ａ’の値を、変数‘ｄ’に代入することができる。
【００４３】
また、ステップ５２２において、変数‘ｂ’の値が２に等しいかどうかチェックすることができる。変数‘ｂ’の値が２に等しい場合には、ステップ５２４及び５２６を実行する。ステップ５２４では、変数‘ｄ’の値を１でインクリメントすることによる値を、変数‘ｄ’に代入することができる。ステップ５２６で、変数‘ｃ’の値を、変数‘ａ’に代入することができる。
【００４４】
ステップ５２８において、変数‘ｂ’の値が３に等しいかどうかチェックすることができる。変数‘ｂ’の値が３に等しい場合には、ステップ５３０及び５３２を実行する。ステップ５３０では、１だけ減少させた‘ｄ’の値を、変数‘ｄ’に代入することができる。ステップ５３２では、１だけ減少させた変数‘ｃ’の値を、変数‘ａ’に代入する。ステップ５３４において、変数‘ｂ’の値を変数‘ａ’の値で除算することにより得られる値を、変数ｒｅｓｕｌｔに代入する。
【００４５】
さらに、図５Ｃを参照すると、関数ｉｎｔ ｇｅｔＶａｌｕｅ（）及びｉｎｔ ｆｏｏ（ｉｎｔ ａ）の実行について開示している。ステップ５３８において、変数‘ａ’、‘ｂ’、‘ｃ’を初期化する。ステップ５４０において、変数‘ａ’の値が変数‘ｂ’の値に等しいかどうかチェックすることができる。変数‘ａ’の値が変数‘ｂ’の値に等しい場合は、ステップ５４２において、変数‘ｃ’の値を１でインクリメントした値を、変数‘ｃ’の値に代入する。変数‘ａ’の値が変数‘ｂ’の値に等しくない場合は、ステップ５４４において、変数‘ｃ’の値を１だけ減少させた値を、変数‘ｃ’の値に代入することができる。ステップ５４６において、変数‘ａ’の値と変数‘ｂ’の値を加算して得られる値を返すことができる。
【００４６】
さらに、関数ｉｎｔ ｆｏｏ（ｉｎｔ ａ）の実行について説明する。ステップ５５０において、変数‘ｂ’を初期化することができる。ステップ５５２において、変数‘ａ’の値から変数‘ｂ’の値を減算して得られる値を返す。
【００４７】
例について説明するため、以下の値、ｓｈｏｒｔ ａ＝５、ｂ，ｒｅｓｕｌｔ＝０、ｓｈｏｒｔ ｃ＝１、ｉｎｔ ｄ＝１、について考えることができる。識別モジュール２１２によって、関心点を識別することができる。静的解析を実行することにより、関心点はステップ５３４であると識別することができる。システム１０２は、ステップ５３４におけるゼロ除算によるランタイム実行障害を提示することができ、この場合、スイッチ文を用いて制御がステップ５２８で規定されるときに、変数‘ａ’の値がゼロとなり得る。一実施形態において、ユーザは、ステップ５３４に関して、折り畳み表示でコンピュータプログラムを可視化することができる。
【００４８】
ランタイム障害のソースを特定するため、バックワードパスを実行することができる。解析モジュール２１４によって静的解析を実行することにより、その変数及び他の関与する式（複数の場合もある）への前の代入を特定することができる。システム１０２は、変数の前の定義をハイライト表示することにより、可能性のある解についての情報をユーザに提示することができ、例えば、ステップ５１８における変数は値２となる‘ａ’であり、ステップ５２６における変数は値１となる式‘ａ＝ｃ’を含み、ステップ５３２における変数は値０となる式‘ａ＝ｃ−１’を含み、そして、ステップ５３４における変数‘ａ’は、値５、２、１、０を含む。ステップ５３２で代入される値は‘０’であり、ランタイム実行障害のソースはステップ５３２であると特定することができる。
【００４９】
システム１０２は、ステップ５５２に示すように、可能性のある解についての情報をユーザに提示することができる。例えば、システム１０２は、変数‘ｃ’の値を２に変更するための情報をユーザに提示することができる。さらに、修正されたコンピュータプログラムにおける変更の効果を検証ため、フォワードパスを実行することができ、修正されたコンピュータプログラムにおいて静的増分解析が実行される。変更の結果、ステップ５０４における変数‘ａ’の値は５であり、ステップ５１８における変数‘ａ’の値は３であり、ステップ５２６における変数‘ａ’の値は２であり、ステップ５３２における変数‘ａ’の値は１であり、そして、ステップ５３４における変数‘ａ’の値は、５、３、２、１、となり得る。システム１０２は、ステップ５３２における変数の値が修正されていることを提示する。修正モジュール２１６により、新しい値または新しい式に基づいてコンピュータプログラムを修正することで、修正されたコンピュータプログラムを生成することができる。ユーザは、ステップ５３２におけるコンピュータプログラムの変更を承認または拒否することができる。
【００５０】
さらに、システム１０２は、代替解として、変数の値を変更するための情報をユーザに提示することができる。ユーザが、修正されたコンピュータプログラムの効果、すなわち変数‘ｃ’の値を２とすることを拒否する場合は、元のコンピュータプログラムをユーザに提示することができる。システム１０２は、ステップ５３２における式を‘ａ＝ｃ＋１’に変更するための情報をユーザに提示することができる。静的解析モジュール２１８により、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行することができる。ステップ５３２において修正された式の効果は、システム１０２によって検証することができる。変更の結果、ステップ５０４における変数‘ａ’の値は５であり、ステップ５１８における変数‘ａ’の値は２であり、ステップ５２６における変数‘ａ’の値は１であり、ステップ５３２における変数‘ａ’の値は２であり、そして、ステップ５３４における変数の値は、５、２、１、となり得る。システム１０２は、ランタイム実行障害が解決されていることを提示することができる。ユーザは、ステップ５３２におけるコンピュータプログラムの変更を承認または拒否することができる。
【００５１】
コンピュータプログラムのランタイム実行障害について静的解析を実施するための方法及びシステムの実施形態について、構造的特徴及び／または方法に特化した表現で説明したが、当然のことながら、添付の請求項は、記載した特定の特徴または方法に必ずしも限定されない。むしろ、具体的な特徴及び方法は、コンピュータプログラムのランタイム実行障害について静的解析を実施するための実施形態の例として開示している。
【図１】
2014089700.tif 000003
【図２】
2014089700.tif 000004
【図３】
2014089700.tif 000005
【図４】
2014089700.tif 000006
【図５Ａ】
2014089700.tif 000007
【図５Ｂ】
2014089700.tif 000008
【図５Ｃ】
2014089700.tif 000009
【外国語明細書】
2014089700000001.pdf