品質とアジリティの両立を支援する開発ツールFUJITSU Software Agile⁺ Relief
機能 - Agile⁺ Relief C/C++ -

シフトレフト(注)の考え方でデリバリーサイクルを高速化

従来、テスト工程でしか検出できなかった障害もコーディング工程で検出できるため、手戻りが少なく、動作テストの工数削減に繋がります。問題箇所をピンポイントに指摘するため、開発者に負担をかけることなく、時間とコストの効率化を実現します。

  • (注)
    シフトレフト:前工程で品質を作り込むことで後工程での手戻りを防ぎ、デリバリー速度を高速化する考え方です。
Agile⁺ Relief の適用工程とその効果

富士通の開発で培った独自ノウハウでソフトウェア品質を向上

Agile⁺ Relief独自のノウハウのほか、各種コーディングガイドラインの適合性チェックも行います。様々な観点から網羅的 にプログラム欠陥を検出し、ソフトウェア品質の向上を実現します。

ISO 26262認証取得に貢献

Agile⁺ Reliefを利用することで、ISO 26262の各種要求への対応を実現します。

  • ツールの妥当性証明が不要(Part8)
    ISO 26262で求められる最も厳しい安全度水準であるASIL-D(Automotive Safety Integrity Level-D)に対応したソフトウェアツールであることが確認され認証を取得しています。
  • 静的コード解析による品質確保(Part6)
    ISO 26262コーディングガイドラインの検証ができます。
  • トレーサビリティーの確保を支援(Part8)
    Agile⁺ Reliefは、トレーサビリティーツール「FUJITSU Manufacturing Industry Solution COLMINA 機能安全開発プロセス支援」と連携しています。Agile⁺ Reliefによる検証結果は「COLMINA 機能安全開発プロセス支援」で、設計書やソースプログラムと関連づけて管理できます。

セキュリティへのチェック強化

自動車業界をはじめ、組み込みソフトウェア開発において要求されるセキュリティルール「MISRA-C(Amendment1も含む)」や「CERT C」のカバー率が向上しました。
お客様のセキュアコーディングを強力に支援します。

ルールカバー率

ツール MISRA:2012(ルール数)
MISRA-C:2012 Amendment1も含む
CERT C(ルール数)
(注1)(注2)
Agile⁺ Relief 100%(156/156) 70%(213/303)
ツールA 100%(156/156) 58%(177/303)
ツールB 100%(156/156) 28%(84/303)
ツールC 60%(94/156) 30%(90/303)
  • (注1)
    自社2019年7月8日調べ。
  • (注2)
    Agile⁺ Reliefについては標準パッケージ+CERTオプション導入時。他社ツールのCERT Cルールカバー率に関しては「CERT C Coding Standard」を参照ください。

豊富な指摘機能

C/C++のソースプログラムを解析し、単純なコーディングミスから論理的な誤りまで的確に指摘します。また、不当なメモリーアクセス、メモリーリーク、誤ったメモリー開放や性能を悪化させる記述なども指摘します。
無駄な指摘を抑え、障害原因とはならない箇所については指摘しない工夫を施していますので、開発者に余分な負担を掛けません。
各指摘メッセージについてその意味や対処方法を例を交えて詳細に解説したドキュメントを用意していますので、指摘箇所の修正が容易です。

指摘項目(注3)

指摘種別 C指摘数 C++指摘数
合計 650 570
障害の可能性 162 140
移植性・保守性・可読性の向上 373 314
堅牢性(セキュリティ関連)の向上 63 57
効率性の向上 5 8
命名規約違反 5 5
その他(構文の誤りなど) 42 46
  • (注3)
    すべてのオプションを導入した場合の指摘数です。

<指摘観点>

Agile⁺ Reliefは、指摘の「多重化」を実現。お客様の開発プログラムのさらなる品質向上に貢献します。

富士通の開発で培った独自ノウハウでソフトウェア品質を向上

1. Agile⁺ Relief 独自のノウハウでチェック

富士通の社内開発におけるバグ事例などから、開発者が陥りがちなパターンをデータベース化しチェックします。

2. ESCRコーディング作法ガイドの適合性チェック

