「過剰な複雑さのポイント」は、英語では次のように呼ばれます。
なんてこった、このクラップスとは。
問題は、これは実際に単純なものに適用できるが、同じ反応をするような恐ろしい方法で実装されていることです。
したがって、非常に恐ろしいものから非常に複雑なものを区別することは困難です。
ただし、実際にすべてのソフトウェアで発生する傾向があるのは、次のようなプロセスです。
ステップ1:優れた仕様を作成し、優れた設計を行い、優れたものを実装します。みんな幸せ。
ステップ1の終わりに、開発者は自分のデザインの素晴らしい優雅さに自分自身を祝福し、「他の人が将来物を追加するための素晴らしい遺産があります。それは素晴らしいことであり、世界はより良い場所。"
ステップ2:いくつかの変更が加えられ、物事が追加され、新しい機能が含まれます。ステップ1のアーキテクチャと構造により、これは非常に簡単なプロセスになりました。[しかし、おっと、 "cruft factor"が少し増えただけです。]
ステップ2の終わりに、開発者は自分のデザインの素晴らしい優雅さに自分自身を祝福し、幸せな考えを捨てます。「ステップ1でこれらのすべてを許可したことはとても賢いことです。これはとてもうまくいきました。将来的に他の人が物事を追加するために、ここは素晴らしいものであり、世界はより良い場所になるでしょう。」
ステップ3:より多くの変更が行われ、より多くのものが追加され、より多くの新しい機能が追加され、多くのものが変更され、ユーザーのフィードバックが実際に聞かれています。
ステップ3の終わりに、開発者は自分の設計の素晴らしい優雅さに自分自身を祝福し、「このアーキテクチャは非常に多くの変更を簡単に取り入れることができるのでかなりいいと思います。しかし、私は少し不幸です。 XとYとZについてです。それらはもう少しクリーンアップできますが、!!!!!!ああ!!!ステップ1でこれらすべてを許可したことはとても賢いです。これはとてもうまくいきました。将来的に物事を追加する他の人たちは、素晴らしいことであり、世界はより良い場所になるでしょう。」
ステップ4:ステップ3と同じ
ステップ4の終わりに、開発者は次のように考えます。「非常に良かったものは、維持するためにいものになっています。本当に重大な変更が必要です。これに取り組むのはあまり好きではありません。リファクタリングが必要です。私は彼にそれが6週間を必要とし、これの終わりにユーザーが見ることは何もないと言うとき...と言いますが、私はこれを行うことでさらに5年間のおいしい将来の修正範囲を得ます....うーん..ビールを飲みにパブに行く時間。」
ステップ5:多数の変更を行う必要があります。
そして、ステップ5の間に、開発者は互いに「このコードはダメです。誰がこれを書いたのですか。彼らは撃たれるべきです。恐ろしいです。私たちはそれを書き直さなければなりません。」
ステップ5は致命的です。これは、重要な要素が非常に悪くなっているため、コードにさらにいくつかの変更を加えることはできず、いくつかの大きな変更が必要です。
ステップ5の問題は、それを捨ててやり直したいという欲求です。これが致命的である理由は「Netscape Factor」です。グーグルイット。企業はこの時点で死にます。なぜなら、再び始めることは、事実ではなく約50%の仮定、知識ではなく150%の熱意、謙虚ではなく200%のrog慢から始まることを意味するからです(「あの男たちはとても愚かだった!」そして、あなたはたくさんの新しいバグを導入します。
最善の方法は、リファクタリングすることです。少しずつ変更します。アーキテクチャが少し疲れてきたら、修正します。追加、拡張、改善。徐々に。途中の各ステップで、テスト、テスト、さらにテストを行います。このような漸進的な変更は、10年後、現在および元のコードが祖父のxのようになることを意味します(「10個の新しいヘッドと3個の新しいハンドルがありましたが、それでも祖父のaです」)。つまり、共通点はあまりありません。しかし、古いものから新しいものに徐々に慎重に移行しました。これにより、リスクが軽減され、顧客にとっては、腹立たしい要因が減少します。