• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
26
0
0

読み込み中.... (全文を見る)

全文

(1)

ソースコード品質・レビュー品質

を改善するポイント

株式会社 富士通コンピュータテクノロジーズ

ソフトウェア品質向上セミナー

2015.07.17

1328kc1

(2)

アプリケーション開発における主な効率化ツール

テストツール一覧

カバレッジ

測定ツール

機能テスト

ツール

負荷生成

ツール

ソースコード

解析ツール

操作自動化

(キャプチャ&リプレイ)

ツール

性能測定

ツール

テスト効率化

ツール

負荷生成ツール

システムの負荷を発生させ、ア

プリケーションの正常性・可用

性を検証

性能測定ツール

ソフトウェアやハードウェ

アの応答性能を検証

機能テストツール

規定した機能を果たすかどう

かを検証。単体試験の一部

カバレッジ測定ツール

プログラムの制御構造を網羅

するホワイトボックステスト

技法を支援

ソースコード解析ツール

特定の欠陥や欠陥につながる

可能性のあるソースコード上

の特徴を自動的に発見する

ツール

GUI操作自動化ツール

キーボードやマウス操作を記録

(キャプチャ)し、テストシナリ

オとして保存、このシナリオを再

生(リプレイ)し、テスト対象を

記録時と同じ動作させるツール (主

にリグレッションテストに使用)

ソースコード

解析ツール

(3)

アジェンダ

静的解析ツール選択のポイント

静的解析ツールを使用したレビュー効率向上のポイント

ソースコード検証サービスのご紹介

ベンダー提供ツールによる

静的コード検証を超える価値のご提案

(4)

静的テストと動的テストの違い

静的解析ツールを使用するモチベーション

様々なタイプの静的解析ツール

静的解析ツールの選択スコープ

静的解析ツール選択のポイント

ソフトウェア品質向上セミナー

2015.07.17

(5)

静的テストとは?

静的テストとは、プログラムを動作させずにテストすること

ドキュメント、ソースコード等をレビュー・インスペクションすること

静的解析ツールはレビュー・インスペクションを支援するツール

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;

プログラム・モジュール

コンパイル

静的テスト

動的テスト

静的解析

ツール

(6)

工程別の欠陥混入・欠陥発見・修正コスト

ソフトウェアの欠陥を未然に発見することで修正に関わるトータルコスト

