Rogue Wave
Klocwork 11.0/11.1/11.2
アップデート
Masaru Horioka
Senior Sales Engineer – APAC
Rogue Wave Software
はじめに
• Klocwork開発チームはアジャイル開発体制をとっており、1年に1回のメ
ジャーバージョンアップ、および3ヶ月ごとのマイナーバージョンアップ
ににより、新機能の追加、機能改善、バグフィクスを行っています。
• 新バージョンを利用するためには有効なサブスクリプション契約または保
守契約が必要です。
– メジャーバージョンアップの際にはライセンスファイルが変更されま
す。
– 永久ライセンスをお持ちのお客様で、有効な保守契約をお持ちで無い
場合、新バージョン用のライセンスは発行されませんのでご注意くだ
さい。
Updates in Klocwork 11.2
Klocwork 2016.2 (11.2) まとめ
CONFIDENTIAL
• 新しい C/C++ エンジン – コードベースにより 10 - 30%の誤検知削減
• セキュリティチェッカーおよび MISRA C 2012 チェッカーの追加、MISRA
チェッカーヘルプの復活
• その他のチェッカーに対する変更
• 新コンパイラのサポート
• 重要な変更および修正
新しい C/C++ 解析エンジン
CONFIDENTIAL
• 64-bit 整数の正確なサポート、より良い数値レンジのトラッキング
による精度改善
– 10-30% の誤検知削減。特に以下のチェッカーの改善に寄与:
• ABV.* (Buffer overrun)
• NPD.* (Null pointer dereference)
• UNREACH.* (Unreachable code)
• INVARIANT_CONDITION.*
新規 CWE チェッカー(CWE-822)
CONFIDENTIAL
• SV.TAINTED.CALL.DEREF
• SV.TAINTED.DEREF
汚染されたポインタに対する
間接参照による脆弱性の検出
新規 MISRA C 2012 チェッカー
CONFIDENTIAL
MISRA.ARRAY.VAR_LENGTH.2012 MISRA C 2012 規則 18.8 の実装:
可変長の配列型は使用しないでくだ
さい。
MISRA.IDENT.DISTINCT.C90.2012
MISRA.IDENT.DISTINCT.C99.2012
MISRA C 2012 規則 5.2 の実装:同
一のスコープと名前空間内で宣言さ
れた識別子は区別する必要がありま
す。
MISRA.LITERAL.NULL.PTR.CONS
T.2012
MISRA C 2012 規則 11.9 の実装:
マクロ NULL は、唯一許可された形
式の整数 Null ポインター定数です。
MISRA.MEMB.FLEX_ARRAY.2012 MISRA C 2012 規則 18.7 の実装:
フレキシブル配列メンバーは宣言し
ないでください。
MISRA.STDLIB.BSEARCH.2012 MISRA C 2012 規則 21.9 の実装:
<stdlib.h> のライブラリ関数
bsearch、qsort は使用しないでくだ
さい。
MISRA チェッカーヘルプ(権利の関係でインター
ネット上および日本語版はありません。)
CONFIDENTIAL
• Klocworkサーバーの以下のURLで参照可能
– MISRA C 2012
http://<your_kw_server>:<port>/documentation/help/concepts/misracc
heckerreference_2012.htm
– MISRA C++ 2008
http://<your_kw_server>:<port>/documentation/help/concepts/misracc
heckerreference.htm
– MISRA C 2004
http://<your_kw_server>:<port>/documentation/help/concepts/misracc
heckerreference1.htm
その他のチェッカーの変更
CONFIDENTIAL
• 以下のURLの[チェッカーの改善]を参照ください
– https://support.roguewave.com/documentation/klocwork/jp/11-
x/whatsnewmain/
• 以下のURLの[チェッカーの問題]を参照ください
– https://support.roguewave.com/documentation/klocwork/jp/11-
x/fixedissues11-2/
新規/改善されたコンパイラ対応
CONFIDENTIAL
• 新しくサポートされるコンパイラ
– Panasonic MN101E/MN101L
– Renesas RH850
• 改善/バグフィクスの対象となるコンパイラ
– ARM
– Green Hills GHS
その他の重要な変更・修正
CONFIDENTIAL
• PATH チェッカーAPI
– 一部のAPIに変更があります。PATHチェッカーAPIを用いてカスタムチェッカーを
作成しているお客様は以下のガイドを参考にカスタムチェッカーを変更する必要が
あります。
– https://support.roguewave.com/documentation/klocwork/en/11-
x/importantchangestothepathapiinversion112/
• C#チェッカーとCWE IDのマッピング表および分類基準が追加されました
– https://goo.gl/YsVp04
• kwmavenにおいて–s および –gs オプション指定が動作しない不具合が修正されました
• その他の新機能およびバグフィクスは以下をご覧ください。
– https://support.roguewave.com/documentation/klocwork/jp/11-x/whatsnewmain/
– https://support.roguewave.com/documentation/klocwork/jp/11-x/fixedissues11-2/
Updates in Klocwork
11.0/11.1
Klocwork 11.0および11.1 アップデート
• 継続的インテグレーションのための新しいKlocworkプラグイン
• ISO 26262/IEC 61508 ツール認証取得
• 新チェッカー、既存チェッカーの機能改善
• ユーザビリティーおよびスケーラビリティの改善
• 対応プラットフォームの拡充
• その他の改善
© 2015 Rogue Wave Software, Inc. All Rights Reserved. 14
継続的インテグレーション
のための
新しいKlocworkプラグイ
ン
静的解析を継続的インテグレーションで実
行する際の課題
• 大規模C/C++プロジェクトにおける解析パフォーマンス
– 対象ソフトウェアの例
• Android/ネットワーク機器等OSを含む組み込みプラットフォーム向
けソフトウェア、プリンタ、カーナビ
• 機能拡張が続くレガシーアプリケーション
• 現状の利用方法:全体フル解析の自動化がほとんど。(コミットのたびに解析
ではない)
• 1000万行以上のコード解析の実行には5−20時間かかる。開発者は解析結果
を得られるまで待つ必要があり、その結果不具合の発見から修正までの時間も
長くなる。
• 全体フル解析を毎回やっていると時間的だけでなく、システムリソース的にも
無駄が多い
© 2015 Rogue Wave Software, Inc. All Rights Reserved. 16
新しい継続的インテグレーション向け
Klocworkプラグイン
• ゴール
• 継続的インテグレーションにパフォーマンス最適化された静的解析の提供
• 提供される機能
– 対象言語:C++
– 高速な差分解析(小さな変更であれば数分から1時間)
– 新規不具合、修正された不具合のみ報告
– Jenkins, Team City向けプラグインの提供
– カスタム統合のためのコマンドラインインターフェースの提供
– 解析結果はJenkinsビルド上または、Klocworkデスクトップ上で表示
© 2015 Rogue Wave Software, Inc. All Rights Reserved. 17
新しいKlocworkプラグインを利用した継続的イ
ンテグレーション
変更のコ
ミット
SCM
コマンドライ
ン
Klocworkデスク
トップ
Jenkinsで結果表
示、選別が可能
独自ツール
差分解析の実行
差分解析結果の表示
Jenkins上での解析結果の表示
Jenkins job上からKlocworkポータルに
ログインすると、トレースバックメッ
セージの表示や指摘の選別が可能
Jenkins上での指摘の選別
JenkinsプラグインとKlocworkデスクトップの統合
指摘情報をJenkinsジョブページから、Klocworkデスクトップ上にダウンロードすることも可能
© 2014 Rogue Wave Software, Inc. All Rights Reserved 21
どのJenkins plug-inを利用したらよいのか?
用途に応じて選択
Pluginのタイプ いつ使用するべきか?
Klocwork Jenkins Plugin • 大規模C/C++ コード
• 継続的インテグレーション(小さな変
更の度にチェックイン+テスト)を1
日1回以上実施
• チェックイン毎に継続的インテグレー
ションを実施
• 差分解析結果が知りたい
Emenda Jenkins Plugin
その他のJenkinsプラグイン
マニュアル統合
• (C/C++に加えて)Java /C#を使用
• 静的解析の頻度は一日一回以下
• 全体的な解析結果、トレンドデータ、
レポートが欲しい
リソース
© 2014 Rogue Wave Software All Rights Reserved
• 継続的インテグレーションへの統合
https://support.roguewave.com/documentation/klocwork/ja/11-
x/continuousintegration/
ISO 26262/IEC 61508
Klocwork 2016でISO 26262/IEC 61508の
ツール認証を取得しました。
チェッカーの改善
新チェッカー
• セキュリティ
– SV.TAINTED.PATH_TRAVERSAL CWE-22:Pathトラバーサル
– RCA CWE-327:危険な暗号化アルゴリズムの使用
– HCC, HCC.PWD, HCC.USER, CWE-798: ハードコードされた認証情報の使用 (New
in 2016.1)
– RCA.HASH.SALT.EMPTY, CWE-759: Saltを指定しない一方向ハッシュの使用 (New
in 2016.1)
• MISRA (All new in 2016.1)
– MISRA.BITS.NOT_UNSIGNED.PREP (MISRA C++ 2008:5-0-21)
– MISRA.FILE_PTR.DEREF.2012, MISRA.FILE_PTR.DEREF.CAST.2012,
MISRA.FILE_PTR.DEREF.INDIRECT.2012,
MISRA.FILE_PTR.DEREF.RETURN.2012, MISRA C 2012:22.5
– MISRA.FUNC.UNUSEDRET.2012, MISRA C 2012:17.7
• 最新MISRA 2012 カバレッジ 80%
MISRA 2012のサポート、CWE Top 25のサポートを拡充
CONFIDENTIAL
新C/C++ チェッカ: SV.TAINTED.PATH_TRAVERSAL(CWE-22)
CONFIDENTIAL
• 問題 : 検証されてない入力データを用いてファイルパスを生成
• リスク: 任意のファイルへのアクセスによる情報漏えいやシステム破壊
• 修正: 入力値に対するチェックを行う
新C/C++ チェッカ: RCA(CWE-327)
CONFIDENTIAL
• 問題 : 強度に問題のある暗号化アルゴリズムの使用
• リスク:強度に問題のある暗号化アルゴリズムの使用がシステムやデータの
脆弱性に繋がる
• 修正: 安全な代替アルゴリズムを使用
新C/C++ チェッカ: RCA.HASH.SALT.EMPTY(CWE-
759)
CONFIDENTIAL
• 問題: ハッシュ関数に対するSaltが指定されていない
• リスク: Saltが指定されていないとハッシュ値の解読が容易になるため、脆
弱性につながる
• 修正: Saltを指定する
新C/C++チェッカ: HCC(CWE-798)
CONFIDENTIAL
ハードコード化され
たユーザID、パス
ワード
削除されたチェッカ
• MISRA.FOR.COUNTER.NO (MISRA-C++ 2008 rule 6-5-1)
• MISRA.FOR.INIT (MISRA-C:2004 rule 13.5)
• MISRA.ONEDEFRULE (MISRA C++ 2008 rule 3-2-2)
既に使用されていないが、使用を推奨しないチェッカを削除
CONFIDENTIAL
その他のチェッカの改善:
• 以下をご参照ください
– https://support.roguewave.com/documentation/klocwork/jp/11-
x/whatsnewmain/#Checkerimprovements
– https://support.roguewave.com/documentation/klocwork/jp/11-
x/fixedissues11-1/ - Checkerissues
– https://support.roguewave.com/documentation/klocwork/jp/11-
x/fixedissues11-0/
• Windows向けナレッジベースを拡充による、メモリーリーク、リソースリー
クのチェッカの未検知削減
• MISRA チェッカの精度改善
• ABV (配列オーバーラン)チェッカの精度改善
• C++クラス配列に対するNPDチェッカの誤検知削減
既存チェッカ
CONFIDENTIAL
その他の改善
CONFIDENTIAL
• McCabe Cyclomatic Complexity Metric がJava解析でも利用可能になりまし
た
• Android M, C++ 11 / C++ 14でパースエラーが発生する問題を修正しました
• 一部のC++ boost ライブラリ、 C#、Javaで発生していたパースエラーの問
題を修正しました。
• バージョン10.x から11.x へのプロジェクトのimport機能の問題を修正しま
した。
リマインダ - MISRA checkerのインストー
ル
CONFIDENTIAL
• kwdeployコマンドでMISRA checker zip パッケージをインストール
• プロジェクトの構成ページで使用する MISRA分類基準 (2004, 2008, 2012)
をインポート
• チェッカの有効・無効化
ユーザビリティおよびス
ケーラビリティの改善
ユーザビリティの改善
CONFIDENTIAL
• “Show inline code(インラインコードを表示)” をクリックすると、マク
ロや関数定義の冒頭部が画面遷移せずに表示されるようになりました。
スケーラビリティの改善
CONFIDENTIAL
• kwxsync
– kwxsync によるプロジェクト間のステータス同期のパ
フォーマンスが向上しました
– 異なるプロジェクト間の指摘の同期の精度が向上しました。
• その他の改善
– 特定の大規模C#コードの解析における問題を修正しました。
対応プラットフォーム
サポート対象プラットフォーム
• 特定のディストリビューションについてはサポート対象バージョ
ンを明記
– CentOS (5.1, 6.1, 7.1), Ubuntu (12.04, 14.04, 15.1)
• 書かれていないものについてはglibc 2.5以降のものをサポート
– Klocwork 2016以前はglibc 2.3以降
サポート対象Linuxについて
追加されたプラットフォーム
• Windows 10
• Mac OS X El Capitan (10.11)
サポート対象プラットフォーム
• Windows XP
• Windows Server 2003
• Red Hat Enterprise Linux 4.X
• SUSE Enterprise 10
• Mac OS X Mountain Lion (10.8)
• Any Linux with glibc 2.4 or lower
サポート対象外となったプラットフォーム
追加されたIDEサポート
• Android Studio 1.0, 1.4, 1.5, and 1.5.1
• 64bit Windows向けに特別なインストーラが追加された
– kw-insight-android-installer.windows.exe
• それ以外はIDEA plugin インストーラを使用
– kw-insight-idea-installer.linux.sh
• プラグインから解析できる言語はJava のみ
Android Studio
その他のIDEの改善
Visual Studio
• Clang サポート(for Android
development)
その他のIDEの改善
• C/C++ and C# 混在
プロジェクトのサ
ポート
Visual Studio
追加プラットフォームサポート
• コンパイラ
– Synopsis ARC MetaWare
– Target Chess 12R1
– Intel C++ 16.0
• IDE
– Eclipse 4.5
– Wind River Workbench 4.0
– IntelliJ IDEA 14.1.5, 15.0.5, and 2016.1
– QNX Momentics 6.3.2
• その他
– Gradle 2.7 - 2.9
– Jenkins 1.596 and 1.659
その他の重要な変更
その他の重要な変更
• オンラインマニュアル
– https://support.roguewave.com/documentation/klocwork/jp/11-x/
• Klocwork 2016.x (Version 11.x) は専用のライセンスが必要です。有効なサポートまたはサ
ブスクリプション契約をお持ちの方は無料でバージョンアップの入手が可能です。まだ入
手されていない場合は、代理店まはた以下のメールアドレスにご連絡ください。
license@roguewave.com
• 新しいKlocworkの継続的インテグレーション機能を使うには別ライセンスが必要です。
価格またはお試しになりたい方は代理店までお問い合わせください。
• マイグレーションについて
– "Import" 機能を用いるとプロジェクト単位での以降が可能です
– プロジェクトルート全体のマイグレーションには複雑なステップが必要な場合があ
りますのでマニュアルをご参照ください。
– https://support.roguewave.com/documentation/klocwork/jp/11-
x/upgradingfromapreviousversion/
Klocworkバージョン11.2アップデート

Klocworkバージョン11.2アップデート

Editor's Notes

  • #2 Rogue Wave boilerplate: Rogue Wave provides software development tools for mission-critical applications. Our trusted solutions address the growing complexity of building great software and accelerates the value gained from code across the enterprise. Rogue Wave’s portfolio of complementary, cross-platform tools helps developers quickly build applications for strategic software initiatives. With Rogue Wave, customers improve software quality and ensure code integrity, while shortening development cycle times. Elevator pitch: Rogue Wave helps organizations simplify complex software development, improve code quality, and shorten cycle times
  • #41 Honeywell
  • #42 Honeywell
  • #43 Honeywell
  • #46 Honeywell
  • #49 Rogue Wave boilerplate: Rogue Wave provides software development tools for mission-critical applications. Our trusted solutions address the growing complexity of building great software and accelerates the value gained from code across the enterprise. Rogue Wave’s portfolio of complementary, cross-platform tools helps developers quickly build applications for strategic software initiatives. With Rogue Wave, customers improve software quality and ensure code integrity, while shortening development cycle times. Elevator pitch: Rogue Wave helps organizations simplify complex software development, improve code quality, and shorten cycle times