6

(Java、log4j)で「ログカバレッジ」レポートを生成するためのツールまたは戦略はありますか? コード カバレッジと同様ですが、何もログに記録しない大きなメソッド、クラス、またはパッケージがないようにします。

Web サービスをコーディングするとき、私のチームは多くのログ ステートメントを記述しません。実行中の本番コードでリアルタイムの問題をデバッグするとき、私たちはいつもそれがあればいいのにと思います。必然的に、デバッガーを接続するか、追加のログステートメントを追加して、テスト環境でバグを再現しようとしますが、関連する構造と相互運用によっては非常に困難になる可能性があります。

これをコード品質の指標として使用している人はいますか?

4

2 に答える 2

1

本番コードの一部がテストによって実行されるかどうかを調べようとしているため、コード カバレッジには特別な手段が必要です。あなたが求めていることはもう少しあいまいで、はるかに簡単 (「この大きなクラスのログは記録されていますか?」) か、不可能なほど難しい (「本番環境で壊れるメソッドをログに記録しましたか?」) 可能性があります。 ?」)。

最初の質問については、シェル スクリプトをすばやく作成して作業を行うことができます。たとえば、これは Perl のスケルトンです。ここでは、SLF4J を使用しており、"LoggerFactory" のインポートを確認することは、ロガーがあると推測するのに十分な証拠であると想定しています。

while ($filename = shift) {
    open my $in, "<$filename";
    my $loc = 0;
    my $log = "NO LOGGER";
    while (<$in>) {
        $loc++;
        if (m/import org.slf4j.LoggerFactory/) {
            $log = "has logger";
        }
    }
    print "$filename : $loc LOC $log\n";
    $total{$log} += $loc;
}
print "\n\nTOTAL LOGGED: $total{'has logger'}\nTOTAL UNLOGGED: $total{'NO LOGGER'}\n";

これをシェルから実行して、小さなプロジェクトのすべての Java ファイルを次のように実行できます。

$ find . -name \*.java -exec perl haslog.pm {} \+

これは小規模なプロジェクトでのみ機能し、かなり脆弱ですが、これをより堅牢なバージョンにするのはそれほど大変ではありません。

于 2013-03-06T20:07:33.277 に答える
0

多くのログはノイズになる可能性があり、私の経験では、ログをトレースするのは常に苦痛でした。とは言っても、ログが適切に管理されていれば、優れた診断/レポートを取得できます。コードが適切にテストされない理由の1つは、本番コードに大量のログがあるためです。開発者が行う傾向があるのは、コードが機能することを確認するために開発しているときにログステートメントを追加することです。その結果、正しいアサーションでテストを作成しないことをお勧めします。必要なのは、よくテストされたたくさんの小さなクラスが一緒に構成されていることです。アサーションは、テストが失敗した理由を正確に示す必要があります。

あなたのコードパスで、その主な責任である何かが起こることを期待しているとしましょう(たとえば、ユーザー/またはログインしている誰かを登録するためのDBエントリを作成しました)、私がその主な責任を言うとき、私はで起こる副作用について話していませんコードパス。メインコードパスにエラー状態がある場合は、ログに記録してユーザーフレンドリーなメッセージに変換できれば、例外をスタックの一番上までスローする必要があります。ここでは、RuntimeExceptionsが適しています。これは、ビューレイヤーに到達するまでこれらの例外をキャッチしたくないためです。副作用は情報/警告のようなものであるため、ログに記録することもできます。

于 2013-03-06T22:36:39.860 に答える