静的解析ツールAxivionと品質向上を目指す

このブログは「Pursuit of Quality with Axivion」を翻訳・一部加筆したものです。

単純な機能の実装でさえ、時間が経つにつれてどんどん時間がかかるようになっていることにお気づきですか? 現在のコードベースは、ソフトウェア・アーキテクトが策定したハイレベル/ローレベル設計に準拠していますか? コードに潜む重複コードや依存サイクルに気づいていますか? 安全認証を取得したソフトウェアを優先していますか?  

もしもこれらの質問に興味を持たれたなら、この記事を読み進めることで、これらの問題に効果的に対処する方法を見つけることができますので、ぜひお読みください。

はじめに

Axivion (アクシビオン)は1年以上前からQt Groupに不可欠な存在であり、Qtの品質保証ソリューションを強化しています。

Axivionをご存じない方のために説明すると、AxivionはC、C++、C#コードの次世代静的解析の技術リーダーです。MISRAメトリクスのような標準的な解析に加え、Axivionではソフトウェア・アーキテクチャのコンプライアンスをチェックすることができます。クローンサイクル到達不可能なコードを検出する機能により、開発プロジェクトにおけるソフトウェアの品質劣化を常に防ぐことができます。

Axivion Suiteがどのようにお客様の目標達成に役立っているかは、お客様事例をご覧ください。

この記事では、Axivionを使い始めるまでのプロセスを簡単に紹介し、Axivionのツールとその価値を紹介します。解析が実際に行われていることを示すために、現在社内で開発中の産業オートメーション・デモ・プロジェクトを選びました。

解析のセットアップ

Axivionを初めて使用する場合、Axivion設定ウィザードを使用するのが最も簡単な選択です。このウィザードは、解析用にプロジェクトを設定するためのステップバイステップのガイドです。ここでは、プロジェクトの場所、バージョン管理システム、コンパイラツールチェーン、ビルドシステムなどの設定オプションをウィザードの案内に従って設定します。

このプロセスが終わると、標準的なユーザー・インターフェースが表示され、プロジェクト解析設定の微調整を開始することができます。例えば、MISRA C++ 2023の解析を有効にしたり、サイクル検出を無効にしたり、McCabe複雑度チェックの制限を設定したり、会社のルールセットに基づいてカスタムルールを追加することもできます。(※Axivion設定ウィザードは将来のバージョンで日本語化される予定です。)

ax1
ax4
ax5
bk1
Save analysis results
ax11_1
ax12-1
Helper script to start analysis
bk2
Enabling Misra C++ 2023 and disabling Cycle Detection
bk3
Setting max threshold value for McCabe Cyclomatic Complexity
アーキテクチャ検証のセットアップ

理屈から言えば、コードの定期的なレビューによって、ソフトウェア・アーキテクチャと実装が一致している状態を確保することができます。しかし残念ながら、実際には、手作業によるアーキテクチャレビューは時間がかかり、エラーが発生しやすい傾向にあります。多くの場合、プル/マージリクエストの際にアーキテクチャレビューが無視されてしまいます。本当の問題が明らかになる時には、その症状の修復に多大な労力と費用が必要となることでしょう。

Axivionが、ソースコードに加えられたすべての変更について、アーキテクチャのコンプライアンス(アーキテクチャと実装の一致性)を正確に検証するとしたらどうでしょうか。

これを実証するために、私たちは、習得が簡単で軽量なアーキテクチャ・モデリング・ツールであるGravisツールを使用して、デモ・プロジェクトのハイレベル設計を作成しました。

Gravisでは、以下のことが可能です。

  • アーキテクチャ・エンティティ(コンポーネント、ファイル、クラス、関数、変数など)を描く。

  • それらの間の関係(継承、関連、関数呼び出し、フレンド関数など)を定義する。

  • アーキテクチャ・エンティティと対応するコード(ソースおよびヘッダファイル、またはそれらのディレクトリ)をマッピングする。

関係を定義する際の粒度と精度は、まさに驚異的です。最後に、新しく作成されたアーキテクチャ/マッピングデータ(.gxlファイル)を、アーキテクチャ検証を実行するための参照として使用するようにAxivionを設定します。

 
: Enterprise Architect, IBM Rhapsody, PlantUML またはソフトウェア・アーキテクチャ表現にXMIフォーマットを使用するあらゆるツールから設計をインポートすることもできるため、Gravisの使用は必須ではありません。

ax17
まず、コンポーネント、ファイル、クラス、関数、変数などを表すアーキテクチャ・エンティティをモデル化します。次に、これらのエンティティ間の関係/エッジを定義します(利用可能なエッジのタイプは右下に示されています)。
ax18-1

ソースコード(ファイルまたはディレクトリ)と前のステップで定義したアーキテクチャー・エンティティ間のマッピングを作成します。

arch1
新しいアーキテクチャをgxlファイルとしてエクスポートします。
arch2
生成されたgxlファイルをリファレンス・アーキテクチャとして使用します。
静的解析のセットアップ

