コベリティのデベロップメントテストによる ISO 26262のサポート

コベリティ ホワイトペーパー
コベリティのデベロップメントテストによる
ISO 26262のサポート
2011年12月
コベリティ ホワイトペーパー
コベリティのデベロップメントテストによるISO 26262のサポート
コベリティのデベロップメントテストによる ISO 26262 のサポート
平均的な自動車が有するソースコードの行数は、現在の 1,000 万行から 10 年後には 3 億行にまで増大すると予測されています※。ま
た、自動車のイノベーションの 90%は、ソフトウェアおよび電子機器によるものとみられます。ソフトウェアは、ブレーキやパワー
ステアリングなどのセーフティ・クリティカル・システムから、ドアや窓などの基本的な車両制御、高機能の情報システムやテレマ
ティックスまで、あらゆるものをコントロールしています。とはいえ、ソフトウェアの飛躍的な需要増加に伴い、ソフトウェアの不
具合も急激に増加しています。平均的な自動車には、最大で 15 万件の不具合があるとみられていますが、この不具合の多くはブラ
ンド・イメージの失墜、顧客満足度の低下、そして極端な場合は深刻な故障の発生を引き起こしかねないものです。高級車の一流ブ
ランドであるジャガーは最近、X タイプの自動車に、クルーズ・コントロールの停止不能を引き起こして乗員を危険にさらす重大な
ソフトウェアの不具合があることを発見して、約 1 万 8,000 台のリコールを余儀なくされました。
ISO 26262 の概論
自動車の安全性を確保するため、ISO(国際標準化機構)は、路上走行車両の機能安全に関する標準 ISO 26262 を提示しました。
この標準は、実行可能な要件およびプロセスを通じて、システム障害とランダムなハードウェア障害のリスクを防止するガイダンスを提
供することを目的に制定されています。IEC61508 の適用規格である ISO 26262 は、電力供給装置、
センサーなどの入力装置や、
デー
タハイウェイなどの通信パス、アクチュエータ、その他の出力装置の電気的および電子的要素を応用した機器特有のニーズに適合し
ています。この標準はレビューの最終段階にあり、自動車業界の多くの企業が標準に準拠する計画の策定を始めています。当ホワイ
トペーパーは、コベリティのデベロップメントテスト・プラットフォームを使って ISO 26262 が定めるガイドラインに準拠する方法を解説し
ます。
この標準は 10 のパートで構成されており、管理、開発、製造、運用サービス、廃棄を含む、自動車安全性の広範なライフサイクル
を網羅しています。コベリティのデベロップメントテスト・プラットフォームが直接適用できるのは、パート 6 の「製品開発:ソフトウェア・
レベル」です。
コベリティのデベロップメントテスト・プラットフォームの概論
今後ますます需要が高まりつつあるデベロップメントテストの分野には、静的解析などの一連のプロセスやソフトウェアが含まれています。
こうしたプロセスやソフトウェアは、開発サイクルの早期にソースコードが書かれるのと同時に、製品の市場投入までの時間、コスト、顧
客満足度に対して悪影響を与えない形で、品質およびセキュリティの問題を開発者、経営者、企業が容易に発見し、修正できるように
することを意図して作られています。
デベロップメントテストは QA 機能テスト、パフォーマンステスト、セキュリティ監査などの従来のテストを増強したもので、これにより開発チー
ムはソースコードの不具合を開発作業の中断なく素早く簡単にテストできるため、イノベーションに重点を置いた開発が続けられます。経
営者は問題に対する可視性を開発サイクルの早期に得られるため、よりよい意思決定が実現します。また、企業レベルでは高品質の製
品を市場に提供し続けることで競争優位が確保できます。
コベリティが開発チームおよび経営陣向けのソリューションとともに提供する業界有数のデベロップメントテスト・プラットフォームは、企業が
IS0 26262 の準拠を達成できるように支援します。
※ Frost and Sullivan 社調べ
2
コベリティ ホワイトペーパー
コベリティのデベロップメントテストによるISO 26262のサポート
Coverity® Static Analysis(静的解析)
コベリティは業界でもっとも高精度の静的解析ソリューションを提供しています。世界中の開発者に使用されている当製品は、C/C++ と
Java、C# の各言語で記述されたソースコードに潜む不具合を迅速に突き止めて修正できるようにし、ソースコードの品質の向上により、
全体的な開発コストを削減します。静的解析はコーディング・ガイドラインへの順守を確認する公式の検証方式として ISO 26262 に組み
入れられており、ISO 26262 Annex D(ソフトウェア分割による干渉の緩和)が定める、安全な関連データを保持するメモリにアクセス
するソースコードのレビューに使用されます。
Coverity® Architecture Analysis(アーキテクチャ解析)
このソリューションは、ISO 26262 の重要な構成要素であるソフトウェア・アーキテクチャの複雑性を可視化およびコントロールするのに役
立ちます。アーキテクチャの複雑性のコントロールに加えて、ソフトウェアアーキテクトや開発者がソースコードの構造を視覚化し、依存関
係の競合やインターフェース違反を特定できるようにすることでリスクを低減し、ポリシーの適用を通じてソースコードの過度な複雑化やセ
キュリティの脆弱化を防げるようにします。また、関数コール・グラフを使用すれば、デバッグ時間も削減できます。 Coverity® Integrity Manager(インテグリティマネジャー)
このソリューションが提供する中央集中型不具合管理ワークフローにより、開発者や管理者はソースコード上の不具合を迅速に検出し、
修正のための適切な対応策を取ることができます。特定の ASIL(Automotive Safety Integrity Level)に関連した不具合の特定
ができ、多様なソースコードのブランチのどこで不具合が発生したかが分かります。自動車業界ではソースコードの再利用が普及してい
るため、この機能は開発チームにとって時間節約に大変役立ちます。
Coverity® Integrity Control(インテグリティコントロール)
Coverity Integrity Control によって、ISO 26262 に定義された安全性要件に関係する一貫したポリシーを、企業が ASIL レベルで確立
し、実行できるようになります。ユーザーは、ISO 26262 標準の主要な要件を満たす、明確かつ包括的なポリシーの定義が可能になります。
ポリシーが確立されると、企業はそれをコベリティのテスト・ソリューションでテストし、コンポーネントおよび ASIL のレベルでプロジェクト内のリ
スク分野を素早く視覚化できます。管理者やエグゼクティブはリスクを階層的に把握し、不具合への対応に必要な相対的な作業量を理解、
問題を掘り下げることができます。またこのことで、特定の問題の把握や特定の安全性要件が満たされているかの確認ができます。
3
コベリティ ホワイトペーパー
コベリティのデベロップメントテストによるISO 26262のサポート
コベリティのデベロップメントテストを ISO 26262 要件に適用
ASIL(Automotive Safety Integrity Level)
ISO 26262 は、A、B、C、D と 4 つある ASIL のレベルのうち 1 つを使用して、許容できるリスク・レベルを達成するために必要な、
品目または構成要素の安全性要件を特定します。レベル D はもっとも厳密なリスク・レベルであり、A はもっともゆるいレベルとなります。
ASIL レベルが D の構成要素は、もっとも厳しいテストを行うことが期待されます。
コベリティのデベロップメントテスト・プラットフォームにより、ASIL レベルの注釈付けと視覚化が、ソフトウェア・コンポーネントのレベルで行
えます。Coverity Integrity Control の利用により、ユーザーは、ASIL の各レベルが要求する、ソフトウェア・ユニットの設計および
実装のためのコーディング・ガイドラインと設計原則に向けた、一貫性のあるポリシーを確立し、実行できます。管理者はポリシーのコンプ
ライアンスを階層的なビューおよび ASIL レベルで把握できるため、開発チームはプロジェクト内のリスクに迅速に対応できます。
Coverity Static Analysis を使うことで、開発チームは IDE 内または中央のビルド・プロセスの一部分として所定のポリシーをテストでき
ます。Coverity Static Analysis によるテストは、ソフトウェア・コーディングのガイドラインと、設計および実装原則への準拠を検証する
必須の方式のひとつとなっています。不具合管理のための開発者ワークフローを提供する Coverity Integrity Manager で、開発者
は特定の ASIL 分類に基づいて不具合を迅速にレビューできます。たとえば、ユーザーは ASIL 分類が D である不具合または ASIL
レベルが C であるすべての不具合の確認ができます。
ソフトウェア・モデリングおよびコーディングのガイドライン
ソフトウェアレベルでの製品開発を開始する一環として、IS0 26262 ではコーディングおよびモデリングのガイドラインを作成し、ソフトウェア
開発モジュール表 1として公開しています。コベリティのデベロップメントテスト
・プラットフォームは、下記のような形でこのガイドラインをサポー
トしています。
表の凡例
CSA:Coverity Static Analysis(静的解析)
++:大いに奨励
AA:Architecture Analysis(アーキテクチャ解析)
+:奨励
IC:Integrity Control(インテグリティコントロール)
o:必須ではない
SDK : Coverity SDK(静的解析チェッカー開発キット)
モデリングおよびコーディングのガイドライン(表1)で扱われるISO
26262のトピック
トピック
複雑性低下の実施
(1a)
コベリティのデベロップメントテスト
CSAはソースコードの解析と、循環的複雑度およびハルステッド指標の計
算を行います。その後ICを使用して、循環的複雑度およびハルステッド指
標を、ユーザーが定義した限度に照らし合わせることで、複雑性低下のた
めのポリシーが確立され、低減への活動が実施されます。
ASIL
A
B
C
D
+
++
++
++
++
++
++
++
AAによりユーザーは、循環的依存関係と過度の複雑性を特定することで、
複雑性を低減できます。
言語サブセットの利用
(1b)
標準的でない言語構成をCSAが探知し、開発者が対応すべき不具合として、
それらを検知します。
コベリティSDKを用いると、これとは別のチェックが実施できます。
4
コベリティ ホワイトペーパー
強い型付けの実施
(1c)
コベリティのデベロップメントテストによるISO 26262のサポート
C言語およびC++言語は、明示的および非明示的なキャストをサポートして
いるため、Javaなどの他言語に比べて型付けが弱いとされます。
++
++
++
++
CSAは安全でないキャストを自動的に発見し、その発生を不具合として検
知します。
SDKにより、別のチェックも実施できます。たとえばキャストが無効な場
合、各キャストのオペレーションを不具合として検知させるための、カス
タムのチェッカーが作成できます。
防衛的実装技法の利用
(1d)
CSAは、関数の戻り値をチェックしていない箇所をハイライトすること
で、防衛的プログラミングを実施します。空値のチェックだけでなく、戻
り値の検証やテストも実施してエラーの可能性を探ります。
o
+
++
++
確立された設計原則の
利用(1e)
AAによってアーキテクトは、設計の仕様が時間の経過とともに劣化した
り、開発中に望ましくない依存関係が入り込んだりしないように設計原則
を確立し、この原則に可視性とコントロールをもたらすことができます。
コベリティSDKを用いることで、カスタムのチェッカーを作成し、グロー
バル変数の利用など、設計原則の特定の違反をテストできます。
+
+
+
++
明白なグラフィック
表示の利用(1f)
このガイドラインは、C/C++、Java、Cの各言語には適用されません。
+
++
++
++
スタイルガイドの利用
(1g)
コベリティの拡張可能なデベロップメントテスト・プラットフォームによ
り、企業はスタイルガイドなどのサードパーティ製ツールをプラットフォ
ームに統合するとともに、ガイド違反を共通ユーザーインターフェースで
管理できます。
+
++
++
++
命名規則の利用(1h)
コベリティSDKを使い、命名規則の違反に対するカスタムのチェッカーを
作成できます。
++
++
++
++
5
コベリティ ホワイトペーパー
コベリティのデベロップメントテストによるISO 26262のサポート
ソフトウェア・アーキテクチャ設計
製品設計フェーズが開始されると、ガイドラインの次のステップはソフトウェア・アーキテクチャ設計です。このフェーズの目標は、ソフトウェ
アの安全性要件を実現するアーキテクチャの確立です。アーキテクチャ設計では、すべてのソフトウェア・コンポーネントおよび、コンポー
ネント同士の相互関係が 階層的構造で示されます。すべてのソフトウェア・コンポーネントのインターフェースやデータ・パスといった静
的側面と、制御順序やタイミングなどの動的側面を記述しなくてはなりません。コベリティの Architecture Analysis および Integrity
Control が、モジュール化、カプセル化、最低限の複雑性という目標の実現を支援します。
ソフトウェア・アーキテクチャ設計の原則(表4)
トピック
コベリティのデベロップメントテストのサポート
ASIL
A
B
C
D
ソフトウェア・コンポ
ーネントの階層的構造
(1a)
AAおよびICを使用し、ソフトウェア・コンポーネントの階層的構造をグラ
フィックで提示します。
++
++
++
++
ソフトウェア・コンポ
ーネントのサイズ制限
(1b)
ICはソフトウェア・コンポーネントのサイズに関してグラフィック表示を
行い、また、最大許容サイズを超過したモジュールを特定するためにカス
タムのチェッカーを作成することもできます。
++
++
++
++
インターフェースのサ
イズ制限(1c)
AAを使ってインターフェースのサイズを視覚化できます。
+
+
+
+
各ソフトウェア・コン
ポーネント内の高い凝
集性(1d)
ソフトウェアの凝集度に重点を置いたサードパーティ製ツールのレポート
を、コベリティの拡張可能なプラットフォームに統合できます。
+
++
++
++
ソフトウェア・コンポ
ーネント間の結合の制
限(1e)
AAを使ってコンポーネント間の関係、および依存関係を視覚化できます。
+
++
++
++
適切なスケジューリン
グ・プロパティ(1f)
スケジューリング・プロパティに対応するサードパーティ製ツールのレポ
ートをコベリティの拡張可能なプラットフォームに統合できます。
++
++
++
++
割り込みの使用制限
(1g)
コベリティのSDKを用いて、システム・ハードウェアへの割り込みなどの
動作に関するカスタムのチェッカーを作成できます。
+
+
+
++
6
コベリティ ホワイトペーパー
コベリティのデベロップメントテストによるISO 26262のサポート
ソフトウェア・ユニット設計および実装
アーキテクチャ設計が完了すると、ISO 26262 標準における次のステージは、ソフトウェア・ユニット設計および実装になります。この標
準では、ソフトウェア設計および実装に関する数多くのガイドラインを提供し、実行の正しい順序、インターフェースの一貫性、データフロー
およびコントロールフローの正確性、簡潔性、可読性、包含性、堅牢性を確保しています。
ソフトウェアのユニット設計および実装のための設計原則(表9)
トピック
コベリティのデベロップメントテストのサポート
ASIL
A
B
C
D
副プログラムおよび関
数内には1個のエント
リーおよびイグジット
ポイント(1a)
CSAがリターン・ステートメントを自動的に解析し、コンポーネントまた
は関数内に複数のエントリーおよびイグジットポイントがないかを調べま
す。
++
++
++
++
動的オブジェクトまた
は変数の排除、あるい
はその生成時にオンラ
イン・テストを実施
(1b)
CSAが自動的にソースコードの解析を行い、動的オブジェクトの利用が、
その生成時に適切にテストされたことを確認します。たとえば、ユーザー
はソースコードを解析することで、malloc()が使用されている場合に戻り値
がチェックされていることを徹底できます。
+
++
++
++
変数の初期化(1c)
CSAが自動的にソースコードをテストして、初期化されていない変数がな
いかどうか調べます。
++
++
++
++
変数名の多重使用の
禁止(1d)
CSAが自動的に解析し、ローカル変数によるローカル変数の隠蔽(local
hiding local)、ローカル隠蔽パラメータおよび結合衝突などの問題を、不
具合として開発者に提示します。
+
++
++
++
グローバル変数の回避
または、その使用の正
当化(1e)
コベリティSDKを用いて、グローバル変数の使用を探すカスタム・チェッ
カーを作成できます。
+
+
++
++
ポインター使用の制限
(1f)
コベリティSDKを用いて、ポインター計算の制限を課すためのカスタム・
チェッカーを作成できます。
o
+
+
++
暗黙の型変換の禁止
(1g)
CSAがMISRA_CASTチェッカーを使って、MISRAガイドラインが定める暗黙
の型変換を自動的に検知します。
+
++
++
++
コベリティSDKにより、ヒープ割り当てを特定するカスタム・チェッカー
が作成できます。
コベリティSDKを用いて、さらなる暗黙の型変換を探すカスタム・チェッ
カーを作成できます。
隠れたデータフローま
たはコントロールフロ
ーの禁止(1h)
コベリティSDKを用いて、隠れたデータフローまたはコントロールフロー
の存在を検知するカスタム・チェッカーを作成できます。たとえば、チェ
ッカーはgotoラベルを持つソースコードを解析し、それらを潜在的不具合
としてレポートします。
+
++
++
++
無条件ジャンプの禁止
(1i)
コベリティSDKを用いてgotoステートメントを探知することで、無条件ジ
ャンプを探すカスタム・チェッカーを作成できます。
++
++
++
++
反復の禁止(1j)
CSAが反復を自動的にチェックし、その存在を潜在的な不具合として検知
します。
+
+
++
++
7
コベリティ ホワイトペーパー
コベリティのデベロップメントテストによるISO 26262のサポート
まとめ
ISO 26262 標準が完成に向けた最終段階にあるなかで、自動車関連企業は標準への準拠計画を確立することが重要です。コベリティのデベ
ロップメントテスト・プラットフォームにより、企業は、自社が製造する自動車の機能的安全性を確保するのに必要なコーディング・ガイドラインおよ
びアーキテクチャ設計に準拠でき、増大するソースコードの複雑性をよりよく管理できるようになります。
Coverity, Inc.(コベリティ インク)について
コベリティは、ソフトウェアの不具合から顧客の企業ブランドとビジネスを守る、静的解析技術をコアとしたデベロップメントテストの業界リーダーで
す。 Samsung、東芝、日本電気などを含む 1100 の顧客が、コベリティのデベロップメントテストスイート製品群を導入し、ソフトウェアの予期
せぬ動作、クラッシュやセキュリティ脆弱性につながる重大な不具合を自動的に解析、検出しています。弊社の詳細は、http://www.coverity.com/html_ja/ をご覧ください。
コベリティ 日本支社
〒163-0509 東京都新宿区西新宿1-26-2 新宿野村ビル 9階
TEL: 03-5909-8838 E-mail: [email protected]
Website: http://www.coverity.com/index_jp.html
Coverity, Inc. 米国本社
185 Berry Street, Suite 6500 San Francisco, CA 94107 USA
E-mail: [email protected]
Website: http://www.coverity.com http://scan.coverity.com
Coverity は Coverity, Inc. の登録商標です。その他の会社名および商品名は各社の商標または登録商標です。
2012.01 発行