Therac-25!
Therac-25プロジェクトの開発者は、治療用XRAYマシンでのUIとインターフェイス関連の問題との間のタイミングについてかなり自信を持っていました。
あるべきではありませんでした。
この有名な生死のソフトウェア災害についての詳細は、次のサイトでご覧いただけます。
http://www.youtube.com/watch?v=izGSOsAGIVQ
または
http://en.wikipedia.org/wiki/Therac-25
アプリケーションは、医療機器よりも故障の影響を受けにくい場合があります。有用な方法は、生産される可能性のあるすべてのユニットについて、製品の寿命にわたる発生の可能性と発生コストの積としてリスクのエクスポージャーを評価することです。
コードを最後までビルドすることを選択した場合(そして、あなたが持っているように聞こえます)、システムの内部または外部のコンピューターが高速になると、数年ごとに数ゼロを簡単に取り除くことができるムーアの法則を考慮する必要があります。何千ものコピーを出荷する場合は、さらにゼロを削除してください。ユーザーがこの操作を毎日(または毎月)何年も実行する場合は、さらにいくつかを削除します。Googleファイバーが利用可能な場所で使用されている場合、それではどうなりますか?UIガベージがGUI操作中に収集される場合、それはレースに影響しますか?GUIの背後でオープンソースまたはWindowsライブラリを使用していますか?更新はタイミングに影響しますか?
セマフォ、ロック、ミューテックス、バリア同期は、スレッド間でアクティビティを同期する方法の1つです。それらを使用していない場合、プログラムを保守している別の人が、スレッド間の関係に関するかなり迅速な仮定を変更し、競合状態に関する計算が無効になる可能性があります。
明示的に同期することをお勧めします。問題が発生することはないかもしれませんが、顧客が発生する可能性があるためです。さらに、たとえ競合状態が発生しなかったとしても、コードを守るためにあなたまたはあなたの組織が裁判所に呼ばれた場合はどうでしょうか(トヨタは数年前にプリウスに関係していたので)。方法論を徹底すればするほど、うまくいくでしょう。「コードが失敗することはわかっているが、この方程式を書き留めて、これが私たちの生涯に起こらないことを示すために」と言うよりも、「このようなありそうもないケースに対してガードする...」と言う方が良いかもしれません。 」
確率の計算は他の誰かからのもののようです。彼らはあなたのコードを知っており、エラーが発生していないことを信頼するのに十分知っていますか?何かに対して99.99997%の信頼性を計算した場合、大学の統計クラスに戻って考えて、常に100%を獲得したわけではなく、自分の個人的な信頼性の推定値のかなりの数を取り下げたことを思い出してください。