PVS-Studio for Cの最初のブレス#

PVS-Studio for C#
PVS-Studioチームは、ニュースと予熱の関心を共有したいと考えています。 C#用のアナライザーの開発を開始しました。 ユーザーの観点からすると、これは古き良きPVS-Studioと同じですが、C#プログラムでエラーを見つける方法を教えます。

現在(2015年9月)、PVS-StudioアナライザーはVisual Studio 2005-2015を公式にサポートし、C、C ++、C ++ / CLI、C ++ / CX(WinRT)で記述されたプログラムを分析できます。 PVS-Studioスタンドアロンユーティリティを使用すると、Visual C ++だけでなく、たとえばMinGWを使用してビルドされたプロジェクトもチェックできます。 LinuxでPVS-Studioを起動する実験があります。 しかし、Linuxの世界では、開発者向けのツールでお金を稼ぐことは難しいため、Linuxの方向性は私たちにとって興味深いものではありません。 Windowsは私たちの心に近づいており、C#開発者を喜ばせることにしました。

C#コードはエラーが少ないと繰り返し述べてきました。 この言語では多くの構成要素が削除または変更されており、C ++では、通常の方法とエキゾチックな方法の両方で足を撃つことができます。 ただし、タイプミス、失態、不注意から免れる人はいません。

PVS-Studioアナライザーは、コピー貼り付けなどを使用して、タイプミスに関連するエラーを検出できる診断で有名です。 私たちは経験をC#に移し、非常に便利なツールを作成することにしました。

今日、私たちは新生児の最初の叫び声を聞きました。 お気に入りのV501診断をC#に適合させました。 彼女には多くの輝かしい発見があります。 そして、これが最初の結果です。 MSBuildプロジェクトでPVS-Studioを実行すると、最初のエラーが見つかりました。

public int Compare(ITaskItem x, ITaskItem y)
{
  if (x.ItemSpec != y.ItemSpec)
  {
    return -1;
  }

  if (x.CloneCustomMetadata().Count !=
      x.CloneCustomMetadata().Count)
  {
    return -1;
  } 
  ....
}

PVS-Studio: V3001 There are identical sub-expressions to the left and to the right of the '!=' operator x.CloneCustomMetadata().Count != x.CloneCustomMetadata().Count. Microsoft.Build.Engine.UnitTests TaskItemComparer.cs 51

'x'. :

if (x.CloneCustomMetadata().Count !=
    y.CloneCustomMetadata().Count)

, C# . .

, C# . , C++ . . , C#. , C# .

. C++ & C#, Visual Studio 2005, 2008. .

, . . Roslyn.

. C# , , PVS-Studio , . , , PVS-Studio C# .

Source: https://habr.com/ru/post/J268001/


All Articles