powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему юнит тесты повышают связность?
20 сообщений из 20, страница 1 из 1
Почему юнит тесты повышают связность?
    #39597621
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тут товарищ говорит, что юнит тесты увеличивают связность.
[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39597666
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так может оригинал посмотреть
http://blog.cleancoder.com/uncle-bob/2017/03/03/TDD-Harms-Architecture.html
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39597670
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Имеется ввиду, что у теста офигенно сильная связь с тестируемым классом. И каждый пук в структуре класса требует модификации теста и, зачастую, не одну. Это и есть та самая связность которая имеется ввиду, ведь тест это часть системы как и любой другой класс.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39597841
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо уточнить, что дело идет о не очень хорошо написанных тестах. Например, которые тестируют не паблик методы. Хотя такие тоже иногда нужны, хотя я считаю что это уже не часть проекта, и с внесением изменений в тестируемый класс, такой тест должен отправляться на свалку.
Тоже самое касается любителей "надо покрыть n-десят процентов кода тестами".
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39597979
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никНадо уточнить, что дело идет о не очень хорошо написанных тестах.
Вообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598002
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл никНадо уточнить, что дело идет о не очень хорошо написанных тестах.
Вообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь.

Нефиг интерфейсы/контракты менять почем зря :-)

Не понятно почему такая "связность" это плохо?!
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598006
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulНефиг интерфейсы/контракты менять почем зря :-)

Отставить рефакторинг! Увековечим контракты в граните!

mad_nazgulНе понятно почему такая "связность" это плохо?!
Ну, указали же выше. Вы проводите рефакторинг и весь тест идет на свалку. И вы остаетесь перед выбором, либо выкинуть и написать новый тест, либо потратить еще пару часов и довести тест до ума. В любом случае работы не мало. Что вызывает особое разочарование когда рефакторинг основного класса занял всего несколько минут.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598055
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczmad_nazgulНефиг интерфейсы/контракты менять почем зря :-)

Отставить рефакторинг! Увековечим контракты в граните!


Ессно!
Контракт это как договор, после подписания (опубликования) менять нельзя. :-)
Если после рефакторинга меняется контракт, это значит кто-то крупно "облажался".

Blazkowiczmad_nazgulНе понятно почему такая "связность" это плохо?!
Ну, указали же выше. Вы проводите рефакторинг и весь тест идет на свалку. И вы остаетесь перед выбором, либо выкинуть и написать новый тест, либо потратить еще пару часов и довести тест до ума. В любом случае работы не мало. Что вызывает особое разочарование когда рефакторинг основного класса занял всего несколько минут.

Ну правильно!
Тесты гарантируют неизменность контракта.
А если он меняется, это значит все надо переписывать.
Как минимум это гарантирует, что мы будем знать что и где надо "чинить".
Так что я всеми руками "за" такую связность.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598069
qasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Когда вы пишете автотесты, надо понять и простить принять несколько вещей:

1) протестировать приложение всегда дороже, чем не протестировать - изменив что-то в классе придется менять что-то и в тесте. И тогда на реализацию задачи/доработки у вас вместо 1 часа вполне может уйти два.
2) тест не окупает себя, если всё заработало сразу
3) при большом количестве тестов (это скорее уже не про юнит-тесты, а про интеграционные и т.п. - которые проверяют сразу несколько вещей) их надо проектировать так же, как и обычное приложение (и потратить на это приличное количество времени)
4) тест позволяет лучше взглянуть на класс "снаружи" (если тест смотрит на класс слишком близко - от него пользы будет меньше - даже для юнит тестов это так). Нет никаких причин писать автотест для приватного метода.
5) автотест окупает себя, когда что-то идет не так: если с тестом проверка обычно (цикл "исравил что-то в коде - проверил") занимает от 10 секунд до 1 минуты, то без теста чаще от 3 до 10 минут. Я чаще всего сталкивался с такой ситуацией (занимаюсь в основном разработкой веб-приложение на основе Java Enterprise Edition): написание "ещё одного теста" занимает минут 5-10. Деплой приложения с подготовкой данных для тестирования - минуты 3. В результате, если для хотя бы одну ошибку не получается найти со второго или третьего раза (компиляции и запуска приложения) - тест уже себя полностью окупил .

P.S. Есть ещё и составляющая в проектировании - тесты иногда помогают лучше продумать дизайн приложения и структуру классов, но это всё "философия" - поэтому я предпочитаю числа: затраты против прибыли.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598127
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь.
Я понимаю Вас, но все же не совсем соглашусь. Опять же, многое зависит от специфики проекта, если это бурноразвивающийся стартап с быстро меняющимися интерфейсами и который не используют другие системы, то конечно это проблема. Тесты зачастую только будут мешать. А если это общедоступная либа, которая уже выпущена и используется сотнями клиентов - то такая связность, как отметили, только в плюс.
С другой стороны, стартап тоже или уйдет в небытие или будет переписан с устаканившимися интерфейсами, вот тогда и нужно будет писать "правильные" тесты. Так что много еще зависит и от фазы проекта.
В общем, утверждение "юнит тесты увеличивают связность." верно только отчасти и при определенных условиях, и очень печально если это толкается как догма(видео не смотрел)

