低品質のコードベースをどのように維持しますか?
-
22-07-2019 - |
質問
記述したコードを維持できるようにするには、変数に名前を付け、コードを文書化し、何も繰り返されないようにし、抽象化が機能してハッキングが不要になるようにする必要があります。私はコードを読んでいます。
しかし、私が見た他の多くのコードベースは、大渦のようなものです。変数名はfoobarであり、不要な場合でも計算が行われ、多くのハックとパッチが適用され、抽象化が失敗し、展開スクリプトが失敗します...コードは理解できず、ほとんど使用できないスープです。
そう!私は興味がある。品質の低いコードベースをどのように維持しますか?
解決
規律
他のヒント
定数リファクタリング。コードファイルを開いたときに奇妙なものが表示された場合は、既存のコードの設計を改善するために数分投資することができます。
一連の単体テストを用意しておくと、変更中のコードが引き続き機能するか、変更が原因で破損するかを確信できるので、役立ちます。
家の窓が壊れているという話に少し似ています。壊れたウィンドウが表示されたら、修正する必要があります。 修正しないと、そこから物議を醸し始め、保守不能な混乱に陥ります。
私のプロジェクトのほとんどもContinuousIntegrationに置かれています。ユニットテストの構築と実行に加えて、静的コード分析(fxcop)も実行されます。時折、結果を見て、報告されているいくつかの違反を修正しようとしています。
一般的に説明するのは、コードベースがエントロピーを増加させる自然な傾向です。すべてのプロジェクトで、開発および保守されているために発生します。この着実な増加に対処するには、次のことをお勧めします。
-
十分な権限を持つチームの誰かが気にしなければなりません。これが最も重要な部分です。誰も気にしない場合、それは完了しません。この点は明らかですが、そうではありません。
-
標準とベストプラクティスを設定します。ほとんどの言語には、ベストプラクティスについて誰かが書いた本があります。たとえば、PERLには、Damain Conwayによる非常に優れたPerlベストプラクティスの本があります。これを行わない限り、チームの全員がコード、変数名、コメントなどを記述する独自の方法を持っています。
-
コードレビュー。コードレビューにはチェックリストが必要です。変更が機能するだけでは不十分です。ベストプラクティスのリストにも準拠する必要があります。 2層のコードレビューを設定します。第1層はピアコードレビュー、第2層はコード品質を重視するリリースマネージャーです。
-
デザインレビュー。バグまたは機能強化がバグ追跡システムに入力された場合、変更管理ボードによってレビューされることが重要です。変更管理ボードは作業のスケジューリングを決定し、誰が作業の設計をレビューする必要があるかを決定します。これは、コードの抽象化を維持し、変更がプロジェクトの設計ドキュメントと目標に準拠することを確認する場所です。チームのソフトウェアアーキテクトまたはリードデザイナーはCCBの一部である必要があります。
-
コード品質トリガーのチェックイン。一部のベストプラクティスは、コードによって直接適用できます。書式設定、タブ/スペースの使用などのコードをチェックする小さなスクリプトを作成します。これは、異なる方法でコード品質について考えるのに役立ちます。
一部の参照を参照してください。
>ピアレビューでは、一枚の紙では定量化が困難なコード品質基準をすばやく確立します。単体テストを使用すると、ほとんど恐れることなくコードを変更できます。規律、それがたくさん。
関連する質問:品質の低いコードを書くことで人々はどうやって逃げますか?
答えは次のとおりです。
この業界の無能な人々のための良い戦略はこれです:
-
特に非技術系および半技術系の人々に印象的な音を出す能力を養います。技術的な人々にとって十分に妥当で、バランスを崩さないように聞こえるようにしてください。
-
タッチするコードを完全に台無しにします。
-
今、これが重要な部分です。あなたが見つけられる直前に他の場所でより良い仕事を見つけてください。最適なタイミングは特定の状況によって異なります。
数年前に聞いた用語「技術的負債」を紹介します。 (1)Wikipediaエントリと、Martin Fowlerの(2)Webサイト。
本質的に、私は人々が不器用なソフトウェアを構築することを目指し始めるとは思わない。通常発生するのは、開発期間中に時間枠が圧縮され、要件が変更または置き換えられ、他の多くの商業的現実が品質の開発と設計の中心に食い込むことです。
ファウラーから:
"迅速かつ汚い方法で物事を行う 技術的負債を抱える これは金融負債に似ています。 金融負債のように、技術的な 負債は利子の支払いを招きます。 余分な努力の形で来ます 私たちが将来しなければならないこと 迅速な開発のため 汚れたデザインの選択。"
ウィキペディアから:
"延期される可能性のあるアクティビティ ドキュメント、テストの作成、 TODOコメントへの参加と コンパイラと静的コードへの取り組み 分析の警告。の他のインスタンス 技術的負債には次の知識が含まれます 組織全体で共有されていない わかりにくいコードは 簡単に変更できます。"
私が見た(およびいくつかの開発チームに指示した)ことは、通常は新しい作業が開発される前の開始時に、コードのリファクタリングとクリーンアップを開発の反復の早い段階で行うことです。
ピアレビュー、単体テスト、プロのソフトウェアテスターはすべて、その技術的負債の一部の返済と、優れた予測(および優れたコードの再利用)を支援します。
予算がある場合、維持費(時間、労力)を支払う意思がある限り、自動テストは適切な投資となります。
今日、fxCop(および他の類似のツール)などの質の高いツールが数多くありますが、どのアプローチを楽しませるかを慎重に選択する必要があります。
設計およびコードベースの品質を維持するための努力を考慮する必要があるため、開発チーム/製品/会社/顧客などにとって最も効果的で有用な方法を慎重に検討してください。
[(1) http://en.wikipedia.org/wiki/Technical_debt ]
[(2) http://martinfowler.com/bliki/TechnicalDebt.html ]
これは、コードを書くと他の人々が読む
1. 悪い習慣
を残しました
2. 意味のあるプロシージャ、関数、変数名を使用
3. ドキュメントの使用(手順/関数/計算/など)の仕組みとその結果について、不要なコメントをしないでください
4. コーディングにスタイルを与えるようにして、人々がそれを認識できるようにします(GNUスタイルコードの使用など)
または
そのためにコードビューティファイヤーを使用する
5. チームとして働くことを考えてください(あなたが一人だったとしても)そしてあなただけではなく(あなたがコードを読んだとしても)
6. リファクタリングコードも同様に良いはずです
7. あなたが書いたコードについてチームメイトと相談します、彼らはそれを読むことができますか?
8. オープンソースコミュニティから学ぶ、その仕組みとコードの共有パッチ
9.可能であれば、 SVNまたはCVS を使用してコードを保守します
そして KISS の原則を覚える( K I t S シンプル、 S tupid)
およびもちろんシンプル、リーン、平均&美しい
それが逆になった場合(他の人が書いている、あなたが読んだ)、私は何と言ったかわからなかった:D
ドキュメント、ソース管理、単体テスト、および優れたプログラマー。
既存のコードを壊すことを心配せずに変更とリファクタリングを可能にする単体テストの包括的なスイート。
マイケルフェザーの「レガシーコードを効果的に使用する」のコピーを入手することをお勧めします。
Fridgemagnet say: "鈍いプログラマーは完璧なコードベースを持っています"
非常に小さい(1つのプロジェクトで10〜20人未満の)開発チームである場合にのみ、コードベースの保守がうまくいかないことがあります。プロジェクトが成長し、チームが成長すると、プラクティスが拡大するか失敗します。
あなたが求めている変更は、基本的にハッキングからプログラミングへの移行であり、最後にソフトウェアエンジニアリングです。
ソフトウェアエンジニアリングでは、チームの全員が完璧ではないことを認識しています。コードをレビューし、他の人がテストしていることを確認し、相互に確認します。
顧客の要望を消化し、設計文書に変換できる建築家の必要性が見え始めます。これは、他の誰かがプロジェクトに追加される前に1か月間簡単に食べることができます(ただし、開発時間の経過により、数か月または数年も節約できます!)。彼はすべてが理にかなっていて、合理的にうまく適合することを確認します。
チームのさまざまな部分が統合ポイントを理解できるように、通常はUMLベースの設計ドキュメントがあります。行ったことはすべて認識しているので、それを行った人なしでやり直す必要があるかもしれないので、それを文書化します。
品質プロセスはより厳格になり、テスト中に特定のバグに対処する変更のみをチェックインするように、ルールの施行を開始します。
テスト、リファクタリングなどは明らかに重要であり、ピアおよびチームのレビューによって強化されます。
この種のものが常に必要だと言っているわけではありませんが、明らかにそうではありませんが、あなたの質問では、ごちゃごちゃしたコードベースを議論します。
通常、これらの優れた手法は、コードベースがひどくひどいために完全に失敗するGIANTプロジェクトの後に実装されます。それから彼らは責任をかわすことができない人を解雇し、大規模なプロジェクトの経験があることを願うマネージャーを雇い、(ゼロにならなければ)ゼロから再開します。
少なくともそれは私の経験です。 YMMV
悪い習慣を破って学ぶには、練習、優れたツール、能力、意欲だけが必要です。
コーディングは手書きによく似ています。誰もが独自のスタイルを持っています。レガシーコードを維持するときに直面した最大の課題の1つは、何が起こっているのかを把握しようとすることです。通常、コードベースの一貫性の欠如が原因です。