2

私は、以下を入力して、テストに入るまでそれをキャッチしないというこの恐ろしい習慣を持っています:

int i = 1;
int j = 2;
i =+ j;  //i equals 2, not 3 as intended; assign only, + is unary and works on the j

もちろん、正しいバージョンは

int i = 1;
int j = 2;
i += j;  //i equals 3, as intended with additive & assignment compound operator

私はこの過ちを無数に犯してきました。テストケースを回避したバグのあるコードがいくつか出回っていても、私は驚かないでしょう。これを体系的に防ぐ方法が必要です。何か案は?

4

5 に答える 5

10

PMDCheckstyleなどのツールを定期的に使用します。理想的には、ビルド プロセス/継続的インテグレーションの一部として。

これらのツールのいずれかがデフォルトでこれを問題として認識しているかどうかわからないため、カスタム ルールを定義する必要があるかもしれません。

これは、この問題をキャッチするだけでなく、他の多くの潜在的な問題を示唆するものでもあります。

于 2009-07-01T11:52:50.897 に答える
10

使用している IDE に応じて、構文の強調表示を行う場合は、強調表示を変更して、パターン=+を探して見にくい色にします。

于 2009-07-01T11:53:21.597 に答える
1

次のような標準のテキスト ユーティリティを使用します。

find . -name \*.java -exec grep -H "=+" {} \;
于 2009-07-01T11:53:01.007 に答える
0

単体テストは厳密に行う必要があると思います。現時点では、特定の問題が 1 つ気になっていますが、適切な単体テストを行うと、ほとんどの問題 (スレッド化や読み込みを無視するなど) をキャプチャできます。

クラス/メソッドを分解して、機能の各チャンクをテストし、完全な (またはできるだけ近い) カバレッジを確保できるようにする必要があります。

Clover (商用) またはEmma (オープン ソース) がコード カバレッジを管理します。

于 2009-07-01T11:52:50.723 に答える
0

balpha がコメントしたように、これを見つける簡単な方法は、コード内の「=+」を grep することです。決して意図的なものではないでしょう。

于 2009-07-01T11:54:01.657 に答える