Як програмісти працюють разом над проектом?


81

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

Зараз я працюю над проектом, який вимагає знань про те, як програмісти працюють разом над програмним забезпеченням у компанії.

Як складається програмне забезпечення? Це від системи контролю версій? Це окремими програмістами? Це періодично? Це коли хтось вирішує будувати чи щось інше? Чи проводяться тести, щоб переконатися, що вони "працюють"?

Будь-що зробить.


24
Я видалив тег "не пов'язаний з програмуванням", тому що те, як люди програмують командно, однозначно пов'язане з програмуванням.
Брендан Лонг

@Brendan Long: Дякую за повторну оцінку.
Лео Джведа

Відповіді:


60

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

Кращі практики, які завжди корисні

  • Весь вихідний код проекту та все, що потрібно для його створення, знаходиться під контролем версій (також званий вихідним контролем). Будь-хто повинен мати можливість побудувати весь проект одним клацанням миші.
    Крім того, непотрібні файли (об'єктні файли або скомпільовані двійкові файли) не слід додавати до сховища, оскільки їх можна відновити досить просто, і це просто витратить місце в репо.
  • Кожен розробник повинен оновити та зафіксувати кілька разів на день контроль версій. Здебільшого, коли вони закінчили завдання, над яким працюють, і протестували його досить, щоб вони знали, що воно не містить тривіальних помилок.
  • Знову ж таки: будь-хто повинен мати можливість побудувати проект одним клацанням миші. Це важливо і полегшує тестування для всіх. Велика перевага, якщо це можуть зробити і непрограмісти (наприклад, бос). (Це викликає у них відчуття можливості побачити, над чим саме працює команда.)
  • Кожен розробник повинен протестувати нову функцію або виправлення помилок, які вони додають, перш ніж зафіксувати їх у сховищі.
  • Налаштуйте сервер, який регулярно (через заздалегідь визначені інтервали) оновлює себе зі сховища і намагається побудувати все у всьому проекті . Якщо це не вдається, він надсилає команді електронні листи разом із останніми комітами до контролю версій (з якого коміту не вдалося створити), щоб допомогти налагодити проблему.
    Ця практика називається безперервною інтеграцією, а збірки також називаються нічними збірками .
    (Це не означає, що розробники не повинні будувати та тестувати код на власних машинах. Як уже згадувалося вище, вони повинні це робити.)
  • Очевидно, всі повинні бути знайомі з основним дизайном / архітектурою проекту, тому, якщо щось потрібно, різним членам команди не потрібно винаходити колесо. Написання багаторазового коду - це добре.
  • Потрібна якась комунікація між членами команди. Кожен повинен хоч трохи усвідомлювати, що роблять інші. Чим більше, тим краще. Ось чому щоденний стенд корисний у командах SCRUM.
  • Модульне тестування - це дуже хороша практика, яка робить тестування основних функціональних можливостей вашого коду автоматично.
  • Програмне забезпечення для відстеження помилок (яке іноді називають програмним забезпеченням для відстеження часу ) є дуже хорошим засобом відстеження того, які помилки існують і які завдання мають різні члени команди. Це також добре для тестування: альфа / бета-тестери вашого проекту можуть таким чином спілкуватися з командою розробників.

Ці прості речі гарантують, що проект не вийде з-під контролю, і всі працюють над однією версією коду. Процес інтеграції континуусів допомагає, коли щось йде дуже погано.

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

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

Ще кілька думок

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

Кілька корисних посилань:
Постійна інтеграція , Щоденні збірки - це ваші друзі , Контроль версій , Тестування модулів

Приклади:

Для контролю версій я сьогодні використовую Git для своїх особистих проектів. Subversion також популярний, і, наприклад, VisualSVN досить просто налаштувати, якщо ви використовуєте сервер Windows. Для клієнта TortoiseSVN найкраще працює для багатьох людей. Ось порівняння між Git та SVN.

Щодо програмного забезпечення для відстеження помилок, Jira та Bugzilla дуже популярні. Ми також використовували Mantis на попередньому робочому місці.

Для програм постійної інтеграції існує Teamcity для одного (також CruiseControl та його аналог .NET є помітними).

Відповідь на ваше запитання "хто вирішує основний дизайн проекту?"

Звичайно, це був би головний розробник.
У компаніях провідним розробником є ​​особа, яка розмовляє з фінансовими / маркетинговими людьми проекту та приймає рішення щодо суперечності відповідно до фінансових можливостей компанії, запланованих особливостей, вимог користувачів та часу, який доступний.

Це складне завдання, і, як правило, у ньому задіяно більше одного народу. Іноді членів команди також просять взяти участь або провести мозковий штурм щодо проекту цілого проекту або окремих частин.


4
Вам слід розглянути Git over Subversion. Subversion кращий, ніж CVS, а Git набагато вищий, ніж Subversion. Крім того, диверсія має деякі химерності, хоча і легка у вивченні. Особливо у формі плагінів. Незважаючи на те, що TortoiseSVN солодкий (при роботі в системах Windows).
Shyam

5
@Shyam - Насправді, я чув про Git. У нього є свої переваги, але я б не сказав "набагато вищий". Особливо, якщо врахувати, що у нього ще немає гідного клієнта Windows. Тим не менше, це більше особисті уподобання, тому я додав це до своєї відповіді.
Венемо,

@Venemo: Це не робить програмування нудним? Неможливість негайно протестувати свій код і доводиться чекати збірки, а потім бачити незначний ефект від написаного вами чи зовсім не впливати на нього? Крім того, хто вирішує головний дизайн проекту? (мова, функції, бібліотеки, фреймворки, архітектура тощо)
Лео Джведа

2
@Laith J: 1. Робота взагалі нудна 2. Терпіння - це чеснота. 3. Неважливо, хто розробляє проект, вирішує замовник. Незалежно від того, наскільки новаторською, фантастичною чи казковою ідеєю ви володієте. Результати. Працюй, щоб бути живим, не будь живим, щоб працювати.
Shyam

1
@Shyam - Я особисто нічого не знаю про Git і не суджу про речі, про які я мало що знаю. Не потрібно перетворювати це на полум'я. Тут відмінності добре пояснені: stackoverflow.com/questions/871/…, і я не перейду на Git, поки цієї простої та повсякденної справи не стане так важко досягти: stackoverflow.com/questions/2733873/… . Мені також більше подобається підхід SVN, і набагато простіше навчитися. А я люблю просте.
Венемо

13

Я також студент, який нещодавно закінчив курс програмної інженерії, де весь семестр складався з гігантського групового проекту. Дозвольте мені лише розпочати, сказавши, що ми могли зробити з 3 людьми те, на що нам знадобилося 12 семестр. Робота з людьми - важка справа. Спілкування є ключовим.

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

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

І, як уже було сказано раніше, модульне тестування дуже допоможе. Удачі! Сподіваюся, це допомогло :-)


