(57)【要約】【課題】エラートレースに含まれる表現を簡略化し、ユーザにとって分かりやすいエラートレースの出力を行う。【解決手段】ソースコード入力部は、入力ソースコードを読み込み、フラット化部に受け渡す。フラット化部は、入力されたソースコードをフラット化して、ソースコード検証部に受け渡す。ソースコード検証部は、フラット化されたソースコードにソースコード検証手法を適用し、得られたエラートレースをエラートレース記憶部に格納する。エラートレース簡略化部は、エラートレース記憶部に格納されたエラートレースに含まれる全てのステップについて、条件演算子による演算を含む場合には、条件演算子による演算を含まない形に簡略化し、簡略化エラートレース記憶部に格納する。結果出力部は、簡略化エラートレース記憶部に格納されたエラートレースを、簡略化エラートレースとして出力する。【選択図】図１
2010097251.tif 000002
【特許請求の範囲】
【請求項１】
入力されたソースコードをフラット化するフラット化部と、
前記フラット化されたソースコードを検証し、エラートレースを作成するソースコード検証部と、
前記作成されたエラートレースに含まれるステップに対し、条件演算子による演算を含む場合には、前記条件演算子による演算を含まない形式に簡略化するエラートレース簡略化部と
を具備する
エラートレース簡略化システム。
【請求項２】
請求項１に記載のエラートレース簡略化システムであって、
前記条件演算子による演算は、
前記ステップにおける変数の値に基づいて、真であるか偽であるかを判定するための条件式と、
前記条件式が真の場合に選択される真の式と、
前記条件式が偽の場合に選択される偽の式と
を含む
エラートレース簡略化システム。
【請求項３】
請求項２に記載のエラートレース簡略化システムであって、
前記エラートレース簡略化部は、前記ステップにおける変数の値に基づいて、前記条件演算子による演算における条件式が真であるか偽であるかを判定し、判定結果に応じて、前記条件演算子による演算を、前記条件演算子による演算における真の式と偽の式とのいずれかに置き換える
エラートレース簡略化システム。
【請求項４】
請求項３に記載のエラートレース簡略化システムであって、
前記エラートレース簡略化部は、前記置き換えられた後の演算が前記条件演算子による演算である場合、前記置き換えられた後の演算に対し、前記ステップにおける変数の値に基づいて、前記置き換えられた後の演算における条件式が真であるか偽であるかを判定し、判定結果に応じて、前記置き換えられた後の演算を、前記置き換えられた後の演算における真の式と偽の式とのいずれかに置き換える
エラートレース簡略化システム。
【請求項５】
入力されたソースコードをフラット化することと、
前記フラット化されたソースコードを検証し、エラートレースを作成することと、
前記作成されたエラートレースに含まれるステップに対し、条件演算子による演算を含む場合には、前記条件演算子による演算を含まない形式に簡略化することと
を含む
エラートレース簡略化方法。
【請求項６】
請求項５に記載のエラートレース簡略化方法であって、
前記条件演算子による演算は、
前記ステップにおける変数の値に基づいて、真であるか偽であるかを判定するための条件式と、
前記条件式が真の場合に選択される真の式と、
前記条件式が偽の場合に選択される偽の式と
を含む
エラートレース簡略化方法。
【請求項７】
請求項６に記載のエラートレース簡略化方法であって、
前記ステップにおける変数の値に基づいて、前記条件演算子による演算における条件式が真であるか偽であるかを判定し、判定結果に応じて、前記条件演算子による演算を、前記条件演算子による演算における真の式と偽の式とのいずれかに置き換えること
を更に含む
エラートレース簡略化方法。
【請求項８】
請求項７に記載のエラートレース簡略化方法であって、
前記置き換えられた後の演算が前記条件演算子による演算である場合、前記置き換えられた後の演算に対し、前記ステップにおける変数の値に基づいて、前記置き換えられた後の演算における条件式が真であるか偽であるかを判定し、判定結果に応じて、前記置き換えられた後の演算を、前記置き換えられた後の演算における真の式と偽の式とのいずれかに置き換えること
を更に含む
エラートレース簡略化方法。
【請求項９】
入力されたソースコードをフラット化することと、
前記フラット化されたソースコードを検証し、エラートレースを作成することと、
前記作成されたエラートレースに含まれるステップに対し、条件演算子による演算を含む場合には、前記条件演算子による演算を含まない形式に簡略化することと
をコンピュータに実行させるための
プログラム。
【請求項１０】
請求項９に記載のプログラムであって、
前記条件演算子による演算は、
前記ステップにおける変数の値に基づいて、真であるか偽であるかを判定するための条件式と、
前記条件式が真の場合に選択される真の式と、
前記条件式が偽の場合に選択される偽の式と
を含む
プログラム。
【請求項１１】
請求項１０に記載のプログラムであって、
前記ステップにおける変数の値に基づいて、前記条件演算子による演算における条件式が真であるか偽であるかを判定し、判定結果に応じて、前記条件演算子による演算を、前記条件演算子による演算における真の式と偽の式とのいずれかに置き換えること
を更にコンピュータに実行させるための
プログラム。
【請求項１２】
請求項１１に記載のプログラムであって、
前記置き換えられた後の演算が前記条件演算子による演算である場合、前記置き換えられた後の演算に対し、前記ステップにおける変数の値に基づいて、前記置き換えられた後の演算における条件式が真であるか偽であるかを判定し、判定結果に応じて、前記置き換えられた後の演算を、前記置き換えられた後の演算における真の式と偽の式とのいずれかに置き換えること
を更にコンピュータに実行させるための
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エラートレース簡略化システムに関し、特にソースコード検証におけるエラートレース簡略化システムに関する。
【背景技術】
【０００２】
従来、コンピュータプログラムのソースコードを検証し、エラートレース、すなわちエラーが発生するパスをユーザに提示できるソースコード検証手法が存在する。
【０００３】
エラートレースは、エラーが発生するまでに実行される各ステップ（プログラムステップ）において、そのステップが対応するソースコード上の行番号、当該ステップで実行された代入の式、当該ステップで評価されて成立した条件の式、及び当該ステップにおける変数の値を含む。
【０００４】
このようなエラートレースをユーザが参照すると、エラーが発生する原因を調査することができる。
【０００５】
これは、エラートレースを提示しないソースコード検証手法と比較した場合、大きな利点であると言える。エラートレースを提示しないソースコード検証手法として、例えばＳｐｌｉｎｔ（非特許文献１参照）等が存在する。
【０００６】
なお、エラートレースを提示するソースコード検証手法は、一般に厳密な計算を要求するために、次のような特徴を持つ。例えば、エラートレースを提示するソースコード検証手法では、ソースコード内のメモリ領域に対するアクセスを行う箇所において、静的にアドレスが決まる表現（静的アクセス）は扱えるが、動的にアドレスが決まる表現（動的アクセス）は扱えない。
【０００７】
一般的なソースコードは、配列の添字が変数である場合や、変数を用いてポインタ演算をする場合等、動的アクセスを多く含む。前述したようなソースコード検証手法では動的アクセスを利用できないため、それらのソースコードをそのままでは扱うことができない。
【０００８】
このような場合、動的アクセスを静的アクセスに書き換える方式を利用できる。このための手段として、条件分岐を用いる技術が知られている（非特許文献２参照）。
【０００９】
これを応用し、動的アクセスを、条件演算子（ｃｏｎｄｉｔｉｏｎａｌ  ｏｐｅｒａｔｏｒ）による条件分岐を用いて、静的アクセスに書き換え、その後にソースコード検証手法を適用する技術が知られている（非特許文献３参照）。このような書き換えのことをフラット化と呼ぶ。
【００１０】
以上により、動的アクセスを含むソースコードに、ソースコード検証を適用することはできる。
【００１１】
しかしながら、従来のソースコード検証手法においては、ユーザがエラートレースを参照する労力が大きいという問題があった。
【００１２】
なぜなら、ソースコード検証手法の出力であるエラートレースは、フラット化後のソースコードに基づくためである。フラット化後のソースコードは条件演算子による演算を多数含むので、結果として、エラートレースも条件演算子による演算を多数含む複雑なものとなる。条件演算子による演算を用いた複雑な式を解釈するのは、ユーザにとって労力を要する作業であると言える。
【００１３】
関連する技術として、特開２０００−２１５０３７号公報（特許文献１）にソ―スコ―ド表示装置、ソ―スコ―ド表示方法およびデバック処理装置が開示されている。この関連技術では、プログラムをステップ実行中に分岐処理があると、分岐処理条件を解析してその条件で実行しない行と実行する行とを調べ、ソースコードの表示で実行しない行の色を目立たなくしている。
【００１４】
また、特開２００１−１４２７１６号公報（特許文献２）にループ内条件分岐削除最適化方式が開示されている。この関連技術では、条件分岐コードから無条件分岐コードへの変更に起因して不要となったコード（当該無条件分岐コードおよび当該変更に起因して決して実行されなくなったコード）を削除している。
【００１５】
【特許文献１】特開２０００−２１５０３７号公報
【特許文献２】特開２００１−１４２７１６号公報
【非特許文献１】ＩＥＥＥ  ＳＯＦＴＷＡＲＥ  Ｊａｎｕａｒｙ／Ｆｅｂｒｕａｒｙ２００２  Ｉｍｐｒｏｖｉｎｇ  Ｓｅｃｕｒｉｔｙ  Ｕｓｉｎｇ  Ｅｘｔｅｎｓｉｂｌｅ  Ｌｉｇｈｔｗｅｉｇｈｔ  Ｓｔａｔｉｃ  Ａｎａｌｙｓｉｓ  ＜ｈｔｔｐ：／／ｗｗｗ．ｃｓ．ｖｉｒｇｉｎｉａ．ｅｄｕ／ｐａｐｅｒｓ／ｉｅｅｅｓｏｆｔｗａｒｅ．ｐｄｆ＞
【非特許文献２】「Ｒｅｓｏｌｕｔｉｏｎ，  Ｏｐｔｉｍｉｚａｔｉｏｎ，  ａｎｄ  Ｅｎｃｏｄｉｎｇ  ｏｆ  Ｐｏｉｎｔｅｒ  Ｖａｒｉａｂｌｅｓ  ｆｏｒ  ｔｈｅ  Ｂｅｈａｖｉｏｒａｌ  Ｓｙｎｔｈｅｓｉｓ  ｆｒｏｍ  Ｃ，  ＩＥＥＥ  ＴＲＡＮＳＡＣＴＩＯＮＳ  ＯＮ  ＣＯＭＰＵＴＥＲ−ＡＩＤＥＤ  ＤＥＳＩＧＮ  ＯＦ  ＩＮＴＥＧＲＡＴＥＤ  ＣＩＲＣＵＩＴＳ  ＡＮＤ  ＳＹＳＴＥＭＳ，  ＶＯＬ．２０，  ＮＯ．２，  ＦＥＢＲＵＡＲＹ  ２００１」  ＜ｈｔｔｐ：／／ｃｉｔｅｓｅｅｒｘ．ｉｓｔ．ｐｓｕ．ｅｄｕ／ｖｉｅｗｄｏｃ／ｄｏｗｎｌｏａｄ？ｄｏｉ＝１０．１．１．３１．６７７４＆ｒｅｐ＝ｒｅｐ１＆ｔｙｐｅ＝ｐｄｆ＞
【非特許文献３】Ｍｏｄｅｌ  Ｃｈｅｃｋｉｎｇ  Ｃ  Ｐｒｏｇｒａｍｓ  Ｕｓｉｎｇ  Ｆ−Ｓｏｆｔ，  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２００５  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ｄｅｓｉｇｎ  ＜ｈｔｔｐ：／／ｐｏｒｔａｌ．ａｃｍ．ｏｒｇ／ｃｉｔａｔｉｏｎ．ｃｆｍ？ｉｄ＝１０９７５５６＆ｄｌ＝ＡＣＭ＆ｃｏｌｌ＝ｐｏｒｔａｌ＞
【発明の開示】
【発明が解決しようとする課題】
【００１６】
本発明の目的は、コンピュータプログラムのソースコードに対して、ソースコード検証手法を適用した場合に、得られるエラートレースを参照する作業を省力化するエラートレース簡略化システムを提供することである。
【課題を解決するための手段】
【００１７】
本発明のエラートレース簡略化システムは、入力されたソースコードをフラット化するフラット化部と、フラット化されたソースコードを検証し、エラートレースを作成するソースコード検証部と、作成されたエラートレースに含まれるステップに対し、条件演算子による演算を含む場合には、条件演算子による演算を含まない形式に簡略化するエラートレース簡略化部とを具備する。
【００１８】
本発明のエラートレース簡略化方法は、入力されたソースコードをフラット化することと、フラット化されたソースコードを検証し、エラートレースを作成することと、作成されたエラートレースに含まれるステップに対し、条件演算子による演算を含む場合には、条件演算子による演算を含まない形式に簡略化することとを含む。
【００１９】
本発明のプログラムは、入力されたソースコードをフラット化することと、フラット化されたソースコードを検証し、エラートレースを作成することと、作成されたエラートレースに含まれるステップに対し、条件演算子による演算を含む場合には、条件演算子による演算を含まない形式に簡略化することとをコンピュータに実行させるためのプログラムである。
【発明の効果】
【００２０】
フラット化を用いたソースコード検証処理において、エラートレースに含まれる表現を簡略化し、ユーザにとって分かりやすいエラートレースの出力を可能とする。
【発明を実施するための最良の形態】
【００２１】
以下に、本発明の実施形態について添付図面を参照して説明する。
【００２２】
図１を参照すると、本発明のエラートレース簡略化システムは、入力ソースコード１と、処理装置２と、記憶装置３と、簡略化エラートレース４を含む。
【００２３】
本発明のエラートレース簡略化システムの例として、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等のコンピュータを想定している。なお、本システムは、端末やサーバに限らず、中継機器や周辺機器でも良い。また、本システムは、コンピュータに搭載される拡張ボードやソフトウェアでも良い。更に、本システムは、コンピュータに搭載された仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（ＶＭ））環境でも良い。但し、実際には、これらの例に限定されない。
【００２４】
入力ソースコード１は、ソースコード検証の対象となるソースコードである。図２に、入力ソースコード１の内容を例示する。
【００２５】
処理装置２は、プログラム制御により動作する。処理装置２の例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やマイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）等の処理装置、又は同様の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＩＣ））等が考えられる。なお、処理装置２は、本発明のエラートレース簡略化方法をコンピュータに実行させるためのプログラムでも良い。但し、実際には、これらの例に限定されない。
【００２６】
記憶装置３は、情報を記憶する。記憶装置３の例として、メモリ等の半導体記憶装置、ハードディスク等の外部記憶装置（ストレージ）、又は、記憶媒体（メディア）等が考えられる。また、記憶装置３は、外付けの記憶装置やネットワーク上のストレージサーバでも良い。但し、実際には、これらの例に限定されない。
【００２７】
簡略化エラートレース４は、本発明のエラートレース簡略化システムにおける処理結果である。
【００２８】
処理装置２は、ソースコード入力部２１と、フラット化部２２と、ソースコード検証部２３と、エラートレース簡略化部２４と、結果出力部２５を備える。
【００２９】
ソースコード入力部２１は、入力ソースコード１を読み込み、フラット化部２２に受け渡す。
【００３０】
フラット化部２２は、入力ソースコード１をフラット化して、ソースコード検証部２３に受け渡す。ここでは、フラット化部２２は、図２に示すような入力ソースコード１をフラット化して、図３に示すようなフラット化されたソースコード（フラット化コード）を作成し、フラット化されたソースコード（フラット化コード）をソースコード検証部２３に受け渡す。
【００３１】
ソースコード検証部２３は、フラット化されたソースコード（フラット化コード）にソースコード検証を適用し、得られたエラートレースを記憶装置３のエラートレース記憶部３１に格納する。すなわち、ソースコード検証部２３は、フラット化されたソースコード（フラット化コード）を基に、ソースコード検証手法に従って、エラートレースを作成する。
【００３２】
エラートレース簡略化部２４は、記憶装置３のエラートレース記憶部３１に格納されたエラートレースに含まれる全てのステップについて、条件演算子による演算を含む場合には簡略化しながら、記憶装置３の簡略化エラートレース記憶部３２に格納する。条件演算子による演算は、「条件式  ？  真の式  ：  偽の式」で表される。すなわち、条件演算子による演算は、条件式、真の式、偽の式の３要素を含む。エラートレース簡略化部２４は、条件式が真であるか偽であるかを当該ステップにおける変数の値を根拠にして判定し、判定の結果と条件演算子によって選択された真の式、又は偽の式のみを残すことにより、式の構成要素を減らす。
【００３３】
なお、エラートレース簡略化部２４は、処理装置２の外部に独立して設けられた装置とすることも可能である。例えば、エラートレース簡略化部２４は、複数の記憶装置３にアクセス可能なサーバでも良い。また、エラートレース簡略化部２４は、記憶装置３を有する端末やサーバ等に含まれていても良い。
【００３４】
結果出力部２５は、記憶装置３の簡略化エラートレース記憶部３２に格納されたエラートレースを、簡略化エラートレース４として出力する。
【００３５】
記憶装置３は、エラートレース記憶部３１と、簡略化エラートレース記憶部３２を備える。
【００３６】
エラートレース記憶部３１は、エラーが発生するまでに実行される各ステップの情報を保持する。具体的には、エラートレース記憶部３１に保持される情報は、図４Ａ、図４Ｂ、及び図４Ｃに示すように、そのステップが対応するソースコード上の行番号、当該ステップで実行された代入式、当該ステップで評価され成立した条件式、及び当該ステップにおける変数の値を含む。なお、ステップ数の数え方には様々な基準があるが、多くの場合、プログラムのソースコードの行数である「ＬＯＣ」（Ｌｉｎｅｓ  Ｏｆ  Ｃｏｄｅ）を基にした値となる。ＬＯＣをそのままステップ数として用いることもあるが、ＬＯＣからプログラムとしては意味を成さない空行やコメントの行の数を除いて換算する場合もある。
【００３７】
簡略化エラートレース記憶部３２は、基本的には、エラートレース記憶部３１の内容と同様の内容（エラーが発生するまでに実行される各ステップの情報）を保持する。但し、簡略化エラートレース記憶部３２は、条件演算子による演算を含むステップについては、簡略化された後に保持する。すなわち、簡略化エラートレース記憶部３２は、条件演算子による演算を含まないステップが転記されたエラートレースを格納する。例えば、簡略化エラートレース記憶部３２は、エラートレース記憶部３１に格納されたエラートレースに、条件演算子による演算を含むステップが含まれていない場合、エラートレース記憶部３１に格納されたエラートレースをそのまま格納する。反対に、簡略化エラートレース記憶部３２は、エラートレース記憶部３１に格納されたエラートレースに、条件演算子による演算を含むステップが含まれていた場合、該エラートレースをエラートレース簡略化部２４に提供し、エラートレース簡略化部２４で簡略化された後に格納する。
【００３８】
なお、図５と図６は、図４Ａ、図４Ｂ、及び図４Ｃに示すエラートレースに含まれるステップの、簡略化前と簡略化後のステップの状態を示す。ここでは、説明を簡単にするため、簡略化後に式が変化するステップ、すなわち条件演算子による演算を含むステップのみについて示している。図５は、エラートレース記憶部３１に格納されている簡略化前のエラートレースに含まれるステップを示す。図６は、簡略化エラートレース記憶部３２に格納された簡略化後のエラートレースに含まれるステップを示す。但し、実際には、条件演算子による演算を含むステップ以外のステップも示されている。
【００３９】
次に、図７を参照して、本発明のエラートレース簡略化システムの動作について詳細に説明する。
【００４０】
（１）処理手順Ａ１
ソースコード入力部２１は、入力ソースコード１を読み込み、フラット化部２２に受け渡す。フラット化部２２に受け渡される入力ソースコード１の例については、図２に示す通りである。ここでは、ソースコード入力部２１は、入力装置や通信用インタフェース等を介して、入力ソースコード１を取得する。なお、ソースコード入力部２１は、外部のコンピュータから入力ソースコード１を受け取っても良い。或いは、ソースコード入力部２１は、外部の記憶装置や記憶媒体（メディア）から入力ソースコード１を読み出しても良い。
【００４１】
（２）処理手順Ａ２
次に、フラット化部２２は、入力ソースコード１をフラット化し、ソースコード検証部２３に受け渡す。例えば、フラット化部２２は、ソースコード入力部２１から、図２に示す入力ソースコード１を受け取ると、フラット化し、結果として図３に示す形のフラット化されたソースコード（フラット化コード）を作成し、ソースコード検証部２３に受け渡す。
【００４２】
（３）処理手順Ａ３
次に、ソースコード検証部２３は、フラット化されたソースコード（フラット化コード）を検証する。
【００４３】
（４）処理手順Ａ４
ソースコード検証部２３は、フラット化されたソースコード（フラット化コード）の検証において、エラートレースが得られたかどうか判断する。ソースコード検証部２３は、フラット化されたソースコード（フラット化コード）の検証の結果、エラートレースが得られた場合には、エラートレース記憶部３１に格納する。例えば、ソースコード検証部２３は、図３に示すフラット化されたソースコード（フラット化コード）を検証した場合には、図４Ａ、図４Ｂ、及び図４Ｃに示すエラートレースが得られるので、この内容（図４Ａ、図４Ｂ、及び図４Ｃに示すエラートレース）をエラートレース記憶部３１に格納する。なお、フラット化されたソースコード（フラット化コード）の検証においては、エラーが検出されない場合にはエラートレースは得られない。ソースコード検証部２３は、エラートレースが得られなかった場合には、処理を終了する。
【００４４】
（５）処理手順Ａ５
次に、エラートレース簡略化部２４は、得られたエラートレースを簡略化する。例えば、エラートレース簡略化部２４は、エラートレース記憶部３１に格納されたエラートレースを読み出し、読み出されたエラートレースを簡略化し、簡略化エラートレース記憶部３２に格納する。なお、エラートレース簡略化部２４は、ソースコード検証部２３から直接、得られたエラートレースを受け取るようにしても良い。エラートレース簡略化の詳細については後述する。
【００４５】
（６）処理手順Ａ６
次に、結果出力部２５は、簡略化エラートレース記憶部３２に格納されたエラートレースを簡略化エラートレース４として出力する。なお、結果出力部２５は、エラートレース簡略化部２４から直接、簡略化されたエラートレースを受け取り、簡略化エラートレース４として出力するようにしても良い。
【００４６】
得られた簡略化エラートレース４は、図７の処理手順Ａ５（エラートレース簡略化）の処理により条件演算子による演算を含まないものとなっているため、本システムのユーザは、条件演算子による演算を解釈することなく、少ない労力でエラートレースを参照できる。
【００４７】
次に、図８を参照して、エラートレース簡略化（図７の処理手順Ａ５）について詳細に説明する。
【００４８】
（１）処理手順Ｂ１
エラートレース簡略化部２４は、エラートレースの簡略化の処理において、エラートレース記憶部３１に格納されたエラートレースに含まれる全てのステップについて、図８の処理手順Ｂ２から処理手順Ｂ６までの処理を繰り返し、簡略化エラートレース記憶部３２に転記する。図４Ａ、図４Ｂ、及び図４Ｃに示すエラートレースの例では、ステップ番号１から５５まで、１ステップずつ繰り返すことになる。ここでは、エラートレース簡略化部２４は、エラートレース記憶部３１に格納されたエラートレースに、未処理のステップがあるか確認する。このとき、エラートレース簡略化部２４は、ソースコード検証部２３から直接、エラートレースを取得し、取得されたエラートレースに、未処理のステップがあるか確認するようにしても良い。エラートレース簡略化部２４は、エラートレース簡略化部２４は、エラートレースに未処理のステップが含まれている場合、エラートレース記憶部３１に格納されたエラートレースに含まれる全てのステップについて、1ステップずつ読み出す。すなわち、エラートレース簡略化部２４は、図４Ａ、図４Ｂ、及び図４Ｃに示すエラートレースの例では、1ステップずつ、ステップ番号１から５５に対応するステップの式を読み出す。
【００４９】
（２）処理手順Ｂ２
エラートレース簡略化部２４は、当該ステップ（読み出されたステップ）の式に、条件演算子による演算が含まれるか否かを判定する。すなわち、エラートレース簡略化部２４は、当該ステップの式に、「条件式  ？  真の式  ：  偽の式」で表される表現が含まれるか否かを判定する。
【００５０】
（３）処理手順Ｂ３
エラートレース簡略化部２４は、当該ステップの式に、条件演算子による演算が含まれる場合、条件演算子による演算の条件式部分を、当該ステップにおける変数の値により評価し、その真偽を判断する。例えば、エラートレース簡略化部２４は、図４Ａ、図４Ｂ、及び図４Ｃに示すエラートレースがエラートレース記憶部３１に格納されているとして、ステップ番号４５のステップを処理する場合、条件演算子による演算を含むため、この分岐はイエスとなり、条件演算子による演算の条件式部分を、当該ステップにおける変数の値により評価し、その真偽を判断する。
【００５１】
（４）処理手順Ｂ４
エラートレース簡略化部２４は、判断の結果が偽であれば、結果に従い、偽の式に相当する式をもって条件演算子による演算全体を置換する。これにより、当該ステップの式について、条件演算子による演算が含まれなくなる。
【００５２】
（５）処理手順Ｂ５
エラートレース簡略化部２４は、判断の結果が真であれば、結果に従い、真の式に相当する式でもって条件演算子による演算全体を置換する。これにより、当該ステップの式について、条件演算子による演算が含まれなくなる。
【００５３】
（６）処理手順Ｂ６
エラートレース簡略化部２４は、当該ステップについて、条件演算子による演算全体を置換した後の情報を、簡略化エラートレース記憶部３２に格納するためのエラートレース（簡略化エラートレース４）に転記する。なお、エラートレース簡略化部２４は、当該ステップの式に、条件演算子による演算が含まれない場合、当該ステップの情報をそのまま簡略化エラートレース記憶部３２に格納するためのエラートレースに転記する。例えば、エラートレース簡略化部２４は、図４Ａ、図４Ｂ、及び図４Ｃに示すエラートレースがエラートレース記憶部３１に格納されているとして、ステップ番号１のステップを処理する場合、条件演算子による演算を含まないため、当該ステップの情報をそのまま簡略化エラートレース記憶部３２に格納するためのエラートレースに転記する。すなわち、エラートレース簡略化部２４は、ステップの式に条件演算子による演算を含まないステップの情報を、簡略化エラートレース記憶部３２に格納するためのエラートレースに転記する。
【００５４】
（７）処理手順Ｂ７
エラートレース簡略化部２４は、エラートレース記憶部３１に格納されたエラートレースに含まれる全てのステップについて、未処理のステップが無くなった場合、簡略化エラートレース記憶部３２に格納するためのエラートレースを、簡略化エラートレース記憶部３２に格納して、処理を終了する。なお、エラートレース簡略化部２４は、エラートレース記憶部３１に格納されたエラートレースに含まれる全てのステップの式に、条件演算子による演算が含まれない場合、エラートレース記憶部３１に格納されたエラートレースを、そのまま簡略化エラートレース記憶部３２に格納するためのエラートレースとして、簡略化エラートレース記憶部３２に格納して、処理を終了する。このとき、エラートレース簡略化部２４は、簡略化エラートレース記憶部３２に格納するためのエラートレースを、簡略化エラートレース記憶部３２に格納せず、直接、結果出力部２５に出力するようにしても良い。ここで、エラートレース記憶部３１に格納されたエラートレースは、ソースコード検証部２３から取得されたエラートレースと読み替えても良い。
【００５５】
これにより、簡略化エラートレース記憶部３２に格納されたエラートレースに転記されたステップの式は、条件式の真偽の判断がすでに完了した、簡略化された形になる。
【００５６】
ここで、図９を参照して、図４Ｃのステップ番号４５を例に、処理手順Ｂ２，Ｂ３，Ｂ４，Ｂ５の詳細について説明する。
【００５７】
図９の式４５０１は、図４Ｃのステップ番号４５における式を転記したものである。式４５０１は、条件演算子による演算４５０１１を示す。条件演算子による演算４５０１１は、条件式４５０１２と、真の式４５０１３と、偽の式４５０１４を含む。図９の式４５０１を見ると、条件演算子による演算４５０１１が含まれているため、エラートレース簡略化部２４は、処理手順Ｂ３を実行する。すなわち、エラートレース簡略化部２４は、条件演算子４５０１１による演算の条件式部分を、当該ステップにおける変数の値により評価し、その真偽を判断する。図４Ｃのステップ番号４５の変数ｉの値を見ると「１」（「ｉ  ＝＝  １」）となっているため、エラートレース簡略化部２４は、条件式４５０１２の「ｉ  ＝＝  ０」を偽であると判断する。従って、条件演算子による演算４５０１１は、偽の式４５０１４により置き換えられ、図９の式４５０２の形となる。
【００５８】
図９の式４５０２は、条件演算子による演算４５０２１を示す。条件演算子による演算４５０２１は、条件式４５０２２と、真の式４５０２３と、偽の式４５０２４を含む。図９の式４５０２を見ると、条件演算子による演算４５０２１が含まれているため、エラートレース簡略化部２４は、再度、処理手順Ｂ３を実行する。すなわち、エラートレース簡略化部２４は、条件演算子４５０２１による演算の条件式部分を、当該ステップにおける変数の値により評価し、その真偽を判断する。図４Ｃのステップ番号４５の変数ｉの値を見ると「１」（「ｉ  ＝＝  １」）となっているため、エラートレース簡略化部２４は、条件式４５０２２の「ｉ  ＝＝  １」は真であると判断する。従って、条件演算子による演算４５０２１は、真の式４５０２３により置き換えられ、図９の４５０３の形となる。
【００５９】
図９の式４５０３は、条件演算子による演算４５０３１を示す。条件演算子による演算４５０３１は、条件式４５０３２と、真の式４５０３３と、偽の式４５０３４を含む。図９の式４５０３を見ても、条件演算子による演算４５０３１が含まれているため、エラートレース簡略化部２４は、再度、処理手順Ｂ３を実行する。すなわち、エラートレース簡略化部２４は、条件演算子４５０３１による演算の条件式部分を、当該ステップにおける変数の値により評価し、その真偽を判断する。図４Ｃのステップ番号４５の変数ｊの値を見ると「０」（「ｊ  ＝＝  ０」）となっているため、エラートレース簡略化部２４は、条件式４５０３２の「ｊ  ＝＝  ０」は真であると判断する。従って、条件演算子による演算４５０３１は、真の式４５０３３により置き換えられ、図９の４５０４の形となる。
【００６０】
図９の式４５０４を見ると、条件演算子による演算は含まれていないため、エラートレース簡略化部２４は、このステップに関する処理を終了する。
【００６１】
以上のように、本発明では、コンピュータプログラムのソースコードに対して、ソースコード検証手法を適用した場合に、得られるエラートレースを参照する作業を省力化する。具体的には、エラートレースに含まれる条件演算子による演算を、エラートレースが示す変数の値を根拠にして解釈し、条件演算子が含まれない簡略化されたエラートレースをユーザに提示することにより、ユーザがエラートレースに含まれる条件演算子による演算を解釈する労力を軽減する。
【００６２】
本発明のエラートレース簡略化システムは、フラット化を用いたソースコード検証手法において、エラートレースに含まれる表現を簡略化することにより、ユーザにとって分かりやすいエラートレースを出力する。
【００６３】
まず、本発明のエラートレース簡略化システムは、入力ソースコードを読み込み、入力されたソースコードをフラット化して、フラット化されたソースコード（フラット化コード）にソースコード検証手法を適用し、得られたエラートレースをエラートレース記憶部に格納する。
【００６４】
次に、本発明のエラートレース簡略化システムは、エラートレース記憶部に格納されたエラートレースに含まれる全てのステップについて、条件演算子による演算を含む場合には、条件演算子による演算を含まない形式に簡略化し、簡略化エラートレース記憶部に格納する。すなわち、条件演算子は、条件式、真の式、偽の式の要素を含む。ｋのとき、本発明のエラートレース簡略化システムは、条件式が真であるか偽であるかを当該ステップにおける変数の値を根拠にして判定し、条件演算子によって選択された真の式、又は偽の式のみを残す。
【００６５】
最後に、本発明のエラートレース簡略化システムは、簡略化エラートレース記憶部に格納されたエラートレースを、簡略化エラートレースとして出力する。
【００６６】
これにより、ユーザは条件演算子による演算を解釈することなく、簡略化されたエラートレースを参照できるので、エラートレースを参照する労力を減らすことができる。
【００６７】
以上、本発明の実施形態を詳述してきたが、実際には上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【図面の簡単な説明】
【００６８】
【図１】図１は、本発明のエラートレース簡略化システムの構成例を示すブロック図である。
【図２】図２は、入力ソースコードの内容の例を示す図である。
【図３】図３は、フラット化されたソースコード（フラット化コード）の内容の例を示す図である。
【図４Ａ】図４Ａは、エラートレースに含まれる各ステップの情報のステップ番号１から２０までの例を示す図である。
【図４Ｂ】図４Ｂは、エラートレースに含まれる各ステップの情報のステップ番号２１から４０までの例を示す図である。
【図４Ｃ】図４Ｃは、エラートレースに含まれる各ステップの情報のステップ番号４１から５５までの例を示す図である。
【図５】図５は、エラートレース記憶部に格納されている簡略化前のエラートレースに含まれるステップの例を示す図である。
【図６】図６は、簡略化エラートレース記憶部に格納された簡略化後のエラートレースに含まれるステップの例を示す図である。
【図７】図７は、本発明のエラートレース簡略化システムの動作を示すフローチャートである。
【図８】図８は、エラートレース簡略化の詳細な動作を示すフローチャートである。
【図９】図９は、エラートレース簡略化の実施例について説明するための図である。
【符号の説明】
【００６９】
１…入力ソースコード
２…処理装置
２１…ソースコード入力部
２２…フラット化部
２３…ソースコード検証部
２４…エラートレース簡略化部
２５…結果出力部
３…記憶装置
３１…エラートレース記憶部
３２…簡略化エラートレース記憶部
４…簡略化エラートレース
【図１】
2010097251.tif 000003
【図２】
2010097251.tif 000004
【図３】
2010097251.tif 000005
【図４Ａ】
2010097251.tif 000006
【図４Ｂ】
2010097251.tif 000007
【図４Ｃ】
2010097251.tif 000008
【図５】
2010097251.tif 000009
【図６】
2010097251.tif 000010
【図７】
2010097251.tif 000011
【図８】
2010097251.tif 000012
【図９】
2010097251.tif 000013