Jak programiści pracują razem nad projektem?

Zawsze programowałem sam, wciąż jestem studentem, więc nigdy nie programowałem z nikim innym, nawet nie używałem systemu kontroli wersji.

Pracuję teraz nad projektem, który wymaga wiedzy o tym, jak programiści współpracują nad oprogramowaniem w firmie.

Jak jest skompilowane oprogramowanie? Czy to z systemu kontroli wersji? Czy przez indywidualnych programistów? Czy to okresowe? Czy to kiedy ktoś decyduje się na budowę czy coś? Czy są jakieś testy, które są wykonywane aby upewnić się, że "działa"?

Wszystko da radę.

Author: Danubian Sailor, 2010-06-08

13 answers

Właściwie, istnieje tak wiele zmian w tych procesach, jak wiele firm istnieje. Znaczenie: każda firma ma nieco inne konwencje niż inne, ale istnieją pewne wspólne najlepsze praktyki, które są powszechnie stosowane w większości miejsc.

Najlepsze praktyki, które są zawsze przydatne

  • cały kod źródłowy projektu i wszystko, co jest wymagane do jego zbudowania, znajduje się pod kontrolą wersji (zwaną także kontrolą źródeł). Każdy powinien być możliwość zbudowania całego projektu jednym kliknięciem.
    Co więcej, niepotrzebne pliki (pliki obiektowe lub skompilowane pliki binarne) nie powinny być dodawane do repozytorium, ponieważ można je łatwo regenerować i po prostu marnować miejsce w repo.
  • Każdy programista powinien zaktualizowaći zatwierdzić do kontroli wersji kilka razy dziennie. Głównie po ukończeniu zadania, nad którym pracują i przetestowaniu go na tyle, aby wiedzieć, że nie zawiera trywialnych robaki.
  • Ponownie: Każdy powinien być w stanie zbudować projekt jednym kliknięciem. Jest to ważne i ułatwia testowanie dla wszystkich. Duża zaleta, jeśli nie-Programiści (np. szef) też są w stanie to zrobić. (To sprawia, że czują się w stanie zobaczyć, nad czym dokładnie pracuje zespół.)
  • Każdy programistapowinien przetestować nową funkcjonalność lub poprawkę błędu, którą dodaje, zanim zatwierdzi je do repozytorium.
  • skonfigurować serwer, który regularnie (w z góry określone interwały) aktualizuje się z repozytorium i próbuje zbudować Wszystkow cały projekt. Jeśli się nie powiedzie, wysyła e-maile do zespołu wraz z najnowszymi zatwierdzeniami do kontroli wersji (od którego zatwierdzenia nie udało się zbudować), aby pomóc w debugowaniu problemu.
    Ta praktyka jest nazywana ciągłą integracją , a buildy są również nazywane nightly builds .
    (nie oznacza to, że programiści nie powinni budować i testować kodu na własne maszyny. Jak wspomniano powyżej, powinni to zrobić.)
  • Oczywiście, Każdy powinien znać podstawowy projekt / architekturę projektu, więc jeśli coś jest potrzebne, różni członkowie zespołu nie muszą odkrywać koła na nowo. Pisanie kodu wielokrotnego użytku jest dobrą rzeczą.
  • potrzebny jest jakiś rodzaj Komunikacji pomiędzy członkami zespołu. Każdy powinien być świadomy tego, co robią inni, przynajmniej trochę. Im więcej, tym lepiej. To jest dlaczego daily standup {[7] } jest przydatny w zespołach SCRUM.
  • testowanie jednostkowe jest bardzo dobrą praktyką, która sprawia, że testowanie podstawowej funkcjonalności kodu odbywa się automatycznie.
  • a oprogramowanie do śledzenia błędów (czasami nazywane oprogramowanie do śledzenia czasu) jest bardzo dobrym sposobem na śledzenie, jakie są błędy i jakie zadania mają poszczególni członkowie zespołu. Jest to również dobre do testowania: testerzy alfa / beta twojego projektu mogą komunikować się z rozwojem drużyna tędy.

Te proste rzeczy zapewniają, że projekt nie wymknie się spod kontroli i wszyscy pracują nad tą samą wersją kodu. Proces integracji continuos pomaga, gdy coś idzie strasznie źle.

Uniemożliwia również wprowadzanie rzeczy, które nie są budowane do głównego repozytorium.
Jeśli chcesz dołączyć nową funkcję, która zajmie kilka dni, aby wdrożyć i zablokować inne osoby od budowania (i testowania) projektu, użyj gałęzie funkcja kontroli wersji.

Jeśli to nie wystarczy, możesz skonfigurować go do automatycznego testowania, jeśli jest to możliwe w danym projekcie.

