組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00...

27
1 © 2020 The MathWorks, Inc. 組込みソフトウェア開発のためのコード静的解析 MathWorks Japan アプリケーションエンジニアリング部 (制御) アプリケーションエンジニア 田中 康博

Upload: others

Post on 10-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

1© 2020 The MathWorks, Inc.

組込みソフトウェア開発のためのコード静的解析

MathWorks Japan

アプリケーションエンジニアリング部 (制御)

アプリケーションエンジニア

田中 康博

Page 2: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

2

組込みソフトウェア開発の現状ソフトウェアの大規模化・複雑化でコードは1億行を超える

https://www.meti.go.jp/shingikai/mono_info_service/jido_soko/jinzai_senryaku/pdf/2018_002_00.pdf

1億行

自動車ソフトウェアのソースコード行数

今後さらなる増加

組込みソフトウェア(自動車など)開発の現状

出典:経済産業省 「ITによる生産性向上の加速化に向けて」

– 複雑な仕様と膨大なコード

– 絶対的な信頼性が必要 (自動運転など)

– 人手によるテストは限界に

Page 3: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

3

$0.00

$4,000.00

$8,000.00

$12,000.00

$16,000.00

Requirements Design Coding Testing Maintenance要件定義 設計 実装 テスト 保守

変更容易性

変更コスト開発のピークを前倒しする

現状理想

開発後期でのバグ検出の危険性バグの早期発見/作り込み抑制による開発の効率化が重要

要件定義

基本設計

実装

単体テスト

結合テスト

システムテスト

詳細設計

手戻りによる開発の遅延 開発コストの増大

$139.00 $455.00 $977.00

$7,136.00

$14,102.00

$0.00

$4,000.00

$8,000.00

$12,000.00

$16,000.00

Requirements Design Coding Testing Maintenance

Software Development Lifecycle PhaseSource: B.Boehm and V. Basili :Software Defect Reduction Top 10 List", IEEE Computer

Cost Per Bug

要件定義 設計 実装 テスト 保守

バグ1件あたりのコスト

静的解析による• バグの作り込みの抑制• バグの早期発見• コードの安全性の証明

手戻り

開発の流れ

手戻り

手戻り

Page 4: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

4

なぜ静的解析を行うのか?テストケース作成・デバッグ不要でバグを検出

▪ バグの作り込みの抑制 (ルールチェッカー)

– コーディングルールの準拠性チェック

▪ 宣言の不一致、未初期化変数 など

– コードメトリクスの測定

▪ コードの規模、複雑度測定 など

▪ バグの早期発見 (バグチェッカー)

– バグ、セキュリティ脆弱性の検出

▪ メモリリーク、汚染されたポインターの使用 など

▪ コードの安全性の証明 (ランタイムエラーチェッカー)

– ランタイムエラー(実行時エラー) が存在しないことを証明

▪ 整数オーバーフロー、ゼロ除算 など

▪ ランタイムエラーの特徴

– プログラム実行時に発生するソフトウェアのバグ

– 稀にしか発生せず再現性の低い場合があり、

テストでの発見が難しい

▪ ランタイムエラーのもたらす危険性

– オーバーフローによるロケットの爆発

– 医療機器の致死量放射線の照射

プログラムのクラッシュや暴走等をもたらし、

故障の原因となる致命的なエラー

ランタイムエラー

Page 5: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

5

Polyspace Code Prover

コードの安全性の証明

• ランタイムエラーを検出する

• ランタイムエラーの有無を証明する

• 機能安全をサポートする

Polyspace Bug Finder

バグの作り込みの抑制

バグの早期発見

• コードメトリクスを測定する

• コーディングルールの準拠性を確認する

• バグとセキュリティ脆弱性を検出する

Polyspace

コードメトリクス測定

コーディングルール /サイバーセキュリティ

ガイドライン準拠性確認

バグおよびセキュリティ脆弱性

検出

重大な欠陥および脆弱性の

欠如の証明

Page 6: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

6

アジェンダ

▪ 堅牢なセキュアコーディングと安全性の証明

– バグの作り込みの抑制

– バグの早期発見

– コードの安全性の証明

▪ 解析の自動化と結果の共有

▪ モデルベースデザインのためのコード静的解析

▪ ユーザー事例 / まとめ

Page 7: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

7

アジェンダ

▪ 堅牢なセキュアコーディングと安全性の証明

