質問

ついてはどのように捉えてい開始の改善にも悪い。

についてご説明いうのは、以前のあなたにオススメの作成ユニット試験およびリファクタリング.使ってみましたこれらの手するこの無意味します。

実際にシステムが壊れないでいます。

例えば、システムのどのメッセージを送信します.で行われたものなどに利用できる可能性があると"を忘れ"の価値を高めるメッセージです。問題は、他の多くのモジュールを自分の回避策の構築に、このカウンター合全て正確にカウンターのシステムが全体としてとなるのではないかとのであります。の解決策が変更すべてのモジュールを外して自分の修正が150+モジュールが必要となるコーディネートできる余裕はないのです。

さらに悪化した場合は、ある問題を回避策をとらないシステム自体が人々の研究は進んでいるわけです。例えば、システムなりに関するメッセージを一つのメッセージ。一部のサービスを必要とつのメッセージとめて表示されます。会計部門について知っているこの制限られており、ここ数のメッセージをこれらのサービスは、カウントのメッセージグループや掛け算で5月4日に取得し、正しい数のメッセージするものではありませんアンダーグラウンドこれらの逸脱やかに多くないものが現在のシステムです。

定できるようになりましたがまず取り組んでこのシステム?何をしていますか?

数の追加もの私は一男軍に取り組みでは受け付けていません回答の採用を十分に男性とリデザイン/refactorます。数週間から数か月かかることが必要である可視の進行ないオプションのいずれかのリファクタリングを自分で出するというものである。

一部の技術的内容:システムのJavaやPHPとは言えないように思いこんでいる。あるデータベースでは、Oracle、PostgreSQLます。ほかの欠点は、前述のコードは臭いがなされていなければならないのは本当にひどく書記載されています。●

追加情報:

カウンターに問題がない同期の問題です。カウンターの++の記述を追加一部のモジュールは、追加あるいは他のモジュールです。迅速や汚れの固定が追加されています。の解していないような側面のモジュールを必要とするので、不可能を忘れておくことが出来ます。問題はないとの固定も、このようなものだようこの変更によい休憩10その他のモジュールです。

更新:

お引受けさせてもらいましたGreg Dの答えです。もうようにアダム-Bellaireりするのではなく、助けてくれるのかを知されるようになっています。感謝すべての答えなのです。

役に立ちましたか?

解決

  1. 火災を消します。重要な優先度の問題がある場合、それが何であれ、最初にそれらを処理する必要があります。必要に応じてハッキングします。コードベースが臭いので大丈夫です。今後改善していくと思います。これは、あなたが報告している人を対象とするあなたの販売テクニックです。
  2. 控えめな果物を選んでください。この特定のソフトウェアは比較的初心者であり、それに対処するために再タスクされたと思います。コードの関連するサブシステムで、1つか2日以上かかって解決できないと思われる明らかに簡単な問題を見つけて修正します。これにはリファクタリングが含まれる場合と含まれない場合があります。目標は、システムと元の作者のスタイルに慣れることです。本当に幸運ではないかもしれません(私がシステムの前に働いていた2人の無能な人のうちの1人が、コメントを常に1つではなく4つの句読点で後修正しました。しかし、著者の弱点についての洞察を深め、何に注目すべきかを知ることができます。たとえば、グローバルな状態との広範な緊密な結合と言語ツールの不十分な理解。
  3. 大きな目標を設定します。あなたの経験が私の経験に匹敵する場合、前のステップを実行するにつれて、特定のスパゲッティコードにますます頻繁に気づくでしょう。これは、解く必要がある最初の結び目です。コンポーネントの理解と、元の作者が間違っていた可能性のあるもの(したがって、注意する必要があるもの)に関する知識を身につけた経験を基に、システムのこのサブセットのより良いモデルの構想を開始できます。機能を維持するために面倒なインターフェイスを維持する必要がある場合でも心配しないでください。一度に1ステップずつ実行してください。

泡立て、すすぎ、繰り返してください! :)

時間があれば、システムの他の部分とのインターフェースの下に、新しいモデルのユニットテストを1レベル追加することを検討してください。悪いインターフェイスを使用するテストによってコードに悪いインターフェイスを刻まないでください。将来のイテレーションでそれらを変更するでしょう。

言及する特定の問題への対処:

ユーザーが手動で回避している状況に陥った場合、変更についてユーザーと話してください。時間を短縮する前に、変更を提供する場合、変更を受け入れることを確認します。彼らが変更を望まない場合、あなたの仕事は壊れた振る舞いを維持することです。

他の複数のコンポーネントが回避しているバグのあるコンポーネントに遭遇したとき、私は並列コンポーネント技術を支持します。既存のカウンターがどのように機能するか が機能するカウンターを作成します。同様の(または実用的な場合は同一の)インターフェイスを提供し、新しいコンポーネントをコードベースにスライドさせます。破損したコンポーネントを回避する外部コンポーネントに触れるときは、古いコンポーネントを新しいコンポーネントに置き換えてみてください。同様のインターフェースによりコードの移植が容易になり、新しいコンポーネントが失敗しても古いコンポーネントはそのままです。できるまで古いコンポーネントを削除しないでください。

他のヒント

今、あなたに何が求められていますか?機能の実装、またはバグの修正を求められていますか?彼らはあなたが何をしたいのかさえ知っていますか?

「修正」するための人材、時間、またはリソースがない場合システム全体として、あなたができるのは保釈水だけです。あなたは、「目に見える進歩」をすることができるはずだと言っています。数か月後にさて、あなたが説明したのと同じくらい悪いシステムで、あなたは実際にシステムを悪化させるかもしれません。目立った何かをするようにというプレッシャーの下で、コードを追加するだけで、システムをさらに複雑にします。

