Тестирование
А что, если стараться писать код без ошибок?
В программных системах ошибка не всегда бывает очевидна, потому что реальное поведение может казаться уместным, в то время как по мнению менеджмента оно может являться неуместным.
Пример:
- Онлайн-сервис по продаже билетов на музыкальный фестиваль позволяет приобрести одному человеку все возможные билеты за один раз.
В чём же здесь проблема? Казалось бы, план выполнен, билеты проданы, прибыль получена, всё прекрасно.
Проблема в том, что билеты могли быть приобретены не группой людей, а одним перекупщиком.
Билетов на фестиваль нет, спрос есть, на рынке билетов создан искусственный дефицит, что даёт возможность перекупщику продавать билеты по завышенной цене.
Таким образом, с точки зрения продавца билетов всё прекрасно, но с точки зрения рынка целиком ситуация выглядит неблагоприятной — организаторы фестиваля заявляют о цене на билет, но в реальности купить билеты возможно только по цене значительно выше озвученной.
Зная об этом, руководство может ввести ограничение на покупку максимум 5 билетов в одни руки.
Теперь возможность приобрести 10 билетов за раз — это ошибка. Хотя ещё недавно невозможность приобрести 10 билетов была бы ошибкой.
Вывод: конкретное поведение системы при конкретных обстоятельствах может являться допустимым, а может являться ошибочным и способ определения что ошибочно, а что допустимо не всегда является очевидным.
Вывод в контексте тестов: для таких неочевидных случаев возможно написать конкретный тест, проверяющий возможность покупки множества билетов и оставить рядом комментарий по каким причинам такое ограничение появилось.
При наличии теста, такая потенциально крайне вредная ошибка для бизнеса может быть устранена автоматикой, даже если состав менеджмента и разработчиков полностью изменится с течением времени.
И очевидный вывод в контексте вопроса — написать код без ошибок невозможно, потому что само понятие ошибки относительно.