|
|
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Вот тут товарищ говорит, что юнит тесты увеличивают связность. [youtube= ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 17:14 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Так может оригинал посмотреть http://blog.cleancoder.com/uncle-bob/2017/03/03/TDD-Harms-Architecture.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 18:24 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
redwhite90, Имеется ввиду, что у теста офигенно сильная связь с тестируемым классом. И каждый пук в структуре класса требует модификации теста и, зачастую, не одну. Это и есть та самая связность которая имеется ввиду, ведь тест это часть системы как и любой другой класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 18:27 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Надо уточнить, что дело идет о не очень хорошо написанных тестах. Например, которые тестируют не паблик методы. Хотя такие тоже иногда нужны, хотя я считаю что это уже не часть проекта, и с внесением изменений в тестируемый класс, такой тест должен отправляться на свалку. Тоже самое касается любителей "надо покрыть n-десят процентов кода тестами". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 02:19 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
забыл никНадо уточнить, что дело идет о не очень хорошо написанных тестах. Вообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 10:40 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никНадо уточнить, что дело идет о не очень хорошо написанных тестах. Вообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь. Нефиг интерфейсы/контракты менять почем зря :-) Не понятно почему такая "связность" это плохо?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 10:58 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
mad_nazgulНефиг интерфейсы/контракты менять почем зря :-) Отставить рефакторинг! Увековечим контракты в граните! mad_nazgulНе понятно почему такая "связность" это плохо?! Ну, указали же выше. Вы проводите рефакторинг и весь тест идет на свалку. И вы остаетесь перед выбором, либо выкинуть и написать новый тест, либо потратить еще пару часов и довести тест до ума. В любом случае работы не мало. Что вызывает особое разочарование когда рефакторинг основного класса занял всего несколько минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 11:03 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczmad_nazgulНефиг интерфейсы/контракты менять почем зря :-) Отставить рефакторинг! Увековечим контракты в граните! Ессно! Контракт это как договор, после подписания (опубликования) менять нельзя. :-) Если после рефакторинга меняется контракт, это значит кто-то крупно "облажался". Blazkowiczmad_nazgulНе понятно почему такая "связность" это плохо?! Ну, указали же выше. Вы проводите рефакторинг и весь тест идет на свалку. И вы остаетесь перед выбором, либо выкинуть и написать новый тест, либо потратить еще пару часов и довести тест до ума. В любом случае работы не мало. Что вызывает особое разочарование когда рефакторинг основного класса занял всего несколько минут. Ну правильно! Тесты гарантируют неизменность контракта. А если он меняется, это значит все надо переписывать. Как минимум это гарантирует, что мы будем знать что и где надо "чинить". Так что я всеми руками "за" такую связность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 11:51 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Когда вы пишете автотесты, надо понять и простить принять несколько вещей: 1) протестировать приложение всегда дороже, чем не протестировать - изменив что-то в классе придется менять что-то и в тесте. И тогда на реализацию задачи/доработки у вас вместо 1 часа вполне может уйти два. 2) тест не окупает себя, если всё заработало сразу 3) при большом количестве тестов (это скорее уже не про юнит-тесты, а про интеграционные и т.п. - которые проверяют сразу несколько вещей) их надо проектировать так же, как и обычное приложение (и потратить на это приличное количество времени) 4) тест позволяет лучше взглянуть на класс "снаружи" (если тест смотрит на класс слишком близко - от него пользы будет меньше - даже для юнит тестов это так). Нет никаких причин писать автотест для приватного метода. 5) автотест окупает себя, когда что-то идет не так: если с тестом проверка обычно (цикл "исравил что-то в коде - проверил") занимает от 10 секунд до 1 минуты, то без теста чаще от 3 до 10 минут. Я чаще всего сталкивался с такой ситуацией (занимаюсь в основном разработкой веб-приложение на основе Java Enterprise Edition): написание "ещё одного теста" занимает минут 5-10. Деплой приложения с подготовкой данных для тестирования - минуты 3. В результате, если для хотя бы одну ошибку не получается найти со второго или третьего раза (компиляции и запуска приложения) - тест уже себя полностью окупил . P.S. Есть ещё и составляющая в проектировании - тесты иногда помогают лучше продумать дизайн приложения и структуру классов, но это всё "философия" - поэтому я предпочитаю числа: затраты против прибыли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 12:00 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь. Я понимаю Вас, но все же не совсем соглашусь. Опять же, многое зависит от специфики проекта, если это бурноразвивающийся стартап с быстро меняющимися интерфейсами и который не используют другие системы, то конечно это проблема. Тесты зачастую только будут мешать. А если это общедоступная либа, которая уже выпущена и используется сотнями клиентов - то такая связность, как отметили, только в плюс. С другой стороны, стартап тоже или уйдет в небытие или будет переписан с устаканившимися интерфейсами, вот тогда и нужно будет писать "правильные" тесты. Так что много еще зависит и от фазы проекта. В общем, утверждение "юнит тесты увеличивают связность." верно только отчасти и при определенных условиях, и очень печально если это толкается как догма(видео не смотрел) Лично я пришел к такому подходу - у меня есть две сюиты тестов. Одна для паблик интерфейсов(устаканенных и наврядли изменящихся), которые прогоняются CI системой и сразу идет разбор полетов если вдруг что не так. И Вторая(утилитарная), которая помогает не запускать контейнер и точечно продебажить кусочек системы. Если рефакторингсильно задел тест, то он без сожалению выкидывается. Если проблемы в этом кусочке кода продолжаются - создается новый тест, все во имя экономии времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:02 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
mad_nazgulЕсли после рефакторинга меняется контракт, это значит кто-то крупно "облажался". И? Коллеги не пишут идеальный код. А бизнес меняет требования по ходу пьесы. Это не "облажался". Это жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:04 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никНадо уточнить, что дело идет о не очень хорошо написанных тестах. Вообще нет. Как бы ты тест не написал, ты не можешь его абстрагировать от тестируемого класса. Даже если вспоминать такие термины как "контракт", то это ничего не поменяет. Ну, будет тест крепко связан с контрактом. Меняется контракт, и, как ты верно заметил, тест отправляется на свалку. Об этой проблеме и речь. Ок. Это он объясняет почему тесты на свалку идут. Просто исходя из контекста это было как-то непонятно. Выглядело как какая-то новая мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:05 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
забыл ник Опять же, многое зависит от специфики проекта, если это бурноразвивающийся стартап с быстро меняющимися интерфейсами и который не используют другие системы, то конечно это проблема. Тесты зачастую только будут мешать. А если это общедоступная либа, которая уже выпущена и используется сотнями клиентов - то такая связность, как отметили, только в плюс. Это верное замечание. Но кто тут непокривив душой скажет за себя, что пишет проект с требованиями, которые уже не меняются десяток лет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:06 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
qasta Нет никаких причин писать автотест для приватного метода. Есть, если логика не совсем очевидна, например какую-нить регулярку протестить и тд. Занафига подымать контейнер для этого? Ну и т.д. С остальным по большей части согласен. 2) тест не окупает себя, если всё заработало сразу 5) автотест окупает себя, когда что-то идет не так: если с тестом проверка обычно (цикл "исравил что-то в коде - проверил") занимает от 10 секунд до 1 минуты, то без теста чаще от 3 до 10 минут. Я чаще всего сталкивался с такой ситуацией (занимаюсь в основном разработкой веб-приложение на основе Java Enterprise Edition): написание "ещё одного теста" занимает минут 5-10. Деплой приложения с подготовкой данных для тестирования - минуты 3. В результате, если для хотя бы одну ошибку не получается найти со второго или третьего раза (компиляции и запуска приложения) - тест уже себя полностью окупил. Не забывайте про рефакторинг. Тест может окупить себя чуть позже, не говоря о том, что тест может служить как референс по правильному использованию вашего класса для других, незнакомых с проектом программистов. Хотя это не так актуально для энтерпрайза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:07 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
qasta2) тест не окупает себя, если всё заработало сразу Вооот. Это правильная мысль. Потому что у меня тесты выстреливают с регрессией, ну раз в пол-года. При этом ежедневные затраты на их поддержку никак не окупают превентивное исправление подобных багов. Цена этих багов у нас копеечная. Ну, нашел клиент, мы ему выкатили заплатку через пару дней - все довольны. А вот когда цена багов на много выше, тогда и тесты могут окупиться. Это верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:09 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
забыл никqasta Нет никаких причин писать автотест для приватного метода. Есть, если логика не совсем очевидна, например какую-нить регулярку протестить и тд. Занафига подымать контейнер для этого? Ну и т.д. С остальным по большей части согласен. Ну это скорее исключение, лишь подтверждающее правило :) Такие тесты быстро пишутся и с легким сердцем выкидываются или переделываются при необходимости. забыл ник2) тест не окупает себя, если всё заработало сразу 5) автотест окупает себя, когда что-то идет не так: если с тестом проверка обычно (цикл "исравил что-то в коде - проверил") занимает от 10 секунд до 1 минуты, то без теста чаще от 3 до 10 минут. Я чаще всего сталкивался с такой ситуацией (занимаюсь в основном разработкой веб-приложение на основе Java Enterprise Edition): написание "ещё одного теста" занимает минут 5-10. Деплой приложения с подготовкой данных для тестирования - минуты 3. В результате, если для хотя бы одну ошибку не получается найти со второго или третьего раза (компиляции и запуска приложения) - тест уже себя полностью окупил. Не забывайте про рефакторинг. Тест может окупить себя чуть позже, не говоря о том, что тест может служить как референс по правильному использованию вашего класса для других, незнакомых с проектом программистов. Хотя это не так актуально для энтерпрайза Полностью согласен. При рефакторинге автотесты помогают очень хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:56 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczmad_nazgulЕсли после рефакторинга меняется контракт, это значит кто-то крупно "облажался". И? Коллеги не пишут идеальный код. А бизнес меняет требования по ходу пьесы. Это не "облажался". Это жизнь. Согласен с вами проектирование системы это сложно. А тесты как раз помогают "ничего не забыть" при изменении требований по ходу пьесы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 14:19 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 06:38 |
|
||
|
Почему юнит тесты повышают связность?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 06:48 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39598189&tid=2122278]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 144ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...