Some more thoughts

Powyższa lista może być bardzo ciężka na pierwszy rzut oka. Polecam, abyś stosował się do tego na podstawie w razie potrzeby : zacznij od kontroli wersji i śledzenia błędów, a następnie skonfiguruj serwer ciągłej integracji, jeśli tego potrzebujesz. (Jeśli jest to duży projekt, jesteś niedługo będzie potrzebny.) Zacznij pisać testy jednostkowe dla najważniejszych części. Jeśli to nie wystarczy, napisz Więcej z nich.

Kilka przydatnych linków:
ciągła integracja, Daily builds to Twoi znajomi, Kontrola wersji, testy jednostkowe

Przykłady:

Do kontroli wersji używam obecnie Git do moich osobistych projektów. Subversion jest również popularny, a na przykład, VisualSVN jest dość łatwy w konfiguracji, jeśli używasz serwera Windows. Dla klienta, TortoiseSVN działa najlepiej dla wielu osób. oto porównanie pomiędzy Git i SVN.

Dla oprogramowania do śledzenia błędów, Jira i Bugzilla są bardzo popularne. Używaliśmy również Modliszki w poprzednim miejscu pracy.

Dla oprogramowania do ciągłej integracji istnieje Teamcity dla jednego (również CruiseControl i jego . NET odpowiednik są godne uwagi).

Odpowiedź na twoje pytanie " kto decyduje o głównym projekcie projektu?"

Oczywiście, to byłby główny programista.
W firmach wiodącym deweloperem jest osoba, która rozmawia z ludźmi finansowymi / marketingowymi projektu i decyduje o arcithecture zgodnie z możliwościami finansowymi firmy, planowanymi cechami wymagań użytkowników i dostępnym czasem.

Jest to zadanie złożone i zazwyczaj bardziej niż jedna osoba jest zaangażowana. Czasami członkowie zespołu są również proszeni o udział lub burzę mózgów na temat projektu całego projektu lub konkretnych części.

 54
Author: Venemo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:29

Jestem studentem, który niedawno ukończył kurs inżynierii oprogramowania, na którym cały semestr składał się z gigantycznego projektu grupowego. Pozwól, że zacznę od tego, że moglibyśmy zrobić z 3 osobami to, co zajęło nam 12 przez cały semestr. Praca z ludźmi to ciężka sprawa. Komunikacja jest kluczowa.

Zdecydowanie korzystaj z repozytorium. Każda osoba może zdalnie uzyskać dostęp do całego kodu i dodać/usunąć / zmienić cokolwiek. Ale najlepsze w subversion jest to, że jeśli ktoś złamie Kod, możesz wrócić do wcześniejszej wersji i ocenić, co poszło nie tak. Komunikacja jest jednak nadal kluczowa, wiedz, co robią Twoi koledzy z drużyny, aby nie było konfliktów. Nie siedź też na swoim kodzie, twórz szybkie, znaczące commity do repozytorium, aby były najbardziej skuteczne.

* * polecam również tracker błędów, takich jak Redmine. Możesz skonfigurować konta dla każdego i przypisać ludziom zadania o różnych priorytetach, a także śledzić i sprawdzać, czy ludzie zadbali o to niektórych problemów, lub jeśli pojawiło się więcej.

I, jak już zostało powiedziane, testy jednostkowe bardzo pomogą. Powodzenia! Mam nadzieję, że to pomogło: -)

 11
Author: Elaina R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 19:41:37

Wielkie rzeczy to:

  • plan - jeśli ludzie nie wiedzą dokąd idą, to nigdzie nie pójdą. Rozpoczęcie każdego projektu wymaga zatem kilku osób (często graybeards projektu), aby zebrać się i wymyślić plan; plan nie musi być bardzo szczegółowy, ale nadal jest wymagany.
  • system kontroli wersji - bez tego nie będziecie współpracować. Potrzebujesz również zdecydowanego zaangażowania, że jeśli rzeczy nie są zaangażowane, nie liczą się. "Och, jest w jednej z moich piaskownic" to tylko kiepska wymówka.
  • Issue tracker - nie możesz śledzić tych rzeczy przez foldery e-mail. Powinno być oparte na bazie danych.
  • System Powiadomień - ludzie muszą wiedzieć, kiedy rzeczy są zaangażowane w kod, który utrzymują lub komentarze są robione do błędów, za które są odpowiedzialni. E-mail Może działać w tym celu, podobnie jak IRC(oczywiście pod warunkiem, że wszyscy go używają).
  • Build system - nie naprawdę ważne Jak to się dzieje, o ile za pomocą jednej akcji możesz uzyskać pełną kompilację aktualnego stanu rzeczy, zarówno twojego deweloperskiego piaskownicy, jak i głównego repozytorium. Najlepsza opcja zależy od tego, jakiego języka(języków) używasz.
  • zestaw testów - zestaw testów pomaga uniknąć głupich błędów. Musi być tak łatwy do uruchomienia jak build(bycie częścią build jest dobre ). Zauważ, że testy są jedynie surowym substytutem poprawności, ale są o wiele lepsze niż nic.

