Юнит тесты и TDD
-
- Уже с Приветом
- Posts: 192
- Joined: 01 Jul 2005 08:56
- Location: Нск, РФ -> Riverside, CA
Юнит тесты и TDD
Привет всем. Встречался мне вопрос на интервью - "Как вы проводите тестирование? Как относитесь к юнит тестам? Как вы смотрите на Test Driven Development?". В общем что-то в этом роде.
В реальности я с юнит тестами работаю следующим образом - пишу код по задаче (потому что она зачастую довольно свободно поставлена), смотрю что получилось. Потому что если пишется не маленькая функция, а фреймворк для сервиса, то можно кучу раз всю архитектуру перелопатить в процессе написания. Когда все работает пишу интеграционные тесты чтобы различными запросами сервер в сборке потрясти. Потом пишу юнит тесты, при этом зачастую часть кода переделывается, добавляются граничные условия, проверки входных данных. Может быть сделана переделка инициации внешних зависимостей. Ну и в результате когда все это работает, уже заливаю код в Гит.
Т.е. получается подход - вначале контуры, общая картина, а потом уже добавление мелких штрихов для целостности. В общем интервьюеру это не понравилось, как я понял. А как вы занимаетесь тестами написанного кода (ну если не перекидывать через забор тестеру)? Следуете ли принципу "вначале тест, потом код"?
В реальности я с юнит тестами работаю следующим образом - пишу код по задаче (потому что она зачастую довольно свободно поставлена), смотрю что получилось. Потому что если пишется не маленькая функция, а фреймворк для сервиса, то можно кучу раз всю архитектуру перелопатить в процессе написания. Когда все работает пишу интеграционные тесты чтобы различными запросами сервер в сборке потрясти. Потом пишу юнит тесты, при этом зачастую часть кода переделывается, добавляются граничные условия, проверки входных данных. Может быть сделана переделка инициации внешних зависимостей. Ну и в результате когда все это работает, уже заливаю код в Гит.
Т.е. получается подход - вначале контуры, общая картина, а потом уже добавление мелких штрихов для целостности. В общем интервьюеру это не понравилось, как я понял. А как вы занимаетесь тестами написанного кода (ну если не перекидывать через забор тестеру)? Следуете ли принципу "вначале тест, потом код"?
-
- Уже с Приветом
- Posts: 4205
- Joined: 10 Jan 2004 01:22
- Location: n-sk -> MD -> VA
Re: Юнит тесты и TDD
Про "вначале тест, потом код" говорят только "говоруны", лунатики и проф непригодные, начитавшиеся журнала "CIO".
Если точно нужна такая работа, то так и говорите: Пока не покрою юнит тестами 100%, к имплементации не приступаю.
Если у Вас расплывчатые спеки, то Вы все делаете правильно.
Если точно нужна такая работа, то так и говорите: Пока не покрою юнит тестами 100%, к имплементации не приступаю.
Если у Вас расплывчатые спеки, то Вы все делаете правильно.
-
- Уже с Приветом
- Posts: 1355
- Joined: 07 Jul 2012 04:07
Re: Юнит тесты и TDD
Вопрос о TDD как бы сам по себе намек. Надо было радостно рассказать, как это помогает, особенно на ранних этапах разработки, да еще в сочетании с каким-нибудь NCrunch - вообще сказка (и действительно чудесный тул). Потом сделать озабоченное лицо и сказать, что по опыту, последовательное воплощение TDD прибавляет примерно 30% ко времени разработки проекта, хотя и обеспечивает лучшее качество и в итоге более продуманную архитектуру, так что, увы, часто ближе к концу проекта TDD приносят в жертву графику. Как-то так.
-
- Уже с Приветом
- Posts: 34124
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Юнит тесты и TDD
Зависит от задачи понятно.
Если нужен сервис, то сначала пишешь интерфейсы, а потом накатываешь BDD тесты на Cucumber и потом уже вдумчиво пробиваешь тулово сервиса. Большая экономия времени и усилий получается + плюс эксептенс критерия по джире уже забиты.
Если же вычислеж какой, то можно вполне и JUnit обойтись.
Я лично потихоньку мозги выедаю коллегам BDD Сucumber... просто испытываю невероятное удовлетворении от того как их штырит от одной мысли, что "сначала тест, а потом код"
Если нужен сервис, то сначала пишешь интерфейсы, а потом накатываешь BDD тесты на Cucumber и потом уже вдумчиво пробиваешь тулово сервиса. Большая экономия времени и усилий получается + плюс эксептенс критерия по джире уже забиты.
Если же вычислеж какой, то можно вполне и JUnit обойтись.
Я лично потихоньку мозги выедаю коллегам BDD Сucumber... просто испытываю невероятное удовлетворении от того как их штырит от одной мысли, что "сначала тест, а потом код"
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Юнит тесты и TDD
На самом деле я таки начинала иногда с тестов и получалось все как начитавшиеся лунатики завещали . Но в целом да - тесты уже after all. У нашего теперяшнего архитектра требование 80%+ test coverage. Я заметила что если пользуешь rest easy для интеграционных тестов оно на coverage не влияет хотя по сути all layers of webservice are involved. Вот где настоящее горе - обьяснять что тестов не так мало как может показатьсяfruit6 wrote:Про "вначале тест, потом код" говорят только "говоруны", лунатики и проф непригодные, начитавшиеся журнала "CIO".
Если точно нужна такая работа, то так и говорите: Пока не покрою юнит тестами 100%, к имплементации не приступаю.
Если у Вас расплывчатые спеки, то Вы все делаете правильно.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 34124
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Юнит тесты и TDD
Не ну а чо? Если я один или нас двое то тесты это просто для прикола и для резюме. А вот если там уже больше трех, а обычно средний тим 6/7 человек, то отсутсвие тестов в начале разработки это обезьяник где каждая обезьяна наровит украсть чужой банан.
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 192
- Joined: 01 Jul 2005 08:56
- Location: Нск, РФ -> Riverside, CA
Re: Юнит тесты и TDD
В целом понятно, т.е. если на начальном этапе в одиночку, то более-менее правильно, а как только команда начинает подключатся, то надо сразу все через тесты проводить...
Кто-нибудь порекомендует книгу / софт / хороший подход - для веб-сервисов на Java? Чтобы разумный подход был. В целом пользуюсь JUnit / Mockito, интеграционные REST тесты через Python / Nose, запускаются автоматически на каждый pull request, раз в неделю гоняем тесты с больших покрытием, regression тесты, проводили нагрузочные тесты и тесты на производительность, профилирование среднего времени исполнения. Так, думаю об улучшении качества кода - релиз близок, прорыв есть, работает все быстрее относительно предыдущей версии раз в 10-20, но поджилки трясутся все на production выставлять...
Кто-нибудь порекомендует книгу / софт / хороший подход - для веб-сервисов на Java? Чтобы разумный подход был. В целом пользуюсь JUnit / Mockito, интеграционные REST тесты через Python / Nose, запускаются автоматически на каждый pull request, раз в неделю гоняем тесты с больших покрытием, regression тесты, проводили нагрузочные тесты и тесты на производительность, профилирование среднего времени исполнения. Так, думаю об улучшении качества кода - релиз близок, прорыв есть, работает все быстрее относительно предыдущей версии раз в 10-20, но поджилки трясутся все на production выставлять...
-
- Уже с Приветом
- Posts: 192
- Joined: 01 Jul 2005 08:56
- Location: Нск, РФ -> Riverside, CA
Re: Юнит тесты и TDD
Сорри, кажется не туда топик запихнул - наверное надо было в "Вопросы и новости IT"...
-
- Уже с Приветом
- Posts: 34124
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Юнит тесты и TDD
Господь с Вами - в вопросах ИТ народ мейнфреймы обсуждает на ТДД они с топором бросаться будут.Wolverene wrote:Сорри, кажется не туда топик запихнул - наверное надо было в "Вопросы и новости IT"...
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 4205
- Joined: 10 Jan 2004 01:22
- Location: n-sk -> MD -> VA
Re: Юнит тесты и TDD
Не совсем понятно из контекста, Вы работаете по waterfall, и кто-то уже определил интерфейсы и критерии приемки?Sergunka wrote:Зависит от задачи понятно.
Если нужен сервис, то сначала пишешь интерфейсы, а потом накатываешь BDD тесты на Cucumber и потом уже вдумчиво пробиваешь тулово сервиса. Большая экономия времени и усилий получается + плюс эксептенс критерия по джире уже забиты.
Если же вычислеж какой, то можно вполне и JUnit обойтись.
Я лично потихоньку мозги выедаю коллегам BDD Сucumber... просто испытываю невероятное удовлетворении от того как их штырит от одной мысли, что "сначала тест, а потом код"
-
- Уже с Приветом
- Posts: 34124
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: Юнит тесты и TDD
Классический аджайл с продакт онер и бизнес аналист. Критерии пишут они фактически. Все вполне прозрачно. Если критерии меняются соотвественно переписывается интерфейс + сценарий в тесте ну и само собой джира.fruit6 wrote:Не совсем понятно из контекста, Вы работаете по waterfall, и кто-то уже определил интерфейсы и критерии приемки?Sergunka wrote:Зависит от задачи понятно.
Если нужен сервис, то сначала пишешь интерфейсы, а потом накатываешь BDD тесты на Cucumber и потом уже вдумчиво пробиваешь тулово сервиса. Большая экономия времени и усилий получается + плюс эксептенс критерия по джире уже забиты.
Если же вычислеж какой, то можно вполне и JUnit обойтись.
Я лично потихоньку мозги выедаю коллегам BDD Сucumber... просто испытываю невероятное удовлетворении от того как их штырит от одной мысли, что "сначала тест, а потом код"
Разве у Вас не так?
"A patriot must always be ready to defend his country against his government." Edward Abbey
-
- Уже с Приветом
- Posts: 4205
- Joined: 10 Jan 2004 01:22
- Location: n-sk -> MD -> VA
Re: Юнит тесты и TDD
да-да, я видел много раз какого рода продукт производят "продакт онер и бизнес аналист" -- "Utter shit", как выражается наш друг с мейнфрема.
И факт что Вы называете это достаточным для тестирования говорит всего лишь что Вы адаптировались к правилам игры.
И факт что Вы называете это достаточным для тестирования говорит всего лишь что Вы адаптировались к правилам игры.
-
- Уже с Приветом
- Posts: 343
- Joined: 20 Aug 2007 09:10
- Location: So San Fran, CA
Re: Юнит тесты и TDD
Пишу сначала тесты, потом код. От правила стараюсь не отступать. Да, добавляет 30% ко времени разработки на начальных этапах. Но это не моя проблема, деньги платят, а я делаю как считаю нужным. Зато потом хорошо. Если работодателю это не нравится, то я его меняю. Впрочем, особых проблем с этим не возникало, предыдущие работодатели уговаривали остаться. Я уходил по другим причинам.
Можно это сравнить с хирургической операцией. Представьте, что вы хирург и делаете операцию на сердце. А вам говорят - давай быстрее. Я просто решил для себя, что не хочу это слышать. Морально готов увольнению на почве сдачи проекта позднее, чем ожидается и к спорам с менеджерами. Решил, что париться по этому поводу смысла нет, когда вокруг так много вакансий на рынке. Была бы ситуация на рынке другая - не вы....вался бы.
Можно это сравнить с хирургической операцией. Представьте, что вы хирург и делаете операцию на сердце. А вам говорят - давай быстрее. Я просто решил для себя, что не хочу это слышать. Морально готов увольнению на почве сдачи проекта позднее, чем ожидается и к спорам с менеджерами. Решил, что париться по этому поводу смысла нет, когда вокруг так много вакансий на рынке. Была бы ситуация на рынке другая - не вы....вался бы.
-
- Уже с Приветом
- Posts: 539
- Joined: 24 Mar 2004 07:31
- Location: Krasnoyrsk -> -> Chicago
Re: Юнит тесты и TDD
"Юнит тесты и TDD" ограниченно полезны. Надо понимать, что юнит тесты не должны подменять и исключать функциональные/интеграционные тесты. Юнит тесты - они для тестирования алгоритмов бизнес логики, их можно применять для большего, но подменяя ими ф.т. будет только хуже.
А вот функциональные тесты и ТДД могут сильно помочь в разработке, это когда BA и QA пишут тесты для новых фичь, а FE/BE/fullstack девелоперы делают имплементацию, чтобы эти тесты проходили. Но в СI надо разделять backlog(in development) test cases, которые еще сделаны и должны фэилиться, и completed которые не должны фэилиться, иначе ПМ будет ругаться.
Про классический аджайл ... я не буду придираться к словам, но это работаюций, а не классический адажайл. По манифесту, в классическом, все тулзы и писанные критерии стоят на шестом месте, а на первом - ПМ, ПО и ВА.
А вот функциональные тесты и ТДД могут сильно помочь в разработке, это когда BA и QA пишут тесты для новых фичь, а FE/BE/fullstack девелоперы делают имплементацию, чтобы эти тесты проходили. Но в СI надо разделять backlog(in development) test cases, которые еще сделаны и должны фэилиться, и completed которые не должны фэилиться, иначе ПМ будет ругаться.
Про классический аджайл ... я не буду придираться к словам, но это работаюций, а не классический адажайл. По манифесту, в классическом, все тулзы и писанные критерии стоят на шестом месте, а на первом - ПМ, ПО и ВА.
моя родина СССР!