私の答えは、実世界のビジネスとすべての開発チームが直面する課題の観点からです。この質問と多くの答えで私が見ているのは、実際に欠陥を制御することです。
コードにはバグがない可能性があります。任意のプログラミング言語の「Hello World」コードサンプルのいずれかを取得し、それを意図したプラットフォームで実行すると、一貫して動作し、目的の結果が生成されます。バグのないコードの不可能性に関する理論は終わりです。
ロジックがより複雑になると、潜在的なバグが入ります。単純なHello Worldの例にはロジックがなく、毎回同じ静的なことを行います。ロジック駆動の動的な動作を追加するとすぐに、バグにつながる複雑さが生じます。ロジック自体に欠陥があるか、ロジックに入力されるデータがロジックが処理しない方法で変化する可能性があります。
最新のアプリケーションは、ランタイムライブラリ、CLR、ミドルウェア、データベースなどのレイヤーにも依存しています。これらのレイヤーは、全体的な開発時間を節約する一方で、それらのレイヤー内のバグが存在し、開発およびUATテストを通じて本番環境に検出されないレイヤーにもなります。
最後に、アプリケーションがロジックを供給するデータを消費するアプリ/システムのチェーンはすべて、ロジック内、またはロジックがその上に乗るソフトウェアスタック内、またはデータを消費するアップストリームシステム内の潜在的なバグの原因です。
開発者は、アプリケーションのロジックをサポートするすべての可動部分を完全に制御できるわけではありません。実際、私たちは多くを管理していません。ユニットテストが重要であり、構成と変更管理は重要なプロセスであり、無視したり怠けたりしてはいけません。
また、制御不能なソースからデータを消費するアプリケーション間の文書化された合意、転送されたデータの特定の形式と仕様、およびソースシステムが出力が確実に内にあると想定する制限または制約を定義しますそれらの境界。
ソフトウェアエンジニアリングの実世界のアプリケーションでは、理論的にアプリケーションにバグがない理由をビジネスに説明することで、飛ばすことはできません。テクノロジーとビジネスの間のこの性質についての議論は、ビジネスの金makeけ、お金の損失の防止、および/または人々の生存能力に影響を与えた技術的な誤作動の後を除き、決して起こりません。「どうしてこうなるのか」に対する答えは、「この理論を説明して、あなたが理解できるようにする」ことはできません。
理論的には計算を実行して結果を得るのに永遠にかかる可能性のある大規模な計算に関しては、結果で終了して戻ることができないアプリケーション、つまりバグです。計算の性質が非常に時間がかかり、計算が集中するようなものである場合、そのリクエストを受け取って、結果を取得する方法とタイミングをユーザーにフィードバックし、並列スレッドを開始して解約します。これを1つのサーバーで実行できるよりも迅速に行う必要があり、ビジネス上十分に重要な場合は、必要な数のシステムでスケールアウトします。これがクラウドが非常に魅力的である理由であり、ノードをスピンアップして仕事を引き受け、完了時にそれらをスピンダウンする機能です。
計算能力の量を完了できないという要求を取得する可能性が存在する場合、ビジネスプロセスが有限の問題であると考えるものへの答えを待っているビジネスプロセスで無限に実行する必要があります。
print "Hello, World!"
...もう少し明確にできますか?