(57)【要約】      （修正有）【課題】未完成ソフトウェアを分析する方法及び装置を提供する。【解決手段】未完成ソフトウェアプログラムを分析するシステム２００は、複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコード２０２を受信するステップを有する。複数の関数は、少なくとも１つの未完成関数及び少なくとも１つの完成関数を有する。コンパイラ２３０は、高レベルソフトウェアコードの少なくとも一部をコンパイルして、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコード２０８を生成するステップを更に有する。記号実行部２５０は、低レベルソフトウェアコードを変更して、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にするステップと、低レベルソフトウェアコードを記号実行するステップと、を更に有する。【選択図】図２
2014211864.tif 000002
【特許請求の範囲】
【請求項１】
未完成ソフトウェアプログラムを分析する方法であって、
複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコードを受信するステップであって、前記複数の関数は、少なくとも１つの未完成関数と少なくとも１つの完成関数とを含む、ステップと、
前記高レベルソフトウェアコードの少なくとも一部をコンパイルするステップであって、前記完成関数をコンパイルし及び前記未完成関数を除外することにより、低レベルソフトウェアコードを生成する、ステップと、
前記低レベルソフトウェアコード内の前記未完成関数の呼び出しを不具にするよう前記低レベルソフトウェアコードを変更するステップと、
を有する方法。
【請求項２】
前記変更するステップは、前記ソフトウェアコードが記号実行される前又はその間に生じる、請求項１に記載の方法。
【請求項３】
前記変更するステップは、前記未完成関数の前記呼び出しを記号変数で代用するステップを有する、請求項１に記載の方法。
【請求項４】
前記記号変数の種類は、前記未完成関数の戻り値の種類と関連する、請求項３に記載の方法。
【請求項５】
前記変更された低レベルソフトウェアコードの前記記号実行に基づきレポートを生成するステップであって、前記レポートは前記ソフトウェアプログラム内の１又は複数のエラーを示す、ステップ、を更に有する請求項１に記載の方法。
【請求項６】
前記変更された低レベルソフトウェアコードの前記記号実行に基づき前記ソフトウェアプログラムのための１又は複数のテストケースを生成するステップであって、前記１又は複数のテストケースは、前記変更された低レベルソフトウェアコードを記号実行することにより識別された前記ソフトウェアプログラム内のエラーを生成するよう構成される、ステップ、を更に有する請求項１に記載の方法。
【請求項７】
前記高レベルソフトウェアコードをコンパイルするステップは、前記高レベルソフトウェアコードをパースするステップであって、前記複数の関数のうちの前記完成関数を識別し、前記複数の関数のうちの前記未完成関数を識別する、ステップを有し、前記高レベルソフトウェアコードをパースするステップは、前記未完成関数を識別した後、継続する、請求項１に記載の方法。
【請求項８】
システムに未完成ソフトウェアプログラムを分析する動作を実行させるため、コンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、前記動作は、
複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコードを受信するステップであって、前記複数の関数は、少なくとも１つの未完成関数と少なくとも１つの完成関数とを含む、ステップと、
前記高レベルソフトウェアコードの少なくとも一部をコンパイルするステップであって、前記完成関数をコンパイルし及び前記未完成関数を除外することにより、低レベルソフトウェアコードを生成する、ステップと、
前記低レベルソフトウェアコード内の前記未完成関数の呼び出しを不具にするよう前記低レベルソフトウェアコードを変更するステップと、
を有する、プロセッサ。
【請求項９】
前記変更するステップは、前記ソフトウェアコードが記号実行される前又はその間に生じる、請求項８に記載のプロセッサ。
【請求項１０】
前記変更するステップは、前記未完成関数の前記呼び出しを記号変数で代用するステップを有する、請求項８に記載のプロセッサ。
【請求項１１】
前記記号変数の種類は、前記未完成関数の戻り値の種類と関連する、請求項１０に記載のプロセッサ。
【請求項１２】
前記高レベルソフトウェアコードをコンパイルするステップは、前記高レベルソフトウェアコードをパースするステップであって、前記複数の関数のうちの前記完成関数及び前記複数の関数のうちの前記未完成関数を識別する、ステップを有し、前記高レベルソフトウェアコードをパースするステップは、前記未完成関数を識別した後、継続する、請求項８に記載のプロセッサ。
【請求項１３】
未完成ソフトウェアプログラムを分析する方法であって、
ソフトウェアプログラムの高レベルソフトウェアコードが記述されている間、前記高レベルソフトウェアコードに関連付けられたトリガを検出するステップであって、前記高レベルソフトウェアコードは、少なくとも１つの未完成関数と少なくとも１つの完成関数を含む、ステップと、
前記トリガが検出されると、前記高レベルソフトウェアコードを分析するステップと、
を有し、前記分析するステップは、
前記高レベルソフトウェアコードの一部をコンパイルするステップであって、前記完成関数をコンパイルし及び前記未完成関数を除外することにより、低レベルソフトウェアコードを生成する、ステップと、
前記低レベルソフトウェアコード内の前記未完成関数の呼び出しを不具にするよう、前記低レベルソフトウェアコードを変更するステップと、
前記変更された低レベルソフトウェアコードを記号実行するステップと、
を有する、方法。
【請求項１４】
前記変更するステップは、前記ソフトウェアコードが記号実行される前又はその間に生じる、請求項１３に記載の方法。
【請求項１５】
前記変更するステップは、前記未完成関数の前記呼び出しを記号変数で代用するステップを有する、請求項１３に記載の方法。
【請求項１６】
前記記号変数の種類は、前記未完成関数の戻り値の種類と関連する、請求項１５に記載の方法。
【請求項１７】
前記トリガは、前記高レベルソフトウェアコード内の変更、タイマ、又は前記高レベルソフトウェアコードに追加された変更の数に基づく、請求項１３に記載の方法。
【請求項１８】
前記検出するステップ及び前記分析するステップは、前記高レベルソフトウェアコードが記述され及び／又は編集されている間、繰り返される、請求項１３に記載の方法。
【請求項１９】
前記分析するステップは、前記高レベルソフトウェアコードの最後の分析以来、変更された前記高レベルソフトウェアコードの一部を識別するステップであって、コンパイルされた前記高レベルソフトウェアコードの前記一部は、前記識別された部分である、請求項１８に記載の方法。
【請求項２０】
前記分析するステップは、
前記変更された低レベルソフトウェアコードの前記記号実行に基づきレポートを生成するステップであって、前記レポートは、前記ソフトウェアプログラム内の１又は複数のエラーを示す、ステップと、及び／又は
前記変更された低レベルソフトウェアコードの前記記号実行に基づき前記ソフトウェアプログラムのための１又は複数のテストケースを生成するステップであって、前記１又は複数のテストケースは、前記変更された低レベルソフトウェアコードを記号実行することにより識別された前記ソフトウェアプログラム内のエラーを生成するよう構成される、ステップと、
を有する、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書で議論される実施形態は、未完成ソフトウェアの分析に関する。
【背景技術】
【０００２】
記号実行は、ソフトウェアプログラムを動的に分析する技術である。記号実行は、入力値として、実際のデータの代わりに記号値を用い、記号表現としてプログラム変数の値を表す。その結果、記号実行されたソフトウェアプログラムにより計算された出力は、記号入力の関数として表現される。記号実行を通して、ソフトウェアプログラム内の各パスは、記号実行されても良い。パスに沿った記号実行が（正常に又はエラーで）終了するときはいつでも、パスに関連付けられた経路制約が解決され、解は、ソフトウェアプログラムを実行するために用いられ得る具体的なテスト入力を形成する。
【０００３】
記号実行は良好なテスト範囲を提供し、ソフトウェアプログラム内の大部分の又は全部のパスを対象とし得るテストケースを生成するが、記号実行は、時間がかかり、リソースを要する。さらに、ソフトウェアプログラムは、通常、ソフトウェアプログラム全体がパースされコンパイルされるように、プログラマがソフトウェアプログラムの全てのモジュール及び関数を書き終わった後に、ソフトウェアプログラムの機能を検証するために分析される。ソフトウェアプログラムは、ソフトウェアプログラム全体をパースしコンパイルし、次にソフトウェアプログラム内のエラーを識別するためにソフトウェアプログラムを動的に分析することにより、分析され得る。ユーザは、エラーを評価し確定できるようになる前に、ソフトウェアプログラムの動的分析を待たなければならない。完成したソフトウェアプログラムを分析するための記号実行の使用は、ソフトウェアプログラムを分析するための時間を増大させ、それにより、ソフトウェアプログラムの既に長い開発サイクルを更に長期化してしまう。
【０００４】
本願明細書で請求される主題は、上述のような欠点を解決する実施形態や上述のような環境でのみ機能する実施形態に限定されない。むしろ、この背景技術は、単に、本願明細書に記載される複数の実施形態が実施される技術分野の一例を説明するために提供される。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本開示は、未完成ソフトウェアを分析する方法及び装置を提供する。
【課題を解決するための手段】
【０００６】
一実施形態によると、未完成ソフトウェアプログラムを分析する方法は、複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコードを受信するステップを有しても良い。複数の関数は、少なくとも１つの未完成関数及び少なくとも１つの完成関数を有しても良い。方法は、高レベルソフトウェアコードの少なくとも一部をコンパイルして、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコードを生成するステップを更に有しても良い。方法は、低レベルソフトウェアコードを変更して、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にする（account  for）ステップと、低レベルソフトウェアコードを記号実行するステップと、を更に有しても良い。
【０００７】
実施形態の目的及び利点が理解され、少なくとも特に特許請求の範囲で指摘された要素、特徴及び組合せを用いて達成されるだろう。上述の全体的説明及び以下の詳細な説明の両方は、例示及び説明のためであり、本発明の範囲を限定しないことが理解される。
【図面の簡単な説明】
【０００８】
例示的な実施形態は、添付の図面を用いて、更なる特異性及び詳細事項と共に記載され説明される。
【図１】例示的なソフトウェアエディタを示す。
【図２】未完成ソフトウェアプログラムを分析する例示的なシステムのブロック図である。
【図３Ａ】例示的な関数を示す。
【図３Ｂ】記号変数代用後の図３Ａの例示的な関数を示す。
【図４】未完成ソフトウェアプログラムを周期的に分析する例示的な方法のフローチャートである。
【図５】未完成ソフトウェアプログラムを分析する例示的な方法のフローチャートである。
【図６】未完成ソフトウェアプログラムを分析する別の例示的な方法のフローチャートである。
【発明を実施するための形態】
【０００９】
本願明細書に記載の幾つかの実施形態は、未完成ソフトウェアプログラムを分析する方法及びシステムに関する。特に、幾つかの実施形態は、記号実行を用いた未完成ソフトウェアプログラムの分析に関する。未完成ソフトウェアプログラムは、ユーザにより現在記述中のプログラムであっても良い。その結果、ソフトウェアプログラムの部分は完成し、ソフトウェアプログラムの他の部分は未完成であっても良い。特に、ソフトウェアプログラム内の種々の関数は、完成又は未完成であっても良い。
【００１０】
ソフトウェアプログラムの記述中に未完成ソフトウェアプログラムを分析することは、分析がソフトウェアプログラムの記述と同時に実行できるので、ソフトウェアプログラムの開発時間を増大しない。多くの場合には、ソフトウェアプログラムの記号実行が実行されるときあっても、ソフトウェアプログラムの記述は、ソフトウェアプログラムの動的分析を実行するときにより多くの時間がかかる。その結果、プログラムが記述され続けるとともに未完成ソフトウェアプログラムの記号分析を実行することは、ソフトウェアプログラムの開発時間を短縮し得る。
【００１１】
本発明の実施形態を、添付の図面を参照して以下に説明する。
【００１２】
図１は、本願明細書に記載の少なくとも１つの実施形態により構成される例示的なソフトウェアエディタ１００を示す。ソフトウェアエディタ１００は、ソフトウェアプログラムを開発するための、ユーザのためのインタフェースを提供するよう構成されても良い。幾つかの実施形態では、ソフトウェアエディタ１００は、ソフトウェアプログラムを書く、変更する、コンパイルする、展開する及び／又はデバッグするのような種々の機能を提供するよう構成されても良い。幾つかの実施形態では、ソフトウェアエディタ１００は、統合開発環境であっても良い。幾つかの実施形態では、ソフトウェアエディタ１００は、高レベルソフトウェアコードの記述及び編集等を提供するソフトウェアエディタであっても良い。ソフトウェアエディタ１００は、限定ではないがＰｅｒｌ、Ｃ、Ｃ＋＋、Ｃ＃、Ｊａｖａ(登録商標)、ＪａｖａＳｃｒｉｐｔ(登録商標)、Ｐｙｔｈｏｎ、Ｒｕｂｙ、アセンブリ言語、Ｆｏｒｔｒａｎ、ＣＯＢＯＬ（common  business-oriented  language）、ＳＱＬ（structured  query  language）及びＰＨＰ（hypertext  preproceesor）を含む種々のソフトウェアプログラミング言語と共に用いられるように構成されても良い。
【００１３】
ソフトウェアエディタ１００は、図示のように、ソフトウェアプログラムを開発するユーザに機能を提供する種々のウインドウ及び／又はモジュールを有する。特に、ソフトウェアエディタ１００は、高レベルソフトウェアコードビューア１１０、状態ウインドウ１２０、及び分析モジュール１３０を有する。
【００１４】
高レベルソフトウェアコードビューア１１０は、ソフトウェアプログラムの高レベルソフトウェアコードをユーザから受信するインタフェースとして構成されても良い。ユーザは、高レベルソフトウェアコードを高レベルソフトウェアコードビューア１１０に入力するために、タイプし、発話し、又は特定の他の方法を用いても良い。高レベルソフトウェアコードビューア１１０は、ソフトウェアエディタ１００内で高レベルソフトウェアコードをユーザに提示するよう構成されても良い。例えば、ソフトウェアプログラムは、ソフトウェアエディタ１００に入力され、高レベルソフトウェアコードビューア１１０によりユーザに提示されても良い。
【００１５】
高レベルソフトウェアコードは、本願明細書で用いられるように、テキストのような人間が読み取り可能な形式を用いて記述されるソフトウェアコードを示しても良い。高レベルソフトウェアコードは、ソースコードに類似していてもよく、限定ではないがＰｅｒｌ、Ｃ、Ｃ＋＋、Ｃ＃、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、Ｐｙｔｈｏｎ、Ｒｕｂｙ、アセンブリ言語、Ｆｏｒｔｒａｎ、ＣＯＢＯＬ、ＳＱＬ及びＰＨＰを含む種々のプログラミング言語のソースコードを有しても良い。さらに、本願明細書で用いられるように、高レベルソフトウェアコードは、低レベルソフトウェアコードとは異なっても良い。本願明細書で用いられるように、低レベルソフトウェアコードは、限定ではないがバイトコード、オブジェクトコード、マシンコード、仮想命令、及びマシンコードの他の中間的表現を含む機械可読形式のソフトウェアコードを示しても良い。一般に、ソフトウェアプログラムの高レベルソフトウェアコードはユーザにより生成され、ソフトウェアプログラムの低レベルソフトウェアコードは、高レベルソフトウェアコードを用いてコンパイラ又は特定の他のモジュールにより生成される。したがって、高レベルソフトウェアコード及び低レベルソフトウェアコードは両方とも、単一であるが異なるレベルの抽象概念でソフトウェアプログラムを表し得る。
【００１６】
状態ウインドウ１２０は、高レベルソフトウェアコードビューア１１０内に提示されたソフトウェアプログラムの状態を提供するよう構成されても良い。例えば、状態ウインドウ１２０は、ソフトウェアプログラム内のエラーを示すレポートを提示するよう構成されても良い。代替で又は追加で、状態ウインドウ１２０は、ソフトウェアプログラムに関する他の情報を提供するよう構成されても良い。
【００１７】
分析モジュール１３０は、ソフトウェアエディタ１００を用いて開発中の未完成ソフトウェアプログラムを分析するよう構成されても良い。特に、分析モジュール１３０は、ソフトウェアエディタ１００を用いて開発中のソフトウェアプログラムの未完成高レベルソフトウェアコードを受信し、未完成高レベルソフトウェアコードをコンパイルして低レベルソフトウェアコードを生成し、低レベルソフトウェアコードを記号実行するよう構成されても良い。低レベルソフトウェアコードの記号実行に基づき、分析モジュール１３０は、未完成ソフトウェアプログラム内で識別されたエラーを示すレポートを生成するよう構成されても良い。レポートは、ソフトウェアエディタ１００の状態ウインドウ１２０内に表示されても良い。代替で又は追加で、分析モジュール１３０は、未完成ソフトウェアプログラムを実行するために用いられ得るテストケースを生成するよう構成されても良い。幾つかの実施形態では、テストケースは、実行され状態ウインドウ１２０内に表示されたとき、未完成ソフトウェアプログラムにおいて、分析モジュール１３０により生成されたレポート内で示されるエラーを生成するよう構成されても良い。
【００１８】
幾つかの実施形態では、高レベルソフトウェアコードビューア１１０が高レベルソフトウェアコードをユーザから受信している間に、分析モジュール１３０は未完成ソフトウェアプログラムを分析しても良い。上述の及び他の実施形態では、特定の時間に現在開発／記述中のソフトウェアプログラムは、高レベルソフトウェアコードビューア１１０から、ソフトウェアエディタ１００内のメモリから、又はソフトウェアエディタ１００内の他のモジュールから、分析モジュール１３０により受信されても良い。特定の時間における未完成ソフトウェアは、完成した関数及び未完成関数を含む高レベルソフトウェアコードであっても良い。分析モジュール１３０は、上述のように高レベルソフトウェアコードを分析しても良い。
【００１９】
幾つかの実施形態では、分析モジュール１３０は、ソフトウェアプログラムの開発中に複数回、ソフトウェアプログラムを分析しても良い。例えば、分析モジュールは、ソフトウェアプログラムが未完成であり開発中の間に、トリガに基づき、ソフトウェアプログラムを分析するよう構成されても良い。トリガは、タイマ、又はソフトウェアプログラムの開発に関連付けられても良い。例えば、ソフトウェアプログラムの分析は、ソフトウェアプログラムの特定数の関数、キャラクタ、変数、又は特定の他の特徴の追加に基づきトリガされても良い。別の例として、分析は、ソフトウェアプログラムが編集され又は記述されている間に、５若しくは１０分毎に又は他の周期的間隔でトリガされても良い。
【００２０】
幾つかの実施形態では、分析モジュール１３０は、トリガが生じる度に、現在開発中のソフトウェアプログラム全体を分析するよう構成されても良い。代替で又は追加で、分析モジュール１３０は、現在開発中のソフトウェアプログラム全体のうちの一部を分析するよう構成されても良い。上述の及び他の実施形態では、分析されるソフトウェアプログラム全体のうちの一部は、分析モジュール１３０により前に分析されたことのない部分であっても良い。例えば、分析される部分は、ソフトウェアプログラムが最後に分析されて以来、ソフトウェアプログラムに追加された部分であっても良い。
【００２１】
分析モジュール１３０は、本願明細書に記載されるように、ソフトウェアプログラムの分析及びソフトウェアプログラムの開発を同時に可能にし得る。その結果、ソフトウェアプログラムのための開発時間は、短縮され得る。代替で又は追加で、ソフトウェアプログラムの開発中にソフトウェアプログラムを分析することは、ソフトウェアプログラムの開発後に解決すべきエラーの数及び／又は重症度を低減できる。
【００２２】
本開示の範囲から逸脱することなくソフトウェアエディタ１００に対し変更、追加又は省略が行われても良い。例えば、ソフトウェアエディタ１００は、分析モジュール１３０を有しなくても良い。上述の及び他の実施形態では、分析モジュール１３０は、別のシステム又はソフトウェアの一部であっても良く、本願明細書に記載のようにソフトウェアエディタ１００で開発中のソフトウェアプログラムを分析するために用いられても良い。別の例として、ソフトウェアエディタ１００は、上述した以外の種々の他のモジュールを有しても良い。例えば、ソフトウェアエディタ１００は、特にコンパイラ、デバッガを有しても良い。幾つかの実施形態では、分析モジュール１３０は、未完成高レベルソフトウェアコードの分析を実行するために、ソフトウェアエディタ１００内の他のモジュールを用いても良い。例えば、分析モジュール１３０は、未完成高レベルソフトウェアコードの分析する際に、ソフトウェアエディタ１００内のコンパイラを用いて支援しても良い。
【００２３】
図２は、本願明細書に記載した少なくとも１つの実施形態に従って構成された、未完成ソフトウェアプログラムを分析する例示的なシステム２００のブロック図を示す。システム２００は、本願明細書に記載のように未完成ソフトウェアプログラムの分析を実行するために、図１のソフトウェアエディタ１００内に含まれ及び／又はソフトウェアエディタ１００と共に動作しても良い。システム２００は、ソフトウェアプログラムの開発中に、未完成ソフトウェアプログラムを分析するよう構成されても良い。システム２００は、検出モジュール２２０、コンパイラ２３０、及び記号実行部２５０を有しても良い。コンパイラ２３０は、パーサ２３２、及び低レベルコード生成部２３４を有しても良い。記号実行部２５０は、コード変更モジュール２５２を有しても良い。検出モジュール２２０、コンパイラ２３０、及び記号実行部２５０の各々は、それらの間でデータ及び情報を共有できるよう、互いに通信するよう構成されても良い。
【００２４】
システム２００は、高レベルソフトウェアコード２０２を受信するよう構成されても良い。高レベルソフトウェアコード２０２は、図１のソフトウェアエディタ１００のようなソフトウェアエディタから、又は特定の他の情報源から受信されても良い。
【００２５】
高レベルソフトウェアコード２０２は、未完成であっても良い。特に、高レベルソフトウェアコード２０２は、複数の関数を有しても良い。ここで、これらの関数のうちの少なくとも１つは完成した関数であり、これらの関数のうちの少なくとも１つは未完成の関数であっても良い。関数は、該関数がパーサ２３２によりパース可能なとき完成していると考えられ、パーサ２３２によりパース不可能なとき未完成であると考えられても良い。高レベルソフトウェアコード２０２は、限定ではないがＰｅｒｌ、Ｃ、Ｃ＋＋、Ｃ＃、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、Ｐｙｔｈｏｎ、Ｒｕｂｙ、アセンブリ言語、Ｆｏｒｔｒａｎ、ＣＯＢＯＬ、ＳＱＬ及びＰＨＰを含む種々のソフトウェアプログラミング言語のうちの任意の１つで記述されても良い。
【００２６】
高レベルソフトウェアコード２０２は、検出モジュール２２０により最初に受信されても良い。幾つかの実施形態では、検出モジュール２２０は、高レベルソフトウェアコード２０２を前に受信した高レベルソフトウェアコードと比較するよう構成されても良い。高レベルソフトウェアコード２０２のあるバージョンが、前に検出モジュール２２０により受信されたことがある場合、検出モジュール２２０は、高レベルソフトウェアコード２０２と高レベルソフトウェアコード２０２の前のバージョンとの間の差分を決定するよう構成されても良い。高レベルソフトウェアコード２０２の前のバージョンと異なると決定された高レベルソフトウェアコード２０２の部分は、検出モジュール２２０により、変更された高レベルソフトウェアコード２０４として出力されても良い。
【００２７】
高レベルソフトウェアコード２０２のあるバージョンが、前に検出モジュール２２０により受信されたことがない場合、或いは、検出モジュール２２０が高レベルソフトウェアコード２０２の前のバージョンが前に受信されたことがあるかどうかを決定できない場合（例えば、高レベルソフトウェアコード２０２が、前のバージョンと比較したとき実質的に新しいソフトウェアプログラムであるような程、変更されている場合）、検出モジュール２２０は、高レベルソフトウェアコード２０２を変更された高レベルソフトウェアコード２０４として出力しても良い。
【００２８】
コンパイラ２３０は、変更された高レベルソフトウェアコード２０４を受信するよう構成されても良い。特に、パーサ２３２は、変更された高レベルソフトウェアコード２０４を受信するよう構成されても良い。パーサ２３２は、変更された高レベルソフトウェアコード２０４を分析して、変更された高レベルソフトウェアコード２０４のどの部分が構文上正しいかを、変更された高レベルソフトウェアコード２０４のプログラミング言語に基づき決定するよう構成されても良い。特に、パーサ２３２は、構文上正しい関数、及び構文上正しくない関数を決定するよう構成されても良い。構文上正しい関数は、ここでは完成した関数として考えられ、構文上正しくない関数は、ここでは未完成関数として考えられても良い。
【００２９】
標準的なパーサは、パーサが高レベルソフトウェアコードの一部が構文上正しくないと決定するまで、高レベルソフトウェアコードをパースし得る。パーサ２３２は、構文上正しくない変更された高レベルソフトウェアコード２０４の部分を識別した後も、変更された高レベルソフトウェアコード２０４の部分をパースするよう構成されても良い。上述の及び他の実施形態では、パーサ２３２が関数が構文上正しくない（又は未完成である）と決定したとき、パーサ２３２は、未完成関数の残りの部分をスキップしても良く、変更された高レベルソフトウェアコード２０４内の他の関数をパースし続けても良い。このように、パーサ２３２は、パーサ２３２が未完成関数を識別した後に完成関数がパースされる場合でも、変更された高レベルソフトウェアコード２０４内の完成関数をパースしても良い。
【００３０】
パーサ２３２は、パースした完成関数をパースされた高レベルソフトウェアコード２０６として出力するよう構成されても良い。パースされた高レベルソフトウェアコード２０６は、低レベルコード生成部２３４へ送信されても良い。幾つかの実施形態では、パースされた高レベルソフトウェアコード２０６は、パーサ２３２により生成されたパースツリーの形式であっても良い。パースツリーは、変更された高レベルソフトウェアコード２０４の完成関数に含まれる要素間の構文上の関係を示しても良い。
【００３１】
幾つかの実施形態では、パーサ２３２は、変更された高レベルソフトウェアコード２０４内の関数が未完成か完成しているかを示すルックアップテーブルを生成するよう構成されても良い。ルックアップテーブルは、未完成関数に対する戻り値の種類のような情報を有しても良い。上述の及び他の実施形態では、記号実行部２５０及び特にコード変更モジュール２５２は、ルックアップテーブルにアクセスしても良い。
【００３２】
低レベルコード生成部２３４は、パースされた高レベルソフトウェアコード２０６に基づき、低レベルソフトウェアコード２０８を生成するよう構成されても良い。特に、低レベルコード生成部２３４は、パースされた高レベルソフトウェアコード２０６を低レベルソフトウェアコード２０８に変換しても良い。低レベルソフトウェアコード２０８は、記号実行部２５０に低レベルソフトウェアコード２０８を記号実行させる、記号実行部２５０固有の命令を有しても良い。例えば、幾つかの実施形態では、低レベルソフトウェアコード２０８は、記号実行部２５０による実行のために記号形式であっても良い。幾つかの実施形態では、低レベルコード生成部２３４は、記号実行部２５０による記号実行のために、低レベルソフトウェアコード２０８を最適化するよう更に構成されても良い。
【００３３】
記号実行部２５０は、低レベルコード生成部２３４から低レベルソフトウェアコード２０８を受信し、低レベルソフトウェアコード２０８を記号実行するよう構成されても良い。幾つかの実施形態では、低レベルソフトウェアコード２０８は、記号形式であり、したがって記号実行部２５０による記号実行の準備ができていても良い。代替で、記号実行部２５０は、低レベルソフトウェアコード２０８の記号実行の前又はそれと同時に、低レベルソフトウェアコード２０８を記号形式に変換しても良い。
【００３４】
低レベルソフトウェアコード２０８を記号実行することにより、記号実行部２５０は、低レベルソフトウェアコード２０８内の一部の、大部分の、又は全部のパスを分析しても良い。低レベルソフトウェアコード２０８内のパスの分析に基づき、記号実行部２５０は、低レベルソフトウェアコード２０８内のエラーを識別するよう構成されても良い。エラーは、特に、論理的エラー、不正な記憶位置のアクセス、初期化されないポインタ、ゼロによる除算、帯域外メモリアクセス、メモリが割り当てられるが開放されないメモリリーク、を有しても良い。識別されたエラーは、集められ、レポート２６０で出力されても良い。幾つかの実施形態では、レポート２６０は、高レベルソフトウェアコード２０２を開発しているユーザに提示されても良い。例えば、レポート２６０又はその一部は、図１の状態ウインドウ１２０のような状態ウインドウ内に表示されても良い。
【００３５】
幾つかの実施形態では、記号実行部２５０は、分析される低レベルソフトウェアコード２０８内のパスの記号パス条件を生成するよう構成されても良い。記号パス条件は、制約ソルバを用いて解決されても良い。制約ソルバの出力は、テストケース２６２であっても良い。テストケース２６２は、記号実行された低レベルソフトウェアコード２０８内のパスに従う低レベルソフトウェアコード２０８の具体的な実行を刺激するために用いられ得る１又は複数の具体的な変数を有しても良い。幾つかの実施形態では、テストケース２６２は、低レベルソフトウェアコード２０８の具体的な実行を刺激するために用いられると、レポート２６０内に含まれるエラーを生じる具体的な変数を有しても良い。テストケース２６２を用いてエラーを生成できることは、デバッギングプログラム又は他のプログラムを用いてエラーを識別し、理解し及び／又は正すとき、ユーザを支援する。
【００３６】
幾つかの実施形態では、記号実行部２５０により記号実行されている低レベルソフトウェアコード２０８は、未完成関数の呼び出しを有しても良い。例えば、低レベルソフトウェアコード２０８内の完成した関数は、未完成関数の呼び出しを有しても良い。低レベルソフトウェアコード２０８内の未完成関数の呼び出しは、未完成関数が低レベルソフトウェアコード２０８内で定められていないので、低レベルソフトウェアコード２０８の記号実行において問題になり得る。例えば、未完成関数の戻り値に依存する又はそれを用いる演算又は変数を含む完成関数は、未完成関数が定められていないために戻り値が存在しないので、幾つかの状況では、未完成関数の呼び出しを通り越して記号実行できない。
【００３７】
図３Ａは、本願明細書に記載された少なくとも１つの実施形態により構成された、未完成関数であるｆｕｎｃｔｉｏｎＣの戻り値を用いる例示的な関数（function）３００を示す。関数３００は、ｆｕｎｃｔｉｏｎＢの戻り値がｖａｒｉａｂｌｅ２に等しく設定され、完成関数ｆｕｎｃｔｉｏｎＢの呼び出しを有するライン３０２と、ｆｕｎｃｔｉｏｎＣの戻り値がｖａｒｉａｂｌｅ３に等しく設定され、未完成関数ｆｕｎｃｔｉｏｎＣの呼び出しを有するライン３０４と、を含む。ライン３０６では、ｖａｒｉａｂｌｅ３は、関数３００に対する戻り値を決定するために、他の変数と共に用いられる。関数３００の記号実行は、幾つかの状況では、記号実行部が未完成関数、したがって未定義の関数ｆｕｎｃｔｉｏｎＣの呼び出しをどのように扱うべきかを理解できないので、ライン３０４を通り越して進めない。
【００３８】
図２の議論に戻ると、幾つかの実施形態では、記号実行部２５０のコード変更モジュール２５２は、低レベルソフトウェアコード２０８内の未完成関数の呼び出しを識別し、低レベルソフトウェアコード２０８が未完成関数の呼び出しを含むとき、低レベルソフトウェアコード２０８を変更して低レベルソフトウェアコード２０８の記号実行を改良するよう構成されても良い。
【００３９】
幾つかの実施形態では、低レベルソフトウェアコード２０８内の未完成関数の呼び出しを識別するために、コード変更モジュール２５２は、先ず、低レベルソフトウェアコード２０８内の各関数呼び出しを識別しても良い。関数呼び出しを識別した後に、コード変更モジュール２５２は、パーサ２３２により生成され得るルックアップテーブルのような、関数が未完成関数か完成関数かを示すルックアップテーブルを参照しても良い。関数が未完成関数であるとき、コード変更モジュール２５２は、低レベルソフトウェアコード２０８を変更して、未完成関数の呼び出しを不具にしても良い。
【００４０】
コード変更モジュール２５２は、低レベルソフトウェアコード２０８内で未完成関数がどのように呼び出されるかに基づき、低レベルソフトウェアコード２０８を異なる方法で変更しても良い。例えば、低レベルソフトウェアコード２０８は、未完成関数の呼び出しを含み、未完成関数の戻り値に設定される変数を有しても良い。上述の及び他の実施形態では、コード変更モジュール２５２は、未完成関数の呼び出しを、未完成関数の戻り値と同じ種類の記号変数で代用するよう構成されても良い。未完成関数の呼び出しを記号変数で代用することにより、未完成関数の呼び出しを含む低レベルソフトウェアコード２０８は、記号実行部２５０により記号実行できる。図３Ｂは、本願明細書に記載の少なくとも１つの実施形態により構成される、図３Ａの関数３００内の記号変数代用の結果である例示的な関数（ｆｕｎｃｔｉｏｎ）３００‘を示す。関数３００‘は、完成関数ｆｕｎｃｔｉｏｎＢの呼び出しを含むライン３０２と、未完成関数ｆｕｎｃｔｉｏｎＣの呼び出しをsymbolicvariableという記号変数で代用したことにより関数３００のライン３０４と異なるライン３０４’を有する。
【００４１】
図２の議論に戻ると、幾つかの実施形態では、記号実行部２５０が低レベルソフトウェアコード２０８の記号実行を開始する前に、コード変更モジュール２５２は、未完成関数の呼び出しを識別し、低レベルソフトウェアコード２０８を変更するよう構成されても良い。代替で又は追加で、コード変更モジュール２５２は、未完成関数の呼び出しを識別し、低レベルソフトウェアコード２０８の記号実行中に低レベルソフトウェアコード２０８を変更するよう構成されても良い。例えば、低レベルソフトウェアコード２０８の最初の命令が記号実行される間、及び／又は最初の命令が記号実行された後且つ低レベルソフトウェアコード２０８の２番目の命令が記号実行される前に、コード変更モジュール２５２は、２番目の命令が未完成関数の呼び出しであるかどうかを決定しても良い。２番目の命令が未完成関数の呼び出しであるとき、コード変更モジュール２５２は、２番目の命令及び／又は低レベルソフトウェアコード２０８の他の部分を変更して、未完成関数の呼び出しを不具にしても良い。
【００４２】
本開示の範囲から逸脱することなくシステム２００に対し変更、追加又は省略が行われても良い。例えば、幾つかの実施形態では、システム２００は、検出モジュール２２０を有しなくても良い。上述の及び他の実施形態では、システム２００により受信された高レベルソフトウェアコード２０２は、コンパイラ２３０を通過しても良い。
【００４３】
幾つかの実施形態では、コンパイラ２３０及び記号実行部２５０は、インタープリタのような単一モジュールの部分を形成しても良い。上述の及び他の実施形態では、高レベルソフトウェアコード２０２のパース、低レベルソフトウェアコード２０８の生成、及び低レベルソフトウェアコード２０８の記号実行は、インタープリタにより実行されても良い。さらに、上述の及び他の実施形態では、パース、生成、及び記号実行は、別個のステップとして実行されなくても良い。高レベルソフトウェアコード２０２の一部がパースされ、該一部のために低レベルソフトウェアコードが生成され、該一部が、高レベルソフトウェアコードの他の部分がパースされ、そして対応する低レベルソフトウェアコードを生成し記号実行する前に、記号実行されても良い。
【００４４】
図４は、本願明細書に記載した少なくとも１つの実施形態に従って構成された、未完成ソフトウェアプログラムを周期的に分析する例示的な方法４００のフローチャートを示す。方法４００は、幾つかの実施形態では、図２のシステム２００のようなシステムにより実施されても良い。別個のブロックとして示したが、所望の実装に依存して、種々のブロックは、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【００４５】
方法４００は、ブロック４０２で開始し、未完成高レベルソフトウェアコードの分析するためのトリガが検出されても良い。幾つかの実施形態では、トリガは、タイマに関連付けられても良い。例えば、トリガは、未完成高レベルソフトウェアコードを編集し又は記述する特定の時間間隔が経過した後に生じ検出されても良い。例示的なタイマ間隔は、５分、１０分、又は１５分を有しても良い。代替で又は追加で、トリガは、未完成高レベルソフトウェアコードに特定量の変更が行われた後に、生じ、検出されても良い。その結果、トリガは、未完成高レベルソフトウェアコードの開発中に周期的に生じ検出されても良い。トリガが検出されると、方法４００は、ブロック４０６に進んでも良い。トリガが検出されないとき、方法４００は、トリガが検出されるのを待っても良い。
【００４６】
ブロック４０６で、未完成高レベルソフトウェアコードが最後に分析されて以来変更された、未完成高レベルソフトウェアコードの部分が識別されても良い。ブロック４０８で、未完成高レベルソフトウェアコードの変更された部分は、パースされても良い。未完成高レベルソフトウェアコードの変更された部分がパースされる間、未完成高レベルソフトウェアコードの変更された部分の完成関数及び未完成関数が識別されても良い。
【００４７】
ブロック４１０で、低レベルソフトウェアコードは、未完成高レベルソフトウェアコードのパースされ及び変更された部分、特に変更された未完成高レベルソフトウェアコードのパースされた完成関数に基づき、生成されても良い。幾つかの実施形態では、低レベルソフトウェアコードも最適化されても良い。
【００４８】
ブロック４１２で、低レベルソフトウェアコードが未完成関数の１又は複数の呼び出しを有するかどうかが決定されても良い。低レベルソフトウェアコードが１又は複数の未完成関数の呼び出しを有するとき、方法４００はブロック４１４に進んでも良い。低レベルソフトウェアコードが１又は複数の未完成関数の呼び出しを有しないとき、方法４００はブロック４１６に進んでも良い。
【００４９】
ブロック４１４で、低レベルソフトウェアコードは、低レベルソフトウェアコード内の１又は複数の未完成関数の呼び出しを不具にするよう、変更されても良い。幾つかの実施形態では、変数が１又は複数の未完成関数の呼び出しの戻り値に設定される場合、未完成関数の呼び出しは、１又は複数の未完成関数の戻り値と同種類の記号変数で代用されても良い。
【００５０】
ブロック４１６で、低レベルソフトウェアコードは記号実行されても良い。ブロック４１８で、低レベルソフトウェアコードで識別されたエラーを含むレポートが生成されても良い。追加で又は代替で、１又は複数のテストケースは、低レベルソフトウェアコードの記号実行に基づき生成されても良い。ブロック４１８の次にブロック４０４が続き、方法４００は、未完成高レベルソフトウェアコードを再び分析するための別のトリガの検出を待機しても良い。
【００５１】
方法４００の実施形態は、ソフトウェアプログラムの開発中の未完成ソフトウェアプログラムの分析を提供する。特に、方法４００は、ソフトウェアプログラムの記述及び／又は編集と同時に未完成ソフトウェアプログラムの周期的な記号分析を提供する。ソフトウェアプログラムの記述及び／又は編集と同時に未完成ソフトウェアプログラムを周期的に記号分析することにより、ソフトウェアプログラムの開発時間が短縮できる。
【００５２】
当業者は、この処理及び本願明細書に開始した他の処理及び方法において、その処理及び方法で実行される機能が異なる順序で実施されても良いことを理解するだろう。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されても良い。例えば、ブロック４０６は、方法４００から省略されても良い。上述の及び他の実施形態では、高レベルソフトウェアコードの全部及び高レベルソフトウェアコードの変更された部分だけが方法４００により分析されても良い。さらに、方法４００は、コンパイルされ次に実行されるのではなく、通常インタープリタにより実行されるプログラミング言語にも適用できる。
【００５３】
別の例として、ブロック４１２、４１４、４１６は結合されても良い。上述の及び他の実施形態では、低レベルソフトウェアコードは、未完成関数の呼び出しについて調べられても良く、低レベルソフトウェアコードの記号実行中に１又は複数の未完成関数の呼び出しを不具にするよう変更されても良い。例えば、低レベルソフトウェアの記号実行中に関数の呼び出しに遭遇すると、該呼び出しは、該呼び出しが未完成関数へのものかどうかを決定するために調べられ得る。呼び出しが未完成関数へのものであるとき、呼び出しは、本願明細書で議論したように記号変数で代用されても良い。このように、低レベルソフトウェアコードは、低レベルソフトウェアコードの記号実行中に変更されても良い。
【００５４】
図５は、本願明細書に記載した少なくとも１つの実施形態に従って構成された、未完成ソフトウェアプログラムを分析する例示的な方法５００のフローチャートを示す。方法５００は、幾つかの実施形態では、図２のシステム２００のようなシステムにより実施されても良い。別個のブロックとして示したが、所望の実装に依存して、種々のブロックは、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【００５５】
方法５００は、ブロック５０２で開始し、複数の関数を有するソフトウェアプログラムの高レベルソフトウェアコードが受信されても良い。ソフトウェアプログラムの複数の関数は、少なくとも１つの未完成関数及び少なくとも１つの完成関数を有しても良い。未完成関数は、構文エラーを有するコンパイルできない関数であっても良い。完成関数は、構文エラーを有しないコンパイルできる関数であっても良い。
【００５６】
ブロック５０４で、高レベルソフトウェアコードの少なくとも一部はコンパイルされ、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコードを生成しても良い。幾つかの実施形態では、高レベルソフトウェアコードのコンパイルは、完成関数を識別するため及び未完成関数を識別するために、高レベルソフトウェアコードをパースすることを含む。高レベルソフトウェアコードのパースは、未完成関数を識別した後に継続しても良い。言い換えると、高レベルソフトウェアコードのパースは、未完成関数、例えば構文エラーを有する関数が識別されたときに、停止しなくても良い。むしろ、高レベルソフトウェアコードのパースは、高レベルソフトウェアコード内の全ての関数がパースされ未完成関数として識別されるまで、継続しても良い。
【００５７】
ブロック５０６で、低レベルソフトウェアコードは、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にするよう、変更されても良い。幾つかの実施形態では、低レベルソフトウェアコードの変更は、未完成関数の呼び出しを未完成関数の戻り値の種類と類似の種類の記号変数で代用することを有しても良い。
【００５８】
ブロック５０８で、変更された低レベルソフトウェアコードは記号実行されても良い。幾つかの実施形態では、低レベルソフトウェアコード全体は、変更された低レベルソフトウェアコードが記号実行される前に変更されても良い。代替で又は追加で、低レベルソフトウェアコードの一部は、既に変更されている低レベルソフトウェアコードの第２の部分の記号実行と同時に変更されても良い。
【００５９】
幾つかの実施形態では、方法５００は、変更された低レベルソフトウェアコードの記号実行に基づきレポートを生成するステップを更に有しても良い。レポートは、ソフトウェアプログラム内の１又は複数のエラーを示しても良い。例えば、レポートは、特に、論理的エラー、不正な記憶位置のアクセス、初期化されないポインタ、ゼロによる除算、帯域外メモリアクセス、メモリが割り当てられるが開放されないメモリリーク、を有しても良い。
【００６０】
幾つかの実施形態では、方法５００は、変更された低レベルソフトウェアコードの記号実行に基づきソフトウェアプログラムのための１又は複数のテストケースを生成するステップを更に有しても良い。１又は複数のテストケースは、低レベルソフトウェアコードを記号実行することにより識別されたソフトウェアプログラム内のエラーを生成するよう構成されても良い。
【００６１】
幾つかの実施形態では、方法５００は、ソフトウェアプログラムの記述及び／又は編集と同時に未完成ソフトウェアプログラムの周期的な記号分析を提供するために実行されても良い。
【００６２】
幾つかの実施形態では、方法５００内の種々のブロックは、高レベルソフトウェアコードに対して離散的ステップとして実行されなくても良い。例えば、ブロック５０４で、高レベルソフトウェアコードの一部は、低レベルソフトウェアコードを生成するためにコンパイルされても良い。ブロック５０６で、低レベルソフトウェアコードは変更されても良い。次に、ブロック５０８で、変更された低レベルソフトウェアコードは記号実行されても良い。同時に又は後の時間に、ブロック５０４で、高レベルソフトウェアコードの別の一部が、低レベルソフトウェアコードを生成するためにコンパイルされても良い。ブロック５０６で、低レベルソフトウェアコードは変更されても良い。次に、ブロック５０８で、変更された低レベルソフトウェアコードは記号実行されても良い。このように、方法５００は、コンパイルされ次に実行されるのではなく、通常インタープリタにより実行されるプログラミング言語にも適用できる。
【００６３】
図６は、本願明細書に記載した少なくとも１つの実施形態に従って構成された、未完成ソフトウェアプログラムを分析する別の例示的な方法６００のフローチャートを示す。幾つかの実施形態では、方法６００は、図２の未完成ソフトウェアプログラムを分析するシステム２００のようなシステムにより実施されても良い。別個のブロックとして示したが、所望の実装に依存して、種々のブロックは、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
【００６４】
方法６００は、ブロック６０２で開始し、高レベルソフトウェアコードが記述されている間に、ソフトウェアプログラムの高レベルソフトウェアコードと関連付けられたトリガが検出されても良い。高レベルソフトウェアコードは、少なくとも１つの未完成関数及び少なくとも１つの完成関数を有しても良い。未完成関数は、構文エラーを有する関数であっても良く、コンパイルできない。完成関数は、構文エラーを有しないコンパイルできる関数であっても良い。幾つかの実施形態では、トリガは、高レベルソフトウェアコード内の変更、タイマ、又は高レベルソフトウェアコードに追加された変更の数に基づいても良い。
【００６５】
ブロック６０４で、トリガが検出されたか否かが決定されても良い。トリガが検出されると、方法６００は、ブロック６０６に進んでも良い。トリガが検出されないとき、方法６００は、ブロック６０２に進んでも良い。
【００６６】
ブロック６０６で、高レベルソフトウェアコードは分析されても良い。ブロック６０８、６１０、６１２は、高レベルソフトウェアコードの分析の種々の特徴を記述しても良い。
【００６７】
ブロック６０８で、高レベルソフトウェアコードの少なくとも一部はコンパイルされ、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコードを生成しても良い。幾つかの実施形態では、高レベルソフトウェアコードのコンパイルは、完成関数を識別するため及び未完成関数を識別するために、高レベルソフトウェアコードをパースすることを含む。高レベルソフトウェアコードのパースは、未完成関数を識別した後に継続しても良い。
【００６８】
ブロック６１０で、低レベルソフトウェアコードは、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にするよう、変更されても良い。幾つかの実施形態では、低レベルソフトウェアコードの変更は、未完成関数の呼び出しを未完成関数の戻り値の種類と類似の種類の記号変数で代用することを有しても良い。
【００６９】
ブロック６１２で、変更された低レベルソフトウェアコードは記号実行されても良い。幾つかの実施形態では、低レベルソフトウェアコード全体は、変更された低レベルソフトウェアコードが記号実行される前に変更されても良い。代替で又は追加で、低レベルソフトウェアコードの一部は、既に変更されている低レベルソフトウェアコードの第２の部分の記号実行と同時に変更されても良い。
【００７０】
幾つかの実施形態では、高レベルソフトウェアコードの分析は、高レベルソフトウェアコードの分析が最後に実行されて以来変更された高レベルソフトウェアコードの一部を識別するステップを更に有しても良い。上述の及び他の実施形態では、識別された変更された高レベルソフトウェアコードの部分は、コンパイルされる。
【００７１】
幾つかの実施形態では、高レベルソフトウェアコードの分析は、変更された低レベルソフトウェアコードの記号実行に基づきレポートを生成するステップを更に有しても良い。レポートは、ソフトウェアプログラム内の１又は複数のエラーを示しても良い。幾つかの実施形態では、高レベルソフトウェアコードの分析は、変更された低レベルソフトウェアコードの記号実行に基づきソフトウェアプログラムのための１又は複数のテストケースを生成するステップを更に有しても良い。１又は複数のテストケースは、低レベルソフトウェアコードを記号実行することにより識別されたソフトウェアプログラム内のエラーを生成するよう構成されても良い。
【００７２】
幾つかの実施形態では、方法６００は、ソフトウェアプログラムの記述及び／又は編集と同時に未完成ソフトウェアプログラムの周期的な記号分析を提供するために実行されても良い。上述の及び他たの実施形態では、トリガの検出及び低レベルソフトウェアコードの分析は、高レベルソフトウェアコードが記述され及び／又は編集されている間、繰り返されても良い。幾つかの実施形態では、方法６００は、コンパイルされ次に実行されるのではなく、通常インタープリタにより実行されるプログラミング言語にも適用できる。
【００７３】
本願明細書に記載した実施形態は、以下に更に詳細に議論するように、種々のコンピュータハードウェア又はソフトウェアモジュールを備えた特定用途又は汎用コンピュータの使用を含み得る。
【００７４】
本願明細書に記載した実施形態は、コンピュータにより実行可能な命令又はデータ構造を伝える又は格納しているコンピュータ可読媒体を用いて実施され得る。このようなコンピュータ可読媒体は、汎用又は特定目的コンピュータによりアクセスできる利用可能な媒体であり得る。例として且つ限定ではなく、このようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ又は他の光ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶装置を含むコンピュータ可読記憶媒体、又はコンピュータにより実行可能な命令若しくはデータ構造の形式で所望のプログラムコード手段を伝える若しくは格納するために用いられ汎用若しくは特定目的コンピュータによりアクセス可能な他の媒体を有し得る。上述の組合せも、コンピュータ可読媒体の範囲に包含され得る。
【００７５】
コンピュータにより実行可能な命令は、例えば、汎用コンピュータ、特定目的コンピュータ又は特定目的処理装置に特定の機能又は機能グループを実行させる命令及びデータを有する。本発明の主題は構造的特徴及び／又は方法論的動作に特有の言葉で記載されたが、本発明の主題は、特許請求の範囲に定められる上述の特定の特徴又は動作に限定されないことが理解されるべきである。むしろ、上述の特定の特徴及び動作は、特許請求の範囲の実施の例示的携帯として開示されたものである。
【００７６】
本願明細書で用いられるように、用語「モジュール」又は「コンポーネント」は、コンピューティングシステムで実行されるソフトウェアオブジェクト又はルーチンを表し得る。本願明細書に記載されたのと異なるコンポーネント、モジュール、エンジン及びサービスは、（例えば、別個のスレッドとして）コンピューティングシステムで実行されるオブジェクト又は処理として実施されても良い。本願明細書に記載されたシステム及び方法はソフトウェアで実施されることが望ましいが、ハードウェアによる実装又はソフトウェアとハードウェアの組合せも、可能であり想定される。この説明では、「コンピュータエンティティ」は、本願明細書で先に定められたようにコンピューティングシステム、又はコンピューティングシステムで実行されるモジュール若しくはモジュールの組合せであっても良い。
【００７７】
本願明細書に記載された全ての例及び条件文は、教育上の目的で、読者が本発明の原理及び発明者により考案された概念を理解するのを助け、技術を促進させるためであり、これらの特に記載された例及び条件に限定されないものと考えられるべきである。本発明の実施形態が詳細に記載されたが、種々の変更、置換及び修正が本発明の精神及び範囲から逸脱することなく行われうることが理解されるべきである。
【符号の説明】
【００７８】
１００  ソフトウェアエディタ
１１０  高レベルソフトウェアコードビューア
１２０  状態ウインドウ
１３０  分析モジュール
２０２  高レベルソフトウェアコード
２０４  変更された高レベルソフトウェアコード
２０６  パースされた高レベルソフトウェアコード
２０８  低レベルソフトウェアコード
２２０  検出モジュール
２３０  コンパイラ
２３２  パーサ
２３４  低レベルコード生成部
２５０  記号実行部
２５２  コード変更モジュール
２６０  レポート
２６２  テストケース
【図１】
2014211864.tif 000003
【図２】
2014211864.tif 000004
【図３Ａ】
2014211864.tif 000005
【図３Ｂ】
2014211864.tif 000006
【図４】
2014211864.tif 000007
【図５】
2014211864.tif 000008
【図６】
2014211864.tif 000009
【外国語明細書】
2014211864000001.pdf