Как Вы обрабатываете силу между рефакторингом и потребностью в слиянии?

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

В N2 в качестве стандартной функции

=COUNTIFS(B:B, B2,M:M, "<"&M2)+COUNTIFS(B$2:B2, B2, M$2:M2, M2)

Заполните, если необходимо,

Отфильтрованные результаты

21
задан Xavier Nodet 22 October 2008 в 15:37
поделиться

6 ответов

Это - реальная практическая проблема. Это ухудшается, если у Вас есть несколько версий, Вы должны поддерживать и перешли для каждого. Еще хуже все еще, если у Вас есть подлинный R& D переходят также.

Мое предпочтение состояло в том, чтобы позволить основной соединительной линии продолжаться при ее нормальном темпе а не держаться, потому что в среде, где синхронизации выпуска были важны коммерчески, я никогда не мог обсуждать случай, который мы должны позволить коду стабилизировать ("что, Вы подразумеваете выпуск его в нестабильном состоянии?").

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

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

я никогда не находил действительно хорошей литературы по этому предмету. Это будет неизбежно связано с Вашей стратегией выпуска и SLAs, который Вы подписываете со своими клиентами.

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

14
ответ дан 29 November 2019 в 05:40
поделиться

Где я работаю, мы создаем временный, недолгий (меньше, чем день - несколько недель) рабочие ответвления для каждого нетривиального изменения (функция добавляют или bugfix). Соединительная линия стабильна и (идеально) потенциально публикуема все время; только сделанные объекты объединяются в него. Все фиксировавшее от соединительной линии объединяется в рабочие ответвления каждый день; это может быть в основном автоматизировано (мы используем Гудзон, Муравья и Подрывную деятельность). (Эта последняя точка, потому что обычно лучше разрешить любые конфликты раньше, чем позже, конечно.)

текущая модель, которую мы используем, была в основном под влиянием превосходной статьи (, который я включил прежде ) Henrik Kniberg: Управление версиями для Нескольких Гибких Команд .

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

существуют немного служебные о дополнительном ветвлении и слиянии, но не слишком много, действительно, как только Вы привыкаете к нему и поправляетесь с инструментами (например, svn merge --reintegrate удобно). И не, я всегда не создаю временное ответвление, например, для меньших рефакторингов с низким риском (не связанный с основными объектами в настоящее время при работе), который может легко быть завершен с, каждый передает соединительной линии.

Мы также поддерживаем более старое ответвление выпуска, в котором критические ошибки время от времени исправляются. По общему признанию может быть руководство (иногда утомительно) объединяющий работу, если некоторая конкретная часть кода значительно развилась в соединительной линии по сравнению с ответвлением. (Это, надо надеяться, становится меньшим количеством проблемы, поскольку мы двигаем постоянно выпускающие инкременты от соединительной линии (внутренне) и разрешение маркетингу & управление производством решает, когда они хотят сделать внешний выпуск.)

я не уверен, отвечает ли это на Ваш вопрос непосредственно, или если можно применить это в среде (с отдельной командой QA и всеми) - но по крайней мере я могу сказать, что сила, которую Вы описываете, не существует для нас, и мы свободны осуществить рефакторинг каждый раз, когда.Удачи!

5
ответ дан 29 November 2019 в 05:40
поделиться

Я думаю, что сила может быть обработана путем добавления после компонентов к процессу разработки:

  1. Непрерывная интеграция
  2. Автоматизированные функциональные испытания (я предполагаю Вас уже, рассчитывают с модульными тестами)
  3. Автоматизированная доставка

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

С автоматизированными функциональными испытаниями, Вы в состоянии протестировать свое приложение при щелчке кнопки. Обычно, так как эти тесты занимают больше времени, они выполняются ночью. С этим классическая роль управления версиями начинает терять важность. Вы не принимаете свое решение о том, когда выпустить на основе версии и ее зрелости, it’s больше бизнес-решения. Если Вы реализовали поблочное и функциональное тестирование, и Ваша команда отправляет протестированный код, голова всегда должна в состоянии, которое может быть выпущено. Ошибки непрерывно обнаруживаются и исправляются и выпускают поставленный, но это больше не циклический процесс, it’s непрерывный.

у Вас, вероятно, будет два типа хулителей, так как это подразумевает изменение некоторых длинных внедренных методов. Во-первых, сдвиг парадигмы непрерывного развёртывания кажется парадоксальным менеджерам. “Aren’t мы рискующий поставлять главную ошибку? ”, Если Вы смотрите на дистрибутивы Linux или Windows, это точно, что они делают: продвижение выпусков к клиентам. И так как Вы рассчитываете с комплектом автоматизированных тестов, опасности далее уменьшены.

Затем, команда QA или отдел. (Некоторые утверждали бы, что проблемой является их существование сам по себе!) Они обычно будут вызывающими отвращение к автоматизации тестов. Это означает изучать новый и иногда сложный инструмент. Здесь, лучшее должно проповедовать путем выполнения его. Наша группа разработчиков начала работать над непрерывной интеграцией и в то же время, пишущий комплект функциональных испытаний с Селен . Когда команда QA видела инструмент в действии, было трудно выступить против своей реализации.

Наконец, thurth - то, что процесс, который я описал, не так прост как addig 3 ingredinents к Вашему процессу разработки. Это подразумевает глубокое изменение в способе, которым Вы разрабатываете программное обеспечение.

1
ответ дан 29 November 2019 в 05:40
поделиться

Где я работаю, мы остаемся с рефакторингом в основном ответвлении. Если слияния становятся хитрыми, с ними просто нужно иметь дело на специальной основе, они являются все выполнимыми, но иногда занимают немного времени.

0
ответ дан 29 November 2019 в 05:40
поделиться

Возможно, наша проблема возникает из того, что у нас есть ответвления, которые должны иметь вполне долгую жизнь (до 18 месяцев), и существует много мер, которые должны быть сделаны против них.

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

0
ответ дан 29 November 2019 в 05:40
поделиться

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

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

Еще не пробовали ...

1
ответ дан 29 November 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: