Эпиграф. Буквально час назад написал код из 70 строчек, в котором при первой перепроверке нашел 3 бага, при второй - еще 1, а при третьей - еще 1.
А как считаются строки? Если это 70 строк одной процедуры с циклами то это проблема.
Последний был алгоритмическим - я в цикле изменял то, по чему идет этот же цикл. И такое постоянно.
Помимо того, что "тесты пишутся", важно как они пишутся. Я видел даже портянки на десятки строк которые называли "unit-тестами".
Описанный баг тесты должны ловить. В хорошо покрытом тестами коде, они должны проверять все ветвления(условия) в методе, и возвращаемые значения, в т.ч. граничные условия.
А ещё стат. анализ, иммутабельность.
Так, как думаете, в релизе багов действительно не будет?
Не делайте релиз крупным событием, релизьте часто(1 и более раз в день) и по чуть чуть, набирайте ответственных разработчиков.
Может, вообще не писать авто-тесты? Ведь по трудоемкости проще посмотреть что-то в коде, чем написать тест на этот кейс.
Мысль о том, что тесты это дорого и не окупается - очень частый признак того что тесты или код пишутся плохо. Написать тест не сильно дольше чем самому код запускать, только после написания тесты можно запускать автоматизированно, а не запускать всю систему заново. Да и идею частого деплоя это убивает.
Или писать их только на сложное, то есть не делать их юнит-тестами, строго говоря.
Вообще, посмотрите этот доклад -
https://www.youtube.com/watch?v=VDfX44fZoMc .
И да, чтобы удешевить покрытие кода unit-тестами, нужно уменьшать связность в коде, иначе утонете в моках.
Улучшение проектирования - одна из основных задач unit-тестов(и основная задача при использовании tdd).