(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023047126
(43)【公開日】2023-04-05
(54)【発明の名称】演算プログラムチェック装置及び演算プログラムチェック用プログラム
(51)【国際特許分類】
G06F 8/30 20180101AFI20230329BHJP
【FI】
G06F8/30
【審査請求】有
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021156069
(22)【出願日】2021-09-24
(71)【出願人】
【識別番号】391016358
【氏名又は名称】東芝情報システム株式会社
(74)【代理人】
【識別番号】100090169
【弁理士】
【氏名又は名称】松浦 孝
(74)【代理人】
【識別番号】100074147
【弁理士】
【氏名又は名称】本田 崇
(74)【代理人】
【識別番号】100124497
【弁理士】
【氏名又は名称】小倉 洋樹
(72)【発明者】
【氏名】山中 明
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC38
5B376BC70
5B376BC74
(57)【要約】
【課題】適切なチェックを行うことが可能な演算プログラムチェック装置を提供する。
【解決手段】ソースプログラムのソースコードに含まれている演算から、少なくとも1つの変数に単位情報付き数値が設定される演算を検索する演算検索手段110と、演算の種類毎に、演算に含まれる変数に設定された単位が不一致の場合に、出力すべきメッセージが記憶されたメッセージ記憶手段210と、前記演算検索手段110により検索された演算に設定されている単位情報が不一致な演算を検出する単位不一致演算検出手段120と、前記単位不一致演算検出手段が120検出した演算に基づき前記メッセージ記憶手段210を検索してメッセージを求め、このメッセージを出力するメッセージ出力制御手段130とを具備する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
ソースプログラムのソースコードに含まれている演算から、少なくとも1つの変数に単位情報付き数値が設定される演算を検索する演算検索手段と、
演算の種類毎に、演算に含まれる変数に設定された単位が不一致の場合に、出力すべきメッセージが記憶されたメッセージ記憶手段と、
前記演算検索手段により検索された演算に設定されている単位情報が不一致な演算を検出する単位不一致演算検出手段と、
前記単位不一致演算検出手段が検出した演算に基づき前記メッセージ記憶手段を検索してメッセージを求め、このメッセージを出力するメッセージ出力制御手段と
を具備することを特徴とする演算プログラムチェック装置。
【請求項2】
前記メッセージ記憶手段には、演算に設定されている単位情報が不一致な場合に演算が全く成り立たない場合の演算に対して、明らかに誤りである旨の警告メッセージが記憶されていることを特徴とする請求項1に記載の演算プログラムチェック装置。
【請求項3】
前記メッセージ記憶手段には、演算に設定されている単位情報が不一致な場合でも演算が成り立つ場合がある演算に対して、誤りの可能性がある旨の注意喚起メッセージが記憶されていることを特徴とする請求項1または2に記載の演算プログラムチェック装置。
【請求項4】
前記メッセージ記憶手段には、演算が乗算、除算、剰余算の場合に、例外的に注意喚起メッセージが記憶されていることを特徴とする請求項1乃至3のいずれか1項に記載の演算プログラムチェック装置。
【請求項5】
前記メッセージ記憶手段は、演算の一方の変数に単位情報が設定されていない「単位情報なし」の場合に対応するメッセージが記憶された「単位情報なしエリア」を備えており、
前記単位不一致演算検出手段は、演算の一方の変数に単位情報が設定されていない「単位情報なし」を検出し、
前記メッセージ出力制御手段は、前記「単位情報なし」が検出されたときには前記メッセージ記憶手段の「単位情報なしエリア」を検索してメッセージを求め、このメッセージを出力する
ことを特徴とする請求項1乃至4のいずれか1項に記載の演算プログラムチェック装置。
【請求項6】
演算の種類毎に、演算に含まれる変数に設定された単位が不一致の場合に、出力すべきメッセージが記憶されたメッセージ記憶手段を備える演算プログラムチェック装置に用いられているコンピュータを、
ソースプログラムのソースコードに含まれている演算から、少なくとも1つの変数に単位情報付き数値が設定される演算を検索する演算検索手段、
前記演算検索手段により検索された演算に設定されている単位情報が不一致な演算を検出する単位不一致演算検出手段、
前記単位不一致演算検出手段が検出した演算に基づき前記メッセージ記憶手段を検索してメッセージを求め、このメッセージを出力するメッセージ出力制御手段
として機能させることを特徴とする演算プログラムチェック用プログラム。
【請求項7】
前記メッセージ記憶手段には、演算に設定されている単位情報が不一致な場合に演算が全く成り立たない場合の演算に対して、明らかに誤りである旨の警告メッセージが記憶されていることを特徴とする請求項6に記載の演算プログラムチェック用プログラム。
【請求項8】
前記メッセージ記憶手段には、演算に設定されている単位情報が不一致な場合でも演算が成り立つ場合がある演算に対して、誤りの可能性がある旨の注意喚起メッセージが記憶されていることを特徴とする請求項6または7に記載の演算プログラムチェック用プログラム。
【請求項9】
前記メッセージ記憶手段には、演算が乗算、除算、剰余算の場合に、例外的に注意喚起メッセージが記憶されていることを特徴とする請求項6乃至8のいずれか1項に記載の演算プログラムチェック用プログラム。
【請求項10】
前記メッセージ記憶手段には、演算の一方の変数に単位情報が設定されていない「単位情報なし」の場合に対応して「単位情報なしエリア」に対応メッセージが記憶されており、
前記コンピュータを前記単位不一致演算検出手段として、演算の一方の変数に単位情報が設定されていない「単位情報なし」を検出するように機能させ、
前記コンピュータを前記メッセージ出力制御手段として、前記「単位情報なし」が検出されたときには前記メッセージ記憶手段の「単位情報なしエリア」を検索してメッセージを求め、このメッセージを出力するように機能させる
ことを特徴とする請求項6乃至9のいずれか1項に記載の演算プログラムチェック用プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、演算プログラムチェック装置及び演算プログラムチェック用プログラムに関するものである。
【背景技術】
【0002】
例えば、
図1に示すような回路において電源1に流れる電流Iを求めることを考える。この回路は、電圧Vの上記電源1に、抵抗R2と抵抗R3が並列接続された回路と抵抗R1を直列接続した回路を接続したものである。この
図1の回路において、抵抗R2に流れる電流I
2をセンサ12により測定して「1.0A」を得て、抵抗R3に流れる電流I
3をセンサ13により測定して「500mA」を得たとする。電源1に流れる電流Iは、上記「1.0A」と「500mA」を加えた値となる。しかし、
図1に記載のように単位を無視して、1と500を単純に加算して
図1に示す「501」を答えとすることはできない。
【0003】
上記の演算を行う処理をソースプログラムにより作成する場合には、単位を揃えるように単位変換を行った値を演算するようにする必要がある。しかしながら、現状においては、プログラムの解析ツールやコンパイラによって単位変換がなされているかを検出することはできず、人が目視によりチェックするしかないものである。このため、時間と労力を要するという問題があった。
【0004】
特許文献1には、所定の単位を適正単位として記憶する適正単位テーブルを備える演算装置が開示されている。この装置は、単位を伴う数値又は文字を構成要素とする計算式を表示する表示部、この表示部に表示された計算式の解を演算により求めるCPUを備える。そして、CPUにより求められた計算式の解の単位が適正単位テーブルにより記憶された何れの適正単位とも一致しない場合には、その旨を表示部に表示する。
【0005】
上記特許文献1の装置によって、計算式の解の単位が正しい物理単位であるか否かの評価を可能とする。ただし、この装置は、学習用のもので単位の候補を表示させて生徒等に選択させて、物理単位の正しい理解をさせるものであり、「組み込み」の分野において用いられるソースプログラムの内容チェックに用いられるものではない。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明は、単位が付された変数の演算を含むソースプログラムに対して、適切なチェックを行うことが可能な演算プログラムチェック装置及び演算プログラムチェック用プログラムを提供する。
【課題を解決するための手段】
【0008】
本実施形態に係る演算プログラムチェック装置は、ソースプログラムのソースコードに含まれている演算から、少なくとも1つの変数に単位情報付き数値が設定される演算を検索する演算検索手段と、演算の種類毎に、演算に含まれる変数に設定された単位が不一致の場合に、出力すべきメッセージが記憶されたメッセージ記憶手段と、前記演算検索手段により検索された演算に設定されている単位情報が不一致な演算を検出する単位不一致演算検出手段と、前記単位不一致演算検出手段が検出した演算に基づき前記メッセージ記憶手段を検索してメッセージを求め、このメッセージを出力するメッセージ出力制御手段とを具備することを特徴とする。
【図面の簡単な説明】
【0009】
【
図1】単位を含む変数の演算が不適切に行われる例を説明する回路図。
【
図2】本発明の実施形態に係る演算プログラムチェック装置の構成図。
【
図3】本発明の実施形態に係る演算プログラムチェック装置により扱う演算の例を示す図。
【
図4】本発明の実施形態に係る演算プログラムチェック装置の要部の記憶例を示す図。
【
図5】本発明の実施形態に係る演算プログラムチェック装置における「通常不一致エリア」の要部の記憶例を示す図。
【
図6】本発明の実施形態に係る演算プログラムチェック装置における「通常不一致エリア」の例外を求めるための例外情報テーブルの一例を示す図。
【
図7】本発明の実施形態に係る演算プログラムチェック装置における「単位情報なしエリア」の要部の記憶例を示す図。
【
図8】本発明の実施形態に係る演算プログラムチェック装置の動作を示すフローチャート。
【
図9】本発明の実施形態に係る演算プログラムチェック装置において、ステップS15へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図10】本発明の実施形態に係る演算プログラムチェック装置において、ステップS16へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図11】本発明の実施形態に係る演算プログラムチェック装置において、ステップS16へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図12】本発明の実施形態に係る演算プログラムチェック装置において、ステップS16へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図13】本発明の実施形態に係る演算プログラムチェック装置において、ステップS16へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図14】本発明の実施形態に係る演算プログラムチェック装置において、ステップS18へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図15】本発明の実施形態に係る演算プログラムチェック装置において、ステップS18へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図16】本発明の実施形態に係る演算プログラムチェック装置において、ステップS18へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図17】本発明の実施形態に係る演算プログラムチェック装置において、ステップS18へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【
図18】本発明の実施形態に係る演算プログラムチェック装置において、ステップS18へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例を示す図。
【発明を実施するための形態】
【0010】
以下添付図面を参照して、本発明の実施形態に係る演算プログラムチェック装置及び演算プログラムチェック用プログラムを説明する。各図において同一の構成要素には、同一の符号を付して重複する説明を省略する。
【0011】
図2に、本発明の実施形態に係る演算プログラムチェック装置を示す。この実施形態に係る演算プログラムチェック装置は、データベース200とCPU(中央処理装置)100と、キーボード等の情報入力を行うための入力部150、情報を出力する出力手段としての表示手段300とを備えている。即ち、演算プログラムチェック装置は、ワークステーション、サーバ、パーソナルコンピュータ等のコンピュータ装置によって構成することができる。
【0012】
CPU100には、プログラムにより実現される各手段として、演算検索手段110、単位不一致演算検出手段120、メッセージ出力制御手段130が備えられている。演算検索手段110は、例えば入力部150から入力されてCPU100へ到来するソースプログラムのソースコードを分析し、ソースプログラムのソースコードに含まれている演算から、少なくとも1つの変数に単位情報付き数値が設定される演算を検索するものである。単位不一致演算検出手段120は、上記演算検索手段により検索された演算に設定されている単位情報が不一致な演算を検出するものである。具体的には、演算子を挟んで左右の変数の単位が一致しない場合を単位不一致とし、単位情報ありの数値と単位情報なしの数値が演算されるように設定されている場合も単位不一致という。
【0013】
メッセージ出力制御手段130は、上記単位不一致演算検出手段120が検出した演算に基づきメッセージ記憶手段210を検索してメッセージを求め、このメッセージを出力するものである。
【0014】
データベース200には、メッセージ記憶手段210が記憶されている。メッセージ記憶手段210には、演算の種類毎に、演算に含まれる変数に設定された単位が不一致の場合に、出力すべきメッセージが記憶されている。上記メッセージ記憶手段210における演算の種類毎の各演算は、
図3に示すような演算子に対応するものであり、演算子としては、算術演算子、比較演算子、ビット演算子、単純代入演算子などがある。メッセージ記憶手段210には、これらの演算子に対応して出力すべきメッセージが記憶されている。
【0015】
図4は、メッセージ記憶手段210の概要を示す図であり、通常(演算子を挟んで左右の変数の単位が一致しない場合)の単位不一致に対応するメッセージが記憶される「通常不一致エリア」と、演算の一方の変数に単位情報が設定されていない「単位情報なし」の場合に対応するメッセージが記憶された「単位情報なしエリア」を備えている。
図5は、メッセージ記憶手段210における「通常不一致エリア」の要部を示すものである。メッセージ記憶手段210の加算演算子「+」には、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが対応して記憶されている。メッセージ記憶手段210の単純代入演算子「=」には、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが対応して記憶されている。メッセージ記憶手段210の右シフト演算子「>>」には、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが対応して記憶されている。
【0016】
また、メッセージ記憶手段210の乗算演算子「*」には、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが対応して記憶されている。また、メッセージ記憶手段210の乗算演算子「*」には、構文の情報に「a*b(例外)」のように例外があることが設定されており、このような演算子に対しては、
図5に示すように「意図的な実装の可能性があるが、確認を要する警告。」という注意喚起メッセージが対応して記憶されている。このように、メッセージ記憶手段210には、演算が乗算、除算、剰余算の場合に、例外的に注意喚起メッセージが記憶されている。即ち、Z(W)=X(A)*Y(V)のように、2つの異なる単位同士の数値から更に異なる数値が生じる場合に対応している。メッセージ記憶手段210において例外が設定されている演算子にヒットしたときのために、本実施形態では
図6に示すような例外情報テーブルが用意されている。この例外情報テーブルの対応する演算子による構文に対応して記憶されている「異なる単位の数値による演算例」に該当するかを検出し、該当する場合には、メッセージ記憶手段210の例外の場合のメッセージを採用する。
【0017】
上記メッセージ記憶手段210には、演算の一方の変数に単位情報が設定されていない「単位情報なし」の場合に対応して「単位情報なしエリア」に対応メッセージが記憶されている。また、「単位情報なし」が演算子の右側で生じているか左側で生じているかについて、「位置」の欄に記載されている。これは、例えば右シフト演算子「>>」の場合に、演算子の右側の数値は「単位情報なし」の数値であるべきだからである。本実施形態において、「単位情報なしエリア」の対応メッセージは、「単位情報なしエリア」以外と同じく、
図3に示した演算子に対応して、警告メッセージまたは注意喚起メッセージが記憶されている。
【0018】
図7は、「単位情報なしエリア」の要部を示すものである。メッセージ記憶手段210における「単位情報なしエリア」の加算演算子「+」には、「位置」の欄に「左右」と記載されており、これは、右側または左側に単位なし数値が設定されている場合に、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが対応して記憶されている。メッセージ記憶手段210における「単位情報なしエリア」の右シフト演算子「>>」には、「位置」の欄に「左」と記載されており、これは、左側に単位なし数値が設定されている場合に、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが対応して記憶されている。メッセージ記憶手段210における「単位情報なしエリア」の単純代入演算子「=」には、「位置」の欄に「左右」と記載されており、右側または左側に単位なし数値が設定されている場合に、「意図的な実装の可能性があるが、確認を要する警告。」という注意喚起メッセージが対応して記憶されている。
【0019】
以上のように構成された演算プログラムチェック装置は、
図8のフローチャートに示すように演算プログラムチェックを行う。例えば入力部150から入力されてCPU100へ到来するソースプログラムのソースコードを分析し、ソースプログラムのソースコードに含まれている演算から、少なくとも1つの変数に単位情報付き数値が設定される演算を検索する(S11)。検索された演算に設定されている単位情報が不一致な演算であるか否かを検出する(S12)。上記ステップS12においてYESへ分岐すると、例外のある演算であるかをメッセージ記憶手段210の情報に基づき検出する(S13)。ここで、YESとなると、演算に使用されている単位が例外情報テーブルの情報に該当するかを検出し(S14)、YESとなると、例外側のメッセージを採用して表示手段300から出力する(S15)。
図9には、このステップS15へ進んだ場合の、ソースプログラムのソースコードに含まれている演算の一例が示されている。この演算は演算子が乗算演算子「*」であり、Z(W(ワット))=X(A(アンペア))*Y(V(ボルト))の場合が示されている。この場合には、メッセージ記憶手段210から、「意図的な実装の可能性があるが、確認を要する警告。」という注意喚起メッセージが読み出され、これが表示手段300から出力される。
【0020】
また、ステップS14においてNOへ分岐すると、通常側(非例外側)のメッセージを採用して表示手段300から出力する(S16)。ステップS16では、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。
【0021】
また、上記ステップS13においてNOへ分岐するとステップS16へ進み、通常側(非例外側)のメッセージを採用して表示手段300から出力する(S16)。ステップS14またはステップS16が終了すると、ステップS19において全ソースコードの検索が終了したかを検出し(S19)、NOとなるとステップS11へ戻って処理が続けられる。ステップS19において、YESとなると処理が終了する。
【0022】
以下にステップS16に進む演算例を示す。
図10には、ソースプログラムのソースコードに含まれている演算であり、演算子が加算演算子「+」であり、演算子の左が単位「mA」で演算子の右が単位「A」の場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。
図11には、ステップS16へ進んだ場合の、ソースプログラムのソースコードに含まれている演算であり、演算子が加算演算子「*」であり、演算子の左が単位「mA」で演算子の右が単位「A」の場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。
【0023】
図12には、ステップS16へ進んだ場合の、ソースプログラムのソースコードに含まれている演算であり、演算子が単純代入演算子「=」であり、演算子の左が単位「m」で演算子の右が単位「mm」の場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。
【0024】
図13には、ステップS16へ進んだ場合の、ソースプログラムのソースコードに含まれている演算であり、演算子が右シフト演算子「>>」であり、演算子の左が単位「cm/s」で演算子の右が単位「m/s」の場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。なお、この右シフト演算子「>>」の場合に、演算子の右において「単位情報なし」の場合にも、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。
【0025】
上記ステップS12においてNOへ分岐すると、演算子の左右の一方が「単位情報なし」を確定する(S17)。このステップS17の次に、メッセージ記憶手段210における「単位情報なしエリア」から、対応の演算(演算子)におけるメッセージを求め、出力する(S18)。
【0026】
以下の
図14から
図18において、ステップS18へ進んだ場合のソースプログラムのソースコードに含まれている演算の例を説明する。
図14には、ソースプログラムのソースコードに含まれている演算であり、演算子が単純代入演算子「=」であり、演算子の左が単位「mA」で演算子の右が「単位情報なし」の場合が示されている。この場合には、「意図的な実装の可能性があるが、確認を要する警告。」という注意喚起メッセージが読み出され、これが表示手段300から出力される。
【0027】
図15には、ソースプログラムのソースコードに含まれている演算であり、演算子が加算演算子「+」であり、演算子の左が単位「mA」で演算子の右が「単位情報なし」の場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。
【0028】
図16には、ソースプログラムのソースコードに含まれている演算であり、演算子が>演算子「>」であり、演算子の左が単位「mA」で演算子の右が「単位情報なし」で、比較が不能である場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。
【0029】
図17には、ソースプログラムのソースコードに含まれている演算であり、演算子が単純代入演算子「=」であり、演算子の左が単位「mA」で演算子の右が単位「A」の変数bに単位無しの数値「1000」を乗じた場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。なお、この
図17の場合において、演算子の左が単位「A」で演算子の右が単位「mA」の変数bであるならば、「意図的な実装の可能性があるが、確認を要する警告。」という注意喚起メッセージが読み出され、これが表示手段300から出力されように構成することができる。
【0030】
図18には、ソースプログラムのソースコードに含まれている演算であり、演算子が単純代入演算子「=」であり、演算子の左が単位「A」で演算子の右が単位「mA」の変数bを単位無しの数値「1000」で除算した場合が示されている。この場合には、メッセージ記憶手段210から、「危険度の高い警告。不具合の直接原因となる可能性あり。明らかな誤り。」という警告メッセージが読み出され、これが表示手段300から出力される。なお、この
図18の場合において、演算子の左が単位「mA」で演算子の右が単位「A」の変数bであるならば、「意図的な実装の可能性があるが、確認を要する警告。」という注意喚起メッセージが読み出され、これが表示手段300から出力されように構成することができる。
【0031】
以上のように、ステップS18が終了すると、ステップS19において全ソースコードの検索が終了したかを検出し(S19)、NOとなるとステップS11へ戻って処理が続けられる。ステップS19において、YESとなると処理が終了する。
【符号の説明】
【0032】
110 演算検索手段
120 単位不一致演算検出手段
130 メッセージ出力制御手段
150 入力部
200 データベース
210 メッセージ記憶手段
300 表示手段