...

IBM Software Group © 2009 IBM Corporation ®

by user

on
Category: Documents
26

views

Report

Comments

Transcript

IBM Software Group © 2009 IBM Corporation ®
®
IBM Software Group
Java、
、C/C++の
のソフトウェアコード静的解析
ソフトウェアコード静的解析ソリューション
静的解析ソリューションご
ソリューションご紹介
~IBM Rational Software Analyzer~
~
日本アイ
日本アイ・
アイ・ビー・
ビー・エム株式会社
エム株式会社 ソフトウェア事業
ソフトウェア事業
Rational クライアント テクニカル プロフェッショナルズ
© 2009 IBM Corporation
IBM Software Group | Rational software
Rationalの
のポートフォリオ
メインフレーム
開発ドメイン
開発ドメイン
ビジネス・
ビジネス・ドメイン
Rational
RationalRhapsody
Rhapsody
Rational
RationalSoftware
SoftwareArchitect
Architect
Rational
RationalDeveloper
Developerfor
forPower
Power
Rational
RationalDeveloper
Developerfor
forSystem
Systemzz
Rational
RationalSystem
SystemArchitect
Architect
Rational
RationalAsset
AssetAnalyzer
Analyzer
エンタープライズ・
エンタープライズ・
アーキテクチャー
Rational
RationalDOORS
DOORS
Rational
RationalRequirements
Requirements
Composer
Composer
プロダクト/プロジェクト
プロダクト プロジェクト・
プロジェクト・
ポートフォリオ
マネジメント
Rational
RationalFocal
FocalPoint
Point
計測と
計測と
レポーティング
分析と
分析と設計/開発
設計 開発
要求定義
要求管理
品質管理
構成管理
変更管理
Rational
RationalTeam
Team Concert
Concert
Rational
RationalInsight
Insight
リリースの
リリースの管理
プロダクション
オペレーション
組込みソフトウェア
IT
Rational
RationalBuild
BuildForge
Forge
Rational
RationalQuality
QualityManager
Manager
Rational
RationalPerformance
PerformanceTester
Tester
Rational
RationalFunctional
FunctionalTester
Tester
Rational
RationalTest
TestRealTime
RealTime
Rational
RationalPurifyPlus
PurifyPlus
Rational
Rational Software
Software
Analyzer
Analyzer
セキュリティーと
セキュリティーと
コンプライアンス
Rational
RationalAppScan
AppScan
Rational
RationalPolicy
PolicyTester
Tester
System and Software Lifecycle Processes
2
IBM Software Group | Rational software
開発の
開発の早期段階から
早期段階から品質向上
から品質向上の
品質向上の必要性
『National Institute of Standards and Technology』の
開発コスト
開発コストの
コストの80 % は
問題の
問題の特定とその
特定とその修復
とその修復に
修復に費やされる
レポートによると、 …
Caper Jones 著の『Applied Software Measurement』 では
コーディングで
コーディングで作りこまれる欠陥
りこまれる欠陥(
欠陥(メモリ操
メモリ操
作など)
など)は、通常の
通常のテストでは
テストでは検出
では検出されにく
検出されにく
く、多くの場合
くの場合は
場合は運用後に
運用後に検出され
検出され、
され、修正
コストが
コストが莫大になってしまう
「1つの
つの欠陥修正
of Defect)※」は、
つの欠陥修正の
欠陥修正の費用(Cost
費用
コーディング時
ビルド時
テスト時
リリース後
-
¥ 2,500 / 欠陥
¥ 10,000 / 欠陥
¥ 45,000 / 欠陥
¥ 1,600,000 / 欠陥
静的解析ツール
静的解析ツールは
ツールは
この段階
この段階で
段階で欠陥を
欠陥を
発見し
発見し修正できる
修正できる
リリース後
リリース後は、
コストだけでなく
コストだけでなく
会社の
会社の信用にも
信用にも影響
にも影響
テスト段階
テスト段階で
段階で同様の
同様の欠
陥に対処すると
対処すると約
すると約20倍
20倍
の費用がかかる
費用がかかる
システムテスト
結合テスト
結合テスト
単体テスト
単体
テスト
費
用
コーディング
設
設 計
計
※$1 = ¥100 で換算
実装
実装
テスト
テスト
本番稼動
本番稼動
3
IBM Software Group | Rational software
人手によるレビューの効率化や
静的分析、動的分析の使い分け
コスト削減のために、
ツールによる静的分析を活用する
テスト
コーディング
静的分析:
静的分析:
動的分析:
動的分析:
『コードを
コードを実行せず
実行せず』
せず』、ソースコードに
ソースコードに信頼性、
信頼性、効
率性、
率性、保守性などの
保守性などの点
などの点で問題がないか
問題がないか検証
がないか検証
『コードを
コードを実行』
実行』し、ランタイム上
ランタイム上のパフォーマン
ス・メモリの
メモリの状況を
状況をモニターし
モニターし、問題の
問題の特定を
特定を実施
・コードレビュー
・実行時間分析(
実行時間分析(パフォーマンス分析
パフォーマンス分析)
分析)
・クラス間
クラス間の依存関係、
依存関係、パターン
・メモリ分析
メモリ分析
・コードの
コードのメトリクス 等
・コード・
コード・カバレッジ
Java 統合開発環境、
統合開発環境、静的、
静的、動的分析
Rational Application Developer
Java, C, C++ 静的解析
Rational Software Analyzer
C, C++, .NET 動的解析
Rational PurifyPlus
(組み込み向け用途が
用途が多い) Java, C, C++, Ada 静的解析、
静的解析、動的分析
Rational Test Realtime
4
IBM Software Group | Rational software
このような品質
このような品質の
品質の懸念がありませんか
懸念がありませんか?
がありませんか?
実装したコードに品質を落とす要素がないか?
Java, C/C++の一般的なお作法から外れていないか?
メモリーの解放、リソースのクローズを忘れていないか?
プログラム間の依存関係が循環し、メンテナンス性が悪くないか?
このクラスを変更すると影響はあるか?
各クラス、メソッドのコード行数(Lines Of Code)が多くなり、可読性に劣ってい
ないか?
しっかり作っていますか??
5
IBM Software Group | Rational software
Rational Software Analyzer (RSAR)
ソフトウェア開発
ソフトウェア開発
開発サイクル
サイクルの
の早期に
早期に欠陥を
欠陥を識別することにより
識別することにより
することにより、
、
サイクル
ソフトウェア品質
品質を
改善し
コストを
削減できます
ソフトウェア
品質
を改善
し、コスト
を削減
できます
なじみやすいEclipseインタフェース
の採用
Java、C/C++ の豊富な静的解析
ルール
充実したヘルプ文書、サンプル
見やすい結果レポート
(以下、Enterprise Editionのみ)
コマンドライン・インターフェースによ
るバッチ実行
Web上で結果(HTML)をプロジェク
トメンバーで閲覧
6
IBM Software Group | Rational software
Rational Software Analyzer 分析の
分析の種類
・「問題のある
問題のある」
のある」モデルや
モデルやコード、「
コード、「してはいけない
、「してはいけない」
してはいけない」プログラミングを
プログラミングを改善
・ソフトウェア・
ソフトウェア・メトリックを
メトリックを使い、欠陥の
欠陥の検出/予防
検出 予防を
予防を実施可能
・ソフトウェアの
ソフトウェアのトータルな
トータルな品質を
品質を改善し
改善し、修正にかかる
修正にかかるコスト
にかかるコストを
コストを削減
コード・
コード・レビュー (Java, C/C++)
• 対応した言語のベストプラクティスから外れたコードを検出、修正のヒント
J2EE, J2SE, パフォーマンス, セキュリティー, 命名 など
アーキテクチャー分析
アーキテクチャー分析 (Java, C/C++)
• クラス間の依存関係、循環的依存関係の検出に有効
デザインパターン、構造パターン、オブジェクト指向パターンなど
ソフトウェア・
ソフトウェア・メトリック (Java, C/C++)
• 開発対象成果物の品質測定指標(プロジェクトの欠陥予防)
全体行数(LOC)、プログラム実行行数、循環的複雑度 など
データフロー分析
データフロー分析 (Java, C/C++)
• リソースやメモリーリークの検出に有効
Buffer, SQL, ソケットのクローズの際に起こりえる問題 など
7
IBM Software Group | Rational software
RSARの
の2つの
つのエディション
つのエディション
エディション
Developer Edition
Enterprise Edition
ライセンス
ユーザーライセンス
サーバーライセンス
Eclipse 3.4 , Rational Application
Developer (RAD) 7.5 との統合
○
○
Java に対する分析(コード・レビュー、
アーキテクチャー分析、ソフトウェア・メ
トリクス、データフロー分析)
○
○
C/C++に対する分析(コード・レビュー、
アーキテクチャー分析、ソフトウェア・メ
トリクス、データフロー分析)
○
○
RSARの画面から手動でHTML/PDF
でレポート表示
○
○
コマンドライン・インターフェース
○
レポートとスキャンの集中管理および
自動化
○
Web上で結果(HTML)をチームメン
バーで閲覧
○
8
IBM Software Group | Rational software
(参考)
のJava関連
関連ルール
参考)RSAR, RAD, RSAの
関連ルール比較
ルール比較
RSAR 7.1
RAD 7.5
RSA 7.5
共通するルール・カテゴリー
Javaコードレビュー(RSAR, RAD, RSA)
RSARがルール数が多い
ルールの共通化が可能
Java アーキテクチャー分析(RSAR, RSA)
RSARにしかないルール・カテゴリー
Java ソフトウェア・メトリック
Java データ・フロー分析
RSAR
RAD
RSA
Rational Software Analyzer
Rational Application Developer
Rational Software Architect
9
IBM Software Group | Rational software
Java コードレビュー
単一ファイル内で複数のクラス/インタフェースを宣言しない
不要booleanの等価演算は使用しない
java.lang.String + 演算子を使用しない
ガーベジ・コレクションを呼び出さない
JDBCクエリー用にjava.sql.DataSourceを再利用する
ローカル変数の名前を同じ名前にしない
nullだけが代入されているフィールドを宣言しない
空の配列の代わりにNULLを戻さない
常に、コレクションを特定のサイズでインスタンス化する
System.exit を呼び出さない
同じメソッドを複数回呼び出さない
・・・
10
IBM Software Group | Rational software
C/C++ コードレビュー
デストラクターは、コンストラクターに割り振られているメモ
リーを削除する必要がある
メモリーの割り振りに成功したことを確認
メモリーの割り振り時と解放時に同じメカニズムを使用する
空のwhileループを使用しない
printfパターンでは、引数を使用しない
パターンの突合せに必要なprintf引数が欠落している
1ファイルに複数のmain関数を使用しない
newを使用して作成されたオブジェクトにポインターを絶対
に戻さない
コンストラクタでは、returnステートメントを使用しない
ポインターは数値型で多重定義しない
代入演算子はそれに対して代入をチェックしなければいけ
ない ・・・
11
IBM Software Group | Rational software
Java アーキテクチャ分析
アーキテクチャ分析
構造パターン
Component Tangle
相互依存型コンポーネントで構成
される構造アンチパターン
Component Global Butterfly
ほかの部分に重大な影響を与える可能
性
オブジェクト指向パターン
デザインパターン
Singleton
Factory Method
Component Tangleが検
出された。
された。ソースコードだけ
ソースコードだけ
では、
では、相互参照(
相互参照(循環参照)
循環参照)
は発見しにくいので
発見しにくいので、
しにくいので、図示
化すると効果的
すると効果的
12
IBM Software Group | Rational software
構造パターン
構造パターン
Utilクラスで
クラスでComponent
Global Butterflyが検出さ
検出さ
れた。
れた。ただし、
ただし、ユーティリ
ティークラスであるので
ティークラスであるので修正
であるので修正
する必要
する必要なし
必要なし
RSARのヘルプ(Eclipseインタフェース)
13
IBM Software Group | Rational software
Java ソフトウェア・
ソフトウェア・メトリック
開発対象成果物の品質測定指標
(プロジェクトの欠陥予防)
基本メトリック
行数
コードの行数
コメント数
パッケージ当たりの型の数
メソッドの数
属性の数
しきい値外
しきい値外の
値外の項目
が表示
複雑度メトリック
循環的複雑度(Cyclomatic Complexity)
クラス当たりの重み付けメソッド
試験(特にホワイトボックステスト)のしにくさや保守
(変更)作業のしにくさ
14
IBM Software Group | Rational software
複雑度メトリック
Complexity)
複雑度メトリック:
メトリック:循環的複雑度(Cyclomatic
循環的複雑度
1976年Tohmas Macabe(トーマス・マケイブ)により提唱
試験(特にホワイトボックステスト
ホワイトボックステスト)のしにくさや保守(変更)作業のしにくさ
ホワイトボックステスト
循環的複雑度 C= e - n + 2p
ある文献※では、Cが30を超えると構造的に疑問という指標を提示しています。
e: プログラム中に存在する基本ブロック (図では矢印の数)
if
n: プログラム中に存在する分岐点と合流点の数 (図では○の数)
p: サブルーチン数(含む自身のルーチン)
if
if
クラス単位の循環的複雑度
if
C = 12 - 9 + 2 *1 = 5
メソッド単位の循環的複雑度
※C.Jones : Applied Software Measurement Second Edition 1991
15
IBM Software Group | Rational software
C/C++ ソフトウェア・
ソフトウェア・メトリック
プログラム全体
全体の
メトリックスの
収集((基本
基本メトリック
メトリックのみ
のみ))
プログラム
全体
のメトリックス
の収集
メトリック
のみ
IBM Software Group | Rational software
Java データ・
データ・フロー
RSAR上
上でコンパイルされたコードから、潜在的なメモリーおよびリソースの問題を識別。
コンパイル
複数のクラスにわたる問題を検出可能
HttpSessionの無効化
ソケットのクローズ
SQL接続のクローズ
FileInputStreamのクローズ
InputStreamWriterのクローズ
17
IBM Software Group | Rational software
C/C++ データ・
データ・フロー
コンパイルされたコードを検討して、潜在的なメモリーおよびリソースの問題を識別。
コンパイル
include ファイルを検出して解決できるように、Eclipse プロジェクトが構成されている必要あり
IBM Software Group | Rational software
レポートの
レポートの生成
分析結果を
分析結果をHTML,PDFで
レポート生成
レポート生成
19
IBM Software Group | Rational software
Rational Software Analyzer 基本画面 (Eclipseインタフェース)
ソースコードの
ソースコードの
ビュー
プロジェクト・
プロジェクト・エク
スプローラー
ヘルプ
分析結果の
分析結果の
ビュー
20
IBM Software Group | Rational software
Rational Software Analyzer 適用ルールの設定
例:Javaコードレビューの
コードレビューの場合
J2EEベストプラクティス(
ベストプラクティス(63ルール
63ルール)
ルール)
J2SEベストプラクティス(
ベストプラクティス(308ルール
308ルール)
ルール)
Junit(8ルール)
ルール)
グローバリゼーション(
グローバリゼーション(47ルール
47ルール)
ルール)
セキュリティー(
セキュリティー(27ルール
27ルール)
ルール)
パフォーマンス(
パフォーマンス(39ルール
39ルール)
ルール)
プライベートAPI(3ルール)
ルール)
設計原則(
設計原則(9ルール)
ルール)
命名規則(
命名規則(37ルール
37ルール)
ルール)
個々のルールに
ルールに対してしきい値
してしきい値と
重大度を
重大度をカスタマイズ可能
カスタマイズ可能
21
IBM Software Group | Rational software
分析結果(
コードレビューの
分析結果(Javaコードレビュー
コードレビューの場合)
場合)
重大度ごとに
重大度ごとに
アイコンで
アイコンで区
別
ルールに
ルールに抵触した
抵触したソース
したソース
コードと
コードと該当位置を
該当位置を表示
クリックすると
クリックすると該当
すると該当ソー
該当ソー
スコードに
スコードにジャンプ
22
IBM Software Group | Rational software
分析結果に
コードレビューの
分析結果に対するアドバイス
するアドバイス(
アドバイス(Javaコードレビュー
コードレビューの場合)
場合)
分析結果の
分析結果の各結果を
各結果をクリック
するたびに、
するたびに、ルールに
ルールに対する
説明を
説明をダイナミックに
ダイナミックに表示
さらに「
さらに「サンプルと
サンプルとソリュー
ション」
ション」をクリックすると
クリックすると、
すると、解決
するためのコーディング
するためのコーディング例
コーディング例を
表示
23
IBM Software Group | Rational software
(参考)
参考)カスタムルール追加
カスタムルール追加
いくつかのテンプレートがあるの
で、ウィザード形式で設定。
テンプレートにないものはJava
コーディングで新規作成可能。※
※Rational Software Analyzerによる静的解析 Part 2 – Javaコード・レビューを拡張するためのルールとルールフィルターの作成
http://www-6.ibm.com/jp/domino01/mkt/rational.nsf/doc/005E7B55
IBM Software Group | Rational software
頻繁な分析のために自動化する:RSAR Enterprise Edition
②バッチ処理分析(自動化)
③結果HTMLページ作成
(結果の蓄積)
Webサーバー
(Tomcat)
・バッチスクリプト作成
①ルールのエクスポート
Server
・スケジュールによるスクリプト実行
④ブラウザで結果を閲覧
RSAR管理者
品質担当者
開発担当者
25
IBM Software Group | Rational software
RSAR Enterprise 解析結果 Webインターフェース
IBM Software Group | Rational software
さらに自動化を加速する:
Rational Build Forgeと RSAR Enterprise との連携
Build
Forge
RSAR
Enterprise
Reply
Server
Development
品質担当者
Manager
Server
Report Results
ソース管理
ソース管理
(CVS, ClearCase
RTC)
コード・
コード・レビュー結果
レビュー結果
のチェック
開発環境
Build
Manager
IDE
Build Forge管理者
ビルド・
ビルド・プロセスの
プロセスの実行
開発担当者
ビルド・プロセスの一環としてコードスキャンを実行可能
結果レポートを品質担当者、開発担当者、リーダー、PM、エグゼクティブが監視可能
長時間の分析をバッチ実行可能
27
IBM Software Group | Rational software
Rational Software Analyzer 導入の
導入の利点
早期の欠陥識別により、ソフトウェア品質改善、コスト削減
「問題のある」モデルやコード、「してはいけない」プログラミングの検出
人手によるレビュー効率化のために
事前のツールによる静的分析により、人手によるレビューのコストを下げる
レビュー対象の絞込み、優先順位づけに活用
ソフトウェア・メトリック : ソースコードの品質測定指標
アーキテクチャー分析 :クラス間の依存関係
使いやすく、わかりやすい
Eclipseインタフェースの採用
充実したヘルプ文書、サンプル
欠陥の少ないJavaコーディング・スキルの確立
見やすい結果レポート
PDF出力も可能
28
IBM Software Group | Rational software
Rational Software Analyzer 関連情報について
関連情報について
Rational Software Analyzer 製品紹介ページ
製品紹介ページ
http://www.ibm.com/software/jp/rational/products/design/swanalyzer/
IBM Rational Software Analyzer のここが凄
のここが凄い
http://www.ibm.com/software/jp/rational/products/design/swanalyzer/highlights/
ここからはじめるIBM
Rational Software Analyzer V7.x
ここからはじめる
http://www.ibm.com/jp/domino01/mkt/rational.nsf/doc/002636B1
テストが
テスト・
テストがソフトウェアの
ソフトウェアの品質を
品質を決める:
める:Rationalテスト
テスト・ソリューション
http://www.ibm.com/software/jp/rational/testsol/index.html
Rational Build Forge 製品紹介ページ
製品紹介ページ
http://www.ibm.com/software/jp/rational/products/scm/buildforge/
Rational Software Analyzer Developer Edition V7.1 導入・
導入・利用ガイド
利用ガイド
http://www.ibm.com/developerworks/jp/rational/library/qm/rsar/rsarde71guide/
Rational Software Analyzer による静的解析
による静的解析
http://www.ibm.com/developerworks/jp/rational/library/qm/rsar/rsar_features/
29
IBM Software Group | Rational software
30
Fly UP