Przygotowujesz się do przeglądu kodu jako programista?


10

Szukam tutaj pomysłów.

Przeczytałem artykuł Jak powinny być przeprowadzane recenzje kodu i Recenzje kodu, jakie są zalety? które były bardzo pouczające, ale nadal potrzebuję większej jasności w poniższym pytaniu.

Moje pytanie brzmi,

  1. Będąc programistą docelowym, możesz zasugerować kilka najlepszych praktyk, które programista może zastosować, zanim jego kod zostanie sprawdzony.

    • Obecnie ćwiczę następujące metody

      • PPT dla logicznego przepływu
      • Szczegółowe komentarze.

Problem: mimo że zastosowałem powyższe praktyki, nie pomagają one w przeglądzie. Problem, z którym się spotkałem, kiedy odnoszę się do pewnej logiki, wciąż szukam implementacji i przepływu, a zbyt wiele czasu jest marnowane w procesie i zaczynam działać na nerwy ludzi.

Myślę, że wielu programistów również przejdzie przez to, przez co przechodzę.


2
Tylko jeden: nie rób głupot w swoim kodzie.
BЈовић

1
KISS: jeśli kod jest prosty, twój mózg jest w stanie wszystko zarządzać.
mouviciel

kiedy przeglądasz kod w swojej firmie, kto zwykle prowadzi spotkanie? ty lub osoba, która ocenia twoją pracę? Pytam, ponieważ spotkanie poświęcone przeglądowi kodu w IMO nie jest miejscem, w którym można spędzać czas na wyszukiwaniu fragmentów kodu, nawet jeśli naprawdę szybko szukałeś rzeczy.
DXM,

@DXM Dziękujemy za odpowiedź. To moja TL prowadziłaby spotkanie.
Karthik Sreenivasan

@Karthik: k, ta część jest dobra. Zatem na podstawie pytania nie pytasz, jak napisać i wyprodukować wysokiej jakości kod, który jest gotowy do przeglądu. Zamiast tego Twoim głównym zmartwieniem jest: „Ciągle szukam implementacji i przepływu, a zbyt wiele czasu jest marnowane”. Czy możesz to rozwinąć? dlaczego szukacie, jeśli TL ma przed sobą kod i prowadzi spotkanie?
DXM,

Odpowiedzi:


8

Tak więc na podstawie dostarczonych szczegółów OP brzmi, jakby pytanie brzmiało: „jak nauczyć się własnego kodu, aby zapytać go o X lub wyjaśnić Y, mogę szybko odpowiedzieć”.

