JP4958574B2 - プログラム論理の検証方法、プログラム論理の検証プログラム - Google Patents
プログラム論理の検証方法、プログラム論理の検証プログラム Download PDFInfo
- Publication number
- JP4958574B2 JP4958574B2 JP2007031369A JP2007031369A JP4958574B2 JP 4958574 B2 JP4958574 B2 JP 4958574B2 JP 2007031369 A JP2007031369 A JP 2007031369A JP 2007031369 A JP2007031369 A JP 2007031369A JP 4958574 B2 JP4958574 B2 JP 4958574B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- mapping
- error
- microprocessor
- program code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims description 59
- 238000012795 verification Methods 0.000 title claims description 57
- 238000013507 mapping Methods 0.000 claims description 106
- 238000012545 processing Methods 0.000 claims description 59
- 238000005183 dynamical system Methods 0.000 claims description 26
- 230000010365 information processing Effects 0.000 claims description 17
- 238000001514 detection method Methods 0.000 claims description 14
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 230000006870 function Effects 0.000 description 99
- 238000012360 testing method Methods 0.000 description 39
- 238000013178 mathematical model Methods 0.000 description 33
- 230000014509 gene expression Effects 0.000 description 30
- 238000007667 floating Methods 0.000 description 21
- 238000004458 analytical method Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 17
- 230000002123 temporal effect Effects 0.000 description 17
- 238000004088 simulation Methods 0.000 description 13
- 238000004364 calculation method Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 11
- 238000011161 development Methods 0.000 description 10
- 238000006243 chemical reaction Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 6
- 238000011160 research Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 230000003252 repetitive effect Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000005259 measurement Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000000739 chaotic effect Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000009472 formulation Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000013522 software testing Methods 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 241000208140 Acer Species 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 244000309464 bull Species 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000012067 mathematical method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Description
ところが、コンピュータソフトウェアの不具合が原因による銀行業務の停止や証券業務の停止、混乱、鉄道交通システムの混乱などが多発し、日本のみならず、世界中がこの脅威にさらされている。
また、手続き型言語のプログラムコードには、変数の定義、関数の定義、写像力学系の定義と、if,switchなどで与えられる関数部分の操作、while文で与えられる写像力学系部分の操作が、混合して記述されており、関数部分の操作の論理的整合性、写像力学系部分の操作の論理的整合性を体系的に検証できなかった。そのため、コンピュータソフトウェアの不具合が原因による銀行業務の停止や証券業務の停止、混乱、鉄道交通システムの混乱を回避する決定打が存在しなかった。
図1は、非特許文献1に掲載された、手続き型プログラミング言語の一種のMatlab(数値解析ソフトウェア)(登録商標)による標準的な二分法プログラムのソースコードである。このプログラムは実際にMatlab上で使用することができる。しかしこのプログラムは本当に何の問題も無いのであろうか。
1.1プログラムの品質
プログラムの品質を分類する試みがいくつか存在する。例えば、C.A.R.Hoare は17項目の品質のリストを提案している。1976年の第2回ソフトウェア工学国際会議において、B.W.Boehomが品質を3レベルに階層化して分類した表を発表している。その一番下のレベルでは正確さ・安全性・装置効率など15の性質が列挙されている。
プログラム検証論は1960年代から盛んに研究されているが、1995年にはかなり下火になっている。しかし構造化プログラミングや言語設計に影響を与えて、「プログラミングの正しさ」の証明方法の研究は、形をかえてソフトウェア工学に引き継きつがれている。
ホーア論理の理論的限界として、Algo−likeなプログラム言語に対しては(健全で)相対完全なホーア論理を作ることができないということが挙げられている。Algo−likeな、とは、1.手続き(=関数)を定義することができ、局所手続き(=goto文)も定義できる、2.手続きを手続きの引数として渡すことができる、3.再帰呼び出しができる、4.静的スコープルールを使える、5.大域変数を使える、といった特徴を備えることをいう。
ソフトウェア工学などと言われる前からソフトウェアに対するテストは広く行われてきたが、1960年代末からのソフトウェア工学の大きなうねりはテストの考えにも様々な影響を与えた。
テストが工学的な分析の対象として意識的に研究され、その結果が実践され始めた。代表的な技術としては経路解析やテストデータ生成などが挙げられる。
ソフトウェア工学の浸透に伴い、ソフトウェア開発を助けるツールの作成・利用が一般化したが、テストの分野でもテストベッド・テストカバレージ計測などのツールが作られ、使用され始めた。
ソフトウェアのライフサイクルという概念が重視されるようになった。ライフサイクル・モデルではソフトウェアの誕生から死までをいくつかのフェーズに分ける。典型的な分割は要求定義・設計・プログラミング・テスト・運用保守というフェーズわけである。そこでテストは1つのフェーズという位置づけを与えられたとともに、先行する各フェーズとテストとの関係も明確化された。即ち要求仕様に対するテストとして受け入れテスト(あるいはシステムテスト)、設計に対するテストとして統合テスト、プログラムに対するテストとして単体テスト、というようにテストの対象となるべき基準が明らかになった。
プログラムの正当性証明技法は、1970年代半ばから末にかけ、理論的な研究が進められるとともに、実験的なシステムもいくつか作られ、ソフトウェア工学の中で活気のあるテーマのひとつとなった。これらの研究はその後、大規模プログラムに適用できるような実用段階にまで育ってきてはいないが、種々の点で従来からのテスト技術にも影響を与えた。
ソフトウェア工学では開発や保守のコストに対して目が向けられたことも1つの大きな特徴となっているが、その結果テストにもコスト意識が持ち込まれてきている。例えばテストにかかるコストはプログラムの開発コストの50%を占めるといった数字がよく挙げられる。テストの場合はテスト自身の効率を上げてコストを下げるという面と効果的なテストを行いバグを早期に発見して取り除くことにより、ライフサイクル全体を通してのコスト削減に寄与するという面との両面を考えなくてはならない。いずれにせよテストの効果を評価することが必要で、そのために故障率の測定などが工夫され、さらには信頼性モデルなどの分析手法も研究され始めた。
またプログラムとは別の観点からソフトウェアの動作を把握しようとする取り組みもある。1989年にL.Blum,M.Shub,S.Smaleの三名によってコンピュータ上の演算における力学系理論的定式化が提唱された。これはアルゴリズムや演算処理を数学関数や写像としてモデル化したものである(非特許文献4,非特許文献5,非特許文献6,非特許文献7、参照)。
A.Neumaier, Introduction to Numerical Analysis,Cambridge University Press,2001. 玉井哲雄,松田茂広,三嶋良武,ソフトウェアのテスト技法,共立出版,1988. 林晋,プログラム検証論,共立出版、1995年. L.Blum,M.Shub and S.Smale,On a Theory of Computation and Complexity over the Real Numbers:NP-Copleteness, Recursive Functions and Universal Machines,Bull.Amer.Math. Soc.(N.S.)Vol.21,no.1,pp.1-46(1989). (ed.)F.Cucker,and (ed.)R.Wong,The Collected Papers of Stephen Smale,World Scienti?c Pub.Co.Inc.,2000. L.Blum,Lectures on a Theory of Computation and Complexity over the Reals(or an Arbitrary Ring),1989 Lectures in Complex Systems, SFI Studies in the Scenics of ComplexityLect. Vol.II, Addison-Wesley,pp.1-46(1990). S.Smale, Some Remarks on the Foundations of Numerical Analysis,SIAM Review Vol.52,no.2,pp.211-220(1989).
手続き型プログラミング言語のプログラムコードを前記外部記憶装置から入力し、前記マイクロプロセッサが前記プログラムコードを写像および/または写像力学系に置き換える第1ステップと、
前記写像および/または写像力学系に数学的手法に基づくアルゴリズムを適用することにより、前記マイクロプロセッサが前記プログラムコードの信頼性の検証を行う第2ステップと、
を含み、
前記第1ステップでは、
前記プログラムコードを、変数宣言領域、写像処理領域、写像力学系処理領域に区別するステップと、
前記変数宣言領域では変数宣言を、識別子および当該識別子が属するデータ構造を含む数学定義へ変換するステップと、
前記写像処理領域では、条件分岐文および反復実行文を、連続微分可能写像を用いてモデル化するステップと、
前記変数宣言領域および前記写像処理領域以外の前記写像力学系処理領域では、終了条件を含む入力と出力が定義される写像を再帰的に構成するステップと、
を前記マイクロプロセッサに実行させ、
前記第2ステップにおける前記信頼性の検証では、
前記プログラムコードの無限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第1エラーレベルの検出と、
前記プログラムコードの無限桁演算の論理関係の整合性は検証されているが、有限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第2エラーレベルの検出と、
前記第1エラーレベルおよび前記第2エラーレベルの論理関係の整合性は検証されており、局所的な決定的なルールには問題ないが、前記プログラムコード中のカオスの存在が引き起こすプログラム動作のエラーである第3エラーレベルの検出と、
を前記マイクロプロセッサに実行させる、プログラム論理の検証方法を提供する。
プログラム論理の検証プログラムは、
手続き型プログラミング言語のプログラムコードを写像および/または写像力学系に置き換える第1ステップと、
前記写像および/または写像力学系に数学的手法に基づくアルゴリズムを適用することにより、前記プログラムコードの信頼性の検証を行う第2ステップと、
をマイクロプロセッサに実行させ、
前記第1ステップでは、
前記プログラムコードを、変数宣言領域、写像処理領域、写像力学系処理領域に区別するステップと、
前記変数宣言領域では変数宣言を、識別子および当該識別子が属するデータ構造を含む数学定義へ変換するステップと、
前記写像処理領域では、条件分岐文および反復実行文を、連続微分可能写像を用いてモデル化するステップと、
前記変数宣言領域および前記写像処理領域以外の前記写像力学系処理領域では、終了条件を含む入力と出力が定義される写像を再帰的に構成するステップと、
を前記マイクロプロセッサに実行させ、
前記第2ステップにおける前記信頼性の検証では、
前記プログラムコードの無限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第1エラーレベルの検出と、
前記プログラムコードの無限桁演算の論理関係の整合性は検証されているが、有限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第2エラーレベルの検出と、
前記第1エラーレベルおよび前記第2エラーレベルの論理関係の整合性は検証されており、局所的な決定的なルールには問題ないが、前記プログラムコード中のカオスの存在が引き起こすプログラム動作のエラーである第3エラーレベルの検出と、
を前記マイクロプロセッサに実行させる、プログラム論理の検証プログラムを提供する。
すなわち、従来のテストデータチェックやロジックチェックでは検出が困難なソフトウェアの不具合(バグ)、すなわち、有限桁の浮動小数点演算が引き起こす、論理の不整合性の検証とソフトウェアが不具合を起こすパラメータそのものを与え、そのパラメータが存在することを証明できる方法を確立した。
本実施の形態においては、プログラムの動作を検証するため、L.Blum,M.Shub,S.Smaleが提唱した力学系理論的定式化を導入し、プログラムの動作の力学系モデル化を行う(L.Blum,M.Shub and S.Smale,On a Theory of Computation and Complexity over the Real Numbers:NP-Copleteness, Recursive Functions and Universal Machines,Bull.Amer.Math. Soc.(N.S.)Vol.21,no.1,pp.1-46(1989).参照)。実施の形態の前半において、単一のコンピュータ上のプログラムの動作の力学系モデルを構築し、Matlab等の数値解析ツール環境上で、その力学系モデルの近似シミュレーションを行いプログラムの動作の力学系モデルによる検証の有効性について説明する。
この章では手続きプログラム言語中に現われるif文、switch文、while文の分岐条件の論理演算の数学モデルを与えるのに必要な論理演算のためのBoolean関数を定義し、その性質をまとめる。
Z:整数 R:実数
Bo:Boolean Bo={0,1}⊂Z⊂R
0のとき、偽(False),1のとき、真(True)となる。
全てのex∈Boに対して、Not(ex)=1−ex
任意のex,eyに対して、exANDey=ex・ey
任意のex,ey∈Boに対して、exORey=1−(1−ex)・(1−ey)
各論理演算の真理表を図2に示す。このNot,AND,ORの論理演算を複数組み合わせた一般的なBoolean関数を以下のように定義できる。なお、一般的なBoolean関数については、たとえば、木村正行、水野尚,しきい値論理とその応用,昭晃堂、1979年、等の文献に記載されている。
上のBoolean関数の定義をif,switch,while文などの条件分岐に用いる代表的な論理関数に適用して、以下のようなBoolean関数として与える。
この章では、コンピュータの演算で使用される浮動小数点についてまとめる。特に、一般的に用いられるIEEE754フォーマットを中心に取り上げ、有限桁の浮動小数点演算における問題についても触れる。
IEEEは米国電気電子技術者協会(The Institute of Electrical and Electronics Engineers)のことを指し、アメリカに本部があって世界中に会員がいる大きな学会である。コンピュータ関係の規格も作成しており、IEEEが作成した規格が国際規格に採用されることも多い。754というのは、IEEEの中のワーキンググループの番号で、規格の番号でもある。IEEE754は浮動小数点演算の規格である。昔は浮動小数点数のデータ形式はコンピュータによってバラバラであり、データをやりとりするときに変換処理が必要になり、とても不便であった。そのため、コンピュータの技術者が集まり共通のデータ形式と計算方法を決定した。その時作成されたのがIEEE754規格である。一つの浮動小数点数を32ビットまたは64ビットで表現する。32ビットを単精度(Single Precision)と呼び、64ビットを倍精度(Double Precision)と呼ぶ。これらの拡張形式を実装するように推奨し、相互運用や演算規則などが規定されている。
単精度のビットパターンによる表現
単精度のIEEE754浮動小数点数は、符号ビット(1ビット)、指数部(8ビット)、仮数部(23ビット)の32ビットで表現される。
指数部は2の0乗のときは、01111111となる。
指数部の2進数表現
1000 0011 +4乗
1000 0010 +3乗
1000 0001 +2乗
1000 0000 +1乗
0111 1111 0乗
0111 1110 −1乗
0111 1101 −2乗
0111 1100 −3乗
仮数(mantissa)
仮数部は2を基数として整数部が一桁になるように正規化した数の2進数表現になる。正規化によって仮数部の最上位ビットは常に1になるので、実際に用意しておく必要はなく、倍精度の52ビットであれば、最上位の1をhidden bitにして含めなければ、53ビット分の情報が含まれることになる。
0.1000 1/2 =0.5
0.0100 1/(2*2) =0.25
0.0010 1/(2*2*2) =0.125
0.0001 1/(2*2*2*2*)=0.0625
符号(sign)
符号ビットは1ビットで、1は負の数、0は正の数を表す。代表的な10進数表現の差異のビットパターンを、図3に示す。
R:実数の集合、Mf:IEEE754のフォーマットの単精度の浮動小数点の集合、Md:IEEE754のフォーマットの倍精度の浮動小数点の集合とする。任意のa,b>0,a,b∈Rに対して、論理的に、a+b>aが成立する。しかしながら、任意のa,b>0,a,b∈Mf、またはa,b>0,a,b∈Mdに対して、a+b=aとなるbが存在する。IEEE754のフォーマットに限らず、有限桁の浮動小数点演算では同様なことが発生し、ある桁幅を超えた数どうしの四則演算は成立しない。これらの現象は桁落ち、情報落ちと呼ばれる。if文などの分岐条件がこのような桁落ち、情報落ちの影響を受けた場合、プログラマの意図しない動作を引き起こす原因となる。この節では、Mdの浮動小数点の演算を対象として、a,b>0,a,b∈Mdに対して、a+b=aとなるbが存在する例をMatlabを用いて示す。その実行結果が図4である。
4.1 条件分岐に用いる論理関数の連続変形型の Boolean関数表現
上述の第2章のBooleanBoを連続変形型のBoolean:Bh=[0,1]に拡張して、if,switch,while文などの条件分岐に用いる代表的な論理関数を連続変形型の論理関数に拡張する。
3章において、有限桁の浮動小数点演算と論理演算の問題に触れたが、ここでは、連続変形型のBoolean関数表現を用いて、有限桁の浮動小数点演算において、論理演算が成立しない場合の浮動小数点を求める方法について述べる。2章では、一般的な論理関数flogic(e1,e2,...,en)はn変数の多項式で記述されることを示した。flogic(e1,e2,...,en)=1,またはflogic(e1,e2,...,en)=0のどちらかであり、このどちらかが成立する(e1,e2,...,en)の値を求めるには、これらのn変数の多項式の方程式の解を求めれば良い。if文、switch文、while文の分岐条件は、flogic(e1,e2,...,en)で与えられ、一般的に、ek,k=1,2,...,nは、例えばek(x{k1,x{k1,...,x{km)=(xk1>ak1)+(xk2>ak2)+...+(xkm>akm),xkj,akj2Md,j=1,2,...,mのように、有限桁の浮動小数点を入力変数(x{k1,x{k1,...,x{km)とするそれぞれのBoolean型論理関数の多項式で与えられる。
上記のように、関数g(・・・)は収束し、4回繰り返して得られた近似解x=3:634426093412913・・・10−12を(105+x>105)に代入した結果は、(105+x>105)=0となり、x=3:634426093412913・・・10−12が(105+x>105)=0の解であることを数値的に証明できる。
4.3 変数の表記方法
1.変数の時間的発展
コンピュータに行わせる作業の「手順」の記述に重きを置いた言語(手続き型プログラム言語)では、各処理の時間的発展はソース記述順の上から下へと流れる。このプログラム上の変数xの時間的発展を、添え字nを導入して表すことにする。ただし、プログラム言語の仕様によっては、関数の中で変数を宣言することができるが、その場合、変数のスコープ(有効範囲)はその関数の中に限定される。変数の時間的発展は、各変数のスコープごとに固有であると考えられるため、先の添え字nを、スコープが識別できるように、n−scopeと表す。
3.操作回数
ある変数xに対して代入文が記述されているとき、実際のプログラム実行時にこの処理が行われるときには、その変数xに対して代入文で定義された操作が行なわれることになる。変xに対し、1つの代入文が定義されていれば、その変数の時間的発展は+1されるとみなす。つまり、関数fで宣言されている変数xに対する1回の操作sは、x(n+1)−x−f=s(xn−x−f)、と表す。
関数を使用する際に、「関数に引き渡す変数」を実引数(argument)といい、関数定義時に使用される変数を仮引数(parameter)といい、区別する。
図11は、仮引数で呼び出されるC言語のプログラム例を示している。
関数を呼び出すとき、プログラム言語の仕様によっては、実引数が「左辺値」として評価し得る式であるときに、左辺値を渡す(call−by−reference)のか、右辺値を渡す(call−by−value)のかを任意に選択できる。
次の図12に例示されるプログラム例のように、実引数として左辺値が渡されるとき、関数内で仮引数に対して操作を行なうということは、呼び出し元で実引数となった変数に対して操作を行うことと等しい。
ここでif,elseif,switch文のような条件分岐やfor,while文などのループ(反復実行文)についてモデル化を提案する。
X=(x1,x2,・・・,xn)∈Rn,xk∈R
fk:Rn→Rを連続微分可能写像とし、F:Rn→RnをF=(f1(X),f2(X),...,fn(X))Tのような連続微分可能ベクトル写像とする。
また、if,elseif,switch文の条件分岐変数とwhile文のループのブレーク条件変:ex(β,X)を連続変形型のBoolean:Bh=[0,1]関数とおき、β=1の時、微分可能な関数に変形し、β=0の時、Bo={0,1}の微分不可能な変形するβをパラメータとする連続変形関数とおく。したがって、dex(1,X)となる全微分が存在する。
本実施の形態の場合には、以下の3種類のエラーを検出することによって、プログラムコードの信頼性の検証を行う。
b)エラーレベル2「プログラムコードの無限桁演算の論理関係の整合性は検証されているが、有限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラー」の検出。
if文のek(β,X),k=1,...,lが全て相異なっているかチェックする。ひとつでも同じであれば、エラーレベル1の警告を出力する(エラーレベル1とは限らない)。
switch文のlogicd(x,β,ak,σ)のakが全て相異なっているかチェックする。ひとつでも同じであれば、エラーレベル1の警告を出力する(エラーレベル1とは限らない)。
Step1:yl(X),y(X),Fn(X0)を有限桁の浮動小数点演算(Matlab,JAVA(登録商標),C++(登録商標)など)と有理数演算(Maple(登録商標),Mathematica(登録商標))で求めて比較する。異なっていれば、エラーレベル2が発生している。
while文の写像Fn(β,X0)の1変数をフラクタル次元解析にかけて、カオス性、フラクタル性の検証を行うフラクタル次元が非整数となった場合、エラーレベル3が発生している。
ここでは、前章の数学モデルを用いて、上述の図1の二分法のプログラムを書き換えることにする。ただし、Matlab上でこの書き換えの近似シミュレーションが行えるように、Matlabが処理できない写像、関数フォーマットは、Matlabの文法のままとする。
上記において、元のMatlabの二分法プログラムのwhileループ内を離散力学系を含む写像bwds(a,b,i,delta0)として取り出し、whileループがない、写像(または関数)処理領域と離散写像力学系を含む写像力学系処理領域に分けて記述し、写像処理領域FR1で写像力学系処理領域SR1のwhileのbwds(a,b,i,delta0)を呼び出して使用する。if文やwhile文の分岐条件のBoolean変数は、更新番号をつけないこととする。そして、プログラムの実行が開始されてから、終了するまでの写像処理領域と写像力学系処理領域のプログラムの各変数の更新回数は、その変数名の配列の個数で与えられ、要素番号が、更新回数を表し、そのときの要素番号の配列の内容がそのときの変数の状態を与えるようになっている。ただし、Matlabの配列は、C言語やJAVA言語と異なり、1番からしか定義できないため、数学的モデル化の定義と1番づつずれている。
以下において、上述の図18、図19のMatlabコードの力学系モデルを用いて、a(1)=2:5,b(1)=1.1、delata0=10−2,として、f(x)=x2−2=0の解を求めるときのプログラムの各変数の動きを近似シミュレーションで求める。
以下のMatlab上のシミュレーション結果において、プログラムの実行が開始されてから、終了するまでの写像処理領域と写像力学系処理領域のプログラムの各変数の更新回数は、その変数名の配列の個数で与えられ、要素番号が、更新回数を表し、そのときの要素番号の配列の内容がそのときの変数の状態を与えている。したがって、このMatlabコードの力学系モデルの有効性を確認できた。
図21、図22、図23、図24は、本実施の形態の検証ツールの作用の一例を示すフローチャートである。
主記憶202は、MPU201が実行するソフトウェアやデータが格納される。本実施の形態の場合、主記憶202には、たとえば、基本ソフトウェアであるオペレーティングシステム301、このオペレーティングシステム301の制御の下で稼働する検証ツール302、言語処理系303が実装されている。
言語処理系303は、情報処理システム200において、所望のプログラム言語によるソフトウェアの開発環境を提供するものであり、ソースコードの編集を行うソースエディタ、さらにはコンパイラ、インタプリタ、等のソフトウェアツール群で構成されている。
キーボード205は、ユーザが情報処理システム200に情報を入力するために用いられる。
まず、本実施の形態の検証ツール302では、以下のように定義される情報が用いられる。
変数宣言:コード内の変数宣言を行う。(例: double x; , int i;など)
写像処理:while文、do〜 while文、回数指定のないfor文を使用しない。If文、elseif文、switch文、回数指定のあるfor文を含む処理である。
写像力学系処理:while文、do〜 while文、回数指定のないfor文に囲まれた処理である。この中に、If文、elseif文、switch文、回数指定のあるfor文を含む処理も含む。
ステップ2−1:変数宣言の領域1−1は、変数宣言の変換を用いて数学定義に置き換える。
すなわち、エラーレベル1の検証は、図22に例示されるフローチャートの処理にて行われる。
次に、β=0に設定し、プログラムコードのif文、elseif文、switch文、回数指定のあるfor文の条件分岐変数関数とwhile文、do〜while文、回数指定のないfor文の停止条件変数関数の無限桁の論理演算の整合性の検証を行う(ステップ112)。
まず、ログファイル403に上述のようにして格納されている支援データから、動作試験用のパラメータ範囲を読み込む(ステップ121)。
また、エラーレベル3の検証は、図24に例示されるフローチャートの処理にて行われる。
次に、写像力学系処理内の最も更新番号が多くなる1変数をフラクタル次元解析にかけて、カオス性、フラクタル性の検証を行う(ステップ132)。
以下、本実施の形態の検証ツール302の実際の運用の流れを説明する。
情報処理システム200の検証ツール302は、プログラムソースを可数学モデル化プログラムソースに変換する。
a) if文などの条件式の「条件判定式」が、
<固有の識別子>=<条件式>;
の形でif文の前に定義されており、条件判定はこの識別子の値で行われる。
i)変数宣言の領域
ii)写像処理領域
iii)写像力学系領域
これらの特徴を備えた可数学モデル化プログラムソースは、通常のプログラム文法で作成可能である。
予め可数学モデル化プログラムソースとして、プログラムをコーディングしている場合は、この変換ステップは不要である。
a)可数学モデル化プログラムソースを全精査し、定義文を抽出する。
定義義文とは、単純な形では、代入文として現れる。ここでいう定義文とは、if文などの条件文や、while文などの繰り返し文などの制御を考慮した「代入文」のことである。
この図25A、図25B、図25Cに例示される定義文において、識別子は、プログラム中では、変数を識別するためにされる。
また、オリジナルの位置情報は、数式モデル変換前の識別子の位置情報(行、列)である。
検証ツール302に対し、ユーザは以下のような操作が可能である。
例えば、ユーザは任意の条件文を選択し、排他条件になっているかを確認できる。
ii) ユーザは、数学モデルのリストのうち、検証したい条件式(の識別子)を選択する。
たとえば、図27に例示されるC言語のプログラムはコンパイル可能だが、実行すると無限ループしてしまう。
b)エラーレベル2「プログラムコードの無限桁演算の論理関係の整合性は検証されているが、有限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラー」の検出
例えば、ユーザは任意の変数を選択し、無限桁演算の場合と有限桁演算の場合を比較することができる。
ii)ユーザは、有限桁演算の規格、例えばIEEE754を選択する。
iii)システムは、i)で選択した変数の数学モデルについて、無限桁演算の場合とii)で選択した有限桁演算の場合とをグラフ化し、重ね合わせて表示する。また、有限桁演算のグラフの変極点を算出して表示する。
ア)変極点から、通常のソフトウェアテストで重点的に検証する必要があるポイントを確認できる。
ウ)中点を求める数学モデルを、c=(a+b)/2ではなく、c=a−(b−a)/2、とする、などの発想の足がかりとなる。
上述のように、検証ツール302では、プログラムソースは以下の領域に分類されて処理される。
ii)写像処理領域
iii)写像力学系領域
このうち、写像力学系領域において、カオスが発生する可能性がある。
検証ツール302は、選択された写像力学系領域について、カオスが発生する可能性があるか検証し、解析結果としてメッセージを出力する。
図30のように出力される情報は、ログファイル403に記録され、モデル表示画面501のオリジナル領域502、中間領域503、解析結果領域504に表示されるとともに、必要に応じて、上述の図22、図23、図24のフローチャートに例示したエラーレベル1、エラーレベル2、エラーレベル3の判定に用いられる。
[変数の時間的発展について]
プログラムに登場する変数は、代入文によってその値を定義される。つまり、プログラムソースにおける「変数=式」で表現される数式は、問題を解くべき数式ではなく、その変数を特徴づける定義式である。
時間的発展の増加幅は、定義文が与えられるたびに+1と定める。
各変数の時間的発展は、スコープごとに定義し、宣言されただけで、まだ一度も定義が与えられていない場合の添え字を0とし、以降インクリメントしていく。
なお、添え字が0である変数の実際の値は、プログラミング言語に依存し、javaでは変数型によって固有の値が与えられるが、C言語の場合は不定(メモリ状態に依存する)。不定な状態は、Norator(ノレータ)と表記する。
分岐のない、直線形のプログラムの場合、図31に例示されるように添え字が変化する。この場合の数学モデルは、単純に時間的発展は+1されるので、たとえば、an+1=X;となる。
一般的には、
if(e1){
a=X;
}else if(e2){
a=X;
} else if(e3){
a=X;
:
などとあった場合、
an+1・e1+1・e2+1・e3=X・e1+X・e2+X・e3+...
となる。
写像力学系領域の場合には、図33に例示されるように添え字が変化する。写像力学系領域Fは、独立した関数として扱う。
この結果、すべてのコンピュータ上で利用されるソフトウェアの品質向上と動作保障を調査、検証する技術の提供を実現できる。
(付記)
以下は、上述の6 Matlabコードの力学系モデルの近似シミュレーションの実行結果、および、それに用いられたMatlabプログラムのソースコードである。
[シミュレーション開始]
>> testbmap
a_ = 2.500000000000000
b_ = 1.100000000000000
f_ = 4.250000000000000
f2_ = -0.790000000000000
e1 = 0
e2 = 1
n_x = 2
x_ = 0 2.500000000000000
n_a = 2
a_ = 2.500000000000000 1.100000000000000
n_b = 2
b_ = 1.100000000000000 2.500000000000000
e3 = 0
n2_x = 2
x_ = 0 1.800000000000000
n_i = 2
b_ = 2.500000000000000 1.800000000000000
a_ = 1.100000000000000
x_ = 0 1.800000000000000 1.450000000000000
n_i = 3
b_ = 2.500000000000000 1.800000000000000 1.450000000000000
a_ = 1.100000000000000
x_ =
Columns 1 through 3
0 1.800000000000000 1.450000000000000
Column 4
1.275000000000000
n_i = 4
b_ = 2.500000000000000 1.800000000000000 1.450000000000000
a_ = 1.100000000000000 1.275000000000000
x_ =
Columns 1 through 3
0 1.800000000000000 1.450000000000000
Columns 4 through 5
1.275000000000000 1.362500000000000
n_i = 5
b_ = 2.500000000000000 1.800000000000000 1.450000000000000
a_ = 1.100000000000000 1.275000000000000 1.362500000000000
x_ =
Columns 1 through 3
0 1.800000000000000 1.450000000000000
Columns 4 through 6
1.275000000000000 1.362500000000000 1.406250000000000
n_i = 6
b_ = 2.500000000000000 1.800000000000000 1.450000000000000
a_ =
Columns 1 through 3
1.100000000000000 1.275000000000000 1.362500000000000
Column 4
1.406250000000000
x_ =
Columns 1 through 3
0 1.800000000000000 1.450000000000000
Columns 4 through 6
1.275000000000000 1.362500000000000 1.406250000000000
Column 7
1.428125000000000
n_i = 7
b_ =
Columns 1 through 3
2.500000000000000 1.800000000000000 1.450000000000000
Column 4
1.428125000000000
a_ =
Columns 1 through 3
1.100000000000000 1.275000000000000 1.362500000000000
Column 4
1.406250000000000
x_ =
Columns 1 through 3
0 1.800000000000000 1.450000000000000
Columns 4 through 6
1.275000000000000 1.362500000000000 1.406250000000000
Columns 7 through 8
1.428125000000000 1.417187500000000
n_i = 8
b_ =
Columns 1 through 3
2.500000000000000 1.800000000000000 1.450000000000000
Columns 4 through 5
1.428125000000000 1.417187500000000
a_ =
Columns 1 through 3
1.100000000000000 1.275000000000000 1.362500000000000
Column 4
1.406250000000000
x_ =
Columns 1 through 3
0 1.800000000000000 1.450000000000000
Columns 4 through 6
1.275000000000000 1.362500000000000 1.406250000000000
Columns 7 through 9
1.428125000000000 1.417187500000000 1.411718750000000
n_i = 9
b_ =
Columns 1 through 3
2.500000000000000 1.800000000000000 1.450000000000000
Columns 4 through 5
1.428125000000000 1.417187500000000
a_ =
Columns 1 through 3
1.100000000000000 1.275000000000000 1.362500000000000
Columns 4 through 5
1.406250000000000 1.411718750000000
x_ =
Columns 1 through 3
0 1.800000000000000 1.450000000000000
Columns 4 through 6
1.275000000000000 1.362500000000000 1.406250000000000
Columns 7 through 9
1.428125000000000 1.417187500000000 1.414453125000000
n_i = 9
b_ =
Columns 1 through 3
2.500000000000000 1.800000000000000 1.450000000000000
Columns 4 through 6
1.428125000000000 1.417187500000000 1.414453125000000
a_ =
Columns 1 through 3
1.100000000000000 1.275000000000000 1.362500000000000
Columns 4 through 5
1.406250000000000 1.411718750000000
xsol = 1.414453125000000
x_ = 0 1.414453125000000
[シミュレーション終了]
以下は、上述の本実施の形態で用いられるMatlabのプログラムのソースコードである。
-----------------------------------------------------------------------
function [b]=hex2bin(h);
% hex2bin- this function converts an array of% hex numbers into binary digits
% Inputs
% h - array of hexadecimal numbers,each row is% a number, the output is a string array
% Outputs
% b- array of binary numbers, each row is a number%
% written by J. Dickerson, ISU, 7/96% updated for matlab 5, 3/98
[nsamp,nbits]=size(h);
nb_bits=ceil(nbits*4);% number of binary bits
% convert to binary
b=zeros(nsamp,nb_bits);
b=num2str(round(b),'%1d');
%b=reshape(bs',nb_bits,nsamp)';
for i=1:nsampfor j=1:nbits
htmp=h(i,j);%i,j,
if (htmp=='0')
b(i,(j-1)*4+1:j*4)='0000';
elseif (htmp=='1')
b(i,(j-1)*4+1:j*4)='0001';
elseif (htmp=='2')
b(i,(j-1)*4+1:j*4)='0010';
elseif (htmp=='3')
b(i,(j-1)*4+1:j*4)='0011';
elseif (htmp=='4')
b(i,(j-1)*4+1:j*4)='0100';
elseif (htmp=='5')
b(i,(j-1)*4+1:j*4)='0101';
elseif (htmp=='6')
b(i,(j-1)*4+1:j*4)='0110';
elseif (htmp=='7')
b(i,(j-1)*4+1:j*4)='0111';
elseif (htmp=='8')
b(i,(j-1)*4+1:j*4)='1000';
elseif (htmp=='9')
b(i,(j-1)*4+1:j*4)='1001';
elseif (htmp=='A')|(htmp=='a')
b(i,(j-1)*4+1:j*4)='1010';
elseif (htmp=='B')|(htmp=='b')
b(i,(j-1)*4+1:j*4)='1011';
elseif (htmp=='C')|(htmp=='c')
b(i,(j-1)*4+1:j*4)='1100';
elseif (htmp=='D')|(htmp=='d')
b(i,(j-1)*4+1:j*4)='1101';
elseif (htmp=='E')|(htmp=='e')
b(i,(j-1)*4+1:j*4)='1110';
elseif (htmp=='F')|(htmp=='f')
b(i,(j-1)*4+1:j*4)='1111';
end;
end;
end;
------------------------------------------------------------------------
function [ret] = logicd(x,beta,a,sigma)
ret=(1-beta)*(x==a)+beta*exp(-sigma*(x-a)^2);
------------------------------------------------------------------------
function [ret]=logicp(x,beta,a,gamma,sigma)
if x>a
dd=1;sg=1;
elseif x<a
dd=0;sg=-1;
else
dd=0;sg=-1;
end
ret=(1-beta)*(x>a)+beta*(dd-(1/2+(1/2-gamma)*sg)*sg*exp(-sg*sigma*(x-a)));
------------------------------------------------------------------------
function [ret]=blogicn(x,beta,a,gamma,sigma)
%eps1=2^-10;ifx>a
dd=1;sg=1;
elseif x<a
dd=0;sg=-1;
else
dd=0;sg=-1;
end
ret=(1-beta)*(x<a)+beta*(1-(dd-(1/2+(gamma-1/2)*sg)*sg*exp(-sg*sigma*(x-a))));
------------------------------------------------------------------------
function [ret]=dblogicd(x,beta,a,sigma)
ret=(1-beta)*(x==a)-2*beta*sigma*(x-a)*exp(-sigma*(x-a)^2);
------------------------------------------------------------------------
function [ret]=dlogicp(x,beta,a,gamma,sigma)
if x>a
dd=0;sg=1;
elseif x<a
dd=0;sg=-1;
else
dd=0;sg=-1;
end
ret=(1-beta)*(x==a)+beta*(dd+sigma*(1/2+(1/2-gamma)*sg)*exp(-sg*sigma*(x-a)));
------------------------------------------------------------------------
function [ret]=dlogicn(x,beta,a,gamma,sigma)
if x>a
dd=0;sg=1;
elseif x<a
dd=0;sg=-1;
else
dd=0;sg=-1;
end
ret=-(1-beta)*(x==a)+beta*(-(dd+sigma*(1/2+(gamma-1/2)*sg)*exp(-sg*sigma*(x-a))));
------------------------------------------------------------------------
function y=testf2(x)
y=x^2-2;
------------------------------------------------------------------------
%写像力学系処理領域:DS_R1 while
function xsol=bwds(a,b,i,delta0)na=1;
nb=1;ni=1;nx=1;nf=1;
n_a=na;n_b=nb;n_i=ni;n_x=nx;n_f=nf;a_(n_a)=a;b_(n_b)=b;i_(n_i)=i;e1=0;
while e1==0
e1=(abs(b_(n_b)-a_(n_a))<delta0);n_x=(nx+1)*(1-e1)+nx*e1;
x_(n_x)=(a_(n_a)+b_(n_b))/2n_i=(ni+1)*(1-e1)+ni*e1i_(n_i)=(i_(ni)+1)*(1-e1);
n_f=(nf+1)*(1-e1)+nf*e1;
f(n_f)=testf2(x_(n_x));e2=(f_(n_f)>=0);e3=(f_(n_f)<=0);
%e4=1-(1-(1-e2))*(1-e3);
n_b=(nb+1)*e2+nb*(1-e2);
b_(n_b)=x_(n_x)*e2+b_(nb)*(1-e2)n_a=(na+1)*e3+na*(1-e3);
a_(n_a)=x_(n_x)*e3+a_(na)*(1-e3)na=n_a;
nb=n_b;ni=n_i;nx=n_x;nf=n_f;end
xsol=x_(n_x)
------------------------------------------------------------------------
% 写像処理領域:F_R1
format longa_(1)=2.5
b_(1)=1.1
f_(1)=testf2(a_(1))
f2_(1)=testf2(b_(1))e1=(f_(1)*f2_(1)>0)
% error('no sign change').*e1+phi.*(1-e1)if e1==1error('no sign change');
end
e2=(f_(1)>0)
% n_x=0.*e2+phi.*(1-e2)n_x=1+e2
%x_(n_x)=a_(1)*e2+phi.*(1-e2)x_(n_x)=a_(1)*e2
n_a=1+e2
a_(n_a)=b_(1)*e2+a_(1)*(1-e2)n_b=1+e2
b_(n_b)=x_(n_x)*e2+b_(1)*(1-e2)
% now f(a)<=0<=f(b)
i_(1)=2;
% counts number of function evaluationse3 =(f_(1)==0)
n2_x=(n_x+1)*e3+(n_x+1)*(1-e3)
x_(n2_x)=a_(n_a)*e3+bwds(a_(n_a),b_(n_b),i_(1),10^(-3))*(1-e3)
---------------------------------------------------------------------
以上、ソースコード終わり。
1−1 変数宣言の領域
1−2 写像処理領域
1−3 写像力学系領域
200 情報処理システム
201 MPU
202 主記憶
203 外部記憶装置
204 ディスプレイ
205 キーボード
206 ネットワークインタフェース
301 オペレーティングシステム
302 検証ツール
303 言語処理系
401 ソースコード
402 判定結果ファイル
403 ログファイル
501 モデル表示画面
502 オリジナル領域
503 中間領域
504 解析結果領域
Claims (2)
- マイクロプロセッサと、前記マイクロプロセッサが実行するプログラムとしての検証ツールが格納される主記憶と、前記検証ツールを実行する前記マイクロプロセッサによってアクセスされる情報が格納される外部記憶装置とを含む情報処理システムにおいて、
手続き型プログラミング言語のプログラムコードを前記外部記憶装置から入力し、前記マイクロプロセッサが前記プログラムコードを写像および/または写像力学系に置き換える第1ステップと、
前記写像および/または写像力学系に数学的手法に基づくアルゴリズムを適用することにより、前記マイクロプロセッサが前記プログラムコードの信頼性の検証を行う第2ステップと、
を含み、
前記第1ステップでは、
前記プログラムコードを、変数宣言領域、写像処理領域、写像力学系処理領域に区別するステップと、
前記変数宣言領域では変数宣言を、識別子および当該識別子が属するデータ構造を含む数学定義へ変換するステップと、
前記写像処理領域では、条件分岐文および反復実行文を、連続微分可能写像を用いてモデル化するステップと、
前記変数宣言領域および前記写像処理領域以外の前記写像力学系処理領域では、終了条件を含む入力と出力が定義される写像を再帰的に構成するステップと、
を前記マイクロプロセッサに実行させ、
前記第2ステップにおける前記信頼性の検証では、
前記プログラムコードの無限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第1エラーレベルの検出と、
前記プログラムコードの無限桁演算の論理関係の整合性は検証されているが、有限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第2エラーレベルの検出と、
前記第1エラーレベルおよび前記第2エラーレベルの論理関係の整合性は検証されており、局所的な決定的なルールには問題ないが、前記プログラムコード中のカオスの存在が引き起こすプログラム動作のエラーである第3エラーレベルの検出と、
を前記マイクロプロセッサに実行させる、
ことを特徴とするプログラム論理の検証方法。 - マイクロプロセッサと、前記マイクロプロセッサが実行するプログラム論理の検証プログラムが格納される主記憶と、前記マイクロプロセッサによってアクセスされる情報が格納される外部記憶装置と、前記マイクロプロセッサが処理する情報を可視化して表示するディスプレイと、を含む情報処理システムにおいて、
プログラム論理の検証プログラムは、
手続き型プログラミング言語のプログラムコードを写像および/または写像力学系に置き換える第1ステップと、
前記写像および/または写像力学系に数学的手法に基づくアルゴリズムを適用することにより、前記プログラムコードの信頼性の検証を行う第2ステップと、
をマイクロプロセッサに実行させ、
前記第1ステップでは、
前記プログラムコードを、変数宣言領域、写像処理領域、写像力学系処理領域に区別するステップと、
前記変数宣言領域では変数宣言を、識別子および当該識別子が属するデータ構造を含む数学定義へ変換するステップと、
前記写像処理領域では、条件分岐文および反復実行文を、連続微分可能写像を用いてモデル化するステップと、
前記変数宣言領域および前記写像処理領域以外の前記写像力学系処理領域では、終了条件を含む入力と出力が定義される写像を再帰的に構成するステップと、
を前記マイクロプロセッサに実行させ、
前記第2ステップにおける前記信頼性の検証では、
前記プログラムコードの無限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第1エラーレベルの検出と、
前記プログラムコードの無限桁演算の論理関係の整合性は検証されているが、有限桁演算の論理関係の整合性のエラーが引き起こすプログラム動作のエラーである第2エラーレベルの検出と、
前記第1エラーレベルおよび前記第2エラーレベルの論理関係の整合性は検証されており、局所的な決定的なルールには問題ないが、前記プログラムコード中のカオスの存在が引き起こすプログラム動作のエラーである第3エラーレベルの検出と、
を前記マイクロプロセッサに実行させる、
ことを特徴とするプログラム論理の検証プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007031369A JP4958574B2 (ja) | 2007-02-09 | 2007-02-09 | プログラム論理の検証方法、プログラム論理の検証プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007031369A JP4958574B2 (ja) | 2007-02-09 | 2007-02-09 | プログラム論理の検証方法、プログラム論理の検証プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2008197851A JP2008197851A (ja) | 2008-08-28 |
JP4958574B2 true JP4958574B2 (ja) | 2012-06-20 |
Family
ID=39756746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007031369A Active JP4958574B2 (ja) | 2007-02-09 | 2007-02-09 | プログラム論理の検証方法、プログラム論理の検証プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4958574B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112540284A (zh) * | 2020-11-12 | 2021-03-23 | 中铁第四勘察设计院集团有限公司 | 一种继电电路诊断方法及系统 |
WO2022219770A1 (ja) * | 2021-04-15 | 2022-10-20 | 日本電信電話株式会社 | 関数変換装置、関数変換方法、およびプログラム |
WO2022219768A1 (ja) * | 2021-04-15 | 2022-10-20 | 日本電信電話株式会社 | 関数変換装置、関数変換方法、およびプログラム |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1063537A (ja) * | 1996-08-21 | 1998-03-06 | Fujitsu Ltd | プロパティ検証方法および装置 |
EP1591887A1 (en) * | 2003-01-28 | 2005-11-02 | Catena Corporation | Software development preprocessing method, software control method, software development method, and software development device |
-
2007
- 2007-02-09 JP JP2007031369A patent/JP4958574B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2008197851A (ja) | 2008-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Cordeiro et al. | SMT-based bounded model checking for embedded ANSI-C software | |
US8209646B2 (en) | Apparatus and method for analyzing source code using path analysis and Boolean satisfiability | |
JPWO2016121074A1 (ja) | ソフトウェア検査装置 | |
Binh | Mutation operators for Simulink models | |
Kaur et al. | Improving the quality of software by refactoring | |
Barbosa et al. | Flexible proof production in an industrial-strength SMT solver | |
JP4958574B2 (ja) | プログラム論理の検証方法、プログラム論理の検証プログラム | |
US8527975B2 (en) | Apparatus and method for analyzing source code using memory operation evaluation and boolean satisfiability | |
Roşu et al. | Testing extended regular language membership incrementally by rewriting | |
Ding et al. | Deadlock checking for one-place unbounded Petri nets based on modified reachability trees | |
Barnett et al. | Non-clausal Redundancy Properties. | |
Noikajana et al. | Web service test case generation based on decision table (short paper) | |
Ayav et al. | Identifying critical architectural components with spectral analysis of fault trees | |
Saeedloei et al. | Timed scenarios: consistency, equivalence and optimization | |
Lee et al. | External don’t cares in logic synthesis | |
Singh et al. | Knowledge-guided methodology for third-party soft ip analysis | |
Falcone et al. | Enforcement monitoring wrt. the safety-progress classification of properties: NOTE: ACM has found that the authors of this paper failed to cite a work they previously published with much identical content entitled Synthesizing Enforcement Monitors wrt. the Safety-Progress Classification of Properties. Published in December 2008 in the Springer LNCS series for the ICISS 2008 conference DOI= http://dx. doi. org/10.1007/978-3-540-89862-7_3 | |
Li et al. | Tabular‐expression‐based method for constructing metamorphic relations | |
US20040111684A1 (en) | Design method of logic circuit | |
Hills et al. | A rewriting logic semantics approach to modular program analysis | |
Przigoda et al. | Four-valued logic in uml/ocl models: A “playground” for the mvl community | |
Champarnaud et al. | An efficient algorithm to test whether a binary and prolongeable regular language is geometrical | |
Smidts et al. | The Development of the Integrated System Failure Analysis and Its Applications | |
Singh et al. | An essence of software maintenance prediction using the fuzzy model for aspect oriented software | |
Bignall et al. | Multiple-valued logic as a programming language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20100201 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110527 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110607 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110801 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20111220 |
|
RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20120127 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20120127 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120217 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120306 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120319 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150330 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4958574 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313117 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313117 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |