MISRA-C:2004 から 2012 への移行の課題 ~MISRA-C:2012 移行に関する対応方策の提言 ~ 株式会社ヴィッツ萩原勝 株式会社ヴィッツ森川聡久 中野泰伸 名古屋市工業研究所小川清 12 th WOCS 2 1/21/2015 Copyright 2015 Witz Corpo

Similar documents
ソフトウェア FMEA を体系的に実施する 出発点としての MISRA-C 株式会社ヴィッツ森川聡久 株式会社ヴィッツ中野泰伸 名古屋市工業研究所小川清 1

Microsoft PowerPoint - A3② JaSST_MISRA2004ソースコード品質診断.ppt

- 2 Copyright (C) All Rights Reserved.

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft PowerPoint - CproNt02.ppt [互換モード]

プログラミング基礎

初心者にもできるアメブロカスタマイズ新2016.pages

プログラミング実習I

CX-Checker CX-Checker (1)XPath (2)DOM (3) 3 XPath CX-Checker. MISRA-C 62%(79/127) SQMlint 76%(13/17) XPath CX-Checker 3. CX-Checker 4., MISRA-C CX- Ch

Microsoft PowerPoint - 09.pptx

slide5.pptx

Copyright All Rights Reserved. -2 -!

Slide 1

IPA:セキュアなインターネットサーバー構築に関する調査

Microsoft Word - 最終版 バックせどりismマニュアル .docx

Prog1_10th

標準化 補足資料

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

untitled

- 2 Copyright (C) All Rights Reserved.

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

Microsoft PowerPoint - LAB-03-SR18-ã…Łã‡¡ã‡¤ã…«ã…ªã‡¹ã…‹ã‡¢-v1

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

2015 TRON Symposium セッション 組込み機器のための機能安全対応 TRON Safe Kernel TRON Safe Kernel の紹介 2015/12/10 株式会社日立超 LSIシステムズ製品ソリューション設計部トロンフォーラム TRON Safe Kernel WG 幹事

PGRelief C/C++ 強化ポイント説明書

how-to-decide-a-title

Microsoft PowerPoint - 計算機言語 第7回.ppt

数値計算

健康保険組合のあゆみ_top

リバースマップ原稿2

untitled

2006年10月5日(木)実施

Visual C++ 使用 C 言語 ワンポイント講座 デバッガで言語文法を理解する M.NET.SC デバッガで言語仕様 ( 文法 ) の実体 ( コンパイラの解釈と振る舞い ) を理解する プログラムでできることを習得する

,,,,., C Java,,.,,.,., ,,.,, i

/* sansu1.c */ #include <stdio.h> main() { int a, b, c; /* a, b, c */ a = 200; b = 1300; /* a 200 */ /* b 200 */ c = a + b; /* a b c */ }

22 1,936, ,115, , , , , , ,

ベース0516.indd

Microsoft PowerPoint L07-Imperative Programming Languages-4-students ( )

Microsoft, Windows Microsoft Corporation

kiso2-03.key

井手友里子.indd

UID S307-NDEF

SolarWinds Event Log Forwarder for Windows v

An Introduction to MISRA C:2012 Getting familiar with the new MISRA C language subset ( 日本語版 ) LDRA Ltd. This document is property of LDR

untitled

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

SOC Report

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

SonicWALL SSL-VPN 4000 導入ガイド

やよいの顧客管理

弥生給与/やよいの給与計算

弥生 シリーズ

弥生会計 プロフェッショナル/スタンダード/やよいの青色申告

弥生会計/やよいの青色申告

弥生会計 ネットワーク/プロフェッショナル2ユーザー

エレクトーンのお客様向けiPhone/iPad接続マニュアル


SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

Copyright 2008 NIFTY Corporation All rights reserved. 2

PowerPoint プレゼンテーション

EPSON ES-D200 パソコンでのスキャンガイド

TOOLS for UR44 Release Notes for Windows

iPhone/iPad接続マニュアル


〈論文〉興行データベースから「古典芸能」の定義を考える

セットアップカード

PowerPoint プレゼンテーション


講習No.9

論文誌用MS-Wordテンプレートファイル

インターネット接続ガイド v110

Copyright c 2008 Zhenjiang Hu, All Right Reserved.

解きながら学ぶC言語

1013  動的解析によるBOTコマンドの自動抽出

IEC :2014 (ed. 4) の概要 (ed. 2)

