Re[11]: Проектирование системы с учетом юнит-тестирования
От: landerhigh Пират  
Дата: 11.12.12 21:44
Оценка: 6 (1)
Здравствуйте, Yoriсk, Вы писали:

Y>Здравствуйте, landerhigh, Вы писали:


L>>Все же этому форуму очень не хватает смайлика "рука лицо".


Y>Абсолютно согласен. Вот вы, например, пишите, что заявление топикстартера "не соответствует <действительности> чуть более, чем полностью" и тут-же парой строчек ниже сообщаете, что да, прийдётся на каждый пук писать прокси и интерфейсы выделять и, следовательно, как-то мапить их на классы, а там уже и IOC фреймворк для этого а значит, и т.с. вроде как и прав и всё соответствует действительности чуть более чем полностью...


тут и двойной рукилицо не хватит.

Чтобы код был тестируем, он должен удовлетворять некоторым критериям тестируемости. Каждый юнит должен быть достаточно изолирован и самостоятелен и не требовать атомной электростанции для запуска. При этом внешние зависимости удобно заменять заглушками или воображалами (для чего, собственно, и выделяются интерфейсы).


Перевожу — никаких спагетти. Выделение интерфейсов в целях разграничения ответственности при сохранении зависимости, что само по себе хорошо более чем всегда безотносительно наличия тестов. Избавление от ситуаций, когда для создания какого-то модуля требуется сначала создать все остальные модули системы.


В результате получается модульный код, разбитый на изолированные юниты с четко разграниченной ответственностью.



А вот это вот

На практике я почему-то вижу, что эта пресловутая "слабосвязанность" достигается именно тем, что описал топик стартер: какой-то горой никому(кроме тестов) не нужных итерфейсов один в один повторяющих методы класса, абстракций, прокси, прокси на прокси и т.д.
Еще очень хорошая практика для тестируемости делать приватные приватные переменные не совсем приватными(иначе как же тест их замокает?). Апофеозом адхитектуры для тестирования может стать вообще отказ от ООП: есть отдельно какие-то данные, есть отдельно набор методов-функций разной степени чистоты. Всё отлично изолировано, всё хорошо тестируется, всё непойми как работает(и не работает).


исключительно Ваши слова и надо их мне приписывать. Не видели приличных проектов с тестами — так и напиште, но не надо свой негативный опыт проецировать на всех.
www.blinnov.com
Re: Проектирование системы с учетом юнит-тестирования
От: dimgel Россия https://github.com/dimgel
Дата: 16.12.12 04:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почитав некоторое время про юнит-тестирование систем, сложилось впечатление что что-бы покрыть ее тестами придется во-первых для всех классов выделять интерфейсы что-бы имелась возможность заменять моками


Моки нужны, если тестировать "сверху вниз" (top-down): сначала фронтенд системы с моками вместо всех нижележащих слоёв, потом подцеплять следующий слой и заменять моками то, что под ним и т.д. Достоинство: возможность быстрого прототипирования морды лица. Недостатки: надо много моков; поведение реальных компонент может отличаться от поведения моков.

Моки не нужны, если тестировать "снизу вверх" (bottom-up): сначала тестируем нижний слой, затем цепляем к нему сверху тот слой, что над ним, и тестируем его (по сути — тестируем уже интеграцию двух слоёв) и т.д. Достоинства: не нужны моки; тестируется реальная система без заглушек. Недостаток: при разработке снизу вверх нельзя быстро состряпать морду лица для заказчика.