を削減できる。( 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

(7)

静的解析ツールとは

 上記はC/C++ソースコードを検証できる商用静的解析ツールの一部を抜粋したものです。  各社の静的解析ツールの名称、社名等は各社の登録商標です。

静的解析ツールとはプログラムを実行せずに、プログラムを評価する

ツール全般を表す。

(反対にプログラムを実行する場合は動的解析ツール)

狭義な静的解析ツール

ソースコード上の欠陥を検出するツール

Coverity Qulaity Advisor

Klocwork Insight

、Fortiry SCA、CodeSonar、(C++test)

PGRlief、QAC/QAC++、LDRA、anyWarp CodeDirector

広義な静的解析ツール

ソフトウェアメトリクスやクローンコードを検出する静的解析ツール

Understand、Lattix

ランタイムエラー検出ツール

DevPartner、Purify、Insure++

(8)

静的解析ツールの仕組み(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

欠陥のパターンを多く持って

いるほど優秀な静的解析ツー

ルと言える。しかし

指摘の件

数が増える

という欠点もある。

(9)

静的解析ツールの仕組み(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 =

malloc

(size);

プログラム・モジュール

テスト・デバック

33:

return -1

;

コンパイラ呼び出し

ビルドキャプチャ

中間表現

解析(シミュレーション)

静的解析ツール

ビルドキャプチャータイプの

静的解析ツールは、

動的テストと同じ動作が可能

エラー検出

(10)

静的解析ツールのスコープ

それぞれのツールには、対象となるスコープがあるため、それを理解して

使用するツールを選択する必要がある。

開発規模

(Steps)

小規模

中規模

100k~

大規模

1M~

PGRelief

Coverity Quality Advisor

コーディング

インテグレーション

Klocwork Insight

Fortify SCA

コーディング中心の

開発を行う場合

(パターンマッチタイプ)

流用やOSS等を多用する場合、

また集約型の開発を行う場合

(ビルドキャプチャータイプ)

PGRelief

スタイルを含め厳格なコーディングを実施する必要がある場合

Fortify SCA

ソースコード上のセキュリティ脆弱性を調査したい場合

Klocwork

一つのツールで全ての範囲(コーディング~インテグレーション)をカバーしたい場合

Coverity

ソースコード上の欠陥のみを検出し、誤検知・過検知を極力抑えたい場合

 上記は弊社の調査結果です。  「過検知」はFCT独自に使用している用語です。

FC

T

使

(11)

ソースコードの品質

そもそも、何を検査(レビュー)したいか?

JIS-X0129(ISO 9126)品質特性とソースコードの品質

[出典]組み込みソフトウェア開発向け コーディング作法ガイド[C言語版]

「機能性-セキュリティ」を追加している。

品質特性

品質副特性

ソースコードの品質(例)

信頼性

成熟性

 ソースコードを使い込んだ時の欠陥の少なさ

障害許容性

 欠陥への対処(例外処理等が行われているか?)

保守性

解析性

 作ったソースコードは理解しやすいか?

変更性

 将来、ソースコードを改版しやすいつくりになっているか?

安定性

 ソースコードを改版する際に、プログラムへの影響が少ないつく

りになっているか?

試験性

 テストやデバックがしやすいか?

移植性

環境適応性

 他のOSやアーキテクチャ、またソフトウェアに移植しやすいソー

スコードになっているか?

効率性

時間効率性

 適切なアルゴリズムを使用しているか?

資源効率性

 無駄なスタックやヒープ領域を使用していないか?

機能性

セキュリ

ティ

 セキュアなコーディングがされているか?

C

C

C

P

P

P

P

P

P

PGRelief

C

Coverity

(12)

静的解析ツール選択のポイント

その他、静的解析ツールを選択する時の検討項目例

静的解析ツールで検出したい事象

遵守するべきコーディングルール

ROI

開発スタイル・開発規模に適した

静的解析ツールを選択しましょう!

(13)

ソースコードに含まれる欠陥の考え方

静的解析ツールで検出できるもの

静的解析ツールの能力

レビューの目標と分析

静的解析ツールを使用した

レビュー効率向上のポイント

ソフトウェア品質向上セミナー

2015.07.17

(14)

レビューの工数

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人月

まだまだ、現実的な工数には程遠い

レビュー可能な件数に絞り込みたい

(15)

ソースコード上の欠陥について

ISO/IEC 2383-14

JIS X 0014

定義

Failure

故障

要求された機能を遂行する機能単位の能力がなくなること

Fault

欠陥、障害

要求された機能を遂行する機能単位の能力の縮退、または喪失を引き

起こす異常な状態

Error

誤差・誤り

計算、観測若しくは測定された値または状態と、真の、指定された若

しくは論理的に正しい値または状態との間の相違

Detect

指摘、検知

静的解析ツールの検出した指摘

ソースコード

実行時

欠陥

欠陥

欠陥

欠陥

故障

故障

指摘

指摘

指摘

指摘

指摘

指摘

静的解析ツールの指摘

開発者が期待する

静的解析ツールの指摘?

動的テスト

静的テスト

ソースコードには

潜在化した欠陥も含まれている

欠陥が顕在化したものが故障となる

静的解析ツールは

欠陥の可能性を検出

動的解析ツールは

故障を検出

過検知

欠陥ではあるが

修正は必要ない

誤検知

欠陥ではない

(16)

ソースコード上の欠陥含有率

ソースコード上に含まれる欠陥含有率は、工程に応じて変化する。

レビュー・テストを実施する際、また静的解析ツールを適用する際の指標

が必要となる。(下記は成功プロジェクトの平均参考値)

実装

単体

結合

統合

詳細

基本

機能

0.9

2.1

2.8

3.5

2.6

2.2

0.3

1.0

2.0

3.0

4.0

Detect / KSteps

Schedule

(17)

静的解析ツールのポリシー

各ツールベンダーによって、解析結果やレビューに関するポリシー

(考え方)が違うため、その特性を理解してツールを選択する必要がある。

Positive

(検出する)

Negative

(検出しない)

過検知?

誤検知?

正検知

Positive

(検出する)

Negative

(検出しない)

過検知?

誤検知?

正検知

一般的な静的解析ツール

Coverity社静的解析ツール

検出数に違いがある

一般的な静的解析ツール

Coverity社静的解析ツール

解析結果

欠陥を確実に検出できることに重

点を置く為、誤検知・過検知の可

能性があっても検出する

実際に発生する故障の検出に重点

を置き、誤検知・過検知はなるべ

く排除する

レビュー

見逃し(

で開発者の負担となる

Ture Negative)は後工程

誤検知・過検知のレビューは開発

者の負担となる

 上記は弊社の調査結果です。  「過検知」はFCT独自に使用している用語です。

(18)

静的解析ツールの実力

レビューの品質予測には、静的解析ツールの実力を知ることが必要。

検知(

True Positive)を検出する能力(誤ったソースコードを検出する能力)

誤検知(

False Positive)を検出しない能力(正しいソースコードを検知しない能力)

静的解析ツール

ソースコード(結合工程)

陰性

(Negative)

True Negative

(検知不要)

4985.51 kStep

False Negative

(未検知)

5.07kStep

陽性

(Positive)

False Positive

(誤検知)

3.39 kStep

True Positive

(検知)

5.93 kStep

𝑁𝑒𝑔𝑎

𝑡𝑖𝑣𝑒

+

𝑃𝑜

𝑠𝑖𝑡

𝑖𝑣𝑒

=

100%

正しいソースコード

間違ったソースコード

欠陥含有率

4,989kStep

11 kStep

(19)

正検知率、誤検知率の算出結果

プロプライエタリなソースコード(5M Step)の例

欠陥

未検知

F.N.

正検知

T.P.

誤検知

F.P.

誤検知率:0.068%

正検知率

:53.90%

100%

T.N.

(5569件?)

6501件

3242件

99.78%

0.22%

欠陥なし

正しいソースコード

欠陥あり

欠陥を含むソースコード

陰性

(Negative)

99.932%

46.10%

陽性

(Positive)

0.068%

53.90%

100%

欠陥なし

(20)

ベイズの定理応用例

静的解析ツールを使用して解析結果が与えらとき、斜線面積の広さが、

欠陥の発生する確率を示している

OVERRUN

UNINIT_CTOR

クラス内での未初期化

RESOURCE_LEAK

リーク

UNINIT

USER_AFTER_FREE解放後のアクセス

FORWARD_NULL

STRING_OVERFLOW

オーバフロー

REVERSE_INULL

BAD_SIZEOF

DIVIDE_BY_ZEROゼロ除算

31%

25%

13%

9%

8% 4% 3%... 1%

33%

75%

59%

15%

71%

50%

71%

58%

80%

0.1023

(20%)

0.1875

(36%)

0.0767

(15%)

0.0135

(3%)

0.0568

(11%)

0

.0

2

(

4

%

)

0.0

2

1

3

(4

%

)

0.0

1

7

4

(3

%

)

0.0

2

4

(5

%

)

(21)

レビュー効率向上のポイント

その他、レビュー効率向上の検討事項

静的解析ツールの特色(ポリシー)

静的解析ツールの検出能力

レビューそのものの状況把握

静的解析ツールは、

過検知・誤検知があることを前提に

目標を設定してからレビュー実施しましょう!

(22)

静的解析ツールの選択とレビューの効率化のポイント

ソースコード検証サービス

まとめ

ソフトウェア品質向上セミナー

2015.07.17

(23)

まとめ

① 静的解析ツールの選択ポイント

② 静的解析ツールを使用したレビュー効率向上のポイント

開発スタイル・開発規模に適した

静的解析ツールを選択しましょう!

静的解析ツールは、

過検知・誤検知があることを前提に

目標を設定してからレビュー実施しましょう!

(24)

サービスメニュー概要

ソースコード品質・レビュー品質を改善するサービスメニュー

P

D

C

A

コーディング規約

静的解析

傾向分析・詳細分析

コーディング

解析結果

規約作成支援

レビュー

未検知分析

レビュー支援

コード修正

サービス概要

静的解析

最先端の静的解析ツールを活用し、通常の人的レビューでは発見できないコード上の潜在欠陥を検

出します(トライアル解析を無償で実施します)

傾向分析

静的解析ツールの弱点である膨大な指摘の中から、開発の状況に合わせて正しい指摘(誤検知・過

検知の排除)とレビューの優先順位を、弊社の分析技術を用いて抽出します

詳細分析

弊社のエンジニアが、静的解析の指摘を一件毎にレビューし、欠陥のメカニズム・影響度・修正候

補等を提示します

未検知分析

複雑な構造の重大欠陥等、汎用の静的解析ツールでは検出できない欠陥を、静的解析ツールの機能

やOSSをベースとしたツール等を活用して同一パターンを検出し、欠陥見逃しを防ぎます

レビュー支援

静的解析の結果やレビュー後の修正状況を管理し、第三者のチェックを行うことで、重大欠陥の修

正漏れや見逃しを防止します

規約作成支援

静的解析ツールの分析結果やレビュー支援状況から、お客様の開発の効果のあるコーディング規約

作成を支援します(特に「信頼性」や「セキュリティ」の観点)

弊社のサービス お客様のプロセス・資産

(25)

商標について

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.の登録商標です。

(26)

参照

関連したドキュメント

えて リア 会を設 したのです そして、 リア で 会を開 して、そこに 者を 込 ような仕 けをしました そして 会を必 開 して、オブザーバーにも必 の けをし ます

しかし , 特性関数 を使った証明には複素解析や Fourier 解析の知識が多少必要となってくるため , ここではより初等的な道 具のみで証明を実行できる Stein の方法

生活のしづらさを抱えている方に対し、 それ らを解決するために活用する各種の 制度・施 設・機関・設備・資金・物質・

3000㎡以上(現に有害物 質特定施設が設置されてい る工場等の敷地にあっては 900㎡以上)の土地の形質 の変更をしようとする時..

• パフォーマンス向上コーディネーター( PICO )を発電所各部に 配置した。 PICO は、⽇々の不適合/改善に関するデータのスク

2 次元 FEM 解析モデルを添図 2-1 に示す。なお,2 次元 FEM 解析モデルには,地震 観測時点の建屋の質量状態を反映させる。.

状態を指しているが、本来の意味を知り、それを重ね合わせる事に依って痛さの質が具体的に実感として理解できるのである。また、他動詞との使い方の区別を一応明確にした上で、その意味「悪事や欠点などを

状態を指しているが、本来の意味を知り、それを重ね合わせる事に依って痛さの質が具体的に実感として理解できるのである。また、他動詞との使い方の区別を一応明確にした上で、その意味「悪事や欠点などを