(57)【要約】  静的コード分析および動的コード分析が、シームレスかつ反復的に実施される。ソフトウェア分析ツールが、動的分析と静的分析の結果を統合し、前の１つまたは複数の分析からの結果を反復的に使用して、現在の分析を増強する。デバッグプロセス中に、実行時に収集された情報が静的コード分析結果と統合される。この情報は、生成されて、テストおよびデバッグプロセスの結果の一部として記憶される。記憶された情報は、改善された分析結果を提供するために後で利用される。このソフトウェア分析ツールは、ソフトウェア開発者が静的分析と動的分析とを別々に実施する必要をなくす。
2009540464.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを分析する方法であって、
ソフトウェアエンティティを動的に分析すること、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの一方に対する前の静的分析の結果を示す少なくとも１つの静的メトリクスを取り出すこと、
前記取り出された少なくとも１つの静的メトリクスを前記ソフトウェアエンティティの前記動的分析に統合すること、および
前記取り出された少なくとも１つの静的メトリクスを前記ソフトウェアエンティティの前記動的分析に統合することによって得られる少なくとも１つの増強されたメトリクスを記憶することを含むことを特徴とする方法。
【請求項２】
前記統合することの前に、前記ソフトウェアエンティティの前記動的分析からの少なくとも１つの動的メトリクスを記憶することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記少なくとも１つの動的メトリクスは、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の動的分析と、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の静的分析と
のうちの少なくとも一方と共に使用するために記憶されることを特徴とする請求項２に記載の方法。
【請求項４】
前記少なくとも１つの増強されたメトリクスは、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の動的分析と、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の静的分析と
のうちの少なくとも一方と共に使用するために記憶されることを特徴とする請求項１に記載の方法。
【請求項５】
動的メトリクスは、前記ソフトウェアエンティティの一部が前記ソフトウェアエンティティの実行中にどのくらい頻繁に実行されるかと、前記ソフトウェアエンティティ中のパラメータの値の範囲と、前記ソフトウェアエンティティの一部の実行によって利用されるメモリの量と、前記ソフトウェアエンティティの一部を実行するための実行時間とのうちの少なくとも１つを含むことを特徴とする請求項１に記載の方法。
【請求項６】
静的メトリクスは、前記ソフトウェアエンティティ中のコードの行数と、サイクロマティック複雑度と、前記ソフトウェアエンティティ中のパラメータの値の範囲とのうちの少なくとも１つを含むことを特徴とする請求項１に記載の方法。
【請求項７】
ソフトウェアを分析する方法であって、
ソフトウェアエンティティを静的に分析すること、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの一方に対する前の動的分析の結果を示す少なくとも１つの動的メトリクスを取り出すこと、
前記取り出された少なくとも１つの動的メトリクスを前記ソフトウェアエンティティの前記静的分析に統合すること、および
前記取り出された少なくとも１つの動的メトリクスを前記ソフトウェアエンティティの前記静的分析に統合することによって得られる少なくとも１つの増強されたメトリクスを記憶することを含むことを特徴とする方法。
【請求項８】
前記統合することの前に、前記ソフトウェアエンティティの前記静的分析の結果からの少なくとも１つの静的メトリクスを記憶することをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記少なくとも１つの静的メトリクスは、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の動的分析と、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の静的分析と
のうちの少なくとも一方と共に使用するために記憶されることを特徴とする請求項８に記載の方法。
【請求項１０】
前記少なくとも１つの増強されたメトリクスは、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の動的分析と、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の静的分析と
のうちの少なくとも一方と共に使用するために記憶されることを特徴とする請求項７に記載の方法。
【請求項１１】
動的メトリクスは、前記ソフトウェアエンティティの一部が前記ソフトウェアエンティティの実行中にどのくらい頻繁に実行されるかと、前記ソフトウェアエンティティ中のパラメータの値の範囲と、前記ソフトウェアエンティティの一部の実行によって利用されるメモリの量と、前記ソフトウェアエンティティの一部を実行するための実行時間とのうちの少なくとも１つを含むことを特徴とする請求項７に記載の方法。
【請求項１２】
静的メトリクスは、前記ソフトウェアエンティティ中のコードの行数と、サイクロマティック複雑度と、前記ソフトウェアエンティティ中のパラメータの値の範囲とのうちの少なくとも１つを含むことを特徴とする請求項７に記載の方法。
【請求項１３】
ソフトウェアを分析するためのシステムであって、
ソフトウェアエンティティを動的に分析し、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの一方に対する前の静的分析の結果を示す少なくとも１つの静的メトリクスをメモリ部から取り出し、
前記取り出された少なくとも１つの静的メトリクスを前記ソフトウェアエンティティの前記動的分析に統合し、
前記取り出された少なくとも１つの静的メトリクスを前記ソフトウェアエンティティの前記動的分析に統合することによって得られる少なくとも１つの増強された動的メトリクスを前記メモリ部に記憶する処理部と、
前記前の静的分析の前記結果を示す前記少なくとも１つの静的メトリクスを記憶し、
前記少なくとも１つの増強された動的メトリクスを記憶する前記メモリ部とを備えることを特徴とするシステム。
【請求項１４】
前記処理部はさらに、
前記ソフトウェアエンティティを静的に分析し、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの一方に対する前の動的分析の結果を示す少なくとも１つの動的メトリクスを前記メモリ部から取り出し、
前記取り出された少なくとも１つの動的メトリクスを前記ソフトウェアエンティティの前記静的分析に統合し、
前記取り出された少なくとも１つの動的メトリクスを前記ソフトウェアエンティティの前記静的分析に統合することによって得られる少なくとも１つの増強された静的メトリクスを前記メモリ部に記憶し、
前記メモリ部はさらに、
前記前の動的分析の前記結果を示す前記少なくとも１つの動的メトリクスを記憶し、
前記少なくとも１つの増強された静的メトリクスを記憶することを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記処理部はさらに、
前記取り出された少なくとも１つの動的メトリクスを前記静的分析に統合する前の、前記ソフトウェアエンティティの前記静的分析の結果からの少なくとも１つの静的メトリクスと、
前記取り出された少なくとも１つの静的メトリクスを前記動的分析に統合する前の、前記ソフトウェアエンティティの前記動的分析の結果からの少なくとも１つの動的メトリクスと
のうちの少なくとも一方を前記メモリ部に記憶することを特徴とする請求項１４に記載のシステム。
【請求項１６】
前記記憶される静的メトリクス、前記記憶される動的メトリクス、前記記憶される増強された静的メトリクス、および前記記憶される増強された動的メトリクスのうちの少なくとも１つは、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の動的分析と、
前記ソフトウェアエンティティと前記ソフトウェアエンティティのバージョンとのうちの少なくとも一方に対する後続の静的分析と
のうちの少なくとも一方と共に使用するために記憶されることを特徴とする請求項１５に記載のシステム。
【請求項１７】
静的メトリクスは、前記ソフトウェアエンティティ中のコードの行数と、サイクロマティック複雑度と、前記ソフトウェアエンティティ中のパラメータの値の範囲とのうちの少なくとも１つを含むことを特徴とする請求項１３に記載のシステム。
【請求項１８】
動的メトリクスは、前記ソフトウェアエンティティの一部が前記ソフトウェアエンティティの実行中にどのくらい頻繁に実行されるかと、前記ソフトウェアエンティティ中のパラメータの値の範囲と、前記ソフトウェアエンティティの一部の実行によって利用されるメモリの量と、前記ソフトウェアエンティティの一部を実行するための実行時間とのうちの少なくとも１つを含むことを特徴とする請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、コンピューティングシステムに関し、より具体的には、コンピューティングシステムのためのソフトウェアの開発に関する。
【背景技術】
【０００２】
典型的なソフトウェア分析ツールは、ソフトウェアコードを静的に、また動的に、独立して分析する能力を提供する。静的分析は、データフロー分析やバリュートラッキング（ｖａｌｕｅ  ｔｒａｃｋｉｎｇ）などの技法を介して、コードを実際に実行することなくそのコード中の正当性問題を識別することができる。しかし、静的分析は、コンパイルされたバイナリコードの静的検査を介して入手可能な情報によって制限される。動的分析は、たとえば、タイミングに関する情報、およびメモリがどのくらい割り振られるかに関する情報を提供することができる。ソフトウェア開発者はしばしば、ソフトウェア開発プロセス中に静的分析と動的分析とを独立して実施し、一方のタイプの分析の結果を他方に適用しようとする。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明の目的とするところは、反復的な動的および静的ソフトウェア分析を提供することにある。
【課題を解決するための手段】
【０００４】
以下に、「発明を実施するための最良の形態」でさらに後述する概念の精選を、単純化した形で紹介する。この説明は、本発明の主題の鍵となる特徴または本質的な特徴を識別することを意図するものではなく、また、本発明の主題の範囲を限定するために使用されることを意図するものでもない。
【０００５】
ソフトウェア分析ツールが、静的と動的の両方のコード分析をシームレスに提供する。コードを実行することによって得られた情報が、収集され、発行され、新しい分析を可能にするため、および実行時の挙動に基づいておそらくは意味のあるセットに分析結果の焦点を合わせるために静的分析の間に利用される。このソフトウェア分析ツールは、動的分析と静的分析の結果を統合し、前の１つまたは複数の分析からの結果を反復的に利用して、現在の分析を増強する。このソフトウェア分析ツールは、ソフトウェア開発者が静的分析と動的分析とを別々に実施する必要をなくす。例示的な一実施形態では、デバッグプロセス中に、分析対象であるコードが実行される。前の静的分析および動的分析からの結果が統合されて、デバッグプロセスが増強される。デバッグプロセスの結果は、静的分析結果と動的分析結果の両方を示す。
【０００６】
前述の概要ならびに以下の詳細な説明は、添付の図面と共に読めば、よりよく理解されるだろう。結合された反復的な動的および静的ソフトウェア分析を例証する目的で、図面には、その例示的な構造を示す。しかし、反復的な動的および静的ソフトウェア分析は、開示する特定の方法および手段には限定されない。
【発明を実施するための最良の形態】
【０００７】
デバッグプロセス中に、静的ソフトウェア分析結果と動的ソフトウェア分析結果が統合される。実行時に収集された情報が、静的コード分析結果と統合される。この情報は、生成されて、例示的な一実施形態ではテストおよびデバッグプロセスの付帯結果としてディスクに維持される。記憶された情報は、改善された分析結果を提供するために後で利用される。
【０００８】
例示的な一実施形態では、ビルド時に静的分析が呼び出される。静的分析は、その初期状態では、ノイズを最小限に抑えるように調節される。すなわち、情報が確実性の高い結果を保証するには十分に揃っていない（またはまったくない）場合には、分析は行われない。コードをビルドした際の付帯結果として、アプリケーションは、いくつかのメトリクスを実行時に収集するように装備される。この情報は、デバッグのシナリオを含めてユーザがアプリケーションを実行するときはいつでも、動的に収集される。この例示的な実施形態では、実行時に、いくらかのデータが動的に収集されて記憶装置に維持される。後続の静的分析の間、この情報は回復されて、静的分析結果を低ノイズかつ高価値のメッセージのセットに精緻化するのに使用され、かつ／あるいは、動的に収集されたメトリクスが利用可能な場合にのみ可能な、静的に行われる、完全に新しい分析を可能にするのに使用される。
【０００９】
たとえば、ある例示的なシナリオでは、静的分析ツールは、オブジェクトコード中の、またはマネージド分析の場合にはＩＬ（中間言語）中の無効性を検出するチェックを含む。このチェックは、デフォルトではイネーブルでない。というのは、無効性のパターンは何百もの個所で検出される可能性が高く、大多数の場合、いずれかの個別の違反を解決することは、結果として意味のある性能利得にならず、したがって修復する時間に見合う価値がないか、あるいはコード欠陥を招くリスクが増大するからである。この例示的なシナリオでは、ビルド時に、コードが、個々のメソッドまたは関数に対して行われる呼出し（call）の回数を記録するように装備される。ユーザはコードを実行し、これらのメトリクスが収集される。後続の分析動作の間、前述の無効性検出チェックがメソッドに対して実施される。静的分析段階は、リポジトリ中で分析ターゲットメソッドを捜し、この分析ターゲットメソッドがアプリケーション中の他のメソッド／関数と比較して頻繁に呼び出されることを指摘する。静的分析チェックは、この違反をユーザに対して明るみにする。というのは、ここで、この問題に対処すれば意味のある性能利得になる可能性が高いことが決定されているからである。
【００１０】
別の例示的なシナリオでは、呼出し場所に対して興味深いものを検証するチェックが存在する。たとえば、このチェックは、呼出し場所がパラメータをデリファレンス（de-reference）することになるかどうか判定することを試みることができる。そうである場合は、静的チェッカは、ヌルである可能性のあるアイテムをこの呼出し場所におそらく渡す（これは実行時にクラッシュという結果になる可能性がある）ユーザに、警告することができる。このチェックは、仮想呼出し場所を分析することはできない。というのは、呼出し場所はメソッドの仮想宣言を参照するだけだからである。すなわち、ＩＬは、定義への一般化された参照を含み、定義を提供するどんな特定の具体的実装も参照しない。実行中に、仮想メソッドを実装する特定のサブクラスが検出され、ＩＬ中に存在する一般的な参照と関連付けられる。後続の静的分析の間、前述のチェックは、一般的な呼出し場所におそらく関連付けられていた特定の実装を取り出し、この特定の実装をそのチェックにかけることができる。
【００１１】
図１は、反復的な動的および静的ソフトウェア分析を提供するための例示的なプロセスの流れ図である。例示的な一実施形態では、図１に示すように、動的ソフトウェア分析が実施され、動的分析の結果が、前に記憶された静的分析結果で増強される。ステップ１２で、動的ソフトウェア分析が開始される。ステップ１４で、動的ソフトウェア分析（ＤＡ）が実行される。動的ソフトウェア分析は、任意の適切な動的ソフトウェア分析ツールによって実施することができる。たとえば、動的分析は、ＭＩＣＲＯＳＯＦＴ（登録商標）ＶＩＳＵＡＬ  ＳＴＵＤＩＯなどのソフトウェア開発ツールを利用して実施することができる。動的ソフトウェア分析の間、分析対象であるソフトウェアまたはその一部が実行され、実行時分析が実施される。動的ソフトウェア分析からの結果は、たとえば、操作の実施および／または分析対象であるソフトウェアの一部（セグメント）の実行に必要とされた時間量など、タイミング情報を含むことができる。例示的な動的ソフトウェア分析メトリクスは、呼出しが実行される頻度、関数の実行に必要とされる経験的時間、仮想呼出し場所に関連付けられたメソッドの定義、および、実行の際に呼出しがメモリを割り振るかどうかを含む。
【００１２】
例示的な一実施形態では、呼出しが実行される頻度を用いて、高確実性であり頻繁に実施する静的分析性能チェックが精緻化される。この場合、頻繁に呼び出される分析ターゲットのセットに結果を絞り込むことが有利である。頻繁に呼び出されないアイテムのための修復時間は、利益を保証しない。というのは、インクリメンタルな性能利得が小さいことになるからである。コード変更は、回帰（regression）のリスクも招く。これは、最も意味のあるセットに結果の焦点を合わせるもう１つの理由である。
【００１３】
ある例示的なシナリオでは、ユーザが、メソッドまたは関数が性能の影響を受けやすいと指定したい場合がある。すなわち、メソッドまたは呼出しは、ある時間しきい値内で実行されることが望まれる。関数を実行するための実際の経験的時間を利用して、実行時に実行時間がこのしきい値を超えるかどうか判定することができる。そして、結果を後続の静的分析実行において発行することができる。静的分析はまた、どの呼出し場所（call site）が、実行において費やされた時間の原因であったかを示すことができる。
【００１４】
特定の呼出し場所実装へのアクセスを必要とする静的分析は、仮想呼出し場所に対して作用することはできない。仮想呼出し場所に関連付けられた特定の具体的なメソッド定義を決定し、これを使用して静的分析を増強することができる。仮想呼出し場所にバインドされた特定のサブクラスなどの情報を静的分析に提供することができる。
【００１５】
ある例示的なシナリオでは、実行中にメモリが割り振られるかどうかを知ることが望まれる場合がある。メモリ割振りが行われるかどうかは、静的に決定するのが困難であり場合によっては不可能である可能性がある。たとえば、仮想メソッドへの呼出しの結果として生じるメモリ割振りは、静的分析を介して決定することはできない。この情報は、動的に収集して、後続の静的分析に提供することができる。
【００１６】
ステップ１６で、前の動的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。メトリクスは、動的分析されている同じソフトウェアエンティティ、または分析されているソフトウェアエンティティのバージョンに関するものとすることができる。たとえば、コード開発中に、ソフトウェアコンポーネントの第１のバージョンを動的分析することができ、それから得られる選択された（またはすべての）メトリクスをメモリに記憶することができる。その後、ソフトウェアモジュールに変更を加えることができ、その結果、ソフトウェアモジュールの別のバージョンが得られる。ソフトウェアの後続バージョンが動的分析されたとき（たとえばステップ１４）、ソフトウェアモジュールの前バージョンに対する動的分析からのメトリクスが記憶されていると判定することができる（たとえばステップ１６）。前の動的分析からのメトリクスは、増強された、かつ／または増強されていない前の動的分析からのメトリクスを含むことができる。すなわち、前の動的分析からのメトリクスは、静的分析によって増強された動的分析からのメトリクス、前の動的分析によって増強された動的分析からのメトリクス、増強されていない動的分析からのメトリクス、またはこれらの組合せを含むことができる。
【００１７】
例示的な一実施形態では、静的分析は、それら自体は静的分析されていない他のバイナリ中に呼び出すコードに対して行われる。しかし、これらの依存関係について動的に獲得されたデータが存在する場合は、ターゲットバイナリの静的分析は、この情報を利用してそのクライアント使用を検証する。
【００１８】
同じソフトウェアエンティティまたはそのバージョンに対する前の動的ソフトウェア分析からのメトリクスが記憶されている場合は（ステップ１６）、ステップ１８で、記憶されているメトリクスが取り出される。メトリクスは、たとえば磁気記憶装置、光学記憶装置、ハードディスク、半導体メモリ、フラッシュメモリなど、任意の適切な記憶媒体に記憶することができる。ステップ２０で、取り出されたメトリクスが現在の動的分析と統合されて、現在の分析が増強される。
【００１９】
例示的な一実施形態では、効率のために、静的分析に基づいて実行時収集を制限するための機構が実装される。たとえば、ユーザは、特定のタイプを、またはあるタイプ中の特定のメソッドを分析することに関心があることを示すことができる。実行時には、静的分析されることになるターゲットから実行中のコードに到達可能であることが証明されない限り、動的データ収集を完全に無効にすることができる。
【００２０】
ステップ２２で、増強された結果からのメトリクスが記憶され、プロセスはステップ２４に進む。たとえば、コード開発中に、ソフトウェアエンティティの第１のバージョンは、第１のバージョンが動的分析された時点では存在しないネットワーク場所への呼出しを含むことができる。したがって、この場所への呼出しは仮想呼出しとして扱われることになり、第１のバージョンの動的分析の間、タイミングやメモリ割振りなどのメトリクスが推定されることになる。その後、この場所が完成されるものとすることができ、このソフトウェアエンティティの後続の動的分析は、実際のネットワーク場所への呼出しに関連するタイミングやメモリ割振りなどのメトリクスを含むことになる。
【００２１】
同じソフトウェアエンティティまたはそのバージョンに対する前の動的ソフトウェア分析からのメトリクスが記憶されていない場合は（ステップ１６）、ステップ２４で、同じソフトウェアエンティティまたはそのバージョンに対する前の静的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。前の静的分析からのメトリクスは、増強された、かつ／または増強されていない前の静的分析からのメトリクスを含むことができる。すなわち、前の静的分析からのメトリクスは、動的分析によって増強された静的分析からのメトリクス、前の静的分析によって増強された静的分析からのメトリクス、増強されていない静的分析からのメトリクス、またはこれらの組合せを含むことができる。静的分析は、ソフトウェアに対して、そのソフトウェアを実行することなく実施される。静的分析は、ソースコードおよび／またはオブジェクトコードに対して実施することができる。静的分析からの結果は、たとえば、ソフトウェア中のコードの行数、可能性のあるコーディングエラー（たとえば誤った構文）、保守性メトリクス、プログラムセマンティックエラー、論理エラー、サイクロマティック複雑度（サイクロマティック複雑度は、プログラムの健全性および信頼性の幅広い尺度である。サイクロマティック複雑度は、他のプログラムの複雑度との比較に利用できる単一の序数を提供する。）などを含むことができる。別の例示的な静的分析メトリクスは、バイナリ、タイプ、メソッドに対して分析／実行時収集を有効にすべきかどうかを示す単純な構成詳細静的設定を含むことができる。さらに別の例示的な静的分析メトリクスは、コードの複雑度を含むことができる。
【００２２】
前の静的分析メトリクスが記憶されていない場合は（ステップ２４）、ステップ３２で、現在の動的分析の結果が提供される。前の静的分析メトリクスが記憶されている場合は（ステップ２４）、ステップ２６でメトリクスが取り出される。ステップ２８で、取り出されたメトリクスが現在の動的分析の結果と統合されて、現在の動的分析が増強される。ステップ３０で、統合された結果からのメトリクスが記憶され、ステップ３２で結果が提供される。
【００２３】
図２は、反復的な動的および静的ソフトウェア分析を提供するための別の例示的なプロセスの流れ図である。例示的な一実施形態では、図２に示すように、静的ソフトウェア分析が実施され、静的分析の結果が、前に記憶された動的分析結果で増強される。ステップ３４で、静的ソフトウェア分析が開始される。ステップ３６で、静的ソフトウェア分析（ＳＡ）が実行される。静的ソフトウェア分析は、任意の適切な静的ソフトウェア分析ツールによって実施することができる。静的ソフトウェア分析の間、分析対象であるソフトウェアを実行することなく、分析対象であるソフトウェアまたはその一部が分析される。
【００２４】
ステップ３８で、前の静的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。前述のように、前の静的分析からのメトリクスは、増強された、かつ／または増強されていない前の静的分析からのメトリクスを含むことができる。メトリクスは、静的分析されている同じソフトウェアエンティティ、または分析されているソフトウェアエンティティのバージョンに関するものとすることができる。たとえば、コード開発中に、ソフトウェアコンポーネントの第１のバージョンを静的分析することができ、それから得られる選択された（またはすべての）メトリクスをメモリに記憶することができる。その後、ソフトウェアモジュールに変更を加えることができ、その結果、ソフトウェアモジュールの別のバージョンが得られる。ソフトウェアの後続バージョンが静的分析されたとき（たとえばステップ３６）、ソフトウェアモジュールの前バージョンに対する静的分析からのメトリクスが記憶されていると判定することができる（たとえばステップ３８）。
【００２５】
同じソフトウェアエンティティまたはそのバージョンに対する前の静的ソフトウェア分析からのメトリクスが記憶されている場合は（ステップ３８）、ステップ４８で、記憶されているメトリクスが取り出される。ステップ５０で、取り出されたメトリクスが現在の静的分析と統合されて、現在の静的分析が増強される。ステップ５２で、統合された結果からのメトリクスが記憶される。プロセスはステップ４０に進む。
【００２６】
同じソフトウェアエンティティまたはそのバージョンに対する前の静的ソフトウェア分析からのメトリクスが記憶されていない場合は（ステップ３８）、ステップ４０で、同じソフトウェアエンティティまたはそのバージョンに対する前の動的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。前述のように、前の動的分析からのメトリクスは、増強された、かつ／または増強されていない前の動的分析からのメトリクスを含むことができる。前の動的分析メトリクスが記憶されていない場合は（ステップ４０）、ステップ５４で、現在の静的分析の結果が提供される。前の動的分析メトリクスが記憶されている場合は（ステップ４０）、ステップ４２でメトリクスが取り出される。ステップ４４で、取り出されたメトリクスが現在の静的分析の結果と統合されて、現在の静的分析が増強される。ステップ４６で、統合された結果からのメトリクスが記憶され、ステップ５４で結果が提供される。
【００２７】
例示的な一実施形態では、ユーザ／ソフトウェア開発者がデバッグプロセスを開始することができ、静的分析および動的分析がバックグラウンドでシームレスに実施される。図３は、デバッグプロセスの一部としてソフトウェアを動的および静的に反復分析するための例示的なプロセスの流れ図である。図３に示すプロセスは基本的に、図１と図２に示したプロセスの結合である。ステップ５６で、ソフトウェア分析が開始される。その後、静的分析が実施され（ステップ５８）、動的分析が実施される（ステップ７６）。静的分析および動的分析は、ソフトウェア分析を開始するのに応答して実施される。静的分析および動的分析は、同時に実施されてもよく、任意の順序で連続して実施されてもよい。ステップ６０で、前の静的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。前述のように、前の静的分析からのメトリクスは、増強された、かつ／または増強されていない前の静的分析からのメトリクスを含むことができる。メトリクスは、静的分析されている同じソフトウェアエンティティ、または分析されているソフトウェアエンティティのバージョンに関するものとすることができる。
【００２８】
同じソフトウェアエンティティまたはそのバージョンに対する前の静的ソフトウェア分析からのメトリクスが記憶されている場合は（ステップ６０）、ステップ６２で、記憶されているメトリクスが取り出される。ステップ６４で、取り出されたメトリクスが現在の静的分析と統合されて、現在の静的分析が増強される。ステップ６６で、統合された結果からのメトリクスが記憶される。この時点で、プロセスはステップ６８に進む。同じソフトウェアエンティティまたはそのバージョンに対する前の静的ソフトウェア分析からのメトリクスが記憶されていない場合は（ステップ６０）、ステップ６８で、同じソフトウェアエンティティまたはそのバージョンに対する前の動的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。前述のように、前の動的分析からのメトリクスは、増強された、かつ／または増強されていない前の動的分析からのメトリクスを含むことができる。前の動的分析メトリクスが記憶されている場合は（ステップ６８）、ステップ７０でメトリクスが取り出される。ステップ７２で、取り出されたメトリクスが現在の静的分析の結果と統合されて、現在の静的分析が増強され、ステップ７４で、統合された結果からのメトリクスが記憶される。この時点で、プロセスはステップ９４に進む。また、前の動的分析メトリクスが記憶されていない場合は（ステップ６８）、プロセスはステップ９４に進む。ステップ９４で、静的分析が動的分析と統合されて、各タイプの分析の結果が相乗作用的に増強される。ステップ９６で、増強された結果が提供される。
【００２９】
ステップ７６で、動的ソフトウェア分析が実行される。ステップ７８で、前の動的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。メトリクスは、動的分析されている同じソフトウェアエンティティ、または分析されているソフトウェアエンティティのバージョンに関するものとすることができる。前の動的ソフトウェア分析からのメトリクスが記憶されている場合は（ステップ７８）、ステップ８０で、記憶されているメトリクスが取り出される。ステップ８２で、取り出されたメトリクスが現在の動的分析と統合されて、現在の分析が増強される。ステップ８４で、増強された結果からのメトリクスが記憶され、プロセスはステップ８６に進む。同じソフトウェアエンティティまたはそのバージョンに対する前の動的ソフトウェア分析からのメトリクスが記憶されていない場合は（ステップ７８）、ステップ８６で、同じソフトウェアエンティティまたはそのバージョンに対する前の静的ソフトウェア分析からのメトリクスが記憶されているかどうかが判定される。前の静的分析からのメトリクスは、増強された、かつ／または増強されていない前の静的分析からのメトリクスを含むことができる。前の静的分析メトリクスが記憶されていない場合は（ステップ８６）、プロセスは前述のステップ９４に進む。前の静的分析メトリクスが記憶されている場合は（ステップ８６）、ステップ８８でメトリクスが取り出される。ステップ９０で、取り出されたメトリクスが現在の動的分析の結果と統合されて、現在の動的分析が増強される。ステップ９２で、増強された動的分析からのメトリクスが記憶され、プロセスは前述のステップ９４に進む。
【００３０】
図４は、ソフトウェアを反復的に動的および静的分析するための例示的なシステム９８の図である。前述のように、例示的な一実施形態では、分析システム９８は、実行時に収集された情報を、静的コード分析チェックと統合する。有効である場合、一時的なビルドが装備されて、実行時に利用可能な有用な情報および実行特性が収集される。この情報は、テストおよびデバッグプロセスの結果として生成され、記憶される。システム９８は、クライアントプロセッサおよび／またはサーバプロセッサとして実現することができる。システム９８は、処理部１００、メモリ部１０２、および入出力部１０４を含む。処理部１００、メモリ部１０２、および入出力部１０４は、共に結合されて（図４には結合は示されていない）、それらの間の通信が可能になる。システム９８は分散プロセッサを備えることができ、システム９８の各部分（たとえば処理部１００、メモリ部１０２、および入出力部１０４）が分散プロセッサを備えることができる。システム９８は、静的および動的ソフトウェア分析を介してソフトウェアを反復的に分析することに関連する操作を実施することができる。たとえば、処理部１００は、静的ソフトウェア分析を実行すること、動的ソフトウェア分析を実行すること、静的および動的ソフトウェア分析メトリクスを記憶装置から取り出すこと、静的および動的ソフトウェア分析メトリクスを記憶すること、ならびに動的ソフトウェア分析と静的ソフトウェア分析とを統合して、静的および／または動的ソフトウェア分析を増強することができる。メモリ部１０２は、ソフトウェアを反復的に動的および静的分析することに関連するすべてのパラメータを記憶することができる。例示的な一実施形態では、メモリ部１０２は、静的ソフトウェア分析および動的ソフトウェア分析、ならびに増強ソフトウェア分析から得られるメトリクスを記憶する。
【００３１】
入出力部１０４は、前述のような、ソフトウェアを反復的に動的および静的分析するのに利用されるコンポーネントを提供し、かつ／または受領することができる。入出力部１０４は、別のシステム、記憶デバイス、および／またはデータストリームにデータを提供すること、ならびにそれらからデータを受け取ることができる。入出力部１０４は、さまざまなタイプのソフトウェア分析への入力を受け取ること、およびさまざまなタイプのソフトウェア分析の結果を提供することができる。
【００３２】
プロセッサの正確な構成およびタイプに応じて、メモリ部１０２は、揮発性（ＲＡＭおよび／またはキャッシュなど）１０６、不揮発性（ＲＯＭ、フラッシュメモリ、その他など）１０８、あるいはこれらの組合せとすることができる。システム９８は、追加の機構／機能を有することもできる。たとえば、システム９８は、追加の記憶装置（取外し可能記憶装置１１０および／または取外し不可能記憶装置１１２）を備えることができ、これらの記憶装置は、磁気または光学ディスク、テープ、フラッシュ、スマートカード、あるいはこの組合せを含むが、これらに限定されない。メモリ部１０２、１０６、１０８、１１０、および１１２などのコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実現された、揮発性および不揮発性、取外し可能および取外し不可能な媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶デバイス、ユニバーサルシリアルバス（ＵＳＢ）互換メモリ、スマートカード、あるいは、所望の情報を記憶できシステム９８によってアクセスできる他の任意の媒体を含むが、これらに限定されない。こうしたどんなコンピュータ記憶媒体も、システム９８の一部とすることができる。
【００３３】
システム９８はまた、システム９８が他のデバイスと通信できるようにする通信接続（１つまたは複数）１１８を備えることができる。通信接続（１つまたは複数）１１８は、通信媒体の一例である。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他のトランスポート機構などの被変調データ信号に組み入れるものであり、任意の情報送達媒体を含む。用語「被変調データ信号」は、信号中の情報を符号化するようにしてその特性の１つまたは複数が設定または変更される信号を意味する。限定ではなく例として、通信媒体は、有線ネットワークや直接有線接続などの有線媒体と、音響、無線周波数、赤外線などのワイヤレス媒体および他のワイヤレス媒体とを含む。本明細書におけるコンピュータ可読媒体という用語は、記憶媒体と通信媒体の両方を含む。システム９８はまた、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス（１つまたは複数）１１６を有することができる。表示装置、スピーカ、プリンタなどの出力デバイス（１つまたは複数）１１４を備えることもできる。
【００３４】
反復的な動的および静的ソフトウェア分析の多くの実施形態が、コンピュータ化されたシステムに特によく適合することが想定されるが、本文書中のいかなるものも、その範囲を限定するものではない。反対に、本明細書における用語「コンピュータシステム」は、情報を記憶および処理することのできる、かつ／あるいは記憶された情報を使用してデバイス自体の挙動または実行を制御することのできるあらゆるデバイスを、そのようなデバイスが電子的、機械的、論理的、または仮想的な性質であるかにかかわらず、包含するものとする。
【００３５】
本明細書に述べたさまざまな技法は、ハードウェアまたはソフトウェア、あるいは適切な場合にはこの両方の組合せに関して、実施することができる。したがって、反復的な動的および静的ソフトウェア分析のための方法および装置、あるいはそのいくつかの態様または部分は、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ハードドライブ、または他の任意の機械可読記憶媒体などの有形媒体に組み入れられたプログラムコード（すなわち命令）の形をとることができ、プログラムコードがコンピュータなどのマシンにロードされてマシンによって実行されたとき、このマシンは、ソフトウェアを反復的に動的および静的分析するための装置になる。
【００３６】
プログラム（１つまたは複数）は、望むならアセンブリ言語または機械言語で実現することができる。いずれの場合でも、言語は、コンパイラ型言語またはインタープリタ型言語とすることができ、結合された反復的な動的および静的ソフトウェア分析は、電気的な配線またはケーブリング、光ファイバ、あるいは他の任意の形の伝送を介するなど、何らかの伝送媒体を介して伝送されるプログラムコードの形で具体化される通信を介して実施することもでき、プログラムコードがＥＰＲＯＭ、ゲートアレイ、プログラマブルロジックデバイス（ＰＬＤ）、クライアントコンピュータなどのマシンによって受信されてマシンにロードされ、マシンによって実行されたとき、このマシンは、反復的な動的および静的ソフトウェア分析のための装置になる。プログラムコードは、汎用プロセッサ上で実施されたとき、プロセッサと結合して、反復的な動的および静的ソフトウェア分析の機能を呼び出すように動作する固有の装置を提供する。さらに、反復的な動的および静的ソフトウェア分析と共に使用されるどんな記憶技法も、必ずハードウェアとソフトウェアの組合せとすることができる。
【００３７】
さまざまな図の例示的な実施形態との関連で反復的な動的および静的ソフトウェア分析について述べたが、反復的な動的および静的ソフトウェア分析のための同じ機能を実施するために、それから逸脱することなく、他の同様の実施形態を用いることもできること、または述べた実施形態に修正および追加を行うこともできることを理解されたい。したがって、本明細書に述べた反復的な動的および静的ソフトウェア分析は、どんな単一の実施形態にも限定すべきではなく、特許請求の範囲の記載により解釈すべきである。
【図面の簡単な説明】
【００３８】
【図１】反復的な動的および静的ソフトウェア分析を提供するための例示的なプロセスの流れ図である。
【図２】反復的な動的および静的ソフトウェア分析を提供するための別の例示的なプロセスの流れ図である。
【図３】デバッグプロセスの一部としてソフトウェアを反復的に動的および静的分析するための例示的なプロセスの流れ図である。
【図４】ソフトウェアを反復的に動的および静的分析するための例示的なシステムの図である。
【図１】
2009540464.tif 000003
【図２】
2009540464.tif 000004
【図３】
2009540464.tif 000005
【図４】
2009540464.tif 000006
【国際調査報告】
2009540464.tif 000007
2009540464.tif 000008