Подробнее см. в книге: Myers — The Art Of Software Testing — 2е издание (2004). Я сам всегда работаю "снизу вверх", в т.ч. гоняю тесты на реальной базе данных (т.е. даже здесь без моков). А стремление "быстро показать морду лица заказчику" считаю очковтирательством.
Re: Проектирование системы с учетом юнит-тестирования
От: __kot2  
Дата: 16.12.12 06:46
Оценка: 1 (1) -4
Здравствуйте, Аноним, Вы писали:
А>Почитав некоторое время про юнит-тестирование систем, сложилось впечатление что что-бы покрыть ее тестами придется во-первых для всех классов выделять интерфейсы что-бы имелась возможность заменять моками, во-вторых практически обязательно использование фреймворков для реализации IoC и моков т.к. иначе будет куча ручной работы.
А>Насколько это вообще соответствует действительности?
юнит-тесты нужны там где проект подразумевает большую текучку кадров и периодическую передачу проекта от одной команды к другой. то есть если изначально планируется делать гавно. ничего плохого в этом нет, далеко не каждая компания может сделать не гавно, а юнит-тесты помогут завершить проект.
в случае когда проект незнаком, в нем почти никто не разбирается и в нем много раз все менялось разными ведущими программистами, приходится коммитить практически вслепую, только догадываясь какие последствия это может вызвать. в случае же когда девелоперы понимают что делают нужны не юнит-тесты, а тесты другого рода — производительности, юзабилити и другого.
Re[2]: Проектирование системы с учетом юнит-тестирования
От: BluntBlind  
Дата: 16.12.12 10:08
Оценка: +1
Пост домыслов и стереотипов. Либо был неудачный опыт использования тестов, либо его вообще не было. Не знаю еще как объяснить такую позицию, а главное доводы в ее защиту

Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, Аноним, Вы писали:

А>>Почитав некоторое время про юнит-тестирование систем, сложилось впечатление что что-бы покрыть ее тестами придется во-первых для всех классов выделять интерфейсы что-бы имелась возможность заменять моками, во-вторых практически обязательно использование фреймворков для реализации IoC и моков т.к. иначе будет куча ручной работы.
А>>Насколько это вообще соответствует действительности?
__>юнит-тесты нужны там где проект подразумевает большую текучку кадров и периодическую передачу проекта от одной команды к другой. то есть если изначально планируется делать гавно. ничего плохого в этом нет, далеко не каждая компания может сделать не гавно, а юнит-тесты помогут завершить проект.
__>в случае когда проект незнаком, в нем почти никто не разбирается и в нем много раз все менялось разными ведущими программистами, приходится коммитить практически вслепую, только догадываясь какие последствия это может вызвать. в случае же когда девелоперы понимают что делают нужны не юнит-тесты, а тесты другого рода — производительности, юзабилити и другого.
Re[3]: Проектирование системы с учетом юнит-тестирования
От: __kot2  
Дата: 16.12.12 19:04
Оценка:
Здравствуйте, BluntBlind, Вы писали:
BB>Пост домыслов и стереотипов. Либо был неудачный опыт использования тестов, либо его вообще не было. Не знаю еще как объяснить такую позицию, а главное доводы в ее защиту

проблем с доводкой приложений, завершением разработки в срок и наличием хронических глюков никогда не имел. принимал участие в разработке последний раз когда считал, около 40 проектов. сейчас больше полугода работаю в проекте где есть юнит-тесты. толку от них что мертвому припарки — они только тратят твое время, так как проходят где-то за полчаса. ни разу еще не было такого, чтобы юнит-тест упал и это дало бы инфу — что-то поломалось. обычно ломается сам юнит-тест из-за кода, который там соединяется с тестовым сервером, который че-то решил прилечь или же юнит-тест падает потому что мы где-то что-то в базу добавили и теперь нужно еще и юнит-тест обновить, чтобы циферка совпала.

все

никакого толка от юнит-тестов нет
Re[4]: Проектирование системы с учетом юнит-тестирования
От: landerhigh Пират  
Дата: 16.12.12 21:15
Оценка: 6 (1) :)))
Здравствуйте, __kot2, Вы писали:

__>проблем с доводкой приложений, завершением разработки в срок и наличием хронических глюков никогда не имел. принимал участие в разработке последний раз когда считал, около 40 проектов. сейчас больше полугода работаю в проекте где есть юнит-тесты. толку от них что мертвому припарки — они только тратят твое время, так как проходят где-то за полчаса. ни разу еще не было такого, чтобы юнит-тест упал и это дало бы инфу — что-то поломалось. обычно ломается сам юнит-тест из-за кода, который там соединяется с тестовым сервером, который че-то решил прилечь или же юнит-тест падает потому что мы где-то что-то в базу добавили и теперь нужно еще и юнит-тест обновить, чтобы циферка совпала.