最終的にはリファクタリングする必要があります。それを回避する方法はありません。エンドユーザーに表示されるリファクタリングの方法を見つけることができる場合、「数か月」ではなく6〜9か月または1年かかる場合でも、理想的です。しかし、できない場合は、選択することができます:

  • リファクタリング、および「何も達成していない」と見なされるリスク。あなたの努力にもかかわらず
  • リファクタリングせずに、「可視」を達成します;システムをより複雑にし、いつかリファクタリングするのをより難しくします。 (たぶんあなたがより良い仕事を見つけて、次の開発者があなたの住んでいる場所を見つけられないことを望んでいます。)

あなたにとって最も有益なのは、会社の文化に依存します。彼らはいつの日か、より多くの開発者を雇うか、このシステムを他の製品に完全に置き換えることを決めますか?

逆に、「物事を修正する」努力が実際に他のものを壊します、彼らはあなたが片手で取り組むように頼まれている怪物について理解していますか?

ここでは簡単な答えはありません。申し訳ありません。独自の個別の状況に基づいて評価する必要があります。

これは基本的に単体テストとリファクタリングと言う本全体ですが、それを行う方法に関するより実践的なアドバイスがあります

http://ecx.images-amazon.com/images/I/51RCXGPXQ8L._SL500_AA240_.jpg

http://www.amazon.com/Working-Effectively-Legacy-Robert -Martin / dp / 0131177052

このシステムを含むディレクトリをWindowsエクスプローラーで開きます。次に、Ctrl-A、次にShift-Deleteを押します。それはあなたの場合の改善のように聞こえます。

しかし、そのカウンターはスレッドセーフの問題があるようです。増加する関数をロックします。

そして、システムの残りの部分については、不可能なことはできないので、可能な限りのことを試みてください。システムを2つの面から攻撃する必要があります。より目に見える問題の問題に最初に気をつけて、進行状況を示すことができます。同時に、インフラストラクチャの問題に対処する必要があります。そうすれば、いつか実際にこの問題を修正できる可能性があります。

幸運を祈ります。情報源はあなたと一緒です。

リファクタリングが中程度に難しいと思われる領域を1つ選択します。既存のメソッドのシグネチャのみを使用して、元のコードのスケルトンを作成します。インターフェースを使用することもあります。その後、ハッキングを開始します。 「新規」を指すこともできます。それらに到達するまで、古いメソッドにメソッドを追加します。

次に、テスト、テスト、テスト。単体テストはないので、古き良き時代の音声起動ユニットテスト(人)を使用するだけですか?または、独自のテストを作成します。

フラストレーションや質問など、ある種のリポジトリに移動するときの進捗状況を文書化します。これにより、このプロジェクトを取得した次の貧しいシュマックがあなたの居場所にならないようになります:

最初の部分を完了したら、次の部分に進みます。鍵は、漸進的な進歩の上に構築することです。そのため、最初に最も難しい部分から始めてはいけません。意気消沈するのは簡単すぎます。

Joelには、リライティング/リファクタリングに関する記事がいくつかあります。

http://www.joelonsoftware.com/articles/fog0000000069.html

http://www.joelonsoftware.com/articles/fog0000000348.html

私はほぼ3年前から同じ特性を持つレガシーシステムを使用してきましたが、知っているショートカットはありません。

従来のシステムで最も気になるのは、いくつかのバグを修正できないことです。バグを修正すると、他の多くの機能が破損する可能性があるためです。これは、い回避策または古い関数の新しいバージョンの作成を必要とします。古い関数の呼び出しは、一度に(テスト中に)新しい関数に置き換えることができます。

あなたのタスクの目標が何であるかはわかりませんが、できる限りコードに触れないことを強くお勧めします。必要なことだけを行います。

人々にインタビューすることで、できる限り文書化することができます。どの質問をすればよいかわからないため、これは大きなタスクです。人々は多くの詳細を忘れてしまいます。

それ以外:支払いを受け、十分な精神的サポートを得ていることを確認してください。泣き、歯ぎしりがあります...

どこかから始める必要がありますが、修正が必要なバグがあるようです。私はそれらのバグを処理し、迅速なリファクタリングを行い、途中で可能な単体テストを作成しました。また、 SourceMonitor などのツールを使用して、コードの最も「複雑な」部分を特定します。システム内で、何らかの方法で設計を簡素化できるかどうかを確認します。最終的に、あなたはそれが遅いプロセスであることを受け入れ、より良いシステムに向かって小さなステップを踏むだけです。

システムの一部を抽出し、分離して書き換えることができる部分をかなり迅速に選択しようとします。あまり役に立たなくても、かなり迅速に進捗を示すことができ、レガシーコードと直接インターフェイスする問題はありません。

願わくば、あなたがそのようなタスクをいくつか選ぶことができれば、彼らはあなたが目に見える進歩を遂げているのを見るでしょう、そしてあなたはより大きなモジュールを書き直すためにより多くの人々を雇うという議論を提唱できるでしょう。システムの一部が壊れた動作に依存している場合、多くの選択肢はありませんが、何かを修正する前に分離する必要があります。

うまくいけば、ロット全体を書き直すことができるチームを徐々に構築できます。

これらはすべて、ある程度の適切なトレーニングと手をつなぐ必要があります。そうしないと、人々の古い習慣が固執し、物事が期待どおりに機能しない場合、あなたの仕事が非難されます。

がんばって!

Deprecateも現在存在することは問題は、新しいものとしています。文書のことだけが全てではないので何が変わけ大きな赤の点滅標識の場所を指す。

行うことでそのようにすることができる既存のバグのものにされている補償ど)を損なわな進捗に向けて充実稼働システム。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top