アドバイス:新しく油注がれたチームのリードを、ゼロからコードベースを作成しないように説得する方法


8

私はかなり有名なMNCで働いており、私が働いているモジュールは新しい「リード」に割り当てられています。コードベースは非常に巨大(130K以上、他のモジュールとの相互依存関係がある)ですが、安定しています-いくつかの部分は長年にわたって醜く成長していますが、おそらく動作状態にあります。(私たちの製品は、新しい製品でも、何年も稼働しています)。問題は、リードが「細かい粒度とプロアクティブな設計」を網羅するようにコードをゼロから書き直したいということです。

私は直感的にそれがあまり良い考えではないことを知っていますが、彼/チームの他のメンバー(何年もの経験より私よりもはるかに年上です)に、自分をあまり見慣れないように説得するにはどうすればよいですか(あなたはすべきではありません) Joel et alはそれを禁止する明確な記事を持っているので、書き換える)?

私は関係者と良好な関係を築いており、それを台無しにしたくはありませんが、今後何年にもわたって間違いなく私たちを悩ませる決定に参加したくもありません!! より穏やかで、まだ効果的なアプローチに対する提案はありますか?あなたがそのような状況にあなたの好みにどのように取り組んだかについての説明でさえ、私を大いに助けてくれるでしょう!

編集:私が話しているコードベースは製品/ GUIではなく、製品のすべての重要な機能を備えたカーネルレベルです。私はなぜあなたが私がそんなに不安に聞こえるのか知っているといいのですが!


念のため、この種のアドバイスをする前に...このコードに対して多くの進化/保守作業を行っていますか(そして、最終的に回帰エラーの修正に多くの時間を費やしています)?新しい機能を追加する必要がありますが、コードの「醜い」部分に触れる必要があるため、追加できませんか?書き換えは

@paolo-いいえ、コードベースは正常に機能しています(私が製品に名前を付けることができればいいのですが、おそらくそれを使用しています:))。一部のお客様にはバグがありますが、コードに大きなハッキングはありません(HWの欠陥を隠蔽する必要がある場合を除いて!!)
TCSGrad


130kのカーネルコードをそのまま使用し、ドライバーは細かい粒度でプロアクティブな設計です。新しいデバイスまたはプロトコルを実装/インターフェースすることは十分に困難またはほぼ不可能ですか?意図された変更の結果により、顧客/ダウンストリームユーザーは大幅に容易になりますか?
JustinC、2011年

顧客は何も感じません-インターフェースはかなりシンプルで十分に堅牢です。私が決定したように、その意図は「コードの読み取りの複雑さ」を減らすことでした。私見、それはかなり主観的な見方です...コード全体を最初から書き直すと、もちろん読むのは簡単になります-しかし、とにかく両方を読む必要がある新しいエンジニアについてはどうでしょうか。
TCSGrad 2011年

回答:


8

彼と一緒に数学をしてください:

借金側:

  • 現在持っている機能を再現するのにどれくらい時間がかかりますか。それはいくらかかりますか(開発者+オーバーヘッド)

  • 新しい機能やバグ修正を導入できなかった場合、またはそれよりもはるかに遅い速度でしか導入できなかった場合、会社はどれほどの損失を被りますか?

  • nか月後に書き換えを完了できず、現在のソースベースにフォールバックするリスクは何ですか?製品を一緒に殺すリスクを含みます。

  • 新しいコードベースが現在のコードベースと同じくらい醜くなるまでどれくらい時間がかかりますか?

資産側:

  • 書き換え後のコードの改善度(節約されたメンテナンスコスト/月で測定)

それをすべて追加し、おそらく最良/最悪のシナリオ比較を行います。

最後に答えがあります。答えを無視した場合は、上司に相談してください。


素晴らしい列挙!! それらを会議メモに追加します!!
TCSGrad 2011年

3
これは進むべき道だと思うかもしれませんが、古いコードベースに新機能を追加するのにかかる時間を過大に見積もると同時に、「新しい"古い機能リストまでのコードベース。
ウィーティー

素晴らしい点実際に関係するすべての開発者からこれらの見積もりを取得するのは良いことです。
Aditya P

@wheatiesもちろん、これはすべての見積もりに問題があります。それと戦う方法は、見積もりを頻繁に繰り返し、実際の進捗状況と比較することです。(製品のバーンダウンを考える)
イェンス・シャウダー、2011年

多くの場合、新しいコードの「資産」は、特に拡張とメンテナンスを数回繰り返した後、置き換えられたものと同じです。私見の完全な書き換えは決して最高のアイデアではありません。
gbjbaanb

13

必須:してはいけないこと、パート1(あなたはそれを見てきましたが、誰かがこの質問を見つけて、見つけていない場合に備えて)

ゼロから書き直すことは、開発者にとって非常に魅力的です。誰もがレガシーコードに取り組みたくありません。誰もがセクシーな新しいコードを書きたいと思っています。しかし結局のところ、それはビジネスに最適なものについてです。なぜ書き換えが必要なのですか?彼らはビジネスに付加価値を示す明確な方法でそのケースを提示できますか?

リソースを使わないように説得する必要はありません。彼らは会社リソース使うように説得する必要があります。


私はその記事が大好きです。私は物事を書き換えるのが嫌いです!
Mark Canlas、2011年

