Bây giờ câu hỏi của tôi là, một chương trình máy tính sẽ đột nhiên sai mà không có lý do hợp lý?
Nếu bạn có cùng một môi trường điện toán chính xác, thì việc đưa X đầu vào vào một chương trình sẽ luôn tạo ra kết quả tương tự R. Trong thực tế, hiếm khi có một chương trình duy nhất thực hiện tách biệt. Ứng dụng đơn giản nhất hiện nay chạy trong một hệ điều hành và chia sẻ bộ nhớ với các chương trình khác có thể được 'tải' trong bộ nhớ cùng một lúc. Các chương trình này có thể thay đổi bộ nhớ theo cách làm cho một chương trình nhất định bị trục trặc. Đây là một vấn đề nổi tiếng với các biến loại 'con trỏ' chẳng hạn. Thông thường các lỗi như vậy gây ra hành vi hệ thống bất thường và kết quả tính toán không sai.
Trong trường hợp của bạn, tôi cho rằng vấn đề có thể (và thường là) không phải là những gì tôi đã mô tả ở trên. Vấn đề có thể là:
- chương trình đã sử dụng (các) kiểu dữ liệu sai để tính kết quả, lỗi đó chỉ tự biểu hiện khi sử dụng các giá trị đặc biệt.
- chương trình gặp lỗi trong tính toán (do điều kiện logic) nhưng không xử lý lỗi và vẫn tạo ra kết quả. (ví dụ: trộn float và số học số nguyên)
- một quy tắc kinh doanh hoặc một điều kiện logic không được mã hóa chính xác, dữ liệu được nhập đại diện cho điều kiện này nhưng tính toán sai đã được sử dụng. (ví dụ: trừ số tiền từ số tiền tài khoản trước khi kiểm tra số tiền trong tài khoản trước).
- sử dụng các công thức chỉ áp dụng cho phạm vi số nhất định nhưng dữ liệu chứa phạm vi khác nhau. (ví dụ: tính lãi suất dựa trên một loạt các giá trị)
Do những lý do trên và nhiều lý do khác, người dùng phần mềm tốn rất nhiều tài nguyên trong nỗ lực tạo phần mềm chính xác, tuy nhiên, lỗi phần mềm vẫn xảy ra, nhưng lỗi là 'logic' và có lý do, đó chỉ là lý do không rõ ràng đến một số mà không có nghiên cứu tốt. Vì vậy, nói chung phần mềm được kiểm tra là có thể dự đoán và không tạo ra kết quả ngẫu nhiên. Do sự phức tạp của một số chương trình và các yếu tố khác, ngay cả các chương trình được kiểm tra có thể sai nhưng khi điều đó xảy ra, lỗi là vì một lý do hợp lý.
Nếu tôi đập vào máy chủ, liệu một trong những số mà máy tính đang tính, trở thành một số khác và làm cho phép tính sai?
Câu trả lời là không nói chung, phần mềm không dễ vỡ theo nghĩa đó.
Những gì bạn có thể làm là cô lập các trường hợp xảy ra lỗi, tìm sự giống nhau giữa các bộ dữ liệu này gây ra lỗi và tìm sự khác biệt giữa các bộ luận án và các bộ khác tạo ra kết quả chính xác. Bạn có thể xác định bộ giá trị cụ thể gây ra sự cố. Ví dụ, bạn có thể thấy rằng mỗi khi một biến có giá trị âm, kết quả là sai.
Thông tin cập nhật về lỗi hỏng bộ nhớ: Vui lòng xem Tham nhũng bộ nhớ