Юнит-тесты никого не спасли
И не спасут. Тут можно написать "такие дела" и откланяться, но ситуация требует пояснений.
Смотрите, есть такая штука - пирамида тестирования. Она гласит что unit-тесты - самое дешёвое и быстрое (в плане скорости выполнения) решение для повышения качества продукта. Не кода - заметим - а продукта. Беда с ними, пожалуй, только одна.
По традиции, всё дешёвое и быстрое редко хорошо работает. Если вы пишете на строго типизированном языке, то 80% всех допустимых способов ошибиться вам обрубает компилятор. Остаётся 20%, которые делят напополам т.н. "бизнес-логика" и всякий интеграционный glue-код, который помогает вам достучаться до источников данных, а так же выставить методы вашей логики на свет б-жий. Ну там... менеджеры подключений к базам данных, MVC-контроллеры, DTO-типы, хранящие промежуточные данные... Инфра, короче.
Так вот, сколько я видел кода - там в бизнес-логике ошибок-то не было. Решения бизнес-логика принимает правильные: "Пришёл X - кладём X в базу данных. Пришёл запрос на X по Id - запрашиваем из базы данных". А вот злобные баги и проблемы с реальными пользователями приходятся на инфру и код, её кондачащий.
То в базе данных null лежит вместо строки, то JSON не тот пришёл, то подключение отвалилось, то кука нужная куда-то запропостилась, то вёб-сервис прилёг отдохнуть. Как вариант - "браузер отрисовал кнопку не так, как я ожидал".
Но когда вы делаете юнит-тесты - вы ж всю инфру-то мокаете, правильно? То есть нет больше базы данных, в которой может лежать не то, что хотелось бы. Да и браузер, у нас становится идеальный, рисует всё как мы задумывали.
И если убрать всю инфраструктуру - останется только логика. Да-да, та самая логика, принимающая примитивные решения на уровне "надо вставить Х в базу данных". И этот код чаще всего идеально работает просто потому он тривиальный. Но именно его и покрывают юнит-тесты!
А команда так и продолжает разгребать бесчисленные саппорт-тикеты от заказчиков.
Ради справедливости: плюс-минус через пень колоду юнит-тесты дают бенефиты в одном случае: когда их реально ДОХЕРА. Но знаете ли, когда их дохера - это уже недёшево и, я отвечаю, ни хрена собачьего не быстро.
Такие дела
И не спасут. Тут можно написать "такие дела" и откланяться, но ситуация требует пояснений.
Смотрите, есть такая штука - пирамида тестирования. Она гласит что unit-тесты - самое дешёвое и быстрое (в плане скорости выполнения) решение для повышения качества продукта. Не кода - заметим - а продукта. Беда с ними, пожалуй, только одна.
По традиции, всё дешёвое и быстрое редко хорошо работает. Если вы пишете на строго типизированном языке, то 80% всех допустимых способов ошибиться вам обрубает компилятор. Остаётся 20%, которые делят напополам т.н. "бизнес-логика" и всякий интеграционный glue-код, который помогает вам достучаться до источников данных, а так же выставить методы вашей логики на свет б-жий. Ну там... менеджеры подключений к базам данных, MVC-контроллеры, DTO-типы, хранящие промежуточные данные... Инфра, короче.
Так вот, сколько я видел кода - там в бизнес-логике ошибок-то не было. Решения бизнес-логика принимает правильные: "Пришёл X - кладём X в базу данных. Пришёл запрос на X по Id - запрашиваем из базы данных". А вот злобные баги и проблемы с реальными пользователями приходятся на инфру и код, её кондачащий.
То в базе данных null лежит вместо строки, то JSON не тот пришёл, то подключение отвалилось, то кука нужная куда-то запропостилась, то вёб-сервис прилёг отдохнуть. Как вариант - "браузер отрисовал кнопку не так, как я ожидал".
Но когда вы делаете юнит-тесты - вы ж всю инфру-то мокаете, правильно? То есть нет больше базы данных, в которой может лежать не то, что хотелось бы. Да и браузер, у нас становится идеальный, рисует всё как мы задумывали.
И если убрать всю инфраструктуру - останется только логика. Да-да, та самая логика, принимающая примитивные решения на уровне "надо вставить Х в базу данных". И этот код чаще всего идеально работает просто потому он тривиальный. Но именно его и покрывают юнит-тесты!
А команда так и продолжает разгребать бесчисленные саппорт-тикеты от заказчиков.
Ради справедливости: плюс-минус через пень колоду юнит-тесты дают бенефиты в одном случае: когда их реально ДОХЕРА. Но знаете ли, когда их дохера - это уже недёшево и, я отвечаю, ни хрена собачьего не быстро.
Такие дела