Как перестать делать баги?

Я работаю в айти гдето около 2 лет, замечаю за собой такой недостаток - очень много мелких багов при разработке, которые часто не выявляются при первичных тестах. В итоге приходится очень часто пушить хот-фиксы. Возможно это связано с самим проектом - стартап, надо быстро, ревью особого нет, серьезного тестирования тоже. Но и вцелом я за собой замечал такой недостаток. Собственно вопрос - как этого избавиться? Понятно, есть обычные советы типа будь внимательней, тщательней тестируй свой код - я стараюсь, но все равно то тут, то там какаято досадная ошибка велезет постоянно.

Очень релевантный случай, потому что у меня случай один в один в команде.

Это безусловно связано и с опытом и условиями. С опытом начинаешь лучше видеть возможные баги и их обходить. Книг тут никаких не могу посоветовать, потому что не помню, чтобы в книгах этому учили. Баги в логике — это неучтенное состояние. Неучтенное состояние появляется когда-либо задачу недопонял, либо когда в процессе выполнения забыл какую-то ветку логики покрыть.

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

С другой стороны стартап без ревью и тестирования — не самое лучше место для становления практик. Тем не менее, если нет ревью со стороны коллег, то можно делать ревью себе самому. Достаточно дать коду полежать пол дня, как он начинает забываться. Свежим взглядом можно поймать еще немного багов. Особенно если вести картотеку своих косяков. Поймал баг — записал в каком месте и почему он был пропущен. Потом, когда делаешь ревью — сверяешься со своими заметками, нет ли здесь похожего места.

С тестированием чуть сложнее. Если в проекте изначально не настроено окружение для тестирования, то писать и поддерживать тесты будет крайне сложно. Тут конечно кто-то, возможно даже ты, должен все один раз настроить, а потом поддерживать. Что в условиях стартапа и быстро растущей базы кода может быть довольно нетривиальной задачей. Тем не менее добавить юнит тесты можно почти всегда довольно быстро, а они уже обеспечат хорошую страховку.

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

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