SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
バグを減らそう。
テストを楽にしよう。
静的解析が開発者を救う。
2015/7/7
© 2015 Synopsys, Inc. 2
静的解析
© 2015 Synopsys, Inc. 3
静的解析
•コーディング規約チェック
–ベスト・プラクティスに基づいたコードの書き方
–標準規約など予め定義したコーディングルールに対し違反
がないかを確認
•ランタイムエラー検出
–バグ自体を検出
–メモリリーク、データ破壊、
データ競合、セキュリティなど
静的解析は、誤検出が多い (?)
© 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;
多分正しい
多分間違い
© 2015 Synopsys, Inc. 5
https://youtu.be/Qqp6Hj790yo
© 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%未満
© 2015 Synopsys, Inc. 7
理解し易いレポート (Webブラウザ画面)
発見された不具合をフィルタ
CWE情報
ソースコード上に、コメントが挿入され、どのパスを
通った時に、どんな不具合が起こったか一目瞭然
呼び出し先の関数も同一画面内に表示
不具合管理
のための
ワークフ
ロー情報
不具合発生
までの主要
なイベントや、
類似の問題
の発生個所
へのリンク
© 2015 Synopsys, Inc. 8
例:バッファーオーバーラン シングルトン
の変数
Address渡し
呼出し先の
関数内表示
渡された変数
を配列としてア
クセス
© 2015 Synopsys, Inc. 9
例:リソースリーク 呼出し先の関数内
でアロケートされた
領域を検知
領域をを解放せずに
ローカル変数を破棄
© 2015 Synopsys, Inc. 10
コピペミスでさえ…
変数名の書
き換えミス
関数外でも、
検出可能
© 2015 Synopsys, Inc. 11
不具合担当者の自動アサイン
• SCMの情報に基づき、担当者の自動アサイン
• メール送信
• ソースビューの各行のSCMユーザ、改訂日付の参照
自動的バグアサインのロジック:
• バグの発生イベントが存在するファイルを最後に修正したユーザ
• バグの発生イベントの行を最後に修正したユーザ
• バグの発生パスが存在する関数を最後に修正したユーザ
• バグの発生パスの開始行を最後に修正したユーザ
• バグの発生パスのいずれかの行を最後に修正したユーザ (default)
• バグの発生パスが存在する関数のいずれかを最後に修正したユーザ
• バグの発生パスが存在するファイルのいずれかを最後に修正したユーザ
© 2015 Synopsys, Inc. 12
静的解析を取り入れたワークフロー
01001011
0101101011001
01101011000011
010100101101
01011001
結合レベルでの品質と
セキュリティ脆弱性を
チェック
4. 結合レベルで解析し
問題を検出
2. 構成管理システムへ
登録
3. 継続的統合により
最新ビルドを生成
6. 問題を適切な
開発者に
アサイン
5. 優先度付けされた
不具合
12
1. コーディング
© 2015 Synopsys, Inc. 13
静的解析を取り入れたワークフロー
01001011
0101101011001
01101011000011
010100101101
01011001
結合レベルでの品質と
セキュリティ脆弱性を
チェック
4. 結合レベルで解析し
問題を検出
2. 構成管理システムへ
登録
3. 継続的統合により
最新ビルドを生成
6. 問題を適切な
開発者に
アサイン
5. 優先度付けされた
不具合
13
7. 単体レベルの
問題を解決
1. コーディング
© 2015 Synopsys, Inc. 14
タイトルや組織ごとの品質をコントロール
• 早い段階から各プロジェクトのリスクを判定し、リリースのための意思決定
を行えます。
• 開発工程の完了時やアウトソース開発の受け入れ時の品質を確実にし、
プロジェクト間の品質のばらつきを解消できます。
• 主な特徴
– 組織全体の品質指標を可視化
– 目標の順守状況を継続的に監視
– ソフトウェア品質指標の例
– 不具合密度
– 未修正の不具合数
– セキュリティ脆弱性の数
– 影響度別の不具合数
– テストポリシー違反
© 2015 Synopsys, Inc. 15
参考にできる指標はあるのか?
© 2015 Synopsys, Inc. 16
オープンソースの品質
コベリティを利用している顧客から得た残不具合密度データ
© 2015 Synopsys, Inc. 17
テストを効率的に
© 2015 Synopsys, Inc. 18
すり抜けてしまう
バグがあります
それでも、
静的解析
ユニット
テスト 統合テスト
機能テスト
システム
テスト
“スイスチーズ” モデル
© 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
テストされたコード(%)
テスト作成の工数
テスト工数の増加
に対し効果は減少
テストを行う価値がないコード
- 重要でないコード
- デバッグコード、既存コード
- 決まりきった例外処理
- …
テストできないコードも存在
- 到達できないステートメント
- デッドコード
- ...
© 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%
© 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より)
• 変更されたコードに影響を受ける箇所
を特定(フロー解析)
• テストするには複雜すぎるコード、重要
なロジックなどで優先度を設定
• 既存のテストコードのカバレッジ
コード変更が
発生した関数
コード変更の
影響を受ける関数
テストコードを優先的に作成すべき
箇所をリストアップ
© 2015 Synopsys, Inc. 22
Test Advisor - Development Edition
最終変更者・変更日時
カバレッジ (緑:カバレッジあり, 赤:なし)と
変更時期 (3本線: 最新、1本: 旧来からのコード)
© 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
ソースコードがすべて答えてくれます
そう、コベリティの静的解析ツールなら
Thank You
© 2015 Synopsys, Inc. 25
設計 開発 QA
製品リリース
& 管理
5倍のコスト 10倍のコスト 30倍のコスト
早期のバグ修正で後工程の手間をいかに減らすか
Coverity Software Testing Platform
早い段階で不具合を除去
© 2015 Synopsys, Inc. 26
まとめ
•コーディング段階で分かる問題をテストフェーズに持
ち越さない
•コードの品質指標を定義して管理する
•リスクの高いコードを明確にして、テストする
顧客
満足度
スピード
リスク
開発期間
コスト
品質
セキュリティ
売り上げ
手戻り
© 2015 Synopsys, Inc. 27
無償トライアルのご紹介
•無償で1ヶ月間、お試し
いただけます
•ソースコード提供の必要は
ありません
•解析対象のコード行数:
20万行以上
•対象言語:C/C++,Java,C#
© 2015 Synopsys, Inc. 28

