最近の静的解析の⽴立立ち位置
コべリティ⽇日本⽀支社

静的解析が注⽬目される背景
NASAによる⽇日本⾞車車製乗⽤用⾞車車の急加速問題調査• 2011年年2⽉月に調査結果を公開• http://www.nhtsa.gov/staticfiles/nvs/pdf/NASA-UA_report.pdf• 電⼦子制御システムの問題ではないことがわかり、疑いが晴れた• ETC (Electric Throttle Control) のシステム設計・実装に意図していない不不具合が含まれているかを調査

実装ソースコードの解析に 　
Coverity 静的解析を利利⽤用
2	

静的解析が注⽬目される背景• ソフトウェアに起因する産業機器の不不具合は少なくない
⽶米国FDA（⾷食品医薬局）は、2010 年年前半に、不不具合による  23 件のデバイスのリコールを⾏行行った
これらのリコールのうち、少なくとも 6 件は、ソフトウェアの不不具合だった。

3

静的解析が注⽬目される背景• DISA STIG：Defense Information Systems AgencySecurity Technical Implementation Guide は防衛関連シ
ステムのセキュリティガイドとして利利⽤用• DO-178B：Federal Aviation Administration (FAA) は、  航空機のソフトウェアに対し DO-178B をコンプライアンスとして利利⽤用• FDA Guidance: General Principal of Software Validation
は、US 医療療機器ソフトウェアに関するコンプライアンス• ISO26262: ⾃自動⾞車車業界向けのソフトウェア開発に対するコンプライアンス

4

でも….

ツールWGの診断の結果。
コード解析の利利⽤用⾃自体が低そう？というわけでおさらいから新規・修正コード
開発者

Coverity  不不具合管理理

8	

Coverity
静的解析

コードから検出される不不具合ってchar *pchar *pchar *pchar *pchar *pif (x == 0)if(x == 0)if(x == 0)if(x == 0)if(x == 0)

truetrue

false

false

p = foo()p = foo()

p=0

p=0

if(x != 0)

if(x != 0)

if(x != 0)

if(x != 0)

true

false

false

true

p=0

p = foo()if(x != 0)

false

true

...

*p
return

9

true

false

*p...

*p...

returnreturnreturnreturn検出される⽋欠陥の種類（主なもの）
C/C++

並列列処理理の問題•デッドロック•競合状態•ブロック呼び出しの誤⽤用
パフォーマンスの低下•メモリ・リーク•スタックの使⽤用度度合い
クラッシュの原因  •Null ポインタの間接参照•ポインタの解放後のメモリ使⽤用•⼆二重解放•配列列の新規作成と削除の不不⼀一致
セキュリティ上の脆弱性•バッファ・オーバーフロー•API エラー処理理
API などの不不適切切な使⽤用•STL の誤使⽤用•API エラー処理理プログラムの不不正な動作•デッドコード•未初期化変数•負の変数の無効な使⽤用
4•MISRA-C キャスト違反

Java/C#

並列列処理理の問題•デッドロック•競合状態•ブロック呼び出しの誤⽤用
パフォーマンス低下/スケーリングの制限•リソース・リーク•データベース接続リーク
クラッシュの原因  •null の間接参照•リソースの解放後の操作プログラムの不不正な動作•デッドコード•未初期化変数•負の変数の無効な使⽤用
API の不不適切切な使⽤用•API エラー処理理
FindBugs で検知された不不具合

Visual Studioの画⾯面例例
CIMと同じ選別画⾯面

解析コマンドライン
結果

エディタ内での不不具合指摘
不不具合⼀一覧
Coverity Confidential 	

チーム全体の最新のコード品質を得るには？

新規・修正
コード

構成管理理

開発者
開発者

Jenkins-‐‑‒CICoverity
静的解析
Coverity  不不具合管理理

13	

開発者が
Check in

開発者

構成管理理

Jenkins-CIがCheck out

562 if (len == 0)563
buf = NULL;
564 562else if (len == 0)563
buf = NULL;
565 {else566 564 buf= malloc(len);
567 565 {buf=== NULL)
malloc(len);
568 566 if (buf{569 567 read_error = TRUE;
568
if(buf==NULL){
570
return (READSTAT);
read_error = TRUE;
571 569 }return (READSTAT);572 570}}
575 571/* productA
V1.0 */}
576 572
rs_read_chars(inf,buf, len);575/*productA
V1.0 */
577576 rs_read_chars(inf, buf, len);
577

静的解析
関数1	関数2	関数5	

Jenkins-CI
またはCIM
よりメール通知

Jenkins-CI	
不具合管理とレポート（CIM）

不具合箇所の抽出

不具合箇所に至るパスの抽出

関数4	関数3	関数6	関数7	関数9	関数10	関数8	関数11	

Jenkins-CIが解析を実行

効果的な運⽤用  –  その１

継続的な統合  +  静的解析

派⽣生開発、第三者コードを考慮したインパクト分析
不不具合の発⽣生する制御パスを⽐比較し同じ不不具合かどうかを追跡
Applica'on	  v1.0	  Applica'on ファミリ
全体の不具合	  不具合