здається, ви вивчили справді цінний урок у груповому проекті, який так добре зроблено у вашому коледжі. Працювати з людьми - це важко, але ви витратите на це багато часу. І це теж може бути корисною.
High Performance Mark

+1 для відстежувача помилок - той, який ми використовуємо (не знаємо інших), дозволяє нам додавати примітки, і ми можемо стежити за всією історією помилки і пам’ятати речі набагато краще, якщо щось з’являється через 3 місяці після того, як це було виправлено
Rox

Коли я був в університеті, кожен проект, в якому брала участь група, не виконувався через групову динаміку, спілкування чи слабкі зв’язки. Перевага, коли ти працюєш у компанії, полягає в тому, що абсолютно некомпетентні або невмотивовані колеги (зазвичай) не бавляться так довго.
Бенджол,

@Benjol - Не можу більше погодитись! Дякуємо за
відгук

8

Найважливіші речі:

  • План - Якщо люди не знають, куди йдуть, вони нікуди не поїдуть. Тому для початку будь-якого проекту потрібно декілька людей (часто проект сіробородого), щоб увійти в тупик і скласти план; план не повинен бути дуже детальним, але він все одно необхідний.
  • Система контролю версій - без цього ви не працюєте разом. Вам також потрібно твердо взяти на себе зобов’язання, що якщо речі не виконуються, вони не враховуються. "О, це в одній з моїх пісочниць" - це просто кульгавий привід.
  • Проблема відстеження - Ви не можете відстежувати ці речі за допомогою папок електронної пошти. Обов’язково має підтримуватися базою даних.
  • Система сповіщень - Люди повинні знати, коли речі виконуються кодом, який вони підтримують, або роблять коментарі до помилок, за які вони відповідають. Електронна пошта може працювати для цього, як і IRC (за умови, що всі користуються нею, звичайно).
  • Система побудови - насправді не має значення, як це відбувається, якщо однією дією ви можете отримати повну збірку поточного стану речей, як пісочниці вашої розробки, так і основного сховища. Найкращий варіант для цього залежить від мови, якою ви користуєтесь.
  • Тестовий пакет - Тестовий пакет допомагає людям уникати дурних помилок. Він повинен бути таким же простим у виконанні, як і збірка (бути частиною збірки - це добре ). Зауважте, що тести - це лише груба заміна правильності, але вони набагато кращі, ніж нічого.

