一部の開発者/マネージャーは、物事を成し遂げるためにより少ないコードを書くことに価値があると考えているため、維持するコードが少なくなります
これは、実際の目標を見失うという問題です。
重要なのは、開発に費やす時間を短縮することです。これは、コード行ではなく、時間(または同等の労力)で測定されます。
これは、自動車メーカーが各ネジを挿入するのにゼロ以外の時間がかかるため、自動車メーカーは少ないネジで自動車を構築する必要があると言っているようなものです。または持っていない。何よりも、車は性能が高く、安全で、保守が容易である必要があります。
答えの残りは、きれいなコードが時間の増加につながる方法の例です。
ロギング
ロギングのないアプリケーション(A)を取得します。次に、アプリケーションBを作成します。これは、アプリケーションAと同じですが、ロギングがあります。Bには常により多くのコード行があるため、より多くのコードを記述する必要があります。
しかし、多くの時間が、問題とバグの調査、および何が悪かったのかを解明することに費やされます。
アプリケーションAの場合、開発者はコードを読み続け、問題を継続的に再現し、コードをステップ実行して問題の原因を見つける必要があります。つまり、開発者は実行されたすべてのレイヤーで実行の開始から終了までテストする必要があり、使用されたすべてのロジックを観察する必要があります。
たぶん彼はすぐにそれを見つけることができて幸運かもしれませんが、おそらく答えは彼が探していると思う最後の場所になるでしょう。
アプリケーションBの場合、完全なロギングを想定して、開発者はログを観察し、障害のあるコンポーネントをすぐに識別して、どこを探すべきかを知ることができます。
これは、数分、数時間または数日節約できます。コードベースのサイズと複雑さに依存します。
回帰
DRYフレンドリーではないアプリケーションAを使用します。
DRYのアプリケーションBを使用しますが、抽象化が追加されたため、より多くの行が必要になりました。
変更要求が提出されますが、これにはロジックの変更が必要です。
アプリケーションBの場合、開発者は変更要求に従って(一意の共有)ロジックを変更します。
アプリケーションAの場合、開発者は使用されていることを覚えているこのロジックのすべてのインスタンスを変更する必要があります。
- 彼がすべてのインスタンスを覚えることができたとしても、同じ変更を数回実装する必要があります。
- 彼がすべてのインスタンスを思い出せない場合、矛盾するコードベースに対処していることになります。開発者がめったに使用されないコードを忘れた場合、このバグは将来に至るまでエンドユーザーに明らかにならない可能性があります。その時点で、エンドユーザーは問題の原因を特定するつもりですか?たとえそうだとしても、開発者は変更の結果を覚えていない可能性があり、この忘れられたロジックを変更する方法を見つけ出す必要があります。開発者はそれまでに会社で働いていなかったのかもしれませんし、それから他の誰かがゼロからすべてを把握しなければなりません。
これは、膨大な時間の無駄につながります。開発中だけでなく、バグの発見と発見でもあります。アプリケーションは、開発者が容易に理解できない方法で不規則に動作し始める可能性があります。そして、それは長いデバッグセッションにつながります。
開発者の互換性
開発者AはアプリケーションAを作成しました。コードはクリーンでも読みやすいものでもありませんが、魅力のように機能し、実稼働で実行されています。当然、ドキュメントもありません。
開発者Aは休日のために1か月間欠席しています。緊急変更要求が提出されます。開発者Aが戻ってくるまであと3週間待つことはできません。
開発者Bはこの変更を実行する必要があります。彼は今、コードベース全体を読み、すべてがどのように機能するのか、なぜ機能するのか、何を達成しようとするのかを理解する必要があります。これには何年もかかりますが、3週間でできるとしましょう。
同時に、アプリケーションB(開発者Bが作成した)には緊急事態があります。開発者Bは占有されていますが、コードベースを知らなくても開発者Cは利用可能です。私たちは何をしますか?
- BをAで動作させ、CをBで動作させると、2人の開発者が何をしているのかわからず、作業は最適に実行されません。
- BをAから引き離し、Bを実行させ、CをAに配置すると、開発者Bのすべての作業(またはその大部分)が破棄される可能性があります。これは潜在的に数日/数週間の労力の無駄です。
開発者Aは彼の休暇から戻ってきて、Bがコードを理解しなかったため、実装がうまくいかなかったことを確認します。彼は利用可能なすべてのリソースを使用したため、Bのせいではありません。ソースコードが適切に読めなかったからです。Aはコードの可読性を修正するのに時間を費やす必要がありますか?
これらの問題はすべて、さらに多くのものが時間の無駄になります。はい、短期的には、クリーンなコードは今より多くの努力を必要としますが、避けられないバグ/変更に対処する必要がある場合、将来的には配当を支払うことになります。
経営陣は、短いタスクが将来、いくつかの長いタスクを節約できることを理解する必要があります。計画に失敗すると失敗することを計画しています。
もしそうなら、より多くのLOCが書かれているという事実を正当化するために使用できるいくつかの引数は何ですか?
私のgotoの説明は、3か月で開発できる100KLOCコードベース、または6か月で開発できる50KLOCコードベースを持つアプリケーションを管理者に望んでいます。
経営陣はKLOCを気にしないので、明らかに短い開発時間を選択します。KLOCに注力するマネージャーは、管理しようとしていることについて知らされていない間、マイクロ管理しています。