ソースプログラムが、IPA/ESCRコーディング作法に沿って記述されているかどうかをチェックし、違反している記述箇所を指摘します。規約に準拠してコーディングを行うことにより、信頼性、移植性、保守性の向上を図ることができます。

チェック可能なガイドライン

  • ESCR C V1
  • ESCR C V2
  • ESCR C V3
  • ESCR C++ V1
  • ESCR C++ V2

ESCRコーディング作法ガイドの適合性チェック

3. MISRA ルール適合性をチェック(オプション)

ソースプログラムが、MISRA-C、MISRA-C++プログラミングガイドラインに沿って記述されているかどうかをチェックし、違反している記述箇所を指摘します。このガイドラインに沿ってソースプログラムを記述することにより、基本的なプログラム品質の底上げを図ることができます。「MISRA-C:2012 」のルールは、「MISRA-C:2012 Amendment1」も含め、すべてのルールにチェックできます。

チェック可能なガイドライン

  • MISRA-C:1998
  • MISRA-C:2004
  • MISRA-C:2012
  • MISRA-C++:2008

4. ISO 26262コーディングガイドライン適合性の検証

ISO 26262で要求されている組織で定めた設計規則を判断するためのコーディングガイドライン(Part6-5)および不具合の混入を防止するためのコーディングガイドライン(Part6-8)の検証に活用できます。

Agile⁺ Reliefでチェック可能な項目をまとめた資料をご希望の方は、こちらからご連絡ください。

5. CERT C コーディングスタンダード適合性評価(オプション)

ソースプログラムが、CERT C コーディングスタンダード(以下、CERT C)に沿って記述されているかどうかをチェックし、違反している記述箇所を指摘します。

CERT Cは、ソフトウェア業界全般のセキュリティを確保するコーディングガイドラインです。

Agile⁺ Reliefは、CERT Cの適用が先行している車載や電機業界のお客様からの要望が多いルールに対応しています。これにより開発現場で採用されているルールのほとんどが、目視ではなくAgile⁺ Reliefで自動的にチェックできるため、漏れなく短時間で適合性評価が可能になります。

Agile⁺ Reliefでチェックできるルール一覧をご希望の方は、こちらからご連絡ください。

CERT C コーディングスタンダード適合性評価

6. 複数プログラム間の問題検出(広域探索オプション)

メモリーリークやバッファーオーバーランなどの重大な問題は、関数間に潜んでいる場合が多くあります。問題箇所の検出範囲を関数内から関数間に拡大し、重大な問題箇所を検出することができるフローティングライセンス版のオプション製品です。
たとえば、複数の開発者で分散開発を行っている場合、パラメーターで渡されたアドレスが「0でない」と信じてアクセスし、0番地参照となる危険性がありました。そこで、広域探索オプションを用いて、ソースプログラムを纏めて解析し、プログラム連結部分の品質を検証することをお奨め致します。

解析イメージ

解析結果イメージ

指摘メッセージ毎に、指摘位置からその原因となる問題箇所への経路情報を表示します。

  • エラーの内容/発生箇所を表示
  • エラーの原因となった変数名を表示
  • エラーの原因の変数名が宣言された場所を特定
  • 呼び出し元の場所を特定
  • 引数として使用された変数名を表示
  • 問題と断定した根拠となる箇所を表示

解析結果イメージ

検出可能な指摘

  • メモリーリーク
    領域の獲得/解放を別々の関数で実施している場合、解放漏れの危険性を指摘します。
  • バッファーオーバーラン
    別の関数で用意された領域に対し、そのサイズを超えて処理する危険性を指摘します。
  • 0番地参照
    パラメーターで渡されたアドレスが「0でない」と信じてアクセスする危険性を指摘します。

レビュー支援機能

使いやすいユーザーインターフェイスで、各種指摘の検証作業を効率よく行うことができます。 例えば指摘種別(信頼性、保守性、移植性、効率性)や指摘メッセージごとにフィルタリングを行い、着目したい指摘メッセージのみを表示させることなどが行えます。 また、検査指摘設定機能により、予め設定したグループや番号の指摘メッセージのみを出力することも可能です。該当するソース記述や指摘の意味、対処方法までを簡単操作で表示しますので、効率的に検証できます。

確認済指摘の抑制機能

