コーディング標準の進化、それらにどのように対処しますか?


12

既存のコードベースのプロジェクトのコーディング標準/スタイルガイドの進化にどのように対処しますか?あなたのチームの誰かがプログラミング言語でオブジェクトのインスタンス化のより良い方法を発見したとしましょう。古い方法が悪いことやバグがあるということではなく、新しい方法のほうが冗長でなく、はるかにエレガントだと感じるだけです。そして、すべてのチームメンバーが本当に気に入っています。既存のコードをすべて変更しますか?

コードベースが約500.000行以上のコードであるとします。それでも既存のコードをすべて変更しますか?それとも、新しいコードのみを新しい標準に準拠させますか?基本的に一貫性を失いますか?

プロジェクトのコーディング標準の進化にどのように対処しますか?

回答:


16

チームの生産性を高めるためのコーディング標準が存在します。理論的には、コードを理解、変更、テストしやすくします。実際には、危険な量のメタワークを作成できます。チームは、最も正確でエレガントなソリューションを追求して、既存のコードを何度も書き直します。残念なことに、メタワークの問題は、誰もが熱心で、正しいことを行うことに夢中になっているチームではさらに悪いように思われます。

プロジェクトからプロジェクトへと移行するコンサルタントとして、厳格なコーディング標準を備えた優れた規律は、結果に関心のある優秀な開発者よりもプロジェクトの成功にはるかに貢献しないことがわかりました。一貫性のないコーディングスタイルは、驚くべき開発者にとっては厄介なものです。一貫性の有無にかかわらず生産的です。確かに、一貫性のないコードに遭遇した場合は、現在の標準とそれに固執する。ただし、プロジェクトのすべてのコード行を現在の標準に更新することを主張しません。彼らはベストプラクティスが行き来するのを見てきたので、彼らは主張しません。今日何かをする正しい方法は、明日何かをする正しい方法と同じではありません。もしそうなら、コーディング標準は進化しません。したがって、何かを行う正しい方法が時間とともに変化する場合、「正しい」という私たちの定義が壊れている可能性があります。

それは、標準が重要ではないということではありません。標準の目標は生産性であることに留意してください。新しい標準への書き直しが長期的に見返りを保証できない場合は、時間を無駄にしないでください。新しいコードまたはリファクタリングされたコードで新しい標準を正当化する方がはるかに簡単です。エレガンスはクールですが、結果と同じではありません。


6

私たちがしているのは、コードベースの進化(革命ではない)であり、更新された標準を使用する場合です。

  • 新しいコードが書かれています
  • コードはリファクタリングされます
  • バグが修正されました
  • 新しい部分は既存のクラスに追加されます

コードベースの一貫性が重要であるため、変更によって「古い」スタイルコードと「新しい」スタイルコードが混同される可能性がある場合は、コーディング標準の更新を次のプロジェクトに予約することをお勧めします。


3

まず、コーディングガイドライン(の必須部分)にこのような「ベストプラクティス」を含めません。それらは、たとえば付録で、あなた何かをする方法の例として言及されるかもしれませんが、それそのようにされるべきありません

とはいえ、コーディング標準の変更を検討する場合は2つあります。

  1. 古いコードを更新せずに古いコードと新しいコードが混在している場合でも、読みやすさに影響しない変更。
    これらの変更はすぐにコーディング標準に追加でき、すべての新しいコードおよび変更されたコードに対して有効であると見なされる必要があります。古いコードは、時間の許す限り、またその領域に変更が加えられるにつれて、徐々に適応させる必要があります。
    私が実際に遭遇したこの種の変更の例は、各ファイルの先頭にある著作権表示の変更です。
  2. 古いコードと新しいコードが混在すると読みやすさが低下する変更。
    これらの変更は、コードベース全体に一度に適用するか、本当に必要な場合は再検討する必要があります。
    この種の変更の例は、インデントまたはブレースの配置の変更です。

2

これは、作成する製品のタイプに本当に依存する必要があります。

  • 社内で作成され、顧客に展開している商用アプリケーションの場合、主な目標は収益です。古いコードにバグがない限り、新しいコーディング標準が進化しても問題ありません。製品に新機能を追加して収益を生み出すことに集中する必要があります。必ず、新しいコーディング標準を新しいコードに適合させますが、既存のすべてのコードを変更するのは時間の無駄です。
  • あなたは、オープンソース製品、または複数の企業(多分あなたの顧客)を参照し、ソース上で動作する製品を開発している場合は、コードの可読性になり多くの方が重要とこの場合には、賢明な決定が正確に応じてなされるべきですどれだけのコードを変更する必要があるのか​​、長期的にはどのようなメリットがあるのか​​。私たちは皆、かなりのコードが好きですが、実際には、クローズドソースを扱う営利企業にとって、常に新しい標準を採用することは、長期的に収益を失うことを意味します。

1
また、テスト範囲にも依存することを付け加えます。重要な機能は統合テストと単体テストでカバーされていたため、非常に大きな10,000行以上を自信を持ってリファクタリングしました。
マルタインVerburg

@Martijn-良い点、これも非常に真実です。
-mrwooster

0

個人的には、古いコードをそのまま残し、新しいことは何でも新しい標準に従うことを選択します。具体的には、old.cで二重標準を使用しません。ただし、new.cを作成する場合は、より洗練された新しい構文を使用できます:)


その選択の背後にある理由を説明できますか?
ワードベッカー

ええと...あなたは言うことができる、それはちょっと直感です。mrwoosterが上で述べたことに基づいて、もしそれが商用アプリなら、化粧品の変更をするためだけに時間を無駄にしないでしょう。(機能は同じままです)。さらに、変更はオブジェクトのインスタンス化方法だけではありません。しかし、たとえば、どのようにメソッドにアクセスするのか。その後、多くのコードを修正する必要がありますが、バグが発生する可能性があります。だから、老人をそこに残しておくほうがいい。
バルン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.