Тестирование - общие вопросы

Всё про тестирование в Yii 2.0
Закрыто
dekree
Сообщения: 6
Зарегистрирован: 2017.03.23, 20:52

Тестирование - общие вопросы

Сообщение dekree »

Дошел до темы тестирования. Не в контексте PHP или YII2,а вообще. Возникло стойкое ощущение,что тесты - это какая-то новая дань моде, "потому что так положено". Объясните мне, зачем они нужны, если:
1) Тот, кто пишет тесты, должен предусмотреть абсолютно ВСЕ ситуации, которые могут потенциально сломать код. Это нереально, всего предусмотреть просто невозможно, человек не робот. Даже взять разработчиков YII, это же професионалы своего дела и тем не менее, они на протяжении всего времени правят баги,ошибки и фиксят код. А вторую версию вообще переписали полностью. Получается, время, потраченное на написание тестов - потрачено впустую?
Если эти баги,ошибки в любом случае будут (а Вы знаете хотя бы один проект, который сразу "зашел" идеально и в будущем никогда не давал никаких сбоев?), то какой смысл тратить просто уйму времени еще и на эти тесты?
2) Сейчас модно козырять всякими TDD, BDD,*DD. Если разработчик вначале разрабатывает тесты, а затем пишет под него код, то зачем вообще придумали такую специальность, как QA? Зачем они нужны, если кодер и проектировщик, и тестировщик в одном флаконе?
Отдельный вопрос к Дмитрию (Elisdn), Вы когда создавали свой сайт-блог, Вы писали тесты и если да, то какой процент времени ушел на написание тестов от общего времени разработки?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Тестирование - общие вопросы

Сообщение zelenin »

dekree писал(а): 2017.04.03, 15:37 Дошел до темы тестирования. Не в контексте PHP или YII2,а вообще. Возникло стойкое ощущение,что тесты - это какая-то новая дань моде, "потому что так положено". Объясните мне, зачем они нужны, если:
1) Тот, кто пишет тесты, должен предусмотреть абсолютно ВСЕ ситуации, которые могут потенциально сломать код. Это нереально, всего предусмотреть просто невозможно, человек не робот.
это нормально. Но зато те, которые предусмотрены, не сломают ваш код. А когда вылезет непредусмотренный кейс, вы его добавите в тесты.
dekree писал(а): 2017.04.03, 15:37Даже взять разработчиков YII, это же професионалы своего дела и тем не менее, они на протяжении всего времени правят баги,ошибки и фиксят код. А вторую версию вообще переписали полностью.
эм, вообще несвязанные вещи
dekree писал(а): 2017.04.03, 15:37Получается, время, потраченное на написание тестов - потрачено впустую?
два разных продукта, объединенных одной идеологией.
dekree писал(а): 2017.04.03, 15:37Если эти баги,ошибки в любом случае будут (а Вы знаете хотя бы один проект, который сразу "зашел" идеально и в будущем никогда не давал никаких сбоев?), то какой смысл тратить просто уйму времени еще и на эти тесты?
чтобы сократить кол-во багов на бою в десятки раз. Вы добавляете новый функционал, выливаете на продакшн, и вдруг у вас что-то сломалось. С тестами шанс такой ситуации сильно уменьшается.
dekree писал(а): 2017.04.03, 15:372) Сейчас модно козырять всякими TDD, BDD,*DD. Если разработчик вначале разрабатывает тесты, а затем пишет под него код, то зачем вообще придумали такую специальность, как QA? Зачем они нужны, если кодер и проектировщик, и тестировщик в одном флаконе?
Отдельный вопрос к Дмитрию (Elisdn), Вы когда создавали свой сайт-блог, Вы писали тесты и если да, то какой процент времени ушел на написание тестов от общего времени разработки?
разработчик пишет юнит-тесты, qa пишет функциональные.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Тестирование - общие вопросы

Сообщение ElisDN »

dekree писал(а): 2017.04.03, 15:37 Дошел до темы тестирования. Не в контексте PHP или YII2 вообще. Возникло стойкое ощущението тесты - это какая-то новая дань моде, "потому что так положено".
Тест вашего сообщения выявил две пунктуационные ошибки, о которых Вы и не догадывались. С такой же небрежностью Вы или ваш сосед-новичок можете "<" вместо "<=" в каком-нибудь if-е написать или скобки между "&&" и "||" перепутать и что-то будет считаться неправильно.
dekree писал(а): 2017.04.03, 15:37 1) Тот, кто пишет тесты, должен предусмотреть абсолютно ВСЕ ситуации, которые могут потенциально сломать код. Это нереально, всего предусмотреть просто невозможно, человек не робот.
Все не нужно. А только те, которые требуется. Если в ТЗ указано, что пользователь может опубликовать объявление из черновика только если заполнены контактные данные, загружены фотографии и есть нужная сумма на балансе, то вполне логично для метода publish() написать тесты для пяти ситуаций: "успешная публикация", "объявление уже опубликовано", "не указаны контактные данные", "загрузите хотя бы одну фотографию", "недостаточно средств на балансе". Также, как разбирали пример здесь. Это быстрее спрограммировать в тесте, чем каждый день по полчаса прокликивать весь сайт самому.
dekree писал(а): 2017.04.03, 15:37 Даже взять разработчиков YII, это же професионалы своего дела и тем не менее, они на протяжении всего времени правят баги, ошибки и фиксят код. А вторую версию вообще переписали полностью. Получается, время, потраченное на написание тестов - потрачено впустую? Если эти баги, ошибки в любом случае будут (а Вы знаете хотя бы один проект, который сразу "зашел" идеально и в будущем никогда не давал никаких сбоев?), то какой смысл тратить просто уйму времени еще и на эти тесты?
За это время у Yii накопилось 3 093 теста, которые автоматически запускаются системой CI для проверки каждого коммита на семи версиях PHP. А у Symfony сейчас их суммарно 43 833. Это позволяет принимать код со всего мира целыми пачками без опасений, что какой-то новичок в этих миллионах строк кода что-то нечаянно зацепил, так как почти каждый важный метод вдоль и поперёк протестирован.

Именно поэтому фреймворки спокойно разрабатываются тысячами человек и за время своей жизни в плане надёжности только улучшаются. Если бы не тесты, то там бы каждый день что-то ломалось и никто бы этого не замечал.
dekree писал(а): 2017.04.03, 15:37 ...то зачем вообще придумали такую специальность, как QA? Зачем они нужны, если кодер и проектировщик, и тестировщик в одном флаконе?
Юнит-тесты проверяют исходный код, QA проверяет страницы сайта. Приёмочные тесты могут и страницы с JavaScript проверить, но проблемы вёрстки вроде "меню наехало на кнопку в IE8" может увидеть только человек. Как раз QA и баг-трекинг нужен для поиска тех специфических ошибок, которые трудно предусмотреть.

Мне понравился доклад от 2Gis со словами "у нас 50 тысяч тестов, которые выполняются два часа... и мы их запускаем несколько раз день". Думаю, что им лучше переплатить программисту за 20 минут, чем нанимать тысячу тестеров, которые каждый день будут проверять всё вручную.
dekree писал(а): 2017.04.03, 15:37 2) Сейчас модно козырять всякими TDD, BDD,*DD. Если разработчик вначале разрабатывает тесты, а затем пишет под него код, то зачем вообще придумали такую специальность, как QA?
Бывало так, что налапшекодил кто-то кучу кода и потом бегает с воплями "как на эту кучу г* тесты написать". Если бы он заранее знал, что ему же это придётся тестировать, то такое г* бы не написал. И здесь TDD как раз и придумали. Не только для того, чтобы просто делать тесты, а чтобы разработчик думал, что пишет. И чтобы код писал удобный и модульный, так как индусскую лапшу на тесты никак не намотаешь.

BDD - для формализации сценариев из ТЗ в виде человекочитаемых тестовых предложений. DDD - чтобы код писался на человеческом языке и читался терминами, которые приняты в предметной области.
dekree писал(а): 2017.04.03, 15:37 Отдельный вопрос к Дмитрию (Elisdn), Вы когда создавали свой сайт-блог, Вы писали тесты?
Для блога не писал, так как там просто CRUD и никакой логики нет.

В том году сдал сервис котировок в виде API-бекенда к мобильному приложению, где компонент проверки оплаты дополнил модульными тестами и приёмочными покрыл всё API. После этого много чего рефакторил, не сломав ни один API-тест.

На той неделе сдал проект с аукционом подержаных автомобилей, биржей купли-продажи запчастей, запросами автосервисов и эвакуаторов. Сейчас там 662 коммита, 1152 PHP-файла и всего 169 тестов на самое важное.
dekree писал(а): 2017.04.03, 15:37 ...и если да, то какой процент времени ушел на написание тестов от общего времени разработки?
Как-то с учеником сидели и собирали забавную партнёрскую программу с очень хитрой системой регистрации в шесть шагов. Полтора часа разбирали ТЗ и сочиняли тест, проверяющий досконально все эти шаги, а потом... за час написали код. Итого из-за сложности алгоритма на тест потратили больше, чем на код. Но есть нюанс... Во время написания кода мы всего лишь пару сотен раз запустили тест, пока не дописали алгоритм, сделавший весь тест зелёным. Если бы мы после каждой правки кода каждый раз чистили таблицу users в PhpMyAdmin и регистрировали партнёров вручную, чтобы проверить все переходы с шага на шаг, то просидели бы, наверное, трое суток.
dekree
Сообщения: 6
Зарегистрирован: 2017.03.23, 20:52

Re: Тестирование - общие вопросы

Сообщение dekree »

Ребят,спасибо за ответы,кое-что прояснилось,буду разбираться,а также блог Дмитрия "курить":)
Закрыто