Wreszcie, potrzebujesz gotowości do współpracy w celu realizacji planu. To zbyt często najtrudniejsza część.

 8
Author: Donal Fellows,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 20:00:22

Ogólnie dobrą praktyką jest nie sprawdzanie artefaktów wbudowanych w repozytorium. Repozytorium będzie zawierało drzewo źródłowe, konfigurację kompilacji itp. - wszystko, co napisał człowiek. Inżynierowie oprogramowania sprawdzą kopię swojego kodu na lokalnym systemie plików i zbudują go lokalnie.

Dobrą praktyką jest również posiadanie testów jednostkowych, które są uruchamiane w ramach procesu budowania. W ten sposób programista będzie natychmiast wiedział, czy jego zmiany unieważniły którekolwiek z testów jednostkowych, oraz będzie miał okazję je naprawić przed sprawdzeniem swoich zmian.

Możesz zajrzeć do dokumentacji dla systemu kontroli wersji (Subversion, CVS, Git, itp.) oraz dla systemu budowania (na przykład w Javie są Ant i Maven).

 7
Author: danben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 18:37:25

Jak Programiści współpracują nad oprogramowanie w firmie

Programiści nigdy nie pracują jako zespół. Drużyny są do bani. Dilbert jest zabawny nie dlatego, że jest komiczną postacią jak Goofy. Jest zabawny, bo jest prawdziwy i ludzie rozpoznają jego sytuacje.

Komiks

 5
Author: Andomar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-09 13:01:51

Nie ma standardu dla rzeczy, o które prosisz. Istnieją raczej konwencje, które w dużej mierze zależą od wielkości i dojrzałości organizacji. Jeśli jesteś w małej organizacji, powiedzmy kilku programistów, to prawdopodobnie sprawy będą nieco nieformalne, gdy poszczególni programiści będą kodować, kompilować i testować.

W większych organizacjach, może być dedykowany Inżynier budowy i procesu. Tego rodzaju organizacja zwykle robi formalne budować na regularnie, powiedzmy raz dziennie, używając dowolnego kodu źródłowego. Proces będzie również zwykle obejmować BVT (Build Validation Tests) i być może niektóre testy regresyjne. Programiści będą sprawdzać kod z repozytorium, pracować nad własną częścią lokalnie, a następnie go sprawdzać.

W największych organizacjach, takich jak Microsoft czy Google, będą one miały całkowicie oddaną grupę i pełne laboratorium, które będzie budować na bardziej lub mniej ciągłych podstawach, dzięki czemu wyniki każdego biegu dostępny. Organizacje te mają bardzo formalne procesy i procedury dotyczące tego, co i kiedy jest sprawdzane, jakie są procesy przeglądu kodu itp.

 3
Author: jfawcett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 18:43:38

Krótka odpowiedź - "to zależy".

Obecnie pracuję nad projektem sam, więc to ja buduję / używam VCS. Wiem o innych miejscach, że masz zespoły pracujące nad projektem razem przez shudder e-mail. Lub duże (+5) zespoły korzystające z VCS.

W tej kwestii, Gorąco polecam nauczenie się przynajmniej niektórych VCS, a Joel Spolsky ma świetny wstęp tutorial dla Mercurial. Bazaar (mój osobisty wybór) jest podobny, a potem Git jest najbliższy pod względem podobieństwo, ale chyba bardziej popularne niż którekolwiek (przynajmniej ATM). Po tym masz SVN, który jest dość słaby w porównaniu.

Właściwie, Joel mówi o większości twoich pytań-polecam przeczytać 10 lat archiwów, które ma - to bardzo przydatne informacje, a większość z nich odnosi się do twojej obecnej i bliskiej przyszłości sytuacji.

 2
Author: Wayne Werner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 18:45:46

Nie ma książki kucharskiej do pracy z rozwojem oprogramowania, ale ogólnie system kontroli wersji powinien być sercem Twojego systemu budowania, nawet jeśli pracujesz w projekcie, w którym jesteś jedynym programistą. Nawet w tym przypadku, możliwość przywrócenia wersji i przeczytania dziennika wersji jest bardzo mile widzianą pomocą w naprawianiu błędów. Nie jest to jedyna funkcja systemu kontroli wersji, ale to samo uzasadnia instalację, konfigurację i utrzymanie systemu kontroli wersji.

