(57)【要約】  組込みシステムのソフトウェア不具合の原因箇所を、プログラムの制御依存関係及びデータ依存関係とプログラム処理頻度を用いることで効率良く特定する。  コンピュータシステムが組込まれた組込みシステムにおいて、組込みシステムで実行するプログラムに対応するソースコード中の制御／データ依存関係を解析する解析部と解析結果に対応してプログラム実行頻度を取得するログ取得部と、制御／データ依存関係の情報とプログラムの処理結果情報を対応付けて出力するログ出力部とを有する。
2014141352.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行する組込みシステムであって、実行するプログラムに対応するソースコードの情報と、プログラムに対応したソースコード中の演算処理に関する内部データの依存関係の情報を求める解析部と、前記プログラムを実行した時の前記内部データの依存関係毎に処理頻度を求めるログ取得部とを備え、
前記ログ取得部はログとして処理頻度を付加した依存関係の情報を出力すること
を特徴とするシステム制御装置。
【請求項２】
請求項１に記載のシステム制御装置において、
処理頻度とは、前記ソースコードにおける演算処理の実行回数、又は実行比率であること
を特徴とするシステム制御装置。
【請求項３】
請求項１に記載のシステム制御装置において、
前記解析部は、演算処理に関する内部データの依存関係として、プログラムのソースコード中の複数の変数の依存関係を抽出し、
前記ログ取得部は、前記処理頻度から、前記複数の変数中のそれぞれの参照元変数が他の参照先変数に影響を与える確率情報を求め、
デバッグ起点箇所から前記変数依存関係を辿ってデバッグ候補箇所を特定するために、処理頻度を付加した依存関係の情報を出力すること
を特徴とするシステム制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組込みシステムに関し、特に複数のハードウェアや複数のソフトウェアを組み合わせたシステムのプログラム処理状況をログとして記録するログ処理技術に関する。
【背景技術】
【０００２】
エレベータ、自動車、建設機械等の技術分野ではいわゆる組込みソフトウェアによって制御対象を制御する、組込み制御装置が用いられている。組込みソフトウェアは、従来の機械的機構や電気回路による方式に比べて柔軟かつ高度な制御が実現できること、ソフトウェアの部分的な変更によって多くの派生製品を開発できることが利点として挙げられる。【０００３】
このような組込み制御装置、例えばエレベータ制御装置では、一定周期又は割り込みによってタスクを起動し、行き先階指定ボタンやドア安全センサ等のセンサの入力に基づいて制御変数を更新し、ドア開閉用モータやかご駆動用モータなどのアクチュエータを制御する、いわゆるデータ駆動型の計算モデルが採用されている。【０００４】
近年、組込み制御装置に求められる制御処理が年々複雑化するとともに、制御変数間の依存関係が複雑化し、ソフトウェアの開発が困難となっている。その一方で、組込みソフトウェアはエレベータや自動車、建設機械等のシステムにおいて、人命に関わる走行制御機能等を提供しているため、高品質なソフトウェアが要求されている。これに対して、複雑かつ大型のソフトウェアの品質を確保するには、システムの不具合発生時に効率良くエラー原因を特定することが重要となる。【０００５】
大型のソフトウェアのエラー原因特定には、プログラム中の制御依存関係及びデータ依存関係を理解し、システムの不具合を引き起こした原因を効率良く特定することは、必要不可欠な技術である。【０００６】
ソフトウェアのエラー原因を特定する技術としては、プログラム中の制御依存関係及びデータ依存関係からエラー原因を究明する技術が知られ、例えば特許文献１に記載されている。【０００７】
また一方で、プログラムファイル中の関数単位でエラー原因を特定する技術としては、関数依存関係と関数変更履歴を用いたエラー原因究明技術が知られ、例えば特許文献２に記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平６−１７５８８４号公報
【特許文献２】国際公開番号ＷＯ２０１２／００３６３０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記従来技術において、特許文献１に記載された技術によれば、プログラムの実行毎に制御依存関係及びデータ依存関係を取得し、エラーと関連のある制御及びデータの依存関係を抽出する機能を実現している。しかしながら、出力されるデータはプログラム処理中に依存関係があった全ての処理及びデータを含んでいるため、大規模化が進んだプログラムでは、エラー原因特定のための解析対象範囲が広大となり、抽出した依存関係からエラー原因を特定することは容易ではない。【００１０】
また、特許文献２に記載された技術によれば、プログラムの関数毎の変更履歴と依存関係に着目し、開発者が関数変更履歴に重み付けをすることによって、エラー原因の特定を補助している。しかしながら、関数変更履歴への重み付けは開発者自身が決定する必要があり、システムを熟知した開発者であっても正確な重み付けを設定することは難しい。【００１１】
本発明の目的は、大規模な組込みシステムにおいて、実行時の制御及びデータ依存関係に対し、処理頻度情報を用いることでエラー原因の特定を補助するログ処理機能を提供するものである。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明は、コンピュータシステムが組込まれた組込みシステムにおいて、組込みシステムで実行するプログラムに対応するソースコード中の制御／データ依存関係を解析する解析部と解析結果に対応してプログラム実行頻度を取得するログ取得部と、制御／データ依存関係の情報とプログラムの実行頻度情報を対応付けて出力するログ出力部とを有する。
【発明の効果】
【００１３】
本発明によれば、組込みシステムとして大規模、複雑化されたソフトウェア（コンピュータプログラム）であっても、システムが記録した実行頻度情報を参照することで、不具合を引き起こしたエラー原因を容易に特定することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明による一実施の形態のシステム制御装置の全体構成を示すブロック図。
【図２】ソースコードデータを示す図。
【図３】制御依存関係及びデータ依存関係を示す図。
【図４】制御／データ依存関係データを示す図。
【図５】処理頻度データを示す図。
【図６】システム制御装置の動作を示すフローチャート。
【図７】制御／データ依存関係データと処理頻度データとの比較を示す図。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明による一実施の形態を説明する。
【００１６】
図１は、本発明による一実施の形態であるシステム制御装置のブロック図である。システム制御装置１は、組込みシステムを制御するプログラムを実行するプログラム実行部１１と、制御／データ解析部１２と、ログ取得部１３と、ログ出力部１４と、データベース１５とを備える。プログラム実行部１１は、制御用のプログラムを実行する際、実行するプログラムに対応したソースコードを、データベース１５のソースコードデータ１５１から取得する。制御／データ解析部１２は、プログラム実行部１１から実行しているプログラムに対応したソースコードの情報を取得して、このソースコード中の処理依存関係及びデータ依存関係を解析し、制御／データ依存関係データ１５２を生成する。ログ取得部１３は、プログラム実行部１１よりプログラムの処理実行情報を取得し、制御／データ依存関係データ１５２に対応するプログラムの処理実行情報を付加した処理頻度データ１５３を出力する。ログ出力部１４は、処理頻度データ１５３を読み出し、図示されていない外部の出力装置に出力する。
【００１７】
図２は、ソースコードデータ１５１の詳細を示す図である。ソースコードデータ１５１には、ソースコードがファイルとして格納されており、以下の説明では、ソースコードファイルはプログラミング言語の一種であるＣ言語で書かれているものとする。例えばソースファイル１５１１のｃａｌｃＭＡＸ．ｃには、関数ｃａｌｃＭＡＸが記述されており、外部より変数ａ１と変数ａ２の値を取得した後、２行目で変数ａ１の値を変数ｃ１に代入し、３行目で変数ａ２の値を変数ｃ２に代入する。その後、７行目から１０行目の処理で変数ｃ１とｃ２のうち値の大きい方を変数ｍａｘに代入し、１３行目で変数ｍａｘの値を出力する、といった内容となっている。なおこの図では、ソースコードファイルの左端の数字はプログラム行数を示している。
【００１８】
図３は、ｃａｌｃＭＡＸ．ｃのソースコードファイル１５１１に対応した、制御依存関係及びデータ依存関係を表したグラフ１５２１を示す図である。ここでは、制御依存関係とデータ依存関係の違いについて説明する。制御依存関係及びデータ依存関係を表したグラフ１５２１は、ソースコードファイル１５１１の制御依存関係及びデータ依存関係をグラフィカルに表現したものである。グラフ１５２１中の図形中のシンボルはソースコード１５１１中のデータ（変数）を示している。そして、丸印はソースコードファイル１５１１中の演算処理を表し、菱形はソースコードファイル１５１１中の条件判定処理を示している。また、グラフ１５２１中の実線で描かれた矢印はデータ（変数）の依存関係を示している。一方、破線で描かれた矢印は制御の依存関係を表しており、付属文字として記載しているＴＲＵＥとＦＡＬＳＥは条件判定処理の結果を示している。システム開発者は、このグラフ１５２１を参照することで、変数ｍａｘの値に依存関係のある処理やデータの有無及び関連を理解することができる。
【００１９】
図４は、ソースコードファイル１５１１を例に制御／データ依存関係データ１５２を示した図である。制御／データ依存関係データ１５２は、ソースコードデータ１５１の制御依存関係及びデータ依存関係を表すデータであるが、例えば、システムの不具合を引き起こしたエラー原因を特定する際においては、データ依存関係のみに着目しても良いことから、図４ではデータ依存関係のみを示している。ソースコードファイル１５１１に対応するデータ依存関係のグラフ１５２２１には、ソースコードファイル１５１１中の変数ｍａｘの値に依存関係がある変数としてｃ１とｃ２が存在することが表されている。このグラフ１５２２１を表形式で示したものが制御／データ依存関係データ１５２２２である。
【００２０】
しかしながら、制御システムのプログラムが大規模化した現在においては、処理依存関係及びデータ依存関係が膨大となっている。このため、ソースコードファイル１５１中の処理依存関係及びデータ依存関係だけからシステムの不具合を引き起こしたエラー原因を特定することは容易ではない。
【００２１】
このため、ログ取得部１３では、制御／データ依存関係データ１５２に、システム制御装置１１によりプログラムを実行した結果として実行ログを蓄積しておき、この実行ログから、実行したプログラムに対応するソースコードファイル１５１における演算処理毎の処理頻度を付加した処理頻度データ１５３を生成する。図５に示した例には、処理頻度データとして、ソースコードファイル１５１１中の０７行目におけるｉｆ条件判定文による処理結果に応じたデータ依存関係に対応する演算処理毎の処理頻度を示すデータが追加されている。より具体的には、グラフ１５３１１のデータ依存関係を表す矢印に付随して記載された数字、及び処理頻度データ１５３１２に処理頻度として記載された数字である‘９９’と‘１’は、ソースコードファイル１５１１を１００回実行した結果、そのうち９９回は０７行目のｉｆ条件判定文の結果がＴＲＵＥとなり変数ｍａｘに変数ｃ１の値が代入され、１００回中１回のみソースコードファイル１５１１中の０７行目のｉｆ条件判定文の結果がＦＡＬＳＥとなり変数ｍａｘに変数ｃ２の値が代入されたことを示している。
【００２２】
この処理頻度は、データ依存関係における関係の強さを表す関係強度と考えることができる。また全体の処理に占める処理割合としてみると、ある参照元の変数から参照先の変数に影響を与える確率（影響確率）と見ることもできる。このため、処理頻度の高いデータ依存関係を参考に、エラー原因を特定する箇所を絞り込んで効率良く原因特定作業を進めることができる。
【００２３】
この処理頻度データ１５３１２から、変数ｍａｘに影響を与える変数にはｃ１とｃ２があるものの、プログラムを実行した場合はｃ１の値を代入した回数の方がｃ２の値を代入した回数より圧倒的に多いことが分かる。このため、システムに不具合が発生した際に、制御／データ依存関係データ１５３１２の利用頻度を参照して処理頻度の高いデータ依存関係に着目することで、効率良くエラー原因を特定することができる。
【００２４】
図６に、以上の処理を纏めた、システム制御装置１の動作を示すフローチャートを示す。システム制御装置１の動作を開始すると、プログラム実行部１１が制御プログラムを実行し、ステップＳ１０２では、実行したプログラムに対応するソースコードデータ１５１中のソースコードが取得される。ステップＳ１０３では、制御／データ解析部１２が、プログラム実行部１１で実行したプログラムのソースコードにおける制御依存関係及びデータ依存関係を解析して、制御／データ依存関係データ１５２を作成する。ステップＳ１０４では、ログ取得部１３が、スッテプＳ１０２で実行したプログラムのソースコードデータにおける演算処理毎の実行回数を記録した実行ログを蓄積しておき、この実行ログと制御／データ依存関係データ１５２から、依存関係毎の実行頻度を求めた処理頻度データ１５３を作成する。ステップＳ１０５では、ログ出力部１４が、処理頻度データ１５３を外部出力する。
【００２５】
図７に、図６に示した処理により生成される制御／データ依存関係データ１５２と処理頻度データ１５３を比較した例を示す。まず、制御／データ依存関係データ１５２の例として、制御／データ依存関係データ１５２３では、変数ｍとｎとоが出力信号である。ここで、変数ｍとｎとоのうち、変数ｍとｎに対応する出力信号の値が異常値を示した場合、変数ｍと変数ｎに影響を与えている変数を辿っていくことで、エラー原因箇所を特定する。しかしながら、制御／データ依存関係データ１５２３は依存関係の有無のみを示しているため、不具合を引き起こしたエラー原因特定のための解析対象範囲が破線で示した範囲のように広くなり、効率良くエラー原因を特定することは難しい。
【００２６】
一方、処理頻度データ１５３２は処理頻度データ１５３に対応するものであり、制御／データ依存関係データ１５２３と同様、変数ｍとｎとоが出力信号に対応する。ここで、出力変数ｍとｎとоのうち、変数ｍとｎの値が異常値を示した場合、信号ｍとｎに影響を与えている変数のうち、処理頻度データを参考にすることによって依存関係の強い変数を特定することが可能である。例えば図に示した例では、不具合を引き起こしたエラー原因特定のための解析対象範囲を、処理頻度の高い変数ｊ、ｇ、ｃを対象とした処理に絞ることができる。このように、プログラム実行時に発生したエラー原因を解析する際に、処理頻度データ１５３におけるプログラム実行時の処理頻度データを利用することによって、優先的に解析するプログラムの箇所を特定することができるため、より効率的にエラー原因を特定することができる。
【符号の説明】
【００２７】
１：システム制御装置、１１：プログラム実行部、１２：制御／データ解析部、１３：ログ取得部、１４：ログ出力部、１５：データベース、１５１：ソースコードデータ、１５２：制御／データ依存関係データ、１５３：処理頻度データ
【図１】
2014141352.tif 000003
【図２】
2014141352.tif 000004
【図３】
2014141352.tif 000005
【図４】
2014141352.tif 000006
【図５】
2014141352.tif 000007
【図６】
2014141352.tif 000008
【図７】
2014141352.tif 000009
【国際調査報告】
2014141352.tif 000010
2014141352.tif 000011
2014141352.tif 000012
2014141352.tif 000013