Czy na pewno code review to strata czasu?
Cóż może być nudniejsze i bardziej kosztowne niż przeglądanie cudzego kodu źródłowego? Chyba już tylko poprawnianie w nim błędów. Jeszcze kilka lat temu koncepcja przeglądania mojego kodu przez kolegów z zespołu była dla mnie totalną abstrakcją. Aczkolwiek, z czasem zrozumiałem, że w tym szaleństwie jest metoda. W kilku punktach chciałbym przedstawić benefity, które może wprowadzić Code Review do Twojego ekosystemu projektowego drogi Czytelniku.
Edukacja
Mam w zespole kolegę, które właśnie przez code review nauczył mnie na nowo pisać obiektowo. Było to trochę karkołomne, gdyż po pierwszym review dostałem ~30 komentarzy do kilku plików kodu, ale opłacało się. W ten sposób przekazał mi swoją wiedzę, cenne uwagi, które inaczej zatrzymałby dla siebie, a kod źródłowy pozostałby w ciężkim stanie. Edukacja w obrębie zespołu jest potrzebna, ale nie dokońca wiadomo jak bardziej "ogarnięci" programiści mogą dzielić się swoim doświadczeniem ze swoimi "młodszymi" kolegami (np. inną opcją jest programowanie w parach Junior-Senior). Code review stwarza takie możliwości, wspomniani Juniorzy to mogą być też nowe osoby w projekcie, które nie poznały jeszcze wszystkich meandrów kodu z którym pracują.
Standardy i jakość
Przy większych, a nawet kilku osobowych zespołach wymuszenie pewnych kowencji jest bardzo trudne, chyba, że wszystko zautomatyzujemy StyleCop'em i będziemy wymuszać pewne reguły na poziomie kompilacji. Nie zawsze to może być praktycznym rozwiązaniem, a review może być tutaj dobrym narzędziem do "nadzoru", ponieważ wtedy jest to idealny moment na "zwrócenie uwagi" swojemu koledze z zespołu, że w tym miejscu "dał ciała".
Inną sprawą, że dobry reviewer w pewnym sensie bierze częściową odpowiedzialność za jakość kodu źródłowego. Pomimo, że nie jest on autorem, podpisuje się imieniem i nazwiskiem, że kod, który widział jest "produkcyjny".
Często code review może odkryć więcej błędów, niż proces testowania. Jest to też ważny atut, który można w łatwy sposób przetłumaczyć na gotówkę.
Kanał komunikacyjny
W rozproszonych zespołach, np. nie pracujących razem w jednym pokoju, budynku, mieście, kraju komunikacja między-developerska jest znacząco utrudniona. Code review może być okazją, żeby przedyskutować pewne rozwiązania, ewentualnie zaproponawać bardziej eleganckie rozwiązanie danego problemu.
Narzędzia
Codre review możę być nieformalne i uwagi mogą być przesłane email'em, lub zapisane w systemie do rejestracji zmian lub bug'ów. Mi zdarzyło się używać Crucible'a, aczkolwiek nie jest on bezpłatny, ale warty swojej ceny, jest też trochę rozwiązań open-source, ale nie miałem z nimi żadnego doświadczenia.
Podsumowanie
Jeżeli masz w zespole spore zróżnicowanie umiejętności, problemy z wprowadzeniem pewnych konwencji, standardów to może na próbę trzeba dać szansę code review. Na koniec kilka wskazówek:
- Code Review powinno być wykonane przez doświadczonego programistę, mogą być też rotacje dyżurujących reviewer'ów, lub można ustalić pary programistów, które sprawdzają sobie kod.
- Code Review można wykonać po zakończonym zadaniu, lub po jakimś etapie zadania
- Najlepiej jak jedna osoba przegląda modyfikacje wykonane przez tylko jedną osobę, żeby nie wprowadzić zamieszania (tutaj przydaje się system do zarządzania code review i zmianami w repozytorium kodu).
- Każda zmiana, nawet drobna nadaje się do weryfikacji przez inną osobę, gdyż może to zapobiec potencjalnym błędom, które w przyszłości będą już trudniejsze i bardziej kosztowne do naprawienia.
Hope this helps.


Z jednej strony code-review może być źródłem wielu cennych uwag, jesli mowimy o review senior-junior. Z drugiej storny dobrzy juniorzy powinni sami palic sie do czytania kodu seniorow, zeby podpatrywac ciekawe rozwiazania:). To chyba najbardziej efektywna metoda nauki programowania - ogladac dobry kod i móc na jego temat porozmawiac z autorem.
OdpowiedzUsuń na zawszeAbsolutnie zgadzam się że code review to podstawa. U nas stosujemy zasadę, że każdy check-in/commit (jak zwał tak zwał) musi być poprzedzony review. I z mojego doświadczenia regularne przeglądy kodu mają jeszcze inną, ważniejszą zaletę. Każdy koduje, mając świadomość, że jego twórczość ktoś obejrzy. To naprawdę wymusza pisania kodu w innym stylu i zniechęca do kompromisów w stylu "nie chce mi się pisać testów".
OdpowiedzUsuń na zawszeNie zawsze jednak jest tak kolorowo. Mam na myśli to, iż firmy często, gęsto nie dbają o jakość kodu, lecz o ilość i szybkość wykonywania zadań. Moim zdaniem to zabija ducha dobrego programowania oraz przekazywania wzorców i dobrych praktyk.
OdpowiedzUsuń na zawsze:) a ja dodam: http://geekandpoke.typepad.com/geekandpoke/2012/01/coding-is-an-art.html
OdpowiedzUsuń na zawsze:)