Как мы убедились, источников для появления ошибок великое множество, поэтому ошибки будет всегда.
Вопрос в том, нужно ли их вообще исправлять.
Возможно, разработчик продукта не видит в этом необходимости.
Иногда этот подход оправдан. Например, программист-любитель написал игру для развлечения, не получая за неё денег. Тогда ему параллельно на клиентов. Он просто для удовольствия, для себя написал игру. Поэтому тратить деньги на тестировщиков он не будет, и тестирование его продукту не нужно.
В большинстве случаев, продукты выпускаются для клиентов, или для своего пользования, например, отчетность внутри компании, важная работа с финансами, когда некорректное поведение программы может стоить очень и очень дорого.
Я могу привести некоторые пример, когда ошибки стоили баснословных сумм и причиняли огромные убытки. Более того, иногда ошибки становятся причиной человеческих жертв.
Например, в 1997г. в Корее разбился самолет. Погибло 228 человек. Дефект был обнаружен в системе приземления.
В 1999г. американский прибор по изучению Марса разбился, т.к. его двигатели отключились на высоте 30 метров от поверхности Марса. Всего-навсего, тридцать метров он не дотянул до Марса, и экономика США потерпела ущерб на 165 миллионов долларов! И этот случай был следствием ошибки в программе.
Периодически происходят отзывы автомобилей. Например, в 2000г. в США было отозвано 39 000 грузовиков и тракторов, а также 6 000 школьных автобусов. У всех этих автомобилей были дефекты в ABS.
Всё это - ошибки программного обеспечения.
Каждый год они стоят для США 59.5 миллиардов долларов!
После этого вопрос о наличии тестировщиков должен сам собой отпасть.
Но и наличие тестировщиков полностью не гарантирует отсутствие ошибок. Почему? Я расскажу позже.
В среднем, программист допускает 5-10 ошибок на 1000 строк кода. Каким бы супер специалистом программист ни был, как бы хорошо он ни работал, всё равно какие-то дефекты он допускать будет. Вопрос не в том, будет ли он их допускать. Вопрос в том, когда он их допустит, насколько серьезные последствия они за собой повлекут, и сколько этих дефектов он будет допускать.
Понятно, что в таких условиях позиция тестировщика незаменима, а тестирование – необходимо.
Цель тестировщика состоит в том, чтобы найти максимальное количество критических багов за минимальный промежуток времени.
Критический баг – это существенная, важнейшая ошибка, которая делает использование программного обеспечения невозможным (в таком случае говорят, что программа «валится», а ошибка – фатальная), либо использование программного обеспечения в этом случае недопустимо.