生産性とSLOCについて
SLOCの問題
SLOCメトリックの問題は、以下を考慮せずに、記述されたコードの量の概算を測定することです。
- コードの品質(つまり、バグのために100 SLOCごとに90 SLOCを追加しなければならないが、コードが配信された時点ではわからない場合)
- コードで達成された目標(つまり、10K SLOCは予想されるすべてのユースケースまたはユーザーストーリーを処理しますか?それともごく小さなサブセットのみを処理しますか?)
- コードの保守性(つまり、予想される進化する要件に合わせてコードを調整するには、1%または50%のコードを追加する必要がありますか?)
別の言い方をすれば、コピーペーストされた部分を多く含む、エラーが発生しやすいメンテナンス不可能なスパゲッティコードの生成は、慎重に設計された再利用可能なコードよりも生産的であると見なされます。
そのため、SLOCは生産性を測定する最良の方法ではありません。
どのような生産性を考慮していますか?
プロセスの生産性が測定されます。したがって、SLOCは、コーディングプロセスだけで完全に有効な指標になる可能性があります。
たとえば、貧しい要件を誤解し、ソフトウェアを生産するために5か月を費やし、それをユーザーに見せ、それが明らかに間違っていることを発見し、さらに5か月を費やして最初から完全に書き直す場合、SLOCでも同じ生産性が得られます/ month、たとえば、頻繁にフィードバックすることで誤解を減らすアジャイルプロセスを使用したために、チームがコードを最初に作成すること。この明らかな平等な生産性は、大きな問題を隠しています。
そのため、ソフトウェア開発の生産性の測定では、要件の分析、コーディング対象の設計、コーディング、テスト、デバッグ、ユーザーの期待を満たしていることの検証など、プロセス全体を考慮する必要があります。これらのアクティビティはすべて非常に異なるため、最も重要なことは、問題となる唯一の思考を測定することです。つまり、動作しているソフトウェア、つまり、ソフトウェアが生成したものがユーザーにとって意味するものです。
ソフトウェア成果物の測定方法
いくつかのアプローチがあります。
- 従来のソフトウェアエンジニアリングの典型的なアプローチは、ファンクションポイント(FP)です。機能ポイントは、満たすべき要件に基づいて測定されます(たとえば、フォームの数、各フォームのフィールドの数など)。生産性は、単位時間あたりおよび1人あたりFPで測定されます。一部の企業は、特定のドメインの特定の言語で、開発者が単位時間あたりに生成できる機能ポイントの数を示すデータさえ持っています。FPの問題は、事前に非常に詳細な要件が必要であり、時間がかかることです。
- より現代的で実用的なアプローチは、ストーリーポイント(SP)です。これらは、生成されるコードの複雑さを評価するために使用され、開発チームの速度を評価するために日常的に使用されます。ただし、SPは、すべての詳細が判明する前に実行された作業の推定尺度です。実際に起こったことの最終的な測定値ではありません。そのため、生産性の指標として使用する場合は、推定プロセスで裏目に出る可能性があるため、注意が必要です。
静的タイピングと動的タイピングの生産性について
私は自分が静的に型付けされた言語のファンであることを告白しなければなりません。なぜなら、私の内なる自己のほうがより信頼性が高いことを知っているからです(コーディングの年月がそれを証明してくれました)。
したがって、私が確実にとるべきことは、静的に型付けされた言語は、静的に型付けされていない言語よりもコンパイル時のエラー/バグ(タイプミス、予想される型の不一致など)を防ぐことができるということです。しかし、すべての客観性において、私はこれをより高い生産性として虐待的に一般化することを敢えてしません。
あなたの建築家は正しいですか?
多分そうでないかもしれません。
しかし、彼の議論は有効ではないようです。静的に型付けされた言語の生産性の向上は、コンパイラーによって事前にキャッチされたかなりの数のエラーに由来します。
したがって、動的に型付けされた言語に必要な手直しを見なくても、SLOCだけを見て、この「より高い」生産性の向上を見つけることはできません。したがって、彼の比較は公平ではありません。
同様の状況の議論も当てはまりません。一部の動的型付け言語では、従来の静的型付け言語のいずれかで同じことを行うよりも少ないコードで済む、より高いレベルの構成体を使用できます。したがって、必要な時間は短くなり、コードの記述は少なくなりますが、同じ分析、テスト、検証のオーバーヘッドが追加されます。したがって、SLOCで生産性を測定すると、潜在的な生産性の向上が希薄になり、動的に型付けされた言語に対するバイアスが生じます。
その主張を裏付ける研究はありますか?
このトピックに関するいくつかの最近の学術研究が存在します。それらの一部には静的型付けの利点がありますが、一般的には特定の目的(文書化、不十分に文書化されたコードまたはAPIの再利用など)に限定されます。慎重な表現も使用されます。これは、最新のIDEが動的型付けに関連するリスクを大幅に削減したためです。