ポピュラーなオープンソース・プロジェクトのエラーを見つけるクイズに挑戦しよう

同カテゴリーの次の記事

Direct3D* 12 概要 パート 9: まとめ

この記事は、インテル® デベロッパー・ゾーンに公開されている「Let’s Play a Game – find bugs in popular open-source projects」の日本語参考訳です。


PVS-Studio スタティック・コード・アナライザーの開発者達よって、プログラマー向けに C/C++ コードのエラーを見つけるクイズが出題されています。

コード・アナライザーは、発見が困難な多くのエラーを見つけることができます。クイズには、PVS-Studio によって実際にエラーが検出されたコードを使用しています。

このクイズは、C++ 言語の知識をチェックするためのものではありません。興味深いテストは多数あります。例えば、C++ Quiz (英語) です。このクイズは、ただ単に楽しむことを目的に作成されています。

コード・アナライザーは業務では役立たないツールであるという意見をよく聞きます。5 秒で不適切な括弧やカンマを見つけることができるが、 複雑な論理エラーは検出しないため、 学生にしか使い道がないツールと言われています。

これは、そのような意見を考え直していただくためのクイズです。クイズには制限時間を設けています。5 秒以内にエラーを見つける必要があります…というのは少々厳しいので、1 分以内にしています。ランダムに選択された 15 問が表示されます。1 分以内に正解すると 1 ポイントを獲得できます。

クイズでは、構文エラーはチェックしません。クイズで使用しているコードは、問題なくコンパイルされるオープンソース・プロジェクトからの抜粋です。次の 2 つの例を使って、正解を示す方法を説明します。

1 つ目の例として、 次のコードについて考えてみます。

例 N1

このコードのエラーは赤色でハイライト表示した部分です。実際のクイズではハイライト表示されません。

この例では、インデックス 2 とすべき所で、間違えてインデックス 3 と記述しています。マウスのカーソルを移動して、コード内の単語や数字をハイライトできます。ここでは、カーソルを 3 に合わせてから左クリックします。

これで正解となります。

2 つ目の例では、 エラーを正確に指摘することはできません。

例 N2

バッファーサイズは 48 と比較すべきですが、 余分な sizeof が追加されています。そのため、バッファーサイズが int 型のサイズと比較されています。

この例では sizeof が間違っており、これが正解となります。ただし、コード全体が分かっていないため、 sizeof はあるバッファーのサイズを評価する代わりに、マクロの値を評価していると考えることもできます。その場合、SSL3_MASTER_SECRET_LENGTH の使用法が間違っていることになります。

そのため、この例では、sizeof または SSL3_MASTER_SECRET_LENGTH のいずれかを選択すると正解になります。

こちらからクイズを開始できます。皆さんのご健闘をお祈りしています!

注:

このテストはモバイルデバイスに対応していません。指の動きを正確に読み取り、 モバイルデバイスに対応できるように新しいバージョンを開発中です。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください

関連記事