gengo1-12

book-review.dvi

Microsoft PowerPoint - 12.ppt [互換モード]

Report#2.docx

NFC ucode タグのメモリフォーマット規定


NEC COBOL SQL アクセス Server Runtime V1.0 COBOL SQL アクセス Server Runtime V1.0 (1 年間保守付 ) COBOL SQL アクセス Server Runtime V1.0 (1 年間時間延長保守付 ) セットアップカード SL438

1,a) 1,b) TUBSTAP TUBSTAP Offering New Benchmark Maps for Turn Based Strategy Game Tomihiro Kimura 1,a) Kokolo Ikeda 1,b) Abstract: Tsume-shogi and Ts

二次元連続動的計画法による知的画像処理システム ImageFileSelector RTC 機能仕様書 ImageFileSelectorRTC Ver.1.0 ( 株 ) 東日本計算センター 1 / 11


Report#2.docx

DIGNO® ケータイ ユーザーガイド

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 文字コード略歴 Powered by Rabbit 2.0.6

ES-D400/ES-D200

1. 検証概要 目的及びテスト方法 1.1 検証概要 既に Red Hat Enterprise Linux 5.5 for x86-64 で動作保証されている Micro Focus Server Express 5.1 J を Red Hat Enterprise Linux Server 6.

Prog1_12th

02: 変数と標準入出力

PowerPoint プレゼンテーション

I117 II I117 PROGRAMMING PRACTICE II SOFTWARE DEVELOPMENT ENV. 1 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara

How to read the marks and remarks used in this parts book. Section 1 : Explanation of Code Use In MRK Column OO : Interchangeable between the new part

Transcription:

MISRA-C:2004 から 2012 への移行の課題 ~MISRA-C:2012 移行に関する対応方策の提言 ~ 株式会社ヴィッツ萩原勝 株式会社ヴィッツ森川聡久 中野泰伸 名古屋市工業研究所小川清 1

アジェンダ C 言語国際規格と MISRA-C について MISRA-C:2012 移行への課題 移行に向けた提案 実験と活動成果 移行段階の考察と今後の課題 2

C 言語国際規格の経緯 1 C 言語で C コンパイラと OS を記述 K&R が教科書 : main, printf の可変引数関数のみのホスト環境 (OS 上 ) 例 < 標準化の胆 :C の精神 > CPU 発展を妨げない 未定義 未規定 処理系定義 16bit, 32bit の移行を最小限の手間で コンパイラ OS の可搬性 (portability) を確保 1989 年 12 月 ANSI X3.159-1989: 通称 C89(ANSI C89) 発行 1990 年 12 月 ISO/IEC 9899:1990(E) Programming Languages-C: 通称 ISO/IEC C90 発行 <GATT(General Agreement on Tariffs and Trade) スタンダードコード (1995 年 WTO(World Trade Organization)/TBT 協定 )> 3

C 言語国際規格の経緯 2 < 主な改善点 > 型検査 _Bool 型 インライン関数 (inline キーワード ) // による 1 行コメント 1999 年 12 月 ISO/IEC 9899:1999(E) Programming Language-C: 通称 ISO/IEC C99 制定 < 主な改善点 > align を規定 複素数型と可変長配列の必須が解除 Unicode 文字列 (UTF-32/16/8) に標準対応 排他的アクセスのファイルオープン方法 quick_exit など 2011 年 12 月 ISO/IEC 9899:2011(E) Programming Language-C: 通称 ISO/IEC C11 制定 4

C 言語国際規格の経緯 3 型検査 bool 型 多バイト対応 可変長配列 C1990 int 想定 - 1995 年追補 - C1999 要宣言 _Bool 必須 C2011 UTF-X 対応 任意 C90: 暗黙の型検査 Bool 型無し C99:C++ を意識して拡張しすぎ C2011:_s 関数未成熟 C1999 C2011 C1990 Copyright 2015 著作権保有者名 All Rights Reserved. 5

MISRA-C の誕生と目的 1 チップ毎に動作が違うことを受けて 安全な C 言語を書くために Safer C が提言された /* 除算を行う */ int x = 4 ; int y = 0 ; int answer ; answer = x / y ; char func(int i) { int ret = i; return ret; } if(*cp1 == ' 0') if(*cp2 == ' 0') return OK ; else return NG ; else の段落は? ゼロ除算? 関数の型は? 振る舞いが異なる可能性の機能を排除 6

