Klocwork-2週間のテストエクスペリエンス

広告料金がすぐに続いたため、PVS-Studioの印象共有する時間がありませんでした。 さて、静的コード分析システムを使用した最初の経験についてお話します。



偶然出会った最初のシステムはKlocworkでした。 これは、私がスロベニアの会社のウクライナ支社で働いていた約8〜9年前に起こりました。 次に、アナライザーが本社で起動されましたが、結果はExcelにエクスポートされました。 しかし、この形式であっても、潜在的な(そして場合によっては実際の)問題がどれほどうまく機能しているかに驚きました。



そして今(2010年に既に)、Klocworkのエンベデッドワールドでのスタンドを見たので、「トライ」のトライアルライセンスについて尋ねました。 しばらくして、「興味がありますか、まだ欲しいですか?」という質問を含むメールを受け取りました。



それから、私はまともな量のコードを「継承」しました。それは、言うまでもないが、少し曲がって書かれたものです。 そして、プロジェクトは「最初のリリース」段階にあり、考えられる問題を探す時間がありました。



したがって、彼はすぐに同意しました。 試用版のインストールと統合の手順を取得しました。 VSとの統合がワンクリックで成功した場合、FreeScaleのCodeWarriorとの統合により汗と技術サポートが得られたことに注意してください製品が試用版であったこと、購入される保証はありません!)。 その結果、2週間の試行の後、まだ統合が行われていました(手動で-CodeWarriorもそれ自体であることが判明しました)。 そして最後に、2週間のライセンスが取得されました。これにより、本来の目的である静的コード分析を実行できます。



システム自体についての簡単な説明-いわゆる中央サーバーがあります 「ビルド」、および各「ビルド」の分析結果をブラウザーで表示できるWebクライアントがあります。 ライセンスは、サーバーと各クライアントの両方で購入する必要があります。 さらに、ライセンスの期限は限られています。 20個のクライアントライセンスを購入する場合、サーバーライセンスは無料です。このようなパッケージは、年間約3万ユーロの価格で入手されました。



その結果、とても嬉しく思いました。



「最初のリリース」フェーズでは、アナライザーは3つのプロジェクトで73の潜在的な問題を発見しました。



誤検知は6件のみでした。



見つかった問題のリストは次のとおりです(実際にコードに存在していました)。



実際に発生する問題について話しているのではなく、ほとんどの場合、潜在的な問題についてのみ話していることは明らかです。

アナライザがバッファオーバーフローの可能性を示す(ほぼ実際の)コードの例を次に示します。



void function (int len, char * buf) { char data[DATA_SIZE]; for (int i = 0; i < len; ++i) { data[i] = buf[i]; } }
      
      





上記のコードの場合、アナライザーは「バッファーオーバーフロー: 'データ'の配列が範囲外である可能性があります」というメッセージを表示します。 サイズ260の配列「データ」は、260..65534のインデックス値を使用できます»



問題関数の先頭からすべての可能な分岐までの詳細なパスと、各分岐点で変数に必要な値を示しながら、

示された問題が発生しました。



シンタックスと問題領域の便利な強調表示、ほぼすべてのクリックに対する適切な応答により、問題がどこにあり、どのように発生するかを正確に見つけて理解することが非常に簡単です。



残念ながら、スクリーンショットを投稿できません。なぜなら、 それらはすべて、パブリックドメインでは表示できない実際のプロジェクトと実際のコードで作成されました:(2年前にリーダーシップのレポートを作成しましたが、公開されている可能性のあるダミーコードのスクリーンショットを用意することはしませんでした。



上記の例では、実際のバッファーオーバーフローは発生しませんでした-関数のすべての呼び出しで、lenパラメーターの正しい値が渡されました。 この場合に見つかったアナライザー

潜在的な問題のみ。



しかし、すでにITの最初の年でない場合は、同様の潜在的な問題が発生するたびに、次のコード変更後の問題の1つである可能性が高いことは確かです。

潜在的なものから現実のものに変わり(プロジェクトのデバッグの快適な数週間を提供し、顧客による最終デモで突然落ちました)、すぐに統一に近い値に達します。



そして、このコードアナライザーの「利点」から:





アナライザーはC / C ++、C#、Javaをサポートしていますが、C / C ++部分のみをテストしました。



そのようなユーティリティなしで行うことは可能ですか? C / C ++でコードを作成するすべての人がMyers全体を読んで理解し、常に彼の推奨事項に留意し、既に作成されたコード内のこれらの推奨事項の違反を迅速に識別できる場合は可能です。 現実には、私にはそう思われますが、そんなに非現実的です。 また、このようなツールを使用すると、エラーが発生した直後にエラーや潜在的なエラーを特定するのに非常に役立ちます。



価格...はい、価格は間違いなく高いです。 しかし、同時に20以上のプロジェクトをリードする大企業の場合、プロジェクトの観点から最も収益性の高いパッケージを購入するときの価格はそれほど高くありません。 はい、そしておそらく元の価格は最終的なものからはほど遠いものであり、実際の購入に関しては交渉を通じて値下げすることができます。 かつて現実となった同様の潜在的な問題を考慮に入れると、主要なプログラマー(または1人でなくても)の2週間または3週間の作業を簡単に「食べる」ことができます。リリース)は、非常に顕著な損失につながり、アナライザーのコストを大幅に上回る可能性があります...



私の場合、リーダーシップを説得することはできませんでした。 まあ、少なくともプロジェクトの1つでは潜在的な問題が少なく、興味深い経験を得ました:)



そして、はい、この投稿とPVS-Studioについての投稿の両方は、トピックへの関心だけのために書かれています。 この場合も、その場合も、誰かが突然私の公平性を疑った場合、レビューを書くことについて著者から重大な補償を受けませんでした。



All Articles