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


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

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

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

все будет делать.

13 75

13 ответов:

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

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

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

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

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

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

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

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

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

примеры:

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

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

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

ответ на ваш вопрос "кто решает основной конструкции проект?"

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

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

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

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

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

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

большие вещи:

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

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

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

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

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

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

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

Comic

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

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

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

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

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

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

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

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

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

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

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

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

Я надеюсь, что это поможет вам!

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

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

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

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

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

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

все остальные упомянутые в их ответах (план, система контроля версий, трекер проблем , система уведомлений , Build system, Test suite,) можно найти в этих проектах с открытым исходным кодом.

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

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