ソースコード品質・レビュー品質
を改善するポイント
株式会社 富士通コンピュータテクノロジーズ
ソフトウェア品質向上セミナー
2015.07.17
1328kc1
アプリケーション開発における主な効率化ツール
テストツール一覧
カバレッジ
測定ツール
機能テスト
ツール
負荷生成
ツール
ソースコード
解析ツール
操作自動化
(キャプチャ&リプレイ)
ツール
性能測定
ツール
テスト効率化
ツール
負荷生成ツール
システムの負荷を発生させ、ア
プリケーションの正常性・可用
性を検証
性能測定ツール
ソフトウェアやハードウェ
アの応答性能を検証
機能テストツール
規定した機能を果たすかどう
かを検証。単体試験の一部
カバレッジ測定ツール
プログラムの制御構造を網羅
するホワイトボックステスト
技法を支援
ソースコード解析ツール
特定の欠陥や欠陥につながる
可能性のあるソースコード上
の特徴を自動的に発見する
ツール
GUI操作自動化ツール
キーボードやマウス操作を記録
(キャプチャ)し、テストシナリ
オとして保存、このシナリオを再
生(リプレイ)し、テスト対象を
記録時と同じ動作させるツール (主
にリグレッションテストに使用)
ソースコード
解析ツール
アジェンダ
静的解析ツール選択のポイント
静的解析ツールを使用したレビュー効率向上のポイント
ソースコード検証サービスのご紹介
ベンダー提供ツールによる
静的コード検証を超える価値のご提案
静的テストと動的テストの違い
静的解析ツールを使用するモチベーション
様々なタイプの静的解析ツール
静的解析ツールの選択スコープ
静的解析ツール選択のポイント
ソフトウェア品質向上セミナー
2015.07.17
静的テストとは?
静的テストとは、プログラムを動作させずにテストすること
ドキュメント、ソースコード等をレビュー・インスペクションすること
…
静的解析ツールはレビュー・インスペクションを支援するツール
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;
プログラム・モジュール
コンパイル
静的テスト
動的テスト
静的解析
ツール
工程別の欠陥混入・欠陥発見・修正コスト
ソフトウェアの欠陥を未然に発見することで修正に関わるトータルコスト
を削減できる。( Shift Left)
Applied Software Measurement, Caper Jones
Coding
Unit Test
Function Test
Field Test
Post Release
$25
$100
$250
$1,000
$16,000
% Defects introduced in this phase % Defects found in this phase% Cost to repair defects In this phase
静的解析ツールとは
上記はC/C++ソースコードを検証できる商用静的解析ツールの一部を抜粋したものです。 各社の静的解析ツールの名称、社名等は各社の登録商標です。
静的解析ツールとはプログラムを実行せずに、プログラムを評価する
ツール全般を表す。
(反対にプログラムを実行する場合は動的解析ツール)
狭義な静的解析ツール
ソースコード上の欠陥を検出するツール
•
Coverity Qulaity Advisor
、
Klocwork Insight
、Fortiry SCA、CodeSonar、(C++test)
•
PGRlief、QAC/QAC++、LDRA、anyWarp CodeDirector
広義な静的解析ツール
ソフトウェアメトリクスやクローンコードを検出する静的解析ツール
•
Understand、Lattix
ランタイムエラー検出ツール
•
DevPartner、Purify、Insure++
静的解析ツールの仕組み(1)
パターンマッチタイプの静的解析ツール
ソースコードの記述方法に着目し、スタイルやコーディング規約に沿った厳格な
コーディングを実施する場合は、パターンマッチタイプの静的解析ツールが有効である。
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 (CERT)
fwrite() が書き込み操作を
null 文字で終了すると想
定しない
パターンマッチタイプ
の静的解析ツールは、
関数の内容を評価せず
に一致した場合には指
摘とする場合が多い。
FIO18-C
欠陥のパターンを多く持って
いるほど優秀な静的解析ツー
ルと言える。しかし
指摘の件
数が増える
という欠点もある。
静的解析ツールの仕組み(2)
ビルドキャプチャータイプの静的解析ツール
プログラムの動作に着目し、主に制御フロー・データフロー解析を実行するタイプの
静的解析ツールで、実際の欠陥を検出したい場合に有効である。
コンパイル
≒
≒
実機上でエミュレーション
ランタイムライブラリに印加
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;
動的テスト
(ランタイムエラー検出)
24: pData =