Теперь мой вопрос: вдруг компьютер пойдет не так без логической причины?
Если у вас точно такая же вычислительная среда, то ввод программы X всегда будет давать один и тот же результат R. На практике редко бывает, чтобы одна программа выполнялась изолированно. Самое простое на сегодняшний день приложение работает в операционной системе и совместно использует память с другими программами, которые могут одновременно загружаться в память. Эти программы могут изменять память таким образом, что это приводит к сбоям в работе данной программы. Это известная проблема с переменными типа указатель, например. Обычно такие ошибки вызывают ненормальное поведение системы, а не неправильные результаты расчетов.
В вашем случае я предполагаю, что проблема может быть (и обычно есть) не в том, что я описал выше. Проблема может быть в том, что:
- программа использовала неправильные типы данных для вычисления результата, эта ошибка проявляется только при использовании специальных значений.
- программа обнаружила ошибку в расчете (из-за логического условия), но не обработала ошибку и все равно выдала результат. (например, смешивание с плавающей и целочисленной арифметикой)
- бизнес-правило или логическое условие были закодированы неправильно, введенные данные представляют это условие, но использовался неправильный расчет. (например, вычтите сумму из суммы счета, прежде чем проверять сумму в счете).
- используя формулы, которые применяются только к определенному диапазону чисел, но данные содержат другой диапазон. (например, расчет процентной ставки на основе диапазона значений)
Из-за вышеизложенного и многих других причин люди, занимающиеся программным обеспечением, тратят так много ресурсов в попытке создать правильное программное обеспечение, однако ошибки в программном обеспечении по-прежнему возникают, но ошибки являются «логическими» и имеют причину, просто причина не очевидна некоторым без хорошего исследования. Таким образом, в целом тестируемое программное обеспечение предсказуемо и не дает случайных результатов. Из-за сложности некоторых программ и других факторов даже протестированные программы могут работать неправильно, но когда это происходит, ошибки возникают по логической причине.
Если я нажму на серверный компьютер, станет ли один из чисел, которые вычисляет компьютер, другим, и сделает неправильный расчет?
Ответ, в общем-то, отрицательный, программное обеспечение не хрупкое в этом смысле.
Что вы можете сделать, это изолировать случаи, когда происходит ошибка, найти сходство между этими наборами данных, вызывающих ошибку, и найти разницу между наборами тезисов и другими наборами, которые дают правильный результат. Вы можете определить конкретный набор значений, вызывающих проблему. Например, вы можете обнаружить, что каждый раз, когда переменная имеет отрицательное значение, результат неверен.
Обновлена информация об ошибках повреждения памяти: см. Повреждение памяти