Kilka sugestii, które mogę wymyślić:

  • Podczas kodowania musisz poświęcić trochę czasu na naukę i zrozumienie własnego kodu. Może to być to, co twój TL próbuje ci przekazać w niewielu słowach. Będąc TL obecnego projektu, w ciągu ostatnich 11 miesięcy dokonałem wielu recenzji kodu i zauważam, że niektórzy programiści szukają „przykładowego kodu” w naszej własnej bazie kodu lub gdzie indziej (google itp.) i skopiuj / wklej. Osobiście nie mogę tego znieść, ponieważ podczas gdy ich kod przechodzi proste testy jednostkowe, nie rozumieją, co faktycznie robi, więc nigdy nie mamy gwarancji, że nie ma • niektóre przypadki graniczne lub spodziewane warunki awarii, które mogą wystąpić.

  • W następstwie poprzedniego oświadczenia, jeśli musisz skopiować / wkleić, spróbuj skopiować / wklej tylko kod, który wcześniej napisałeś i który rozumiesz. Z pewnością można „pożyczyć” pomysł innych ludzi, ale w takim przypadku przepisać kod po linii, ponieważ podczas pisania będziesz lepiej rozumieć, co robi. Jeśli korzystasz z zewnętrznych interfejsów API, nawet jeśli masz przykład, który używa tego interfejsu API, i tak poświęć kilka minut na znalezienie odniesienia i dowiedz się, jak działa ten interfejs API. Nie zakładaj tylko, że jeśli wcześniej działał, będzie działał również w twojej sytuacji.

  • Przeczytaj i naucz się kochać zasadę SUCHEGO . Wiele razy to, co kusi cię do skopiowania / wklejenia, może być umieszczone we wspólnej lokalizacji (osobna funkcja, osobna klasa, osobna biblioteka ...)

  • Przeczytaj i naucz się kochać SOLIDNE zasady, a gdy już to zrobisz, przejrzyj KISS, o którym wspomniał już mouviciel. Wszystkie te zasady mają na celu stworzenie bardzo zwięzłego, czystego i modułowego kodu. Jeśli masz w nich duże klasy i duże funkcje, to o wiele trudniej będzie znaleźć rzeczy, a na dodatek spróbować wyjaśnić, co robi kod. Z drugiej strony, jeśli podążasz (lub przynajmniej próbujesz podążać) SRP i czynisz każdą klasę / funkcję odpowiedzialną tylko za jedną rzecz, twój kod będzie mały i bardzo czytelny.

  • Odbierz kopię Clean Code . Bardzo dobra książka. Mówi o pisaniu kodu, który jest zrozumiały i łatwy do odczytania, utrzymania i rozszerzenia. Jeśli ćwiczysz pisanie łatwego do odczytania kodu, nie powinieneś mieć problemów z czytaniem własnego kodu w recenzjach kodu. I to jest zabawne, poprosiłem ludzi, aby przeczytali własny kod lub po prostu powiedzieli mi, co reprezentują zmienne, i nie mogli odpowiedzieć, mimo że napisali ten kod (zupełnie nowe klasy, a nie starsze wersje) zaledwie tydzień temu . Dobre nazewnictwo ma długą drogę.

  • Jeśli po wszystkich uproszczeniach i refaktoryzacji nadal masz funkcję, która musi wykonać jakiś algorytm, który nie jest bardzo widoczny, poświęć trochę czasu i napisz blok komentarza w tej funkcji wyjaśniającej algorytm. Nie tylko będzie to pomocne, gdy będziesz musiał zmodyfikować tę funkcję za 2 miesiące, ale jeśli wpadniesz w zasadzkę podczas przeglądu kodu, będziesz mógł po prostu przeczytać to, co napisałeś.

  • Jeśli po wszystkich powyższych elementach nadal masz problemy? jesteś nowy w zespole i zostałeś poproszony o pracę z wieloma starszymi kodami? W takim przypadku może być tak, że twój TL jest A $$ i możesz być proaktywny, prosząc go przed spotkaniem, aby poszedł spokojnie i nie marnował czasu wszystkich zaangażowanych. Gdy do zespołu dołączają nowe osoby, TL musi mieć wystarczającą cierpliwość, ponieważ praca na nowej platformie, nowym produkcie, nowych osobach, nowym środowisku wymaga dużej koncentracji od nowej osoby, a na początku tej osobie brakuje niektórych szczegółów. Działa zgodnie z przeznaczeniem i twój TL powinien to zaakceptować.

  • Jeśli mimo wszystko powyżej, nadal masz wrażenie, że masz okropne recenzje kodu. Porozmawiaj ze swoim TL. Czasami ludzie czują się źle z powodu natury spotkań związanych z recenzowaniem kodu, gdy w rzeczywistości TL jest z Ciebie w pełni zadowolony. Kiedy robię recenzje kodu, moim celem jest podkreślenie, co należy zmienić, upewnienie się, że rozumiesz zmiany i kontynuacja. Wiele razy nie mam czasu na uprzejmość, a niektórzy się bronią i próbują odpowiedzieć na każdy z moich komentarzy. W takich sytuacjach spotkanie przeglądu kodu kończy się, więc mam tendencję do ich przerywania i kontynuowania. Ogólnie po spotkaniu rozmawiałem z nowymi facetami, aby upewnić się, że rozumieją proces i że nie jest to nic osobistego. Po kilku recenzjach kodu ludzie są na ogół znacznie wygodniejsi.


