JP2014211864A - 未完成ソフトウェアの分析 - Google Patents

未完成ソフトウェアの分析 Download PDF

Info

Publication number
JP2014211864A
JP2014211864A JP2014050448A JP2014050448A JP2014211864A JP 2014211864 A JP2014211864 A JP 2014211864A JP 2014050448 A JP2014050448 A JP 2014050448A JP 2014050448 A JP2014050448 A JP 2014050448A JP 2014211864 A JP2014211864 A JP 2014211864A
Authority
JP
Japan
Prior art keywords
software code
level software
function
incomplete
low
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014050448A
Other languages
English (en)
Other versions
JP6357814B2 (ja
Inventor
吉田 浩章
Hiroaki Yoshida
浩章 吉田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2014211864A publication Critical patent/JP2014211864A/ja
Application granted granted Critical
Publication of JP6357814B2 publication Critical patent/JP6357814B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】未完成ソフトウェアを分析する方法及び装置を提供する。
【解決手段】未完成ソフトウェアプログラムを分析するシステム200は、複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコード202を受信するステップを有する。複数の関数は、少なくとも1つの未完成関数及び少なくとも1つの完成関数を有する。コンパイラ230は、高レベルソフトウェアコードの少なくとも一部をコンパイルして、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコード208を生成するステップを更に有する。記号実行部250は、低レベルソフトウェアコードを変更して、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にするステップと、低レベルソフトウェアコードを記号実行するステップと、を更に有する。
【選択図】図2

Description

本願明細書で議論される実施形態は、未完成ソフトウェアの分析に関する。
記号実行は、ソフトウェアプログラムを動的に分析する技術である。記号実行は、入力値として、実際のデータの代わりに記号値を用い、記号表現としてプログラム変数の値を表す。その結果、記号実行されたソフトウェアプログラムにより計算された出力は、記号入力の関数として表現される。記号実行を通して、ソフトウェアプログラム内の各パスは、記号実行されても良い。パスに沿った記号実行が(正常に又はエラーで)終了するときはいつでも、パスに関連付けられた経路制約が解決され、解は、ソフトウェアプログラムを実行するために用いられ得る具体的なテスト入力を形成する。
記号実行は良好なテスト範囲を提供し、ソフトウェアプログラム内の大部分の又は全部のパスを対象とし得るテストケースを生成するが、記号実行は、時間がかかり、リソースを要する。さらに、ソフトウェアプログラムは、通常、ソフトウェアプログラム全体がパースされコンパイルされるように、プログラマがソフトウェアプログラムの全てのモジュール及び関数を書き終わった後に、ソフトウェアプログラムの機能を検証するために分析される。ソフトウェアプログラムは、ソフトウェアプログラム全体をパースしコンパイルし、次にソフトウェアプログラム内のエラーを識別するためにソフトウェアプログラムを動的に分析することにより、分析され得る。ユーザは、エラーを評価し確定できるようになる前に、ソフトウェアプログラムの動的分析を待たなければならない。完成したソフトウェアプログラムを分析するための記号実行の使用は、ソフトウェアプログラムを分析するための時間を増大させ、それにより、ソフトウェアプログラムの既に長い開発サイクルを更に長期化してしまう。
本願明細書で請求される主題は、上述のような欠点を解決する実施形態や上述のような環境でのみ機能する実施形態に限定されない。むしろ、この背景技術は、単に、本願明細書に記載される複数の実施形態が実施される技術分野の一例を説明するために提供される。
本開示は、未完成ソフトウェアを分析する方法及び装置を提供する。
一実施形態によると、未完成ソフトウェアプログラムを分析する方法は、複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコードを受信するステップを有しても良い。複数の関数は、少なくとも1つの未完成関数及び少なくとも1つの完成関数を有しても良い。方法は、高レベルソフトウェアコードの少なくとも一部をコンパイルして、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコードを生成するステップを更に有しても良い。方法は、低レベルソフトウェアコードを変更して、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にする(account for)ステップと、低レベルソフトウェアコードを記号実行するステップと、を更に有しても良い。
実施形態の目的及び利点が理解され、少なくとも特に特許請求の範囲で指摘された要素、特徴及び組合せを用いて達成されるだろう。上述の全体的説明及び以下の詳細な説明の両方は、例示及び説明のためであり、本発明の範囲を限定しないことが理解される。
例示的な実施形態は、添付の図面を用いて、更なる特異性及び詳細事項と共に記載され説明される。
例示的なソフトウェアエディタを示す。 未完成ソフトウェアプログラムを分析する例示的なシステムのブロック図である。 例示的な関数を示す。 記号変数代用後の図3Aの例示的な関数を示す。 未完成ソフトウェアプログラムを周期的に分析する例示的な方法のフローチャートである。 未完成ソフトウェアプログラムを分析する例示的な方法のフローチャートである。 未完成ソフトウェアプログラムを分析する別の例示的な方法のフローチャートである。
本願明細書に記載の幾つかの実施形態は、未完成ソフトウェアプログラムを分析する方法及びシステムに関する。特に、幾つかの実施形態は、記号実行を用いた未完成ソフトウェアプログラムの分析に関する。未完成ソフトウェアプログラムは、ユーザにより現在記述中のプログラムであっても良い。その結果、ソフトウェアプログラムの部分は完成し、ソフトウェアプログラムの他の部分は未完成であっても良い。特に、ソフトウェアプログラム内の種々の関数は、完成又は未完成であっても良い。
ソフトウェアプログラムの記述中に未完成ソフトウェアプログラムを分析することは、分析がソフトウェアプログラムの記述と同時に実行できるので、ソフトウェアプログラムの開発時間を増大しない。多くの場合には、ソフトウェアプログラムの記号実行が実行されるときあっても、ソフトウェアプログラムの記述は、ソフトウェアプログラムの動的分析を実行するときにより多くの時間がかかる。その結果、プログラムが記述され続けるとともに未完成ソフトウェアプログラムの記号分析を実行することは、ソフトウェアプログラムの開発時間を短縮し得る。
本発明の実施形態を、添付の図面を参照して以下に説明する。
図1は、本願明細書に記載の少なくとも1つの実施形態により構成される例示的なソフトウェアエディタ100を示す。ソフトウェアエディタ100は、ソフトウェアプログラムを開発するための、ユーザのためのインタフェースを提供するよう構成されても良い。幾つかの実施形態では、ソフトウェアエディタ100は、ソフトウェアプログラムを書く、変更する、コンパイルする、展開する及び/又はデバッグするのような種々の機能を提供するよう構成されても良い。幾つかの実施形態では、ソフトウェアエディタ100は、統合開発環境であっても良い。幾つかの実施形態では、ソフトウェアエディタ100は、高レベルソフトウェアコードの記述及び編集等を提供するソフトウェアエディタであっても良い。ソフトウェアエディタ100は、限定ではないがPerl、C、C++、C#、Java(登録商標)、JavaScript(登録商標)、Python、Ruby、アセンブリ言語、Fortran、COBOL(common business-oriented language)、SQL(structured query language)及びPHP(hypertext preproceesor)を含む種々のソフトウェアプログラミング言語と共に用いられるように構成されても良い。
ソフトウェアエディタ100は、図示のように、ソフトウェアプログラムを開発するユーザに機能を提供する種々のウインドウ及び/又はモジュールを有する。特に、ソフトウェアエディタ100は、高レベルソフトウェアコードビューア110、状態ウインドウ120、及び分析モジュール130を有する。
高レベルソフトウェアコードビューア110は、ソフトウェアプログラムの高レベルソフトウェアコードをユーザから受信するインタフェースとして構成されても良い。ユーザは、高レベルソフトウェアコードを高レベルソフトウェアコードビューア110に入力するために、タイプし、発話し、又は特定の他の方法を用いても良い。高レベルソフトウェアコードビューア110は、ソフトウェアエディタ100内で高レベルソフトウェアコードをユーザに提示するよう構成されても良い。例えば、ソフトウェアプログラムは、ソフトウェアエディタ100に入力され、高レベルソフトウェアコードビューア110によりユーザに提示されても良い。
高レベルソフトウェアコードは、本願明細書で用いられるように、テキストのような人間が読み取り可能な形式を用いて記述されるソフトウェアコードを示しても良い。高レベルソフトウェアコードは、ソースコードに類似していてもよく、限定ではないがPerl、C、C++、C#、Java、JavaScript、Python、Ruby、アセンブリ言語、Fortran、COBOL、SQL及びPHPを含む種々のプログラミング言語のソースコードを有しても良い。さらに、本願明細書で用いられるように、高レベルソフトウェアコードは、低レベルソフトウェアコードとは異なっても良い。本願明細書で用いられるように、低レベルソフトウェアコードは、限定ではないがバイトコード、オブジェクトコード、マシンコード、仮想命令、及びマシンコードの他の中間的表現を含む機械可読形式のソフトウェアコードを示しても良い。一般に、ソフトウェアプログラムの高レベルソフトウェアコードはユーザにより生成され、ソフトウェアプログラムの低レベルソフトウェアコードは、高レベルソフトウェアコードを用いてコンパイラ又は特定の他のモジュールにより生成される。したがって、高レベルソフトウェアコード及び低レベルソフトウェアコードは両方とも、単一であるが異なるレベルの抽象概念でソフトウェアプログラムを表し得る。
状態ウインドウ120は、高レベルソフトウェアコードビューア110内に提示されたソフトウェアプログラムの状態を提供するよう構成されても良い。例えば、状態ウインドウ120は、ソフトウェアプログラム内のエラーを示すレポートを提示するよう構成されても良い。代替で又は追加で、状態ウインドウ120は、ソフトウェアプログラムに関する他の情報を提供するよう構成されても良い。
分析モジュール130は、ソフトウェアエディタ100を用いて開発中の未完成ソフトウェアプログラムを分析するよう構成されても良い。特に、分析モジュール130は、ソフトウェアエディタ100を用いて開発中のソフトウェアプログラムの未完成高レベルソフトウェアコードを受信し、未完成高レベルソフトウェアコードをコンパイルして低レベルソフトウェアコードを生成し、低レベルソフトウェアコードを記号実行するよう構成されても良い。低レベルソフトウェアコードの記号実行に基づき、分析モジュール130は、未完成ソフトウェアプログラム内で識別されたエラーを示すレポートを生成するよう構成されても良い。レポートは、ソフトウェアエディタ100の状態ウインドウ120内に表示されても良い。代替で又は追加で、分析モジュール130は、未完成ソフトウェアプログラムを実行するために用いられ得るテストケースを生成するよう構成されても良い。幾つかの実施形態では、テストケースは、実行され状態ウインドウ120内に表示されたとき、未完成ソフトウェアプログラムにおいて、分析モジュール130により生成されたレポート内で示されるエラーを生成するよう構成されても良い。
幾つかの実施形態では、高レベルソフトウェアコードビューア110が高レベルソフトウェアコードをユーザから受信している間に、分析モジュール130は未完成ソフトウェアプログラムを分析しても良い。上述の及び他の実施形態では、特定の時間に現在開発/記述中のソフトウェアプログラムは、高レベルソフトウェアコードビューア110から、ソフトウェアエディタ100内のメモリから、又はソフトウェアエディタ100内の他のモジュールから、分析モジュール130により受信されても良い。特定の時間における未完成ソフトウェアは、完成した関数及び未完成関数を含む高レベルソフトウェアコードであっても良い。分析モジュール130は、上述のように高レベルソフトウェアコードを分析しても良い。
幾つかの実施形態では、分析モジュール130は、ソフトウェアプログラムの開発中に複数回、ソフトウェアプログラムを分析しても良い。例えば、分析モジュールは、ソフトウェアプログラムが未完成であり開発中の間に、トリガに基づき、ソフトウェアプログラムを分析するよう構成されても良い。トリガは、タイマ、又はソフトウェアプログラムの開発に関連付けられても良い。例えば、ソフトウェアプログラムの分析は、ソフトウェアプログラムの特定数の関数、キャラクタ、変数、又は特定の他の特徴の追加に基づきトリガされても良い。別の例として、分析は、ソフトウェアプログラムが編集され又は記述されている間に、5若しくは10分毎に又は他の周期的間隔でトリガされても良い。
幾つかの実施形態では、分析モジュール130は、トリガが生じる度に、現在開発中のソフトウェアプログラム全体を分析するよう構成されても良い。代替で又は追加で、分析モジュール130は、現在開発中のソフトウェアプログラム全体のうちの一部を分析するよう構成されても良い。上述の及び他の実施形態では、分析されるソフトウェアプログラム全体のうちの一部は、分析モジュール130により前に分析されたことのない部分であっても良い。例えば、分析される部分は、ソフトウェアプログラムが最後に分析されて以来、ソフトウェアプログラムに追加された部分であっても良い。
分析モジュール130は、本願明細書に記載されるように、ソフトウェアプログラムの分析及びソフトウェアプログラムの開発を同時に可能にし得る。その結果、ソフトウェアプログラムのための開発時間は、短縮され得る。代替で又は追加で、ソフトウェアプログラムの開発中にソフトウェアプログラムを分析することは、ソフトウェアプログラムの開発後に解決すべきエラーの数及び/又は重症度を低減できる。
本開示の範囲から逸脱することなくソフトウェアエディタ100に対し変更、追加又は省略が行われても良い。例えば、ソフトウェアエディタ100は、分析モジュール130を有しなくても良い。上述の及び他の実施形態では、分析モジュール130は、別のシステム又はソフトウェアの一部であっても良く、本願明細書に記載のようにソフトウェアエディタ100で開発中のソフトウェアプログラムを分析するために用いられても良い。別の例として、ソフトウェアエディタ100は、上述した以外の種々の他のモジュールを有しても良い。例えば、ソフトウェアエディタ100は、特にコンパイラ、デバッガを有しても良い。幾つかの実施形態では、分析モジュール130は、未完成高レベルソフトウェアコードの分析を実行するために、ソフトウェアエディタ100内の他のモジュールを用いても良い。例えば、分析モジュール130は、未完成高レベルソフトウェアコードの分析する際に、ソフトウェアエディタ100内のコンパイラを用いて支援しても良い。
図2は、本願明細書に記載した少なくとも1つの実施形態に従って構成された、未完成ソフトウェアプログラムを分析する例示的なシステム200のブロック図を示す。システム200は、本願明細書に記載のように未完成ソフトウェアプログラムの分析を実行するために、図1のソフトウェアエディタ100内に含まれ及び/又はソフトウェアエディタ100と共に動作しても良い。システム200は、ソフトウェアプログラムの開発中に、未完成ソフトウェアプログラムを分析するよう構成されても良い。システム200は、検出モジュール220、コンパイラ230、及び記号実行部250を有しても良い。コンパイラ230は、パーサ232、及び低レベルコード生成部234を有しても良い。記号実行部250は、コード変更モジュール252を有しても良い。検出モジュール220、コンパイラ230、及び記号実行部250の各々は、それらの間でデータ及び情報を共有できるよう、互いに通信するよう構成されても良い。
システム200は、高レベルソフトウェアコード202を受信するよう構成されても良い。高レベルソフトウェアコード202は、図1のソフトウェアエディタ100のようなソフトウェアエディタから、又は特定の他の情報源から受信されても良い。
高レベルソフトウェアコード202は、未完成であっても良い。特に、高レベルソフトウェアコード202は、複数の関数を有しても良い。ここで、これらの関数のうちの少なくとも1つは完成した関数であり、これらの関数のうちの少なくとも1つは未完成の関数であっても良い。関数は、該関数がパーサ232によりパース可能なとき完成していると考えられ、パーサ232によりパース不可能なとき未完成であると考えられても良い。高レベルソフトウェアコード202は、限定ではないがPerl、C、C++、C#、Java、JavaScript、Python、Ruby、アセンブリ言語、Fortran、COBOL、SQL及びPHPを含む種々のソフトウェアプログラミング言語のうちの任意の1つで記述されても良い。
高レベルソフトウェアコード202は、検出モジュール220により最初に受信されても良い。幾つかの実施形態では、検出モジュール220は、高レベルソフトウェアコード202を前に受信した高レベルソフトウェアコードと比較するよう構成されても良い。高レベルソフトウェアコード202のあるバージョンが、前に検出モジュール220により受信されたことがある場合、検出モジュール220は、高レベルソフトウェアコード202と高レベルソフトウェアコード202の前のバージョンとの間の差分を決定するよう構成されても良い。高レベルソフトウェアコード202の前のバージョンと異なると決定された高レベルソフトウェアコード202の部分は、検出モジュール220により、変更された高レベルソフトウェアコード204として出力されても良い。
高レベルソフトウェアコード202のあるバージョンが、前に検出モジュール220により受信されたことがない場合、或いは、検出モジュール220が高レベルソフトウェアコード202の前のバージョンが前に受信されたことがあるかどうかを決定できない場合(例えば、高レベルソフトウェアコード202が、前のバージョンと比較したとき実質的に新しいソフトウェアプログラムであるような程、変更されている場合)、検出モジュール220は、高レベルソフトウェアコード202を変更された高レベルソフトウェアコード204として出力しても良い。
コンパイラ230は、変更された高レベルソフトウェアコード204を受信するよう構成されても良い。特に、パーサ232は、変更された高レベルソフトウェアコード204を受信するよう構成されても良い。パーサ232は、変更された高レベルソフトウェアコード204を分析して、変更された高レベルソフトウェアコード204のどの部分が構文上正しいかを、変更された高レベルソフトウェアコード204のプログラミング言語に基づき決定するよう構成されても良い。特に、パーサ232は、構文上正しい関数、及び構文上正しくない関数を決定するよう構成されても良い。構文上正しい関数は、ここでは完成した関数として考えられ、構文上正しくない関数は、ここでは未完成関数として考えられても良い。
標準的なパーサは、パーサが高レベルソフトウェアコードの一部が構文上正しくないと決定するまで、高レベルソフトウェアコードをパースし得る。パーサ232は、構文上正しくない変更された高レベルソフトウェアコード204の部分を識別した後も、変更された高レベルソフトウェアコード204の部分をパースするよう構成されても良い。上述の及び他の実施形態では、パーサ232が関数が構文上正しくない(又は未完成である)と決定したとき、パーサ232は、未完成関数の残りの部分をスキップしても良く、変更された高レベルソフトウェアコード204内の他の関数をパースし続けても良い。このように、パーサ232は、パーサ232が未完成関数を識別した後に完成関数がパースされる場合でも、変更された高レベルソフトウェアコード204内の完成関数をパースしても良い。
パーサ232は、パースした完成関数をパースされた高レベルソフトウェアコード206として出力するよう構成されても良い。パースされた高レベルソフトウェアコード206は、低レベルコード生成部234へ送信されても良い。幾つかの実施形態では、パースされた高レベルソフトウェアコード206は、パーサ232により生成されたパースツリーの形式であっても良い。パースツリーは、変更された高レベルソフトウェアコード204の完成関数に含まれる要素間の構文上の関係を示しても良い。
幾つかの実施形態では、パーサ232は、変更された高レベルソフトウェアコード204内の関数が未完成か完成しているかを示すルックアップテーブルを生成するよう構成されても良い。ルックアップテーブルは、未完成関数に対する戻り値の種類のような情報を有しても良い。上述の及び他の実施形態では、記号実行部250及び特にコード変更モジュール252は、ルックアップテーブルにアクセスしても良い。
低レベルコード生成部234は、パースされた高レベルソフトウェアコード206に基づき、低レベルソフトウェアコード208を生成するよう構成されても良い。特に、低レベルコード生成部234は、パースされた高レベルソフトウェアコード206を低レベルソフトウェアコード208に変換しても良い。低レベルソフトウェアコード208は、記号実行部250に低レベルソフトウェアコード208を記号実行させる、記号実行部250固有の命令を有しても良い。例えば、幾つかの実施形態では、低レベルソフトウェアコード208は、記号実行部250による実行のために記号形式であっても良い。幾つかの実施形態では、低レベルコード生成部234は、記号実行部250による記号実行のために、低レベルソフトウェアコード208を最適化するよう更に構成されても良い。
記号実行部250は、低レベルコード生成部234から低レベルソフトウェアコード208を受信し、低レベルソフトウェアコード208を記号実行するよう構成されても良い。幾つかの実施形態では、低レベルソフトウェアコード208は、記号形式であり、したがって記号実行部250による記号実行の準備ができていても良い。代替で、記号実行部250は、低レベルソフトウェアコード208の記号実行の前又はそれと同時に、低レベルソフトウェアコード208を記号形式に変換しても良い。
低レベルソフトウェアコード208を記号実行することにより、記号実行部250は、低レベルソフトウェアコード208内の一部の、大部分の、又は全部のパスを分析しても良い。低レベルソフトウェアコード208内のパスの分析に基づき、記号実行部250は、低レベルソフトウェアコード208内のエラーを識別するよう構成されても良い。エラーは、特に、論理的エラー、不正な記憶位置のアクセス、初期化されないポインタ、ゼロによる除算、帯域外メモリアクセス、メモリが割り当てられるが開放されないメモリリーク、を有しても良い。識別されたエラーは、集められ、レポート260で出力されても良い。幾つかの実施形態では、レポート260は、高レベルソフトウェアコード202を開発しているユーザに提示されても良い。例えば、レポート260又はその一部は、図1の状態ウインドウ120のような状態ウインドウ内に表示されても良い。
幾つかの実施形態では、記号実行部250は、分析される低レベルソフトウェアコード208内のパスの記号パス条件を生成するよう構成されても良い。記号パス条件は、制約ソルバを用いて解決されても良い。制約ソルバの出力は、テストケース262であっても良い。テストケース262は、記号実行された低レベルソフトウェアコード208内のパスに従う低レベルソフトウェアコード208の具体的な実行を刺激するために用いられ得る1又は複数の具体的な変数を有しても良い。幾つかの実施形態では、テストケース262は、低レベルソフトウェアコード208の具体的な実行を刺激するために用いられると、レポート260内に含まれるエラーを生じる具体的な変数を有しても良い。テストケース262を用いてエラーを生成できることは、デバッギングプログラム又は他のプログラムを用いてエラーを識別し、理解し及び/又は正すとき、ユーザを支援する。
幾つかの実施形態では、記号実行部250により記号実行されている低レベルソフトウェアコード208は、未完成関数の呼び出しを有しても良い。例えば、低レベルソフトウェアコード208内の完成した関数は、未完成関数の呼び出しを有しても良い。低レベルソフトウェアコード208内の未完成関数の呼び出しは、未完成関数が低レベルソフトウェアコード208内で定められていないので、低レベルソフトウェアコード208の記号実行において問題になり得る。例えば、未完成関数の戻り値に依存する又はそれを用いる演算又は変数を含む完成関数は、未完成関数が定められていないために戻り値が存在しないので、幾つかの状況では、未完成関数の呼び出しを通り越して記号実行できない。
図3Aは、本願明細書に記載された少なくとも1つの実施形態により構成された、未完成関数であるfunctionCの戻り値を用いる例示的な関数(function)300を示す。関数300は、functionBの戻り値がvariable2に等しく設定され、完成関数functionBの呼び出しを有するライン302と、functionCの戻り値がvariable3に等しく設定され、未完成関数functionCの呼び出しを有するライン304と、を含む。ライン306では、variable3は、関数300に対する戻り値を決定するために、他の変数と共に用いられる。関数300の記号実行は、幾つかの状況では、記号実行部が未完成関数、したがって未定義の関数functionCの呼び出しをどのように扱うべきかを理解できないので、ライン304を通り越して進めない。
図2の議論に戻ると、幾つかの実施形態では、記号実行部250のコード変更モジュール252は、低レベルソフトウェアコード208内の未完成関数の呼び出しを識別し、低レベルソフトウェアコード208が未完成関数の呼び出しを含むとき、低レベルソフトウェアコード208を変更して低レベルソフトウェアコード208の記号実行を改良するよう構成されても良い。
幾つかの実施形態では、低レベルソフトウェアコード208内の未完成関数の呼び出しを識別するために、コード変更モジュール252は、先ず、低レベルソフトウェアコード208内の各関数呼び出しを識別しても良い。関数呼び出しを識別した後に、コード変更モジュール252は、パーサ232により生成され得るルックアップテーブルのような、関数が未完成関数か完成関数かを示すルックアップテーブルを参照しても良い。関数が未完成関数であるとき、コード変更モジュール252は、低レベルソフトウェアコード208を変更して、未完成関数の呼び出しを不具にしても良い。
コード変更モジュール252は、低レベルソフトウェアコード208内で未完成関数がどのように呼び出されるかに基づき、低レベルソフトウェアコード208を異なる方法で変更しても良い。例えば、低レベルソフトウェアコード208は、未完成関数の呼び出しを含み、未完成関数の戻り値に設定される変数を有しても良い。上述の及び他の実施形態では、コード変更モジュール252は、未完成関数の呼び出しを、未完成関数の戻り値と同じ種類の記号変数で代用するよう構成されても良い。未完成関数の呼び出しを記号変数で代用することにより、未完成関数の呼び出しを含む低レベルソフトウェアコード208は、記号実行部250により記号実行できる。図3Bは、本願明細書に記載の少なくとも1つの実施形態により構成される、図3Aの関数300内の記号変数代用の結果である例示的な関数(function)300‘を示す。関数300‘は、完成関数functionBの呼び出しを含むライン302と、未完成関数functionCの呼び出しをsymbolicvariableという記号変数で代用したことにより関数300のライン304と異なるライン304’を有する。
図2の議論に戻ると、幾つかの実施形態では、記号実行部250が低レベルソフトウェアコード208の記号実行を開始する前に、コード変更モジュール252は、未完成関数の呼び出しを識別し、低レベルソフトウェアコード208を変更するよう構成されても良い。代替で又は追加で、コード変更モジュール252は、未完成関数の呼び出しを識別し、低レベルソフトウェアコード208の記号実行中に低レベルソフトウェアコード208を変更するよう構成されても良い。例えば、低レベルソフトウェアコード208の最初の命令が記号実行される間、及び/又は最初の命令が記号実行された後且つ低レベルソフトウェアコード208の2番目の命令が記号実行される前に、コード変更モジュール252は、2番目の命令が未完成関数の呼び出しであるかどうかを決定しても良い。2番目の命令が未完成関数の呼び出しであるとき、コード変更モジュール252は、2番目の命令及び/又は低レベルソフトウェアコード208の他の部分を変更して、未完成関数の呼び出しを不具にしても良い。
本開示の範囲から逸脱することなくシステム200に対し変更、追加又は省略が行われても良い。例えば、幾つかの実施形態では、システム200は、検出モジュール220を有しなくても良い。上述の及び他の実施形態では、システム200により受信された高レベルソフトウェアコード202は、コンパイラ230を通過しても良い。
幾つかの実施形態では、コンパイラ230及び記号実行部250は、インタープリタのような単一モジュールの部分を形成しても良い。上述の及び他の実施形態では、高レベルソフトウェアコード202のパース、低レベルソフトウェアコード208の生成、及び低レベルソフトウェアコード208の記号実行は、インタープリタにより実行されても良い。さらに、上述の及び他の実施形態では、パース、生成、及び記号実行は、別個のステップとして実行されなくても良い。高レベルソフトウェアコード202の一部がパースされ、該一部のために低レベルソフトウェアコードが生成され、該一部が、高レベルソフトウェアコードの他の部分がパースされ、そして対応する低レベルソフトウェアコードを生成し記号実行する前に、記号実行されても良い。
図4は、本願明細書に記載した少なくとも1つの実施形態に従って構成された、未完成ソフトウェアプログラムを周期的に分析する例示的な方法400のフローチャートを示す。方法400は、幾つかの実施形態では、図2のシステム200のようなシステムにより実施されても良い。別個のブロックとして示したが、所望の実装に依存して、種々のブロックは、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
方法400は、ブロック402で開始し、未完成高レベルソフトウェアコードの分析するためのトリガが検出されても良い。幾つかの実施形態では、トリガは、タイマに関連付けられても良い。例えば、トリガは、未完成高レベルソフトウェアコードを編集し又は記述する特定の時間間隔が経過した後に生じ検出されても良い。例示的なタイマ間隔は、5分、10分、又は15分を有しても良い。代替で又は追加で、トリガは、未完成高レベルソフトウェアコードに特定量の変更が行われた後に、生じ、検出されても良い。その結果、トリガは、未完成高レベルソフトウェアコードの開発中に周期的に生じ検出されても良い。トリガが検出されると、方法400は、ブロック406に進んでも良い。トリガが検出されないとき、方法400は、トリガが検出されるのを待っても良い。
ブロック406で、未完成高レベルソフトウェアコードが最後に分析されて以来変更された、未完成高レベルソフトウェアコードの部分が識別されても良い。ブロック408で、未完成高レベルソフトウェアコードの変更された部分は、パースされても良い。未完成高レベルソフトウェアコードの変更された部分がパースされる間、未完成高レベルソフトウェアコードの変更された部分の完成関数及び未完成関数が識別されても良い。
ブロック410で、低レベルソフトウェアコードは、未完成高レベルソフトウェアコードのパースされ及び変更された部分、特に変更された未完成高レベルソフトウェアコードのパースされた完成関数に基づき、生成されても良い。幾つかの実施形態では、低レベルソフトウェアコードも最適化されても良い。
ブロック412で、低レベルソフトウェアコードが未完成関数の1又は複数の呼び出しを有するかどうかが決定されても良い。低レベルソフトウェアコードが1又は複数の未完成関数の呼び出しを有するとき、方法400はブロック414に進んでも良い。低レベルソフトウェアコードが1又は複数の未完成関数の呼び出しを有しないとき、方法400はブロック416に進んでも良い。
ブロック414で、低レベルソフトウェアコードは、低レベルソフトウェアコード内の1又は複数の未完成関数の呼び出しを不具にするよう、変更されても良い。幾つかの実施形態では、変数が1又は複数の未完成関数の呼び出しの戻り値に設定される場合、未完成関数の呼び出しは、1又は複数の未完成関数の戻り値と同種類の記号変数で代用されても良い。
ブロック416で、低レベルソフトウェアコードは記号実行されても良い。ブロック418で、低レベルソフトウェアコードで識別されたエラーを含むレポートが生成されても良い。追加で又は代替で、1又は複数のテストケースは、低レベルソフトウェアコードの記号実行に基づき生成されても良い。ブロック418の次にブロック404が続き、方法400は、未完成高レベルソフトウェアコードを再び分析するための別のトリガの検出を待機しても良い。
方法400の実施形態は、ソフトウェアプログラムの開発中の未完成ソフトウェアプログラムの分析を提供する。特に、方法400は、ソフトウェアプログラムの記述及び/又は編集と同時に未完成ソフトウェアプログラムの周期的な記号分析を提供する。ソフトウェアプログラムの記述及び/又は編集と同時に未完成ソフトウェアプログラムを周期的に記号分析することにより、ソフトウェアプログラムの開発時間が短縮できる。
当業者は、この処理及び本願明細書に開始した他の処理及び方法において、その処理及び方法で実行される機能が異なる順序で実施されても良いことを理解するだろう。さらに、概略のステップ及び動作は、単に例として提供され、幾つかのステップ及び動作は、開示の実施形態の本質から逸脱することなく、任意であり、より少ないステップ及び動作に組み合わされ、又は追加ステップ及び動作に拡張されても良い。例えば、ブロック406は、方法400から省略されても良い。上述の及び他の実施形態では、高レベルソフトウェアコードの全部及び高レベルソフトウェアコードの変更された部分だけが方法400により分析されても良い。さらに、方法400は、コンパイルされ次に実行されるのではなく、通常インタープリタにより実行されるプログラミング言語にも適用できる。
別の例として、ブロック412、414、416は結合されても良い。上述の及び他の実施形態では、低レベルソフトウェアコードは、未完成関数の呼び出しについて調べられても良く、低レベルソフトウェアコードの記号実行中に1又は複数の未完成関数の呼び出しを不具にするよう変更されても良い。例えば、低レベルソフトウェアの記号実行中に関数の呼び出しに遭遇すると、該呼び出しは、該呼び出しが未完成関数へのものかどうかを決定するために調べられ得る。呼び出しが未完成関数へのものであるとき、呼び出しは、本願明細書で議論したように記号変数で代用されても良い。このように、低レベルソフトウェアコードは、低レベルソフトウェアコードの記号実行中に変更されても良い。
図5は、本願明細書に記載した少なくとも1つの実施形態に従って構成された、未完成ソフトウェアプログラムを分析する例示的な方法500のフローチャートを示す。方法500は、幾つかの実施形態では、図2のシステム200のようなシステムにより実施されても良い。別個のブロックとして示したが、所望の実装に依存して、種々のブロックは、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
方法500は、ブロック502で開始し、複数の関数を有するソフトウェアプログラムの高レベルソフトウェアコードが受信されても良い。ソフトウェアプログラムの複数の関数は、少なくとも1つの未完成関数及び少なくとも1つの完成関数を有しても良い。未完成関数は、構文エラーを有するコンパイルできない関数であっても良い。完成関数は、構文エラーを有しないコンパイルできる関数であっても良い。
ブロック504で、高レベルソフトウェアコードの少なくとも一部はコンパイルされ、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコードを生成しても良い。幾つかの実施形態では、高レベルソフトウェアコードのコンパイルは、完成関数を識別するため及び未完成関数を識別するために、高レベルソフトウェアコードをパースすることを含む。高レベルソフトウェアコードのパースは、未完成関数を識別した後に継続しても良い。言い換えると、高レベルソフトウェアコードのパースは、未完成関数、例えば構文エラーを有する関数が識別されたときに、停止しなくても良い。むしろ、高レベルソフトウェアコードのパースは、高レベルソフトウェアコード内の全ての関数がパースされ未完成関数として識別されるまで、継続しても良い。
ブロック506で、低レベルソフトウェアコードは、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にするよう、変更されても良い。幾つかの実施形態では、低レベルソフトウェアコードの変更は、未完成関数の呼び出しを未完成関数の戻り値の種類と類似の種類の記号変数で代用することを有しても良い。
ブロック508で、変更された低レベルソフトウェアコードは記号実行されても良い。幾つかの実施形態では、低レベルソフトウェアコード全体は、変更された低レベルソフトウェアコードが記号実行される前に変更されても良い。代替で又は追加で、低レベルソフトウェアコードの一部は、既に変更されている低レベルソフトウェアコードの第2の部分の記号実行と同時に変更されても良い。
幾つかの実施形態では、方法500は、変更された低レベルソフトウェアコードの記号実行に基づきレポートを生成するステップを更に有しても良い。レポートは、ソフトウェアプログラム内の1又は複数のエラーを示しても良い。例えば、レポートは、特に、論理的エラー、不正な記憶位置のアクセス、初期化されないポインタ、ゼロによる除算、帯域外メモリアクセス、メモリが割り当てられるが開放されないメモリリーク、を有しても良い。
幾つかの実施形態では、方法500は、変更された低レベルソフトウェアコードの記号実行に基づきソフトウェアプログラムのための1又は複数のテストケースを生成するステップを更に有しても良い。1又は複数のテストケースは、低レベルソフトウェアコードを記号実行することにより識別されたソフトウェアプログラム内のエラーを生成するよう構成されても良い。
幾つかの実施形態では、方法500は、ソフトウェアプログラムの記述及び/又は編集と同時に未完成ソフトウェアプログラムの周期的な記号分析を提供するために実行されても良い。
幾つかの実施形態では、方法500内の種々のブロックは、高レベルソフトウェアコードに対して離散的ステップとして実行されなくても良い。例えば、ブロック504で、高レベルソフトウェアコードの一部は、低レベルソフトウェアコードを生成するためにコンパイルされても良い。ブロック506で、低レベルソフトウェアコードは変更されても良い。次に、ブロック508で、変更された低レベルソフトウェアコードは記号実行されても良い。同時に又は後の時間に、ブロック504で、高レベルソフトウェアコードの別の一部が、低レベルソフトウェアコードを生成するためにコンパイルされても良い。ブロック506で、低レベルソフトウェアコードは変更されても良い。次に、ブロック508で、変更された低レベルソフトウェアコードは記号実行されても良い。このように、方法500は、コンパイルされ次に実行されるのではなく、通常インタープリタにより実行されるプログラミング言語にも適用できる。
図6は、本願明細書に記載した少なくとも1つの実施形態に従って構成された、未完成ソフトウェアプログラムを分析する別の例示的な方法600のフローチャートを示す。幾つかの実施形態では、方法600は、図2の未完成ソフトウェアプログラムを分析するシステム200のようなシステムにより実施されても良い。別個のブロックとして示したが、所望の実装に依存して、種々のブロックは、更なるブロックに分割され、少ないブロックに結合され、又は除去されても良い。
方法600は、ブロック602で開始し、高レベルソフトウェアコードが記述されている間に、ソフトウェアプログラムの高レベルソフトウェアコードと関連付けられたトリガが検出されても良い。高レベルソフトウェアコードは、少なくとも1つの未完成関数及び少なくとも1つの完成関数を有しても良い。未完成関数は、構文エラーを有する関数であっても良く、コンパイルできない。完成関数は、構文エラーを有しないコンパイルできる関数であっても良い。幾つかの実施形態では、トリガは、高レベルソフトウェアコード内の変更、タイマ、又は高レベルソフトウェアコードに追加された変更の数に基づいても良い。
ブロック604で、トリガが検出されたか否かが決定されても良い。トリガが検出されると、方法600は、ブロック606に進んでも良い。トリガが検出されないとき、方法600は、ブロック602に進んでも良い。
ブロック606で、高レベルソフトウェアコードは分析されても良い。ブロック608、610、612は、高レベルソフトウェアコードの分析の種々の特徴を記述しても良い。
ブロック608で、高レベルソフトウェアコードの少なくとも一部はコンパイルされ、完成関数をコンパイルし及び未完成関数を除外することにより低レベルソフトウェアコードを生成しても良い。幾つかの実施形態では、高レベルソフトウェアコードのコンパイルは、完成関数を識別するため及び未完成関数を識別するために、高レベルソフトウェアコードをパースすることを含む。高レベルソフトウェアコードのパースは、未完成関数を識別した後に継続しても良い。
ブロック610で、低レベルソフトウェアコードは、低レベルソフトウェアコード内の未完成関数の呼び出しを不具にするよう、変更されても良い。幾つかの実施形態では、低レベルソフトウェアコードの変更は、未完成関数の呼び出しを未完成関数の戻り値の種類と類似の種類の記号変数で代用することを有しても良い。
ブロック612で、変更された低レベルソフトウェアコードは記号実行されても良い。幾つかの実施形態では、低レベルソフトウェアコード全体は、変更された低レベルソフトウェアコードが記号実行される前に変更されても良い。代替で又は追加で、低レベルソフトウェアコードの一部は、既に変更されている低レベルソフトウェアコードの第2の部分の記号実行と同時に変更されても良い。
幾つかの実施形態では、高レベルソフトウェアコードの分析は、高レベルソフトウェアコードの分析が最後に実行されて以来変更された高レベルソフトウェアコードの一部を識別するステップを更に有しても良い。上述の及び他の実施形態では、識別された変更された高レベルソフトウェアコードの部分は、コンパイルされる。
幾つかの実施形態では、高レベルソフトウェアコードの分析は、変更された低レベルソフトウェアコードの記号実行に基づきレポートを生成するステップを更に有しても良い。レポートは、ソフトウェアプログラム内の1又は複数のエラーを示しても良い。幾つかの実施形態では、高レベルソフトウェアコードの分析は、変更された低レベルソフトウェアコードの記号実行に基づきソフトウェアプログラムのための1又は複数のテストケースを生成するステップを更に有しても良い。1又は複数のテストケースは、低レベルソフトウェアコードを記号実行することにより識別されたソフトウェアプログラム内のエラーを生成するよう構成されても良い。
幾つかの実施形態では、方法600は、ソフトウェアプログラムの記述及び/又は編集と同時に未完成ソフトウェアプログラムの周期的な記号分析を提供するために実行されても良い。上述の及び他たの実施形態では、トリガの検出及び低レベルソフトウェアコードの分析は、高レベルソフトウェアコードが記述され及び/又は編集されている間、繰り返されても良い。幾つかの実施形態では、方法600は、コンパイルされ次に実行されるのではなく、通常インタープリタにより実行されるプログラミング言語にも適用できる。
本願明細書に記載した実施形態は、以下に更に詳細に議論するように、種々のコンピュータハードウェア又はソフトウェアモジュールを備えた特定用途又は汎用コンピュータの使用を含み得る。
本願明細書に記載した実施形態は、コンピュータにより実行可能な命令又はデータ構造を伝える又は格納しているコンピュータ可読媒体を用いて実施され得る。このようなコンピュータ可読媒体は、汎用又は特定目的コンピュータによりアクセスできる利用可能な媒体であり得る。例として且つ限定ではなく、このようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROM又は他の光ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶装置を含むコンピュータ可読記憶媒体、又はコンピュータにより実行可能な命令若しくはデータ構造の形式で所望のプログラムコード手段を伝える若しくは格納するために用いられ汎用若しくは特定目的コンピュータによりアクセス可能な他の媒体を有し得る。上述の組合せも、コンピュータ可読媒体の範囲に包含され得る。
コンピュータにより実行可能な命令は、例えば、汎用コンピュータ、特定目的コンピュータ又は特定目的処理装置に特定の機能又は機能グループを実行させる命令及びデータを有する。本発明の主題は構造的特徴及び/又は方法論的動作に特有の言葉で記載されたが、本発明の主題は、特許請求の範囲に定められる上述の特定の特徴又は動作に限定されないことが理解されるべきである。むしろ、上述の特定の特徴及び動作は、特許請求の範囲の実施の例示的携帯として開示されたものである。
本願明細書で用いられるように、用語「モジュール」又は「コンポーネント」は、コンピューティングシステムで実行されるソフトウェアオブジェクト又はルーチンを表し得る。本願明細書に記載されたのと異なるコンポーネント、モジュール、エンジン及びサービスは、(例えば、別個のスレッドとして)コンピューティングシステムで実行されるオブジェクト又は処理として実施されても良い。本願明細書に記載されたシステム及び方法はソフトウェアで実施されることが望ましいが、ハードウェアによる実装又はソフトウェアとハードウェアの組合せも、可能であり想定される。この説明では、「コンピュータエンティティ」は、本願明細書で先に定められたようにコンピューティングシステム、又はコンピューティングシステムで実行されるモジュール若しくはモジュールの組合せであっても良い。
本願明細書に記載された全ての例及び条件文は、教育上の目的で、読者が本発明の原理及び発明者により考案された概念を理解するのを助け、技術を促進させるためであり、これらの特に記載された例及び条件に限定されないものと考えられるべきである。本発明の実施形態が詳細に記載されたが、種々の変更、置換及び修正が本発明の精神及び範囲から逸脱することなく行われうることが理解されるべきである。
100 ソフトウェアエディタ
110 高レベルソフトウェアコードビューア
120 状態ウインドウ
130 分析モジュール
202 高レベルソフトウェアコード
204 変更された高レベルソフトウェアコード
206 パースされた高レベルソフトウェアコード
208 低レベルソフトウェアコード
220 検出モジュール
230 コンパイラ
232 パーサ
234 低レベルコード生成部
250 記号実行部
252 コード変更モジュール
260 レポート
262 テストケース

Claims (20)

  1. 未完成ソフトウェアプログラムを分析する方法であって、
    複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコードを受信するステップであって、前記複数の関数は、少なくとも1つの未完成関数と少なくとも1つの完成関数とを含む、ステップと、
    前記高レベルソフトウェアコードの少なくとも一部をコンパイルするステップであって、前記完成関数をコンパイルし及び前記未完成関数を除外することにより、低レベルソフトウェアコードを生成する、ステップと、
    前記低レベルソフトウェアコード内の前記未完成関数の呼び出しを不具にするよう前記低レベルソフトウェアコードを変更するステップと、
    を有する方法。
  2. 前記変更するステップは、前記ソフトウェアコードが記号実行される前又はその間に生じる、請求項1に記載の方法。
  3. 前記変更するステップは、前記未完成関数の前記呼び出しを記号変数で代用するステップを有する、請求項1に記載の方法。
  4. 前記記号変数の種類は、前記未完成関数の戻り値の種類と関連する、請求項3に記載の方法。
  5. 前記変更された低レベルソフトウェアコードの前記記号実行に基づきレポートを生成するステップであって、前記レポートは前記ソフトウェアプログラム内の1又は複数のエラーを示す、ステップ、を更に有する請求項1に記載の方法。
  6. 前記変更された低レベルソフトウェアコードの前記記号実行に基づき前記ソフトウェアプログラムのための1又は複数のテストケースを生成するステップであって、前記1又は複数のテストケースは、前記変更された低レベルソフトウェアコードを記号実行することにより識別された前記ソフトウェアプログラム内のエラーを生成するよう構成される、ステップ、を更に有する請求項1に記載の方法。
  7. 前記高レベルソフトウェアコードをコンパイルするステップは、前記高レベルソフトウェアコードをパースするステップであって、前記複数の関数のうちの前記完成関数を識別し、前記複数の関数のうちの前記未完成関数を識別する、ステップを有し、前記高レベルソフトウェアコードをパースするステップは、前記未完成関数を識別した後、継続する、請求項1に記載の方法。
  8. システムに未完成ソフトウェアプログラムを分析する動作を実行させるため、コンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、前記動作は、
    複数の関数を含むソフトウェアプログラムの高レベルソフトウェアコードを受信するステップであって、前記複数の関数は、少なくとも1つの未完成関数と少なくとも1つの完成関数とを含む、ステップと、
    前記高レベルソフトウェアコードの少なくとも一部をコンパイルするステップであって、前記完成関数をコンパイルし及び前記未完成関数を除外することにより、低レベルソフトウェアコードを生成する、ステップと、
    前記低レベルソフトウェアコード内の前記未完成関数の呼び出しを不具にするよう前記低レベルソフトウェアコードを変更するステップと、
    を有する、プロセッサ。
  9. 前記変更するステップは、前記ソフトウェアコードが記号実行される前又はその間に生じる、請求項8に記載のプロセッサ。
  10. 前記変更するステップは、前記未完成関数の前記呼び出しを記号変数で代用するステップを有する、請求項8に記載のプロセッサ。
  11. 前記記号変数の種類は、前記未完成関数の戻り値の種類と関連する、請求項10に記載のプロセッサ。
  12. 前記高レベルソフトウェアコードをコンパイルするステップは、前記高レベルソフトウェアコードをパースするステップであって、前記複数の関数のうちの前記完成関数及び前記複数の関数のうちの前記未完成関数を識別する、ステップを有し、前記高レベルソフトウェアコードをパースするステップは、前記未完成関数を識別した後、継続する、請求項8に記載のプロセッサ。
  13. 未完成ソフトウェアプログラムを分析する方法であって、
    ソフトウェアプログラムの高レベルソフトウェアコードが記述されている間、前記高レベルソフトウェアコードに関連付けられたトリガを検出するステップであって、前記高レベルソフトウェアコードは、少なくとも1つの未完成関数と少なくとも1つの完成関数を含む、ステップと、
    前記トリガが検出されると、前記高レベルソフトウェアコードを分析するステップと、
    を有し、前記分析するステップは、
    前記高レベルソフトウェアコードの一部をコンパイルするステップであって、前記完成関数をコンパイルし及び前記未完成関数を除外することにより、低レベルソフトウェアコードを生成する、ステップと、
    前記低レベルソフトウェアコード内の前記未完成関数の呼び出しを不具にするよう、前記低レベルソフトウェアコードを変更するステップと、
    前記変更された低レベルソフトウェアコードを記号実行するステップと、
    を有する、方法。
  14. 前記変更するステップは、前記ソフトウェアコードが記号実行される前又はその間に生じる、請求項13に記載の方法。
  15. 前記変更するステップは、前記未完成関数の前記呼び出しを記号変数で代用するステップを有する、請求項13に記載の方法。
  16. 前記記号変数の種類は、前記未完成関数の戻り値の種類と関連する、請求項15に記載の方法。
  17. 前記トリガは、前記高レベルソフトウェアコード内の変更、タイマ、又は前記高レベルソフトウェアコードに追加された変更の数に基づく、請求項13に記載の方法。
  18. 前記検出するステップ及び前記分析するステップは、前記高レベルソフトウェアコードが記述され及び/又は編集されている間、繰り返される、請求項13に記載の方法。
  19. 前記分析するステップは、前記高レベルソフトウェアコードの最後の分析以来、変更された前記高レベルソフトウェアコードの一部を識別するステップであって、コンパイルされた前記高レベルソフトウェアコードの前記一部は、前記識別された部分である、請求項18に記載の方法。
  20. 前記分析するステップは、
    前記変更された低レベルソフトウェアコードの前記記号実行に基づきレポートを生成するステップであって、前記レポートは、前記ソフトウェアプログラム内の1又は複数のエラーを示す、ステップと、及び/又は
    前記変更された低レベルソフトウェアコードの前記記号実行に基づき前記ソフトウェアプログラムのための1又は複数のテストケースを生成するステップであって、前記1又は複数のテストケースは、前記変更された低レベルソフトウェアコードを記号実行することにより識別された前記ソフトウェアプログラム内のエラーを生成するよう構成される、ステップと、
    を有する、請求項13に記載の方法。
JP2014050448A 2013-03-14 2014-03-13 未完成ソフトウェアの分析 Active JP6357814B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/830,292 2013-03-14
US13/830,292 US9454347B2 (en) 2013-03-14 2013-03-14 Analyzing incomplete software

Publications (2)

Publication Number Publication Date
JP2014211864A true JP2014211864A (ja) 2014-11-13
JP6357814B2 JP6357814B2 (ja) 2018-07-18

Family

ID=51534670

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014050448A Active JP6357814B2 (ja) 2013-03-14 2014-03-13 未完成ソフトウェアの分析

Country Status (2)

Country Link
US (1) US9454347B2 (ja)
JP (1) JP6357814B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015133031A (ja) * 2014-01-15 2015-07-23 株式会社日立製作所 プログラム分析装置及びプログラム分析方法
US9619375B2 (en) * 2014-05-23 2017-04-11 Carnegie Mellon University Methods and systems for automatically testing software
US9697018B2 (en) * 2015-05-29 2017-07-04 International Business Machines Corporation Synthesizing inputs to preserve functionality
US9632921B1 (en) * 2015-11-13 2017-04-25 Microsoft Technology Licensing, Llc Validation using scenario runners
US11269626B2 (en) 2020-04-23 2022-03-08 International Business Machines Corporation Quality analysis of source code

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61127044A (ja) * 1984-11-27 1986-06-14 Fujitsu Ltd プログラムの単体テスト方式
JPS6365542A (ja) * 1986-09-05 1988-03-24 Nec Corp デバツグ方式
JP2003337709A (ja) * 2002-05-21 2003-11-28 Hitachi Ltd コンパイル方法
US20080196014A1 (en) * 2007-02-13 2008-08-14 Microsoft Corporation Partial methods

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19650293C1 (de) * 1996-12-04 1998-04-09 Siemens Ag Verfahren zum Testen von Systemkomponenten eines objektorientierten Programms
US8434099B2 (en) * 1998-09-09 2013-04-30 Microsoft Corporation Efficient linking and loading for late binding and platform retargeting
US6895578B1 (en) * 1999-01-06 2005-05-17 Parasoft Corporation Modularizing a computer program for testing and debugging
US7340726B1 (en) 2003-08-08 2008-03-04 Coverity, Inc. Systems and methods for performing static analysis on source code
US7367019B2 (en) * 2004-09-16 2008-04-29 International Business Machines Corporation Parameter management using compiler directives
US7478367B2 (en) 2005-01-11 2009-01-13 International Business Machines Corporation Dynamic source code analyzer
US7587636B2 (en) * 2005-08-04 2009-09-08 Microsoft Corporation Unit test generalization
US20080082969A1 (en) * 2006-04-04 2008-04-03 The Board Of Trustees Of The University Of Illinois Software Testing Technique Supporting Dynamic Data Structures
US7971182B1 (en) * 2006-05-09 2011-06-28 Vmware, Inc. Application environment specifications for provisioning application specific runtime environments using undefined symbols
US8352923B2 (en) * 2006-09-25 2013-01-08 Typemock Ltd. Method and system for isolating software components
US8032877B2 (en) * 2006-10-20 2011-10-04 International Business Machines Corporation Compiler neutral linking solution for C++ code
US8387020B1 (en) * 2007-07-25 2013-02-26 Google Inc. Verifying that a method has been implemented for a program written in a dynamic programming language
US8745587B2 (en) * 2007-10-03 2014-06-03 International Business Machines Corporation System and method for testing computer programs
US8954929B2 (en) * 2010-03-29 2015-02-10 Microsoft Corporation Automatically redirecting method calls for unit testing
US8626484B1 (en) * 2010-12-15 2014-01-07 Emc Corporation Light-weight and flexible feature simulator
US8683430B2 (en) * 2011-01-07 2014-03-25 International Business Machines Corporation Synchronizing development code and deployed executable versioning within distributed systems
US8789018B2 (en) * 2011-05-31 2014-07-22 Microsoft Corporation Statically derived symbolic references for dynamic languages

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61127044A (ja) * 1984-11-27 1986-06-14 Fujitsu Ltd プログラムの単体テスト方式
JPS6365542A (ja) * 1986-09-05 1988-03-24 Nec Corp デバツグ方式
JP2003337709A (ja) * 2002-05-21 2003-11-28 Hitachi Ltd コンパイル方法
US20080196014A1 (en) * 2007-02-13 2008-08-14 Microsoft Corporation Partial methods

Also Published As

Publication number Publication date
US20140282432A1 (en) 2014-09-18
US9454347B2 (en) 2016-09-27
JP6357814B2 (ja) 2018-07-18

Similar Documents

Publication Publication Date Title
Gal et al. Trace-based just-in-time type specialization for dynamic languages
Prähofer et al. Opportunities and challenges of static code analysis of IEC 61131-3 programs
US9235433B2 (en) Speculative object representation
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
JP6357814B2 (ja) 未完成ソフトウェアの分析
US9367423B1 (en) Methods, systems, and articles of manufacture for using multiple modes during execution of a program
JP4806060B2 (ja) コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
US20180032320A1 (en) Computer-implemented method for allowing modification of a region of original code
US8387020B1 (en) Verifying that a method has been implemented for a program written in a dynamic programming language
Konat et al. Scalable incremental building with dynamic task dependencies
Hills et al. Enabling PHP software engineering research in Rascal
US8127282B2 (en) Recompilation of a class with a java static variable
Cachera et al. Certified memory usage analysis
JPH0748182B2 (ja) プログラム・エラー検出方法
US8918772B1 (en) Statically analyzing program correctness for a dynamic programming language
Campbell An executable semantics for CompCert C
Gaikwad et al. Performance analysis for languages hosted on the truffle framework
US20210096892A1 (en) Snapshot for compiler optimization
CN105786465A (zh) 一种脚本语言执行方法及装置
US20170206068A1 (en) Program optimization based on directives for intermediate code
Sankaranarayanan et al. Source-to-source refactoring and elimination of global variables in c programs
EP2309386A1 (en) Notation enhancement system, compiler and method
US20100077384A1 (en) Parallel processing of an expression
WO2016070694A1 (zh) 基于GCC和Chromium的代码跟踪方法及系统
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171024

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171031

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171215

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180522

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180604

R150 Certificate of patent or registration of utility model

Ref document number: 6357814

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150