misra cpp, cert cpp 2016 and rtl design style guide with hazop

56
MISRA-C++CERT C++ による安全・安心システムへの貢献 STARC RTL設計スタイルガイドとHAZOP 日本学術会議安全工学シンポジウム Tokyo, July 8, 2016 2017/2/1 (c)[email protected], @kaizen_nagoya 技術士(情報工学)・工学博士 名古屋市工業研究所 岐阜大学非常勤講師 小川清 @kaizen_nagoya http://researchmap.jp/kaizen/MISRA-C/

Upload: kiyoshi-ogawa

Post on 11-Apr-2017

630 views

Category:

Technology


0 download

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実行委員

JAXA/IPA 14thクリティカ

ルソフトウェアシステムズワークショップ

2016年12月12日(月)13日(火)開催

一般発表募集8月末締切(予定)

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.3.1 C言語設計者から見た構造

応用

通信規約

OS

C言語

CPU

2.3.2 応用ソフト設計者から見た構造

応用

応用ソフト用言語(C言語で生成)

通信規約

OS

C言語

CPU

2.3.3 Unix(Linux),C言語,CPUの構造

OS(Unix/Linux)

C言語

CPU

2.3.4 OS,C言語、CPU

CPU

CPU

CPU

C言語

C言語

CPU

OS(OSEK/AUTOSAR)

C言語

CPU

CPU

CPU

OS

CPU

2.4 計算機システム危険事象

電源断による停止

電源変動(高周波・雑音)による異常挙動

暴走(止まらない)=目的の処理をしない

メモリ破壊(設計外の値を書き込む)=設計外の振舞

設計外の処理を実行

設計外の処理を読み込み(動的処理)

値の漏洩

2.4.1 ソフトウェア関連

通信雑音・間違ったデータの入出力

処理誤り・処理能力超え

同時入力による不定

想定外の入力があった

計算時間が間に合わない

結果として対象システムが人に危害を与えたり、大事な情報が漏洩する。

3. 分析手法としてのHAZOP

2017/2/1 (c)[email protected], @kaizen_nagoya

3.1 HAZOP

3.2 HAOZPの誘導語

3.3 誘導語の対称性

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.1 HAZOPとコーディング標準

2017/2/1 (c)[email protected], @kaizen_nagoya

ソースコード

コーディング標準

HAZOP

5.2 コーディング標準のHAZOPコーディング標準を守っていると誘導語を網羅

逆に、コーディング標準自体がどれほどHAZOPを網羅しているかを事前調査

HAZOPとコーディング標準の網羅性がわかり、別のコーディング標準などを使うとよいかどうかがわかる

分析対象

MISRA-C++CERT C++

STARC RTL設計スタイルガイド

2017/2/1 (c)[email protected], @kaizen_nagoya

5.2.1 関係図

2017/2/1 (c)[email protected], @kaizen_nagoya

ソースコード

コーディング標準

HAZOP

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

SWEST

技術者の合宿

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