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