3
@Mark Canlas:私は書き直しの支持者であることが多いので、それは実際にはちょっとおかしいです。私はレガシーコードが嫌いです:)しかし、ビジネスに付加価値を示すことができない場合、書き換えは発生しないことも理解しています。私の意見は数字で裏付けられる必要があります。
デビッド

2
私はレガシーコードも嫌いですが、その記事を読んで以来、理論上のものと比較して、航行中の船を評価することを学びました。壊れた、走っている船は、ナプキンに鉛筆で書かれた架空の船よりも、1時間あたりの収益が高くなっています。それはバランスをとる行為です!
Mark Canlas、2011年

1
@Mark Canlas:もちろんです。そして、多くの開発者(多くの場合、非常に経験豊富な開発者でさえ)は、ビジネス全体のグリップを失います。ビジネスにとって具体的な価値がある必要があり、多くの場合、既存の製品にはその価値があります。私がいつもこのビジネスで嫌いな議論の1つは、「これにはすでにお金を使っているので、これを使う必要がある」ということです。時々、私の最後の仕事の場合のように、そのような決定が彼らを地面に追いやります。「常に書き換える」でも「決して書き換えない」でもありません。あなたが言ったように...バランス。
David

8

テストアプローチはコードベースをどの程度カバーしていますか?単体テストはどうですか?

そこにまだ到達していない場合は、コードを一度に1つのセクションだけ書き換えるようにし、書き換え中のセクションはほぼ完全(90%+)の単体テストコードカバレッジにすることをお勧めします。これを行うと、コードの一部が定義され、両方とも明確に定義され(テストできます)、既知のインターフェースも含まれます。

その時点で、そのコードを書き換えることははるかに低いリスクです。間違いは単体テスト/その他のテストで捉える必要があり、ソース管理も持っていると仮定すると、簡単に元に戻すことができます。

小さなチャンクで書き換えを行うことで、あなたとあなたのチームの両方が、より正確に完全な書き換えの感触を持つことができます。どちらもあなたが何をしているのか知っていますか?あなたの1人は悲観的/楽観的すぎますか?


130kのカーネルコードをそのまま使用し、ドライバーは細かい粒度でプロアクティブな設計です。新しいデバイスまたはプロトコルを実装/インターフェースすることは十分に困難またはほぼ不可能ですか?
JustinC、2011年

2

考慮すべきいくつかの関連要素があります。

  • ユーザーの希望どおりに機能しているという事実は、リライトではなくリファクタリングの兆候です
  • 単体テストがある場合は、書き直すのではなく、必ずリファクタリングしてください。そうでない場合は、リファクタリングとリライトの間の労力が平準化されます(最終的なシステムの単体テストを行うことが目標であると想定しています)。単体テストがなく、すべてのコードがGUIレイヤーにある場合、特に機能がほとんど壊れている場合は特に、書き換えが速くなる可能性があります。それが私の経験です。
  • プラットフォームを完全に変更することが目的である場合(アンマネージコード-> .NETまたはWindows-> LinuxまたはPHP-> pythonなど)、それは書き換えをサポートする明白な議論です。

いいえ、ユニットテストはありません。
TCSGrad 2011年

新しいものもそれを持っている可能性は低く、すでに関与している作業量を見ると、また、私が話しているコードベースは、製品/ GUIではなく、製品の重要な機能を備えたカーネルレベルです。私はなぜ私がそんなに不安に聞こえるのか知っているといいのですが!
TCSGrad 2011年

1
@ shan23-なぜあなたは書き換えを開始し、少なくとも受け入れテストスイートを維持しないのですか?あなたは同じ混乱を作成することになります。GUIがないという事実は、テストをはるかに簡単にするだけです!
スコットウィットロック

0

いやだっていうだけだよ。" 説得力がありますが、「そのメリットについて間違っているだけでなく、人間の労力を浪費しているので間違っています」と言ってもかまいません。


0

書き換えのビジネスケースはどこですか?あなたはニーズを満たすコードベースを持っています。確かに、それは完璧ではないかもしれませんが、時間とリソースの面でかなりの投資を表しています。完全な書き換えが保証されるのは、コードの品質が非常に悪いために組織がお金やビジネスチャンスを失う場合だけです。古い格言を覚えておく必要があります。壊れていなければ、修正しないでください。


これは私たちの業界で最悪のことなので、私はこれに反対票を投じなければなりません。一部の小さな容量で「機能する」ため、問題に適切に対処するためのボールが誰にもないため、開発者の怠惰、無能、怠惰な行動を助長します。
ウェイン・モリーナ

@WayneM:「書き換え」オプションは最悪のオプションですが、既存のコードで作業できない開発者の間の自我と能力不足が原因であることが多すぎます。彼らは書き直したいのはかっこいい新しいものであり、見当違いの態度でひどい間違いを犯してしまい、最後のことをやった人よりもはるかに優れている。古いコードが長い時間をかけて進化した場合(または最初からがらくたされている場合)にのみ書き換えを行う必要があり、それでも真剣なリファクタリングを最初に検討する必要があります。
gbjbaanb

0

在庫のショーツをできるだけ多く購入してください。経営者が自殺することに同意する場合、少なくともあなたはそれからいくらかお金を稼ぐべきです。結局のところ、あなたは彼らが戦車に乗った後すぐに通りに出ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.