CI/CDパイプライン解析

ビルド解析をするときには、おそらく統合されたナイトリービルドを実行するでしょう(詳細については、qacli validate buildを参照してください)。

Perforce QACはユーザの標準の統合解析と共に CI/CDパイプライン解析を実行する機能も提供します。

Perforce QACツールはDevOps用にデザインされており、ユーザの継続的なデリバリーパイプラインの一部として静的コード解析を含めることを容易にします。Perforce QACのCI/CDパイプラインの解析機能はナイトリービルドを待つことなく、組織内でエラーを迅速に検知し、明らかにすることを可能にします。

また、オプションで、直近のフルビルド以降に変更されたファイルのみを解析することも可能です。 これにより、最短時間での解析が可能になります。

問題点を迅速に検知し、明らかにすることにより、開発者は問題のあるコードを早い時点で修正することができます。開発者がコードをアップデートし、コミットする度にCIビルドシステムがその変更をピックアップし終日に渡りビルドを実行します。

ナイトリービルドを待つのではなく、Perforce QAC のCIは新しいコードを解析し、問題点をすぐに開発者に知らせます。


このプロセスの概要を以下に示します。

  1. 開発者がコードに変更を加えコミットする
  2. CIビルドシステムがその変更を検知しソフトウェアをビルドする
  3. Perforce QAC のCIがその変更を解析し、新しい問題点のリストを生成しそれをValidateにアップロードする
Perforce QAC /Validate のCI機能を使用するためにはCI ビルドのライセンスを購入する必要があります。

実装の手順を以下に示します。

  1. どの時点で、どこに問題点をレポートするかを決定する
  2. どのように優先度を決めるかを決定する
  3. qacli コマンド(qacli Validate cibuild など)をユーザのコードに統合する
  4. レポートのスクリプトをユーザのコードに統合する
  5. 期待通りに動作することを確実にするためにテストする

限界および推奨される設定

CI ビルドでもたらされた不具合を正確に反映するために、対象のソースコードの解析は一貫して再生可能で、決定的である必要があります。そうでない場合、CI ビルドが新しい不具合をレポートする可能性があります。これは実際、解析の実行が非決定的であるためです。

以下の振る舞いがみられる可能性があります。

  • デスクトップで解析に成功したコードがCI ビルドで不安定になるまたは、変更していないソースからのメッセージが出力される
  • データフローからメッセージが出力されるまたは、その他の非決定的なメッセージとして知られているメッセージが出力される
  • その後のCI ビルドに複数の修正済みの問題点が表示される。これは、インスペクション後タイムアウトメッセージという結果になる

これを回避するためには可能な限りCI ビルドから非決定的な動作を削除する、またはその数を最小限にするようにしてください。あるいは、解析の実行が非決定的である結果としてもたらされるレポートされた不具合を受け入れるかです。


データフロー

データフローコンポーネントの主要な働きはクエリタイムアウトで、これはデータフローのパーフォーマンスとクエリの完了の間の妥協点と言えるでしょう。基本的にクエリはソルバに送られ、解決のために一定の時間を与えられます。または、ソルバがタイムアウトします。

タイムアウトまでの有効時間はデータフローが問題点がPossibleかDefiniteかそれとも問題ではないかを判断する能力に影響します。 データフローは要因により、同じクエリをロードする場合、一度の実行で完了する場合と、異なる実行では完了しない場合があります。そのため、前回はPossible とマークされていたものがクエリの実行が完了し、Definite と判断される可能性があります。

詳細については、データフローコンポーネントマニュアルの解析のタイムアウトおよび決定論的な解析結果のセクション を参照してください。

CI ビルドがこのような一貫性のない結果を生成した場合、以下を試みてください。

  • 修正が可能/実現可能であれば、発生した問題点を解決する
  • データフローのタイムアウトが原因で出現した可能性の高いメッセージである場合はそれを抑止する

    (抑止はコードで抑止するまたは、Validateで抑止することも可能)


インクリメンタル解析

‑‑incremental オプションを使用する場合、つまり、プログラム全体に対する解析を無効にし、変更のあったフィルのみを解析したい場合、このオプションを使用し、自動的にデータフロー、RCMAおよび、MTAなどプログラム全体に対する解析をするコンポーネントをすべて無効化します。