Моя відповідь буде з точки зору реального світового бізнесу та викликів, з якими стикається кожна команда розробників. Те, що я бачу в цьому питанні та багато відповідей, справді стосується контролю дефектів.
Код може бути помилковим. Візьміть будь-який з зразків коду "Hello World" для будь-якої мови програмування та запустіть те, що на платформі призначено, і воно буде працювати послідовно та давати бажані результати. Тут закінчується будь-яка теорія про неможливість відсутності помилок коду.
Потенційні помилки надходять у міру ускладнення логіки. Простий приклад Hello World не має логіки і щоразу робить те саме статичне. Як тільки ви додаєте логічну динамічну поведінку, це вводить складність, що призводить до помилок. Сама логіка може бути хибною, або дані, які вводяться в логіку, можуть змінюватися таким чином, як логіка не обробляє.
Сучасний додаток також залежить від бібліотек часу виконання, CLR, проміжного програмного забезпечення, баз даних тощо, які, заощаджуючи загальний час розробки, також є шарами, де помилки в цих шарах можуть існувати і залишатися непоміченими через тестування розробки та UAT та на виробництво.
Нарешті, ланцюжок додатків / систем, що додаток споживає дані, що живлять його логіку, - це всі джерела потенційних помилок або в межах їх логіки, або в межах програмного забезпечення, на якому логіка їде зверху, або вищестоящих систем, за якими вона споживає дані.
Розробники не мають 100% контролю над кожною рухомою частиною, підтримуючи логіку їх застосування. Власне, ми не дуже контролюємо. Ось чому тестування блоків є важливим, а конфігурація та управління змінами - важливі процеси, які ми не повинні ігнорувати або бути лінивими / неохайними.
Крім того, документовані угоди між вашою програмою, яка споживає дані з джерела, що не є вашим контролем, що визначає конкретний формат і характеристики для переданих даних, а також будь-які обмеження або обмеження, за які ваша система передбачає, що джерельна система несе відповідальність за те, щоб вихід був у межах ці межі.
У реальному застосуванні інженерії програмного забезпечення ви не зможете змусити його летіти, пояснивши бізнесу, чому теоретично програми не можуть бути помилками. Дискусії подібного характеру між технологією та бізнесом ніколи не відбудуться, за винятком наслідків технологічної несправності, яка вплинула на здатність бізнесу заробляти гроші, запобігати втраті грошей та / або підтримувати людей в живих. Відповідь "як це може статися" не може бути "дозвольте мені пояснити цю теорію, щоб ви зрозуміли".
З точки зору масових обчислень, які теоретично могли б зайняти назавжди, щоб виконати обчислення і отримати результат, додаток, яке не може закінчити і повернутися з результатом, - це помилка. Якщо характер обчислень такий, що це забирає багато часу та обчислює великі витрати, ви приймаєте цей запит і надаєте користувачеві зворотній зв'язок, як / коли вони зможуть отримати результат, і розпочинаєте паралельні нитки, щоб перетворити його. Якщо це має відбутися швидше, ніж це можна зробити на одному сервері, і бізнес є досить важливим, то ви можете масштабувати його на стільки систем, скільки потрібно. Ось чому хмара дуже приваблива, і можливість розкручувати вузли, щоб взяти на себе роботу і відкрутити їх вниз, коли вони закінчені.
Якщо існує можливість отримати запит, який не може виконати жодна кількість обчислювальної потужності, він не повинен зависати там, що працює до нескінченності, і бізнес-процес чекає відповіді на те, що бізнес вважає кінцевою проблемою.
print "Hello, World!"
... чи можете ви бути трохи більш зрозумілими?