MISRA MISRA-C の誕生と目的 2 C 言語が抱えるリスク 処理系定義 振る舞いが異なる可能性の機能を排除 自動車分野に適合した C 言語部分集合を定義して安全なシステム作りを! C 言語規格のリスクとなり得る物を用いない 未定義 未規定 副作用 リスクを排除するルールの制定 MISRA-C 可搬性のあるプログラムを実現できる仕組み より安全なシステム設計を行うための指針 品質低下を招く場合は 文章化による逸脱 7

C 言語規格と MISRA-C の対応 C-1990 C-1999 C-2011 MISRA-C:1998 - - MISRA-C:2004 (underlay type) - - MISRA-C:2012 (essential type) (essential type) - 8

ソフトウエア開発環境の実情 ソフトウェア開発環境としては MISRA-C:2004 が主流 最新 CPU 用のコンパイラは C99 対応を基本に開発 C99 対応コンパイラが増え ドライバ ライブラリ ミドルウエアについても C99 対応ソースコードの提供が充実 しかし MISRA-C:2004 では C99 に対応していない C99 対応ソースコード利用のためには MISRA-C:2012 への移行が必要! 9

MISRA-C:2012 移行への課題 検査に合格するだけの書き換え目的による質の低下を防御 MISRA-C:2012 が規定としてより厳密に則した反面 規則 が緩んだとの誤解から 現場における適応への混乱を回避 MISRA-C 仕様の本来の目的を考慮して MISRA-C:2012 への移行を円滑にすることが必要 10

移行に向けた提案 実験 1 C 言語 (C2011) を知る ISO/IEC9899(JIS X 3010) のプログラム例を 実際にGCC CLANG(LLVM) Visual C/C++ でコンパイルできるように編集し 設計環境の機能や処理系の振舞いの違いを確認 No. 章節 名称 コンパイル実行 GCC/LLVM/VC 90 C2011 F.10.6.6 The round functions // Implement 91 C2011 F.10.7.1 The fmod functions // Implement 92 C2011 G.5.1 Multiplicative operators // Examples 93 C2011 K.3.5.3.2 The fscanf_s function // Examples 94 C2011 K.3.7.1.4 The strncpy_s function 11

移行に向けた提案 実験 2 MISRA-C プログラム例の確認 MISRA-C のプログラム例を C Puzzle Book のマクロ出力で確認 12

移行に向けた提案 実験 3 MISRA-C:2012 の確認 MISRA-C:2012 の曖昧な点を明確にするため MISRA の掲示 板を通じて疑問点を確認 1 年間でボード質疑全体の 4 分の 1 に 相当する 30 件程度を投稿 ( 間違いの指摘 意味の厳密化 内容の確認 ) 5.4 deviation procedure, ogawa kiyoshi, http://www.misra.org.uk/forum/viewtopic.php?f=56&t=1356, 回答あり Dir 2.1 compilation errors, ogawa kiyoshi, http://www.misra.org.uk/forum/viewtopic.php?f=238&t=1334, 回答あり Rule2.1, tsukukazu, http://www.misra.org.uk/forum/viewtopic.php?f=216&t=1352, 回答あり Rule3.2 kumiko ito, http://www.misra.org.uk/forum/viewtopic.php?f=217&t=1369, 未回答 2014Jun09 Rule 8.13, kumiko ito, http://www.misra.org.uk/forum/viewtopic.php?f=222&t=1336, 回答あり Rule 19.1, minoru kanome, http://www.misra.org.uk/forum/viewtopic.php?f=233&t=1328, 回答あり Rule 21.1&21.2, ogawa kiyoshi, http://www.misra.org.uk/forum/viewtopic.php?f=235&t=1364, 未回答 2014May22 Rule 21.2, satoshi, http://www.misra.org.uk/forum/viewtopic.php?f=235&t=1358, 回答あり Rule 21.1 and 21.2, ogawa kiyoshi, http://www.misra.org.uk/forum/viewtopic.php?f=235&t=1364, Rule 21.7and 21.8, ogawa kiyoshi, http://www.misra.org.uk/forum/viewtopic.php?f=235&t=1365, 未回答 2014May22 Rule 21.8, tsukushiro, http://www.misra.org.uk/forum/viewtopic.php?f=235&t=1382, 未回答 13