Contenu connexe

Tendances

「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 

Tendances (20)

DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
WebSocketでカメラの映像を共有してみた
WebSocketでカメラの映像を共有してみたWebSocketでカメラの映像を共有してみた
WebSocketでカメラの映像を共有してみた
 
Jitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみたJitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみた
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 

En vedette

みんなに役立つ「テスト」を学んでみよう!(20140105版)
みんなに役立つ「テスト」を学んでみよう!(20140105版)みんなに役立つ「テスト」を学んでみよう!(20140105版)
みんなに役立つ「テスト」を学んでみよう!(20140105版)
Noriyuki Mizuno
 

En vedette (20)

Klocworkのご紹介
Klocworkのご紹介Klocworkのご紹介
Klocworkのご紹介
 
静的解析のROI
静的解析のROI静的解析のROI
静的解析のROI
 
Scrumを導入したくて社内勉強会を開催してみた
Scrumを導入したくて社内勉強会を開催してみたScrumを導入したくて社内勉強会を開催してみた
Scrumを導入したくて社内勉強会を開催してみた
 
名古屋アジャイル勉強会ウォーターフォール(再)入門
名古屋アジャイル勉強会ウォーターフォール(再)入門名古屋アジャイル勉強会ウォーターフォール(再)入門
名古屋アジャイル勉強会ウォーターフォール(再)入門
 
ゼロからのscrum
ゼロからのscrumゼロからのscrum
ゼロからのscrum
 
1から学ぶスクラム
1から学ぶスクラム1から学ぶスクラム
1から学ぶスクラム
 
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
JaSST'15 Tokyo 初心者向けチュートリアル -初心者からの脱出!-
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
マシュマロ・チャレンジでチームビルディング体験
マシュマロ・チャレンジでチームビルディング体験マシュマロ・チャレンジでチームビルディング体験
マシュマロ・チャレンジでチームビルディング体験
 
AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」
AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」
AgileJapan2010 基調講演:野中郁次郎先生による「実践知のリーダシップ~スクラムと知の場作り」
 
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違いなぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
なぜアジャイルなのですか?改めて考察するウォーターフォールとの違い
 
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
 
Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
 
テストを分類してみよう!
テストを分類してみよう!テストを分類してみよう!
テストを分類してみよう!
 
アジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイドアジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイド
 
みんなに役立つ「テスト」を学んでみよう!(20140105版)
みんなに役立つ「テスト」を学んでみよう!(20140105版)みんなに役立つ「テスト」を学んでみよう!(20140105版)
みんなに役立つ「テスト」を学んでみよう!(20140105版)
 
社内アジャイル導入提案資料
社内アジャイル導入提案資料社内アジャイル導入提案資料
社内アジャイル導入提案資料
 
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
 

Similaire à GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社

Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
atsushi_tmx
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
Hiro Yoshioka
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
 
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
Developers Summit
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Tomoyuki Sato
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
Takuma SHIRAISHI
 
「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー
Norikazu Hiraki
 

Similaire à GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社 (20)

デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 
静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応
 
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
Bringing Continuous Agile to Japan
Bringing Continuous Agile to JapanBringing Continuous Agile to Japan
Bringing Continuous Agile to Japan
 
ソースコード検査に耐えるコードとは?
ソースコード検査に耐えるコードとは?ソースコード検査に耐えるコードとは?
ソースコード検査に耐えるコードとは?
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
 
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
 
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
 

Plus de Game Tools & Middleware Forum

GTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games Japan
GTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games JapanGTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games Japan
GTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games Japan
Game Tools & Middleware Forum
 

Plus de Game Tools & Middleware Forum (20)

UMLの本当の価値を知っていますか?ツールで引き出すその真価! /GTMF2019
UMLの本当の価値を知っていますか?ツールで引き出すその真価! /GTMF2019UMLの本当の価値を知っていますか?ツールで引き出すその真価! /GTMF2019
UMLの本当の価値を知っていますか?ツールで引き出すその真価! /GTMF2019
 
GTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games Japan
GTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games JapanGTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games Japan
GTMF2016:Unreal Engine 4を利用した先進的なゲーム制作手法 The Unreal Way 2016 Epic Games Japan
 
Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!
Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!
Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!
 
「Brushup」が4,000社以上のお客様に活用される理由
「Brushup」が4,000社以上のお客様に活用される理由「Brushup」が4,000社以上のお客様に活用される理由
「Brushup」が4,000社以上のお客様に活用される理由
 
Unreal Engine 4の2019年上半期アップデート情報まとめ / GTMF 2019
Unreal Engine 4の2019年上半期アップデート情報まとめ / GTMF 2019Unreal Engine 4の2019年上半期アップデート情報まとめ / GTMF 2019
Unreal Engine 4の2019年上半期アップデート情報まとめ / GTMF 2019
 
3Dアセット作成とリテイク:制作ツールとしてのVR導入のすゝめ / GTMF2019
3Dアセット作成とリテイク:制作ツールとしてのVR導入のすゝめ / GTMF20193Dアセット作成とリテイク:制作ツールとしてのVR導入のすゝめ / GTMF2019
3Dアセット作成とリテイク:制作ツールとしてのVR導入のすゝめ / GTMF2019
 
Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019
Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019
Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019
 
品質と開発スピードの両立と、OSSのリスク低減策のご紹介 / GTMF2019
品質と開発スピードの両立と、OSSのリスク低減策のご紹介 / GTMF2019品質と開発スピードの両立と、OSSのリスク低減策のご紹介 / GTMF2019
品質と開発スピードの両立と、OSSのリスク低減策のご紹介 / GTMF2019
 
イマドキの改善!データ分析SDK導入のポイントとAI活用最新事例 / GTMF2019
イマドキの改善!データ分析SDK導入のポイントとAI活用最新事例 / GTMF2019イマドキの改善!データ分析SDK導入のポイントとAI活用最新事例 / GTMF2019
イマドキの改善!データ分析SDK導入のポイントとAI活用最新事例 / GTMF2019
 
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
 
「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019
「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019
「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019
 
アマゾンのゲーム関連ソリューションを活用してゲームの開発力・商品力の底上げを! / GTMF2019
アマゾンのゲーム関連ソリューションを活用してゲームの開発力・商品力の底上げを! / GTMF2019アマゾンのゲーム関連ソリューションを活用してゲームの開発力・商品力の底上げを! / GTMF2019
アマゾンのゲーム関連ソリューションを活用してゲームの開発力・商品力の底上げを! / GTMF2019
 
