コードの物理的な行について話すことはまったく無意味であることを認識したほうがよいでしょう。コードの物理的な行数 (LoC) はコーディング スタイルに大きく依存するため、開発者によって桁違いに異なる場合があります。
.NET の世界では、LoC をカウントする便利な方法があります。シーケンス ポイント。シーケンスポイントはデバッグの単位で、ブレークポイントを入れる際に濃い赤でハイライトされたコード部分です。シーケンス ポイントを使用すると、論理 LoCについて話すことができ、このメトリックをさまざまな .NET 言語間で比較できます。論理 LoC コード メトリックは、VisualStudio コード メトリック、NDepend または NCover を含むほとんどの .NET ツールでサポートされています。
たとえば、8 LoC メソッドは次のとおりです (開始および終了ブラケット シーケンス ポイントは考慮されません)。

LoC の生産は、長期的にカウントする必要があります。200 以上の LoC を吐き出す日もあれば、LoC を 1 つも追加しないで 8 時間かけてバグを修正する日もあります。デッド コードをクリーンアップして LoC を削除する日もあれば、既存のコードのリファクタリングにすべての時間を費やし、新しい LoC を合計に追加しない日もあります。
個人的には、次の場合にのみ、自分の生産性スコアで 1 つの LoC をカウントします。
- 単体テストでカバーされています
- それはある種のコード コントラクトに関連付けられています (可能であれば、もちろんすべての LoC がコントラクトによってチェックできるわけではありません)。
この状態で、.NET 開発者向けの NDepend ツールをコーディングした過去 5 年間の私の個人的なスコアは、コードの品質を決して犠牲にすることなく、1 日あたり平均 80 の物理 LoC です。リズムは維持されており、すぐに減少する様子はありません。全体として、NDepend は現在約 115K の物理的 LoC の重みをもつ C# コード ベースです。
LoC をカウントするのが嫌いな人 (ここのコメントでその多くを見ました) のために、いったん適切に調整されれば、LoC をカウントすることは優れた推定ツールであることを証明します。開発の特定のコンテキストで達成された数十の機能をコーディングして測定した後、LoC の TODO 機能のサイズと、それを本番環境に提供するのにかかる時間を正確に見積もることができるようになりました。