The budowanie może być wykonywane przez każdego dewelopera podczas dodawania nowego kodu lub okresowo przez "serwer budowania". Ostatnie podejście wymaga większej konfiguracji, ale pomaga szybciej wykryć błędy kompilacji.

 2
Author: gclello,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 22:18:53

Właściwe programowanie to głęboka rzecz, która czerpie ogromne korzyści z doświadczenia. Programowanie par jest jak uruchamianie wielu procesorów świadomości... jeden może przeoczyć coś widzianego przez drugiego i tak długo, jak komunikują się to może doprowadzić do wielkiego postępu.

 1
Author: Hardryv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 18:35:20

Przede wszystkim zespoły pracują przy użyciu repozytoriów (które mogą być profesjonalną kontrolą wersji lub po prostu kilkoma katalogami, które są uważane za "żywe", jednak system kontroli wersji jest de facto standardem). Ponadto, jak projekt jest zarządzany strategia zależy od tego, jak pracujesz (wodospad, zwinny, itp.). Jeśli pracujesz w iteracjach, budujesz komponenty / wtyczki/Moduły/biblioteki, które są samowystarczalne i wykonujesz testy jednostkowe, dopóki nie zostanie ono podpisane jako zakończone. Jako zespół, ty pracuj w zespole, co oznacza, że nie pracujesz nad całym projektem wszędzie w tym samym czasie. Zamiast tego otrzymujesz zadanie do wykonania wewnątrz obszaru projektu. W niektórych przypadkach musisz naprawić kod, który nie jest Twój, ale zwykle pojawia się, gdy wystąpi dziwne zachowanie. Zasadniczo, robisz testowanie części, które opracowujesz.

Pozwól, że ci to wyjaśnię. Jesteś w zespole pracowników budowlanych. Architekt przychodzi z planem budynku, brygadzista patrzy Co trzeba budować, a potem zatrudniać konstruktorów. Murarz robi ściany, sprawdza je pod kątem wytrzymałości i ładnie je skleja. Elektryk wykonuje wszystkie okablowanie wewnątrz budynku, aby prąd mógł płynąć. Każdy ma swoją pracę. Czasami elektryk może chcieć omówić z murarzem, czy niektóre ściany mogą być rzeźbione, ale zawsze w połączeniu z brygadzistą.

Mam nadzieję, że to jakaś pomoc dla Ciebie!

 1
Author: Shyam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 19:32:02

Zazwyczaj system kontroli źródła zawiera kod źródłowy i zazwyczaj nie ma binariów. Jeśli chcesz go zbudować i uruchomić, sprawdź kod i zbuduj go na lokalnej maszynie.

Niektóre miejsca uruchamiają nocne Kompilacje, aby upewnić się, że wszystko działa. Mogą nawet istnieć zautomatyzowane testy, które są uruchamiane po stronie serwera. Jeśli kompilacja lub cokolwiek innego nie powiedzie się, ktoś zostanie automatycznie powiadomiony.

 0
Author: Donald Miner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 18:38:08

Dobrym wprowadzeniem do metody wykorzystania kontroli źródeł jest HOWTO kontroli źródeł Erica Sinka http://www.ericsink.com/scm/source_control.html

W swoich przykładach używa SourceGear Vault, ponieważ go napisał i w ogóle, ale metody mogą być stosowane do innych systemów kontroli wersji.

 0
Author: ManiacZX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-10 07:23:38

To kolejny dobry powód, dla którego warto zajrzeć do projektów Open Source.

Wiodącymi programistami pracującymi w dużych projektach OpenSource (takich jak Chromium , Mozilla Firefox, MySQL , popularne oprogramowanie Gnu) są profesjonaliści. Mają duże doświadczenie i projekty te ewoluowały przez lata z pomysłami od setek takich profesjonalistów.

Wszystko, co inni wymienili w swoich odpowiedziach (Plan, system kontroli wersji, Issue tracker, system powiadomień , system budowania, Test suite,) można znaleźć w tych projektach OpenSource.

Jeśli naprawdę chcesz mieć praktyczne doświadczenie, zdecydowanie sugeruję, abyś przejrzał popularne i duże projekty OpenSource, a następnie zdobył źródło z dowolnego projektu (używając kontroli wersji) i zbudował je sam.

PS: jestem również studentem i zaangażowanie w projekty OpenSource jest najlepszą rzeczą, jaką zrobiłem w życiu. Zaufaj mi! ty też poczujesz to samo.

 0
Author: claws,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-14 10:20:52