(57)【特許請求の範囲】
【請求項１】
コンピュータシステムが行う処理を記述したコンピュータプログラムを検査するソフトウェア検査装置であって、
検査対象となる前記コンピュータプログラムの中から、コンピュータシステムが起動する時に実行される処理が記述されたスタートアップ区間、コンピュータシステムが起動した後に、通常モードから前記通常モードよりもコンピュータシステムの消費電力が低い低消費電力モードへ移行する時に実行される処理が記述された移行区間、及び低消費電力モードから通常モードへ復帰する時に実行される処理が記述された復帰区間の各々の始点及び終点を特定する始点終点特定部と、
前記始点終点特定部により特定された始点及び終点に基づいて、前記コンピュータプログラムに含まれるステートメントの中から、前記スタートアップ区間、前記移行区間、及び前記復帰区間の各々に属するステートメントを特定する区間特定部と、
前記区間特定部により特定されたステートメントにおいて書込が行われるレジスタを、区間毎に特定するレジスタ書込特定部と、
前記スタートアップ区間、前記移行区間、及び前記復帰区間から選ばれる２つの区間のうち一方で書込が有り、他方で書込が無いレジスタに関して、想定される間違いを規定する危険性判定データを格納したデータ記憶部と、
前記データ記憶部に記憶された前記危険性判定データを用いて、前記レジスタ書込特定部で特定されたレジスタに関して、想定される間違いを検出する間違い検出部と、
前記レジスタ書込特定部で特定されたレジスタ毎に、前記間違い検出部により検出された間違いを出力する検査結果出力部と
を備えることを特徴とするソフトウェア検査装置。
【請求項２】
前記レジスタ書込特定部により特定されたレジスタに書込が行われるために書込条件が規定されているか否かを判断し、且つ、書込条件が規定されている場合に、当該書込条件を抽出する条件抽出部を更に備え、
前記間違い検出部は、前記スタートアップ区間、前記移行区間、及び前記復帰区間から選ばれる２つの区間で同じ値がレジスタに書き込まれる場合において、２つの区間の一方で書込条件が無く、他方で書込条件が有る場合、及び、２つの区間の両方で異なる書込条件が規定されている場合、２つの区間の一方で書込が有り、他方で書込が無いレジスタに関して想定される間違いを検出する
ことを特徴とする請求項１に記載のソフトウェア検査装置。
【請求項３】
始点終点特定部と、区間特定部と、レジスタ書込特定部と、間違い検出部と、検査結果出力部とを備えるソフトウェア検査装置を用いて、コンピュータシステムが行う処理を記述したコンピュータプログラムを検査するソフトウェア検査方法であって、
前記始点終点特定部が、検査対象となる前記コンピュータプログラムの中から、コンピュータシステムが起動する時に実行される処理が記述されたスタートアップ区間、コンピュータシステムが起動した後に、通常モードから前記通常モードよりもコンピュータシステムの消費電力が低い低消費電力モードへ移行する時に実行される処理が記述された移行区間、及び低消費電力モードから通常モードへ復帰する時に実行される処理が記述された復帰区間の各々の始点及び終点を特定し、
前記区間特定部が、前記始点終点特定部により特定された始点及び終点に基づいて、前記コンピュータプログラムに含まれるステートメントの中から、前記スタートアップ区間、前記移行区間、及び前記復帰区間の各々に属するステートメントを特定し、
前記レジスタ書込特定部が、前記区間特定部により特定されたステートメントにおいて書込が行われるレジスタを、区間毎に特定し、
前記間違い検出部が、前記スタートアップ区間、前記移行区間、及び前記復帰区間から選ばれる２つの区間のうち一方で書込が有り、他方で書込が無いレジスタに関して、想定される間違いを規定する危険性判定データを用いて、前記レジスタ書込特定部により特定されたレジスタに関して、想定される間違いを検出し、
前記検査結果出力部が、レジスタ毎に、前記間違い検出部により検出された間違いを出力する
ことを特徴とするソフトウェア検査方法。
【請求項４】
コンピュータシステムが行う処理を記述したコンピュータプログラムを検査するソフトウェア検査プログラムであって、
コンピュータに、
検査対象となる前記コンピュータプログラムの中から、コンピュータシステムが起動する時に実行される処理が記述されたスタートアップ区間、コンピュータシステムが起動した後に、通常モードから前記通常モードよりもコンピュータシステムの消費電力が低い低消費電力モードへ移行する時に実行される処理が記述された移行区間、及び低消費電力モードから通常モードへ復帰する時に実行される処理が記述された復帰区間の各々の始点及び終点を特定する機能と、
特定された始点及び終点に基づいて、前記コンピュータプログラムに含まれるステートメントの中から、前記スタートアップ区間、前記移行区間、及び前記復帰区間の各々に属するステートメントを特定する機能と、
特定されたステートメントにおいて書込が行われるレジスタを、区間毎に特定する機能と、
前記スタートアップ区間、前記移行区間、及び前記復帰区間から選ばれる２つの区間のうち一方で書込が有り、他方で書込が無いレジスタに関して、想定される間違いを規定する危険性判定データを用いて、前記特定されたレジスタに関して、想定される間違いを検出する機能と、
レジスタ毎に、検出された間違いを出力する機能と、
を実現させることを特徴とするソフトウェア検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラムに関するものである。
【背景技術】
【０００２】
従来から、処理速度等のシステム性能に影響を与えないアプリケーションプログラムの追加を可能とするアプリケーション開発装置が知られている（特許文献１参照）。特許文献１のアプリケーション開発装置は、アプリケーションプログラムの検査を行い、検査に合格しシステム性能に影響がないことが証明されたアプリケーションプログラムのみを情報処理装置内で動作させる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−０６３９６０号公報
【発明の概要】
【０００４】
しかし、特許文献１は、アプリケーションプログラムの実行時におけるメモリ、処理速度などを検査する、いわゆる動的な検査であるため、実際に実行しなければ、検査することはできない。よって、アプリケーションプログラムに記述された総てのパスを漏れなく検査することは難しい。
【０００５】
本発明は上記課題に鑑みて成されたものであり、その目的は、コンピュータプログラムの実行を伴わない静的な手法により、コンピュータプログラムの間違い箇所を特定することができるソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラムを提供することである。
【０００６】
本発明の一態様に係わるソフトウェア検査装置は、検査対象となるコンピュータプログラムの中から、コンピュータシステムが起動する時に実行される処理が記述されたスタートアップ区間、コンピュータシステムが起動した後に、通常モードから通常モードよりもコンピュータシステムの消費電力が低い低消費電力モードへ移行する時に実行される処理が記述された移行区間、及び低消費電力モードから通常モードへ復帰する時に実行される処理が記述された復帰区間の各々に属するステートメントを特定し、特定されたステートメントにおいて書込が行われるレジスタを区間毎に特定する。そして、スタートアップ区間、移行区間、及び復帰区間から選ばれる２つの区間のうち一方で書込が有り、他方で書込が無いレジスタに関して、想定される間違いを検出して出力する。
【図面の簡単な説明】
【０００７】
【図１】図１は、実施形態に係わるソフトウェア検査装置のハードウェア構成を示すブロック図である。
【図２】図２は、ＣＰＵ１１の機能的構成を示すブロック図である。
【図３】図３は、実施形態に係わるソフトウェア検査装置によって実行される情報処理の流れを示すフローチャートである。
【図４】図４（ａ）、（ｂ）、（ｃ）は、ソースコード入力部２１により読み込まれたソースコードＤ０１として、Ｃ言語で記述されたコンピュータプログラムの一例を示す図である。
【図５】図５は、図２のエントリーポイント一覧Ｄ０４の一例を示す表である。
【図６】図６は、図２のソフトウェア情報リストＤ０２の一例を示す表である。
【図７】図７は、図２の対応表Ｄ０３の一例を示す表である。
【図８】図８は、始点終点特定部２２による特定結果の一例として、スタートアップ区間、移行区間、及び復帰区間の各々の始点及び終点に係わるステートメントにおいて直接的或いは間接的に実行される関数を示す表である。
【図９】図９は、図３のステップＳ０３の詳細な手順の一例を示すフローチャートである。
【図１０】図１０は、図９に示す手順にしたがって、ステートメントを分類した結果を示す表である。
【図１１】図１１は、レジスタ書込特定部２４による特定結果の一例を示す表である。
【図１２】図１２は、危険性判定データＤ０５の一例を示す表である。
【図１３】図１３は、検査結果出力部２６により出力される検出結果の一例を示す表である。
【図１４】図１４は、変形例に係わるＣＰＵ１１ｂの機能的構成を示すブロック図である。
【図１５】図１５は、変形例に係わる検査結果出力部２６により出力される検出結果の具体例を示す表である。
【発明を実施するための形態】
【０００８】
図面を参照して、実施形態を説明する。図面の記載において同一部分には同一符号を付し説明を省略する。
【０００９】
実施形態に係わるソフトウェア検査装置は、例えば車両に搭載されるバッテリを電源に使用した組み込み機器（コンピュータシステム）が行う処理を記述したコンピュータプログラムを検査する処理に適用することができる。
【００１０】
車載バッテリを電源に使用した組み込み機器の開発において、性能や機能の増強による消費電力の増加に対し、低消費電力化を図ることが強く要求される。そのため、組み込み機器が備えるマイコン（ハードウェア）には電力の消費量を少なくする機能が装備されている。また同時に、マイコンを制御するソフトウェアにおいても、通常モードから低消費電力モードへの移行制御、及び低消費電力モードから通常モードへの復帰制御を行っている。
【００１１】
低消費電力モードへの移行或いは低消費電力モードからの復帰時には、ソフトウェアにおいて所定の手続きを行う必要がある。具体的には、低消費電力モードへ移行する時、及び低消費電力モードから通常モードへ復帰する時の各々で、所定のレジスタや変数の設定又は再設定を実施する必要がある。ここで、必要なレジスタの設定が無かったり、レジスタに設定した値に間違いがあると、低消費電力モードへの移行或いは復帰が正しく行われない。最終的には、バッテリが枯渇したり、コンピュータプログラムがフリーズしてしまうという現象に陥る。
【００１２】
実施形態に係わるソフトウェア検査装置は、静的な解析手法を用いて、低消費電力モードへの移行或いは復帰時に、レジスタの設定が正しく行われているか否かを検査する装置である。
【００１３】
［ソフトウェア検査装置のハードウェア構成］
図１を参照して、実施形態に係わるソフトウェア検査装置のハードウェア構成を説明する。ソフトウェア検査装置のハードウェア構成として、汎用のコンピュータを用いることができる。例えば、ソフトウェア検査装置は、入出力装置１２と、記憶装置１４と、ＣＰＵ（中央処理装置）１１と、入力装置１３と、表示装置１５とを備える。入出力装置１２は、記憶媒体から検査対象のコンピュータプログラム（ソースコードＤ０１）を読み込む。記憶装置１４は、入出力装置１２で読み込んだソースコードＤ０１、解析の中間データ、及び解析に必要なデータを格納する。ＣＰＵ（中央処理装置）１１は、各種演算を実行してソースコードＤ０１を解析する。入力装置１３は、ユーザが解析に必要な情報を入力するための装置である。表示装置１５は、ＣＰＵ１１から出力される検査結果を表示する。検査結果は、入出力装置１２を用いて記憶媒体に書き込むことも可能である。ソースコードＤ０１の具体例は、図４を参照して後述する。
【００１４】
或いは、ソフトウェア検査装置は、クライアントサーバモデルとしても実現可能である。例えば、汎用のパーソナルコンピュータ（クライアント）をコンピュータネットワークを介してサーバに接続する。これにより、図１に示すＣＰＵ１１を備えるサーバを、コンピュータネットワークを介して、入出力装置１２、入力装置１３、記憶装置１４、或いは表示装置１５に接続することができる。この場合、ソフトウェア検査装置は、主にＣＰＵ１１（サーバ）により構成され、入出力装置１２、入力装置１３、記憶装置１４、或いは表示装置１５はソフトウェア検査装置に含まれない。
【００１５】
図２を参照して、図１のＣＰＵ１１の機能的構成を説明する。ＣＰＵ１１を備えるコンピュータをソフトウェア検査装置として機能させるためのコンピュータプログラム（ソフトウェア検査プログラム）を、ＣＰＵ１１を備えるコンピュータにインストールして実行する。これにより、ＣＰＵ１１は、以下に示す各情報処理部として機能する。なお、ここでは、ソフトウェアによってソフトウェア検査装置を実現する例を示すが、もちろん、以下に示す各情報処理を実行するための専用のハードウェアを用意して、ソフトウェア検査装置を構成することも可能である。ソフトウェア検査プログラムを記録した記録媒体は、本発明の他の実施形態の１つである。
【００１６】
第１実施形態に係わるＣＰＵ１１ａは、ソースコード入力部２１、始点終点特定部２２、区間特定部２３、レジスタ書込特定部２４、間違い検出部２５、及び検査結果出力部２６として機能する。
【００１７】
ソースコード入力部２１は、検査対象となるコンピュータプログラム（ソースコードＤ０１）を入出力装置１２或いは入力装置１３から読み取り、記憶装置１４に格納する。
【００１８】
始点終点特定部２２は、検査対象となるソースコードＤ０１の中から、スタートアップ区間、移行区間、及び復帰区間の各々の始点及び終点に係わるステートメントを特定する。「スタートアップ区間」とは、組み込み機器が起動する時に実行されるスタートアップ処理が記述された区間である。「移行区間」とは、組み込み機器が起動した後に、通常モードから低消費電力モードへ移行する時に実行される移行処理が記述された区間である。「復帰区間」とは、低消費電力モードから通常モードへ復帰する時に実行される復帰処理が記述された区間である。低消費電力モードとは、通常モードよりも組み込み機器の消費電力が低いモードである。組み込み機器が起動すると、先ず、スタートアップ処理が実行され、その後、通常モードが開始される。所定時間ユーザからの操作入力が無い等の所定の条件が満たされた場合、「移行区間」を経て、通常モードから低消費電力モードへ移行する。ユーザからの操作入力を受け付けることを含む所定の条件が満たされた場合、「復帰区間」を経て、低消費電力モードから通常モードへ復帰する。
【００１９】
始点終点特定部２２には、ソフトウェア情報リストＤ０２及び対応表Ｄ０３が入力される。ソフトウェア情報リストＤ０２には、移行処理、復帰処理、及びスタートアップ処理に関するソフトウェア情報が記述されている。ソフトウェア情報は、検査実行時に、入出力装置１２或いは入力装置１３を介してユーザにより登録される外部情報である。ソフトウェア情報リストＤ０２は、例えば、通常モードと低消費電力モードとの区切れ目に関する情報、及び割り込み許可及び割り込み禁止を制御する命令のリストである。ソフトウェア情報リストＤ０２の具体例は、図６を参照して後述する。
【００２０】
対応表Ｄ０３には、ソフトウェア情報と移行区間、復帰区間、及びスタートアップ区間との関係を定義した区間対応データが記述されている。区間対応データは、検査実行前に、予め入出力装置１２から入力され、記憶装置１４に格納された内部情報である。始点終点特定部２２は、ソフトウェア情報リストＤ０２及び対応表Ｄ０３を用いて、スタートアップ区間、移行区間、及び復帰区間の各々の始点及び終点を特定する。対応表Ｄ０３及び始点及び終点を特定方法の具体例は、図６及び図７を参照して後述する。
【００２１】
区間特定部２３は、始点終点特定部２２により特定された始点及び終点に基づいて、ソースコードＤ０１に含まれるステートメントの中から、スタートアップ区間、移行区間、及び復帰区間の各々に属するステートメントを特定する。区間特定部２３は、エントリーポイント一覧Ｄ０４を入出力装置１２或いは入力装置１３から読み取り、記憶装置１４に格納する。区間特定部２３は、エントリーポイント一覧Ｄ０４に記述されたエントリーポイント（プログラムの開始点）に登録された関数について、各区間に属するステートメントを特定する。区間特定部２３の具体的な動作例は、図９及び図１０を参照して後述する。
【００２２】
レジスタ書込特定部２４は、区間特定部２３により特定されたステートメントにおいて書込が行われるレジスタを、スタートアップ区間、移行区間、及び復帰区間の各々について特定する。レジスタ書込特定部２４は、レジスタのみならず、レジスタに書込が行われる箇所、及びその代入値をも特定してもよい。レジスタ書込特定部２４は、ソフトウェア情報リストＤ０２に登録された低消費電力モード移行命令及び低消費電力モード復帰命令に関わるレジスタ以外のレジスタの中から、書込を行っているレジスタ及びその箇所、代入値を検出することが望ましい。レジスタ書込特定部２４による特定結果の具体例は、図１１を参照して後述する。
【００２３】
間違い検出部２５は、書込が行われるレジスタについて、各区間での書き込みの有無、代入値を比較し、設定漏れ及び設定値間違いの危険性を判定する。具体的には、間違い検出部２５は、危険性判定データＤ０５を用いて、レジスタ書込特定部２４で特定されたレジスタに関して、想定される間違いを検出する。危険性判定データＤ０５は、検査実行前に予め、入出力装置１２或いは入力装置１３から読み込まれ、記憶装置１４（データ記憶部）に格納されている。危険性判定データＤ０５は、スタートアップ区間、移行区間、及び復帰区間から選ばれる２つの区間のうち一方で書込が有り、他方で書込が無いレジスタに関して、想定される間違いを規定する。間違い検出部２５による検出結果の具体例は、図１３を参照して後述する。
【００２４】
検査結果出力部２６は、レジスタ書込特定部２４で特定されたレジスタ毎に、間違い検出部２５により検出された間違いを出力する。検査結果出力部２６は、例えば、レジスタ名や、ファイル名、行番号、関数名など、設定漏れ或いは設定値間違い箇所の特定できる情報を、区間に関連づけて出力する。検査結果出力部２６は、表示装置１５或いは入出力装置１２に挿入された記憶媒体へ出力する。
【００２５】
［ソフトウェア検査装置により実行される情報処理の手順］
次に、図３〜図１３を参照して、実施形態に係わるソフトウェア検査方法の一例として、図１及び図２に示すソフトウェア検査装置によって実行される情報処理の手順を説明する。
【００２６】
先ず、ステップＳ０１において、ソースコード入力部２１は、検査対象となるソースコードＤ０１を例えば入出力装置１２から読み込み、記憶装置１４に格納する。なお、ソースコードＤ０１は、予め入出力装置１２を用いてユーザによりソフトウェア検査装置内に読み込まれ、記憶装置１４に格納されていてもよい。この場合、ステップＳ０１の処理は不要である。図４（ａ）、（ｂ）、（ｃ）は、読み込まれたソースコードＤ０１として、Ｃ言語で記述されたコンピュータプログラムの一例を示す。検査対象となるコンピュータプログラムは、図４（ａ）、（ｂ）、（ｃ）に示す３つのファイルに跨って記述されている。図４（ａ）のファイル名は「file1.c」であり、図４（ｂ）のファイル名は「file2.c」であり、図４（ｃ）のファイル名は「file3.c」である。Ｃ言語で記述されたコンピュータプログラムの一例において、各ファイルの左端部に記載された１から始まる連続番号は、各ステートメントの「行番号」を示す。エントリーポイント一覧Ｄ０４に記述された関数“reset”（図５）には、「file1.c」において、スタートアップ区間、移行区間、復帰区間が記述され、各区間において、サブルーチンコールが記述され、サブルーチンコールに従って「file2.c」或いは「file3.c」のステートメントが実行される。「file1.c」において、割り込みを許可する“EI”、 割り込みを禁止する“DI”が記述されている。
【００２７】
次に、ステップＳ０２において、始点終点特定部２２は、読み込まれたソースコードＤ０１の中から、スタートアップ区間、移行区間、及び復帰区間の各々の始点及び終点に係わるステートメントを特定する。先ず、ユーザにより入力された図６に示すソフトウェア情報リストＤ０２を読み込む。ソフトウェア情報リストＤ０２のうち、図６に示す左側の項目（１．〜６．）は予め用意されたものであり、これに対してユーザは、図６に示す右側の欄を入力する。次に、始点終点特定部２２は、記憶装置１４から図７に示す対応表Ｄ０３を読み込む。対応表Ｄ０３は、スタートアップ区間、移行区間、及び復帰区間の各々の始点及び終点と、図６のソフトウェア情報リストＤ０２の左側の項目（１．〜６．）との対応関係を定義している。始点終点特定部２２は、ソフトウェア情報リストＤ０２及び対応表Ｄ０３に基づいて、各区間の始点及び終点に係わるステートメントで直接的或いは間接的に実行される関数を特定する。始点終点特定部２２による特定結果を、図８の表に示す。図８において、「直接的に実行する関数」として“SLEEP”及び“WAKEUP”が特定された場合、「間接的に実行する関数」が特定される。なぜなら、図４の例において、関数“SLEEP”及び“WAKEUP”は、“reset”或いは“interrupt1”（間接的に実行する関数）の中で実行されるからである。
【００２８】
次に、ステップＳ０３において、区間特定部２３は、図５に示すエントリーポイントに登録された関数について、スタートアップ区間、移行区間、及び復帰区間の各々の始点及び終点の間に属するステートメントを特定する。ステップＳ０３の詳細な手順を、図９を参照して説明する。図９に示す手順では、ステートメントを実行順に検査し、ソフトウェア情報リストＤ０２及び対応表Ｄ０３に基づいて、各区間の始点・終点に該当するコード、或いは関数に合致するか否かを判定し、その結果に応じて、ステートメントを該当する区間に登録する。
【００２９】
先ず、ステップＳ３１で、エントリーポイントに登録された関数（例えば、“reset”）における最初のステートメント（例えば、「file1.c」の２行目）を選択する。ステップＳ３２で、選択したステートメントを、属する区間で分類する。選択したステートメントに、スタートアップ区間（ＳＵ区間）の始点で実行される関数“reset”が記述されている場合、ステップＳ３３で、ＳＵ区間フラグに「１」を設定する。ＳＵ区間の終点に該当するコード（file1.c、８行目の直前）である場合、ステップＳ３４でＳＵ区間フラグを「０」にリセットする。移行区間（ＳＬ区間）の始点に該当するコード（file1.c、１１行目、file2.c、９行目）である場合、ステップＳ３５でＳＬ区間フラグに「１」を設定する。ＳＬ区間の終点に該当するコード（REG111=1;の直前）である場合、ステップＳ３６でＳＬ区間フラグを「０」にリセットする。復帰区間（ＷＵ区間）の始点に該当するコード（REG111=0;の直後）である場合、ステップＳ３７でＷＵ区間フラグに「１」を設定する。ＷＵ区間の終点に該当するコード（file1.c、８行目の直前）である場合、ステップＳ３８でＷＵ区間フラグを「０」にリセットする。
【００３０】
ステップＳ３９に進み、ＳＵ区間、ＳＬ区間及びＷＵ区間の各フラグの状態に応じて、選択されたステートメントを分類する。ＳＵ区間フラグに「１」が設定されている場合、ステップＳ４０において、選択されたステートメントをＳＵ区間に属するステートメントとして登録する。ＳＬ区間フラグに「１」が設定されている場合、ステップＳ４１において、選択されたステートメントをＳＬ区間に属するステートメントとして登録する。ＷＵ区間フラグに「１」が設定されている場合、ステップＳ４２において、選択されたステートメントをＷＵ区間に属するステートメントとして登録する。
【００３１】
ステップＳ４３に進み、ソースコードＤ０１の中に次のステートメントが有れば（Ｓ４３でＹＥＳ）、次のステートメントを選択して（Ｓ４４）、上記したステップＳ３２〜Ｓ４２を繰り返し実施する。
【００３２】
図１０は、図９に示す手順にしたがって、ステートメントを分類した結果を示す。区間特定部２３は、図５に示すエントリーポイントに登録された関数“reset”及び“interrupt1”を対象にして、ステートメントを分類している。図１０の右端の３つの項目は、それぞれ、ＳＵ区間、ＳＬ区間及びＷＵ区間のフラグの状態を示す。file1cの２、３、５行目のステートメントは、ＳＵ区間フラグの「１」が設定され、ＳＵ区間に属するステートメントとして登録される。同様にして、ＳＬ区間及びＷＵ区間に属するステートメントが登録された。なお、図１０の間接関数とは、図８に示す間接関数である。
【００３３】
図３に戻り、ステップＳ０４において、レジスタ書込特定部２４は、ステップＳ０３で各区間に登録されたステートメントを解析して、レジスタに書込を行っているステートメントを検出する。レジスタは、図６の「４．低消費電力モードの移行命令」及び「５．低消費電力モードの復帰命令」に関わるレジスタ（REG111）以外のレジスタである。各区間に登録されたステートメントが関数コールの場合は、その関数を解析して、同様にしてステートメントを検出する。各区間に登録されたステートメントが関数コールであり、かつ間接的に始点若しくは終点を実行する関数である場合は、その関数を解析し、始点以降もしくは終点以前のステートメントを解析する。検出されたステートメントについて、書込が行われるレジスタ名と代入値を登録する。レジスタ書込特定部２４は、処理の結果を、区間毎に分類して出力する。その結果の一例を図１１に示す。
【００３４】
ステップＳ０５に進み、間違い検出部２５は、例えば、図１２に示す危険性判定データＤ０５を用いて、書込が行われるレジスタについて、想定される間違いを検出する。
【００３５】
低消費電力モードへ移行する時、組み込み機器が備えるマイコン（ハードウェア）は、電力の消費量を少なくするために様々な機能（例えば、アナログ／デジタル変換機能）を無効にし、低消費電力モードから復帰する時、無効にした機能を有効にしている。このハードウェアが備える機能の無効／有効に対して、ソフトウェアにおいても必要な処理（レジスタの設定／再設定）を行う必要がある。例えば、アナログ／デジタル変換機能を無効にしても、データレジスタが入力を受け付ける状態のままではノイズがデータレジスタに入力されてしまい、再び有効になった時に、このノイズ、即ち意図しないデータをマイコンが処理してしまうことになる。よって、ＳＬ区間及びＷＵ区間のうち一方の区間でレジスタへの書込が有り、他方でレジスタへの書込が無い場合、低消費電力モードへの移行／復帰時におけるレジスタの設定が抜けている、という間違いが想定される。
【００３６】
スタートアップ処理の際に初期化されたレジスタは、復帰処理の際にも同じように再初期化される必要がある。よって、ＳＵ区間及びＷＵ区間のうち一方の区間でレジスタへの書込が有り、他方でレジスタへの書込が無い場合、レジスタの初期化或いは再初期化が抜けている、という間違いが想定される。更に、ＳＵ区間及びＷＵ区間の両区間で書込が行われているが、異なる代入値が書き込まれている場合、レジスタの初期化或いは再初期化における設定値に間違いがあることが想定される。
【００３７】
以上の観点から、間違い検出部２５は、例えば、図１２に示す危険性判定データＤ０５を用いて、書込が行われるレジスタについて、想定される間違いを検出する。間違い検出部２５による検出結果を図１３に示す。
【００３８】
レジスタ“REG1”は、ＳＵ区間及びＳＬ区間で書込が行われているが、ＷＵ区間で書込が行われていない。よって、レジスタ“REG1”に関して、低消費電力モードへの移行／復帰時におけるレジスタの設定が抜けているという間違い、及びレジスタの初期化或いは再初期化が抜けている、という間違いが想定される。レジスタ“REG2”は、ＳＬ区間及びＷＵ区間で書込が行われているが、ＳＵ区間で書込が行われていない。よって、レジスタ“REG2”に関して、レジスタの初期化或いは再初期化が抜けている、という間違いが想定される。レジスタ“REG3”は、ＳＵ区間、ＳＬ区間及びＷＵ区間の総てで書込が行われているが、代入値が異なっている。よって、レジスタ“REG3”に関して、レジスタの初期化或いは再初期化における設定値に間違いがあることが想定される。レジスタ“REG4”は、ＳＵ区間で書込が行われているが、ＳＬ区間及びＷＵ区間で書込が行われていない。よって、レジスタ“REG4”に関して、レジスタの初期化或いは再初期化が抜けている、という間違いが想定される。
【００３９】
ステップＳ０６に進み、検査結果出力部２６は、ステップＳ０４で特定されたレジスタ毎に、ステップＳ０５で検出された間違いを出力する。出力形式は、例えば、図１３に示す表形式で構わない。
【００４０】
以上説明したように、本発明の実施形態によれば、以下の作用効果が得られる。
【００４１】
ソースコードＤ０１の中から、ＳＵ区間、ＳＬ区間、及びＷＵ区間の各々に属するステートメントを特定し、特定されたステートメントにおいて書込が行われるレジスタを区間毎に特定する。そして、ＳＵ区間、ＳＬ区間、及びＷＵ区間から選ばれる２つの区間のうち一方で書込が有り、他方で書込が無いレジスタに関して、想定される間違いを検出して出力する。これにより、コンピュータプログラムを実際に実行することなく、静的な解析手法により、コンピュータプログラムの間違い箇所を特定することができる。また、静的な解析手法により、コンピュータプログラムに記述された総てのパスを漏れなく検査することができる。
【００４２】
システムレベルのテストでしか検出することができなかった間違いを、ソースコードレビューの段階で検出できるようになる。ソースコードの解析により、全ての処理、全ての変数、全ての処理と変数の組み合わせを網羅的に検査するため、手動でテストケースを作成するこれまでの手法に比べ、正確なテストができるようになる。また、より早い段階で不具合の検出ができるため、間違い分析工数、間違い修正工数を削減できる。
【００４３】
レガシーコードのような仕様書が整備されていないコードや、分散開発等により他拠点で開発されたコードなど、低消費電力モードへの移行処理及び低消費電力モードからの復帰処理に関わる情報が整備或いは管理されていないケースにおいて、ソースコードから自動的に移行処理及び復帰処理におけるレジスタ設定の間違いを検出できる効果は大きい。ソースコードの解析により、全ての処理、全ての変数、全ての処理と変数の組み合わせを網羅的に検査することで、レガシーコードの移植間違いや、分散開発されたソースコードの結合間違いを、効率よく発見できる。
【００４４】
ソフトウェアの複雑化や、派生開発の繰り返しが進むと、管理ミスや記述ミスにより意図しないパスが作りこまれ、必要なレジスタへの設定処理漏れや不必要なレジスタへの設定処理の混入が発生する。本実施形態によれば、静的な解析手法により、コンピュータプログラムに記述された総てのパスを漏れなく検査することができるので、意図しないパスの発生によるレジスタの設定に関する間違いを特定できる。
【００４５】
（変形例）
実施形態では、各区間におけるレジスタの書込の有無及び代入値の不一致に基づいて間違いを判定した。レジスタの書込が行われるために書込条件を更に考慮して間違いを判定してもよい。つまり、２つの区間で同じ値がレジスタに書込が行われているが、書込を行うために条件文が一方の区間のみで設定されている場合、間違いが想定されると判断してもよい。
【００４６】
図１４を参照して、変形例に係わるＣＰＵ１１ｂの機能的構成を説明する。ＣＰＵ１１ｂは、図２のＣＰＵ１１ａに比べて、更に、レジスタ書込特定部２４により特定されたレジスタに書込が行われるために書込条件が規定されているか否かを判断し、且つ、書込条件が規定されている場合に、当該書込条件を抽出する条件抽出部２７を備える点が相違する。その他の構成はＣＰＵ１１ａと同じであり説明を省略する。
【００４７】
間違い検出部２５は、ＳＵ区間、ＳＬ区間、及びＷＵ区間から選ばれる２つの区間の一方で書込条件が無く、他方で書込条件が有る場合、及び、２つの区間の両方で異なる書込条件が規定されている場合、２つの区間の一方で書込が有り、他方で書込が無いレジスタに関して想定される間違いを検出する。
【００４８】
レジスタへの書込が、区間内の書込条件により実行されている場合、書込条件が満たされなければ、レジスタへの書込は実行されない可能性がある。よって、この場合、レジスタへの書込が無いものと同様にして扱う。
【００４９】
間違い検出部２５による検出結果の一例を図１５に示す。図１３に比べて、区間毎に「書き込み条件」の欄が追加されている。また、レジスタ“REG3”のＷＵ区間で、書込条件を検出している。よって、間違い検出部２５は、ＷＵ区間で、レジスタ“REG3”に書込が行われない場合に想定される間違い、具体的には、レジスタの初期化或いは再初期化が抜けている、という間違いを新たに検出する。
【００５０】
変形例によれば、書込条件の有無を更に考慮して間違いを検出するため、間違い箇所の検出精度が向上する。
【００５１】
上記のように、本発明の実施形態を記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
【００５２】
特願２０１３−１９８１３８号（出願日：２０１３年９月２５日）の全内容は、ここに援用される。
【符号の説明】
【００５３】
１４  記憶装置（データ記憶部）
２１  ソースコード入力部
２２  始点終点特定部
２３  区間特定部
２４  レジスタ書込特定部
２５  間違い検出部
２６  検査結果出力部
２７  条件抽出部
Ｄ０１  ソースコード（コンピュータプログラム）
Ｄ０５  危険性判定データ
【図１】
0006037034.tif 000002
【図２】
0006037034.tif 000003
【図３】
0006037034.tif 000004
【図４】
0006037034.tif 000005
【図５】
0006037034.tif 000006
【図６】
0006037034.tif 000007
【図７】
0006037034.tif 000008
【図８】
0006037034.tif 000009
【図９】
0006037034.tif 000010
【図１０】
0006037034.tif 000011
【図１１】
0006037034.tif 000012
【図１２】
0006037034.tif 000013
【図１３】
0006037034.tif 000014
【図１４】
0006037034.tif 000015
【図１５】
0006037034.tif 000016