スタイルチェックメトリクスなど、広く普及しているオプションに加えて、Axivionを使用すると、コードベース内の重複コード循環依存(サイクル)デッドコードなどを解析できます。これらは些細な問題のように思えるかもしれませんが、同じ修正によるバグの繰り返しや、コンパイル時間の増加、前例のないクラッシュ、保守不可能なコードなどの問題が既に存在していることに気づいているはずです。

もしISO 26262、IEC 61508、IEC 62304、EN 50128/50657などの安全認証を優先するのであれば、AxivionはSGS-TÜV Saar GmbHによって安全認証システムの開発で使用できることが認証されているため、他のソリューションを探す必要はありません。これは、安全性(MISRA)とセキュリティ(CWECERT、およびCセキュアコーディング)を目的としたコーディングガイドラインと相まって、サプライチェーンに沿った安全認証コードを保証します。

デモ・プロジェクトでは、MISRA-C++ 2023ガイドラインを選択し、解析のためにクローン検出、サイクル検出、デッドコード検出を有効にしました。

ax15
クローン、デッドコード検出、メトリクスの有効化
ax16
Misra C++ 2023 ルールセットの有効化

解析の実行

セットアップ時に生成されたヘルパースクリプト(sh/bat)を実行することで、分析を簡単にトリガーすることができます。このアプローチにより、CI-CDの統合も容易に行うことができます。

解析結果

解析結果は、ブラウザからアクセスできる直感的な Web アプリケーションである Axivion Suite のダッシュボードで簡単に確認できます。このダッシュボードでは、ソフトウェアプロジェクトの劣化や品質属性に関する洞察が得られるため、プロジェクトの全体的な健全性を簡単に監視および改善できます。

Note: 解析結果は、SARIF, JSON, CSV, JUnit XML, テキスト形式でも出力できます。

アーキテクチャ検証結果

解析は、現実(コードベース)と比較したときの、定義されたアーキテクチャ・エンティティ間の関係との一致違反(アーキテクチャにない依存関係がコードに存在する)、または欠如(アーキテクチャにある依存関係がコードにはない)を示します。これは、コードの問題を未然に解決し、さらなる複雑化を防ぐための貴重なシグナルとなります。また、矛盾の根本的な理由についての会話にきっかけを与え、アーキテクチャ設計の再評価を促すこともあります。

arch3

参照アーキテクチャと比較した、コードベースの依存関係の一致、違反、欠如のレポート

ax27-1
個々のアーキテクチャの問題を確認する。
ax19-1
Gravis で解析結果を表示
ax20
緑色のエッジ(一致)をクリックすると、gravisに該当する依存関係のリストが表示される。
ax21

赤色のエッジ(違反)をクリックすると、gravisに該当する依存関係のリストが表示される。

ax22
一覧でダブルクリックすると、該当するソースコードが表示される。
静的解析結果

Axivionは、リポジトリ内のクローンコードやデッドコードを発見するために、あらゆる手を尽くしました。この解析は、重複するコードを排除し、レーダーから漏れていた未使用の関数を特定する上で非常に貴重なものとなりました。
 
MISRA C++ 2023の解析は、セーフティ・クリティカル・プロジェクトの厳しい要求に光を当て、コンプライアンスへの指針を与えてくれました。直感的なダッシュボードは、問題の導入と解決のタイムラインを提供し、継続的な改善のための貴重な洞察を提供します。

ax23
検出されたMisra C++ 2023違反の一覧
ax24
Misra C++ 2023違反箇所と違反内容の詳細
ax25

デッドコードの詳細

ax26
コードクローンの詳細 - コードは似ているが、細かな追加や削除がある。(クローン Type 3)

Axivionは、必要に応じてカスタマイズ/ファインチューニングすることにより、SCA の有用性を低下させ、QA エンジニアにとって丸一日を無駄にする誤検出を避けることができる柔軟性を備えています。

例えば、std::unique_lock 変数が未使用としてフラグ付けされる誤検出がありましたが、実際にはこの宣言自体がスコープ内のミューテックスをロックする役割を果たします。これは、treat_side_effect_constructors_as_useオプションをtrueに設定することで、期待した動作となるようにすることができます。

結論

測定はコントロールと改善の鍵です。正確に測定できなければ、理解も制御も改善もできません。

Axivionを味方につければ、ソフトウェアの劣化要因を効果的に測定して対処し、複雑性を管理し、開発プロセス全体の健全性を確保できます。Axivionは、コードベースに関する貴重な洞察を提供し、情報に基づいた意思決定と的を絞った改善の実施を可能にすることで、常に時代の先端を行くことができるようにします。

次に目指すものは?

自分たちのために使ってみたらどれほど役に立つでしょう? - 現在、QtフレームワークAxivion Suite自体はAxivion Suiteで解析、監視しています。Qtの安全認定製品であるQt Safe Rendererのアーキテクチャ/静的解析にご期待ください。

静的解析ツールとアーキテクチャ検証ツール Axivion Suite について詳細を知りたい方や個別相談を希望される方は、お気軽にお問い合せください。


Blog Topics:

Comments