Лично я пришел к такому подходу - у меня есть две сюиты тестов. Одна для паблик интерфейсов(устаканенных и наврядли изменящихся), которые прогоняются CI системой и сразу идет разбор полетов если вдруг что не так. И Вторая(утилитарная), которая помогает не запускать контейнер и точечно продебажить кусочек системы. Если рефакторингсильно задел тест, то он без сожалению выкидывается. Если проблемы в этом кусочке кода продолжаются - создается новый тест, все во имя экономии времени.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598129
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulЕсли после рефакторинга меняется контракт, это значит кто-то крупно "облажался".

И? Коллеги не пишут идеальный код. А бизнес меняет требования по ходу пьесы. Это не "облажался". Это жизнь.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598130
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczзабыл никНадо уточнить, что дело идет о не очень хорошо написанных тестах.
Вообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь.

Ок. Это он объясняет почему тесты на свалку идут. Просто исходя из контекста это было как-то непонятно. Выглядело как какая-то новая мысль.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598132
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник Опять же, многое зависит от специфики проекта, если это бурноразвивающийся стартап с быстро меняющимися интерфейсами и который не используют другие системы, то конечно это проблема. Тесты зачастую только будут мешать. А если это общедоступная либа, которая уже выпущена и используется сотнями клиентов - то такая связность, как отметили, только в плюс.
Это верное замечание. Но кто тут непокривив душой скажет за себя, что пишет проект с требованиями, которые уже не меняются десяток лет?
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598133
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qasta Нет никаких причин писать автотест для приватного метода.

Есть, если логика не совсем очевидна, например какую-нить регулярку протестить и тд. Занафига подымать контейнер для этого? Ну и т.д. С остальным по большей части согласен.

2) тест не окупает себя, если всё заработало сразу
5) автотест окупает себя, когда что-то идет не так: если с тестом проверка обычно (цикл "исравил что-то в коде - проверил") занимает от 10 секунд до 1 минуты, то без теста чаще от 3 до 10 минут. Я чаще всего сталкивался с такой ситуацией (занимаюсь в основном разработкой веб-приложение на основе Java Enterprise Edition): написание "ещё одного теста" занимает минут 5-10. Деплой приложения с подготовкой данных для тестирования - минуты 3. В результате, если для хотя бы одну ошибку не получается найти со второго или третьего раза (компиляции и запуска приложения) - тест уже себя полностью окупил.

Не забывайте про рефакторинг. Тест может окупить себя чуть позже, не говоря о том, что тест может служить как референс по правильному использованию вашего класса для других, незнакомых с проектом программистов. Хотя это не так актуально для энтерпрайза
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598135
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qasta2) тест не окупает себя, если всё заработало сразу
Вооот. Это правильная мысль. Потому что у меня тесты выстреливают с регрессией, ну раз в пол-года. При этом ежедневные затраты на их поддержку никак не окупают превентивное исправление подобных багов. Цена этих багов у нас копеечная. Ну, нашел клиент, мы ему выкатили заплатку через пару дней - все довольны. А вот когда цена багов на много выше, тогда и тесты могут окупиться. Это верно.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598189
qasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никqasta Нет никаких причин писать автотест для приватного метода.

Есть, если логика не совсем очевидна, например какую-нить регулярку протестить и тд. Занафига подымать контейнер для этого? Ну и т.д. С остальным по большей части согласен.

Ну это скорее исключение, лишь подтверждающее правило :) Такие тесты быстро пишутся и с легким сердцем выкидываются или переделываются при необходимости.

забыл ник2) тест не окупает себя, если всё заработало сразу
5) автотест окупает себя, когда что-то идет не так: если с тестом проверка обычно (цикл "исравил что-то в коде - проверил") занимает от 10 секунд до 1 минуты, то без теста чаще от 3 до 10 минут. Я чаще всего сталкивался с такой ситуацией (занимаюсь в основном разработкой веб-приложение на основе Java Enterprise Edition): написание "ещё одного теста" занимает минут 5-10. Деплой приложения с подготовкой данных для тестирования - минуты 3. В результате, если для хотя бы одну ошибку не получается найти со второго или третьего раза (компиляции и запуска приложения) - тест уже себя полностью окупил.

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

Полностью согласен. При рефакторинге автотесты помогают очень хорошо.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598214
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczmad_nazgulЕсли после рефакторинга меняется контракт, это значит кто-то крупно "облажался".

И? Коллеги не пишут идеальный код. А бизнес меняет требования по ходу пьесы. Это не "облажался". Это жизнь.

Согласен с вами проектирование системы это сложно.
А тесты как раз помогают "ничего не забыть" при изменении требований по ходу пьесы.
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598663
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598664
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему юнит тесты повышают связность?
    #39598673
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему юнит тесты повышают связность?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]