Я работаю в безумно CVS и Bugzilla-орехах.
В каждом выпуске так много веток, что их невозможно сосчитать. Все постоянно сливаются автоматически.
На этой работе нет текучести . Все чувствует себя замкнутым . Требуется 25 шагов даже для простой вещи. Это не то же самое, что быть на заводской производственной линии: это все равно, что каждый день сам создавать фабрику.
Пример ситуации:
Чтобы исправить одну ошибку, сначала я получаю новую чистую виртуальную машину. Затем я создаю ветку для этого исправления ошибки, основанную на другой ветке, описанной в отчете Bugzilla. Я устанавливаю ветку на машину, настраиваю это. Я исправляю ошибку. Я проверяю это, оставляя это и машину для других, чтобы проверить с. Затем я должен зайти в программу контроля ошибок и объяснить, что я сделал, и написать контрольный пример со всеми шагами. В конце концов кто-то еще сливает это с выпуском.
Неважно, насколько крошечная ошибка, я должен делать все эти вещи. Иногда люди совмещают работу над несколькими ошибками, но, как я уже сказал, веток так много, что это вряд ли возможно.
На любой другой работе я бы просто пошел и исправил ошибку. Я почти не помню, как использовал SCM, хотя каждая моя работа использовала его: потому что на любой другой работе они каким-то образом удерживали его в стороне .
Есть ли точка, в которой процесс мешает и становится самоцелью? Это даже инженерия?
Ответы:
К сожалению, тяжелые процессы являются обычным явлением. Некоторые люди - особенно менеджмент - религиозно представляют, что процессы производят продукты. Таким образом , они переусердствовали процессы и забыть , что это на самом деле несколько трудолюбивых, умных людей , которые на самом деле создают продукты. Для высшего руководства даже страшно думать, что их бизнес находится в руках нескольких гиков, и поэтому закрывать глаза от реальности и вместо этого думать о своем дорогом «процессе», который дает им иллюзию контроля.
Вот почему гибкие стартапы с несколькими хорошими инженерами могут обыграть крупные, устоявшиеся корпорации, сотрудники которых тратят 95% своей энергии на процессы и отчетность. Некоторые примеры когда-то небольших стартапов, которые когда-то победили своих конкурентов и / или создали совершенно новые рынки:
Можно легко сказать, что это просто выбросы, крайние исключения, и если вы делаете что-то серьезное, вам лучше стать крупной, устоявшейся корпорацией. Но этот список можно продолжить. И вкл. Это смущающе долго. Почти каждая современная крупная корпорация начинала как гаражный магазин, который делал что-то необычное. Что-то странное. Они делали это неправильно. Как вы думаете, они делали это в соответствии с процессом?
источник
Компании обычно страдают от того, что я хотел бы назвать дилеммой Control-Flexibility. Чем меньше правил, структур и бюрократических накладных расходов, тем легче и быстрее выполнять задачи (это также веселее). Однако делать «плохие» вещи так же легко, как и «хорошие». Это означает, что у вас все хорошо, только если у вас есть квалифицированные сотрудники, которые совершают несколько некритических ошибок.
С другой стороны, если у вас много сотрудников с низкой или средней квалификацией и / или стоимость ошибок слишком высока (например, риск образования космического челнока в северном полушарии), компании склонны накапливать все новые и новые правила «и» процессы, чтобы попытаться свести их к минимуму.
Единственная проблема заключается в том, что совокупные издержки этих процессов затрудняют выполнение чего-либо, что приведет к тому, что более талантливые сотрудники покинут компанию. Это приводит к тому, что средний навык снижается еще больше, что требует еще большего количества процессов и бюрократии. Таким образом, спираль смерти продолжается до тех пор, пока не произойдет что-то радикальное или пока компания не обанкротится.
Если вы окажетесь в компании, которая, кажется, перешагнула точку невозврата в этом аспекте, вы можете либо решиться на то, чтобы «не заботиться» о своей работе (а это то, что сделали большинство оставшихся), либо уйти отсюда. там с твоей душой нетронутой :)
Если компания не зашла слишком далеко, и у вас есть средства, вы можете попытаться изменить курс с помощью решимости и силы воли. Остерегайтесь, однако, что это может потребовать огромного количества работы и личной энергии без гарантии успеха, поэтому будьте уверены, что оно того стоит. Иногда лучше просто сократить потери и считать себя на один опыт богаче.
источник
Есть только одна веская причина для такого стиля разработки: разработанное программное обеспечение является абсолютно критически важным и ни при каких обстоятельствах не должно содержать ошибок. Подумайте о встроенном программном обеспечении для впрыска топлива для реактивных двигателей в пассажирских самолетах, встроенном программном обеспечении для кардиостимулятора или в системе запуска ядерных ракет.
Во всех других ситуациях накладные расходы убьют бизнес. Время двигаться дальше.
источник
Этот вопрос действительно содержит два вопроса, которые необходимо решать отдельно:
Почему у некоторых команд строгий процесс разработки?
Простой ответ: потому что, если они этого не делают, ошибки случаются. Дорогостоящие ошибки. Это верно для разработки и для остальной части ИТ-сферы (системные администраторы, администраторы баз данных и т. Д.).
Это очень трудно понять многим разработчикам и ИТ-специалистам, потому что большинство из нас когда-либо работали только на одном из «крайностей» - либо крупные компании в стиле Fortune, имеющие как минимум дюжину разработчиков и строгие процессы, которым необходимо следовать, либо маленькие, микро-ISV или даже внештатные работы, где люди просто не плохо облажаются, или стоимость провала низкая.
Но если вы когда-либо видели компанию между этими этапами - даже компанию с яркими, талантливыми ИТ-специалистами - вы поймете опасность отсутствия какого-либо процесса или неполного процесса. Видите ли, общение между сотрудниками страдает от проблемы комбинаторного взрыва ; Как только вы достигнете уровня около 6-10 разработчиков в одной команде, основной причиной серьезных или критических дефектов будет не недостаток таланта или ноу-хау, а скорее недостаток общения.
Алиса спрашивает вокруг в понедельник утром и решает, что можно делать реконструктивные операции на туловище, потому что никто другой не работает над этой частью. Боб прибывает через час, вернулся из отпуска и полон энергии и решает, что он собирается реализовать новую важную функцию в той же области, и зачем беспокоиться о ветке, потому что никто так и не коснется этого кода? Таким образом, Алиса расплачивается за этот «технический долг», Боб реализует свою убойную функцию, которая была на заднем плане в течение 6 месяцев, и когда они, наконец, оба проверяют свой код (конечно, перед закрытием в пятницу!), Весь Команда должна остаться позади и попытаться преодолеть кошмарный ад конфликтов, которые продолжат жить как ошибки и регрессии в течение следующих нескольких недель.
Алиса и Боб оба отлично поработали над задачами кодирования, но оба они начали с плохого решения («что может быть худшего?»). Руководитель группы или руководитель проекта проводит их через вскрытие и составляет контрольный список, чтобы предотвратить это снова:
Держу пари, что многим из нас этот «процесс» кажется просто здравым смыслом. Это старая шляпа. Но знаете ли вы, что многие небольшие команды не делают этого? Команда из двух человек может вообще не беспокоиться об управлении исходным кодом. Какая разница? Это честно не нужно. Проблемы начинают возникать только тогда, когда команда растет, а процесс - нет.
Конечно, оптимизация процесса похожа на оптимизацию производительности; следует обратной экспоненциальной кривой. Приведенный выше контрольный список может устранить 80% дефектов, но после его внедрения вы обнаружите, что на остальные 80% дефектов приходится что-то другое . В нашем вымышленном, но знакомом примере это могут быть ошибки сборки из-за наличия разных сред сборки, что, в свою очередь, связано с отсутствием стандартного оборудования, и разработчики используют библиотеки с открытым исходным кодом, которые обновляются каждые 2 недели.
Таким образом, у вас есть три варианта: либо (а) стандартизировать аппаратное обеспечение и строго ограничить использование сторонних библиотек, что является дорогостоящим и может значительно снизить производительность, либо (б) настроить сервер сборки, который требует сотрудничества со стороны группы sysadmin и разработчик, работающий полный рабочий день, чтобы поддерживать его, или (c) позволить разработчикам делать это самостоятельно, распространяя стандартную виртуальную машину и предлагая разработчикам использовать ее. Ясно, что (б) является лучшим долгосрочным решением, но (в) имеет лучший краткосрочный баланс надежности и целесообразности.
Цикл продолжается и продолжается. Каждая «политика», которую вы видите, обычно устанавливается для решения реальной проблемы. Как писал Джоэл Спольски еще в 2000 году (обратите внимание на совершенно другую тему, но, тем не менее, актуальную):
То же самое в большинстве (я не скажу, во всех) командах разработчиков программного обеспечения: такие политики, как «Вы должны добавить тестовый пример для каждого исправления ошибки», почти всегда указывают на то, что у команды исторически были проблемы с регрессиями. Регрессии являются еще одной из тех проблем, которые чаще всего связаны с нарушением связи, а не с некомпетентностью. Если вы понимаете политику, вы можете использовать легитимные ярлыки (например, мне пришлось исправить 6 небольших ошибок, но все они были в одной функции, поэтому я могу просто написать один тестовый пример для всех 9 из них).
Это объясняет, почему процессы там, но это не вся история. Другая половина:
Почему так трудно следовать процессу?
На самом деле это более простой вопрос: потому что команда (или ее руководство) сосредоточена на повторяемых результатах и минимизации дефектов (как указано выше), но не уделяла достаточного внимания оптимизации и автоматизации этого процесса.
Например, в исходном вопросе я вижу несколько проблем:
Система контроля версий (CVS) является наследием по сегодняшним стандартам. Для новых проектов он был почти полностью заменен Subversion (SVN), который быстро затмевается распределенными системами, такими как Mercurial (Hg). Переключение на Hg сделало бы ветвление и слияние намного проще, и даже в моем гипотетическом примере выше требование ежедневного принятия стало бы намного менее болезненным. Код даже не должен компилироваться, потому что хранилище является локальным; - на самом деле, более ленивые разработчики могут даже автоматизировать этот шаг, если захотят, настроив сценарий выхода из системы для автоматической фиксации изменений в локальном репозитории.
Не было потрачено времени на автоматизацию процесса виртуальной машины. Весь процесс получения, настройки и загрузки исходного кода / библиотек на виртуальную машину может быть автоматизирован на 100%. Это может быть автоматический процесс, который вы выполняете где-то на центральном сервере, пока работаете над исправлением ошибки на локальном компьютере (и используете только виртуальную машину для обеспечения чистой сборки).
С другой стороны, в определенном масштабе решение VM-per-developer становится глупым, и у вас просто должен быть сервер Continuous Integration. Вот тут-то и появляются реальные преимущества производительности, потому что это (в основном) освобождает отдельных разработчиков от необходимости вообще беспокоиться о сборках. Не нужно беспокоиться о настройке чистых виртуальных машин, поскольку сервер сборки всегда чист.
Формулировка вопроса («контрольный пример со всеми этапами») подразумевает, что происходит некоторое ручное тестирование. Это, опять-таки, может работать для небольших команд с относительно низкой рабочей нагрузкой, но не имеет смысла в более широком масштабе. Регрессионные тесты могут и должны быть автоматизированы; нет никаких «шагов», просто класс или метод, добавленный в набор тестов модулей / интеграции.
Нет необходимости говорить, что переход от Bugzilla к более новой (лучшей) системе отслеживания ошибок сделает эту часть опыта менее болезненной.
Компании не обязательно дешевы или глупы только потому, что они не решили эти проблемы. Все, что они знают, это то, что текущий процесс работает , а в некоторых случаях они не склонны к риску и не хотят что-либо менять в этом. Но на самом деле их просто нужно убедить в преимуществах .
Если бы разработчики потратили неделю на отслеживание своего времени на все задачи, не связанные с кодированием, вы могли бы легко добавить это, показать руководству, что (например) инвестиции с нулевым капиталом, 100 человеко-часов в обновление до Mercurial устраните до 10 человеко-часов в неделю при разрешении конфликтов слияния, тогда это 10-недельное вознаграждение, и они почти наверняка согласятся на это. Та же идея с серверами сборки (CI) или улучшенным отслеживанием ошибок.
Напомним: команды еще не сделали этого, потому что никто не убедил руководство в том, что это достаточно важно сделать сегодня . Поэтому возьмите на себя инициативу и превратите ее в уравнение затрат и выгод; узнайте, сколько времени уходит на задачи, которые можно упростить / автоматизировать с минимальным риском, и рассчитать точку безубыточности и возможную отдачу от нового инструмента или техники. Если они все еще не слушают, то вы уже знаете, какие у вас есть варианты.
Выше часть выглядит достойной дальнейшего расширения.
Я могу подтвердить, что это работает. Программисты использовали это несколько раз в одном из проектов, над которым я работал, и каждый раз это приводило к желаемым изменениям.
У меня сложилось общее впечатление, что, если все сделано правильно, этот трюк может преодолеть довольно большое количество невежества и инерции руководства.
Хотелось бы отметить, что та компания, в которой нам (разработчикам) пришлось прибегнуть к такому подходу « сделай сам», была очень незрелой в IT-сфере. У более опытных поставщиков программного обеспечения я видел подобные вещи, которые в основном делали сами менеджеры. И, как правило, они были более продуктивными, чем мы, программисты. Гораздо продуктивнее.
источник
Если вы работаете в отрасли с жестким регулированием, то для этого громоздкого процесса может быть какая-то причина: однажды вы сможете пройти аудит и вам придется показать все свои записи, чтобы объяснить, кто исправил эту ошибку, как, кто ее проверял, кто проверял это и т.д ...
Так что это может быть неизбежным злом.
С другой стороны, если для этого процесса нет никаких оправданий, кроме, возможно, отсутствия доверия со стороны руководства, вы должны попытаться поговорить с вашим менеджером и сказать ему, как вы можете сэкономить время (и, следовательно, деньги) для компании.
Никто в здравом уме не откажется от более быстрого и лучшего процесса, если он будет правильно объяснен.
Но будьте готовы защитить свой аргумент, чтобы оправдать изменения.
источник
Половина проблемы заключается в том, что вы используете устаревшие инструменты в процессе, для которого они не предназначены. То, что вы описываете, очень легко получить в современных DVCS, без утомительной задачи создания ветки за ошибку.
Другая проблема заключается в том, что вы явно не в той работе, которая вам нравится. Вы работаете в сфере обслуживания, в то время как вы хотите развития. С этим мало что можно сделать, кроме смены работы.
источник
Дисциплина разработки программного обеспечения по своей сути "все о процессе", поэтому задаваться вопросом, "стал ли он" таким образом, является своего рода упущением.
В то время как большинство программистов скорее будут беспокоиться об абсолютном минимуме процесса, поскольку некоторые будут отстаивать гибкие методологии, даже если они не решают проблем, с которыми сталкивается их организация, для компании вполне возможно принять решение об использовании ». тяжелые "процессы по разумным деловым причинам, такие как" клиент требует этого ". Это обычное явление, если вашими клиентами являются компании из списка Fortune 500, университеты или правительственные учреждения. Награды от продажи этим клиентам могут быть достаточно большими, чтобы оправдать дополнительные издержки процесса.
Ваша компания - это одна точка данных, и невозможно обобщить ваш опыт в общеотраслевую тенденцию к более тяжелым процессам или от них. На самом деле вопрос в том, какой баланс лучше всего подходит для вашей компании, ваших продуктов, ваших клиентов и вас лично как программиста? Если вам не нравится работать в этой компании, спровоцируйте изменения или найдите другую работу.
источник
Из другого вопроса, который я видел сегодня, вы, похоже, недовольны своей работой. Вы не были там долго, вы можете просто сказать своему руководителю, что, по вашему мнению, вы допустили ошибку, и вам пора расстаться намного раньше, чем ожидалось.
Если вы хорошо справляетесь со своей работой, вам действительно не составит труда найти новую, и, честно говоря, если для этого процесса нет веских оснований, я бы, вероятно, подумал и о переезде. Использование CVS на самом деле было бы для меня решающим фактором, но я всегда задаю вопрос контроля версий на собеседовании. Очевидно, я не могу знать вашу ситуацию, и может быть невозможно уйти с работы, если у вас есть другие обязательства.
источник
Я собирался высказать о том, как разработка программного обеспечения наводнена очень плохими программистами, но описанная вами ситуация ужасна.
По моему личному опыту, некоторые из описанных вами «процессов» сопровождаются тем, что управление и системное администрирование полностью не знают о неэффективности систем, которые они навязывают программистам. Примеры включают ограничение выбора операционной системы, ограничение используемого программного обеспечения, доступ в интернет, права администратора на персональном рабочем столе; все эти вещи необходимы для хорошего развития.
Кроме того, требования совместимости между «волшебными решениями» применяют разные филиалы компаний. В качестве примеров можно привести головные офисы, навязывающие централизованное управление источниками, удаленные серверы Outlook, а также правила или языки кодирования, которые могут не подходить для каждой проблемы.
Не доставляет большого удовольствия держать колеса корпоративного гиганта, но я обнаружил, что в некоторых компаниях существуют небольшие пузыри инноваций, креативности и блеска.
источник
Вы, вероятно, работаете в процессно-ориентированной компании. Вместо этого я бы попытался найти компанию, ориентированную на результат , где важно, что вы делаете, а не то, как вы это делаете.
В моей компании тоже есть «процесс» (но он очень прост). Но когда он мешает, я нарушаю правила и пропускаю шаги. Никто никогда не скажет мне ничего, пока я ничего не сломаю, используя ярлыки, потому что я получаю результаты.
источник
Буквально, большинство инженеров собирают хорошо зарекомендовавшие себя части в установленном порядке в ответ на конкретную проблему. Это наиболее очевидно, если вы спросите меня, что они делают весь день. Вы путаете проектирование с архитектурой или разработкой продукта на ранней стадии (в любой области). У меня есть два замечания по вашему вопросу.
Это просто факт, что в любом конструктивном начинании, которое требует большого количества людей, некоторые люди занимаются разработкой, а большая группа «получает» выполнение. Извините, но вы во второй группе.
Как отмечают другие комментаторы, CVS - не лучший инструмент для работы над сильно разветвленной моделью разработки, но я также отмечаю, что вы не несете ответственности за слияние ... так что не беспокойтесь об этом.
Большинство ваших жалоб в основном звучит так: «Я не хочу тестировать ни до, ни во время, ни после разработки!» Давайте разберем ваши шаги, пункт за пунктом.
Кто-то другой, находящийся перед вами, очевидно, выполняет сортировку ошибок, чтобы убедиться, что найденная ошибка не исправлена в другом выпуске или не исправлена в более позднем выпуске (для этого и нужны тестовые случаи).
Единственная вещь, даже отдаленно необычная или переусердствующая в этом процессе, - это виртуальная машина. Есть большая вероятность, что это было бы разумно, если бы мы знали, в какой области вы работаете.
источник
Интересно. У вас есть тестеры? Они должны делать что-то из этого. Я один, и там, где я работаю, у нас есть достойное решение.
Для функционального дефекта, как вы объясняете, наш процесс выглядит следующим образом:
Затем я жду разрешения и помогаю разработчику любым способом, который им нужен. Когда это возвращается как решено, я:
TL; DR: Если у вас нет тестеров, тогда вам нужны некоторые. Если у вас есть, то они не «делают свое дело».
источник
Том ДеМарко:
Программная инженерия: идея, чье время пришло и ушло?
источник
«Затем я создаю ветку для исправления этой единственной ошибки»
Нет необходимости создавать ветку для исправления одиночной ошибки. Сначала создайте ошибку в bugzilla. Проверьте ветку релиза. Сделай исправление. Выполните фиксацию с помощью сообщения фиксации, содержащего номер ошибки, который обновляет ошибку и помечает ее как «исправлено, необходимо проверить» или «исправлено, проверено, необходимо объединить» соответствующим образом, в зависимости от текстовых ключевых слов, записанных в сообщении о фиксации. База данных ошибок является идеальным механизмом отслеживания всех внесенных изменений и причин их внесения; отчеты могут быть запущены из базы данных ошибок, чтобы извлечь эту информацию.
источник
Я думаю, что большая часть процесса может быть автоматизирована , так что создание виртуальной машины и ветки (включая компиляцию кода, настройку отладчиков и т. Д.) Было сделано за вас до того, как вы начали работать над ошибкой.
Описание того, что вы сделали и как его следует протестировать, того стоит. Я обнаружил, что только написание текста может выявить проблемы , так как это заставляет меня думать о риске и т. Д.
Поэтому я думаю, что процесс может быть немного «чрезмерным», но реальная проблема заключается в отсутствии пользовательских автоматизированных инструментов для поддержки процесса.
источник
Эй, чувак, ваш мыслительный процесс прав в том, что то, что вы описали, совершенно дрянное и истинная демонстрация того, как неправильные вещи могут быть в программном обеспечении. Но есть и хорошие новости: существует очень много компаний, практикующих Agile в настоящем духе. Компания, в которой я работаю, одна из таких. В эти дни много хороших новостей.
В тот момент, когда вы чувствуете, что на вашем рабочем месте действительно что-то не так, есть две вещи, которые вы можете сделать: либо вы можете повлиять на позитивные изменения, либо покинуть это место и присоединиться к лучшему.
CVS или любая другая система управления конфигурацией - это неплохо. К сожалению, то, как он используется, даже не зная его цели, вызывает такую боль в! @ # $ Для всей организации.
Чтобы быстро понять, что такое Agile, прочитайте книгу Venkata Subramaniam «Практика гибкого разработчика». Это красиво написано на понятном языке.
Желаю тебе удачи!
источник