過去に検出されたチェック結果を、次回ソースコードのチェック時に、再検出されないよう抑止することが可能です。

指摘メッセージ抑止による効果

  • 新規チェック結果の、絞り込み作業の効率化
  • 新規チェック結果の見逃し防止
  • チーム内での抑止状態の共有のしやすさ
確認済指摘の抑制機能

複雑さ計測機能

プログラム記述の問題だけでなく、プログラムの制御構造の数などを計測することもできます。 この計測結果から「McCabeの複雑度」を計算し、プログラム開発の指標とすることにより、品質の高いソフトウェア開発を推進することができます。

複雑さ計測機能

McCabeの複雑度とは

McCabeは、プログラムの複雑さは制御構造の複雑さで定まると提唱し、この複雑さは基本パスの数で数えるとしました。 複雑度V(G)はプログラム中の判定条件の数をπとすると、[ V(G)=π+1 ] で求めることができます。
複数度にはTYPE1とTYPE2の2種類があります。 TYPE1では判定条件を数えるとき、if条件節にあるような複合条件(&&や||など)を無視するのに対し、TYPE2では別条件として数えます。

分かりやすいプログラムにするためには、各関数の複雑度TYPE1の値を20以下におさえると良いでしょう。一般的には20を超えると理解に時間がかかり、50を超えると作成者以外はほとんど理解不可能になると言われています。

複雑度の算出例
プログラム

TYPE1は(a)のif条件節にあるような複合条件(&&や||を使用した条件)を分岐数1と数えます。 上の例は、π=3であり、複数度は4となります。

TYPE2は複合条件の個々の条件数も分岐数と数えます。上の例は、π=4であり、複雑度は5となります。下図は、TYPE2におけるパスを示したものです。パスの数が5であることが分かります。

フロー

コマンド解析機能(フローティングライセンスのみ提供)

コマンドラインでの解析が可能です。

ソースコード別にチェック結果をレポーティング(診断レポート機能)

個々のソースコードのチェック結果をプロジェクトや機能単位でまとめ上げ、全体品質をレポートとして生成します。
レポートされる問題箇所と改善方法より品質監査が確実に行え、的確かつ効果的な対策が行えます。
(日々の遷移や複数のプロジェクトを俯瞰して確認したい場合は、Agile⁺ Reliefフローティングライセンス(C/C++解析込み)の「品質データ可視化」機能をご利用ください。)

活用シーン

  • コーディング時の進捗資料として
    ソースメトリクスと指摘の相関関係をレポートします。 ステップ数では判断できない品質/構造的な問題が明確になります。
  • レビュー/納品時の資料として
    検証状況とルール適用状況をレポートします。コーディングガイドライン通りに全て検証されていることが明確になります。
  • テスト時の分析資料として
    品質特性や問題特性の観点で、ソースコード上の問題点をレポートします。優先的に対処すべき問題や箇所が明確になります。
品質向上に向けた診断レポートの活用例

CI/CD(注4)パイプラインへの組込み(ソースコードチェックの自動化)

Jenkinsプラグインを使用し、CI/CDパイプラインにAgile⁺ Reliefを組み込むことができます。
短いサイクルで繰り返し実行することで、ソースコードの欠陥を早期に検出して修正することが可能です。
ソースコード変更のタイミングで自動的にソースコードをチェックすることにより、重大な欠陥を含んだソフトウェアがリリースされることを防ぎます。
プラグインは技術情報ページからダウンロードできます。

CIツール連携

