ソフトウェア品質向上セミナー ソースコード品質 レビュー品質 を改善するポイント 株式会社富士通コンピュータテクノロジーズ 1328kc1 0 Copyright 2015 FUJITSU COMPUTER TECHONOGIES LIMITED

Similar documents
会社概要 株式会社富士通コンピュータテクノロジーズ 設立 1983 年 事業所川崎本社 豊橋事業所 長野事業所 事業内容 サーバ ストレージ モバイル端末 車載 /FA 機器 画像認識 ハードウェア ネットワーク 検証ソリューション 従業員数 536 名 組込みソフトウェア開発 組込みハードウェア開

PGRelief C/C++ 強化ポイント説明書

040402.ユニットテスト

Microsoft PowerPoint - A3② JaSST_MISRA2004ソースコード品質診断.ppt

CodeRecorderでカバレッジ

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

Using VectorCAST/C++ with Test Driven Development

Microsoft PowerPoint - 【最終提出版】 MATLAB_EXPO2014講演資料_ルネサス菅原.pptx

目次 ペトリネットの概要 適用事例

FUJITSU Software Systemwalker Centric Manager Lite Edition V13.5 機能紹介資料

エンジニアリング・サービスから見たMBD導入の成功・失敗

Insert your Title here

単体テスト設計のコツ

15288解説_D.pptx

COBOL EE開発環境 ご紹介資料

AquesTalk Win Manual

機能検証トレーニング コース一覧

Microsoft PowerPoint - ID005(R02).pptx

TFTP serverの実装

AquesTalk プログラミングガイド

PowerPoint プレゼンテーション

過去問セミナーTM

4.7.4 プロセスのインプットおよびアウトプット (1) プロセスへのインプット情報 インプット情報 作成者 承認者 備 考 1 開発に関するお客様から お客様 - の提示資料 2 開発に関する当社収集資 リーダ - 料 3 プロジェクト計画 完了報 リーダ マネージャ 告書 ( 暫定計画 ) 4

ジョブ管理ソフトウェア LoadStar Scheduler ご紹介資料 ~ システム運用品質の向上とコスト削減を実現 ~

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

智美塾 ゆもつよメソッドのアーキテクチャ

Cisco Prime LAN Management Solution 4.2 紹介資料

PowerPoint プレゼンテーション

24th Embarcadero Developer Camp

スライド 1

DPC-0401

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

CA Federation ご紹介資料

FUJITSU Software Systemwalker for Oracle V15 (15.1) 紹介資料

スキル領域 職種 : ソフトウェアデベロップメント スキル領域と SWD 経済産業省, 独立行政法人情報処理推進機構

Java知識テスト問題

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Oracle SQL Developerの移行機能を使用したOracle Databaseへの移行

IBM Rational Software Delivery Platform v7.0 What's

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

FUJITSU Software Systemwalker for ERPパッケージ ジョブ連携 V16.0 紹介資料

Source Insight

プロジェクトマネジメント知識体系ガイド (PMBOK ガイド ) 第 6 版 訂正表 - 第 3 刷り 注 : 次の正誤表は PMBOK ガイド第 6 版 の第 1 刷りと第 2 刷りに関するものです 本 ( または PDF) の印刷部数を確認するには 著作権ページ ( 通知ページおよび目次の前 )

GUI 操作自動化ツールを用いた テスト効率化手法 2016 年 3 月 8 日 /3 月 9 日株式会社富士通コンピュータテクノロジーズ TMP 事業部第二開発部菅野正行 Copyright 2016 FUJITSU COMPUTER TECHNOLOGIES LIMITED

多機種のAndroid(TM)端末でテストシナリオを流用可能に - Androidアプリケーション自動テストツール QCWing for Android Ver.2.7 -

お客様からの依頼内容とその現状

Oracle TimesTenについて

テキスト中の表記について 画面中に表示される文字の表記ウィンドウ ボタン メニューなど 画面に表示される文字は [] で囲んで表記しています 画面上に表示される選択肢や 入力する文字については で囲んで表記しています ディレクトリの表記本テキストではファイルのパスを表す際 すべてデフォルトのインスト