Нарешті, вам потрібна готовність спільно працювати над виконанням плану. Це занадто часто важка частина.


Деталізовані вимоги можуть допомогти, як і система безперервної інтеграції, але вони насправді є аспектами інших перерахованих речей.
Donal Fellows

8

як програмісти працюють над програмним забезпеченням компанії

Розробники ніколи не працюють в команді. Команди смоктати. Ділберт смішний не тому, що він такий комічний персонаж, як Гуфі. Він смішний, бо він справжній, і люди впізнають ситуації, в яких він перебуває.

Комічний


7

Як правило, хорошою практикою є не перевіряти артефакти збірки у сховищі. Сховище буде містити дерево джерел, конфігурацію збірки тощо - все, що написано людиною. Інженери-програмісти перевірять копію свого коду на свою локальну файлову систему та побудують її локально.

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

Можливо, ви захочете переглянути документацію щодо системи контролю версій (одна з Subversion, CVS, Git тощо) та системи збірки (наприклад, в Java є Ant і Maven).


Якщо результатів збірки немає у сховищі, як розробники великих проектів зможуть запустити тестову збірку? Я не впевнений, що це лише моя ментальність, бо я завжди працював на самоті, але завжди перевіряю, чи все працює, коли запускаю програму.
Лео Джведа

Тестові збірки (і дані, створені в процесі збірки) будуть або згруповані в програмі встановлення, або у вигляді плоскої файлової системи на спільній мережі, щоб їх можна було просто скопіювати. Це корисно там, де у вас є спеціальні тестери, щоб вони могли надавати відгуки про виправлення помилок тощо
graham.reeds

3

Не існує стандартів щодо речей, про які ви запитуєте. Швидше, існують домовленості, і вони в значній мірі залежать від розміру та зрілості організації. Якщо ви в невеликій організації, скажімо кілька програмістів, то, мабуть, все буде дещо неформально, коли окремі розробники виконують кодування, збірки та тестування.

У більших організаціях може існувати спеціальний інженер та процес збірки. Такі організації зазвичай регулярно виконують офіційні збори, скажімо, один раз на день, використовуючи будь-який вихідний код, який реєструється. Процес також зазвичай включає BVT (тести перевірки збірки) і, можливо, деякі регресійні тести. Розробники перевіряють код із сховища, працюють над власною частиною локально, а потім перевіряють його.

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


Як тоді розробники в MS та Google тестують свій код? Погодьмось, незалежно від того, що ми робимо, якщо ми не скомпілюємо та не запустимо наш код, ми ніколи не можемо бути впевнені, що він працює.
Лео Джведа

Як і вище, це залежить від команди, в якій ви працюєте. Найбільші команди, як Windows, матимуть велику і складну структуру гілок, яка полегшує локальне тестування окремих виправлень, з ранньою ідентифікацією проблем інтеграції, коли зміна переміщується вгору по гілках, доки вона не потрапить до WinMain. Це те, що вам потрібно зробити, коли у вас працює щось на зразок 5000 розробників та SDET, що працюють над продуктом. До речі, SDET в MS насправді програмують багато. Їх тестовий код перевіряється поряд із кодом товару і повинен відповідати подібним стандартам кодування та якості.
jfawcett

3

Не існує кулінарної книги для роботи з розробкою програмного забезпечення, але загалом система контролю версій повинна бути серцем вашої системи збірки, навіть якщо ви працюєте в проекті, де ви є єдиним розробником. Навіть у цьому випадку можливість повернення версій та читання журналу версій дуже вітається під час виправлення помилок. Це не єдина особливість системи контролю версій, але лише це виправдовує встановлення, налаштування та обслуговування системи контролю версій.

Збірку може виконувати або кожен розробник при додаванні нового коду, або періодично "сервер збірки". Останній підхід вимагає додаткових налаштувань, але допомагає виявити помилки побудови раніше.


2

Коротка відповідь - "Це залежить".

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

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

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


SVN, мабуть, найкорисніший для вивчення, оскільки більшість людей не використовують ці новомодні розподілені VCS (принаймні у бізнесі).
Брендан Лонг

