基本的に、いいえ、とにかく最善を尽くす必要があります。理由を説明します(または十分な忍耐力がない場合は、結論にスキップします)
バイナリ検索の実装と同じくらい些細な問題を考えてください。非常に人気のある実装の1つに、約20年にわたって検出されなかったバグがありました。バグなしで広く使用され、正しいと証明されたと思われるまでに20行が20年かかる場合、巨大なプログラムにバグがないことを本当に期待できますか?
とにかく巨大なプログラムにはいくつのバグがあると予想できますか?私が見つけた1つの数字は「1000行ごとに10個の欠陥」(コード完全版第2版、517ページ-データを引用するのではなく、単に例を使用した)でした。幸いなことに、プログラムの品質を改善する方法があります。ユニットテスト、コードレビュー、および通常の手動テストは、バグの数を減らすことが知られています。それでも、数はまだ多くなります。
すべてのバグの95%を解決できたら、それは信じられないでしょう。それでも、ソフトウェアにはまだ10000〜15,000のバグがあります。
幸いなことに、このソフトウェアは広く使用されている(したがって、広くテストされている)ため、バグが発見されます。そのため、バグは徐々に少なくなります。ただし、バグが少ないということは、残りのバグを見つけるのが難しくなることも意味します。したがって、バグ修正に直線的な曲線を期待しないでください。最後のいくつかのバグを見つけるのは本当に難しいだろうと(彼らはしていると仮定すると、数年のための検出を逃れることができ、これまで見つかりました)。
また、ソフトウェアが変更されなければ、新しいバグは発生しないと誤って想定しているようです。ソフトウェアがサードパーティのライブラリに依存している場合、新しいバージョンはいくつかの機能を破壊する可能性があります-アプリケーションのコードが同じ場合でも新しいバグを導入します。新しいオペレーティングシステムは、以前は完全に動作していたアプリケーションを破壊する可能性もあります(一般的な例については、Windows Vistaを参照してください)。コンパイラのバグなども考慮してください。
コードプルーフツールがバグのあるソフトウェアの問題を本当に解決できるかどうかは不明です。プログラムの停止の問題を解決することは確かに不可能ですが、プログラムが指定どおりに動作することを証明することは可能かもしれません… 証明プログラムにバグがあるのかもしれません。仕様自体にバグがあるかもしれません。
明らかに、バグの数を大幅に減らすことができますが、ゼロになることはほとんどありません。
修正するたびにバグが増えるという考えがあるため、それは真実ではないと思います。
(強調を追加)
あなたは正しいです。この記述は間違っています。以下に例を示します。
int main() {
int x[10];
x[10] = 8; //Buffer overflow here
return 0;
}
それでは、このバグを修正しましょう。
int main() {
int x[11];
x[10] = 8; //No buffer overflow here
return 0;
}
見る?バグを修正し、新しいバグを導入しませんでした。
ただし、バグを修正するたびに新しいバグを作成するリスクがあることは確かに正しいですが、このリスクは軽減できます(たとえば、単体テストを使用)。
バグを100個修正するたびに、誤って新しいバグを導入するとします。したがって、10000個のバグを修正すると、100個の新しいバグが発生します。そして、これらの新しいバグを修正すると、1つのバグが発生します。しかし、だから何?このプログラムのバグは9 999個少なくなったため、おそらく以前よりも改善されたと考えられます(新しいバグが以前のバグの10000倍ではないと仮定した場合)。
また、バグを修正すると新しいバグが明らかになる可能性があります。ただし、これらのバグも修正できます。あなたが正しいことをすれば、最終的にはソフトウェアは当初よりも良い状態になります。
私は、OPで言及した概念のために、多くのバグを修正しない方が良いと、いくつかのトッププログラマーによって年をとりました。
この動作は過失です。バグがあり、修正できる場合。やれ。もちろん、新しいものの追加を防ぐために最善を尽くす必要がありますが、修正する10個の重大なバグごとに1つの小さなバグを導入する場合、それはバグの修正を停止する正当な理由ではありません。実際、バグを修正し続けることは正当な理由です。
したがって、修正するバグが少なくなり、将来バグが戻ってくることも少なくなります
修正するバグが少ないほど、ソフトウェアに残るバグが多くなり、ユーザーに迷惑をかけます。確かに、彼らは「将来あなたに戻る」ことはありません。彼らはそもそも去らなかったので、彼らは戻ってきません。「カムバック」の概念は回帰に関連しています。繰り返しますが、回帰のリスクを減らすことが可能です。
一部のバグはあまりにも広く使用されるようになり、人々がそれらに依存し始め、バグを修正するとそれらのユーザーのプログラムが壊れてしまうため、修正できません。それは起こります。ただし、その場合、それらは本当にバグと見なすことができますか?
「バグを修正し、バグを作成する」という考え方は、That Horrible Monsterに関連している可能性があります。コードベースにモンスターがある場合、何かを行う前に、まずモンスターを非モンスター化する必要があるかもしれません。
最後に、あなたがひどいプログラマーである場合、触れたものが新しいバグを作成するリスクがあります。これは明らかに上級プログラマーを緊張させるでしょう。しかし、「何もしないでください。何も触れないでください。息さえしないでください。」おそらく健康的な職場環境を作るための正しい方法ではありません。教育は優れています。
結論:
- たくさんの新機能を取得し続けるが、バグ修正がないソフトウェアは避けられません。
- 適度な数の新機能を取得し、バグを修正したソフトウェアは、使用可能になる可能性が高くなります。
- バグを少なくしようとする人は、気にしない人よりも(平均して)バグが少ない。
- プログラムが最終的にバグフリーになると期待することは合理的ではありません。
- 上級プログラマーは必ずしも有能ではありません。
- バグを修正します。
- ソフトウェアの品質を向上させる方法論を採用します。