Как программисты сотрудничают на проекте?

Я всегда программировал один, я - все еще студент, таким образом, я никогда не программировал ни с кем больше, я даже не использовал систему управления версиями прежде.

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

Как программное обеспечение компилируется? Это от системы управления версиями? Это отдельными программистами? Действительно ли это периодически? Это, когда кто-то решает создать или что-то? Есть ли какие-либо тесты, которые сделаны, чтобы удостовериться, что это "работает"?

Все равно.

75
задан Danubian Sailor 20 July 2013 в 21:24
поделиться

13 ответов

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

Лучшие практики, которые всегда полезны

  • Весь исходный код проекта и все, что требуется для его сборки, находится под системой управления версиями (также называемой системой управления версиями). Любой должен иметь возможность собрать весь проект одним щелчком мыши.
    Кроме того, ненужные файлы (объектные файлы или скомпилированные двоичные файлы) не должны , а добавляться в репозиторий, так как они могут быть легко регенерированы и будут просто тратить место в репозитории.
  • Каждый разработчик должен обновить и зафиксировать в системе контроля версий несколько раз в день. В основном, когда они завершили задачу, они работают и достаточно протестировали ее, чтобы знать, что она не содержит тривиальных ошибок.
  • Опять же: любой должен иметь возможность построить проект одним щелчком мыши. Это важно и позволяет легко протестировать всех. Большое преимущество, если непрограммисты (например, начальник) тоже могут это сделать. (Это дает им возможность увидеть, над чем именно работает команда.)
  • Каждый разработчик должен протестировать новую функцию или исправление ошибок, которые они добавляют , прежде чем они зафиксируют те в репозиторий.
  • Настройте сервер, который регулярно (через определенные промежутки времени) обновляет себя из репозитория и пытается собрать все в полном проекте . Если это не удается, он отправляет электронные письма команде вместе с последними коммитами в систему управления версиями (поскольку какой коммит не удалось собрать), чтобы помочь отладить проблему.
    Эта практика называется непрерывной интеграцией , а сборки также называются ночными сборками .
    (Это не означает, что разработчики не должны создавать и тестировать код на своих машинах. Как упоминалось выше, они должны это делать.)
  • Очевидно, каждый должен быть знаком с базовый дизайн / архитектура проекта, поэтому, если что-то нужно, разным членам команды не нужно изобретать велосипед. Написание повторно используемого кода - это хорошо.
  • Между членами команды требуется какое-то общение . Каждый должен хоть немного осознавать, что делают другие. Чем больше, тем лучше. Вот почему ежедневное выступление полезно в командах SCRUM.
  • Модульное тестирование - очень хорошая практика, которая позволяет автоматически тестировать базовые функции вашего кода.
  • Программное обеспечение для отслеживания ошибок (иногда называемое программное обеспечение для отслеживания времени ) является очень хорошим средством отслеживания ошибок и задач, стоящих перед разными членами команды. Это также хорошо для тестирования: таким образом альфа / бета-тестеры вашего проекта могут общаться с командой разработчиков.

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

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

Если этого недостаточно, вы также можете настроить его на автоматическое тестирование, если это возможно для рассматриваемого проекта.

Еще несколько мыслей

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

Некоторые полезные ссылки:
Непрерывная интеграция , Ежедневные сборки - ваши друзья , Контроль версий , Модульное тестирование

Примеры:

В настоящее время для управления версиями я обычно использую Git для своих личных проектов. Subversion также популярна, и, например, VisualSVN довольно легко настроить, если вы используете сервер Windows. Для клиента TortoiseSVN лучше всего подходит для многих людей. Вот сравнение Git и SVN.

Для программного обеспечения отслеживания ошибок очень популярны Jira и Bugzilla . Мы также использовали Mantis на предыдущем рабочем месте.

Для программного обеспечения непрерывной интеграции есть Teamcity для одного (также CruiseControl и его .NET ).

Ответьте на ваш вопрос «кто решает основной дизайн проекта?»

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

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

54
ответ дан 24 November 2019 в 11:42
поделиться

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

В более крупных организациях может быть специальный инженер по сборке и процесс. Такая организация обычно делает формальную сборку на регулярной основе, скажем, раз в день, используя любой исходный код, который проверяется. Процесс также обычно включает BVT (Build Validation Tests) и, возможно, некоторые регрессионные тесты. Разработчики берут код из репозитория, работают над своей частью локально, а затем проверяют его.

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

3
ответ дан 24 November 2019 в 11:42
поделиться

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

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

0
ответ дан 24 November 2019 в 11:42
поделиться

Обычно рекомендуется не проверять артефакты сборки в репозиторий. Репозиторий будет содержать дерево исходных текстов, конфигурацию сборки и т. Д. - все, что написано человеком. Инженеры-программисты извлекут копию своего кода в свою локальную файловую систему и создадут ее локально.

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

Вы можете изучить документацию по системе контроля версий (Subversion, CVS, Git и т. Д.) И по системе сборки (например, в Java есть Ant и Maven).

7
ответ дан 24 November 2019 в 11:42
поделиться

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

1
ответ дан 24 November 2019 в 11:42
поделиться