+1 dla „nie kopiuj i wklej kodu, którego nie rozumiesz”. To nie do zniesienia! Również +1 za „porozmawiaj ze swoim TL”
MarkJ

@DXM Twoja umiejętność zrozumienia drobniejszych niuansów pytania była bardzo profesjonalna, nie wspominając już o swojej odpowiedzi, która jest bardzo pouczająca i opisowa. Umysł = rozwalony!
Karthik Sreenivasan

@DXM Z referencji „Z drugiej strony, jeśli będziesz przestrzegać (lub przynajmniej będziesz postępować zgodnie) SRP i sprawisz, że każda klasa / funkcja będzie odpowiedzialna tylko za jedną rzecz, twój kod będzie mały i bardzo czytelny”. Możesz dać mi znać, co robi * SRP myśli? * Widziałem inny ciekawy post na kodzie jasności tutaj .
Karthik Sreenivasan

1
@KarthikSreenivasan - W kontekście zastosował swoją praktykę, w której metoda lub klasa jest odpowiedzialna za jedną rzecz. Na przykład metoda sumowania liczb nie powinna również zwracać średniej. Znaleziono proste wyszukiwanie: en.wikipedia.org/wiki/Single_responsibility_principle
Ramhound,

10

Praktyki są różne, ale z mojego doświadczenia:

  • Nie rób nic specjalnego z kodem. To naturalne, że trochę poprawiasz kod, gdy dowiadujesz się, że zostanie on poddany przeglądowi, a naprawianie oczywistych rzeczy, takich jak błędy ortograficzne i nic nie szkodzi. Ale nie wchodź i nie dodawaj wielu szczegółowych komentarzy lub w inny sposób zmieniaj kod tylko dlatego, że jest on zaplanowany do przeglądu.

  • Kod jest przygotowywany i dystrybuowany do recenzentów z dużym wyprzedzeniem przed recenzją. Zwykle robi to neutralna strona trzecia, prawdopodobnie osoba ułatwiająca przegląd kodu. Po wydrukowaniu kod powinien być wystarczająco mały, aby wiersze nie były zbyt często zawijane, ale wystarczająco duży, aby każdy mógł go łatwo odczytać. Wydrukuj go w formacie poziomym, jeśli tego potrzebujesz.

  • Kod powinien być wydrukowany lub wyświetlony z numerami linii . Najlepiej, aby numer był kontynuowany od jednego pliku do następnego. O wiele łatwiej jest odnieść się do „linii 3502” niż „linii 238 foo.c”, a posiadanie liczb pozwala wszystkim rozmawiać o konkretnych liniach bez marnowania czasu na znajdowanie tych linii.

  • Zdecydowanie powinien być facylitator . Jego zadaniem jest zapobieganie zapadnięciu się recenzji w drobiazgi, zapobieganie personalizacji lub nagrzewaniu się oraz ścisłe ograniczanie czasu trwania recenzji.

  • Jako autor, powinieneś sam przejrzeć kod przed spotkaniem recenzującym. Zapisz zmiany, które sugerowałbyś, gdyby był to kod innej osoby. To pobudza pamięć do kodu, którego mogłeś nie oglądać w ciągu kilku dni, a także pomaga ćwiczyć patrzenie na swój kod krytycznym okiem. Po przejrzeniu kilku recenzji, zarówno jako recenzent, jak i autor, przekonasz się, że własne notatki będą bardziej pasować do notatek reszty grupy.

  • Przygotuj się do robienia notatek podczas przeglądu. To nie powinno być twoim głównym zmartwieniem - ktoś inny powinien rejestrować elementy akcji, na które grupa się zgadza, abyś mógł skupić się na wyjaśnianiu kodu i słuchaniu opinii. Ale będą chwile, kiedy otrzymasz cenne informacje zwrotne, które nie są przedmiotem akcji, i powinieneś je naprawić, gdy tylko się pojawią.

  • Pamiętaj, że to nie jest sprawa osobista. Podczas przeglądu trudno jest uniknąć poczucia obrony (i działania). Możesz wyjaśnić swój kod, jeśli uważasz, że został źle zrozumiany, ale bardziej niż cokolwiek innego, spróbuj po prostu słuchać.


