MISRA-C diary(C言語日誌)

2012年9月の記事一覧

制御対象状態を減らして,状態遷移試験をし易くするためのMISRA-C

TEF東海の状態遷移試験の勉強会に参加しました。

ソフトウェア試験の技術者は、状態遷移試験を最初に勉強するとよいという話が一番共感できました。原理的なところから押さえていけば、体系的に勉強できるので、無駄なく理解できると感じています。

発言したこと、考えたことなどは別途記録します。

まず、2つの大事なことを記録します。

状態方程式について
 状態を計算する演習をしました。
 状態方程式を計算していることを説明すれば、すごく分かり易いと思いました。
 状態方程式の計算をしているから、行列の掛算をしているという話をすれば、
 電気屋さんも、制御屋さんも、自分がやっていることと同じだと分かるので、
 すぐに馴染むと感じました。

MISRA-Cについて
 MISRA-Cはコード規約です。
 MISRA-Cが、C言語の部分集合を定義している理由については、一つは
 函数プログラミングをすることによって振舞の異なる記述をしないように
 なるという仮設を確認中です。
 同じように、MISRA-Cは、状態の数,状態遷移の数を減らすことによって、
 振舞の異なる記述をしないようにしているという仮設を確認中です。

状態方程式については、会合で簡単に触れました。

出力=状態行列×入力という式です。

状態遷移試験をする場合に,課題として状態の数,状態遷移の数があります。
状態の数,状態遷移の数が多いと、試験が爆発的に多くなります。

MISRA-Cは、厳密なプログラムを書くための手法として状態の数,状態遷移の数を減らす手法として考えるとよいことが分かります。

自由にプログラムをすると、不必要に状態の数が増えてしまう可能性があります。

MISRA-Cでは、不必要な状態の数の増大を防ぐ方法の例を示します。

1 静的記憶のみの利用
 動的記憶の利用は、状態の数を爆発的に増やす可能性があります。
 
2 不必要な副作用の回避
 不必要な副作用を回避することは、振舞の違いを回避することが目的です。
 振舞の違いを回避することは、状態遷移の違いを回避することになります。
 状態遷移の違いを回避することは、状態遷移の数を減らすことになります。
 不必要な副作用を回避することは、状態遷移の数を減らすことになります。

3 変数の範囲の限定と、変数の代入の際の範囲の限定
 変数の型,型変換を厳密に記述することによって、変数の代入などの際に,
 不必要に状態が増加することを防いでいる。

コード規約,制御理論,論理回路など関係理論は、
ソフトウェアを試験する際の理論と結びついていることを示すと,
覚えることが少ないことが分かるかもしれません。
0

状態遷移テストの勉強会

TEF東海の「状態遷移テストの勉強会」の案内を行事に掲載しました。

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際
秋山 浩一
日科技連出版社(2010/10)
値段:¥ 2,940



参加する際には,予習をここに記載予定。

できれば、MISRA-Cが試験のし易さに役立っていることを記録したい。

愛知県内図書館検索で調べたところ1冊も所蔵していない。
参加するなら買うしかないか。

ソフトウェアテストHAYST法入門 品質と生産性がアップする直交表の使い方
吉澤 正孝/秋山浩一/仙石太郎
日科技連出版社(2007/07/26)
値段:¥ 3,150


は3カ所で所蔵しているのに。残念。

参加申し込みはこちら

ps.
図書の所蔵状況で、その自治体に本拠地がある企業の体質が分かるかも。
地域貢献,地域との繋がりを大切にしている企業がある自治体には、その企業に関連した書籍が必ずあるのが経験則。

刈谷市には、これまで調べた範囲で、1勝9敗くらい。
豊田市は、5勝5敗くらい。
関連する書籍が100%所蔵しているのは、癒着の可能性がある。
豊田市の数字は妥当な気がした。

0

MISRA-Cが函数プログラミングの入り口であることについて

「MISRA-Cが函数プログラミングの入り口である」という仮設を立てて,
MISRA-C教育の役割の明確化を図る。なお、具体的には,9/2 ProofSummitのLTで「Proof Summit2012函数プログラミングの集いに参加して=オブジェクト指向+MISRA-C」として話をする。

背景
 2012/9/1 函数プログラミングの集まりにおいて、
という発表があった。

ここで「「函数型言語」を使ってはいけない」という説明があった。
ネタバレになるが「「函数型言語」という単語を函数型プログラミングがしやすいという意味以外で使ってはいけない。」
というもの。問題は函数型プログラミングと言語機能は同じ集合になっていないことに留意しない人が,やれ集合だ,やれ型だというのは可笑しいという感じ。

自分が使っている日本語が,型違反をしているのに,プログラムだけ型を守れといっても,仕様とプログラムが違うという悪循環から逃れられない。

厳密な言語を使うのなら,日本語でも厳密な用語で説明しないと意味不。

参考文献
http://turing100.acm.org/lambda_calculus_timeline.pdf

いくつかの点において、MISRA-Cが函数プログラミングの導入に役立つことに気が付いた。




1 作用(函数)と副作用について

2 作用(函数)としての入力と出力の定義について

3 言語仕様とプログラミングの仕方の関係について

MISRA-Cで採用している考え方について仮設をたててみる。

1 ISO/IEC 9899に基づくだけでなく、CPU,コンパイラ(処理系)の違いによって、同じプログラムが違う振舞をしないようなプログラムの書き方を提唱している。
 これは、言語仕様を規定するよりは、プログラミングの仕方を規定しようとしていると考えることができる。

2 動的メモリの利用をせずに静的なメモリの利用に限定している。これは、実行時間の見積もりなど、異なる振るまいをしないようにするものである。

3 副作用が処理の順番を規定していないことから、副作用による異なる振舞がおきることがないようにしている。

4 同じ入力に対して,同じ出力を返すことが、違う振舞をしないプログラムの書き方であるとすれば、函数プログラミングと同じ方向を指向している。

5 C,C++の言語教育において、MISRA-Cによるプログラムの書き方を習得していれば、函数プログラミングを容易に記述できるようになっている。

<この稿は書きかけのため順次追記します。>

情報処理学会プログラミングシンポジウム または
日本ソフトウェア科学会PPL2013 に投稿予定です。
連名発表者を募集しています。
0