Я тоже студент, который недавно закончил курс программной инженерии, где весь семестр состоял из огромного группового проекта. Позвольте мне начать с того, что мы могли бы сделать с тремя людьми то, на что у 12 из нас ушел весь семестр. Работа с людьми - сложная вещь. Общение - это ключ.

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

**Я также рекомендую использовать систему отслеживания ошибок, например Redmine. Вы можете завести учетные записи для всех, назначать людям задания с разными приоритетами, а также отслеживать и видеть, разобрались ли люди с определенными проблемами или появились новые.

И, как уже было сказано, юнит-тестирование очень поможет. Желаю удачи! Надеюсь, это помогло :-)

11
ответ дан 24 November 2019 в 11:42
поделиться

Важные вещи:

  • План - Если люди не знают, куда они идут, они никуда не пойдут. Поэтому в начале любого проекта несколько человек (часто "седая борода" проекта) должны собраться вместе и разработать план; план не должен быть очень подробным, но он все равно необходим.
  • Система контроля версий - Без этого вы не сможете работать вместе. Вам также необходимо твердое обязательство, что если что-то не зафиксировано, то оно не считается. "О, это в одной из моих песочниц" - это просто жалкое оправдание.
  • Система отслеживания проблем - Вы не можете отслеживать эти вещи по папкам электронной почты. Он определенно должен быть основан на базе данных.
  • Система уведомлений - Людям нужно знать, когда что-то фиксируется в коде, который они поддерживают, или делаются комментарии к ошибкам, за которые они отвечают. Электронная почта может работать для этого, как и IRC (при условии, что все используют ее, конечно).
  • Система сборки - Не имеет значения, как это происходит, главное, чтобы одним действием вы могли получить полную сборку текущего состояния вещей, как вашей песочницы разработки, так и основного репозитория. Лучший вариант для этого зависит от того, какой язык (языки) вы используете.
  • Набор тестов - Набор тестов помогает людям избежать глупых ошибок. Он должен быть таким же простым для запуска, как и сборка (быть частью сборки - это хорошо). Обратите внимание, что тесты - лишь грубая замена корректности, но они гораздо лучше, чем ничего.

Наконец, вам нужно желание работать вместе над выполнением плана. Зачастую это самое трудное.

8
ответ дан 24 November 2019 в 11:42
поделиться

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

Сборка может выполняться либо каждым разработчиком при добавлении нового кода, либо периодически «сервером сборки». Последний подход требует дополнительных настроек, но помогает быстрее обнаруживать ошибки сборки.

2
ответ дан 24 November 2019 в 11:42
поделиться

Короткий ответ - "Это зависит от ситуации".

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

На этой ноте я настоятельно рекомендую изучить хотя бы несколько VCS, и у Джоэла Спольски есть отличный вводный учебник по Mercurial. Bazaar (мой личный выбор) похож, а Git - следующий по сходству, но, вероятно, более популярен, чем любой из них (по крайней мере, ATM). После этого у вас есть SVN, который довольно слаб в сравнении.

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

2
ответ дан 24 November 2019 в 11:42
поделиться

как программисты работают вместе над часть программного обеспечения в компании

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

Comic

5
ответ дан 24 November 2019 в 11:42
поделиться

Прежде всего, команды работают с использованием репозиториев (которые могут быть профессиональным контролем версий или просто набором каталогов, который считается «живым», однако система контроля версий - это де факто стандарт). Также то, как управляется стратегия проекта, зависит от того, как вы работаете (водопад, гибкая разработка и т. Д.). Если вы работаете в итерациях, вы создаете компоненты / плагины / модули / библиотеки, которые являются самоподдерживающимися, и выполняете модульное тестирование, пока оно не будет подписано как завершенное. Как команда, вы работаете в команде, что означает, что вы не работаете над всем проектом одновременно. Вместо этого вы получаете задачу выполнить внутри области проекта. В некоторых случаях вам нужно исправить код, который вам не принадлежит, но обычно это происходит при возникновении странного поведения. По сути, вы проводите тестирование разрабатываемых вами частей.

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

Надеюсь, это вам поможет!

1
ответ дан 24 November 2019 в 11:42
поделиться

. Это еще одна веская причина, по которой следует изучить проекты с открытым исходным кодом.

Ведущие разработчики, работающие над крупными проектами с открытым исходным кодом (такими как Chromium, Mozilla Firefox, MySQL, Popular Gnu Software), являются профессионалами. У них большой опыт, и эти проекты развивались годами с идеями сотен таких профессионалов.

Все, что другие упоминали в своих ответах (план, система контроля версий, система отслеживания проблем, система уведомлений, система сборки, набор тестов), можно найти в этих проектах OpenSource.

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

PS: Я тоже студент, и участие в проектах OpenSource - лучшее, что я когда-либо делал в своей жизни. Поверьте мне! вы тоже почувствуете то же самое.

0
ответ дан 24 November 2019 в 11:42
поделиться

Хорошим введением в метод использования системы управления версиями является HOWTO по управлению исходным кодом Эрика Синка http://www.ericsink.com/scm/source_control.html

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

0
ответ дан 24 November 2019 в 11:42
поделиться
Другие вопросы по тегам:

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