ソフトウェアを出荷するときに回すことができるノブは 3 つだけです。開発者の数が固定されていると仮定すると、機能、品質、出荷日です。
ソフトウェア開発で最も難しいことの 1 つは、ノブを適切に設定して製品を構築することです。たとえば、Duke Nukem Forever の連中は、機能と品質のノブを 11 まで上げ、出荷日のノブを窓の外に放り出しました。マイクロソフトは、出荷日のノブを所定の位置に接着し、必要に応じて機能のノブを下げてから、出荷日のノブの接着を外し、少し上げて、接着して元に戻し、他の 2 つをいじり続けるようです。また、常に出荷されているにもかかわらず、成功するために必要な機能が組み込まれていない製品が無数にあるようです。
結局、配達しないとお金はもらえません。品質が悪いと、長期的にはひどく傷つきます。評判を再構築するのは難しいです。ほとんどの場合、バグが多すぎる場合は機能を削減するのが正しいとされてきました。いつも。
ただし、バグのトリアージは機能開発と同じくらい重要です。ここで話しているのはどのようなリークですか?あなたはバイトを漏らしていますか?小さな物体?千のオブジェクト?DLL 全体? 製品の提供に失敗するよりも、少し漏れた方がおそらく良いシナリオがあります.
そして、あなたはリークとはどういう意味ですか?アプリケーションのライフサイクルは明確に定義されていますか? 起動時に一度何かを割り当て、プロセスが終了するまで解放しない場所はどこですか? さて、あなたのプロセスはどのくらい実行されますか? プロセスの複数のコピーを実行する予定ですか?
当然のことながら、リークを最小限に抑えるためのベスト プラクティスの開発に取り組む必要がありますが、最終的には判断を下す必要があります。おそらく、顧客にバグを説明し、その影響を説明するだけで、顧客は購入するでしょう。たぶん、1週間後にパッチを当てることができます。たぶん、あなたは本当にそれを修正する必要があります。しかし、良いアドバイスをするためには、それについてもっと知る必要があります.
私は過去に既知のリークを出荷したと言います. どの製品や会社かは言いませんが、DLL の依存関係と常軌を逸したライフタイム管理により、特定の DLL への参照を一度ロードすると正しく解放することがほとんど不可能になるというバグがありました。そして、それは正しいことだったと今でも思っています。また、誤って記述されたサードパーティのコードがクラッシュしないようにするために、故意にリークされたものを見たこともあります (ただし、それは完全に別の議論です)。
しかし、結局のところ、そのような事例はまれであり、メモリ リークの原因を突き止めれば、それを修正するのに 1 日以上かかることはないと思います。既知のメモリ リークがあり、修正が既知である状態で出荷することは、実際にはほとんどありません。スレッド モデルの変更や大量のコードのリファクタリングを含む大規模な再設計が必要であり、製品の出荷までに文字通り 1 日か 2 日かかる必要がありました。その時点で、私はメモリをリークして、再設計者で適切なテストが行われた後に脆弱なパッチを約束するかもしれません.