Polyspace Bug Finder での重複コード検出
同じ操作を行うコードのセクションが複数あると、保守が不必要に増えることになります。さらに、コードが重複していると、ある場所ではコードを更新したのに、別の場所では更新し忘れるということが発生する可能性が高くなります。Polyspace® Bug Finder™ を使用すると、互いに完全にまたは部分的に重複しているコード セクションを検出できます。
重複コード チェッカー
Polyspace Bug Finder は、以下のチェッカーを使用して重複しているコードを報告します。これらのチェッカーを使用すると、より保守しやすいモジュールにコードをリファクタリングする機会を見つけることができます。
欠陥 | 説明 | 欠陥グループ |
---|---|---|
重複しているコード | コード セクションが他の場所で重複しています。 | 適切な手法 |
部分的に重複しているコード | コード セクションが他の場所で重複しており、ごくわずかな変更があります。 | 適切な手法 |
コピーして貼り付けのエラーの可能性あり | コード セクションが他の場所で重複しており、わずかな変更が 1 つのみあります。 | プログラミング |
重複コード検出の制限事項
欠陥チェッカーは重複として特定のブロックにフラグを設定することはしません。次に例を示します。
重複していると見なされるコード ブロックは、一般的に 6 行を超える連続する行で構成されている必要があります。この制限は、過剰な誤検知数を防ぐために設けられています。たとえば、1 行または数行が複数の場所で繰り返されている場合、この繰り返しは問題になりません。
大規模な関数では、チェッカーは以下の構成要素を含む重複しているコード セクションを検出しません。
条件付きステートメント –
if
、switch
など。ループ –
for
、while
など。
チェッカーは、分岐を伴わない重複するコード セクションのみを検出します。
チェッカーは、コードで重複するブロックを解析する前に、
#ifdef
-s などのプリプロセッサ命令を解決します。たとえば、マクロPCDEBUG
が定義されているかどうかによって、以下の#ifdef
内の行が解析に含まれるか、または解析から除外されます。#ifdef PCDEBUG //Block of code #endif