![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Уже 7 месяцев применяю принципы TDD. Здоровая для качества кода штука. Вот каk я делаю: 1) сначала осмысливаю задачу 2) делаю поверхностный дизайн 3) пишу тесты ... TDD (Test Driven Development) или XP не запрещают делать первичный дизайн. Просто не надo егo изначально продумывать дo костей. V этоm нет смысла, т.к. зачастую оn меняется в процессе разработки. Написав сначала тесты мы получаем: 1) лучшее понимание того, чтo мы должны сделать 2) уже готовый интерфейс того, чегo мы пишем 3) достаточную базу для проверки нашегo кода. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
neutrino, сколько человек в команде, как внедряли, как контролируете, чем из фреймворков пользуетесь? win/web проекты? как организуете тесты? на базе/без?
![]() |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
PashaPash, Я выбрался козлом отпущения. Всего из 30 программеров пользуются ТДД - 5. Я первый в нашей комманде (12 человек). Я буду как раз контролировать процесс перехода с нативного программинга на ТДД для нашей комманды.
Тогда расскажу как дела обстоят в другой комманде. Внедрять очень сложно. Основной фактор - нежелание людей писать тесты а тем более писать их до собственно программинга. Контролируем пока никак. Мы используем Решарпер. У него есть какие-то методы контроля качества кода. Есть человек, который этим занимается. Но пока все глухо. Очень не хочетя делать код ревью. Думаю если перейти на парное программирование, то проблема контроля решится сама собой. Но начальство против этого подхода. Еще не осознало всю прелесть парного программинга. NUnit + ReSHarper, PostSharp (в основном, конечно Laos). Для логгинга юзаем Log4NET. Проэкты только Win Как организуем тесты? Немного не понял вопрос. Каждый пишет тесты для своего кода. Есть отдел, который занимается интегрированными тестами - QA. Понятия не имею как он работает. Тесты пишутся в отдельном проекте. Группы тестов складываются по темам в TestFixture-ы ... Например у меня есть AcceptanceTests, PerformanceTests ... На базе чего? -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
тесты прогоняете на базе данных или без нее? ![]() У нас web, с ним чуть попроще. У нас примерно так: 1. asp.net mvc, обязательные тесты на уровне контроллеров. Именно TDD-тесты, а не Acceptance/Performance. Т.е. скорее автоматические Regression тесты. 2. CruiseControl.net - билд при коммите, с прогонкой тестов не на базе данных, на стабе. - ночной билд, с прогонкой тех же тестов на базе данных + деплоймент 3. MSTest + родной MSTest-овый контроль покрытия. Фейл билда при уменшении покрытия на 0.1% от прошлого билда. сурово, но более-менее работает ![]() 4. Студийные FxCop, StyleCop и фейл билда при предупреждениях 5. Обязательный ревью вообще всех изменений, в Crucible. Первые пару коммитов девелоперы ругались, потом привыкли. Насчет парного программирования - я после 4 часов парного программинга обычно выжат полностью, могу только тупить в монитор. Хотя, тут наверное зависит от напарника. ![]() Это сообщение отредактировал(а) PashaPash - 27.10.2009, 21:29 |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Решил подключиться к теме обсуждения.
Знать и уметь применять шаблоны проектирования сейчас уже совершенно необходимо иначе топорную систему ничто не спасет от мусорной корзины. Но часто не имея достаточной информации, сложно грамотно спроектировать точки эволюции системы. Сейчас дочитываю уже третий толмуд по теме проектирования ОО-систем (Крег Ларман "UML и шаблоны проектирования"). Он несколько раз указывает на то, что не стоит применять паттерны только ради их применения. Надо трезво оценивать пользу и вред их применения. Сам стараюсь их применять по мере необходимости в своих мини-проектах для пробы пера. На работе, как я уже упоминал, мне очень сложно заниматься проектированием и рефакторингом, т.к. собранной конкретной информации по целям и задачам мало; а мышление некоторых для сложной системы на уровне "нажми кнопку - получишь сообщение Привет" иногда начисто убивает желание что-то совершенствовать. ![]() Хочу попутно выяснить у социума: есть ли члены команд с внедренным процессом разработки типа RUP (Rational Unified Process)? Если есть, то какая численность и уровень команды? Кто отвечает за претворение в жизнь тех или иных этапов внедрения? --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
PashaPash, эффективное время работы программиста в день 2-3 часа в обычном проекте и 3-4 (возможно больше, но не думаю) при..., скажем так, более организованном и командном подходе (не хочу говорить agile). Парное программирование заставляет вас работать наиболее близко к эффективному режиму. Получается вы с напарником вырабатываете дневную норму за раз. Что, естественно, приводит к чрезмерной утомляемости. Раз-два в неделю это можно делать, но если каждый день, то... мы получим еще одних противников этой методики ![]() Предлагаю попробовать снизить время работы в паре до 1,5 часа (чисто условно, но 2, ИМО, тоже много) с небольшим перерывом (сделайте себе кофе, переговорите о том что сделали, сделаете, на те же фишки зайдите...). Кроме того, советую сделайть план того, что бы собираетесь делать. С ним намного проще не отвлекаться на посторонние вещи. С помощью него ваше эффективное время станет еще эффективнее. И обязательно ему следуйте. Успели выполнить раньше? Остановитесь. Не успеваете (это видно задолго до конца 1,5 часов)? Урежте план. Со временем вы будете составлять планы ровно на эти 1,5 часа с легкостью. Это сообщение отредактировал(а) ivashkanet - 28.10.2009, 10:01 |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
ivashkanet, отличные советы, но лично у меня PP приносит пользу только при
- фиксе или дизайне чего-то сложного - обучении нового человека каким-то внутренним фишкам проекта Т.е. PP - это скорее исключение из общего процесса, чем регулярная практика. К тому же частичные альтернативы, тот же peer code review, имеют (опять же, лично для меня) несколько преимуществ - оставляют артефакты, хотя бы в виде комментов - не требуют одновременного участия - позволяют разделить знания между n>2 людьми - не так сильно выедают моск ![]() - проще воспринимаются PM-ами (те не забывают делить результат на 2) Насколько я знаю, практически все используют парное программирование, в том или ином виде, просто не называют его PP. Но я не хотел бы преувеличивать/преуменьшать значение PP, или считать его серебряной пулей. Почти всегда есть другие, более дешевые способы поднять эффективность - донесение до разработчиков понятия flow, например. Планы на полтора часа (или на 40 минут), отключенный IM, проверка почты раз в 4 часа... работают для одного человека так же хорошо, как и в парном программировании. Даже, возможно, лучше ![]() PS что-то всех в оффтоп унесло.... Это сообщение отредактировал(а) PashaPash - 28.10.2009, 16:12 |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
PashaPash, Кстати, спасибо. Теперь думаю и мы внедрим FxCop. А что такое StyleCop? Кстати, у решарпера есть такая тема: CleanUp Code. Очень полезная штука. Иногда решает большинство жалоб FxCop-а.
А это хто? Ну ладно, щац я тебя замучаю. Пойду гуглить ![]() Добавлено через 1 минуту и 50 секунд
Это я как пример fixtures привел. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
neutrino, StyleCop - майкросовтовская проверялка стиля кода - порядка методов, имен параметров, пробелов между скобками. Лучше использовать сразу с StyleCop for ReSharper.
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
У меня PP используется только при передаче знаний. Да и то за счет моего личного времени. Ибо руководство не понимает пользы (да и не хочет понять). Так же как и код ревью и дизайн ревью. Наш тимлидер вообще построил такую систему, что каждый обособленно делает свой таск и совершенно не в курсе что делает сосед. Обсуждать такой подход отказывается. Хотя уже несколько раз проект отгребал по этой причине. +100 Только планы у меня сразу на весь кусок работы (1-2 недели расписаны по таскам 1-3-8 часов). Надо выделять темы. Ты же у нас модер. Работай ![]() |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
PashaPash,
Рульная тулза. А че у тебя за контора? Что-то больно серьезный подход. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Выделять особо некуда, только если в курилку. Организация работы это скорее тема для PM, а не для рядовых программистов.
Logic Software. Подход суровый на основном проекте, потому что на прошлой версии (текущем релизе) мы, как выразился ivashkanet, пару раз сильно отгребли :( На аутсорсе и на мелких проектах все не так строго. |
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Хорошо когда ПМ-ы это понимают и действительно стараются улучшать работу. Но часто "спасение утопающих становится делом рук самих утопающих".
Эхх мечты, мечты. Я не то что Crucible, я ревью хотя бы важных тасков (до и после/дизайн и код ревью) добиться не могу. Во дают ![]() |
||||
|
|||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
||||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Пока оставил топик в этом разделе, как .net-specific.
Спасение утопающих вообще всегда дело рук самих утопающих :( Оставь в стратегическом месте распечатку по теме - и жди ![]() По поводу внедрения ccnet/Сrucible/tdd/чего угодно. Всегда есть куча способов: 1. Убедить PM-а/Тимлида, показав им статью вроде The Joel Test: 12 Steps to Better Code или Best Practices for Peer Code Review. Во второй есть графики, а графики для PM-ов и выше - серьезный аргумент. no joking. 2. Поставить <что-то> на своей машине и активно использовать. Сделать стандартом de-facto. Очень хорошо срабатывает для ccnet ![]() 3. Самому стать тимлидом и творить что угодно 4. Сменить работу |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Мы все хотели установить какой-нить форум внутренний. Но наш АйТи ограничил нас до MS SharePoint. Там есть форум, но посты надо писать в HTML коде. Просто афигеть. В каком веке живем? Паша, а есть ли что-нибудь бесплатное похожее на вышеупомянутую тулзу? Очень хочется ... -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
IMHO, во внутреннем форуме вообще смысла нет. Если очень хочется, то есть вполне легальные обходные пути. Установка любого форума на свою рабочую машину, или использование Groove, например.
http://www.reviewboard.org/ |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
Собственно расскажу о своём (не очень большом) опыте разработки в соответствии с процессами...
1. Одна из контор, в которых я работал использовала CMMI... Типичная вещь - code review...перед каждым коммитом собираются 3-5 человек, и высказывают тебе все замечания, которые в итоге оформляются как faults...собственно после фикса всех замечаний и делается коммит, который Configuration Manager-ы затем сливают с мэйн-бранчем(хотя это, может быть, ClearCase-specific task). Из плюсов такого подхода могу отметить то, что как правило замечания, действительно, как правило, делаются существенные (при условии, что никто не забил на подготовку к ревью). Из минусов - в крупном проекте (over 900 000 LOC) - зачастую девелоперы забивают на подготовку, и выдумывают фолты прямо по ходу ревью. В результате существенные косяки иногда легко пролетают ревью. 2. Во второй работает Agile... Как таковая, разработка по TDD не используется, Unit Test-ы пишутся, но уже после реализации функционала. Continious integration в виде билда после каждого коммита, а также каждую ночь на билд машине собираются все проекты. Сам я в Agile-методологии, можно сказать, новичок, так что ничего более путного сказать тут не могу ![]() Поставил style cop, разве что...наверно скоро руки дойдут до его настройки... -------------------- СУВ, Partizan. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Вот именно. А то ругается на всякую хрень. Я например константы в CamelCase ну никак не приму. ИМХО, константы должны быть в ALLCAPS. Да и потом все эти префиксы приватных полей тоже не люблю. Хотя в нашей конторе стандарты говорят писать myField. Лучше писать простые и небольшие классы, тогда и отпадет нужда в этих различиях. Действительно, если и методы короткие, то ничего не стоит отличить local variable от class field, даже если оба написаны lowerCamelCase, а вот всякие префиксы _field, myField, m_field ... только делают код противным. ИМХО конечно. Пишите короткие классы с короткими методами, и нужда во всяких walkaround-ах просто отпадет сама собой. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Его бесполезно включать на существующих проектах. Единственный вариант - в следующем проекте прикрутить заранее. Continious integration вполне и без agile работает. А если пишете тесты после кода, то это точно не Agile. Agile это скорее общий подход к процессу, чем набор инструментов. Типа веселые офигенно мотивированные профессионалы очень круто и бодро пишут тру-софтину, без всякой там документации, ведь рабочий продукт круче, и кастомер с ними на той же волне. И, кстати, по Agile - если есть рабочий продукт - то тесты и документация не нужны, ведь все уже работает. Шутка, но в ней доля правды. У нас peer code review, уже после коммита. Хотя, для >100k LOC строгие ревью вполне оправданы. neutrino, в StyleCop можно свои правила писать. Кстати, стандартные правила - это просто уточненный Design Guidelines for Class Library Developers |
|||
|
||||
Partizan |
|
||||||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
Ну почему же, есть ненулевая вероятность, что все соблюдали гайдлайны по максимуму ![]()
В последнее время, я всё чаще слышу от коллег фразы типа "неплохо бы попробовать TDD", но пока это только слова.
Так топик и процессы затрагивает вроде как ![]() -------------------- СУВ, Partizan. |
||||||
|
|||||||
ivashkanet |
|
||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Ну почему же. Специально для этого сделана утилитка ExcludeStyleCop, которая вырубает проверку в уже существующих файлах, а проверяет только новые (скажем так). Скчать ее сорцы можно на странице проекта. Что она делает -- добавляет атрибуты ко всем сорцам в файле проекта. Новые файлы создаются без этого атрибута и поэтому участвуют в анализе. Позднее, как команда присмотриться к копу, эти атрибуты можно постепенно убирать. Вот начал с ерунды, а потом себя же опроверг. Agile к тестам никакого отношения не имеет. Вообще-то ведется очень много спрорв что такое Agile и что можно им считать, а что нет. ИМО, самые главные принципы Agile прописаны в его манифесте.
Ни слова о тестах. Так же ни слова об отказе от документации и проч. Здесь просто выставлены приоритеты (просто примеры): Зачем нам крутая платформа разработки, модный процесс, CI сервер, ... если каждый из разработчиков что-то там ваяет втихаря? Зачем нам тесты и документация, если нет работающего ПО? Зачем указывать на следование контракту, если заказчик недоволен? Зачем следовать плану, который уже месяц назад потерял актуальность?
Наоборот, есть ненулевая вероятность того, что разработчики устанут и не будут обращать на них внимание.
Как человек, который применял его около полугода скажу: в большинстве случаев бесполезная трата времени и сил. ИМО, TTD есть смысл применять только для функциональности, которую ты не совсем представляешь как реализовывать. Т.е. как метод проектирования. Сами же тесты нужны либо для критической функциональности (высокая цена ошибки -- очень редко бывает) либо для функциональности в которой ты не совсем уверен. СУВ, ivashkanet Это сообщение отредактировал(а) ivashkanet - 6.11.2009, 10:20 |
||||||||
|
|||||||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Так давай, делись деталями процесса ![]() Там же была фраза про шутку, нет? Сам по себе манифест Agile, IMHO, это манифест здравого смысла. А про мотивированных девелоперов и проч - это обычное поверхностное понимание Agile. Опять же IMHO. Потому что когда начинающий мененджер видит "Работающее ПО, чем исчерпывающая документация", он читает его как "все ресурсы на написание кода и новых фич, 0 ресурсов на документацию". И дальше у него в мозгу возникает цепочка: - ресурсы всегда заранее ограничены - всегда есть запросы на новые фичи (если проектом кто-то пользуется) - всегда есть выбор - сделать новую фичу, или задокументировать существующий кусок. - лучше работающее ПО, чем исчерпывающая документация + реагирование на изменения, чем следование плану И он решает что надо делать yet another feature, а документация подождет. Проблема в том, что манифест в чистом виде говорит "лучше", но не говорит насколько. Что бы ты, как мененджер, выбрал 1. Проект с 100 реализованными фичами, без документации 2. Проект с 99 реализованными фичами, с полноценной документацией и ровной архитектурой
Может ты просто не умеешь его готовить? ![]() IMHO (надо наверное в подпись вынести), TDD бесполезно применять одному, и не очень приятно применять в чистом виде вообще. Тесты окупают себя при: - Хоть немного нетрививальном функционале - Команде из более чем 2-х человек, с хоть какой-то текучкой - Выделении времени на рефакторинг - Наличии test-friendly фреймворка - При потециальном росте проекта в будущем. Писать тесты под мелкое win-приложение для одного юзера - бесполезное дело. Не писать тесты для средних размеров web-приложения - очень серьезная ошибка. Еще одна неочевидная (IMHO) вещь - тест начинает окупать себя не в момент написания. PROFIT приходит когда он вдруг падает при сборке билда, и кривой билд не попадает к QA.
Разработчик не может охватить стоимость ошибки полностью. Стоимоть функционального бага, попавшего в билд это стоимость - ручной проверки и обнаружения - прогонки бага через bugtracker, поиска виновника - время фикса - повторной сборки билда Цена ошибки в функционале высока вообще всегда, и обычно превышает дневную ЗП разработчика. Я вообще никогда не уверен полностью в функциональности, потому что видел как тривиальные баги заворачивались по 3-4 раза. Разработчики склонны переоценивать свой скилл по написанию безбажного кода, и вообще склонны переоценивать свою роль в создании софта (IMHO ![]() Добавлено @ 21:22 PS Спасибо за ExcludeStyleCop ![]() Это сообщение отредактировал(а) PashaPash - 6.11.2009, 21:23 |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
И то и другое подпадает под условия подписанного NDA ![]() -------------------- СУВ, Partizan. |
|||
|
||||
Любитель |
|
||||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Абсолютно не согласен. Как уже было сказано - используемый подход к написанию тестов и аджайл не особо связаны.
Ну.. вообщем, да, но, если речь не идёт о большом рефакторинге продукта или изменении корневых фич. Аджайл - это принцип облегчённого процесса разработки, но всё-таки не принцип "давай-давай быстрей писать!" ![]()
ИМХО, TDD - это зло. В чистом виде, по крайней мере. Впрочем, как и любая крайность... ![]() Ээ.. Что-то я не понял. Во-первых, я не мыслю TDD без юнит-тестов. А, во-вторых, я не считаю, что юнит-тесты - это бесполезная трата времени. Если речь про юнит-тесты - то: 1. Само собой проект должен быть не маленьким. 2. Само собой должен быть тест-фреймворк (а как вообщше иначе?!). Но, самое главное, когда ИМХО полезны тесты: 1. На начальном этапе проекта, когда толком нельзя "нормально" отлаживать внутренние вещи. Хотя такой ситуации ИМХО просто не должно быть - надо писать в обратном порядке ![]() 2. Если планируется разработка или (особенно) переработка, затраная в архитектурном плане. |
||||
|
|||||
PashaPash |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
см выше про шутку ![]()
+1, потому TDD в чистом виде мы тоже не используем.
Один Unit Test тестирует модуль - наименьшую часть приложения, которую можно отдельно протестировать. Функцию, класс, взаимодействие двух классов, но не больше. Т.е. если ты пытаешься протестировать сайт, то пишутся - тесты на UI - тесты на каждый метод BL - тесты на DataAccess При этом тесты "плывут" при смене архитектуры, и очень дороги в поддержке. На этом внедрение TDD на Unit-тестах обычно и умирает, оставляя в разработчиках жгучую ненавить к TDD в целом ![]() В TDD тесты - это автоматические regression-тесты. Один тест покрывает тест-кейс, одно или несколько действий на UI, и заодно задейстованные при этом куски BL/DataAccess. TDD тесты не затрагиваются внутренностями архитектуры, и спокойно переживают рефакторинг, расширение архитектуры и прочие внутренние вещи. Основная цель автоматической регрессии - проверить что не поломался функционал в целом, а не какие-то "модули". 1. А если маленький, но вырастет в будущем? У меня софтина из списка с 3 кнопками вырасла в 4 сервиса + тонкий client + штук 5 сервисов внешних. При этом добавлялись только мелкие фичи ![]() 2. Есть ес-но насчет когда полезны 1. На протяжении всей жизни проекта, и чем больше раз тест падал, тем полезнее. читай - чем раньше тест написан, тем полезнее. 2. Если планируется рефакторинг - сомневаюсь что тесты "вдруг" появяться в момент, когда решат порефакторить. А писать тесты на старый код - дорого и неприятно. Общий смысл списка когда полезны - если бы могли видеть будущее, заранее знали что через год надо будет рефакторить, то сегодня написали бы тест. Тесты - это как ремни безопасности. Они полезны только когда попадаешь в аварию. Так зачем их пристегивать все остальное время? Я, кстати, поговорил с местными QA сегодня. По статистике они чаще всего заворачивают билды из-за ошибок типа "страница не открывается" и "падает по кнопке Save". Т.е. на абсолютно тривиальном функционале, который написан уже года 2 назад, где и логики как таковой нет. Но который девелоперы все еще умудряются случайно ломать. Девелоперы вменяемые, архитектура ровная. Полный прогон билда, кстати, 6 человеко-дней. Название проекта не скажу, ибо NDA ;) Это к вопросу о стоимости ошибки. Бесполезно мне доказывать что тесты не нужны ![]() Хотя, мелкие проекты (до 200 часов), мы типа под Agile вполне колбасим без тестов ![]() |
||||||
|
|||||||
Любитель |
|
||||||||||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Ну.. Аджайл проповедует чаще смотреть на реальную ситуацию. Аджайл проповедуте нетяжеловесный менеджмент, лёгкость смены тасков и ориентиров. Моё ИМХО ![]()
Абсолютно верно ![]() Я не считаю, что это есть TDD. Вообще - регрессион-тестирование не может относится к разработке (именно к разработке в плане девелоперов, а не организации проекта). ИМХО, это задача QA-команды. Я не говорю, что это обязательно мануальное тестирование - но в любом случае это не связано с написанием основного кода (что не скажешь о юнит-тестах). А на начальном этапе ни о каком регрессион - речи по определению нет. Ну.. это уже вопрос менеджмента ![]()
Мм.. Я не согласен. Я считаю, что писать тесты на "старый код" - это нормально. Если планируются изменения, затрагивающие этот код. Более того, при наличии времени это даже preferred way.
Да, если бы знал. А если не знал - лучше не напишу, чем напишу.. Ну.. Ошибки бывают у всех - и.. это нормально. Обычный рабочий момент. Но, если страница не открывается на разрабатываемой (или затрагиваемой) функциональности и девелопер этого не замечает, то.. это странно. Но для "рядовых" билдов - это вполне нормально. ИМХО, конечно..
Хм.. Ну, в нашей компании большинство проектов укладываются (без учёта размера команды) в это время. А тот ограниченный список, что не укладывается - либо обречён на "сложную" судьбу, либо разрабатывается "линейно" (т. е. существующая архитектура "идеальна" и достаточно "наслаивания" независимых фич). |
||||||||||
|
|||||||||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
ИМХО> Тесты до кода писать просто интереснее, Тесты после кода писать нудно. Если проводится рефакторинг старого кода, то тесты на старый код писать необходимо.
А что такое ТДД в чистом виде? ![]() -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Проект просто оказался нужен, и породил сразу много мелких "хотелок". А т.к. он был внутренним, то хотелки пришлось реализовывать. :( Любой востребованный софт будет обрастать функционалом. Если не обрастает - значит - софт идеален (не верю) - софт никому не нужен и никто им не пользуется Полноценные regression-тесты - ес-но задача для QA. Я просто хотел показать что TDD-тесты по смыслу и по подходу ближе к регрессии, чем к unit-тестам. Автоматическая регрессия вообще применима начиная со второго билда. Если билды при коммите кода - то фактически при втором коммите. "Тесты до/во время кода" тупо дешевле "тестов после" примерно в N раз, N > 10. Т.е написать код, а потом покрыть 10% существующего кода == написать тот же код, сразу покрытый тестами. Опять же, возвращаясь к agile-подходу - ценится возможность внести незапланированные изменения, а не планировать их заранее. И опять же, ценится рабочий продукт, в полном смысле этого слова, а не когда работает только новый функционал. Ага, а потом появляется шеф, и говорит: что-то ваш тим, Любитель, валит уже 4 билда подряд на каких-то мелочах? доколе? ... лишить компота...снизить зп...все уволены. Потому что 4 билда - это 3-4k$ (условно), и это уже не первый раз. У нас пока примерно такой подход: - Долго пишется один толстый проект (скажем, 20к часов) , под ним обкатывается архитектура, с тестами, dsl, полноценными доками и проч. Где-то между CMMI и Agile. - Параллельно в разработке висят 1-2 проекта на той же архитектуре, без тестов и проч. Сплошной Agile, хоть никто и не догадывается. Я, кстати, работаю совестью первого проекта и манагером группы вторых ![]() Немного в сторону от темы, но хорошо пересекается с "когда полезны тесты".Технические долги. Очень трезвый взгляд на тесты, рефакторинг, архитектуру и прочие тудушки. Добавлено через 4 минуты и 32 секунды
Вот поэтому чистый TDD никто и не любит. Я пробовал, действительно крайность, даже на полноценном тестовом фреймворке с рюшекчами, где можно выжать 99% покрытия бизнес логики обычными тестами перед кодом. |
||||
|
|||||
Любитель |
|
||||||||||||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Ну.. по крайней мере, я всегда ТДД именно так понимал ![]() Обрастать может и будет - но всё-таки в большинстве случаев это именно "обрастание", а не "разрастание". То есть "коренная" архитектура не затрагивается. Хотя, конечно, это исключительно из моего (оч скромного) опыта.
Ну.. теоретически - само собой. Но называть это регрессион-тестирование - язык не поворачивается. Когда в проекте ещё ничего толком нету, регрессион-тестирование заключается в запуске приложения девелопером при разработке новой функциональности. Хотя, конечно, опять-таки - универсального ответа нет, надо смотреть по ситуации.
Хм.. Всё-таки тогда хотелось услышать твоё понимание ТДД. В первую очередь - какие тесты? И кто их пишет? Как? И насчёт покрытия функционала/кода тестами - тоже интересно (грубо говоря, достаточно доли). Да, конечно, дешевле. Но, я думаю, явно не настолько. И плюс, самое главное, опять-таки - всё зависит от ситуации..
Вот именно! Т. е. понадобились тесты - давай добавим. И архитектура, тест-фреймворк и пр. должны позволять это сделать с минимальными затратами. А писать тесты ради того, что они могут понадобиться - я это не поддерживаю.
Ну.. всё хорошо в меру. Когда я говорил, что это нормальнач рабочая ситуация - я ж не имел ввиду, что билд валится после каждого комита ![]() ![]()
Ну.. Если проекты подобны - я бы просто считал бы это ветками того же проекта. А вообще, что-то мы с тулзов совсем перешли на менеджмент. ![]() |
||||||||||||
|
|||||||||||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Это довольно подробно в вики расписано, но можно тут продублировать. 0. Появляется новыйз use-case (user story). Пользователь зашел на страницу XXX, нажал YYY, увидел ZZZ, при этом в базе был набор AAA, после стал AAAB. 1. Пишется один (!) тест, который все это проделывает. Ес-но все управление на себя наборами данных и прочим стаффом берет фреймворк. В тесте непосредственно два вызова XXX и YYY и последующие ассерты. Формально - это не unit-тест, т.к. покрывает кучу всего. 2. Девелопер убеждается что тест падает ![]() 3. Пишется минимальный код, позволяющий тесту не упасть. 4. Девелопер проверяет что все тесты заработали 5. Рефакторит то, то написал 6. Повторяет. Если срываться в крайности - то в 0 появляется куча левых стори, типа перебора всех возможных комбинаций входных значений. На выходе получается софт, в котором (теоретически) все существующие юзкейсы покрыты тестами, т.е. после (5) tdd-ный тест нахаляву превращается в регрессионнный. А когда есть хотя бы одна старая страница - то регрессия - это заход на нее. Каждая кнопка добавляет в регрессию минимум один юзкейс, и на него тратят время QA.
Именно настолько, и разрыв может быть и побольше. Проблема в том, что написанию тестов обычно мешает не архитектура (что там, заюзать IoC/DI), а именно сам код, который захочется протестировать. А говорить девелоперам "пишите весь код так, чтобы его можно было потом протестировать" - это взывать к их способнастям телепатов ![]() Проблема как раз в том, что девелопер почти всегда уверен, что он пишет код идеально, и что тесты - бесполезны. Тесты лично девелоперу не нужны, и он искренне удивляется каждому багу. А еще он может сделать любую задачу за 3 дня. ;)
У них абсолютно другая предметная область ![]() Дык, делись списком тулзов. |
||||
|
|||||
Любитель |
|
||||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Т. е. тест должен покрывать именно юзкейс? Тогда AFAIK это функциональный тест. Но (!) тогда он (вообще говоря) никак не сможет быстро отработать. Я всё время мыслил о ТДД именно в контексте "быстрых" юнит-тестов и, как следствие, часто запускаемых.
Вот имено, что юзкейсы. Т. е. это исключительно high level тесты. Грубо говоря - код ими не покрывается. Т. е., я не могу гарантировать что этот класс работает правильно. Он работает правильно при том, как он сейчас используется. Нет, это не есть плохо - но это никак не юнит-тесты. ИМХО, конечно, но функциональными тестами тоже должны заниматься QA. Ибо они не привязаны к внутреннему коду. Если они это автоматизируют, интегрируют в билд-систему и т. д. Отлично. Но девелоперы, я думаю, если и должны писать тесты - то только юнит-тесты. Я не очень понял. Что значит "мешает код, а не архитектура"?
Ну.. мне тяжело сдуить столь абстрактно, но, если архитектура та же - это тот же проект ![]() ![]() Дык я вначале того.. послушать зашёл ![]() ![]() |
||||
|
|||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Что у вас за юзкейсы такие? O_o? У нас пока в среднем 0.1-0.2с на юзкейс. Вся фишка как раз в том, чтобы заполучить фреймворк, который по настоящему test-friendly, а не "позволяет использовать тесты". Кстати, в 2010-й студии есть test impact view, который позволяет запускать только затронутые изменениями тесты, если уж дествительно по времени прижимает. Вот это и фишка TDD - когда функциональные тесты пишут девелоперы. Так же особенность TDD-тестов - они не привязаны к внутреннему коду, они вообще не гарантируют что там этот класс есть. Зато они гарантируют что архитектура отвечает реальным требованиям, а не какому-то абстрактному мега-плану (см Agile ;). А еще TDD тесты отлично переживают вообще любой рефакторинг - потому что они тестируют не юниты, которые при рефакторинге колбасит, а общее поведение, которое при рефакторинге не должно измениться. А код этими тестами отлично покрывается в том смысле, что они его хотя бы исполняют, и проверяют окончательный результат. А если кусок не покрыт - то он, по определению, не нужен. Кроме очевидных исключений. А написание именно unit-тестов вообще на все - действительно бессмысленное занятие. Они слишком дороги в поддержке, повышают стоимость рефакторинга, мешают новому функционалу, и вообще ведут себя не по agile-овски ![]() Тру-TDD наоборот, поощеряет рефакторинг и добавление нового функционала. и не ломание старого при этом. а рабочее приложение и реагирование на изменения есть хорошо. TDD - это не подход к тестированию существующего/отдельно созданного дизайна - каких-то классов, методов и прочих юнитов. Это подход к дизайну - задание функциональных требований через тесты. Проблемы у TDD такие же, как и у Agile: - его неправильно понимают - выбирают неверные инструменты - ударяются в крайности В том смысле что архитектура - это общее описание того, как работает приложение. А код - непосредственная реализация задумок архитектора. Простой пример - вызов HttpContext.Current сделает кусок кода практически нетестируемым, как бы не продумывал testeability архитектор. Скажем, не вся архитектура, а скорее набор паттернов разного уровня + их стандартная реализация. Шаблон приложения, если так удобнее. Полученный из большого приложения выбрасиванем предметной области. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
При достаточно количестве данных - я не представляю, как это может быть 01.-0.2 секунды :( Я понял. Просто я это отнёс к архитектурным проблемам. В данном случае под проблемой понимается не кривая архитектура, а код, не следующий этой архитектуре (грубо говоря, обращеник лейеру, к оторому не надо бы здесь обращаться). |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Магия ;) на самом деле не нужно вбивать огромное количество данных, для отработки юзкейса достаточно небольшого набора. Это ж не нагрузочные тесты. Время ответа страницы до секунды - вполне типичное требование к веб-приложению. Неправильно ожидать что тест будет работать медленее живого приложения. Это сообщение отредактировал(а) PashaPash - 7.11.2009, 16:37 |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Ну.. не всякой страницы. Есть фичи, которые в любом случае занимают время - и это нормально. Но это один (!) тест. А если тестировать весь проект - это явно приличная задержка.. Что-то я всё-таки не понимаю
![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Любитель, это задержка в пару минут при сборке среднего проекта. Код дольше компилируется, чем тестируется
![]() |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Не, с CI всё понятно. Непонятно с TDD. Ибо в моём понимании ТДД предполагает частый запуск тестов девелопером. А тесты после билда - в этом ничего нового нет (всё равно, конечно, далеко не всегда эти тесты автоматизированны, но я не отношу это к ТДД).
|
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Не слишком частый. Один раз на юзкейс, перед/во время коммита, если все пойдет хорошо. Часто запускать приходится текущий тест, а с ним проблем нет - пара секунд на запуск максимум, с учетом всех задержек. Ну и всякие test impact и просто группировка тестов добавляют удобства и экономят время. Можно понаблюдать за собой, как типичный разработчик пишет код в среднем таком проекте 1. рисует зародыш ui 2. пишет логику 3. дергает ее из ui 4. правит баги 5. повторяет раз так N 6. коммитает Минусы: - занимается ручным тестированием, что при некотором количестве итераций (то 2-х) просто медленнее, чем один раз написать тест - он не оставляет артефактов в виде теста, т.е. работа по ручному тестированию не приносит пользы в будущем Хотя, все зависит от того, в какой пропорции уходит время на ручную проверку логики по отношению к кодированию. Я пока не виде людей, которые пишут рабочий код правильно и с первой попытки. И вообще его никак не проверяют при этом ;) |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Я понял. Автоматизацию тестирования я поддерживаю в большинстве случаев (за исключением уж очень тривиальных только). Но к ТДД это не отношу. Впрочем, это вопрос терминологии.
|
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Ой нафлудили
![]() ![]() Я отнес ее ко второй части абзаца. ![]() Это его проблема. А не Agile. Врядли, скорее всего умею ![]() Ты про TDD или про тесты вообще? +1 Кроме того: почти все в нашем мире нужно адаптировать под себя (что хорошо одному -- другому смерть Ж)) )
А зачем полностью? Это не точная наука. "Внтуреннего голоса" вполне достаточно. Ведь любую ошибку можно исправить. Гнилая отмазка. Уж не обижайся.
Ну ты уже понял, Паша, что я с тобой тут не согласен ![]() ![]() Паш, у тебя неправильное ТДД. Причем я даже не знаю как тебя переубедить. У тебя скорее FTDD (Functional TDD). И я совсем не представляю как твое TDD может помочь в дизайне приложения. СУВ, Aikin Это сообщение отредактировал(а) ivashkanet - 9.11.2009, 10:30 |
||||
|
|||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
И про то и про другое. Вообще любое тестирование должно поддерживаться всей командой. В чем именно не согласен? Ты пробовал именно Unit-тесты, перед разработкой? Как unit-тесты могут помочь в дизайне всего приложения, а не отдельных юнитов? Чтобы написать тест на юнит, нужно сначала принять решение о существовании этого юнита, а это решение - и есть построение дизайна. А когда юнит появился - то никакой тест на него не может дизайн изменить. А FTDD (скорее уж, tests before development) очень классно помогает. Именно тем, что оно определяет дизайн всего приложения, а не тестирует юниты уже в готовом дизайне. Я вообще-то выше написал что у нас не TDD в чистом виде. Но зато у нас тесты есть, практически на весь функционал, и вся команда понимает их необходимость. А у вас - нет ;) Переубеждай ;)
Это с точки зрения разработчика - программирование - это исскуство, с неточными числами и загадками. Внутренний голос разработчика говорит "да подумаешь, это можно исправить, не проблема, работы то тут на 5 минут". Внутренний голос QA - "опять исправять что-то внутрях, мне из-за этих 5-ти минут все перетещивать. В прошлый раз поверил что функционал YYY не затронет - а там все поломалось. Когда эти криворукие девелоперы научатся код без багов писать" А вот у манагера все просто. С его точки зрения стоимость ошибки - вполне точная сумма в $. Можно даже прайс нарисовать. - баг повалил тесты при билде - 5$ - из-за бага билд у QA не запустился вообще - 50$ - баг нашли QA во время smoke - 500$ за все баги - баг найденный QA во время регресии - 1000$ за все баги Прайс нашептан моим внутренним голосом, но легко вычисляется из количества людей, через которых проходит билд, их зп, и среднего времени обнаружения первых багов. |
|||
|
||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Если учесть что TDD -- подмножество тестов, то про тесты вообще. Так вот. Все что я говорил выше к тестам вообще не относится. Только к TDD. Мы уже как-то нафлудили несколько страниц. Неохото повторяться.
А потом, через несколько лет успешных и не очень проектов, манагеру открывается ДАО: для проекта дешевле поощрять инициативу программистов и дать им возможность совершать ошибки. Вот только прайс под это дао уже не подведешь. Добавлено через 3 минуты и 35 секунд
Ну кто сказал, что у нас нет тестов практически на весь важный функционал (60-70% покрытия)? Я такое не говорил. |
||||||
|
|||||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Какое отношение возможность совершить ошибку имеет к инициативе? Повышать инициативу (мотивировать) можно кучей разный способов, но "разрешить не писать тесты" среди них точно нет. По личному опыту - на долгоиграющем проекте ДАО открывается как раз в обратную сторону :( А еще чуть позже приходит просветление что нужны именно функциональные тесты, т.к. за пару лет архитектуру переколбашивает, и unit-тесты становяться все дороже в поддержке. ivashkanet, ты манагер или девелопер? судя по подходу - девелопер ![]()
Т.е. вы не уверены в 60-70% своего кода? ![]() |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
В чём проблема? ![]() ![]() Осталось только скан NDA предоставить ![]() -------------------- СУВ, Partizan. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
А это разве разрешено по NDA? |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
PashaPash, это в NDA, насколько я помню, не оговаривается...хотя, надо перечитать
![]() -------------------- СУВ, Partizan. |
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Самое прямое. Если за проявленную инициативу в случае ошибки будут по рукам бить, то инициатива уйдет на нет. Разрешить девелоперу самому решать писать или не писать тест. Чуешь разницу? Об этом я и говорил.
Да, вывод верный. Ну и что? Это ДАО пришло. Вот только иногда все же нужны именно юнит тесты. Отличный прием, сэр. Ниже пояса. Подход такой: есть функциональность, ты в ней не совсем уверен (напиши банальную сортировку); пишешь тесты; стразу появляется уверренность. Если коротко: не уверенности + тест = есть уверенность. Остальные 40-30% кода настолько тривиальны (отображение данных) либо настолько легко проверяются (открыл страниуц, а тебе прямо в лицо баг), что тесты им не нужны. Хмм, настолько жесткой НДА я никогда не видел. Т.е. вообще ничего никому нельзя рассказывать? Такой жести я не встречал. Звиняй. Если можно выложить НДА или в личку, то я бы хотел ее глянуть. |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
Собственно, пока перечитывал NDA, сделал вывод, что списком инструментов таки поделиться можно
![]() Только вряд ли в этом списке кто-то что-то новое увидит...Думаю многие тут юзают что-то из Jirа/TargetProcess/CruiseControl/etc..., или всё вместе... -------------------- СУВ, Partizan. |
|||
|
||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Лучше для проекта будет, если девелопер будет уверен что "нужно писать", а не чувствовать что его заставляют. Это скорее вопрос мотивации и правильного промывания мозгов, чем инициативы. Идеальная ситуация - когда решает девелопер, и когда он почти всегда осмысленно решает "писать тест" потому что это лучше для проекта, а не потому что "так сказал манагер". А хороший манагер - это тот, который не дает девелоперам заметить что тесты введены принудительно. На том как это сделать не один консультант на хлеб зарабатывает ![]() Просто с точки зрения манагера (или тимлида) отсутствие теста - технический долг, который обязательно придется отдать в будущем. С точки зрения девелопера - просто допущение что функционал тривиальный и будет работать. ;) Для существующего кода сделать "+тест" дороже, чем писать тесты вообще на все с самого начала. Писать тесты до кода дешевле, чем писать их после. Вывод - писать тесты сразу и на все подряд. Ручная прогонка smoke нашего текущего проекта - открыть все страницы, сделать crud операции со всеми сущностями, проверить что хотя бы не упало нигда - 2 часа работы QC. Да, QC - низкооплачиваемые негры, но при 3-4 билдах в неделю набегает довольно ощутимая сумма. Кстати, билд чаще всего заворачивают по проваленному smoke. И манагеру при этом лезут в голову глупые мысли, типа "да что у этих девелоперов с руками". :( Легко проверяется != дешево. Хотя, все зависит от долгосрочности и масштабов проекта.
А вот это уже действительно иногда, редко и только на сложные куски. Добавлено @ 20:19 Предлагаю с обсуждением TDD завязать, т.к. чистый тру-TDD тут все ненавидят (я в том числе). Это сообщение отредактировал(а) PashaPash - 9.11.2009, 20:19 |
||||
|
|||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Не все так однозначно (нет чисто черног и чисто белого). Любой тест требует затрат времени и сил на создание и поддержку. У меня на проекте, есть части системы цена некритической ошибки в которой низка. Это, навскидку, админка сайта. Пользуется ей 3-4 человека. Которые емею прямой контакт с нами. Простой баг фиксится в течении часа. Деплоиться либо сразу же (3-4 минуты недоступности сайта) либо ночью.
Опять переворачиваешь мои слова в нужную тебе сторону. Это НЕ то что мы обсуждаем. Мы обсуждаем то, как я могу быть неуверен в 60% своей функциональности. Я меняю код конкретной страницы именно ее я и запускаю на smoke. Если меняемый мною код затрагивает множество страниц, то скорее всего на него есть тест. Либо функциональность некритическая.
Ну почему же, любой класс модели требует модульных тестов. Не считая тупых контейнеров, ессно.
![]() |
||||||
|
|||||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Ну, опять же, зависит от проекта. У нас на основном проекте админки нет, а изменение в любой сущности ведет (потенциально) к пересчету кучи данных (предметная область такая :*( ). Т.е. некритических мест практически нет.
Если точнее - как ты можешь быть уверен в оставшихся 40% ![]()
У нас есть фунциональные тесты, которые все равно это класс покрывают. А если не покрывают - значит класс сам по себе существует, и вообще в приложении не нужен. Т.е. у нас на основе тестов и покрытия делается дизайн всего приложения, или по крайней мере крупных кусков, а не отдельных юнитов. Пытаться ввести TDD на уровне юнитов - это вообще гибельная затея, т.к. рефакторинг чего-то крупнее класса потребует написания новых тестов и переписывания старых. В TDD тесты не меняются во время рефакторинга, по определению. Есть строгие фазы, red-green-refactor, и сама фишка стадии refactor - получить красивый код того, что наколбашено на стадии green, и при этом не трогать тесты. Т.е. при "TDD" через unit, а не функциональные тесты, всегда есть два плохих выхода - переписывать тесты на стадии refactor - что нехорошо и очень дорого, и на самом деле не TDD - отказаться от рефакторинга кусков крупнее класса/метода (юнита) - что тоже неприятно, и не TDD, т.к. тесты не задают дизайн приложения. Обычно выбирают первое, что ведет к непрятным расходам (манагер слышыт "я рефакторил, пришлось переписать туеву хучу тестов ради нормального кода") и довольно тупой работе. А еще при этом девелопер выбрасывает код, который он писал. Даже хуже, на стадии red он знает что код тестов придется выбросить на стадии refactor. А это снижает мотивацию до нуля. --> вырабатывает строгую ненависть к слову TDD. Ты скорее всего пол года шел именно этим путем, судя по уровню внутренней ненависти ;) |
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
А я о чем??? ![]() Странно. Я вот специально перечитал ветку. И не нашел этого вопроса. Нашел в точности противоположный, на который отвечал.
Если мы вернемся к деньгам, и стоимости рабочего времени, то окажется, что такой подход невыгоден. Так как функциональный тест не показывает что конкретно сломалось в модели. То придется дебажить чтобы понять что поломалось. Кроме того, с большой долей вероятности повалится не один тест, а целая пачка. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Однажды на встрече с синоптиками товарищ Сталин спросил: "Какова вероятность того, что прогнозы погоды верны?". "40%" - отвечали ему синоптики. "А вы предсказывайте наоборот" - посоветовал им тов. Сталин. У меня просто другое понятие "уверенности", которое не совпадает с уверенностью с точки зрения разработчика. Точнее, совпадает, но с понижающим коэффициентом ![]() TDD предполагает короткие циклы. Если что-то поломалось - виноваты те изменения, которые ты только что сделал. Что значительно экономит время на отладке и поиске виноватых ![]() Ну и основные вопросы так и остались без ответа. Если использовать unit-тесты, а не функциональные, то - Как юнит-тесты могут задавать дизайн приложения, если они ничего крупнее юнита не тестируют? - Как рефакторить, не переписывая при этом юнит-тесты. |
|||
|
||||
ivashkanet |
|
||||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Гадание на кофейной гуще. С чего ты взял что ЗНАЕШЬ как я мыслю? Если включить думалку, то из моих ответов будет ясно, что 40% это не код в котором я УВЕРЕН, а код на который нецелесообразно (по мнению программиста) писать тесты. В эти 40% входит некритичная функциональность, функциональность с низкой ценой ошибки и, только сейчас, код в котором я уверен.
У меня НЕТ ненависти к ТДД. Я считаю его ОТЛИЧНЫМ инструментом дизайна публичного интерфейса класса. И считаю, что в других случаях ТДД излишне. Что я и сказал пару страниц назад. Мы НЕ обсуждаем TDD.
С твоих слов (лень искать цитату): ты запускаешь только те юзкейсы которые (по твоему мнению) затрагивают проводимые изменения. Допустим ты 2 часа кодил. Собрался комитить. Запустил ВСЕ тесты. Десяток повалилось. Какое конкретно изменение сломало систему?
Нивопрос.
А кто говорил про дизайн всего приложения? ТДД дизайнит публичный интерфейс класса (юнита). Больше ничего (ИМО). Для дизайна приложения в целом есть еще целый вагон техник. Тут какая-то ошибка закралась. Рефакторинг -- изменение кода БЕЗ именения функциональности. Тесты -- фиксируют некую функциональность. Изменяешь тесты -- изменяешь функциональность. Т.е. не рефакторишь, а кодишь. Поэтому тесты изменяются не на этапе рефакторинга, а на этапе Red (этап фиксирования новых требований в тестах). На этом закончу. Если хочешь подробнее -- нужен конкретный пример. СУВ, ivashkanet |
||||||||||
|
|||||||||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Я знаю как мыслят девелоперы, работа у меня такая :( А я вот считаю TDD отличным инструментом для дизайна всего приложения, что тоже пару страниц пытаюсь дозаказать. "не по моему мнению" а по мнению студии, что немного более обоснованно. или вообще все тесты. Тесты валяться не просто так, "не работает". Они при этом вполне нормальные следы оставляют, в виде stack trace, или конкретных ошибок, "получили 4 вместо 5". Ну и при 2-х часах кодинга не оценить возможный impact на существующий функционал - это как-то из области фантастики. А какая альтернатива? Получить работающие юнит-тесты, но при этом неработающий фунционал? Неделю кодишь, коммитаешь, собираешь билд, все покрыто тестами. Потом приходят QA и говорят "вот такая-то фича не работает, а раньше работала". Какое конкретно изменение за неделю сломало систему (если предположить, что влияние даже 2-х часового кодинга оценить невозможно). TDD дизайнит публичный интерфейс чего угодно. Есть понятие Acceptance Test Driven Development, собственно, его мы и используем. Есть Unit Test-Driven Development, тот самый с тру-юнит-тестами, его мы ненавидим всей конторой ![]() Может я как-то не так объясняю... 1. Рефакторинг -- изменение кода БЕЗ именения функциональности. 2. Тесты -- фиксируют некую функциональность. 3. Юнит-тесты -- фиксируют некую функциональность одного юнита (класса или его метода) 4. Тесты не изменяются на этапе рефакторинга 5. Функциональность одного юнита (класса или его метода) не изменяется на этапе рефакторинга 6. Функциональность и публичный интерфейс класса не изменяется на этапе рефекторинга 7a. Невозможен рефакторинг, который меняет набор юнитов, или связи межну ними, или 7b. Работоспособность приложения при таком рефакторинге не проверяется тестами, и это плохой рефакторинг. Если в цепочке есть ошибка, ткни пальцем, потому что я ее не вижу. Конкретный пример. - Есть класс A, c методом SetLight(bool isOn, double brightness). А не виден конечным пользователям приложения (вполне типично для web, там видны только контроллеры и presentation model). Но он тем не менее A.SetLight - вполне так юнит (наименьшая единица, которую можно протестировать). - Есть тесты на A.SetLight - Есть вызывающие его классы B и C. Возможно, через интерфейс Ia.SetLight(bool). - Есть тесты на B и C, мокающие Ia.SetLight(bool) (тру-юнит тесты, тестирующие один юнит) Как провести рефакторинг, в процессе которого SetLight начент принимать один параметр LightSettings (Introduce Parameter Object), и при этом не переписать тесты для B и С? Как провести рефакторинг, который выделит из A какой-то кусок в подкласс (Extract Subclass) и при этом не переписать тесты на A. Вы дизайните так круто, что рефакторинг совсем не нужен? Или принимается волевоевое решение не рефакторить ничего крупнее юнита? Или у вас определение юнита другое? |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Ок, идем по другому: C чего ты знаешь как Я мыслю?
У нас разные понятия TDD. C моей точки зрения твой подход -- не ТДД. А несколько постов назад мы договорились не трогать ТДД. Что-то у меня отпало желание продолжать. Наш камень преткновения -- разные определения ТДД. На этом и закончим. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Ты ведь девелопер, а все девелоперы с точки зрения PM-а мыслят примерно одинаково :( Кстати, грустный анекдот про Agile. Статья http://en.wikipedia.org/wiki/TargetProcess была убита из википедии за "незначимость, незаметность софта (в качестве значимости приведены только ссылки на выигрыш minor industry award (Jolt)), и употребление жаргонизма 'Agile project management'". Как-то обидно даже, вроде местный (минский) продукт :( Это сообщение отредактировал(а) PashaPash - 12.11.2009, 15:26 |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
привет всем.
Согласен с Любителем, почти во всем... Даже не по себе как-то )) От себя: несколько раз видел упоминание о тестах UI... Я не понял, честно говоря, что именно вкладывается в смысл этой фразы.. UI не должен подлежать тестированию в принципе. Это сообщение отредактировал(а) tol05 - 14.11.2009, 01:09 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
В чем именно согласен? ;)
В паттерне MVC все, кроме модели, - это UI (Presentation Layer). Контроллеры, и даже часть View (клиентский javascript, например) вполне так подлежат тестированию. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
А в паттерне MVVM UI - презентейшен - это модель, а UI - это даже не View, а композиция мз стандартных контролов, предоставляемых фреймворком.. Давайте оставим паттерны в покое, поскольку мы говорим о инструментах.. Все время говорится о разделении UI от представления. Зачем? Не только обеспечить разделяемость разработки, но и обеспечить максимальную тестируемость продукта. При этом подразумевается, что все, что должно подлежать тестированию, должно уйти из UI. Точно так же, как и "(клиентский javascript)". Вычислительные скрипты должны быть вынесены из UI вообще. Ну а тестировать скрипты типа getElementById('btn1').style.visibility='hidden' ... ну уж увольте.. Если кнопка есть, она будет hidden... Я этому верю как аксиоме )) Каждые два часа проверять, не удалил ли кто-нибудь эту кнопку случайно?! Давайте не называть этот маразм методологией )) В таком случае, что же тогда тестирование UI? Тестирование купленного фрейморка (стандартные контролы - часть фрейморка)? Разработчик не несет ответственность за фрейморк и заказчик всегда это знает. Он или согласен, чтобы этот фрейморк использовался в его продукте. Или нет... UI - это средство отображения состояния приложения. Мы же не тестируем такое средство отображения информации, как дисплей машины, когда пытаемся доказать клиенту, что мы сделали его продукт качественно? UI - средство взаимодействия с пользователем. Мы не тестируем клавиатуру и мышь... Ну а если мы не можем обеспечить композитному глупому UI возможность работать только с элементарными типами данных, генерить только стандартные события... и ни о чем ни в коем случае не думать. То в этом случае нужно нанять нормального архитектора в компанию. Вот такое мое мнение о тестировании UI )) В чем я согласен с Любителем 1. В его высказываниях об аджайле и тестировании 2. TDD - это зло. Я бы даже сказал - это фикция, убивание проектного времени и особенно - денег клиента 3. цитата " Хотя такой ситуации ИМХО просто не должно быть - надо писать в обратном порядке smile" (сначала иногда делается прототипирование) 4. "Если планируется разработка или (особенно) переработка, затраная в архитектурном плане." - при этом тестировать нужно только интерфейсы взаимодействия модулей и слоев. Также, если слой достаточно сложен - тестировать нужно интерфейсы взаимодействия классов внутри слоя. 5. о QA и функциональных тестах. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
tol05, К сожалению, в современных приложениях, в частности веб, тот самый клиентский скрипт (он же presentation logic), который ты считаешь тривиальным и незначительным, по объему значительно превышает BL. Если знаешь как "вынести их из UI вообще" - переселить на сервер - скажи, а то мужики то не знают
![]() Composit UI с элементарными типами и стандартными CRUD событиями - это инструмент для data-driven intranet приложений. А в интернете сейчас в моде user-driven design, где поведение каждой кнопки приходится обдумывать. Ну и вообще похоже что ты по UI подразумеаешь именно сами кнопочки и контролы, их действительно бессмысленно тестить. Я под UI подразумевал presentation layer, IMHO, это было достаточно очевидно из контекста. Сходи например, на MSDN, Designing the Components of an Application or Service, там Presentaion Layer состоит из UI Components и UI Process Components, как бы в подтверждение того что не только я так UI понимаю. В посленем App Arch Guide тоже. Может быть тебе стоит переосмыслить понятие UI? В паттерне MVVM все три куска - это Presentation, т.е. UI в общепринятом смысле. О ТДД и прочем - да, согласие с тем, что ТДД надо строить не на функциональных тестах, вполне логично ведет к остальным пунктам. Там выше были мои аргументы по кажому из них, если не согласен - отпишись. Потому что пока (IMHO) твоя позиция - тесты вообще практически не нужны, что как бы противоречит здравому смыслу (опять же IMHO). Утверждение что тесты не нужны, или нужны, но только если "планируется" - просто следствие слишком большой самоуверенности разаработчика. Хотя, для интранет приложений, которые сдаются вникуда, без саппотра и развития - да, тесты не нужны. Открой блог targetprocess (явно уважаемой тру-agile конторы), запись о процессе: http://www.targetprocess.com/blog/2009/10/...nt-process.html Посмотри какое у них покрытие функциональными тестами, какое у них отношение к "ненужным" тестам UI. Ну и опять же, убедить меня что тесты на UI не нужны, а TDD вредно - без шансов, потому что я могу сравнить результаты на схожих проектах с TDD и тестами на UI и без. Ну и раз уж начали флудить, ты - разработчик? или РМ, архитектор, тимлид? Это сообщение отредактировал(а) PashaPash - 15.11.2009, 01:57 |
|||
|
||||
tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
PashaPash,
По поводу всего того, что Вы написали... Кроме web-based applications в мире существует большое колличество других типов ПО. Я всегда считал, считаю и буду считать, что самый главный минус в разработке приложений данного типа - это перегрузка граничного UI слоя всякого рода скриптами, желание угодить всем платформам и браузерам, а также нарастить usability данных приложений точечными включениями многочисленных платформ, чужеродных друг другу. Отсюда и чудовищный объем javascript-та. Однако, в последние годы, становится заметным (даже далекому от сферы разработки человеку) что даже для такого "трудного ребенка" как web-based applications делается все, чтобы облегчить UI слой, избавиться от скриптов. Уменьшить их, автоматизировать их создание и т.д. и т.п. Это и AJAX с его внутренними (не нуждающимися в своем тестировании) скриптами. И средства скриптогенерации. И Silverlight.. Кстати, последний вообще подразумевает отказ от всего того, что Вы называете современным и модным... user-driven design - он не подразумевает скриптогенерацию? Кто будет писать те многочисленные скрипты, в тестировании которых Вы нуждаетесь каждый день? Про паттерн MVVM - будем считать что Вы этого не писали...
О том, что тесты не нужны, я не писал. Вниметельнее перечитайте текст. Ок, объясню свою мысль яснее. Тесты нужны только для проверки выполнения пунктов требований. Пока требования не написаны (на этапе прототипа например) - тесты не нужны. Когда требования написаны - тесты нужны. Когда требования меняются - тесты меняются. Дописываются, модифицируются и т.п. Это сообщение отредактировал(а) tol05 - 15.11.2009, 12:03 -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
tol05, да, мне тоже не нравится javascript и современный web. Но я не настолько верю в светлое будущее кодогенерации.
И, кстати, что будет служить источником для генерации? Просто интересно, почему так же нельзя сгенерировать бизнес-логику, и BL? Мне вот, как не слишком далекому то сферы человеку, становится заметным что в последнее время все пытаются написать как можно больше логики UI именно на javasript. Ajax вообще подразумевает достаточно активную ручную работу с html и dom. И в последние годы (гм) появляется много фреймворков, направленных на облегчение написания скрипта (а не выноса его и кодогенерации). Тот же jquery. И как, интересно, эту проблему решит Silvelight? Да, Silverlight позволяет не писать скриптов, но Presentation Layer на SL - это все еще Presentation Layer (который UI). И если SL решает проблему, то почему до сих пор Flash не захатил web, ведь он так же способен ее решить?
Вообще-то не подразумевает, он подразумевает что логика UI не генерируется по данным. Ну и опять же скриптогенерацию из чего? Из описания логики UI, но на другом языке? Ну зачем же. Я вот все еще уверен что MVVM, MVC, MVP - это паттерны организации Presentation Layer, и что все, кроме M в них - это presentation layer. И, кстати, чтобы уж совсем не спорить - там выше на пару страницы упоминались не тесты UI. Там упоминались тесты из (посредством) UI. И, кстати, неавтомтизированные.
Не имеет, но цель топика - собрать инфу о процессах и инструментах, а не спорить и TDD и возможности кодогенерации UI. А для описания процесса (и для спора о TDD ;) важен контекст - роль спорящего, типы приложений, ориентация (custom/outsource/freelance), длительность (2-3 месяца, 2-3 года). А иначе - это как спорить с php-том о транзакциях. И чем же тогда вредно TDD (при нефанатичном применении)? TDD вообще никак не противоречит написанному, IMHO. Даже наоборот, позволяет контролировать покрытие требований тестами. TDD - это когда тесты меняются чтобы соответствовать требованиям. А потом уже меняется код. Что в этом плохого? Кстати, поделись процессом с тулзами. Интересно, насколько активно у вас используется кодогенерация ;) |
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Новый виток? Прикольно. Отвяжитесь вы от жаваскрипта. Он может представлять как UI так BL логику. Первую тестировать нет смысла, а вот вторую стоит. Для этого и фреймворки есть. Например в FireBug-е. Есть и масса других, но я этой темой не интересовался за ненадобностью.
Вот так бы и сказал. Обычно под этим понимают разные вещи. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Так я ж и сказал, чтобы прояснить ситуацию. Или ты не мое сообщение процитировал ![]() ![]() Осталось узнать что именно tol05 подразумевает под UI, т.к. мои сообщения он тупо не читает ![]() BL на JavaScript - вообще сомнительная вещь, вряд ли есть смысл переносить бизнес-логику в браузер, хотя бы из соображений безопасности. То, что ты подразумеваешь под BL на JavaScript, скорее всего называется UI process components, и он является частью UI. Это вполне однозначно сказано в Web Architecture Pocket Guide от производителя. Отвязаться от JavaScript очень хочется, но, IMHO, невозможно вообще во всех случаях. Потому что в некоторых случаях отвязка от JS, кодогенерация, и перенос логики на сервер ведут к банальным тормозам в приложении. Весь спор как раз о том, стоит ли тестировать UI-логику. UI-логика может быть весьма нетривиальной. Я бы просто не был настолько категоричен, на уровне "нельзя в принципе". Все зависит от конкретного приложения, и от конкретной предметной области. Может быть тяжело представить сложную логику UI? Конктретный пример, из текущего проекта: - в приложении есть диаграммы Ганта (типа как у Горбунова, улучшенные). - с drag'n'drop и прочими плюшками - с относительно нетривиальной логикой именно на уровне Presentation (даже точнее, UI, если под ним весь Presentation не понимать) - в требованиях явно прописано - они должны быть написаны полностью на стороне браузера - в тех же требованиях - никакого silverlight. - объемы данных - до 400 проектов, до 5000 тасков, + завязка еще на 5-6 сущностей, типа таймлогов - в требованиях - диаграммы должны работать быстро Я пока не вижу других вариантов реализации, кроме как написать это все вручную (относительно, с использованием фреймворков), и написать код UI именно на JS. С компонетной моделью, шаблонизаторами и проч, но все равно на JS. И его придется тестировать, причем хотя бы часть - автоматически. Требования довольно странные, но сводяться к одному - у конкурентов есть такой гант, а у нас - нет. И кроме такого вот принудительно-скриптового ганта есть еще более веселые куски. Если гуру tol05 подскажет как "автосгенерировать" этот кусок, и при этом не получить тормоза и chatty-интерфейс на сервере, то я с радостью откажусь от тестирования UI в принципе. На случай подхода "а вы напишите на silverlight" - в текущей версии гант как раз на silverlight, и именно его хотят переписать на JavaScript. Потому что бизнесу абсолютно пофиг на внутреннюю чистоту архитектуры, им продажи важны. Да, я полностью согласен вот с этим утверждением: Но смысл его - главный минус в разработке веб приложений - то, что они веб. Или только я так его понимаю? Пока чистые, не rich-client, веб-приложения востребованы - мы вынуждены их писать. Вообще обсуждение пошло по цепочке: - UI не подлежит тестированию в принципе - а вот в asp.net mvc/HTML/javascript подлежит - а вы юзайте MVVM и вообще не пишите веб, пишите под сильверлайт Хотя, судя по обсуждению, один я web-ом занимаюсь, а все остальные спокойно пишут под win. Тогда еще можно понять почему UI считают легким налетом поверх BL. Это сообщение отредактировал(а) PashaPash - 16.11.2009, 18:00 |
|||
|
||||
tol05 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
какая-то непонятная и болезненная реакция на точку зрения, отличную от Вашей, PashaPash,
Я высказал свои мысли, как и все остальные. Жаль что не они пришлись Вам по душе...
сильверлайт - это web-ориентированная технология, к сведению... Надеюсь что да.
я на звание гуру не претендовал. И попрошу Вас, уважаемый, держаться в рамках. Очень бы хотелось... В остальном - я умолкаю. Все что я хотел сказать - я сказал. Как сумел. -------------------- На хорошей работе и сны хорошие снятся. |
||||||
|
|||||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
tol05, я просто очень болезненно реагирую на фразу "UI тестированию не подлежит". Весь день перед этим убит на прикручивание Selenium к cc.net, исключительно ради тестов на UI.
Возможно, у нас действительно проблемы с архитектурой, и стоит перейти на silverlight, генерацию скриптов и прочее. Ваш совет нанять архитектора - очень полезен, но сначала хотелось бы видеть хоть какую-то надежду. Сейчас у нас генерируемое по метаданным UI, с Silverlight, вполне ровное в архитектурном плане. Но неприемлимое с точки зрения пользователя, по вышеперечисленным причинам. Боюсь, что нанятый архитектор посоветует бороть проблемы со скоростью и временем отклика ... переписыванием логики UI на javascript. Точнее, уже минимум два "архитектора по вызову" так посоветовали. У вас есть контакт "правильного" архитектора, желательно в Минске? Вы глубоко заблуждаетесь (с) Приведите хоть один агрумент, ссылку на источник. Почему вы промолчали раньше, когда я явно попросил прояснить термин UI в Вашем понимании? Ну или ответьте на вопрос - UI Processing Component - это часть UI?
Гуру употреблен не ради насмешки. Человек с 145 репутации вполне заслуживает звания гуру ![]() Это сообщение отредактировал(а) PashaPash - 16.11.2009, 21:30 |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
ЗЫ. Если бы я действительно пытался отрицать чужую точку зрения и наезжать на остальных, я бы не писал длинных развернутых ответов. Я бы сделал так:
Бизнес-логика (!) на javascript (!!) в client tier (!!!) в web (!!!!). И этот феерический бред 2 раза плюсанули??? Но ведь не делаю, пытаюсь вежливо отвечать. Сорри, не удержался. No offence к ivashkanet, я прекрасно понял смысл сообщения. Строчка выше - шутка. Но в любом случае - глубокое презрение к плюсовавшим. Это сообщение отредактировал(а) PashaPash - 16.11.2009, 23:43 |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Насколько я понял, просто Паша под UI понимает презентейшен-лейер (в том или ином виде), а BL - лейер бизнес-логики. Остальные же: UI - код, ответственный непосредсвенно за UI, BL - код, отвечающий за некоторую внутреннюю (в различных смыслах) логику.
Добавлено через 4 минуты и 32 секунды Ах да, насчёт яваскрипта: 1. Это оффтопик ![]() 2. Я за ручное написание. Яваскрипт - отличный язык со своими паттернами. Проблема производительности? Ну.. она везде есть ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Любитель, ну хоть кто-то читает мои мессаги.
JavaScript - не оффтопик, по крайней мере после анонса coded user interface test в 2010-й студии. http://blogs.msdn.com/paulcornell/archive/...ui-testing.aspx Там встречаются слова ui testing и ui layer, но с этим ничего поделать - они не читают винград. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Ну.. на всякий случай - я тоже привык под UI-кодом понимать код, ответственный именно за UI. BL правда противопоставлением не является.. Даже не знаю, обычно просто юай и логика
![]() Что касается оффтопик или нет: конкретные метод разработки на JS, конкретные паттерны и пр. - ИМХО оффтопик, тулзы для генерации, тестирования, поддержки и пр., а также организация процесса JS-девелопмента (хотя я бы не стал это так особо выделять) - нет, конечно. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
UI код - код ответственный за UI - это нефункциональное определение. Бизнес-логика — совокупность правил, принципов, зависимостей поведения объектов предметной области системы. Если логика описывает поведение UI - то она не бизнес. Неважно, кто и как понимает. Есть вполне строгая терминология, и если ее не придерживаться - то будет бесполезный спор. Когда на любые попытки уточнить терминологию получаешь "вы глубоко заблуждаетесь". Есть официальный гайд от MS по архитектуре. Давайте его придерживаться. По гайду - UI - это area of concern - группировка функционала. За нее отвечает Presentation Layer. Все остальные толкования терина UI в пределах топика ничем не подтверждены. а толкователи - глубоко заблуждаются, или намеренно запутывают терминологию, IMHO. Ну в и целом спор довольно странный - MS включило в VS2010 поддержку coded user interface tests - Телерики выпустили WebUI Test Studio, с поддержкой Silverlight - TargetProcess пытается покрыть UI тестами (это для фанатов agile аргумент) - Местные QA пищат от Selenium-а - На винграде меня убеждают что UI тестированию не подлежит в принципе. И что я глубоко заблуждаюсь. Только мне кажется что с последним пунктом что-то не то? Это сообщение отредактировал(а) PashaPash - 17.11.2009, 03:15 |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
В классическом разделении по лейерам слово UI не фигурирует.
Что касается тестирования UI.. Тестировать UI необходимо. Всё надо тестировать. Тут вопрос в том, мануальное это тестирование или нет. Так вот, сам UI - мануально и никак иначе. Ну как мы нормально увидим, что там блоки разъехались не так?! Взаимодействие UI с остальными частями - вполне себе автоматизируется. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Любитель, блоки разъехались - это не баг в UI, это баг в Page Layout.
![]() UI - это не layer, если по классике. Это "проблемная область". Его нельзя тестировать, и он не может ни с чем взаимодействовать. И его нельзя "автосгенерить" и "вынести из него скрипты". Presentation Layer - это код, полностью посвященный проблемной области "пользовательский итерфейс" в классическом разделении. И в нем внутри бывает много логики. Мне проще написать "тесты на UI", чем "тесты на код, отвечающий за функционал в пределах UI area of concern". И судя по гуглу, не только мне. |
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Паша, я не пытаюсь отрицать твою точку зрения. Я ее понимаю и уважаю. Я банально устал с тобой спорить. Вся беда в том, ИМО, что своими "длинными развернутыми ответоами" ты уводишь от темы. Просмотри нашу дискуссию еще раз. Ты увидишь, что я старался сконцентрироваться на чем-то конкретном, а ты все добавлял и добавлял новые аспекты (или вспоминал старые)
Нда, вот этого я от тебя не ожидал. Дальше я буду писать прописные истины. Браузерные приложения -- приложения клиент серверные. С сервером все понятно, а вот клиента часто недооценивают. А между прочим на HTML&CSS + JavaScript можно писать не менее Rich приложения, чем на тех же формах. Проблема толко в том, что это делать не так удобно как на том же WinForms. Но это проблема не JavaScript, а отсутствия готовых инструментов. Хорошо, что в последнее время это направление стало усиленно развиваться. JQuery, Prototype, Dojo, ExtJS,... Даже браузерных Осей уже вагон написали. Не говоря о болле простых приложениях. Но разговор не об этом, а об BL на JavaScript в Client Tier в вэб приложениях. В моем понимании BL -- это логика, важная для бизнеса, т.е. людей, которые пользуются нашим приложениям. Сразу скажу, я еще не настоящий сварщик JavaScript програмист и ни разу не писал JavaScript который можно тестировать. Так, стандартные макаронины ![]() Самый простой и очевидный пример BL в жаваскрипте -- валидация. Но не банальная проверка на непустоту или на число в поле, а более сложная, затрагивающая бизнесс заказчика. Например дата начала должна быть раньше даты конца, при установлении приоритета high обязательно нужно указать планируемую дату окончания и назначить ответственного (это из моей области). Интернет магазин: при добавлении твоара в корзину либо при удалении, пометке "птичками" нужно пересчитать общую стоимость товаров. Опять моя область: есть список задач, их можно отметить птичками -- после отметки нужно пересчитать % выполнения. И т.д. и т.п. Главный момент: JavaScript -- мощный и функционалный язык, вот только язык силен не сам по себе, а всевозможным middleware для этого языка. Чего у JS не густо. |
||||
|
|||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Ээ.. А это не UI?! А если этот лейаут строится так или иначе динамически? Баг вполне может быть в скрипте там каком-нибудь... |
|||
|
||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Майкрософт всегда ориентировалась на посредственных пользователей (программеры -- пользователи VS). Кроме того это модно. Следовательно -- это бабки.
См выше.
Опять выше. Если ты производишь Agile инструмент -- не факт что ты сам agile. Agile сейчас такой же бизнес, чем макдональдс и кока кола. Ну и пусть пищат. Еще бы. Вместо повторения изо дня в день кликов по формам, можно эти клики записать в мастере. Но дело в том, что это ИХ инструмент. Но никак не мой как девелопера. Нет, я понимаю, что их мне можно использовать как временные регрешен тесты. Мне не нравится UI тесты для разработчика, потому что они хрупкие (скажем так) и медленные. Я предпочитаю изолировать тестируемый класс, набор классов и полностью в тесте контролировать воздействие на них. С UI так не получиться. Для UI, как минимум, нужна база. Заполенная данными. Для QA это хорошо, для девелопера -- нет. Тесты должны часто запускаться. Медленные тесты запускаются только на CI сервере.
Заблуждаешься. Тестировать UI можно и нужно. Этим занимается QA. Вот пусть и дальше этим занимается. Это сообщение отредактировал(а) ivashkanet - 18.11.2009, 11:33 |
||||||
|
|||||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
ivashkanet, ну вот, понеслось
![]() Красиво, да? Я могу идти за попкорном? Я вообще не утверждал что UI должны тестировать разработчики. У нас тесты на UI пишут QA. По крайней мере, пытаются. И крутятся эти тесты на CI сервере. С двумя твоими постами я почти полностью согласен. Упоминание UI тестов как "сначала пишем UI тесты" выше было в контексте "неправильного TDD". Топик посвящен процессу. Если CI - часть процесса, то тесты на UI - тоже.
Т.е. вообще вся логика приложения... В моем понимании, есть BL - логика доменной области. И UI логика - логика взаимодействия с пользователем. Почти все модные паттерны, типа MVC, это разделение вводят. Ну и опять же, есть гайд со строгим определением, а не моим или твоим пониманием. http://apparch.codeplex.com/. Там куча ссылок на источники, чтобы показать что это не ламерская дока от MS. ![]() Могу даже процитировать, Presentation Layer ... common issues ... UI Process Components ... Mixing business logic with UI process logic. EDIT: у нас когда-то один препод в универе любил спрашивать - а что такое бизнес-логика. И в ответ на "важная для бизнеса и для людей" уточнял - "а в приложении есть еще и другая, не важная для бизнеса и для людей, логика"? No joking.
Это часть UI. Ну, "разъехались" очень трудно протестировать. А вот "кнопка не включилась", что чаще случается - очень просто. Это сообщение отредактировал(а) PashaPash - 18.11.2009, 18:35 |
||||
|
|||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Что чаще случается - это спорно
![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Не спорно, просто it depends ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Надо было топик назвать "не ищи определение, придумай свое понимание UI/BL/whatever и убеди PashaPash что он в корне не прав". И брать деньги за вход. Я уже вижу следующий виток. Код DataAccess полезен людям и бизнесу, поэтому он - бизнес-логика.
Предлагаю вернуться к теме обсуждения. Где списки инструментов, где процесс от участников? |
|||
|
||||
ivashkanet |
|
||||||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
О, и мне немножко! Если чессно, то я по диагонали читаю этот поток мыслей ![]() Ураааа, взаимопонимание ![]() ![]()
Мы ведь говорим про процесс разработки (программерами), а не весь процесс разработки начиная от анализа требований до приемо сдаточных испытаний и ввода в эксплуатацию. Так? Тогда спорно. UI тесты пишутся QA. Ночной билд сломался. Полетели UI тесты. Кто по Процессу должен разбираться в причине? Если разработчики, то что делать если UI тест криво написан и не учитывает новых изменений? Если QA, то почему сломался билд, почему отвлекли разработчиков от этого? Получается, у QA должен быть свой билд сервер. Во как ![]()
О, вагон. Рюшечки, бантики, фенечки; низкоуровневые детали реализации. Т.е. все то, без чего приложение все еще будет приносить пользу, либо то, что можно кардинально изменить. В любом случае, какое бы ты (правильное) определение ни привел. Все что я написал выше останется примерами бизнесс логики. Тоже масло масленное ;-)
Люди много чего написали в мире. Было время я все это читал перечитывал. Сейчас стараюсь стремиться к простоте и руководствоваться здравым смыслом. Ну и держать руку на пульсе.
Заметь, тему называл ты ![]() СУВ, ivashkanet Добавлено через 11 минут и 26 секунд
У Скрама есть отличная практика. Называется Ретроспектива. Это когда в конце спринта люди собираются и обсуждают что хорошего было внесено в Процесс, что не работает, что мы, возможно, не так поняли. В конце выносится решение нужно ли продолжать использовать "это" или нет. Попробовали TDD -- оказалось, что стало есть много времени, кодить некогда. Отказались. Попробовали Специальную тулзу -- отлично работает ... Вот это грамотно. В общем нужно не стоять на месте, а двигаться. Не важно куда, вперед, назад, влево, вправо. То что работает для одних, не факт будет работать для вас. Голова на плечах подскажет когда вы движетесь не туда. Зато вы можете найти звою "бронзовоую пульку" ![]() Но для этого, как и вообще для Agile нужны высокий уровень команды и некоторая степень свободы со стороны менеджера. И вообще: Agile -- это сложно!
|
||||||||||||
|
|||||||||||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Это нечестно! Почему меня за тестирование UI послали нанимать архитектора, а тебя - нет :( Процесса разработки (программерами) IMHO не бывает. Ну, не совсем. доменная (предметная область) - вполне самостоятельное понятие. Скажем, проекты, задачи, баги, ассайны у нас. Логика которая человека на проект ассайнит - бизнес. А которая галочки на странице снимает и поля отключает - не бизнес. Навигация - тоже не бизнес. Ну хоть чуть более точное определение, чем "полезная людям" ![]()
Ну, не совсем ![]() На практике - валидация - практически единственная бизнес-логика, которая должна вылазить в Presentation в не-rich клиенте. И при том дублироваться на сервере. Даже не логика, а business rules. счас даже цитату воткну: Avoid business rules, with the exception of input and data validation, in UI processing components. Layers should represent a logical grouping of components. For example, use separate layers for user interface, business logic, and data access components. Components within a layer should be cohesive. In other words, the business layer components should provide only operations related to application business logic. В rich все сложнее, но надо учитывать что rich client - это отдельное приложение, которое почти целиком на client tier работает. Rich client на javascript встречается в вебе очень редко. И все эти UI Test Framework-и - больше для тестирования UI Processing, чем BL. Да, но надо хоть раз в пару лет перечитывать. Долгими зимними ночами ![]() Кстати, у вас SCRUM? Какой размер команды, что пишете, на чем? ![]() Добавлено через 13 минут и 32 секунды Я минут 20 над названием думал. ![]() |
||||
|
|||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
ААААА, ну я не знаю как это называется. ![]() ![]()
Ключевое слово "должна". Вот только зачастую лазить на сервер за небольшими изменениями затратно. Вот и приходим к жаваскрипту. Не обязательно. Есть подходы которые позволяют использовать общий набор правил. Там правда колбаса с кодогенерацией и посетителем, так что для прикручивание этого нужны хорошие скилы. Но, однажды настроенная, система работает как часы.
Тупо негде применять. Мои проекты не требуют такой уровень знаний. У меня и так overskill раза в два: то что я предлагаю либо никто не понимает и полностью сваливают реализацию на меня, либо говорят нинуно это нам, бум клобасить по старинке (город небольшой, всего 3 программерских конторы и все быдлокодят в аутсорсе). Я сейчас Ruby и ее рельсы осваиваю. Суперский язык. Стремает немного динамическая типизация. Но сколько возможностей дает этот подход ![]()
Да ты что, окстись. У нашего чудо процесса даже названия, думаю, нет. Так, потиху кодим. И если что-то вводим, то втихаря от менеджера. Вот так вот. |
||||||
|
|||||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Ес-но, я имел ввиду что код будет дублироваться (точнее, должен). Ради этого в 3.5 SP1 (или бете 4-ки, не помню) во фреймворк затянули кучу аттрибутов. Кстати, насчет глобальной кодогенерации - http://thedailywtf.com/Articles/The_Custom...dly_System.aspx.
И ты, Брут... |
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Угу! Нужно расти вширь. Вглубь без практики понту нет ![]()
Ты о кодконтрактах? Их цель в другом.. Хотя они отлично расширяютя для генерации скриптов валидации.
Любая крайность плоха. |
||||
|
|||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Есть еще System.ComponentModel.DataAnnotations. Они для DynamicData введены, но вполне можно и в других целях использовать. Для asp.net mvc, например, есть готовый model binder, который их понимает: http://www.asp.net/learn/mvc/tutorial-39-cs.aspx Это сообщение отредактировал(а) PashaPash - 20.11.2009, 17:57 |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Нашел перевод зачетной статьи про ТДД.
Очень грамотно написано и очень мне близко так как перекликается с тем, к чему пришел я. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Я не стал создавать отдельную тему. Если надо перенесите, но я подумал, что здесь можно задавать любые вопросы по поводу проектирования.
Начал читать книгу Нильссона "Применение DDD..." вот тут речь идёт о некоей сохраняемости, но толком непонятно, что это? Это принцип какой-то? -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
А что приходит в голову? Именно это и означает: возможность сохранить объекты домена в некоем хранилище для дальнейшего использования.
Вот что говорит Вики:
|
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Интеграционные тесты для Веб приложений (MVC).
Именно такими, ИМО, они и должны быть. Сценарий:
Тест:
А всякие WatiN, Sellenium -- в топку. |
||||
|
|||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Хочу немного освежить тему несколькими вопросами:
Прошу высказать свои предложения... Это сообщение отредактировал(а) Unlocker - 25.3.2010, 14:20 --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
ivashkanet, поздно заметил мессагу. Эти интеграционные тесты не тестят javascript, в котором больше всего проблем и вылазит. А тупо делать тест в виде серии веб-реквестов умеет сама студия, даже с записью. Но пользы в таком тестировании мало.
Unlocker, по процессу - все очень зависит от контекста. Если бы для любой небольшой команды подходил один и тот же процесс, его бы давно задокументировали, и назвали "Процесс 4-6". По инструментам - стандартый набор. любая система CI (ccnet/tfs/teamcity), любая гонялка тестов (*unit, mstest), что-то для code review... |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
PashaPash, не открою ничего нового, если скажу, что у старины Брукса идея про отсутствие "серебряной пули" была высказана довольно давно и чётко.
Именно это мне и хотелось увидеть -- практические примеры уже внедренных и работающих процессов вкупе с инфраструктурой. Я не пытаюсь теоретически вывести оптимальный набор инструментов и методик для нашей небольшой группы. Мне интересно собрать отзывы людей, чтобы очертить круг вариантов для рассмотрения. PashaPash, внедрялись ли в вашей организации системы учёта дефектов (багтрекеры), создавались ли базы знаний на основе движков Wiki или других средств? Обсуждение можно продолжать... Это сообщение отредактировал(а) Unlocker - 26.3.2010, 10:38 --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Unlocker, у нас основная связка cruise control.net + msbuild/mstest + selenium/watin для ui тестов. Test Track Pro как багтрекер (исторически сложилось, QA не хотят с него переходить). На паре проектов - HP Quality Center, но IMHO он монструозен немного
![]() Из Continuous Integration утилит еще вроде TeamCity рассматривали. Можно поробовать еще TFS как полностью готовое решение (или полностью не готовое ![]() Проще поднять конкретный набор на виртуалках и проверить. Даже ограничение "нет ничего, кроме системы контроля версий нет" - уже довольно сильное. Вдруг у вас там VSS. Или наоборот, Mercurial. |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
PashaPash, насчет VSS ты попал в точку. Он был поднят еще до моего прихода в компанию и сейчас начальство приходит к мнению о необходимости его постепенной замены. Насчет новой системы контроля версий склоняемся в пользу Subversion (центральный репозиторий исходных кодов легче бэкапить), систему отслеживания дефектов Trac. А вот насчет остальной инфраструктуры пока думаем... Build-сервером пока думаем сделать ccnet. TFS нам при поверхностном знакомстве не понравился своей громоздкой настройкой (надо настроить всё и сразу), чего естественно без дорогих специалистов сделать не получится. Систему тестирования пока тоже обсуждаем: nunit (этот вариант пока рассматривается основным), mbunit, mstest (с твоей подачи). Это надо отдельно решать, но не к спеху, т.к. это будет после системы учета дефектов. Build-машина пока тоже не определена: первоначально хотели nAnt, но этот проект уже несколько лет как никто не поддерживает. Тут тоже предстоит собрать инфо и обсудить. Ну а прочие прелести типа систем инспекции кода, база знаний MediaWiki будут подниматься по мере получения положительных результатов с предыдущих этапов. Это сообщение отредактировал(а) Unlocker - 27.3.2010, 11:31 --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Unlocker, если у вас распределенная команда - берите mercurial. вместо nant - обычный msbuild.
TFS все-таки попробуйте. Там не все так сложно в настройке, и может оказаться проще чем настройка 5 отдельных утилит. По установке есть подробная, до клика, инструкция. |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Видать, эта инструкция мне как-то попадалась к прочтению (500 с лишним страниц не произвели на меня впечатление "быстро и понятно"). Еще в TFS мне не нравится опора на SharePoint (у нас он использовался для внутрикорпоративных нужд). На мой взгляд, Wiki в том или ином виде значительно удобнее для простого сбора, поддержки и обновления информации по проектам (ну, вероятно, у меня такое мнение окончательно сложилось после оформления дипломной работы в TeXe, где в проекте много отдельных документов, связанных определенными ссылками) ;) Кстати, одна из проблем в нашей инфраструктуре -- это хранение важных данных в системе инженерного документооборота в формате doc/excel. При большом количестве документов, разложенных в разных папках, найти нужную тебе информацию практически нереально. Исходя из информации, полученной от начальства, филиал первоначально будет пользоваться инфраструктурой центрального офиса, т.к. ответственный персонал будет именно в центре. Mercurial и Git мы рассматривали в качестве возможной системы контроля версий, но сошлись на мнении, что с централизованным хранилищем работа будет удобнее (что впрочем еще подлежит проверке на практике). По крайней мере, в вопросе развертывания соответствующей инфраструктуры наверняка (см. выше). Насколько мне видится текущая ситуация в нашей компании (для компании разработка ПО -- не основной вид бизнеса. основная сфера деятельности -- системная интеграция, САПР, электронный документооборот). При появлении больших и перспективных проектов, в отличие от прошлых имевших, в основном, локально-прикладной характер, появилась потребность в постановке процесса и современной инфраструктуры разработки. Хотя пока это только наши (я и мой коллега) устремления, им еще предстоит выдержать проверку у начальников на соответствие бизнес-задачам компании в целом и отдела в частности. PashaPash, спасибо за беседу. Любые интересные мысли с удовольствием выслушаю ;) Это сообщение отредактировал(а) Unlocker - 27.3.2010, 15:27 --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Немного прочитал про сравнение между собой различных продуктов СУВ (CustIS). Убедился, что всё-таки в условиях компании и довольно больших продуктов выгоднее использовать Subversion: у распределенной системы повышенный расход дискового пространства на рабочих станциях и сложности слияния при достаточно большом количестве работников. SVN хорошо себя зарекомендовал на ресурсах "Sourceforge" и "Google Code", поэтому начнём с него.
--------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Такой вопрос по инфраструктуре разработки:
использовалась ли кем-нибудь для управления проектами разработкой связка Trac+Subversion под .NET? Если да, то какие плагины Trac'a вы считаете необходимыми при первоначальном развертывании? --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Процесс обсуждения параллельно идет на другой площадке по адресу -- Agile Software Development.
Вопросы организации инфраструктуры для .NET-разработки в теме Инфраструктура NET-разработки. Желающие могут присоединяться к обсуждению... --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
PashaPash, а если в одно лицо, сам разрабатываешь продукт, что бы Вы применяли в смысле инструментов?
Это сообщение отредактировал(а) ДобренькийПапаша - 5.4.2010, 18:11 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
ДобренькийПапаша, очевидно, те же самые инструменты
![]() |
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
PashaPash, я в этом деле абсолютный нуб (я никогда не работал в команде), не использовал инструментов для контроля версий, и толком не знаю для чего это надо (я не очень понимаю преимущества), тестов за жизнь написал очень мало. Стоит ли сейчас начинать знакомство с инструментами о которых Вы говорили выше, как можно раньше, и с чего мне лучше начать? ![]() Или до того как толком разберусь с теоретической частью TDD или DDD лучше вообще не соваться? Это сообщение отредактировал(а) ДобренькийПапаша - 8.4.2010, 10:51 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
ДобренькийПапаша, сначала неплохо было бы определиться, что конкретно ты хочешь разрабатывать. В зависимости от специфики той или иной области требуются различные инструменты. Хотя есть список общих инструментов:
А насчет <...>DD, то основы модульного тестирования и связанные с этим архитектурные приемы, знать и использовать рекомендуется. Но начинать я считаю надо с GoF. А дальше постепенно уже по надобности читать Фаулера, Нильсена, Бека и т.д. Главное, чтобы не получилось как в анекдоте: "написано 32 строчки кода, использовано 16 шаблонов"... ![]() --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Теперь это уже BDD ![]() -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |