Господа,
Это вопрос для бывалых воинов в области разработки ПО.
Преамбула:
— Я занимаюсь разработкой ПО долго и очень четко понимаю разницу между unit, integration and functional tests
— Профессионально знаком с NUnit, для меня не составляет никакого труда написать unit test если потребуется
— Написание теста не займет много моего времени. Это будет быстро
Но я не пишу unit tests (у компании нет обязательных conventions относительно unit tests) ввиду полного отсутствия результата в моем случае.
Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
Вопрос именно к опытным профессиональным разработчикам ПО.
Здравствуйте, a_g_99, Вы писали:
__>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
Не пишу, не нравится. Не вижу смысла.
__>Вопрос именно к опытным профессиональным разработчикам ПО.
__>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
Пишу покрытие основных кейсов при разработке новой функциональности — на сервисы и неочевидные классы.
Потом этот набор кейсов выкидываю (вернее, не включаю в тестирование и не поддерживаю. Сам код остается для рефакторингов, багфиксинга и т.п.).
Интеграционные и модульные тесты — пишем обязательно, в рамках основных пользовательских кейсов.
P.S. Java, Web, стоимость ошибки достаточно мала — поэтому и не выпендриваюсь.
__>Вопрос именно к опытным профессиональным разработчикам ПО.
А черт его знает.
Здравствуйте, a_g_99, Вы писали:
__>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
пишу чтобы не тестировать руками, всегда когда надо часто тестировать и есть возможность написать тесты
впрочем обычно это регрессионные тесты, а не unit тесты.
Именно unit тесты — не пишу. Пишу функциональные по всем основным юзкейсам, если код позволяет это сравнительно легко сделать. Интеграционные тесты пишет специальный человек.
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
Здравствуйте, a_g_99, Вы писали:
__>- Я занимаюсь разработкой ПО долго и очень четко понимаю разницу между unit, integration and functional tests __>- Профессионально знаком с NUnit, для меня не составляет никакого труда написать unit test если потребуется __>- Написание теста не займет много моего времени. Это будет быстро
__>Но я не пишу unit tests (у компании нет обязательных conventions относительно unit tests) ввиду полного отсутствия результата в моем случае.
__>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
Если Вам реально интересна иная точка зрения, то я могу сказать пару слов:
1. Есть задачи, для которых юнит тесты значительно сокращают количество ошибок в коде. Причем происходит быстрое обнаружение(сразу после билда).
Насколько эти задачи часто или редко встречаются конкретному разработчику — это обсуждать не имеет смысла.
2. Написать хороший юнит тест это очень вряд-ли будет просто и не будет быстро.
3. Тесты очень желатьльно запускать при каждом билде и этот вопрос обычно решается не программистами.
Если для ваших конкретных условий юнит тесты не приносят результата, вас не заставляют их писать и лично Вам их написание не поднимает настроение — не пишите и никого не слушайте
Здравствуйте, a_g_99, Вы писали: __>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
Пишу когда не понимаю, как работает (не знакома предметная область). Было два раза.
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, Spiceman, Вы писали:
S>А какие критерии опытности и профессиональности?
Белый мужчина в возрасте от 30 до 50 лет, имеющий законченное профильное ВО (math, cs, etc.) в одном из технических государственных вузов России, Западной Европы, Японии/Сингапура, США. Имеет не менее 7 лет опыта в сфере разработки ПО в мейнстриме (не мейнстрим тоже пойдет, но меня то интересует именно мейнстрим ), работал/работает на мегакорпорации и/или компании/стартапы со штаб-квартирой в штатах (не обязательно, но желательно). прилично владеет английским. Как-то так.
Здравствуйте, robin_of_the_wood, Вы писали:
___>1. Есть задачи, для которых юнит тесты значительно сокращают количество ошибок в коде. Причем происходит быстрое обнаружение(сразу после билда). ___>Насколько эти задачи часто или редко встречаются конкретному разработчику — это обсуждать не имеет смысла.
Т.е. юнит-тесты пишутся если заранее предполагается что код имеет плохое качество (много ошибок)? И если напр. код пишется качественно, юнит-тесты не нужны?
___>Если для ваших конкретных условий юнит тесты не приносят результата, вас не заставляют их писать и лично Вам их написание не поднимает настроение — не пишите и никого не слушайте
Это вопрос не о желаниях . Для меня важно понять как другие знающие люди используют эту технологию с пользой для себя.
Главный провокационный вопрос таков — юнит-тесты пишут плохие разработчики, которые изначально уверены что их код полон ошибок или нет?
Здравствуйте, a_g_99, Вы писали:
__>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
Юнит-тесты в классическом понимании — нет, их с успехом заменяют ассерты непосредственно в коде.
Для отдельных слоёв и компонентов — стараюсь по мере возможности написать в виде тестов основные сценарии использования. Во-первых, это помогает увидеть проблемные места в API. Во-вторых, иначе просто нельзя отладить код (заставить сработать ассерты ) до использования компонента в проекте. В-третьих, на выходе получаются заведомо рабочие сценарии использования, которые сами по себе являются неплохой документацией.
Здравствуйте, a_g_99, Вы писали:
__>Т.е. юнит-тесты пишутся если заранее предполагается что код имеет плохое качество (много ошибок)? И если напр. код пишется качественно, юнит-тесты не нужны?
тесты — это хоть какая-то физическая гарантия правильности кода
мне лично сильно влом отлаживаться на запущенном приложении, с тестами отладка побыстрее будет
__>Главный провокационный вопрос таков — юнит-тесты пишут плохие разработчики, которые изначально уверены что их код полон ошибок или нет?
нет, плохие разработчики думают, что они-то ошибок не делают, или отладятся потом, когда что-нибудь всплывёт
Здравствуйте, a_g_99, Вы писали:
__>Преамбула: __>- Я занимаюсь разработкой ПО долго и очень четко понимаю разницу между unit, integration and functional tests __>- Профессионально знаком с NUnit, для меня не составляет никакого труда написать unit test если потребуется __>- Написание теста не займет много моего времени. Это будет быстро
Выскажу свое мнение.
Пытался разрабатывать проект одновременно покрывая код юнит-тестами. Над проектом работал один, поэтому
тратил время и на написание тестов и на их поддержку. Однако при значительном изменении дизайна архитектуры,
практически половину тестов пришлось выкинуть на помойку. Зря только время тратил. Однако неплохо страхуют при рефакторинге.
Для себя сделал вывод, что если работаешь над проектом один и есть желание писать юнит-тесты, то тогда уж желательно
придерживаться какой-нибудь соотв. методологии типа TDD. Иначе много времени будет потрачено в пустую.
Сейчас разрабатываю небольшой сервис и клиента для него. От юнит-тестирования решил отказаться сразу. Использую
интеграционные тесты и не могу нарадоваться. Появился новый бизнес кейс -- написал код и соотв. сценарий его тестирования,
и в комплексе все прогнал. Гранулярность конечно не такая как у юнит-тестов, но ошибки ловятся.
На собственной шкуре понял одно -- разборка кода и какой-либо способ его тестирование должны идти неразрывно.
Здравствуйте, a_g_99, Вы писали:
__>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
На моем зоопарке компиляторов С++ и операционных систем (Linux/QNX/Windows) разных версий, работающих от микропоцессоров до серверов, я пишу их всегда когда могу написать, так как это лучшее средство поймать баг в зародыше.
Здравствуйте, a_g_99, Вы писали:
S>>А какие критерии опытности и профессиональности? __>Белый мужчина в возрасте от 30 до 50 лет, имеющий законченное профильное ВО (math, cs, etc.) в одном из технических государственных вузов России, Западной Европы, Японии/Сингапура, США. Имеет не менее 7 лет опыта в сфере разработки ПО в мейнстриме (не мейнстрим тоже пойдет, но меня то интересует именно мейнстрим ), работал/работает на мегакорпорации и/или компании/стартапы со штаб-квартирой в штатах (не обязательно, но желательно). прилично владеет английским. Как-то так.
Практикую BDD/TDD, пишу тесты сверху вниз. По личному опыту экономит время на отладку/ручное тестирование, дает хорошие бонусы к архитектуре, документации и планированию, а также +100500 к карме. Не понимаю, как раньше без этого жил.
PM в американской корпорации, стаж коммерческой разработки около 15 лет. Команду сейчас тоже приучаю, на примерах и готовой инфраструктуре. Проект — веб B2B на Java.
__>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
Для нового кода — пишу всегда, когда это имеет смысл. Для legacy — пишу если что-то изменяю или дополняю.
По возможности стараюсь писать тесты перед написанием кода.
Тесты, которые ничего не проверяют, а существуют только для галочки и отчета о покрытии, никому не нужны.
Использую юнит-тесты в качестве документации. Например вместо многостраничного документа с объяснением того, как работает один хитрый код, я даю поиграться с юнит-тестами для него.
Мой основной метод тестирования это Runtime verification
Тестирующий код идет вперемешку с с функционалом и в отладочной сборке проверяет большую часть функционала. Это самая удобная техника, ничего лучше пока не встречал.
Из тестов много интеграционных, проверка функционала на экзотических данных, и обычные тесты которые сложно провести по месту.
Вдогонку, часто тесты пишу в том же модуле что и сам юнит, тогда ненужные потроха не выносятся за пределы юнита.
Здравствуйте, MTD, Вы писали:
MTD>Здравствуйте, a_g_99, Вы писали:
__>>Пожалуйста, дайте отзыв — пишите ли вы unit tests и почему/в каких случаях (не по conventions, а по собственному желанию).
MTD>На моем зоопарке компиляторов С++ и операционных систем (Linux/QNX/Windows) разных версий, работающих от микропоцессоров до серверов, я пишу их всегда когда могу написать, так как это лучшее средство поймать баг в зародыше.