Applica'on	  v1.1	  v1.0 からの不具合	  ブランチ1.0	  の不具合	  ブランチ1.1	  の不具合	  v.1.0 固有	  v1.1	  	  固有	  共通	  共通	  共通	  共通	  共通	  共通	  v1.0 固有	  継続的にコード品質を確認できる〜～
このデータをを組織運営に活かす

構成管理理

構成管理理
開発者

開発者

Jenkins-‐‑‒CI

Coverity  不不具合管理理

Coverity
静的解析

開発組織A	

開発者

Jenkins-‐‑‒CI

Coverity  不不具合管理理

Coverity
静的解析

開発組織B	

データウェアハウス
17	構成管理理

Jenkins-‐‑‒CI

Coverity  不不具合管理理

Coverity
静的解析

協力会社X	

開発状況の可視化とソフトウェアコードのガバナンス
ソフトウェアコードガバナンスの３つのステップ

定義

テスト

コントロール

ポリシー、標準規約および閾値の設定

開発中のソースコード
品質の多⾓角的なモニタリング

開発チーム、サプライチェーンの管理理

CIM（複数も可）からの情報の収集とモニタリングを⾏行行い
企業レベルでのソフトウェアコードのガバナンスを実現

ソフトウェアコードガバナンス
シナリオ１：プロジェクトレベルのリスクマネージメント

プロジェクト内の各コンポーネントがどのような状態にあるかを随時監視

シナリオ２：サプライチェーンリスクマネージメント
外部組織からの成果物に対する、品質チェック、セキュリティ規準の厳守チェックなど複数の組織を階層的に管理理可能

シナリオ３：中央管理理体制の確⽴立立
全開発組織の組織単位でのソフトウェアコード品質の状況を、VPレベルの視点からレポート

組織、プロジェクト、コンポーネントレベルまでドリルダウンできるツリー構造を定義しモニタリング	
20	

For Coverity and Partner use only. Copyright Coverity, Inc., 2011	

FDA⽤用テンプレート

医療療機器
プロジェクトであれ
ば、FDA ガイドラインに則したポリシーテンプレートを利利⽤用できる

ポリシー設定により、コンプライアンスに関するメトリクスのトラッキングを容易易にする21	

コードレベルならモニタリングできるけど他の不不具合も含めた管理理は？

構成管理理

構成管理理
開発者

開発者

Jenkins-‐‑‒CI

Coverity  不不具合管理理

Coverity
静的解析

開発者

Jenkins-‐‑‒CI

Coverity  不不具合管理理

Coverity
静的解析

データウェア
ハウス

23	

構成管理理

Jenkins-‐‑‒CICoverity  不不具合管理理

Coverity
静的解析

不不具合だけでは⾜足りな
い…….

真の変更更管理理は？
ALMとの連携

構成管理理

構成管理理
開発者

開発者

Jenkins-‐‑‒CICoverity  不不具合管理理

Coverity
静的解析

開発者

Jenkins-‐‑‒CI

Coverity  不不具合管理理

Coverity
静的解析

データウェア
ハウス

25	

構成管理理

Jenkins-‐‑‒CICoverity  不不具合管理理

Coverity
静的解析

静的解析ツール連携	
Coverity社 Static Analysis	
Design			

Visualize			Developers	

Check-in	
Check-out	

SCM System	
Source code isstored in SCM	26

ALI Reports	

Plan	Builds	

IDE + Tasktop	
Implement requirements
defined in HP ALM	

HP
ALM	

Build	

Req/Tasks/Defects	

Track	Test	© Copyright 2011 Hewlett-Packard Development Company, L.P.

Build System	
Continuous Integration 	

Static Code Analysis	Coverity HP ALM Connector
ALI 2.0 対応以降で予定

HP ALM

Coverity	  の検知した	  不具合とALM上の要求・	  テストとの関連付け	  Coverity	  の検知した	  不具合をALMの障害	  管理システムへ転送	  	  	  

コード修正に伴い混入した	  Coverity で検知されたバグ	  のトラッキング	  	  	  	  Coverity Connector

結合レベルの解析	  要求	  単体レベルの	  解析	  コードのチェックイン	  • 要求の定義	  • 業務分析	  • アーキテクチャ設計	  • システム分析・設計	  ビジネス分析

27	

• 機能の実装	  • 不具合のレビュー	  • 作業の優先度設定	  • 不具合の修正	  • 進捗の管理	  開発QA	  ビルド	  可視化と	  監視	  (コード品質情報)	  (全品質統計情報)	  Coverityの解析を伴う	  夜間/継続的ビルド	  Coverity	• 機能テスト	  • パフォーマンステスト	  • 耐久テスト	  • etc	  	  QA

• セキュリティ監査	  • 製品リリース管理	  リリース管理具体的な連携フロー（不不具合情報の例例）
Coverity  HP  ALM  Connector
Coverity  Jenkins-‐‑‒CI  プラグイン

28	Jenkins-CI Coverity プラグイン	

構成管理リポジトリをポーリングし、自動的にビルド／静的解析を実行	Coverity HP ALM Connector
不具合情報の共有	

不具合の詳細情報とともに、HP ALM上に不具合除法を転送	
30	

Coverity HP ALM Connector
コード品質に関するKPIをALMで一括管理	

コード品質に関わるKPIは静的解析ツールから自動収集し31 モニタリング可能		

今年はどんな立ち位置？	

無料お試しできます！
展示ブースにお立ちよりください