C コードのエラーを識別するツールである ControlFlag 1.0 のリリース

インテルは、ControlFlag 1.0 ツールの最初のメジャー リリースを公開しました。このツールを使用すると、大量の既存のコードでトレーニングされた機械学習システムを使用して、ソース コード内のエラーや異常を特定できます。 従来の静的アナライザーとは異なり、ControlFlag は、考えられるすべてのオプションを提供することが難しい既製のルールを適用しませんが、多数の既存プロジェクトにおけるさまざまな言語構造の使用に関する統計に基づいています。 ControlFlag コードは C++ で書かれており、MIT ライセンスの下でオープンソース化されています。

このシステムは、GitHub および同様のパブリック リポジトリで公開されているオープンソース プロジェクトの既存のコード配列の統計モデルを構築することによってトレーニングされます。 トレーニング段階では、システムはコード内の構造を構築するための典型的なパターンを決定し、プログラム内のコード実行のフローを反映して、これらのパターン間の接続の構文ツリーを構築します。 その結果、分析されたすべてのソース コードの開発経験を組み合わせた参照意思決定ツリーが形成されます。 レビュー中のコードは、参照デシジョン ツリーと照合してチェックされるパターンを識別する同様のプロセスを経ます。 隣接するブランチとの大きな不一致は、チェックされているパターンに異常が存在することを示します。

C コードのエラーを識別するツールである ControlFlag 1.0 のリリース

ControlFlag の機能の例として、開発者は OpenSSL プロジェクトと cURL プロジェクトのソース コードを分析しました。

  • 異常な構成要素「(s1 == NULL) ∧ (s2 == NULL)」および「(s1 == NULL) | (s2 == NULL)" は、一般的に使用されるパターン "(s1 == NULL) || と一致しません。 (s2 == NULL)」。 このコードでは、式「(-2 == rv)」(マイナスはタイプミス)と「BIO_puts(bp, “:”) <= 0)」(関数では「== 0」である必要があります)。
  • cURL では、数値型であるがブール値 TRUE と比較される構造要素「s->keepon」を使用するときに、静的アナライザーでは検出されないエラーが発見されました。

ControlFlag 1.0 バージョンの機能には、C 言語の標準テンプレートの完全なサポートと、条件付きの「if」式の異常を検出する機能があります。 たとえば、「if (x = 7) y = x;」というコード断片を分析する場合、 システムは、「if」ステートメントでは数値の比較に通常「変数 == 数値」構造が使用されると判断するため、「if」式の「変数 = 数値」はタイプミスによって発生する可能性が高くなります。 このキットには、GitHub 上の既存の C 言語リポジトリをダウンロードし、それらを使用してモデルを構築できるようにするスクリプトが含まれています。 すぐにコードチェックが始められる既製モデルも用意しています。

出所: オープンネット.ru

コメントを追加します