Dodałbym jedno: „linia 3502” byłaby dużym czerwonym znakiem. Posiadanie bardzo długich plików jest zdecydowanie złą rzeczą.
BЈовић

2
@VJo: Caleb zasugerował, aby numery linii były kontynuowane w plikach, więc linia 3502 to tak naprawdę linia 238 foo.c.
Heinzi

Nie zgadzam się z ciągłością numeru linii między plikami. Dla mnie to po prostu mylące i niezręczne. W przypadku wykrycia jakichkolwiek problemów należy je śledzić według modułu (klasy, pliku, a może nawet metody). Ponadto podczas przeglądania kodu nie powinieneś przeglądać całego systemu, a raczej podsystemu, a nawet kilku klas lub plików, więc nie powinno być zbyt trudno śledzić, gdzie są zmiany.
Thomas Owens

1
@ThomasOwens Numery linii służą wyłącznie do łatwego opisania lokalizacji w recenzowanym kodzie podczas recenzji. Jest szybszy i mniej podatny na błędy niż użycie „pliku foo.c, linia 123”, a OP konkretnie prosi o poświęcenie mniej czasu na szukanie kodu. Zgadzam się, że problemy należy śledzić według pliku. IME, recenzje zwykle obejmują grupę zajęć, może dwie duże lub kilkanaście małych. Ponad 3500 wierszy to zbyt wiele, by je przejrzeć na raz - starałem się tylko wykazać, że liczby przechodzą od jednego pliku do drugiego.
Caleb,

Jeśli jesteś zorganizowany, nie powinno to mieć znaczenia. Dla mnie czuję, że to by mnie spowolniło. Byłem zaangażowany w przeglądy kodu i zawsze drukuję pliki, zszywam je według klasy / pliku, a następnie je czytam i adnotuję. Jeśli ktoś chce mi powiedzieć, gdzie mam szukać, chcę parę nazwa pliku / numer linii - to dla mnie byłoby znacznie łatwiejsze, zwłaszcza, że ​​moje IDE drukuje nazwę pliku w nagłówku / stopce na każdej stronie i drukuję numery wierszy dla poszczególnych plików.
Thomas Owens

3

Jeszcze jedna rzecz, którą należy dodać do pozostałych odpowiedzi: aby ułatwić formalnym recenzentom kodu, przeprowadzaj WIELE NIEformalnych recenzji kodu! Na przykład:

„Hej Bob, mogę pokazać ci, jak zaimplementowałem funkcję foo ()?” „Hej Steve, czy możesz rzucić okiem na ten schemat zajęć i dać mi znać, co myślisz?” „Hej Karen, czy możesz mi pomóc przemyśleć ten problem? Myślę, że mam dobre rozwiązanie, ale mógłbym skorzystać z twojej pomocy ...”

Uczyń to regularnym nawykiem. Kiedy angażujesz współpracowników na wczesnym etapie procesu projektowania, możesz:

  • Budować relacje
  • Uzyskaj nowy wgląd w problem
  • Popraw swoją umiejętność wyjaśnienia problemu / rozwiązania
  • Zaoszczędź czas później w formalnych przeglądach kodu

+1 za budowanie zespołu i popraw swoją umiejętność wyjaśnienia problemu. To naprawdę świetny pomysł!
Karthik Sreenivasan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.