Contenu connexe
Similaire à GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社 (20)
Plus de Game Tools & Middleware Forum (20)
GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社
- 3. © 2015 Synopsys, Inc. 3
静的解析
•コーディング規約チェック
–ベスト・プラクティスに基づいたコードの書き方
–標準規約など予め定義したコーディングルールに対し違反
がないかを確認
•ランタイムエラー検出
–バグ自体を検出
–メモリリーク、データ破壊、
データ競合、セキュリティなど
静的解析は、誤検出が多い (?)
- 4. © 2015 Synopsys, Inc. 4
コードをより深く解析
• プロシージャー間解析は、アプリケーション全体にわたって関
数呼び出しを追跡します
• 深部にわたる解析でコンポーネント間の複雑な相互作用を検出
します
• 統計的な解析手法を併用
プログラムの目的を推測し、
予期しない動作を報告
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;
多分正しい
多分間違い
- 6. © 2015 Synopsys, Inc. 6
Coverity と FxCop
問題のタイプ 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
FxCop や他のコーディング規約チェックツールでは発見できない重要な問題を指摘
Paint.net version 3.22
誤検出率
15%未満
- 7. © 2015 Synopsys, Inc. 7
理解し易いレポート (Webブラウザ画面)
発見された不具合をフィルタ
CWE情報
ソースコード上に、コメントが挿入され、どのパスを
通った時に、どんな不具合が起こったか一目瞭然
呼び出し先の関数も同一画面内に表示
不具合管理
のための
ワークフ
ロー情報
不具合発生
までの主要
なイベントや、
類似の問題
の発生個所
へのリンク
- 8. © 2015 Synopsys, Inc. 8
例:バッファーオーバーラン シングルトン
の変数
Address渡し
呼出し先の
関数内表示
渡された変数
を配列としてア
クセス
- 9. © 2015 Synopsys, Inc. 9
例:リソースリーク 呼出し先の関数内
でアロケートされた
領域を検知
領域をを解放せずに
ローカル変数を破棄
- 11. © 2015 Synopsys, Inc. 11
不具合担当者の自動アサイン
• SCMの情報に基づき、担当者の自動アサイン
• メール送信
• ソースビューの各行のSCMユーザ、改訂日付の参照
自動的バグアサインのロジック:
• バグの発生イベントが存在するファイルを最後に修正したユーザ
• バグの発生イベントの行を最後に修正したユーザ
• バグの発生パスが存在する関数を最後に修正したユーザ
• バグの発生パスの開始行を最後に修正したユーザ
• バグの発生パスのいずれかの行を最後に修正したユーザ (default)
• バグの発生パスが存在する関数のいずれかを最後に修正したユーザ
• バグの発生パスが存在するファイルのいずれかを最後に修正したユーザ
- 12. © 2015 Synopsys, Inc. 12
静的解析を取り入れたワークフロー
01001011
0101101011001
01101011000011
010100101101
01011001
結合レベルでの品質と
セキュリティ脆弱性を
チェック
4. 結合レベルで解析し
問題を検出
2. 構成管理システムへ
登録
3. 継続的統合により
最新ビルドを生成
6. 問題を適切な
開発者に
アサイン
5. 優先度付けされた
不具合
12
1. コーディング
- 13. © 2015 Synopsys, Inc. 13
静的解析を取り入れたワークフロー
01001011
0101101011001
01101011000011
010100101101
01011001
結合レベルでの品質と
セキュリティ脆弱性を
チェック
4. 結合レベルで解析し
問題を検出
2. 構成管理システムへ
登録
3. 継続的統合により
最新ビルドを生成
6. 問題を適切な
開発者に
アサイン
5. 優先度付けされた
不具合
13
7. 単体レベルの
問題を解決
1. コーディング
- 14. © 2015 Synopsys, Inc. 14
タイトルや組織ごとの品質をコントロール
• 早い段階から各プロジェクトのリスクを判定し、リリースのための意思決定
を行えます。
• 開発工程の完了時やアウトソース開発の受け入れ時の品質を確実にし、
プロジェクト間の品質のばらつきを解消できます。
• 主な特徴
– 組織全体の品質指標を可視化
– 目標の順守状況を継続的に監視
– ソフトウェア品質指標の例
– 不具合密度
– 未修正の不具合数
– セキュリティ脆弱性の数
– 影響度別の不具合数
– テストポリシー違反
- 18. © 2015 Synopsys, Inc. 18
すり抜けてしまう
バグがあります
それでも、
静的解析
ユニット
テスト 統合テスト
機能テスト
システム
テスト
“スイスチーズ” モデル
- 19. © 2015 Synopsys, Inc. 19
コードカバレッジの罠
Diminishing return for
increased test effort
1
Not all code is testable
- unreachable statements
- dead code, ...
2
Not all tested code adds
equal value to the test
- non-critical code
- debug code, legacy code
- exception handling, ...
3
テストされたコード(%)
テスト作成の工数
テスト工数の増加
に対し効果は減少
テストを行う価値がないコード
- 重要でないコード
- デバッグコード、既存コード
- 決まりきった例外処理
- …
テストできないコードも存在
- 到達できないステートメント
- デッドコード
- ...
- 20. © 2015 Synopsys, Inc. 20
Total Since 5.3 Since 5.4 Since 5.4.1
Untested LOC 223,340 9,636 7,934 851
Untested LOC (%) 100.0% 2.0% 1.6% 0.2%
# Incomplete Tested Files 1979 1743 404 145
223,340
9,636 7,934
851
1979
1743
404
145
0
500
1000
1500
2000
2500
-
50,000
100,000
150,000
200,000
250,000
#IncompleteTestedFiles
UntestedLOC
Focus testing on latest changes
Untested LOC
# Incomplete Tested Files
変更部分にフォーカスする
Coverity の自社事例
• テスト対象のコード数:137万行
• 115万行がテストでカバー (84% カバレッジ = かなり良い?) → まだ22万行!! が未テスト
• 直前の変更にのみフォーカスすれば、145 ファイル内の 851 行だけをカバーすれば良い
明らかに対処しやすい:
• 未テストコードの 0.2%
• 未テストファイルの 7%
- 21. © 2015 Synopsys, Inc. 21
変更部分を知る
f25
f33 f77
f15 f90
Foo
...
f23f76 f32
f34
f54
...
f89 f67
f87f56
f34
......
... ...
... ...... ...
......
Functions that have
been changed
Functions that have
been impacted by change
テスト作成支援のポイント:
• 変更されたコードに注目(SCMより)
• 変更されたコードに影響を受ける箇所
を特定(フロー解析)
• テストするには複雜すぎるコード、重要
なロジックなどで優先度を設定
• 既存のテストコードのカバレッジ
コード変更が
発生した関数
コード変更の
影響を受ける関数
テストコードを優先的に作成すべき
箇所をリストアップ
- 22. © 2015 Synopsys, Inc. 22
Test Advisor - Development Edition
最終変更者・変更日時
カバレッジ (緑:カバレッジあり, 赤:なし)と
変更時期 (3本線: 最新、1本: 旧来からのコード)
- 23. © 2015 Synopsys, Inc. 23
Coverity
•2002年、Stanford 大学で設立
•2014年、Synopsys の一事業部門に
•静的解析技術をベースにしたソリューションを提供
•ソフトウェア品質解析と測定で #1 (*1)
•世界的大企業を中心に 1,100 社余の顧客
•5,000 以上のオープンソースの品質向上に貢献 (*2)
*1) 出典: IDC Worldwide Software Quality Analysis Measurement 2011-2015 Report
*2) http://scan.coverity.com - 6/30/2015 現在
Listen to your code
ソースコードがすべて答えてくれます
そう、コベリティの静的解析ツールなら
- 25. © 2015 Synopsys, Inc. 25
設計 開発 QA
製品リリース
& 管理
5倍のコスト 10倍のコスト 30倍のコスト
早期のバグ修正で後工程の手間をいかに減らすか
Coverity Software Testing Platform
早い段階で不具合を除去
- 26. © 2015 Synopsys, Inc. 26
まとめ
•コーディング段階で分かる問題をテストフェーズに持
ち越さない
•コードの品質指標を定義して管理する
•リスクの高いコードを明確にして、テストする
顧客
満足度
スピード
リスク
開発期間
コスト
品質
セキュリティ
売り上げ
手戻り
- 27. © 2015 Synopsys, Inc. 27
無償トライアルのご紹介
•無償で1ヶ月間、お試し
いただけます
•ソースコード提供の必要は
ありません
•解析対象のコード行数:
20万行以上
•対象言語:C/C++,Java,C#