– バグの作り込みの抑制

– バグの早期発見

– コードの安全性の証明

▪ 解析の自動化と結果の共有

▪ モデルベースデザインのためのコード静的解析

▪ ユーザー事例 / まとめ

Page 8: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

8

コーディングルールチェック潜在バグを早期発見、コードの可読性と保守性を向上

▪ MISRA C: 2004 チェッカー

▪ MISRA C: 2004 AC AGC チェッカー

▪ MISRA C: 2012 チェッカー

▪ MISRA C++: 2008 チェッカー

▪ JSF C++ チェッカー

▪ AUTOSAR C++14 チェッカー

▪ カスタム ルール チェッカー

ダッシュボード(違反数が最も多いルール Top10)

▪ 検証結果のレビュー

– コードにレビューコメントを記入

– GUI上でレビューコメントを記入

▪ レビューコメントのインポート

– 前回の解析結果 からインポート

– MISRA C: 2004 から 2012 へインポート

▪ レポートの自動生成

– PDF/HTML/Wordをサポート (日本語/英語)

– レビューコメントの反映

– 検証結果のフィルター

Page 9: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

9

サイバーセキュリティについての国内の取り組み

https://www.mlit.go.jp/common/001268577.pdf

出典:交通政策審議会陸上交通分科会自動車部会自動運転等先進技術に係る制度整備小委員会報告書(概要)

Page 10: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

10

自動車業界に見られるコーディング標準&実践

◼ CERT C / CERT C++:セキュアコーディングスタンダード

◼ ISO/IEC TS 17961:Cセキュアコーディングルール

◼ CWE:共通脆弱性タイプ

◼ MISRA-C:2012 Amendment 1:セキュリティガイドライン

サイバーセキュリティ – 業界活動と標準

Page 11: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

11

コードメトリクスコードの品質を定量的に測定

▪ プロジェクト メトリクス (8)– 再帰の数

– 直接再帰の数

– ファイルの数

– ヘッダー ファイルの数

– 最大スタック使用量のプログラミング *1

– 最小スタック使用量のプログラミング *1

– 保護されている共有変数の数 *1

– 保護されていない可能性のある

共有変数の数 *1

▪ ファイル メトリクス (4)– コメント密度 *2

– 推定の関数結合

– コメントなし行の数

– 行数

▪ 関数 メトリクス (19)– 呼び出し元関数の数

– 呼び出された関数の数

– 本体内の行数

– 実行可能行数

– GoTo ステートメントの数

– 呼び出しレベルの数

– ローカルの静的変数の数

– ローカルの非静的変数の数

– ローカル変数サイズのより高い推定値

– ローカル変数サイズのより低い推定値

– 最大スタック使用量 *1

– 最小スタック使用量 *1

– 呼び出しの発生数

– 関数パラメータ―の数

*1:Code Proverで測定可能*2:しきい値は下限値下線:HISコード複雑度メトリクス

https://jp.mathworks.com/help/bugfinder/metrics-reference.html

関数メトリクスの測定例

– パスの数

– Return ステートメントの数

– 命令の数

– 循環的複雑度

– 言語スコープ

Polyspace Bug Finder:コード メトリクス

Page 12: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

12

アジェンダ

▪ 堅牢なセキュアコーディングと安全性の証明

– バグの作り込みの抑制

– バグの早期発見

– コードの安全性の証明

▪ 解析の自動化と結果の共有

▪ モデルベースデザインのためのコード静的解析

▪ ユーザー事例 / まとめ

Page 13: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

13

数値▪ ゼロ除算、オーバーフロー

▪ …

静的メモリ▪ 配列の範囲外アクセス

▪ …

動的メモリ▪ メモリリーク

▪ …

データフロー▪ 部分的にアクセスされる配列

▪ …

リソース管理▪ 読取り専用リソースに書込み

▪ …

オブジェクト指向▪ コンストラクターで未初期

▪ …

プログラミング▪ 宣言の不一致

▪ …

同時実行▪ デッドロック

▪ …

適切な手法▪ 未使用のパラメータ

▪ …

パフォーマンス▪ string長の計算が非効率

▪ …

https://jp.mathworks.com/help/bugfinder/defect-reference.html

セキュリティ脆弱性・バグ検出項目 (抜粋)開発プロセスの初期段階でバグを検出、影響度別に分類

▪ 影響度別にバグを分類

▪ バグ、関連コードの強調表示

