misra cpp, cert cpp 2016 and rtl design style guide with hazop
TRANSCRIPT
MISRA-C++とCERT C++による安全・安心システムへの貢献
STARC RTL設計スタイルガイドとHAZOP
日本学術会議安全工学シンポジウムTokyo, July 8, 2016
2017/2/1 (c)[email protected], @kaizen_nagoya
技術士(情報工学)・工学博士
名古屋市工業研究所 岐阜大学非常勤講師 小川清
@kaizen_nagoyahttp://researchmap.jp/kaizen/MISRA-C/
概要
2017/2/1 (c)[email protected], @kaizen_nagoya
1. 自己紹介
2. 計算機の安全と安心
3. 分析手法としてのHAZOP
4. C, C++:コンパイラとOS記述
5. コーディング標準をHAZOP
6. まとめと今後の課題
1.自己紹介公的試験研究機関
JAXA/IPAクリティカルソフトウェアワークショッププログラム委員長
ISO/IEC 15504 part2,6,9 co-editor
情報処理学会情報規格調査会SC7 WG10, 20, 24 委員
TOPPERSプロジェクト理事
MISRA C研究会
SWEST実行委員
2. 計算機の安全と安心
2.1 対象と目的
2.2 部品としての計算機
2.3 計算機の構成
2.4 計算機システム関連危険
2017/2/1 (c)[email protected], @kaizen_nagoya
2.1 対象と目的
2017/2/1 (c)[email protected], @kaizen_nagoya
対象
計算機を部品として含む装置として
電気装置として
通信・入出力装置として
目的
コーディング標準で一つでも安全・安心の穴を防ぐ
HAZOPを併用することにより効率をよくする
2.2 部品としての計算機航空宇宙、自動車、鉄道・輸送機械
発電所・工場(工作機、フォークリフト)・農業機械
パソコン、パッド、スマフォ(携帯電話)・事務機械
テレビ(ラジオ)・冷蔵庫・洗濯機・掃除機・音響機器
空調(エアコン・扇風機・暖房機)、エレベータ、照明・自動ドア・入退室監視
遊興機器(ゲーム機・パチンコ)・自販機
ポンプ(水道・ガス)・送配電
具体例として次の2枚はTOPPERS搭載製品群を紹介
2017/2/1 (c)[email protected], @kaizen_nagoya
2017/2/1 (c)[email protected], @kaizen_nagoya
2.3 計算機の構成電源装置
周波数・時計装置
(論理)電子計算機械処理装置(CPU)通信・入出力装置記憶・記録装置(ソフトウェア・データ)
運用系(OS)通信規約記録系(file system)
言語(C/C++)記録系(file system)
2.4 計算機システム危険事象
電源断による停止
電源変動(高周波・雑音)による異常挙動
暴走(止まらない)=目的の処理をしない
メモリ破壊(設計外の値を書き込む)=設計外の振舞
設計外の処理を実行
設計外の処理を読み込み(動的処理)
値の漏洩
2.4.1 ソフトウェア関連
通信雑音・間違ったデータの入出力
処理誤り・処理能力超え
同時入力による不定
想定外の入力があった
計算時間が間に合わない
結果として対象システムが人に危害を与えたり、大事な情報が漏洩する。
3. HAZOP時間・空間の質と量を網羅するため安全と安全の分析に利用可能
システムの安全・安心分析をする際に、HAZOPをどのように利用するとよいかの指針がない
道具としてのコンパイラはC++, 環境としてのOSはC言語で記述している。
C, C++は安全についてはMISRA , 安心についてはCERTデコーディング標準がある
論理回路としてのCPUはVerilog-HDL, VHDL, System C等の言語で記述できる。
STARC RTL設計スタイルガイドを追加
これらの手法を事前にHAZOPの対応状況を調べる
2017/2/1 (c)[email protected], @kaizen_nagoya
3.1 HAZOPの誘導語(guide word)ID �4 *�+ �LJ'! �% &4
W1��5>E?CD>@<>6�(no) ,�K1G�F W0 �
W2�5=?B><D?A@6 .(reverse) ,�K1G��� W0 �
W3��M� �(other than)HJ�J�7�, 8 �
W41 �(more) 1$I�� W5 �
W5 (quantity) �(less) 1$I�� W4 �
W6, 4(as well as),$I�� W7 �
W7 (quality) 0(part of) ,$I�� W6 �
W8�2 �(early) �2G�F W9 -�
W9 (time) /(late) �2G/F W8 -�
WA3# �(before) 3#G�N��O WB -�
WB(order) �(after) 3#G�N��O WA -�
':8:�N;9Q)(��P�"��Q�LJIF �O
2015年 7月 2日(c)@kaizen_nagoya
3.2 誘導語の対称性大小・類部・遅早・前後は対称(相互に逆)の概念
無は、設計・操作意図の存在の逆
逆は、設計・操作意図の方向の逆
対になる概念は一方があれば相方は必須
大ー>小(大は確認するが小は未確認のことがある)
遅ー>早(遅れは気にするが早い方は深堀しない)
後ー>前(後になると怒るけど前になると気にしない)
無は簡単だが逆は難しい
部は簡単だが類は難しい
他はとてもむつかしい
2017/2/1 (c)[email protected], @kaizen_nagoya
3.3 計算機システム関連危険電源断・電源変動(無・逆・大・小・類・早・遅)
通信雑音・間違ったデータの入出力(類)
処理誤り・処理能力超え(他、大・小・早・遅)
同時入力による不定(類)
計算時間が間に合わない(遅)
想定外の入力があった(無・逆・他・大・小・類・部・早・遅・前・後)
結果として対象システムが人に危害を与えたり、大事な情報が漏洩する。(無・逆・他・大・小・類・部・早・遅・前・後)
4. C, C++:コンパイラとOS記述
2017/2/1 (c)[email protected], @kaizen_nagoya
4.1 計算機ソフトウェア構造
4.2 計算機ソフトウェア構造(新)
4.3 C, C++(計算機言語)
4.4 C, C++言語類とOS
4.1 計算機ソフトウェア構造(旧:前の章で紹介)
2017/2/1 (c)[email protected], @kaizen_nagoya
OS (C) C言語処理系(C)
共通ライブラリ(C)
C言語処理系(C)
C言語処理系(C)
4.2 計算機ソフトウェア構造(新)
2017/2/1 (c)[email protected], @kaizen_nagoya
OS(C)
共通ライブラリ(C)
C言語処理系(C++)
C++言語処理系(C)
共通ライ 共通ライブラリ(C) ブラリ(C++)
C++言語処理系(C++)
4.3 C, C++(計算機言語)
2017/2/1 (c)[email protected], @kaizen_nagoya
• CPUが実行するのは機械語。
• CPU提供者が、CPUとアセンブラ、C/C++コンパイラを同時に出荷。
• 実行している内容でよいかどうかをたしかめるのは機械語(アセンブラ)。
• C/C++を生成すれば、対応CPUが一気に広がる。
• UNIX/LinuxなどのOSはCで記述している。
• Cコンパイラは以前はC, 今はC++で記述している。
• 次のページは言語の使用割合の調査例
2017/2/1 (c)[email protected], @kaizen_nagoya
4.4 C, C++言語類とOS
2017/2/1 (c)[email protected], @kaizen_nagoya
言語 記述対称
C言語 Linux, C
C++ C++, C
Objective C Macintosh OS X
C# MS Windows
OS: Operating system(運用系)例:Linux, Macintosh OS X, MS windows
5. コーディング標準をHAZOP5.1 HAZOPとコーディング標準
5.2 コーディング標準のHAZOP
5.3 分析は英語で
5.4 誘導語の分類
5.5 MISRA
5.6 CERT
5.7 STARC
5.8 誘導語の相互関係
5.9 部品による誘導語の割り当て2017/2/1 (c)[email protected], @kaizen_nagoya
5.2 コーディング標準のHAZOPコーディング標準を守っていると誘導語を網羅
逆に、コーディング標準自体がどれほどHAZOPを網羅しているかを事前調査
HAZOPとコーディング標準の網羅性がわかり、別のコーディング標準などを使うとよいかどうかがわかる
分析対象
MISRA-C++CERT C++
STARC RTL設計スタイルガイド
2017/2/1 (c)[email protected], @kaizen_nagoya
5.3 ソフトウェアの分析は英単語で
2017/2/1 (c)[email protected], @kaizen_nagoya
C, C++などは英単語からなっている
STARC RTL設計スタイルガイドは日本で作っているが英文の方が分かりやすい
IEC guide 50, HAZOPなどのように日本語のJISになっていない国際規格がある。
国際的な発表、国際規格の改良提案など英語でする必要がある。
西暦2000年問題では英語サイトの方が詳細だった
5.4 誘導語の分類と英単語誘導語6分類に整理
無・逆(意図の逆)、他、大小(空間の量)、類部(空間の質)、早遅(時間の量)、前後(時間の質)に区分して集計
十一項目に集計するだけだと数がばらける
誘導語に対応する鍵となる語の抜き出し
例:Do not describe any arithmetic operationsother than with loop variables and constants.
2017/2/1 (c)[email protected], @kaizen_nagoya
無逆 loop/constraints operations variables not 名詞
他 other than
大小 operations variables constraints 複数形
類部 loop arithmetic
早遅
前後
誘導語に対応する鍵となる語の抜き出し
2017/2/1 (c)[email protected], @kaizen_nagoya
5.5 MISRA(Motor Industry Softwre Reliability Association)
l Development guideline for vehicle based software(ISO TR 15497)自動車用ソフトウェアの開発ガイドライン(自動車技術会
TP-01001)l Guidelines for the use of the C language in vehicle based
software(MISRA C:1998)自動車用C言語利用のガイドライン(自動車技術会TP-
01002)l Guidelines for the use of the C++ language in critical
systems(MISRA C++:2008)MIRA(Motor Industry Reliability Association)
2015/05/23 (c)[email protected], @kaizen_nagoya
5.5.1 MISRA-C++のHAZOP
2017/2/1 (c)[email protected], @kaizen_nagoya
無non boolNULL zero
unused
bitwise void
condition
switch/case
exception loop if
empty varid
大
upper case wide size
multiple
number/enum
value/variable
integer cast
constant float
pointer
arithmetic
character
inc/dec
類typestandard
compatible rule
conversion cast
exception
前block
external/internal
static/dynamic order
before/after
goto/jump
throw/catch
preprocessor/define
switch/case
exception
exit/terminate
5.5.2 MISRA C++誘導語Bool, integer, characterなどの型は類
Signed, unsignedは無・逆
大きさは、大・小
Void, NULLは無(validなど)
Castは大・小、類・部を確認
Switch, caseは無・逆、前・後を確認
2017/2/1 (c)[email protected], @kaizen_nagoya
Void, NULLは無(validなど)
5.6 CERT(Computer Emergency Readiness Teams)
l SEI CERT C Coding Standard Rules for Developing Safe, Reliable, and Secure Systems 2016 Editionl http://www.sei.cmu.edu/downloads/sei-cert-c-coding-
standard-2016-v01.pdfl SEI CERT C++ Coding Standard
l https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637
l SEI CERT Oracle Coding Standard for Javal https://www.securecoding.cert.org/confluence/display/java/S
EI+CERT+Oracle+Coding+Standard+for+Java
2015/05/23 (c)[email protected], @kaizen_nagoya
5.6.1 CERT C++のHAZOP
2017/2/1 (c)[email protected], @kaizen_nagoya
無if, while for
switch cast
NULL race
atomic
define
return
declear
invalid
reference
return
preprocessor
大
enumeration for case cast
random
namespace value
number
va_arg
constraints
floating
reference
pointer
arguments
類generic
library std cast
safety rule
function
define
exception
macro error file
format type
前domain range
switch signal
asctime
preprocessor
sequence EOF
constractor
5.6.2 CERT C++cast, switch case, float, pointerなどは同様
define, value, library, function なども同様
時間の早遅が少ないのも同様
2017/2/1 (c)[email protected], @kaizen_nagoya
5.7(Semiconductor Technology Academic Research Center)
2017/2/1 (c)[email protected], @kaizen_nagoya
RTL設計スタイルガイド VHDL編
RTL設計スタイルガイド Veriog HDL編
STARC2016.5.31解散に伴いロゴを付けることを条件に利用許諾。著作権はHD Labが継承。
「自由に本ガイドを利用し、従来同様の事業又は新規に事業を行うことができます。但し、その際にSTARCロゴ
は該当製品等から取り除くことはできないこと条件と致します。」
「著作権を、本年6月1日以降、hdLab社へ移管します。」2016年
5.7.1STARC RTL設計スタイルガイド
2017/2/1 (c)[email protected], @kaizen_nagoya
無 動詞 名詞単数系
identify once define bit first insert
if/logic
逆 動詞形容詞
input/output
re-/co unter edge
includeexclude
inverte
bidirection
if/logic
feedback
他 thirdmalfunction error noise
otherthan
大 空間 数値複数形
upper/lower
characters length
constants
number
maximum
parameters large
小smaller low
類 samecommon
design/style
identify library define
standard
property
interectual
structure always
部 easy
早 時間synthesis
timer/timing speed
clocksignal
前 動詞synthesis
order/end
re-/co unter edge define
clocksignal
hierarchy
top/level
beginning
feedback
5.7.2 RTL設計スタイルガイドと誘導語
時間に関する規則が多い
論理回路の物理的現象のHazardを対象にしている
直接HAZOPの誘導語と同じ単語が出てくる
名詞、動詞、形容詞が誘導語に対応している
単数系、複数形が誘導語に対応している
2017/2/1 (c)[email protected], @kaizen_nagoya
時間に関する規則が多い
早遅、前後について具体的
Re-, in-などの接頭辞が誘導語に対応している
5.8 誘導語の相互関係空間
大・小(量)、類・部(質)
時間
早・遅(量)、前・後(質)
論理, define, identify
無・逆、類
フィードバック, Re-, edge,
逆、前・後2017/2/1 (c)[email protected], @kaizen_nagoya
5.8.1 誘導語の性格
動詞、名詞、形容詞を誘導語に対応
単数系は無、複数形は大小に対応
空間は大小、類部、時間は早遅、前後に対応
2017/2/1 (c)[email protected], @kaizen_nagoya
5.9 部品への誘導語の割り当て
論理回路
FF(flip flop)、ラッチ:無・逆・大小・類部・早遅・前後
CPUレジスタ,メモリ:無・逆・大小・類部・早遅・前後
ソフトウェア
ポインタ, 除算:無・逆・大小・類部・早遅・前後
2017/2/1 (c)[email protected], @kaizen_nagoya
6. まとめと今後の課題6.1 まとめ
6.2 今後の課題
6.3 確率論及統計論輪講
6.4 参考文献
6.5 略号一覧
6.6謝辞
6.7 履歴
2017/2/1 (c)[email protected], @kaizen_nagoya
6.1 まとめC言語とC++言語を一括で扱うか、それぞれの特徴を生かしていくか
OSの記述はC言語のままでよいかC++にする利点はあるか
HAZOPで二つのコーディング標準とRTL設計スタイルガイドの誘導語対応を確認
空間についてはCとC++の連携しているMISRA C/C++, CERT C/C++を利用していく
時間については、RTL設計スタイルガイドが詳しい
OSで時間に焦点をあてたコーディング標準が必要
OSの記述はC言語のままでよいかC++にする利点はあるかは未確認
2017/2/1 (c)[email protected], @kaizen_nagoya
時間については、RTL設計スタイルガイドが詳しい
6.2 今後の課題OSの仕様をHAZOPする
OS用のコーディング標準を試作
C++でOSを記述する上であるとよい機能を検討する
ライブラリ関数についてC, C++の評価をする
通信規約は次々提案がある。通信ライブラリについて評価する
論理的な確認はできつつあるが、確率的な事項は対応できていない
2017/2/1 (c)[email protected], @kaizen_nagoya
6.3 確率論及統計論輪講
放射線計測では原理理解が重要
航空宇宙では宇宙線(放射線)の影響を考慮した確率的設計が必要
HAZOPでは可能性の洗い出しで、検出・対応方法は技術的な創造が必要
物質、機構、電気網、人、組織(社会)などの確率分布・時定数の違う事象を網羅的に扱えるようにする
ソフトウェアは決定論的故障だというが、メモリ管理は確率的。時間の衝突も確率的。
2017/2/1 (c)[email protected], @kaizen_nagoya
2017/2/1 (c)[email protected], @kaizen_nagoya
6.4参考文献u The Motor Industry Software Reliability Association(1994):Development
Guidelines for Vehicle Base Software,ISBN 0952415607u The Motor Industry Software Reliability Association(1998):Guidelines for
THE USE Of The language IN Vehicle Based Software ISBN 0952415690u Guidelines for the use of the C language in critical systems, 2013, ISBN
9781906400-11-8 PDFu JSAE(2002):JASO/TP-01001 自動車用ソフトウェアの開発ガイドライン,社団法人自動車技術会
u JSAE(2002):JASO/TP-01002 自動車用C言語利用のガイドライン、社団法人自動車技術会
u B.W.カーニハン,D.M.リッチー著,石田晴久(訳:1989)プログラミング言語C、共立出版
uA.コーニグ著.中村明(訳:2004)Cプログラミングの落とし穴,新紀元社
uアラン・R. フューアー著, 田中和明・手塚忠則 (訳:2000)C PuzzleBook,カットシステム
6.4.1 参考文献(続き)C言語のポータビリティとリーダビリティ,小川清,工業技術連絡会議電子連合部会コンピュータ応用
分科会ミニコン研究会,1987年10月
C言語の移植性とC++,小川清(名古屋市工業研究所)、小嶋久(愛知工業大学),電気関係学会東海支部
連合大会,1987年10月
C言語利用システムの構成について,小川清,全NECユーザ会研究発表会,1988年3月
OBJの試用経験,小川清,二木厚吉,ソフトウェア技術者協会シンポジウム,1992年6月
MISRA-C:1998とMISRA-C:2004のC90,C99との検討,坪井泰樹, 吉川直邦(大同工大), 小川清, 斉藤直希,情報処理学会, 2005.3
高信頼性コーディング標準MISRA-Cとそのサンプルの組込みボードを使った確かめ方,小川清,岐阜県 組
込みハード&ソフト研究会,2006年11月
MISRA-C/C++ の教育方法の提案,鈴木若菜,足立和規,渡辺翔,伊藤光, 堀武司,斉藤直希,渡部謹二,小川
清,電気関係学会東海支部連合大会,2009年9月
The C Puzzle bookを用いたC言語教育の展開 高橋信貴, 小那覇安淑, 井上陽介, 伊藤光, 斉藤直
希, 渡部謹二, 小川清, 堀武司,電気関係学会東海支部連合大会講演論文集,2009.9
MISRA-C:2004から2012への移行の課題 WOCS2014, (株)ヴィッツ,森川聡久, 小川清, 2014年1月
ソフトウェアFMEAを体系的に実施する 出発点としてのMISRA-C, 安全工学シンポジウム, (株)ヴィッツ, 中
野泰伸,森川聡久, 小川清、2014年7月
MISRA-C:2004 から 2012 への移行の課題,WOCS2015, (株)ヴィッツ, 萩原勝, 小川清, 2015.1月
MISRA-C as function programming and a subset of standard, 小川清, PPL2015, 日本ソフトウェア科学会,2015.3安全(safety)と安心(security)に関するC言語コーディング標準の取組, 小川清,安全工学シンポジウム, 2015.7 2017/2/1 (c)[email protected], @kaizen_nagoya
6.5 略号一覧C++: C plus plus(計算機言語)
MISRA:Motor Industry Softwre Reliability Association,自動車業界ソフオトウェア信頼協会
CERT:Computer Emergency Readiness Teams,計算機緊急対応班
STARC: Semiconductor Technology Academic Research Center: 2016年5月31日解散
HAZOP: Hazard Analisys and Operability
SESSAME: Society of Embedded Software Skill Acquisition for Managers and Engineers, 特定非営利活動法人 組込み
ソフトウェア管理者・技術者育成研究会
JAXA: Japan Aerospace Exploration Agenc, 国立研究開発法人宇宙航空研究開発機構
IPA:Information-technology Promotion Agency, Japan, 独立行政法人情報処理推進機構
TOPPERS: Toyohashi OPen Platform for Embedded Real-time Systems, 特定非営利活動法人
SWEST: Summer Workshop on Embedded System Technologies, 組込みシステム技術に関するサマーワークショップ
ISO: International Organization for Standardization, 国際標準化機構
IEC: International Electrotechnical Commission, 国際電気会議
SC: Sub Committee, 副委員会
WG: working Group, 作業班
CPU: Central Processing Unit,中央処理装置
OS: Operating System, 運用系
OSEK:Open system together with interfaces for automotive electronics(英), Offene Systeme und deren Schnittstellen fürdie Elektronik im Kraftfahrzeug(独)車載電子機器用界面付属公開系
AUTOSAR:AUTomotive Open System ARchitecture, 自動車公開系構造
RTL:Register Transfer Level, 記憶転送水準
HDL:Hardware description language, 論理記述言語
VHDL:VHSIC HDL, ,超高速集積回路論理記述言語
VHSIC: very high speed integrated circuits,超高速集積回路
2017/2/1 (c)[email protected], @kaizen_nagoya
6.6 謝辞NPO法人 SESSAMEプロジェクト(MISRA-C研究会)
NPO法人 TOPPERSプロジェクト
組込中核人材プロジェクト
株式会社東陽テクニカ
一般財団法人日本規格協会
ISO/IEC JTC1 SC22 WG14
公益社団法人自動車技術会
トヨタ自動車株式会社
株式会社ヴィッツ、株式会社セブンワイズ、株式会社サンテック
株式会社ルネサス、株式会社Spancion、株式会社デンソー
OSC事務局
2017/2/1 (c)[email protected], @kaizen_nagoya
6.7 履歴1.0 1998年 SPA研究会 Cコーディング標準について
2.0 2004年7月CEST 自動車業界の C コーテ◌゙ィンク◌゙標準 MISRA-C について
2.1 2004年9月電気関係学会東海支部
2.2 2005年3月日本科学技術連盟24回. 株ヴィッツ服部博行氏
3.0 2007年6月組込み研修
3.1 2007年9月電気関係学会東海支部で発表(項目数評価:ETSS利用効果測定)
3.2 2007年11月組み込みLinux研修
4.0 2008年企業向け研修
4.1 2009年SPIN研修
4.2 2009年MISRA-C++研修
4.3 2009年組込み研修
4.4 2009年情報処理学会,MISRA-C1998,MISRA-C2004のC90,C99との検討,吉川直邦氏
5.0 2011年 企業向け研修
6.0 2013年 OSC Nagoya2013
6.2 2014年2月CEST, MISRA=C:2012で楽しいCプログラミング
7.0 2015年2月セキュリティ・ESCR対応
7.1 2015年3月ソフトウェア科学会 PPL2015
7.2 2015年7月安全工学シンポジウム
8.0 2016年7月安全工学シンポジウム, C++対応2017/2/1
(c)[email protected], @kaizen_nagoya