Jaka będzie najlepsza praktyka, aby mieć „sprawdzony” kod źródłowy w repozytorium kontroli źródła?

12

Jaki będzie najlepszy sposób zarządzania sprawdzonym kodem źródłowym w repozytorium kontroli źródła? Czy kod źródłowy powinien przejść proces sprawdzania przed zalogowaniem się, czy też sprawdzenie kodu powinno nastąpić po zatwierdzeniu kodu? Jeśli sprawdzenie nastąpi po wpisaniu kodu do repozytorium, to jak należy to śledzić?

Vimal Raj
źródło

Odpowiedzi:

4

Google stosuje najlepsze praktyki sprawdzania kodu w każdym miejscu, jakie kiedykolwiek widziałem. Wszyscy, których tam spotkałem, są w pełni zgodni co do tego, jak robić recenzje kodu. Mantra to „przegląd wcześnie i często”.

Załóżmy, że używasz procesu, który wygląda tak, jak sugerował Graham Lee. (Którego procesu wcześniej użyłem sam.) Problem polega na tym, że recenzenci proszeni są o przyjrzenie się dużym fragmentom kodu. Jest to o wiele większy wysiłek i trudniej jest skłonić recenzentów do zrobienia tego. A kiedy to robią, trudniej jest ich zmusić do wykonania dokładnej pracy. Ponadto, gdy zauważą problemy z projektowaniem, trudniej jest zachęcić programistów do cofnięcia się i ponownego wykonania całego działającego kodu, aby było lepiej. Nadal łapiesz rzeczy, i to jest nadal cenne, ale nie zauważysz, że tracisz ponad 90% korzyści.

Dla kontrastu Google sprawdza kod przy każdym zatwierdzeniu, zanim będzie mógł przejść do kontroli źródła. Naiwnie wiele osób uważa, że ​​byłby to ciężki proces. Ale to nie działa w praktyce. Okazuje się, że znacznie łatwiej jest przeglądać małe fragmenty kodu w izolacji. Po znalezieniu problemów zmiana projektu jest o wiele mniejsza, ponieważ nie napisałeś jeszcze żadnego kodu wokół tego projektu. Powoduje to, że o wiele łatwiej jest dokonać dokładnego przeglądu kodu i znacznie łatwiej naprawić problemy zmienione.

Jeśli chcesz zrobić przegląd kodu, tak jak robi to Google (co naprawdę, naprawdę polecam), istnieje oprogramowanie, które Ci w tym pomoże. Google wydało swoje narzędzie zintegrowane z Subversion jako Rietveld . Go (język) został opracowany z wersją Rietveld, która jest zmodyfikowana do użytku z Mercurial. Istnieje przepisanie dla osób używających git o nazwie Gerrit . Widziałem także dwa komercyjne narzędzia zalecane do tego, Crucible i Review Board .

Użyłem tylko wewnętrznej wersji Rietveld firmy Google i byłem z niej bardzo zadowolony.

btilly
źródło
4

Techniką stosowaną w wielu zespołach jest:

  • programiści mogą integrować źródła we własnym oddziale lub lokalnym repozytorium bez recenzji
  • programiści mogą integrować się z magistralą / master bez recenzji
  • kod musi zostać przejrzany, a uwagi do przeglądu zaadresowane, zanim będzie można go zintegrować z magistralą / master w gałęzi kandydującej do wydania

Odpowiedzialność autora kodu za sprawdzenie oraz odpowiedzialność opiekuna oddziału za dopilnowanie, by scalony był tylko sprawdzony kod.

Istnieją narzędzia, które obsługują przegląd kodu, ale nigdy ich nie używałem. Śledzenie, kto dokonał przeglądu dla dowolnego scalenia, można wykonać w repozytorium. Użyłem właściwości svn i zadań perforowania dołączonych do commits, aby pokazać, kto co sprawdził.


źródło
2
+1: z wyjątkiem tego, że „autor kodu jest odpowiedzialny za sprawdzenie”. O ile zarząd nie zażąda dokonania przeglądu, przejdzie w nieistotność. Musi istnieć jakiś system nagród (nawet przypadkowy lub nieformalny), inaczej nie da się tego zrobić. Opiekun oddziału odpowiada komuś i ma jakąś nagrodę za dyscyplinę w sprawdzaniu recenzji kodu. Ten kawałek układanki jest również ważny. Czy mógłbyś opisać, dlaczego ludzie byliby tak dyscyplinowani?
S.Lott,
@ S.Lott w zespołach, nad którymi pracowałem, duma zawodowa. Ponadto, jeśli nie otrzymasz recenzji, kod nie zostanie zintegrowany (jak opisano powyżej). Dlatego Twój kod nie wchodzi do produktu i nie wykonałeś żadnej pracy tego dnia / tygodnia / iteracji. Jeśli programiści nie są zmotywowani do wykonywania swojej pracy, masz gorsze problemy niż zorganizowanie repozytorium kontroli źródła.
@Graham Lee: „Professional Pride”? Szydzę (ale nie mam wiele do zrobienia). Problem polega na tym, że „programiści nie są zmotywowani do wykonywania swojej pracy”. Wielu menedżerów obali dobry proces, żądając wydania przed terminem lub żąda włączenia dodatkowych funkcji. Jakie czynniki motywujące istnieją, aby zapobiec obaleniu procesu? Co powstrzymuje menedżera od powiedzenia „Potrzebujemy tego jutro, nie mamy czasu na recenzje kodu”?
S.Lott
@ S.Lott Nie wiem o tobie, ale nie wypuszczam kupy gówna bez względu na to, ile myśli kierownik, że wie lepiej o mojej pracy.
@Graham Lee: Staram się nie wypuszczać błędnego kodu. Moje pytanie brzmi: „co motywuje zespół do unikania przez kierownictwo niszczenia twojego procesu”. To dobry proces, chcę wiedzieć więcej.
S.Lott,
1