1
Майже будь-яка система контролю версій краща, ніж жодна. Виняток становлять VSS, RCS та SCCS; ніхто не повинен використовувати такі в даний час і вік. (Якби ніхто насправді ними не користувався, але це вже інша історія.)
Donal Fellows

@Brendan Long: Люди використовують "ті новомодні розподілені VCS" (зокрема, git у моєму випадку) у бізнесах, якими я працював протягом останніх кількох років.
PTBNL

@Donal Felllows: RCS - це єдиний VCS у вашому списку, який я використовував, але я думаю, що використовувати його було б краще, ніж нічого. Я погоджуюсь із вашим ширшим твердженням, що було б краще перейти до нового.
PTBNL

@PTBNL: Перенести з RCS на CVS дуже просто. Головне, від чого вам слід уникнути, - це те, що сховище замикається тим, хто пішов у відпустку! Я не сумніваюся, що існують кращі системи контролю версій, ніж CVS, але це, безумовно, може працювати на практиці.
Donal Fellows

1

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


5
Це не має ніякого відношення до питання.
danben

1
/ не погоджуюсь - за моїми порадами, парне програмування є найцікавішим і часто навіть найпродуктивнішим виданням "програмістів, що працюють разом над проектом" ... про що, по суті, йшлося. За загальним визнанням, це мікрокосм, але справді мій улюблений.
Hardryv

1

Перш за все, групи працюють, використовуючи сховища (це може бути професійний контроль версій, або просто купа каталогів, що вважається «реальним», однак система контролю редагувань є фактичним стандартом). Крім того, те, як стратегія управління проектом залежить від того, як ви працюєте (водоспад, спритний тощо). Якщо ви працюєте в ітераціях, ви створюєте компоненти / плагіни / модулі / бібліотеки, які є автономними, і ви виконуєте модульне тестування, доки його не буде підписано як завершене. Як команда, ви працюєте в команді, що означає, що ви не працюєте над усім проектом скрізь одночасно. Натомість ви отримуєте завдання виконати всередині сфери проекту. Іноді вам доводиться виправляти код, який не є вашим, але це зазвичай виникає, коли відбувається дивна поведінка. В основному, ви проводите тестування деталей, які розробляєте.

Дозвольте мені пояснити це для вас. Ви в команді будівельників. Архітектор пропонує план будівлі, бригадир дивиться, що потрібно для будівництва, а потім наймає будівельників. Муляр робить стіни, перевіряє їх на міцність і красиво клеїть. Електрик робить всю проводку всередині будівлі, щоб електрика могла текти. У кожної людини своя робота. Іноді електрик може захотіти обговорити з муляром, чи можна вирізати певні стіни, але завжди спільно з майстром.

Сподіваюся, це допоможе вам!


0

Як правило, система управління джерелом містить вихідний код і, як правило, не має двійкових файлів. Якщо ви хочете побудувати його та запустити, ви перевірите код і побудуєте його на своїй локальній машині.

Деякі місця виконуються щоночі, щоб переконатися, що все працює. Можуть бути навіть деякі автоматизовані тести, які виконуються на стороні сервера. Якщо збірка або щось інше не вдається, хтось отримує автоматичне сповіщення.


0

Хорошим вступом до методу використання джерела керування є Ерік Сінк, Source Control HOWTO http://www.ericsink.com/scm/source_control.html

У своїх прикладах він використовує SourceGear Vault, оскільки він це написав і все інше, але методи можна застосовувати до інших систем контролю версій.


0

Це знову одна з вагомих причин, чому слід розглядати проекти з відкритим кодом.

Провідні розробники, які працюють у великих проектах OpenSource (таких як Chromium, Mozilla Firefox, MySQL, Popular Gnu Software), є професіоналами. Вони мають великий досвід, і ці проекти розвивались роками завдяки ідеям сотень таких професіоналів.

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

Якщо ви дійсно хочете отримати досвід, я настійно рекомендую вам пройти кілька популярних та великих проектів OpenSource, а потім отримати джерело з будь-якого проекту (за допомогою Контролю версій) і створити його самостійно.

PS: Я також студент і залучення до проектів OpenSource - найкраще, що я коли-небудь робив у своєму житті. Довірся мені! Ви також будете відчувати те саме.


Згадування OpenSource - це один із дивних способів його написання - коли вони перевіряють вихідні файли з інформацією про підключення до бази даних тощо, як вони захищають цю інформацію від людей, які можуть захотіти зіпсувати щось?
Лео Джведа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.