▪ イベント追跡

– 制御フローの主要なポイントを表示

▪ 関数呼び出しツリー

– 呼び出し元/先の表示/非表示

– スタブ化されているかどうかの判断

セキュリティ▪ 疑似乱数発生器が脆弱

▪ …

汚染されたデータ▪ 汚染されたポインターの使用

▪ …

暗号化▪ 脆弱な暗号アルゴリズム

▪ …

バグ セキュリティ脆弱性 デバッグ

Polyspace Bug Finder:欠陥

Page 14: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

14

アジェンダ

▪ 堅牢なセキュアコーディングと安全性の証明

– バグの作り込みの抑制

– バグの早期発見

– コードの安全性の証明

▪ 解析の自動化と結果の共有

▪ モデルベースデザインのためのコード静的解析

▪ ユーザー事例 / まとめ

Page 15: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

15

Polyspace Code Prover でコードの安全性を証明全ての実行パスの結果を証明する!

▪ Quality(品質)– ランタイムエラーの証明

– 測定、向上、管理

▪ Usage(使用方法)– コンパイル、プログラム実行、テストケースは不要

– 対応言語:C/C++/Ada

▪ Process(プロセス)– ランタイムエラーの早期検出

– 自動生成コード、ハンドコードの解析可能

– コードの信頼性を測定

static void pointer_arithmetic (void) {

int array[100];

int *p = array;

int i;

for (i = 0; i < 100; i++) {

*p = 0;

p++;

}

if (get_bus_status() > 0) {

if (get_oil_pressure() > 0) {

*p = 5;

} else {

i++;

}

}

i = get_bus_status();

if (i >= 0) {

*(p - i) = 10;

}

}

Dereference of local pointer ‘p’(pointer to int 32, size: 32bits):

Points to 4 bytes at offset 400 in buffer of 400 bytes, so is outside bounds.

グリーン:正常ランタイムエラーが存在しない

レッド:エラー実行される度にランタイムエラー

グレー:デッドコード無実行

オレンジ:Unproven条件によってランタイムエラー

パープル:ViolationMISRA-C/C++, JSF++

変数値範囲ツールチップ

実機実験前にコード信頼性を確保して手戻りを削減

Page 16: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

16

MISRAルール違反の安全性の証明

Polyspace Code Prover

MISRAルール違反

安全性の証明(オーバーフロー無し)

MISRAルール違反の正当化の根拠としてPolyspaceを活用可能

Page 17: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

17

▪ コーディング規約– MISRA-C

– MISRA-C++

– JSF++

▪ ソフトウェアメトリクス– HIS Source Code Metrics

▪ http://www.automotive-his.de/

▪ 認証規格– DO-178C

▪ DO Qualification Kit

– IEC 61508, ISO 26262, EN 50128,

IEC62304, ISO 25119

▪ IEC Certification Kit

TÜV SÜD社より各機能安全規格のツール認証を取得済みPolyspace製品で目標規格達成をアシストします!

Page 18: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

18

アジェンダ

▪ 堅牢なセキュアコーディングと安全性の証明

– バグの作り込みの抑制

– バグの早期発見

– コードの安全性の証明

▪ 解析の自動化と結果の共有

▪ モデルベースデザインのためのコード静的解析

▪ ユーザー事例 / まとめ

Page 19: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

19

Polyspace Access製品

▪ チームベースのコラボレーション– Chrome, Edge, Firefox, Safari

– 解析結果 / ソースコードをブラウザで表示

– デバッグ情報の表示

– 担当者の割り当て, 解析結果の正当化

▪ ソフトウェア品質の管理– ダッシュボードで品質と問題を監視

– コードメトリクス、SQO

– バグの傾向追跡

▪ 規格遵守の追跡– 標準への進捗状況を追跡

– 標準からの逸脱を正当化

– MISRA, CERT-C など

Polyspace Bug Finder Access and Polyspace Code Prover Access

チケット作成

ソースコード表示

解析結果表示

ダッシュボード

Page 20: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

20

ワークフロー:解析の自動実行

Bug Finder

Server

Code Prover

Server

解析結果アップロード

Server Web Browser

コマンドラインI/F

Bug Finder

Access

Code Prover

Access

Webサーバー

Source code

RepoBug Finder

Desktop

開発担当者

開発担当者

品質管理者

マネージャー /チームリーダー

レビューワー

4

開発担当者

