Coverity
- 2002年、Stanford大学で設立
- 2014年、Synopsysの一事業部門に
- 静的解析技術をベースにしたソリューションを提供
- ソフトウェア品質解析と測定で#1
- 世界的大企業を中心に1,100社余の顧客
- 5,000以上のオープンソースの品質向上に貢献
静的解析
静的解析は、誤検出が多い(?)
- コーディング規約チェック
- ベスト・プラクティスに基づいたコードの書き方
- 標準規約など予め定義したコーディングルールに対し違反がないかを確認
- ランタイムエラー検出
- バグ自体を検出
- メモリリーク、データ破壊、データ競合、セキュリティなど
コードをより深く解析
- プロシージャー間解析は、アプリケーション全体にわたって関数呼び出しを追跡します
- 深部にわたる解析でコンポーネント間の複雑な相互作用を検出します
- 統計的な解析手法を併用
プログラムの目的を推測し、予期しない動作を報告
int *p = my_func( sizeof( s ) );
if ( p != 0 ) *p = 42;
int *p = my_func( sizeof( s ) );
if ( p != 0 ) *p = 42;
int *p = my_func( sizeof( s ) );
*p = 42;
CoverityとFxCop
- FxCopや他のコーディング規約チェックツールでは発見できない重要な問題を指摘
- 誤検出率15%未満
問題のタイプ |
Coverityのみで発見された問題 |
FxCopのみで発見された問題 |
どちらでも発見された問題 |
処理されない例外 |
21 |
0 |
0 |
リソースリーク |
75 |
0 |
0 |
ロジックエラー |
4 |
2 |
0 |
階層問題 |
5 |
2 |
0 |
並列処理の問題 |
20 |
4 |
0 |
重要な問題の合計 |
125 |
8 |
0 |
コーディング標準やベストプラクティスの問題 |
3 |
970 |
0 |
総計 |
128 |
978 |
0 |
不具合担当者の自動アサイン
- SCMの情報に基づき、担当者の自動アサイン
- メール送信
- ソースビューの各行のSCMユーザ、改定日付の参照
静的解析を取り入れたワークフロー
- コーディング
- 構成管理システムへ登録
- 継続的統合により最新ビルドを生成
- 結合レベルで解析し問題を検出
- 結合レベルでの品質とセキュリティ脆弱性をチェック
- 優先度付けされた不具合
- 問題を適切な開発者にアサイン
- 単体レベルの問題を解決
タイトルや組織ごとの品質をコントロール
- 早い段階から各プロジェクトのリスクを判定し、リリースのための意思決定を行えます
- 開発工程の完了時やアウトソース開発の受け入れ時の品質を確実にし、プロジェクト間の品質のばらつきを解消できます
- 主な特徴
- 組織全体の品質指標を可視化
- 目標の順守状況を継続的に監視
- ソフトウェア品質指標の例
- 不具合密度
- 未修正の不具合数
- セキュリティ脆弱性の数
- 影響度別の不具合数
- テストポリシー違反
参考にできる指標はあるのか?
オープンソースの品質
- コベリティを利用している顧客から得た残不具合密度データ
Size of Codebase (Lines of Code) |
Open Source Code |
Proprietary Code |
Lines of Code |
252,010,313 |
684,318,640 |
Number of Projects |
741 |
493 |
Average Project Size (lines of code) |
340,094 |
1,388,070 |
Defects Outstanding as of 12/31/13 |
149,597 |
492,578 |
Defects Fixed in 2013 |
44,641 |
783,799 |
Defect Density |
.59 |
.72 |
変更部分にフォーカスする
- Coverityの自社事例
- テスト対象のコード数:137万行
- 115万行がテストでカバー(84%カバレッジ = かなり良い?)→まだ22万行!!が未テスト
- 直前の変更にのみフォーカスすれば、145ファイル内の851行だけをカバーすれば良い
変更部分を知る
- テスト作成支援のポイント
- 変更されたコードに注目(SCMより)
- 変更されたコードに影響を受ける箇所を特定(フロー解析)
- テストするには複雑すぎるコード、重要なロジックなどで優先度を設定
- 既存のテストコードのカバレッジ
- テストコードを優先的に作成すべき箇所をリストアップ
まとめ
- コーディング段階でわかる問題をテストフェーズに持ち越さない
- コードの品質指標を定義して管理する
- リスクの高いコードを明確にして、テストする
無料トライアルのご紹介
- 無償で1ヶ月間、お試しいただけます
- ソースコード提供の必要はありません
- 解析対象のコード行数:20万行以上
- 対象言語:C/C++,Java,C#