完全なやり直しの可能性を減らす方法でコードを実装する方法 [終了]

StackOverflow https://stackoverflow.com/questions/937457

  •  06-09-2019
  •  | 
  •  

質問

私は、仕様が正しく指定されていないことが判明した 1 つの小さな仕様変更により、作品を破棄してしまいました。プロジェクトの開始時にそれが正しく行われていれば、そのほとんどはうまくいきました 最初から必要なかったでしょう.

このようなことが起こらないようにするための優れたヒントや設計原則は何ですか?

それとも、機能リクエストや実装途中での設計変更を実装するために必要なコードの再作業の量を減らすためでしょうか?

役に立ちましたか?

解決

モジュール化。うまく自分の仕事をするコードの小さなブロックを作成します。しかし、ほんの始まりのthats。それは完全な手直しが必要なので、不正なコードに貢献する要因のその通常、大きな組み合わせ。非常に不安定な要件、貧しいデザイン、コードの所有権の欠如からすべてが、リストは延々と続きます。

他の人が育ててきたものにに追加:通信を
あなたと顧客との間のコミュニケーション、あなたと経営、あなたや他の開発者、あなたとあなたのQA部門、皆との間の通信が鍵となります。経営者が合理的な時間枠を理解し、あなたと顧客の両方が、それはあなたの建物ということです正確に理解してくださいことを確認してください。

他のヒント

製品を構築する対象となる顧客とのコミュニケーションをオープンに保つために時間をかけてください。マイルストーンを作成し、各マイルストーンで顧客にプロジェクトを表示する時間を設定します。マイルストーンを見せたときに顧客が完全に失望したとしても、手持ちのものをスクラッチして、最後のマイルストーンからやり直すことができます。また、Csunwold が述べたように、これには、相互に独立して動作するブロックで作業を構築する必要があります。

ポイント...

  1. オープンなコミュニケーションを保つ
  2. 製品の進歩に対してオープンかつ正直であること
  3. 顧客のビジネスのニーズや製品の仕様変更については、日々変化することを厭いません。

ソフトウェア要件が変更され、1クライアントとのより頻繁な相互作用を除き、それについてできることはあまりありません。

一つは、しかし、変化に直面して、より堅牢なコードをビルドすることができます。それは誰もがもはや必要としない要件を満たしているコードを投げからあなたを保存しないだろうが、それは、このような変化の影響を軽減することができます。

たとえば、これが適用されるたび、むしろクラス(または言語で相当)よりもインターフェイスを使用して、あなたがそれらを必要とすることが確実でない限り、インターフェイスに操作を加えることは避けてください。そのように、あなたのプログラムを構築することによって、あなたは特定の実装の知識に依存している可能性は低い、とあなたが必要がないものを実装する可能性が低いです。

このアプローチのもう一つの利点は、簡単に別のものの実装を入れ替えることができるということです。プロトタイプは、製品と実際にパフォーマンスの基本である場合、例えば、それは時々あなたのプロトタイプのための非常識な(効率)が、最速を書くのは、テスト実装を作成し、終了のみで賢く何かに置き換えることを完済します事項。私は、これは時期尚早の最適化を避けるために非常に効果的な方法であることがわかり、したがって、ものを捨てます。

すでに言われているように、モジュール性が答えです。しかし、実際に使用するのは難しい答えになる可能性があります。以下に焦点を当てることをお勧めします。

  • 事前に定義されたことをうまく実行する小さなライブラリ
  • モジュール間の依存関係を最小限に抑える

最初にインターフェイスを記述することは、(依存関係に使用されるインターフェイスを使用して) これらの両方を実現する良い方法です。コードを書く前に次にインターフェースに対してテストを書くと、モジュール化されていない設計上の選択が強調されることがよくあります。

あなたのアプリが UI を多用しているかどうかはわかりません。そのため、モジュール化がさらに困難になる可能性があります。通常はまだ努力する価値がありますが、そうでない場合は、やがて破棄されることを想定し、作業の 90% が UI に関連付けられていないため、モジュール化を維持しやすいという氷山の原則に従います。

最後に、ヒントが満載の Andrew Hunt 氏と dave thomas 氏による『the pragmatic programmer』をお勧めします。私の個人的なお気に入りは DRY (「同じことを繰り返すな」) です。同じことを 2 回言うコードは臭いです。

  • 小さく繰り返す

  • 頻繁に繰り返す

  • 反復間のテスト

  • クライアントが意見を提供できるように、簡単に動作する製品をできるだけ早くリリースします。

基本的に想定 ものは捨てられるので、適切にコーディングしてください, 、そして、それを捨てるのに多大な時間がかかるほど何かに没頭しないでください。

やあ、

他の回答を通じて見ると、ここで私は、誰もがあなたの次のプロジェクトのために何をすべきか言及されていることがわかります。

しかし欠けているように見えることの一つは、なぜスペックを見つけるためにwashupを持っています。同期していました。顧客が実際に必要な要件を持つます。

私はあなたが関係なく、あなたはまだ実際の要件と仕様の間の不一致を持っている場合は、あなたの次のプロジェクトを実施しているものに取ってのアプローチ、これを実行しないしない場合ということだけ心配します。あなたの次のプロジェクトのために、あなたは再び同じ状況になります。

これは悪い通信または多分顧客の要件クリープのような単純なものかもしれません。

しかし、あなたは原因を知って、あなたがしようとすると、再び起こって、それの可能性を最小限に抑えることができ、少なくとも場合ます。

他の回答が言っていると、いくつかの素晴らしいものがありありますが、あなたがそれを繰り返すように非難していないように何が起こったのかから学ぶください何をノックされていません。

HTH

歓声、

時々書き換えは最適なソリューションです!
あなたがカメラのソフトウェアを作成する場合は、次のバージョンでも、すべてこの機能のためにすべてのフックを、ビデオ、またはステレオビデオや3Dレーザースキャニングを行い、含まれると仮定でき、またはあなたはそれができた、このような汎用性の高い拡張可能な宇宙飛行士のアーキテクチャを書くことができますジェットエンジンを含む次のカメラにも対応 - それはあなたがそれをやっていない方が良いだったかもしれないお金、資源や性能にそれほど費用がかかります。

新しい役割の新機能のための完全なリライトは、常に悪いアイデアではありません。

csunwoldが言ったように、

、あなたのコードをモジュールは非常に重要です。ワンピースがエラーを起こしやすい入る場合、それはシステムの残りの部分をアップマックしないようにそれを書きます。このように、あなたは安全に残りの部分に頼ることができる一方で、単一のバギーセクションをデバッグすることができます。

この超えて、ドキュメントが鍵となります。あなたのコードをきちんと明確に注釈を付けている場合は、将来的にそれを再加工することはあなたのために無限に容易になるか、デバッグすることを起こる誰でしょう。

ソースコントロールを使用すると、あまりにも役立ちます。あなたが正常に動作しないコードの一部を見つけた場合は、過去の堅牢な反復に戻すための機会は常にあります。

それは直接あなたの例には適用されませんが、コードを書くときに

、私はソフトウェアが将来的に進化して見ることができる方法に目を光らせて維持しようとします。

基本的に私は、ソフトウェアが行く場所を予想してみてください、のが、を批判的に、私は私が起こって想像することができ、物事のいずれかを実施するための誘惑に抵抗します。私は後の午前はすべて、APIとのインターフェイスはこれらの「可能なシナリオは、」私は、より良く、より将来性のインターフェイスを思い付くに役立つことを期待して、これらの機能を実装し、まだせずに可能な未来をサポートしようとしてされます。

は常にofcourseのは動作しません。

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