Тепер моє запитання полягає в тому, чи несподівано комп’ютерна програма раптом піде не так, без логічної причини?
Якщо у вас точно однакове обчислювальне середовище, то при введенні X в програму завжди буде видаватися однаковий результат R. На практиці рідко є одна програма, що виконується ізольовано. Найпростіший додаток сьогодні працює в операційній системі і ділиться пам’яттю з іншими програмами, які можуть одночасно «завантажуватися» в пам’ять. Ці програми можуть змінювати пам'ять таким чином, що дана програма не працює. Це, наприклад, відома проблема зі змінними типу 'pointer'. Зазвичай такі помилки викликають ненормальну поведінку системи та невірні результати обчислення.
У вашому випадку я припускаю, що проблема може бути (і зазвичай є) не такою, яку я описав вище. Проблема може полягати в тому, що:
- програма використовувала неправильні типи даних для обчислення результату, ця помилка виявляється лише тоді, коли використовуються спеціальні значення.
- програма зіткнулася з помилкою в обчисленні (через логічну умову), але не впоралася з помилкою і все-таки видала результат. (наприклад, змішування поплавця та цілої арифметики)
- правило бізнесу або логічна умова не були закодовані правильно, дані, які були введені, представляють цю умову, але був використаний неправильний розрахунок. (наприклад, відняти суму від суми рахунку, перш ніж перевірити суму на рахунку).
- використовуючи формули, які застосовуються лише до певного діапазону чисел, але дані містять різний діапазон. (наприклад, обчислення процентної ставки на основі діапазону значень)
Через вищезазначене та багато інших причин програмне забезпечення витрачає стільки ресурсів на спробу створити правильне програмне забезпечення, проте, помилки в програмному забезпеченні все-таки трапляються, але помилки є "логічними" і мають причину, просто причина не очевидна для деяких без хороших досліджень. Отже, загалом тестоване програмне забезпечення є передбачуваним і не дає випадкових результатів. Через складність деяких програм та інших факторів навіть перевірені програми можуть піти не так, але коли це трапляється, помилки виникають з логічної причини.
Якщо я грюкну на серверній машині, чи стане одне з числа, яке обчислює комп'ютер, стане іншим числом і зробить обчислення неправильним?
Відповідь взагалі ні, програмне забезпечення в цьому сенсі не тендітне.
Що можна зробити, - виділити випадки, коли виникає помилка, знайти схожість між цими наборами даних, що спричиняють помилку, і знайти різницю між наборами тез та іншими наборами, які дають правильний результат. Можливо, ви зможете визначити конкретний набір значень, що викликають проблему. Наприклад, ви можете виявити, що кожен раз, коли змінна має негативне значення, результат є неправильним.
Оновлена інформація про помилки з пошкодженням пам’яті: див. Пошкодження пам’яті