CRIWARE 最新情報 ~UE4 Editor × ADX2で加速するサウンドデザイン~ / GTMF2019
CRIWARE 最新情報 ~UE4 Editor × ADX2で加速するサウンドデザイン~ / GTMF2019CRIWARE 最新情報 ~UE4 Editor × ADX2で加速するサウンドデザイン~ / GTMF2019
CRIWARE 最新情報 ~UE4 Editor × ADX2で加速するサウンドデザイン~ / GTMF2019
 
SpriteStudio Ver.6.x 移行事例紹介(2) /GTMF2019
SpriteStudio Ver.6.x 移行事例紹介(2) /GTMF2019SpriteStudio Ver.6.x 移行事例紹介(2) /GTMF2019
SpriteStudio Ver.6.x 移行事例紹介(2) /GTMF2019
 
Linux も動く Microsoft Azure HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採用した...
Linux も動く Microsoft Azure HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採用した...Linux も動く Microsoft Azure HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採用した...
Linux も動く Microsoft Azure HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採用した...
 
『Brushup』で2D、3D、音楽の爆速フィードバック! - Brushup - GTMF 2018 OSAKA / TOKYO
『Brushup』で2D、3D、音楽の爆速フィードバック! - Brushup - GTMF 2018 OSAKA / TOKYO『Brushup』で2D、3D、音楽の爆速フィードバック! - Brushup - GTMF 2018 OSAKA / TOKYO
『Brushup』で2D、3D、音楽の爆速フィードバック! - Brushup - GTMF 2018 OSAKA / TOKYO
 
最新事例で学ぶ!ユーザをファンにするカスタマーサポート運用術 - 株式会社ラクス - GTMF 2018 OSAKA / TOKYO
最新事例で学ぶ!ユーザをファンにするカスタマーサポート運用術 - 株式会社ラクス - GTMF 2018 OSAKA / TOKYO最新事例で学ぶ!ユーザをファンにするカスタマーサポート運用術 - 株式会社ラクス - GTMF 2018 OSAKA / TOKYO
最新事例で学ぶ!ユーザをファンにするカスタマーサポート運用術 - 株式会社ラクス - GTMF 2018 OSAKA / TOKYO
 
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKAIncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 OSAKA
 
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYO
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYOIncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYO
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYO
 
ミドルウェア「AXIP」ロードマップ2018 - AXIP - GTMF 2018 OSAKA / TOKYO
ミドルウェア「AXIP」ロードマップ2018 - AXIP - GTMF 2018 OSAKA / TOKYOミドルウェア「AXIP」ロードマップ2018 - AXIP - GTMF 2018 OSAKA / TOKYO
ミドルウェア「AXIP」ロードマップ2018 - AXIP - GTMF 2018 OSAKA / TOKYO
 

Dernier

Dernier (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

GTMF 2015: バグを減らそう。テストを楽にしよう。静的解析が開発者を救う。 | 日本シノプシス合同会社

  • 2. © 2015 Synopsys, Inc. 2 静的解析
  • 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; 多分正しい 多分間違い
  • 5. © 2015 Synopsys, Inc. 5 https://youtu.be/Qqp6Hj790yo
  • 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 例:リソースリーク 呼出し先の関数内 でアロケートされた 領域を検知 領域をを解放せずに ローカル変数を破棄
  • 10. © 2015 Synopsys, Inc. 10 コピペミスでさえ… 変数名の書 き換えミス 関数外でも、 検出可能
  • 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 タイトルや組織ごとの品質をコントロール • 早い段階から各プロジェクトのリスクを判定し、リリースのための意思決定 を行えます。 • 開発工程の完了時やアウトソース開発の受け入れ時の品質を確実にし、 プロジェクト間の品質のばらつきを解消できます。 • 主な特徴 – 組織全体の品質指標を可視化 – 目標の順守状況を継続的に監視 – ソフトウェア品質指標の例 – 不具合密度 – 未修正の不具合数 – セキュリティ脆弱性の数 – 影響度別の不具合数 – テストポリシー違反
  • 15. © 2015 Synopsys, Inc. 15 参考にできる指標はあるのか?
  • 16. © 2015 Synopsys, Inc. 16 オープンソースの品質 コベリティを利用している顧客から得た残不具合密度データ
  • 17. © 2015 Synopsys, Inc. 17 テストを効率的に
  • 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#
  • 28. © 2015 Synopsys, Inc. 28