Jenkins ならびにJenkins CIは、 Jenkins(https://jenkins.io/)に帰属します。

  • (注4)
    CI/CD(継続的インテグレーション/継続的デリバリー)とは、ビルド・テスト・デプロイなどの開発付帯作業を自動化することにより開発サイクルを速め、早い段階から頻繁に繰り返し実行することで問題を早期発見しトラブルを未然に防ぐ手法です。

英語モード

メニューや指摘メッセージを日本語から英語に切り替えて利用できます。
また、各種説明書の英文ドキュメントをご用意しています。
(英語OS、日本語OS、中国語OS上でご利用いただけます)

ライセンス

開発体制や予算に合ったライセンスを提供

安価なノードロックライセンスを提供。複数の事業所でライセンスを共有可能。委託先との解析結果(CSV・診断レポート)の共有が可能。

ISO 26262

Agile⁺ Relief C/C++は第三者認証機関によりISO 26262認証を取得(注5)していますので、お客様自身がAgile⁺ Relief C/C++の妥当性を証明する必要はありません。
Agile⁺ Relief C/C++は、お客様の機能安全に向けたソフトウェア開発に貢献いたします。

(注5)最も厳しい安全度水準であるASIL-D (Automotive Safety Integrity Level -D)に対応しています。

解析実績のあるコンパイラ

下記のコンパイラについて解析実績があります。また、下記以外のコンパイラの場合でも、コンパイラ情報をお知らせいただければ、解析可否をご案内いたします。

ルネサス エレクトロニクス社
アーム社
  • RealView 4.0
  • RealView 3.1
  • RealView 3.0
  • RealView 2.2
  • RealView 2.0
  • Developer Suite 1.2
  • DS-5(注6)
  • MDK-Arm(注6)
GNU
  • GCC
日本テキサス・インスツルメンツ社
富士通社
  • SOFTUNE FR
  • SOFTUNE F2MC-16
  • FUJITSU C Development Package 4.0.1
マイクロソフト社
  • Microsoft Visual C++ 2015
  • Microsoft Visual C++ 2013
  • Microsoft Visual C++ 2012
  • Microsoft Visual C++ 2010
  • Microsoft Visual C++ 2008
  • Microsoft Visual C++ 2005
  • Microsoft Visual C++ .NET 2003
  • Microsoft Visual C++ .NET 2002
  • Microsoft Visual C++ V6.0
  • Microsoft Visual C++ V5.0
  • Microsoft Visual C++ V4.2
  • Microsoft Visual C++ V4.0
  • Microsoft Visual C++ V1.x
  • Microsoft Embedded Visual C++ V4.0 (注6)
DIAB DATA社
  • D-cc
メンター・グラフィックス・ジャパン社
  • MRI
ガイオ・テクノロジー社
  • Xass
日本オラクル社
  • Oracle Solaris Studio 12(注6)
  • SPARCompiler 5.0
  • SPARCompiler 4.2
  • SPARCompiler 4.0
  • SPARCompiler 3.0.1
  • SPARCompiler 3.0
  • SPARCompiler 2.0.1
  • Forte Developer 6 update2 (注6)
  • Sun Studio 12 (注6)
  • Sun Studio 11 (注6)
KEIL (注6)
  • ARM C/C++ Compiler
  • C51コンパイラ
Paradigm Systems社 (注6)
  • C++コンパイラ
東芝社 (注6)
  • TLCS-900ファミリー Cコンパイラ
  • TLCS-870/Cシリーズ Cコンパイラ
IARシステムズ社
Green Hills Software社(注6)
  • MULTI V850 / RH850
  • (注6)
    本コンパイラ情報は製品に入っておりません。お試しになりたい場合にはこちらからご連絡ください。

留意事項

  1. 上記コンパイラをご使用の場合でも、ANSI規格からの拡張仕様部分について解析エラーが発生する場合があります。オプション設定等を行っても解析エラーを回避できない場合はこちらからご連絡ください。
  2. 上記コンパイラ以外のコンパイラをご使用の場合、解析可否について無償で調査いたします。

Agile⁺ Relief に関するお問い合わせ

ご検討中のお客様

お電話で
富士通コンタクトライン(総合窓口)
0120-933-200
受付時間:9時~12時および13時~17時30分
(土曜日・日曜日・祝日・当社指定の休業日を除く)
富士通コンタクトラインでは、お問い合わせ内容の正確な把握、およびお客様サービス向上のため、お客様との会話を記録・録音させていただいておりますので、予めご了承ください。
Webで
お問い合わせ専用ウェブフォーム
当社はセキュリティ保護の観点からSSL技術を使用しております。

ご使用中のお客様

サービス&サポート情報
ソフトウェアを安心してご利用いただくために、アップグレード & サポートサービスをご用意しています。
使用方法、技術的なお問合せ
製品を購入された際の販売会社もしくは当社担当営業・SEまでご連絡ください。
ページの先頭へ