(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023047127
(43)【公開日】2023-04-05
(54)【発明の名称】LSB演算チェック装置及びLSB演算チェック用プログラム
(51)【国際特許分類】
G06F 8/30 20180101AFI20230329BHJP
【FI】
G06F8/30
【審査請求】有
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021156070
(22)【出願日】2021-09-24
(71)【出願人】
【識別番号】391016358
【氏名又は名称】東芝情報システム株式会社
(74)【代理人】
【識別番号】100090169
【弁理士】
【氏名又は名称】松浦 孝
(74)【代理人】
【識別番号】100074147
【弁理士】
【氏名又は名称】本田 崇
(74)【代理人】
【識別番号】100124497
【弁理士】
【氏名又は名称】小倉 洋樹
(72)【発明者】
【氏名】山中 明
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC38
5B376BC70
5B376BC71
5B376BC74
(57)【要約】
【課題】作成されたソースプログラムにおけるソースコードのLSB演算に関して不適切な箇所等を指摘することが可能な装置を提供する。
【解決手段】 ソースプログラムのソースコードを分析し、演算に含まれる変数を検索する変数検索手段110と、前記変数検索手段110により検索された変数の値範囲を規定する情報に基づき当該変数の小数点以下の分解能を表すLSB分解能情報を含むLSB情報を検索するLSB情報検索手段120と、LSB情報が見つかると当該LSB情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定する判定手段130と、前記判定手段130による判定結果を出力する結果出力制御手段140とを具備する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ソースプログラムのソースコードを分析し、演算に含まれる変数を検索する変数検索手段と、
前記変数検索手段により検索された変数の値範囲を規定する情報に基づき当該変数の小数点以下の分解能を表すLSB分解能情報を含むLSB情報を検索するLSB情報検索手段と、
LSB情報が見つかると当該LSB情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定する判定手段と、
前記判定手段による判定結果を出力する結果出力制御手段と
を具備することを特徴とするLSB演算チェック装置。
【請求項2】
前記LSB情報には、LSB分解能情報が含まれており、判定手段は、LSB分解能情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定することを特徴とする請求項1に記載のLSB演算チェック装置。
【請求項3】
前記LSB情報には、オフセット情報が含まれており、判定手段は、オフセット情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定することを特徴とする請求項1または2に記載のLSB演算チェック装置。
【請求項4】
前記LSB情報には、単位情報が含まれており、判定手段は、単位情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定することを特徴とする請求項1乃至3のいずれか1項に記載のLSB演算チェック装置。
【請求項5】
ソースプログラムのソースコードに関しLSB演算チェックを行うコンピュータを、
ソースプログラムのソースコードを分析し、演算に含まれる変数を検索する変数検索手段、
前記変数検索手段により検索された変数の値範囲を規定する情報に基づき当該変数の小数点以下の分解能を表すLSB分解能情報を含むLSB情報を検索するLSB情報検索手段、
LSB情報が見つかると当該LSB情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定する判定手段、
前記判定手段による判定結果を出力する結果出力制御手段
として機能させることを特徴とするLSB演算チェック用プログラム。
【請求項6】
前記LSB情報には、LSB分解能情報が含まれており、
前記コンピュータを前記判定手段として、LSB分解能情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定するように機能させることを特徴とする請求項5に記載のLSB演算チェック用プログラム。
【請求項7】
前記LSB情報には、オフセット情報が含まれており、
前記コンピュータを前記判定手段として、オフセット情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定するように機能させることを特徴とする請求項5または6に記載のLSB演算チェック用プログラム。
【請求項8】
前記LSB情報には、単位情報が含まれており、
前記コンピュータを前記判定手段として、単位情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定するように機能させることを特徴とする請求項5乃至7のいずれか1項に記載のLSB演算チェック用プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、LSB演算チェック装置及びLSB演算チェック用プログラムに関するものである。
【背景技術】
【0002】
特に「組み込み」開発などと呼ばれている分野においては、通常のプログラミングにおいて使用されることが稀である「固定小数点」が用いられる場合がある。コンピュータにおいては、固定小数点の演算についても整数型と同じ方法で同じハードウエアで行われ、小数点の位置が指定される。
【0003】
例えば、10進数の数値「221」は、2進数で「11011101」となり、下位2bitを小数点以下と規定すると、「110111.01」=55.25を表すことができる。「下位2bitを小数点以下と規定する」は長いので、「下位2bitを小数点以下と規定する」場合には、最下位bitは0.25であるから、「221[LSB]」のように記載することで、「0.25[1/LSB]」を掛けて、221[LSB]*「0.25[1/LSB]=55.25と、小数を求めることができる。恰も、「0.25」が単位のようであるので分解能を表している、と言える。
【0004】
「組み込み」開発などでは扱う数値は物理量であり、単位があるから例えばmVの場合には、LSBを0.25[mV/LSB]と表す。なお、上記の例では、分解能が2の冪乗の場合を例としたが、扱う対象値が物理量であるから、例えば0.77[mV/LSB]のように、2の冪乗以外も可能である。16bit符号あり整数のLSBを0.001[m/LSB]とすると、長さを-32.768m~32.767mの範囲を表現できる。また、LSBを用いる場合にも、オフセットというバイアス値を用いることが行われており、16bit符号あり整数のLSBを0.01[℃/LSB]、オフセットを-273.15℃とすると、-273.15℃~382.20℃の範囲の温度を表現可能となる。
【0005】
以上のようにLSBの分解能による数値の演算を行う場合には、LSBの値、オフセット及び単位はソースコードに含まれる情報ではなく、設計者が決めるもので、例えばコメントに記載されるものである。このため、従来においては、LSBによる数値の変数を含んだソースコードのチェックにおいては、誤りチェックは専ら人が目視により行っているのが現状である。このため、コストとチェック時間が膨大なものとなり、更に、見落としなどのチェックの質も問題となることが多かった。本発明の実施形態においては、変数の小数点以下の分解能を表すLSB分解能情報を含むLSB情報を検索するようにするが、その検索は上記のようにコメントに記載されていることがあるので、コメントに対して行っても良いし、ソースコードのプログラムが参照するデータベースに記載されている場合もあるので、データベースに対して行っても良く、また、設定ファイルに記載されている場合もあるため、設定ファイルに対して行っても良い。即ち、ソースコードのプログラム及びその関係する範囲を検索して、LSB情報を検索する。
【0006】
特許文献1には、通信相手へ送信すべき各制御用データを、通信相手側で扱われる分解能のデータに変換するLSB変換(精度変換)処理を行い、その変換後のデータを通信相手へ送信するマイコンを備えた自動車用制御装置が開示されている。この装置においては、複数種類のLSB変換プログラムと、送信予定の各制御用データに対応するLSB変換プログラムの格納先頭アドレス(LSB変換コールアドレス)を定義した物理値変換テーブルとを有している。そして、装置では、送信タイミング毎に実行される物理値変換部のプログラムによって、送信する制御用データに対応したLSB変換プログラムを上記テーブルの情報に基づき起動して、その制御用データを処理対象としたLSB変換処理を行い、変換されたデータを送信する。
【0007】
上記の特許文献1に開示の技術を応用したとしてもソースコードにおけるLSB演算が行われる箇所と、その箇所における演算内容を予め求めておく必要があり、予め求めておく処理はソースコードのプログラマーに頼らざるを得ず、プログラマーに大きな負担がかかることになる。
【先行技術文献】
【特許文献】
【0008】
【発明の概要】
【発明が解決しようとする課題】
【0009】
本発明は上記のようなLSB演算における事情に鑑みなされたもので、その目的は、作成されたソースプログラムにおけるソースコードのLSB演算に関して不適切な箇所等を指摘することが可能なLSB演算チェック装置及びLSB演算チェック用プログラムを提供することである。
【課題を解決するための手段】
【0010】
本実施形態に係るLSB演算チェック装置は、ソースプログラムのソースコードを分析し、演算に含まれる変数を検索する変数検索手段と、前記変数検索手段により検索された変数の値範囲を規定する情報に基づき当該変数の小数点以下の分解能を表すLSB分解能情報を含むLSB情報を検索するLSB情報検索手段と、LSB情報が見つかると当該LSB情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定する判定手段と、前記判定手段による判定結果を出力する結果出力制御手段とを具備することを特徴とする。
【図面の簡単な説明】
【0011】
【
図1】本発明の実施形態に係るLSB演算チェック装置を示す図。
【
図2】本発明の実施形態に係るLSB演算チェック装置に用いられるルール情報の一例を示す図。
【
図3】本発明の実施形態に係るLSB演算チェック装置に用いられるルール情報の例外の一例を示す図。
【
図4】本発明の実施形態に係るLSB演算チェック装置が参照するソースコード内のコメントと演算のコードとの位置関係の一例を示す図。
【
図4A】本発明の実施形態に係るLSB演算チェック装置が参照するソースコード内の、ソースコードに付設したコメントと演算のコードとの位置関係の一例を示す図。
【
図4B】本発明の実施形態に係るLSB演算チェック装置が参照するソースコード内の、引数と戻り値のLSB情報の一例を示す図。
【
図4C】本発明の実施形態に係るLSB演算チェック装置が参照するソースコード内の、内部変数とスタティック変数のLSB情報の一例を示す図。
【
図4D】本発明の実施形態に係るLSB演算チェック装置が参照するソースコード内の、グローバル変数のLSB情報の一例を示す図。
【
図5】本発明の実施形態に係るLSB演算チェック装置の動作の一例を示すフローチャート。
【
図6】本発明の実施形態に係るLSB演算チェック装置によりLSB分解能が不一致として指摘される一例を示す図。
【
図7】本発明の実施形態に係るLSB演算チェック装置によりLSB分解能が不一致として指摘される一例を示す図。
【
図8】本発明の実施形態に係るLSB演算チェック装置によりLSB分解能が不一致として指摘される一例を示す図。
【
図9】本発明の実施形態に係るLSB演算チェック装置によりオフセットが不一致として指摘される一例を示す図。
【
図10】本発明の実施形態に係るLSB演算チェック装置により単位が不一致として指摘される一例を示す図。
【
図11】本発明の実施形態に係るLSB演算チェック装置により単位が不一致として指摘される一例を示す図。
【発明を実施するための形態】
【0012】
以下添付図面を参照して、本発明の実施形態に係るLSB演算チェック装置及びLSB演算チェック用プログラムを説明する。各図において、同一の構成要素には同一の符号を付し、重複する説明を省略する。
【0013】
図1に、本発明の実施形態に係るLSB演算チェック装置を示す。この実施形態に係るLSB演算チェック装置は、データベース200とCPU(中央処理装置)100と、キーボード等の情報入力を行うための入力部150、情報を出力する出力手段としての表示手段300とを備えている。即ち、LSB演算チェック装置は、ワークステーション、サーバ、パーソナルコンピュータ等のコンピュータ装置によって構成することができる。
【0014】
CPU100には、プログラムにより実現される各手段として、変数検索手段110、LSB情報検索手段120、判定手段130、結果出力制御手段140が備えられている。変数検索手段110は、例えば入力部150から入力されてCPU100へ到来するソースプログラムのソースコードを分析し、演算に含まれる変数を検索するものである。LSB情報検索手段120は、上記変数検索手段110により検索された変数の値範囲を規定する情報(本実施形態では、主にコメントを検索の範囲とする)に基づき当該変数の小数点以下の分解能を表すLSB分解能情報を含むLSB情報を検索するものである。本実施形態では検索の範囲を主にコメントとするが、前述の通り、データベースや設定ファイル等、LSB情報が設定されているところは全て検索の範囲とする。
【0015】
判定手段130は、LSB情報が見つかると当該LSB情報と各演算に関するルール情報とに基づき当該変数が含まれる演算が適正に行われるかを判定するものである。結果出力制御手段140は、上記判定手段130による判定結果を出力手段である表示手段300へ出力するものである。
【0016】
データベース200には、各演算に関するルール情報210が記憶されている。上記の各演算に関するルール情報210は、
図2に示すように演算子が、算術演算子、比較演算子、ビット演算子、単純代入演算子などがある。この各演算子の演算においてLSB演算を行う場合には、変数のLSB情報(以下、「演算」において用いられる「LSB情報」
を「変数のLSB情報」という)として、LSB分解能情報、オフセット情報、単位情報が対応付けて記載されており、変数の数値に関する情報が一致することがルールである。即ち、演算における2つの変数の数値のLSB分解能情報、オフセット情報、単位情報のいずれもが一致することがルールである。
【0017】
ルール情報には、
図3に示される例外の例示が示されている。1つ目は、「単位が同一であること」についての例外であり、
図3の(1)に示されるように、異なる単位系への変換が生じる場合である。ここでは、電流(A)と電圧(V)を掛けて電力(W)を得るような演算の場合である。この場合でも、接頭辞(SI接頭辞)は一致している必要がある。2つ目は
図3の(2)に示されるように、「単位が同一であること」についての例外であり、接頭辞を変化させる演算の場合である。3つ目は(3)により示されており、「演算前後のLSBについては異なっていてもよい」という例外であり、演算前に、LSBが一致した変数であり、オフセットが0であり、単位が一致している場合には、演算でき、演算後にLSBを変更することが許される。
【0018】
また、変数のLSB情報は、
図4に示すように、プログラムのコメント欄に記載されても良い。コメント欄におけるコメントCOM1の行には、変数aについて、LSB分解能情報はいくつか、オフセットはいくつか、単位はどの様かが記載される。また、コメントCOM2の行には、変数bについて、LSB分解能情報はいくつか、オフセットはいくつか、単位はどの様かが記載される。コメントCOM1とコメントCOM2の次に、変数aと変数bに関する演算式と、変数aと変数bの整数型による数値などによって演算のソースコードSCが記載される。
【0019】
変数のLSB情報は、
図4Aに示すように、変数の値の範囲と共に、変数の値の範囲の次に記載することができる。この例において、変数aにはLSB分解能情報、オフセット、単位のいずれも設定されておらず、変数bにはLSB分解能情報、オフセット、単位の全てが設定されており、変数cにはLSB分解能情報とオフセットが設定されており、変数dにはLSB分解能情報のみが設定されており、変数eにはLSB分解能情報と単位が設定されており、変数fには単位のみが設定されている。
【0020】
図4Bは、或るプログラムにおいて用いる変数に関するソースコードにより記述が
図4Bの上欄のようになされている場合に、ソースコードの記述における引数と戻り値のLSB情報が
図4Bの下欄のような構成でデータベースに格納している例を示す。上記の各引数や戻り値のLSB情報が記憶されているデータベースのレコードは、プログラム「src/main.c」から辿ることが可能なように図示しないコメントによりソースコードに記述しておくことができるし、関数名と、その関数が定義されているソースファイルパスから辿ることもできる。変数のLSB情報は、
図4Bに示すように、関数の引数と戻り値に設定することができ、その具体的内容は、プログラム「src/main.c」内ではなく、データベースに記憶しておくことができることを示している。その内容は、
図4Bの下欄の表に示すように設定される。「引数1」にはLSB分解能情報「0.001」と単位「m」が設定されており、「引数2」にはLSB分解能情報「0.01」、オフセット「-273.15」、単位「℃」のいずれもが設定されており、「引数3」には単位「V」のみが設定されている。戻り値は、「0,1」である。
【0021】
変数のLSB情報は、
図4Cに示すように、グローバル変数に設定することができる。その具体的内容は、プログラム「src/sub1.c」内ではなく、別のファイルF2として例えばデータベースに記憶しておくことができる。
図4Cの上欄に記載のグローバル変数g_value1~g_value6に対して、
図4Cの下欄の表に示すように設定される。上記のLSB情報が記憶されているデータベースのレコードは、プログラム「src/sub1.c」から辿ることが可能なように図示しないコメントによりソースコードに記述しておくことができるし、変数名と、その変数が定義されているソースファイルパスから辿ることもできる。
【0022】
変数のLSB情報は、
図4Dに示すように、内部変数とスタティック変数に設定することができる。その具体的内容は、
図4Dの上欄に記載のプログラム「src/sub2.c」内ではなく、別のファイルF3として例えばデータベースに記憶しておくことができる。その内容は、
図4Dの上欄に記述されている「int i」、「char j」、「int k」、「short l」、「long m」、「int n」のi~nに対し、
図4Dの下欄の表の「LSB」欄に示すように設定される。上記のLSB情報が記憶されているデータベースのレコードは、プログラム「src/sub1.c」から辿ることが可能なように図示しないコメントによりソースコードに記述しておくことができるし、変数名と、その変数が定義されているソースファイルパスと行番号から辿ることもできる。
【0023】
以上のように構成されたプログラム検査装置は、
図5のフローチャートに示すようにLSB演算チェックを行う。例えば入力部150から入力されてCPU100へ到来するソースプログラムのソースコードを分析し、演算に含まれる変数を検索する(S11)。検索した変数のコメントに基づきLSB情報を検索する(S12)。
【0024】
次に、ステップS12の検索によってLSB情報を見つけることができたか否かを検出し(S13)、検出できなければステップS11へ戻って処理を続ける。一方、ステップS13においてYESへ分岐すると、LSB分解能が2つの変数において一致(不一致には、一方の変数にLSB分解能が定義されていない場合を含む)しているというルールを満たすかを検出する(S14)。勿論、このステップS14では、演算に例外があれば、例外に該当するかを検出する。ここでルールが満たされていなければ、「2つの変数においてLSB分解能が一致していません」等のチェック結果のコメントを出力し(S15)、ルールが満たされていればステップS16へ進む。このLSB分解能が不一致によりNGとなるケースの例が
図6と
図7と
図8に示されている。
図6は演算の場合を示し、
図7は代入演算の場合を示し、
図8は条件分岐の演算の場合を示す。
【0025】
ステップS16では、オフセットの一致(不一致には、一方の変数にオフセットが定義されていない場合を含む)が検出される(S16)。勿論、このステップS16でも、演算に例外があれば、例外に該当するかを検出する。ここでルールが満たされていなければ、「2つの変数においてオフセットの値が一致していません」等のチェック結果のコメントを出力し(S17)、ルールが満たされていればステップS18へ進む。このケースの例が
図9に示されている。
図9は、演算(加算)の場合にNGとなる例が示されている。
【0026】
ステップS18では、単位の一致(不一致には、一方の変数に単位が定義されていない場合を含む)が検出される(S18)。勿論、このステップS18でも、演算の例外があれば、例外に該当するかを検出する。ここでルールが満たされていなければ、「2つの変数において単位が一致していません」等のチェック結果のコメントを出力し(S19)、単位が一致すると、チェック対象に係るソースコードが残っているかを検出し(S20)、YESとなるとステップS11へ戻って次の演算に対するチェックへと進む。また、ステップS20においてNOとなると動作終了となる。このケースの例が
図10と
図11に示されている。
図10は代入演算の場合を示し、
図11は条件分岐の演算の場合を示す。
【0027】
なお、以上のステップS14とステップS16とステップS18とのいずれにおいてもYESへ分岐した場合には、ステップS20へ進む前に、当該演算のソースコードの位置を特定し、演算が適切になされることを示す結果情報を出力するようにしても良い。
【符号の説明】
【0028】
100 CPU
110 変数検索手段
120 LSB情報検索手段
130 判定手段
140 結果出力制御手段
150 入力部
200 データベース
210 ルール情報
300 表示手段