У меня для тебя две новости. одна — просто плохая. А другая — очень, очень плохая.

Во первых, у вас тут не юнит-тесты, а черт знает что.
Вторая — ты продемонстрировал классический случай извлечения выводов о творчестве ВИА "Битлз" на основе насвистанного дико фальшивящим Рабиновичем по междугороднему телефону на декадно-шаговой АТС.
www.blinnov.com
Re[4]: Проектирование системы с учетом юнит-тестирования
От: dimgel Россия https://github.com/dimgel
Дата: 17.12.12 04:11
Оценка:
Здравствуйте, __kot2, Вы писали:

__>никакого толка от юнит-тестов нет


Слава роботам! Они не ошибаются.
Re[4]: Проектирование системы с учетом юнит-тестирования
От: BluntBlind  
Дата: 17.12.12 04:27
Оценка:
Есть куча проектов, которые успешны без юнит-тестов. Но это не значит, что от них нет толку.
То, что ты описал не юнит-тесты — это КОРЯВЫЕ интеграционные или функциональные тесты, которые просто построены на фреймворке для юнит-тестирования.
Можно я дам совет? Тебе лучше не писать в ветки про юнит-тесты, ты не знаешь что это такое. Хотя очень убедителен. Тебе действительно стоит разобраться в этом вопросе.

Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, BluntBlind, Вы писали:

BB>>Пост домыслов и стереотипов. Либо был неудачный опыт использования тестов, либо его вообще не было. Не знаю еще как объяснить такую позицию, а главное доводы в ее защиту

__>проблем с доводкой приложений, завершением разработки в срок и наличием хронических глюков никогда не имел. принимал участие в разработке последний раз когда считал, около 40 проектов. сейчас больше полугода работаю в проекте где есть юнит-тесты. толку от них что мертвому припарки — они только тратят твое время, так как проходят где-то за полчаса. ни разу еще не было такого, чтобы юнит-тест упал и это дало бы инфу — что-то поломалось. обычно ломается сам юнит-тест из-за кода, который там соединяется с тестовым сервером, который че-то решил прилечь или же юнит-тест падает потому что мы где-то что-то в базу добавили и теперь нужно еще и юнит-тест обновить, чтобы циферка совпала.


__>все


__>никакого толка от юнит-тестов нет
Re[5]: Проектирование системы с учетом юнит-тестирования
От: __kot2  
Дата: 17.12.12 05:59
Оценка:
Здравствуйте, BluntBlind, Вы писали:
BB>Можно я дам совет? Тебе лучше не писать в ветки про юнит-тесты, ты не знаешь что это такое. Хотя очень убедителен. Тебе действительно стоит разобраться в этом вопросе.
ну это какие-то странные разговоры — тебе это не нравится, просто потому, что ты это не распробовал. мне юнит-тесты нравятся так же, как песни Укупника. я не думаю, что работая с ними больше я полюблю их
Re[6]: Проектирование системы с учетом юнит-тестирования
От: BluntBlind  
Дата: 17.12.12 06:16
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, BluntBlind, Вы писали:

BB>>Можно я дам совет? Тебе лучше не писать в ветки про юнит-тесты, ты не знаешь что это такое. Хотя очень убедителен. Тебе действительно стоит разобраться в этом вопросе.
__>ну это какие-то странные разговоры — тебе это не нравится, просто потому, что ты это не распробовал. мне юнит-тесты нравятся так же, как песни Укупника. я не думаю, что работая с ними больше я полюблю их

Да просто в качестве аргументов против юнит-тестов, ты приводишь неудачные примеры применения НЕ юнит-тестов.
Re[7]: Проектирование системы с учетом юнит-тестирования
От: __kot2  
Дата: 17.12.12 11:02
Оценка:
Здравствуйте, BluntBlind, Вы писали:
BB>Да просто в качестве аргументов против юнит-тестов, ты приводишь неудачные примеры применения НЕ юнит-тестов.
да почему. там именно юнит-тесты, написанные специально обученными людьми. берется класс и тестируется
в большинстве случаев тест тривиален и бесполезен, но для покрытия и для возможного расширения класса он все равно пишется