Nigdy nie rozdzieliłem kodu do przeglądu według kryteriów zatwierdzonych / niezaangażowanych - jedyne kryteria, jakie napotkałem, to to, że testy jednostkowe i testy integracyjne są zielone.

Jeśli chodzi o śledzenie, polecam zaktualizować przepływ w swoim ulubionym narzędziu do śledzenia problemów. Na przykład zamiast:

  • Właściciel produktu -> Analityk -> Deweloper -> Kontrola jakości -> Inżynier ds. Wydania

Możesz chcieć wprowadzić jeszcze jeden etap (recenzję):

  • Właściciel produktu -> Analityk -> Deweloper -> Recenzent -> Kontrola jakości -> Inżynier wydania

Dlatego do każdego biletu w Wdrożone stanu można przypisać recenzentem i tylko recenzji bilety awansuje do QA.

Andrey Taptunov
źródło
1

Mam tylko jedno doświadczenie w recenzowaniu kodu, więc nie mogę powiedzieć, jak dobrze jest.

Pracowałem z małą (~ 10-15) grupą programistów i korzystaliśmy z VS Team Foundation Studio. Zostaliśmy poproszeni o zatwierdzenie kodu raz dziennie, a przed każdym kodem zatwierdzenia miał zostać sprawdzony przez kogoś innego w grupie (mam nadzieję, że przez kogoś zaangażowanego w projekt). Podczas zatwierdzania nazwisko osoby było również zawarte w polu.

apoorv020
źródło
Dopuszczanie się tylko raz dziennie uderza mnie w czerwoną flagę. Przepraszam.
btilly
Może. Ja też byłem nieco zaskoczony. Jednak nie była to trudna i szybka reguła i można było „odkładać” lokalne zmiany tak, jak chcesz.
apoorv020
0

Pracowałem w zespole, który podczas kilku recenzji tygodniowo sprawdzał wszystko, co było zameldowane na zasadzie zmiany po zmianie. Oznaczało to, że nie zawsze byliśmy na bieżąco z recenzjami kodu, ale osiągnęliśmy to, co zamierzaliśmy osiągnąć.

Najpierw zapytaj, co chcesz osiągnąć, przeglądając kod. W naszym przypadku nie chodziło o łapanie programistów-idiotów, było raczej założenie o kompetencjach niż założenie o niekompetencji. Pozwoliło to zespołowi uzyskać przegląd innych obszarów systemu i umożliwiło skorygowanie niektórych wątpliwych decyzji projektowych, zanim stały się one kamieniem. Przez wątpliwe mam na myśli, że zawsze istnieje więcej niż jeden sposób na skórowanie kota, i nie wszyscy zdają sobie sprawę, że w skrzynce z narzędziami jest już nóż do skórowania kota.

Ian
źródło
0

Sposób, w jaki rozwiązywaliśmy recenzje kodu, polegał na sprawdzeniu każdego zadania naszego oprogramowania do śledzenia projektów. W tym czasie korzystaliśmy z Mantis i SVN. Nasze zobowiązania projektowe zostały powiązane z obydwoma systemami. Każde zatwierdzenie musiało być powiązane z zadaniem modliszki. Po zakończeniu zadania przypisano mu status „Gotowy do przeglądu”.

Elementy RFR były następnie odbierane przez każdego, kto miał trochę wolnego czasu na recenzje lub przydzielono do konkretnej osoby do recenzji. W piątki wszystkie pozycje RFR musiały zostać przejrzane przed końcem dnia, aby nie było przeniesień na następny tydzień.

Jedynymi problemami, które napotkaliśmy w tym procesie, były duże elementy, które miały mnóstwo plików. Aby sobie z tym poradzić, programista i recenzent spotkali się, a programista przejrzał zmiany, dopóki recenzent ich nie zrozumie. Dokonaliby przeglądu kodu razem.

Proces ten zepsuł się, gdy kierownictwo podyktowało, że jeśli zostało wykonane programowanie równorzędne, osobna weryfikacja kodu nie byłaby konieczna. Deweloperzy rozluźnili się na temat procesu i zaczęto wprowadzać małe głupie błędy. W końcu wróciliśmy do pierwotnego procesu i wszystko wróciło do siebie.

Amy Patterson
źródło
0

W moim zespole stosujemy praktykę od około roku, która wydaje się działać bardzo dobrze.

Nasza organizacja używa Perforce do kontroli wersji. Perforce (od roku temu) zawiera funkcję o nazwie Półki. Za pomocą półek mogę „odłożyć” moje zmiany dla konkretnego problemu. Są one przechowywane w systemie kontroli wersji, ale nie są rejestrowane. Następnie proszę innego programistę z mojego zespołu o przejrzenie kodu.

Drugi programista może zobaczyć moje oczekujące zmiany w Perforce z własnego komputera i porównać zmiany z najnowszymi wersjami. Może również „odsłonić” swój komputer lokalny, jeśli chce wypróbować moje zmiany. Po zakończeniu recenzji informuje mnie. Następnie sprawdzam kod za pomocą „Oceniony przez Boba” na końcu komentarza.

To działało dla nas naprawdę dobrze. Przede wszystkim recenzje kodu okazały się niezwykle pomocne. Dodatkowo funkcja półek Perforce pozwala nam przeprowadzać recenzje bez meldowania się lub żadnych większych trudności, nawet jeśli nasz zespół jest geograficznie rozpowszechniony - to bardzo ważne. I działa świetnie.

tyrel
źródło