Therac-25!
Розробники проекту Therac-25 були досить впевнені в термінах між інтерфейсом користувача та проблемою, пов’язаною з інтерфейсом, у терапевтичній машині XRAY.
Вони не повинні були бути.
Дізнатися більше про цю знамениту катастрофу програмного забезпечення на смерть та смерть можна за посиланням:
http://www.youtube.com/watch?v=izGSOsAGIVQ
або
http://en.wikipedia.org/wiki/Therac-25
Ваша програма може бути набагато менш чутливою до несправності, ніж медичні пристрої. Корисний метод - оцінити вплив ризику як продукту ймовірності виникнення та вартості виникнення протягом життя продукту для всіх одиниць, які могли бути вироблені.
Якщо ви вирішили побудувати свій код до останнього (і це звучить так, як у вас є), слід розглянути закон Мура, який може легко знімати кілька нулів кожні кілька років, оскільки комп'ютери всередині або поза вашою системою стають швидшими. Якщо ви відправляєте тисячі примірників, зніміть більше нулів. Якщо користувачі роблять цю операцію щодня (або щомісяця) протягом багатьох років, зніміть ще кілька. Якщо він використовується там, де доступне волокно Google, що тоді? Якщо сміття з інтерфейсу користувача збирає середину роботи графічного інтерфейсу, чи впливає це на гонку? Чи використовуєте ви відкритий код або бібліотеку Windows за графічним інтерфейсом? Чи можуть оновлення там впливати на терміни?
Семафори, замки, мутекси, бар'єрна синхронізація - це один із способів синхронізації дій між потоками. Потенційно, якщо ви їх не використовуєте, інша особа, яка підтримує вашу програму, може, а потім досить швидко припущення про зв'язки між потоками можуть змінитись, і розрахунок про стан перегонів може бути недійсним.
Я рекомендую чітко синхронізувати, оскільки, хоча ви ніколи не бачите, що це створює проблему, клієнт може. Крім того, навіть якщо ваш стан перегонів ніколи не виникає, що робити, якщо ви або ваша організація покликані до суду, щоб захистити свій код (як Toyota кілька років тому стосувалася Prius). Чим ретельніша ваша методика, тим краще ви будете отримувати ціну. Можливо, було б краще сказати "ми бережемося від такого малоймовірного випадку, як це ...", ніж сказати, "ми знаємо, що наш код вийде з ладу, але ми записали це рівняння, щоб показати, що цього не відбудеться в нашому житті". "
Здається, що обчислення ймовірності відбувається від когось іншого. Чи знають вони ваш код і чи знаєте ви їх достатньо, щоб довіритися, що помилки не було? Якщо я обчислив 99,99997% надійності для чогось, я також міг би подумати про свої статистичні заняття в коледжі і пам’ятати, що я не завжди отримував 100% і відступав зовсім небагато відсотків на своїх власних особистих оцінках надійності.