кто-то утверждает, что юнит-тесты-де очень полезны. я вижу что они вообще бесполезны. будь они полезными я бы наблюдал хоть капельку какой-то полезности, мне так кажется.
Re[8]: Проектирование системы с учетом юнит-тестирования
От: dimgel Россия https://github.com/dimgel
Дата: 17.12.12 11:16
Оценка:
Здравствуйте, __kot2, Вы писали:

__>да почему. там именно юнит-тесты, написанные специально обученными людьми. берется класс и тестируется

__>в большинстве случаев тест тривиален и бесполезен, но для покрытия и для возможного расширения класса он все равно пишется

__>кто-то утверждает, что юнит-тесты-де очень полезны. я вижу что они вообще бесполезны. будь они полезными я бы наблюдал хоть капельку какой-то полезности, мне так кажется.


Лично я пишу тесты, если логика достаточно сложная, чтобы я мог в ней ошибиться (это относится и к сложным бизнес-модулям, и к крошечным утилитам типа преобразования GUID из текстового вида в двоичный, в которых тем не менее есть шанс лопухнуться). Как частный случай этого правила (напомнило твоим пассажем про тривиальность и бесполезность) — если есть шансы, что в будущем тестеры найдут глюк в данной подсистеме, я пишу тест-заглушку просто для того, чтобы тот, кто будет этот глюк править, мог быстро его скопипастить и вписать свои данные, не разбираясь с написанием всей обвязки теста с нуля.
Re[8]: Проектирование системы с учетом юнит-тестирования
От: landerhigh Пират  
Дата: 17.12.12 11:29
Оценка:
Здравствуйте, __kot2, Вы писали:

__> я вижу что они вообще бесполезны. будь они полезными я бы наблюдал хоть капельку какой-то полезности, мне так кажется.


На основе набора странных функциональных и интеграционных тестов делать вывод о полезности юнит-тестов? Это примерно как делать вывод о вкусе устриц, попробовав жареной плотвы.
www.blinnov.com
Re[9]: Проектирование системы с учетом юнит-тестирования
От: __kot2  
Дата: 17.12.12 14:04
Оценка:
Здравствуйте, landerhigh, Вы писали:
L>На основе набора странных функциональных и интеграционных тестов делать вывод о полезности юнит-тестов? Это примерно как делать вывод о вкусе устриц, попробовав жареной плотвы.
ну приведите пример из вашей жизни как выглядели правильные тесты и чем конкретно они помогли
Re[10]: Пример
От: BluntBlind  
Дата: 18.12.12 01:03
Оценка: :)
Здравствуйте, __kot2, Вы писали:
__>ну приведите пример из вашей жизни как выглядели правильные тесты и чем конкретно они помогли
Видео 40 минут, там про TDD, мне оно в свое время сильно помогло.
http://vimeo.com/9541997#at=0

А вообще, что-то доказывать тебе сложно. Юнит-тесты очень практичная вещь и агитировать за них простыми обсуждениями в форуме малоэффективно.
У меня есть только такие доводы:

1. Огромное кол-во проектов использует юнит-тесты.
2. Многие программисты осознанно пишут юнит-тесты, хотя это для них, как бы дополнительная работа, еще больше кода, тем не менее ...
3. Посмотри как развита инфраструктура, утилиты и фремворки для написания, поддержания, запуска и анализа тестов.
4. Ты только погугли и удивись, как много статей (хороших и плохих) и книг написано про это.
5. Не думай, что тебе это не подходит т.к. у тебя особенный проект или команда, процентов на 99 ты ошибаешься