1

スタンドアロン解析5

コードチェックイン

3

GUIコマンドラインI/FIDEプラグイン

2 解析実行

オンラインレビュー

Server

✓ Polyspace Bug Finder Server

✓ Polyspace Code Prover Server

Desktop

✓ Polyspace Bug Finder

Access

✓ Polyspace Bug Finder Access

✓ Polyspace Code Prover Access

ツール担当者

Page 21: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

21

アジェンダ

▪ 堅牢なセキュアコーディングと安全性の証明

– バグの作り込みの抑制

– バグの早期発見

– コードの安全性の証明

▪ 解析の自動化と結果の共有

▪ モデルベースデザインのためのコード静的解析

▪ ユーザー事例 / まとめ

Page 22: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

22

モデルベースデザインとの統合Polyspaceで自動生成コードの品質と、ハンドコード結合時の品質を確保

ソフトウェア要件定義

ソフトウェアアーキクチャ

実装モデル自動生成

C/C++コードオブジェクト

コード

設計書ハンド

C/C++コード結合

C/C++コードオブジェクト

コード

モデルベースデザイン

組込みソフトウェアのテスト

Polyspace

アプリケーション

ミドルウェア/デバイスドライバ ソフト全体

‧ コーディングルール準拠の解析‧ コードのサイズと複雑度メトリクスの決定‧ ソフトウェア品質メトリクスの決定

‧ 到達不能コードの解析‧ 関数呼び出しツリーの作成‧ グローバル変数の競合解析‧ ソフトウェア品質レポートの作成

モデルベースデザイン・ワークフローでのコード静的解析

Page 23: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

23

モデルベースデザインとの統合PolyspaceのSimulink連携機能でモデル修正が容易

Polyspace

▪ Simulink®環境からPolyspace解析を実行

▪ Polyspace解析結果を該当ブロックで強調表示

▪ ブロックにPolyspaceの注釈を追加

▪ S-Functionコードの検証

▪ MISRA C のチェック

Page 24: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

24

アジェンダ

▪ 堅牢なセキュアコーディングと安全性の証明

– バグの作り込みの抑制

– バグの早期発見

– コードの安全性の証明

▪ 解析の自動化と結果の共有

▪ モデルベースデザインのためのコード静的解析

▪ ユーザー事例 / まとめ

Page 25: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

25

Polyspace ユーザー事例医療、航空、自動車など様々な分野で利用されています

日産自動車ソフトウェアの信頼性向上

ソーラー・インパルスコード証明のよる開発期間の短縮

FordSW開発プロセスに統合

miracor医療機器の安全性を証明

TGV高速鉄道

ランタイムエラーの識別加速

アレーニア・アエルマッキMISRA-C, DO-178B準拠

Page 26: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

26

重要なコードを安全かつセキュアにする

バグの作り込みの抑制

‧ MISRA、CERT-C、CWE、ISO/IEC 17961 などの準拠性をチェック

‧ コードの規模や複雑度など特定の側面を定量的に測定

バグの早期発見

‧ テストケースやコードを実行することなくバグ・セキュリティ脆弱性を検出

‧ バグを影響度別に分類し、効率的に品質を向上

コードの安全性の証明

‧ 致命的なランタイムエラーが存在しないことを形式的に証明

‧ 安全規格を満たし、ISO 26262、IEC 61508、DO-178への準拠を文書化

Page 27: 組込みソフトウェア開発のためのコード静的解析...2020/05/20  · 3 $0.00 $4,000.00 $8,000.00 $12,000.00 $16,000.00 Requirements要件定義 Design設計 Coding実装

27

Polyspace 技術資料のご案内

組込みソフトウェアの安全性とセキュリティを高める7つの方法

• 安全でセキュアな組込みアプリケーション (自動運転、飛行制御、医療機器など) を開発する方法を学びます。

Polyspace製品を使用した包括的な静的解析

• 組込みソフトウェアの検証における課題を解決するソリューションをご紹介します。

ランタイムエラーが存在しないコードの証明 形式検証を用いた静的解析4つのメリット

eBook

WhitePaper

• 抽象解釈を用いた静的解析のメリット、世界中で採用されている事例をご覧ください。

WhitePaper

▪ 30日無料の評価版を試す jp.mathworks.com/trial

▪ 製品、サービスのお見積もり jp.mathworks.com/quote

▪ お問合せ jp.mathworks.com/contact