サイドノートとして:新しい仕事を探してください。これはこれ以上良くならないでしょう。
レビューしているコードの目標は次のとおりです。
要件に従って機能する機能を出荷する。
技術的負債の増加を減らすため。
最初の目標は、ユニット、統合、システムおよび機能テストがここにあること、それらが関連していること、およびテストする必要があるすべての状況をカバーすることを確認することによってレビューされます。また、元の作者がプログラミング言語について持っている可能性のある信念を確認する必要があります。信念は、微妙なバグや、実際の動作とは異なる動作をするふりをする可能性があります。
2番目の目標は、質問に焦点を当てることです。一方で、新しいコードが技術的負債を増やすことは期待されていません。一方、レビューの範囲はコード自体ですが、コードベース全体のコンテキストです。そこから、レビュアーとして、元の著者からの2つのアプローチを期待できます。
外部コードは私のせいではありません。この機能を実装するだけで、コードベース全体を気にしません。
この観点では、コードはコードベースの欠陥をコピーするため、必然的に技術的負債が増加します。つまり、悪いコードが多いほど常に悪化します。
これは短期的には有効な短期的アプローチですが、長期的には遅延が増大し生産性が低下し、最終的に開発プロセスが非常に高価でリスクが高くなり、製品の進化が止まります。
新しいコードを書くことは、レガシーコードをリファクタリングする機会です。
この観点では、新しいコードに対するレガシーコードの欠陥の影響を制限できます。さらに、技術的な負債は削減されるか、少なくともコードの増加に比例して増加しません。
これは有効な長期的アプローチですが、短期的なリスクがあります。主なものは、短期的には、特定の機能を出荷するのに時間がかかる場合があることです。もう1つの重要な側面は、レガシーコードがテストされていない場合、リファクタリングするとリグレッションが発生する大きなリスクが発生することです。
奨励したい観点に応じて、レビュー対象者にリファクタリングを増やすかしないかをアドバイスする傾向があります。すべての場合において、すばらしいコードベース内の素晴らしいアーキテクチャとデザインを備えた完璧できれいなコードを期待しないでください。あなたが奨励すべきでないのは、くだらないコードベースで作業しなければならない知識豊富な開発者が自分の役割をうまくやろうとする行動です。物事を単純化する代わりに、以前よりも複雑にするだけです。これで、均一な不良コードの代わりに、デザインパターンのある部分、きれいで明確なコードのある部分、時間の経過とともに大幅にリファクタリングされた別の部分があり、統一性はまったくありません。
たとえば、中規模のWebサイトのレガシーコードベースを発見しているとします。通常の構造の欠如と、ロギングが行われたときに、ロギングフレームワークを使用する代わりにテキストファイルに手作業で追加することによってロギングが行われるという事実に驚いています。MVCとロギングフレームワークを使用する新しい機能を決定します。
あなたの同僚は別の機能を実装していますが、完璧なサイズを作成できるORMがないことに非常に驚いています。そこで彼はORMの使用を開始します。
あなたもあなたの同僚も、何十万行ものコードを経てMVC、ロギングフレームワーク、ORMをどこでも使用することはできません。実際には、数か月の作業が必要になります。MVCの導入を想像してください。どのくらいかかりますか?または、SQLクエリが、誰も理解できないコード内の連結(SQLインジェクションのための場所が時々ある)によってカオス的に生成された状況でのORMについてはどうでしょうか。
あなたは素晴らしい仕事をしたと思いますが、今では、プロジェクトに参加する新しい開発者は以前よりもはるかに複雑に直面する必要があります。
私が働いていたあるプロジェクトでは、4つの(!)ロギングフレームワークが並んで使用されていました(さらに手動ロギング)。理由は、誰かがログを記録しようとするたびに、それを行うための一般的なアプローチがなかったため、新しいフレームワーク(すべてのケースでコードベースの5%でのみ使用されていた)を学ぶ代わりに、単純に別のものを追加することですすでに知っています。混乱を想像してください。
より良いアプローチは、コードベースを一度に1ステップずつリファクタリングすることです。再度ロギングの例を取り上げると、リファクタリングは次の小さな手順で構成されます。
レガシロギングが行われるすべての場所(つまり、ログファイルに直接アクセスする場合)を見つけ、それらがすべて同じメソッドを呼び出すようにします。
該当する場合、このコードを専用ライブラリに移動します。ショッピングカートクラスにストレージロジックを記録したくない。
必要に応じて、ロギングメソッドのインターフェースを変更します。たとえば、メッセージが非公式か、警告かエラーかを示すレベルを追加できます。
新機能で新しくリファクタリングされたメソッドを使用します。
ロギングフレームワークに移行します。影響を受けるコードは専用ライブラリ内のコードのみです。