Перейти к содержанию

Тестирование

А что, если стараться писать код без ошибок?

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

Пример:

  • Онлайн-сервис по продаже билетов на музыкальный фестиваль позволяет приобрести одному человеку все возможные билеты за один раз.

В чём же здесь проблема? Казалось бы, план выполнен, билеты проданы, прибыль получена, всё прекрасно.

Проблема в том, что билеты могли быть приобретены не группой людей, а одним перекупщиком.

Билетов на фестиваль нет, спрос есть, на рынке билетов создан искусственный дефицит, что даёт возможность перекупщику продавать билеты по завышенной цене.

Таким образом, с точки зрения продавца билетов всё прекрасно, но с точки зрения рынка целиком ситуация выглядит неблагоприятной — организаторы фестиваля заявляют о цене на билет, но в реальности купить билеты возможно только по цене значительно выше озвученной.

Зная об этом, руководство может ввести ограничение на покупку максимум 5 билетов в одни руки.

Теперь возможность приобрести 10 билетов за раз — это ошибка. Хотя ещё недавно невозможность приобрести 10 билетов была бы ошибкой.

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

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

При наличии теста, такая потенциально крайне вредная ошибка для бизнеса может быть устранена автоматикой, даже если состав менеджмента и разработчиков полностью изменится с течением времени.

И очевидный вывод в контексте вопроса — написать код без ошибок невозможно, потому что само понятие ошибки относительно.