移行に向けた提案 実験 3 Definition of "declare" for Rule 21.2 Rule's title say "shall not be declared." 投稿例 C90/C99 use the "declare" for function declarations and variable declarations. And, macros are used the "define". p.167 #define BUILTIN_sqrt(x) (x) /* Non-compliant */ "example" is a rule violation for the macro definition. To error the macro definitions could not be a role of rule 21.1? Re: Definition of "declare" for Rule 21.2 Rule 21.1 restricts the use of #define and #undef on certain names. Rule 21.2 restricts the declarations of certain names. 回答例 As you found, we have incorrectly put an example in the incorrect rule. CODE: SELECT ALL #define _BUILTIN_sqrt(x) (x) /* Non-compliant with Rule 21.1, but compliant with Rule 21.2 */ int _BUILTIN_sqrt; /* Non-compliant with Rule 21.2 */ Copyright 2015 著作権保有者名 All Rights Reserved. 14

活動成果 :Portable issue 表作成 C90/C99/C2011 の Portable issue 表を作成 C90 C99 C2011 機能追加 継続 廃止 機能追加 継続 廃止 15

活動成果 : プログラム例の確立 C 言語規格と MISRA-C のプログラム例を C Puzzle Book のマクロ出力を利用してコンパイル可能な状態にすることにより 対象の規則を逸脱している例 対象の規則に適合している例 複数の規則を逸脱している例 対象の規則に適合しているが他規則を逸脱している例など プログラム例を教材として活用することが可能となった 16

活動成果 : 正誤表の発行 MISRA-C:1998 2004 2012 解説書に記載のコード例をコンパイル可能な状態にして内容を検証 コードの誤り 不十分な点を確認し正誤表を発行 Sessame-Web に掲載 17

Comments 活動成果 : 移行基礎資料作成 MISRA-C:2012 と MISRA-C:2004 規則対応関係一覧表 ( 抜粋 ) Rule 3.1 R The character sequences /* and / / shall not be used within a comment Rules 2.3 r The character sequence /* shall not be used within a comment Rule 3.2 R Line-splicing shall not be used in / / comments Character sets and lexical conventions Rule 4.1 R Octal and hexadecimal escape sequences shall be terminated Rules 7.1 r Octal constants (other than zero) and octal escape sequences shall not be used. Rule 4.2 A Trigraphs should not be used Rules 4.2 r Trigraphs shall not be used. 18

移行段階の考察 MISRA-C 研究会の活動から MISRA-C:2012 への移行は 以下 2 つの段階が現実的 新規作成 既存 既存 MISRA-C: 2012 対応 MISRA-C: 2004 逸脱対応 一部書き換え対応 19

移行課題への対策 検査に合格するだけの書き換え目的による質の低下を防御 移行基礎資料 プログラム例などの情報は存在 個々ルール毎に逸脱を含む情報を整備した移行手引きが対策への道標 MISRA-C:2012 が規定としてより厳密に則した反面 規則 が緩んだとの誤解から 現場における適応への混乱を回避 C 言語国際規格の変更は Portable issue 表 MISRA 規則の 変更は 移行基礎資料で論証 さらに プログラム例の活用で適応性を可視化 20

まとめと今後の課題 MISRA-C:2004 から MISRA-C:2012 への移行に対しては 可搬性のあるプログラムを実現できる仕組み 安全なシステム設計 これらを実現することが MISRA-C の役割 課題 品質低下を回避した移行を実現すべく MISRA-C:2012 研究会の活動成果を基に個々ルール毎の移行手引きを作成 設計者に対する C 言語の目的と意図を理解する教育の実施 21

ご清聴ありがとうございました < 参考文献 > GATT スタンダードコード 1979, WTO/TBT 協定 1995 ISO/IEC 9899:1990,1995Amd, 1999,2011,ISO Safer C: Developing Software for High-Integrity and Safety-Critical System, Les Hatton, McGraw-Hill, 1995 MISRA-C:1998,2004,2012, MIRA MISRA-C 解説書, SESSAME/MISRA-C 研究会, 日本規格協会, 初版 2004, 第二版 2006 ソフトウェア FMEA を体系的に実施する出発点としての MISRA-C, 森川聡久, 小川清, 11 th WOCS, 2014 ソフトウェア FMEA を体系的に実施する出発点としての MISRA-C, 中野泰伸, 原浩晃, 森川聡久, 小川清, 安全工学シンポジウム 2014 C Puzzle Book, The Alan R. Feuer, Addison-Wesley 1998 22