メソッドのまとめ

PARTⅢ 検証事例 2. トレーサビリティ管理の自動化に踏み切った理由や経緯 (1) 国際スタンダード認証に関する課題 ISO DO-178B/C IEC などの国際スタンダードでは 開発工程全般にわたって要件が満たされていること ( システムの正しい要件が 正しい方法で

Managing and Sharing MATLAB Code

Microsoft PowerPoint - 【別紙1-2】メトリクスセットの利用ガイド.pptx

セットアップカード

PowerPoint プレゼンテーション

インテル(R) Visual Fortran コンパイラ 10.0

ソフトウェア FMEA を体系的に実施する 出発点としての MISRA-C 株式会社ヴィッツ森川聡久 株式会社ヴィッツ中野泰伸 名古屋市工業研究所小川清 1

目次 1 はじめに 本文書の概要 PVF ソフトウェアと VISUAL STUDIO PVF ソフトウェアの種類 MICROSOFT VISUAL STUDIO の日本語化について VISUAL STUDIO

NEXCESS基礎コース01 組込みソフトウェア開発技術の基礎 ソフトウェア開発プロセス編

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

Microsoft PowerPoint - A1-2_株式会社ネクスト_藤澤正通_S _005.pptx

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

Oracle Cloud Adapter for Oracle RightNow Cloud Service

BIP Smart FAQ

情報処理演習 B8クラス

検証事例 富士通株式会社

2. 製品概要 IM-ERP リアルコネクトは SAP システム内のデータをリアルタイムに取得 更新するための API SAP リアルタイム連携 API を提供いたします またこれらの API を利用した業務テンプレートが同梱されています 各機能の詳細や設定方法に関しては 各マニュアルまたはセットア

テスト設計コンテスト フロア展示資料

Microsoft Word - Cプログラミング演習(10)

Microsoft Word - catalog_tpass43.doc

BIP Smart サンプル説明書

Oracle SQL Developer Data Modeler

スライド 1

PCL6115-EV 取扱説明書

Microsoft Word - 【第5分科会】ConcolicTestingグループ_付録_修正_ doc

Transcription:

ソフトウェア品質向上セミナー 2015.07.17 ソースコード品質 レビュー品質 を改善するポイント 株式会社富士通コンピュータテクノロジーズ 1328kc1 0

テストツール一覧 アプリケーション開発における主な効率化ツール 機能テストツール 規定した機能を果たすかどうかを検証 単体試験の一部 カバレッジ測定ツール プログラムの制御構造を網羅するホワイトボックステスト技法を支援 機能テストツール 負荷生成ツール 負荷生成ツール システムの負荷を発生させ アプリケーションの正常性 可用性を検証 性能測定ツール ソフトウェアやハードウェアの応答性能を検証 カバレッジ測定ツール テスト効率化ツール 性能測定ツール GUI 操作自動化ツール キーボードやマウス操作を記録 ( キャプチャ ) し テストシナリオとして保存 このシナリオを再生 ( リプレイ ) し テスト対象を記録時と同じ動作させるツール ( 主にリグレッションテストに使用 ) 操作自動化 ( キャプチャ & リプレイ ) ツール ソースコード解析ツール ソースコード解析ツール 特定の欠陥や欠陥につながる可能性のあるソースコード上の特徴を自動的に発見するツール 1/ 24

アジェンダ ベンダー提供ツールによる静的コード検証を超える価値のご提案 静的解析ツール選択のポイント 静的解析ツールを使用したレビュー効率向上のポイント ソースコード検証サービスのご紹介 2/ 24

ソフトウェア品質向上セミナー 2015.07.17 静的解析ツール選択のポイント 静的テストと動的テストの違い 静的解析ツールを使用するモチベーション 様々なタイプの静的解析ツール 静的解析ツールの選択スコープ 3/ 24

静的テストとは? 静的テストとは プログラムを動作させずにテストすること ドキュメント ソースコード等をレビュー インスペクションすること 静的解析ツールはレビュー インスペクションを支援するツール 静的テスト 静的解析ツール 24: pdata = malloc(size); 25: if (pdata == NULL) { 26: return -1; 27: } 28: ret = bar(*pdata, *fname, size); 29: 30: if (ret!= 0) { 31: free(pdata); 32: } else { 33: return -1; コンパイル プログラム モジュール 動的テスト 4/ 24

工程別の欠陥混入 欠陥発見 修正コスト ソフトウェアの欠陥を未然に発見することで修正に関わるトータルコストを削減できる ( Shift Left) % Defects introduced in this phase $16,000 % Defects found in this phase % Cost to repair defects In this phase $1,000 $25 $100 $250 Coding Unit Test Function Test Field Test Post Release Applied Software Measurement, Caper Jones 5/ 24

静的解析ツールとは 静的解析ツールとはプログラムを実行せずに プログラムを評価するツール全般を表す ( 反対にプログラムを実行する場合は動的解析ツール ) 狭義な静的解析ツール ソースコード上の欠陥を検出するツール Coverity Qulaity Advisor Klocwork Insight Fortiry SCA CodeSonar (C++test) PGRlief QAC/QAC++ LDRA anywarp CodeDirector 広義な静的解析ツール ソフトウェアメトリクスやクローンコードを検出する静的解析ツール Understand Lattix ランタイムエラー検出ツール DevPartner Purify Insure++ 上記は C/C++ ソースコードを検証できる商用静的解析ツールの一部を抜粋したものです 各社の静的解析ツールの名称 社名等は各社の登録商標です 6/ 24

静的解析ツールの仕組み (1) パターンマッチタイプの静的解析ツール ソースコードの記述方法に着目し スタイルやコーディング規約に沿った厳格なコーディングを実施する場合は パターンマッチタイプの静的解析ツールが有効である PGRelief QAC/QAC++ LDRA 01: #include <stdio.h> 02: #include <stdlib.h> 03: #include <memory.h> 04: 05: int bar(char *pdata, char * fname, int size) 06: { 07: FILE *fp; 08: 09: fp = fopen(fname, wb ); 10: if (fp == NULL) { 11: return -1; 12: } 13: memset(pdata, 0x20, size); 14: fwrite(pdata, size,1, fp); 15: fclose(fp); 16: return 0; 17: } 18: 19: int foo(char *fname, int size) 20: { 21: char *pdata; 22: int ret; 23: 24: pdata = malloc(size); 25: if (pdata == NULL) { 26: return -1; 27: } 28: ret = bar(*pdata, *fname, size); 29: 30: if (ret!= 0) { 31: free(pdata); 32: } else { 33: return -1; 34: } 35: return 0; 36: } 欠陥のパターンを多く持っているほど優秀な静的解析ツールと言える しかし指摘の件数が増えるという欠点もある #include <stdio.h> #include <stdlib.h> #include <memory.h> int bar(char *pdata, char * fname, int size) { FILE *fp; } fp = fopen(fname, wb ); if (fp == NULL) { return -1; } memset(pdata, 0x20, size); fwrite(pdata, size,1, fp); fclose(fp); return 0; int foo(char *fname, int size) { char *pdata; int ret; } pdata = malloc(size); if (pdata == NULL) { return -1; } ret = bar(*pdata, *fname, size); if (ret!= 0) { free(pdata); } else { return -1; } return 0; FIO18-C FIO18-C (CERT) fwrite() が書き込み操作を null 文字で終了すると想定しない パターンマッチタイプの静的解析ツールは 関数の内容を評価せずに一致した場合には指摘とする場合が多い 7/ 24

静的解析ツールの仕組み (2) ビルドキャプチャータイプの静的解析ツール プログラムの動作に着目し 主に制御フロー データフロー解析を実行するタイプの静的解析ツールで 実際の欠陥を検出したい場合に有効である Coverity Quality Advisor Klocwork Insight Fortify SCA CodeSonar 静的解析ツール ビルドキャプチャータイプの静的解析ツールは 動的テストと同じ動作が可能 24: pdata = malloc(size); 25: if (pdata == NULL) { 26: return -1; 27: } 28: ret = bar(*pdata, *fname, size); 29: 30: if (ret!= 0) { 31: free(pdata); 32: } else { 33: return -1; 動的テスト ( ランタイムエラー検出 ) エラー検出 33: return -1; ビルドキャプチャ コンパイル コンパイラ呼び出し ランタイムライブラリに印加 24: pdata = malloc(size); 中間表現 プログラム モジュール 解析 ( シミュレーション ) テスト デバック 実機上でエミュレーション 8/ 24

静的解析ツールのスコープ それぞれのツールには 対象となるスコープがあるため それを理解して使用するツールを選択する必要がある PGRelief Fortify SCA Klocwork Coverity スタイルを含め厳格なコーディングを実施する必要がある場合 ソースコード上のセキュリティ脆弱性を調査したい場合 一つのツールで全ての範囲 ( コーディング ~ インテグレーション ) をカバーしたい場合 ソースコード上の欠陥のみを検出し 誤検知 過検知を極力抑えたい場合 開発規模 (Steps) 大規模 1M~ 中規模 100k~ 小規模 コーディング中心の開発を行う場合 ( パターンマッチタイプ ) PGRelief コーディング Klocwork Insight Fortify SCA 流用や OSS 等を多用する場合 また集約型の開発を行う場合 ( ビルドキャプチャータイプ ) Coverity Quality Advisor インテグレーション 上記は弊社の調査結果です 過検知 は FCT 独自に使用している用語です 静故的で障解はの析ビ発ツル見ードにルキ重をャ点使用プをしチ置てャいシーてスタいテイるムプのの FCT 9/ 24

ソースコードの品質 そもそも 何を検査 ( レビュー ) したいか? JIS-X0129(ISO 9126) 品質特性とソースコードの品質 品質特性品質副特性ソースコードの品質 ( 例 ) 信頼性保守性 成熟性 ソースコードを使い込んだ時の欠陥の少なさ 障害許容性 欠陥への対処 ( 例外処理等が行われているか?) 解析性 作ったソースコードは理解しやすいか? 変更性 将来 ソースコードを改版しやすいつくりになっているか? 安定性 ソースコードを改版する際に プログラムへの影響が少ないつくりになっているか? C C P P P P 試験性 テストやデバックがしやすいか? P 移植性 環境適応性 他の OS やアーキテクチャ またソフトウェアに移植しやすいソースコードになっているか? 効率性 時間効率性 適切なアルゴリズムを使用しているか? 資源効率性 無駄なスタックやヒープ領域を使用していないか? C 機能性 セキュリティ セキュアなコーディングがされているか? [ 出典 ] 組み込みソフトウェア開発向けコーディング作法ガイド [C 言語版 ] 機能性 - セキュリティ を追加している P PGRelief C Coverity 10/ 24

静的解析ツール選択のポイント 開発スタイル 開発規模に適した静的解析ツールを選択しましょう! その他 静的解析ツールを選択する時の検討項目例 静的解析ツールで検出したい事象 遵守するべきコーディングルール ROI 11/ 24

ソフトウェア品質向上セミナー 2015.07.17 静的解析ツールを使用した レビュー効率向上のポイント ソースコードに含まれる欠陥の考え方 静的解析ツールで検出できるもの 静的解析ツールの能力 レビューの目標と分析 12/ 24

レビューの工数 5MStep(5,000,000Step) のソースコードをレビューする 1 人で1 行 /10 秒間レビューすると?: 579 日 工数換算 (8 時間 /1 日 1 月 /20 日 ): 86 人月 標準的なソースコード品質で Coverity Quality Advisor で解析をかけた場合 10000 件 ( おおよそ2 件 /Kstep 程度 ) 5 分 : 35 日 工数換算 ( 8 時間 /1 日 1 月 /20 日 ) : 5 人月 まだまだ 現実的な工数には程遠い レビュー可能な件数に絞り込みたい 13/ 24

ソースコード上の欠陥について ソースコードには潜在化した欠陥も含まれている ソースコード 欠陥が顕在化したものが故障となる 静的テスト 欠陥 欠陥 動的テスト 静的解析ツールは欠陥の可能性を検出 欠陥 動的解析ツールは故障を検出 過検知 指摘 欠陥 欠陥ではあるが修正は必要ない 指摘 指摘 指摘 指摘 開発者が期待する静的解析ツールの指摘? 故障 故障 誤検知 欠陥ではない 指摘 静的解析ツールの指摘 実行時 ISO/IEC 2383-14 JIS X 0014 定義 Failure 故障要求された機能を遂行する機能単位の能力がなくなること Fault Error 欠陥 障害 誤差 誤り 要求された機能を遂行する機能単位の能力の縮退 または喪失を引き起こす異常な状態 計算 観測若しくは測定された値または状態と 真の 指定された若しくは論理的に正しい値または状態との間の相違 Detect 指摘 検知静的解析ツールの検出した指摘 14/ 24

ソースコード上の欠陥含有率 ソースコード上に含まれる欠陥含有率は 工程に応じて変化する レビュー テストを実施する際 また静的解析ツールを適用する際の指標が必要となる ( 下記は成功プロジェクトの平均参考値 ) Detect / KSteps 4.0 3.5 3.0 2.0 2.1 2.8 2.6 2.2 1.0 0.9 0.3 基本 機能 詳細 実装単体結合統合 Schedule 15/ 24

静的解析ツールのポリシー 各ツールベンダーによって 解析結果やレビューに関するポリシー ( 考え方 ) が違うため その特性を理解してツールを選択する必要がある 検出数に違いがある Positive ( 検出する ) 正検知過検知? 誤検知? Negative ( 検出しない ) Positive ( 検出する ) 正検知 Negative ( 検出しない ) 過検知? 誤検知? 一般的な静的解析ツール Coverity 社静的解析ツール 解析結果 レビュー 一般的な静的解析ツール 欠陥を確実に検出できることに重点を置く為 誤検知 過検知の可能性があっても検出する 見逃し (Ture Negative) は後工程で開発者の負担となる Coverity 社静的解析ツール 実際に発生する故障の検出に重点を置き 誤検知 過検知はなるべく排除する 誤検知 過検知のレビューは開発者の負担となる 上記は弊社の調査結果です 過検知 は FCT 独自に使用している用語です 16/ 24

静的解析ツールの実力 静的解析ツール Negative + Positive = 100% レビューの品質予測には 静的解析ツールの実力を知ることが必要 検知 (True Positive) を検出する能力 ( 誤ったソースコードを検出する能力 ) 誤検知 (False Positive) を検出しない能力 ( 正しいソースコードを検知しない能力 ) ソースコード ( 結合工程 ) 正しいソースコード 間違ったソースコード 欠陥含有率 4,989kStep 11 kstep 陰性 (Negative) True Negative ( 検知不要 ) 4985.51 kstep False Negative ( 未検知 ) 5.07kStep 陽性 (Positive) False Positive ( 誤検知 ) 3.39 kstep True Positive ( 検知 ) 5.93 kstep 17/ 24

正検知率 誤検知率の算出結果 プロプライエタリなソースコード (5M Step) の例 100% 正検知率 :53.90% T.N. 未検知 F.N. (5569 件?) 誤検知 F.P. 正検知 T.P. 6501 件 誤検知率 :0.068% 3242 件 99.78% 0.22% 欠陥なし 欠陥なし正しいソースコード 欠陥 100% 欠陥あり欠陥を含むソースコード 陰性 (Negative) 99.932% 46.10% 陽性 (Positive) 0.068% 53.90% 18/ 24

ベイズの定理応用例 静的解析ツールを使用して解析結果が与えらとき 斜線面積の広さが 欠陥の発生する確率を示している 75% 71% 71% 80% 59% 58% 50% 33% 0.1023 (20%) 0.1875 (36%) 0.0767 (15%) 15% 0.0135 (3%) 0.0568 (11%) 0.02 (4%) 0.0213(4%) 0.0174(3%) 0.024(5%) UNINIT_CTOR クラス内での未初期化 31% 25% 13% 9% 8% 4% 3%... 1% RESOURCE_LEAK FORWARD_NULL UNINIT リーク STRING_OVERFLOW オーバフロー OVERRUN BAD_SIZEOF REVERSE_INULL USER_AFTER_FREE 解放後のアクセス DIVIDE_BY_ZEROゼロ除算 19/ 24

レビュー効率向上のポイント 静的解析ツールは 過検知 誤検知があることを前提に目標を設定してからレビュー実施しましょう! その他 レビュー効率向上の検討事項 静的解析ツールの特色 ( ポリシー ) 静的解析ツールの検出能力 レビューそのものの状況把握 20/ 24

ソフトウェア品質向上セミナー 2015.07.17 まとめ 静的解析ツールの選択とレビューの効率化のポイント ソースコード検証サービス 21/ 24

まとめ 1 静的解析ツールの選択ポイント 開発スタイル 開発規模に適した静的解析ツールを選択しましょう! 2 静的解析ツールを使用したレビュー効率向上のポイント 静的解析ツールは 過検知 誤検知があることを前提に目標を設定してからレビュー実施しましょう! 22/ 24

サービスメニュー概要 ソースコード品質 レビュー品質を改善するサービスメニュー コーディング規約 規約作成支援 コード修正 P コーディング レビュー支援 A D 静的解析 未検知分析 レビュー C 解析結果 傾向分析 詳細分析 弊社のサービス お客様のプロセス 資産 サービス概要 静的解析傾向分析詳細分析未検知分析レビュー支援規約作成支援 最先端の静的解析ツールを活用し 通常の人的レビューでは発見できないコード上の潜在欠陥を検出します ( トライアル解析を無償で実施します ) 静的解析ツールの弱点である膨大な指摘の中から 開発の状況に合わせて正しい指摘 ( 誤検知 過検知の排除 ) とレビューの優先順位を 弊社の分析技術を用いて抽出します 弊社のエンジニアが 静的解析の指摘を一件毎にレビューし 欠陥のメカニズム 影響度 修正候補等を提示します 複雑な構造の重大欠陥等 汎用の静的解析ツールでは検出できない欠陥を 静的解析ツールの機能や OSS をベースとしたツール等を活用して同一パターンを検出し 欠陥見逃しを防ぎます 静的解析の結果やレビュー後の修正状況を管理し 第三者のチェックを行うことで 重大欠陥の修正漏れや見逃しを防止します 静的解析ツールの分析結果やレビュー支援状況から お客様の開発の効果のあるコーディング規約作成を支援します ( 特に 信頼性 や セキュリティ の観点 ) 23/ 24

商標について Coverity および Coverity ロゴ Coverity Static Analysis Coverity Extend Coverity Prevent Coverity Audit は 米国およびその他の国における Coverity, Inc. の商標または登録商標です Klocwork Insight は Klocwork 社の商標または登録商標です Fortify SCA は Fortify HP の商標または登録商標です CodeSonar は GammaTech 社の商標または登録商標です Windows および Visual Studio は 米国およびその他の国における Microsoft Corp. の商標または登録商標です Linux は Linus Torvalds 氏の米国およびその他の国における登録商標あるいは商標です Sun / Solaris / Java に関連するすべての商標およびロゴマークは 米国 Oracle, Inc. の米国およびその他の国における商標または登録商標です Eclipse は 開発ツールプロバイダーのオープンコミュニティーである Eclipse Foundation, Inc. により構築された開発ツール統合のためのオープンプラットフォームです MISRA とそのロゴは MISRA コンソーシアムを代表して MISRA Ltd. の登録商標です その他の会社名 商品名は各社の商標 または登録商標です 24/ 24