@vzyalgvozd

Является ли залогом безбажности тщательная проверка всего кода, и что делать, если в нашей команде — является?

Эпиграф. Буквально час назад написал код из 70 строчек, в котором при первой перепроверке нашел 3 бага, при второй - еще 1, а при третьей - еще 1. Последний был алгоритмическим - я в цикле изменял то, по чему идет этот же цикл. И такое постоянно.

Ранее у нас были релизы, кишащие в общем-то багами.

Сейчас этим занялся лично я (ничего, что я всего лишь миддл), стал искать баги у себя и коллег. Проверять каждую строчку, и не один раз. Благо, у меня что-то вроде аутизма склонность всё проверять и вообще заниматься рутиной. Так и багов я нахожу достаточно много.

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

1. Так, как думаете, в релизе багов действительно не будет?
2. Может, вообще не писать авто-тесты? Ведь по трудоемкости проще посмотреть что-то в коде, чем написать тест на этот кейс. Или писать их только на сложное, то есть не делать их юнит-тестами, строго говоря.
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 4
@tester12
И то, и другое. И ручная проверка кода (не своего, а коллеги), и тесты.

Но это в идеале, а в реальности всё ограничено штатным расписанием и сроками выполнения задач, и порой на тщательную ловлю багов нет времени.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
1. баги есть везде
2. вы не понимаете логики тестов.

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

Насчет трудоемкости, вы при каждом новом релизе, проверяете все функции + новые функции + их взаимодействие с предыдущим кодом. Лишняя работа причем повторяющаяся. Тесты делают это за вас.
Ответ написан
@EvgeniiR
https://github.com/EvgeniiR
Эпиграф. Буквально час назад написал код из 70 строчек, в котором при первой перепроверке нашел 3 бага, при второй - еще 1, а при третьей - еще 1.

А как считаются строки? Если это 70 строк одной процедуры с циклами то это проблема.

Последний был алгоритмическим - я в цикле изменял то, по чему идет этот же цикл. И такое постоянно.

Помимо того, что "тесты пишутся", важно как они пишутся. Я видел даже портянки на десятки строк которые называли "unit-тестами".
Описанный баг тесты должны ловить. В хорошо покрытом тестами коде, они должны проверять все ветвления(условия) в методе, и возвращаемые значения, в т.ч. граничные условия.

А ещё стат. анализ, иммутабельность.

Так, как думаете, в релизе багов действительно не будет?

Не делайте релиз крупным событием, релизьте часто(1 и более раз в день) и по чуть чуть, набирайте ответственных разработчиков.

Может, вообще не писать авто-тесты? Ведь по трудоемкости проще посмотреть что-то в коде, чем написать тест на этот кейс.

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

Или писать их только на сложное, то есть не делать их юнит-тестами, строго говоря.

Вообще, посмотрите этот доклад - https://www.youtube.com/watch?v=VDfX44fZoMc .
И да, чтобы удешевить покрытие кода unit-тестами, нужно уменьшать связность в коде, иначе утонете в моках.
Улучшение проектирования - одна из основных задач unit-тестов(и основная задача при использовании tdd).
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
2. Может, вообще не писать авто-тесты? Ведь по трудоемкости проще посмотреть что-то в коде, чем написать тест на этот кейс. Или писать их только на сложное, то есть не делать их юнит-тестами, строго говоря.


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

Поэтому автотесты - писать надо.

Программист и тестировщик (тем более automation test engineer) тоже несколько разные люди, каждый со своей специализацией и профессиональными знаниями, ибо не все можно уместить в юниттесты, особенно в сложных многокомпонентных продуктах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы