Therac-25!
Các nhà phát triển trong dự án Therac-25 khá tự tin về thời gian giữa giao diện người dùng và vấn đề liên quan đến giao diện trong máy XRAY trị liệu.
Họ không nên có.
Bạn có thể tìm hiểu thêm về thảm họa phần mềm sinh tử nổi tiếng này tại:
http://www.youtube.com/watch?v=izGSOsAGIVQ
hoặc là
http://en.wikipedia.org/wiki/Therac-25
Ứng dụng của bạn có thể ít nhạy cảm hơn với thất bại so với các thiết bị y tế. Một phương pháp hữu ích là đánh giá mức độ rủi ro là sản phẩm của khả năng xảy ra và chi phí xảy ra trong vòng đời của sản phẩm cho tất cả các đơn vị có thể được sản xuất.
Nếu bạn đã chọn xây dựng mã của mình để tồn tại (và có vẻ như bạn có), bạn nên xem xét luật Moore có thể dễ dàng loại bỏ một số không trong vài năm khi các máy tính bên trong hoặc bên ngoài hệ thống của bạn nhanh hơn. Nếu bạn gửi hàng ngàn bản sao, hãy bỏ qua nhiều số không. Nếu người dùng thực hiện thao tác này hàng ngày (hoặc hàng tháng) trong nhiều năm, hãy lấy đi một vài chi tiết. Nếu nó được sử dụng ở nơi Google có sẵn sợi thì sao? Nếu rác UI thu thập hoạt động GUI giữa, điều đó có ảnh hưởng đến cuộc đua không? Bạn có đang sử dụng thư viện Nguồn mở hoặc Windows phía sau GUI của mình không? Có thể cập nhật ở đó ảnh hưởng đến thời gian?
Semaphores, khóa, mutexes, đồng bộ hóa rào cản là một trong những cách để đồng bộ hóa các hoạt động giữa các luồng. Có khả năng nếu bạn không sử dụng chúng, một người khác duy trì chương trình của bạn có thể và sau đó các giả định khá nhanh về mối quan hệ giữa các luồng có thể thay đổi và tính toán về điều kiện cuộc đua có thể bị vô hiệu.
Tôi khuyên bạn nên đồng bộ hóa một cách rõ ràng bởi vì trong khi bạn có thể không bao giờ thấy nó tạo ra vấn đề, thì một khách hàng có thể. Ngoài ra, ngay cả khi điều kiện cuộc đua của bạn không bao giờ xảy ra, điều gì sẽ xảy ra nếu bạn hoặc tổ chức của bạn được gọi ra tòa để bảo vệ mã của bạn (vì Toyota có liên quan đến Prius vài năm trước). Phương pháp của bạn càng kỹ lưỡng, bạn sẽ có giá vé tốt hơn. Có thể tốt hơn khi nói "chúng tôi bảo vệ chống lại trường hợp không thể xảy ra như thế này ..." hơn là nói, "chúng tôi biết mã của chúng tôi sẽ thất bại, nhưng chúng tôi đã viết ra phương trình này để cho thấy nó sẽ không xảy ra trong cuộc sống của chúng tôi. "
Nghe có vẻ như tính toán xác suất đến từ người khác. Họ có biết mã của bạn không và bạn có biết họ đủ tin tưởng rằng không có lỗi nào không? Nếu tôi tính độ tin cậy 99.99997% cho một thứ gì đó, tôi cũng có thể nghĩ lại các lớp thống kê đại học của mình và nhớ rằng tôi không phải lúc nào cũng nhận được 100%, và rút lại khá nhiều phần trăm cho ước tính độ tin cậy cá nhân của riêng tôi.