事前に計画を立ててみましたが、コードを打ち出すまですべてを実際に予測することはできません。
完璧な計画があなたに完璧なソフトウェア設計/アーキテクチャを提供すると考えるのは魅力的ですが、それは明らかに間違っています。これには2つの大きな問題があります。まず、「紙の上」と「コード」はめったに一致しません。その理由は、実際に行うのではなく、どのように行うべきかを簡単に言うことができるからです。第二に、要件の予期せぬ変更は、開発プロセスの後半に明らかになりますが、それは最初から考えることはできませんでした。
アジャイル運動について聞いたことがありますか?「計画に従う」こととは対照的に、「変化に反応すること」を重視する考え方です。これがマニフェストです(簡単に読むことができます)。また、Big Design Up Front(BDUF)とその落とし穴について読むこともできます。
残念なことに、「アジャイル」の企業版は偽の束(認定スクラムマスター、「アジャイル」という名の重いプロセス、スクラムの強制、100%のコードカバレッジの強制など)であり、通常はマネージャーがアジャイルはプロセスであり、特効薬だと思います(どちらでもありません)。アジャイルマニフェストを読んで、ボブおじさんやマーティンファウラーのようなこの運動を始めた人々の話を聞いてください。
特に、通常は科学コードでTDD(テスト駆動開発)を行うだけで済み、ソフトウェアプロジェクトがかなりうまくいく可能性が十分にあります。これは、成功する科学的コードの大部分が非常に使いやすいインターフェースを備えており、パフォーマンスが二次的な(場合によっては競合する)懸念事項であるためです。力のTDDの親切にするためにあなたのソフトウェアの超使用可能な、あなたはどのように書くので、欲しいものは(理想的には)と呼ばれるように、あなたが実際にそれらを実装する前に。また、単純な「入力」/「出力」の方法ですばやく呼び出すことができる小さなインターフェイスを持つ小さな関数を強制し、リファクタリングするための適切な位置にあなたを置きます 要件が変更された場合。
numpy
科学的なコンピューティングソフトウェアとして成功していることは、私たち全員が同意できると思います。インターフェースは小さく、非常に使いやすく、すべてがうまく連携しています。ことに注意してくださいnumpy
:のリファレンスガイドは、明示的にTDDをお勧めします https://docs.scipy.org/doc/numpy-1.15.1/reference/testing.htmlを。過去にSAR(Synthetic Aperature Radar)イメージングソフトウェアにTDDを使用したことがあります。また、その特定のドメインで非常にうまく機能すると断言できます。
警告: TDDの設計部分は、分散システムのように基本的なリファクタリング(ソフトウェアの高度な同時実行が必要であると判断するなど)が難しいシステムではあまりうまく機能しません。たとえば、数百万人の同時ユーザーがいるFacebookのようなものを設計する必要がある場合、TDDを行う(設計を推進する)のは間違いです(予備設計を行った後で使用しても大丈夫です。")。コードにジャンプする前に、アプリケーションのリソースと構造について考えることが重要です。TDDが、高可用性の分散システムにつながることはありません。
プログラムをゼロから完全に再構築した場合、ずっと改善したいという気持ちを常に避けることができますか?
上記を考えると、完璧なデザインを実際に達成することは実際には不可能であることがある程度明らかであるはずです。そのため、完璧なデザインを追いかけるのは馬鹿げたゲームです。本当に近づくことができるだけです。ゼロから再設計できると思ったとしても、おそらくまだ見えていない隠された要件があります。さらに、書き換えには、少なくとも元のコードの開発にかかった時間を要します。新しい設計には予期しない問題が発生する可能性が高いため、ほとんど確実に短くなりません。さらに、古いシステムのすべての機能を再実装する必要があります。
考慮すべきもう1つの点は、要件が変更された場合にのみ設計が重要になることです。何も変更がなければ、デザインがどれほど悪いかは関係ありません(現在のユースケースで完全に機能していると仮定します)。私は、22,000行の切り替えステートメントがあるベースラインで作業しました(関数はさらに長くなりました)。それはひどいデザインでしたか?うん、それはひどかった。修正しましたか?いいえ。そのままで問題なく機能し、システムのその部分がクラッシュやバグを引き起こすことはありませんでした。私がプロジェクトに参加していた2年に1回しか触れなかったので、誰かがスイッチに別のケースを挿入したと思います。しかし、あまり頻繁に触れられないものを修正するのに時間をかける価値はありませんが、そうではありません。不完全なデザインをそのままにしておき、壊れていない(または絶えず壊れている)場合は、修正しないでください。だから多分あなたはもっとうまくできるだろう... しかし、書き直す価値があるでしょうか?あなたは何を得ますか?
HTH。