メインコンテンツ

パターン マッチングを使用した Polyspace 解析対象ファイルの選択

Polyspace® 製品を使用して静的解析を実行する場合、その解析では Polyspace プロジェクト内で指定されている (またはコマンド ラインで -sources を使用して指定した) すべてのファイルが対象となります。場合によっては、これらのファイルのサブセットのみの結果を確認したり、ファイルのサブセットに異なる解析動作を適用したりする必要があります。ファイルのサブセットを指定するには、ファイル選択パターンを使用します。ファイル選択パターン (glob パターン) で複数のファイルを対象にするには、?* などのワイルドカードを使用します。

ファイル選択パターンを指定する状況

ビルド コマンドによって Polyspace プロジェクトまたはオプション ファイルを作成する際、あるいは Polyspace Bug Finder™ を使用して静的解析を実行する際に、ファイルのサブセットを選択できます。

ビルド コマンドによって Polyspace 解析を設定する際にファイルを選択する

polyspace-configure を使用してプロジェクトを作成すると、オプション -include-sources または -exclude-sources に渡すパターンとパスが一致するソース ファイルを追加または除外できます。この 2 つのオプションは、コマンド ラインで複数回指定することも、組み合わせることもできます。

次のフォルダー構造を以下の例に適用します。

Example folder structure used for the following examples.

これらの例を試すには、polyspaceroot\polyspace\examples\doc_cxx\sources-select に含まれるデモ ファイルを使用します。polyspaceroot は Polyspace インストール フォルダーです。

次のコマンドを実行します。

polyspace-configure -allow-overwrite -include-sources "glob_pattern" \
-print-excluded-sources -print-included-sources make -B 
glob_pattern は、プロジェクトに追加またはプロジェクトから除外するファイルのパスのマッチに使用する glob パターンです。polyspace-configure に渡す glob パターンがシェルによって展開されないようにするには、glob パターンを二重引用符で囲みます。

Bug Finder 解析を実行する際にファイルを選択する

Polyspace Bug Finder を使用して C/C++ コードを解析するときに、プロジェクト内のファイルのうち、解析中に特定の処理を必要とするファイル セットを定義できます。たとえば、サードパーティ ライブラリに含まれる関数本体の定義をスキップする場合や、所有するファイル内のすべての関数を強制的に解析する場合です。分類 XML ファイル内に、特定の動作が適用されたファイル セットを列挙し、この分類ファイルを使用して Bug Finder 解析を微調整できます。

分類 XML ファイルで、file-pattern 要素 (fileset > files-in-set または fileset > files-not-in-set 要素の子) 内にファイル パターンを指定できます。たとえば、次のパターンでは myproject/inc のサブフォルダー内の .hpp ファイルが選択されますが、名前が -generated で終わるファイルは除外されます。

<fileset name="Application implementation and header files">
      <files-in-set>
           <file-pattern>myproject/inc/**/*.hpp</file-pattern>
      </files-in-set>
      <files-not-in-set>
           <file-pattern>myproject/inc/**/*-generated.hpp</file-pattern>
      </files-not-in-set>
      <behaviors>
            <!-- Specific behaviors for this file set -->
     </behaviors>
</fileset>

静的解析中に分類ファイルを指定するには、解析オプション -classification を使用します。たとえば、次のコマンドを使用して Bug Finder を実行できます。

polyspace-bug-finder -options-file myOptions.txt -classification myClassification.xml
詳細は、次を参照してください。

サポートされているファイル選択のパターン

この表の例では、sources は最上位のフォルダーであるとします。

glob パターン構文

特殊文字、スラッシュ ('/')、バックスラッシュ ('\') を使用しない。

パターンは対応するファイルと一致し、フォルダーとは一致しない。

-include-sources "main.c" は次に一致する。

/sources/app/main.c

パターンが特殊文字 '*' または '?' を含む。

'*' はファイルまたはフォルダー名の 0 文字以上に一致する。

'?' はファイルまたはフォルダー名の 1 文字に一致する。

一致にパスの区切り記号は含まれない。

-include-sources "b?.c" は次に一致する。

/sources/lib/b/b1.c

/sources/lib/b/b2.c

-include-sources "app/*.c" は次に一致する。

/sources/app/main.c

次で始まるパターン:

  • スラッシュ '/' (UNIX®)。

  • C:\ などのドライブ文字 (Windows®)。

パターンは絶対パスにのみ一致する。

-include-sources "/a" とは何も一致しない。

-include-sources "/sources/app" は次に一致する。

/sources/app/main.c

次で終わるパターン:

  • スラッシュ (UNIX)。

  • バックスラッシュ (Windows)。

  • 二重アスタリスク ('**')

パターンは指定されたフォルダーの下のすべてのファイルに一致する。

'**' がパターンの先頭にある場合は無視される。

-include-sources "a/" は次に一致する。

/sources/lib/a/a1.c

/sources/lib/a/a2.c

次が含まれるパターン:

  • '/**/' (UNIX).

  • '\**\' (Windows).

パターンは指定されたパス内の 0 以上のフォルダーに一致する。

-include-sources "lib/**/?1.c" は次に一致する。

/sources/lib/a/a1.c

/sources/lib/b/b1.c

パターンの先頭が '.' または '..'

パターンはコマンドを実行するパスからの相対パスに一致する。

/sources/lib/a から polyspace-configure を開始する場合、

-include-sources "../lib/**/b?.c" は次に一致する。

/sources/lib/b/b1.c

/sources/lib/b/b2.c

パターンが Windows における UNC パス。

ファイルがサーバー myServer 上にある場合、

\\myServer\sources\lib\b\** は次に一致する。

\\myServer\sources\lib\b\b1.c

\\myServer\sources\lib\b\b2.c

polyspace-configure では、次の glob パターンはサポートされていません。

  • Windows での現在のドライブからの相対になる絶対パス。

    たとえば、\foo\bar です。

  • 現在のフォルダーからの相対パス。

    たとえば、C:foo\bar です。

  • Windows の拡張パス。

    たとえば、\\?\foo です。

  • パターンの先頭以外で '.' または '..' を含むパス。

    たとえば、/foo/bar/../a?.c です。

  • 文字 '*' のみ。

参考

|

トピック