Т.е. работа кипит, все используют, а ты вот не видишь пользы, веротяно ты просто заблуждаешься и сделал неверные выводы.
Re[11]: Пример
От: __kot2  
Дата: 18.12.12 02:01
Оценка:
Здравствуйте, BluntBlind, Вы писали:
BB>А вообще, что-то доказывать тебе сложно. Юнит-тесты очень практичная вещь и агитировать за них простыми обсуждениями в форуме малоэффективно.
BB>У меня есть только такие доводы:

BB>1. Огромное кол-во проектов использует юнит-тесты.

BB>2. Многие программисты осознанно пишут юнит-тесты, хотя это для них, как бы дополнительная работа, еще больше кода, тем не менее ...
BB>3. Посмотри как развита инфраструктура, утилиты и фремворки для написания, поддержания, запуска и анализа тестов.
BB>4. Ты только погугли и удивись, как много статей (хороших и плохих) и книг написано про это.
BB>5. Не думай, что тебе это не подходит т.к. у тебя особенный проект или команда, процентов на 99 ты ошибаешься
социальное доказательство? в стиле: все любят Гитлера, почему ты не любишь?
причем для меня оно не работает — я много команд видел, конечно же люди тестируют что делают и иногда очень тщательно, но не юнит-тестами

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

BB>Т.е. работа кипит, все используют, а ты вот не видишь пользы, веротяно ты просто заблуждаешься и сделал неверные выводы.

да по большому счету никто их не использует, кроме, как я уже сказал, больших компаний руководствующхися современной адаптацией поговорки "больше бумажек — чище жопа" — "больше тестов, чище жопа". наличие покрытия тестами это официальная отмазка, что все работает, как надо, но ес-но по факту это вообще не так
Re[11]: Пример
От: __kot2  
Дата: 18.12.12 02:08
Оценка: 18 (1) -3 :))
Здравствуйте, BluntBlind, Вы писали:
BB>Здравствуйте, __kot2, Вы писали:
__>>ну приведите пример из вашей жизни как выглядели правильные тесты и чем конкретно они помогли
BB>Видео 40 минут, там про TDD, мне оно в свое время сильно помогло.
BB>http://vimeo.com/9541997#at=0
что касается видео — это типичное руководство того, как засрать проект классами
Re[12]: Пример
От: dimgel Россия https://github.com/dimgel
Дата: 18.12.12 02:09
Оценка: 1 (1)
Здравствуйте, __kot2, Вы писали:

BB>>Т.е. работа кипит, все используют, а ты вот не видишь пользы, веротяно ты просто заблуждаешься и сделал неверные выводы.


Гыгы, водка полезна! Миллионы мужиков не могут ошибаться!

__>да по большому счету никто их не использует, кроме, как я уже сказал, больших компаний руководствующхися современной адаптацией поговорки "больше бумажек — чище жопа" — "больше тестов, чище жопа". наличие покрытия тестами это официальная отмазка, что все работает, как надо, но ес-но по факту это вообще не так


Но однако же мне начинает казаться, что товарищ Кот2 — на самом деле не кот, а тролль.
Re[12]: Пример
От: dimgel Россия https://github.com/dimgel
Дата: 18.12.12 02:22
Оценка:
Здравствуйте, __kot2, Вы писали:

BB>>http://vimeo.com/9541997#at=0

__>что касается видео — это типичное руководство того, как засрать проект классами

Re[13]: Пример
От: __kot2  
Дата: 18.12.12 03:24
Оценка:
Здравствуйте, dimgel, Вы писали:
D>Здравствуйте, __kot2, Вы писали:
BB>>>http://vimeo.com/9541997#at=0
__>>что касается видео — это типичное руководство того, как засрать проект классами
D>
да работал я просто с проектом, писанным как по видео этому
проект вроде и не делает ничего, в одного написать можно — ф-ти немного, а классов-классов-то, а каждому классу еще и по интерфейсу. файлов вагоны — вообще ничего не найдешь. каждый класс че-то делегирует и переадресует, потом сериализует, десериализует и опять делегирует и переадресует. и никто ничего не делает. только куда-то там инверсит контроль, абстрагирует и делегирует.
добавлял функцию новую одну по аналогии к существующим — 40 файлов закоммитил, из которых половина новых созданных
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.