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.
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:
Możesz chcieć wprowadzić jeszcze jeden etap (recenzję):
Dlatego do każdego biletu w Wdrożone stanu można przypisać recenzentem i tylko recenzji bilety awansuje do QA.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło