Šta obuhvata pregled koda (code review)?

Pregled koda (code review) neizostavni je deo svakog procesa razvoja softvera. Znamo da isti zadatak u programiranju može da se reši na više načina, ali je cilj svakog programera da pronađe onaj koji je najbolji.  U tome pomaže i proces pregleda koda, gde kolege gleda tuđi kod i daje predloge za poboljšanje. Tako  i on, ali i osoba koja pregleda kod uče i usavršavaju.

Što bi rekao naš narod, dve glave su pametnije od jedne.

O čemu treba sve da vodite računa kad vršite proces pregleda koda?

Izvukli smo najbitnije stavke po preporuci kompanije Google.

Primena

  • Da li rešenje zaista radi ono što treba da radi?
  • Postoji li scenario u kome rešenje neće da radi kako treba?
  • Da li je kod izmenjen na pravom mestu?
  • Treba li da se dodaju neke poruke o greškama (kada nešto ne treba da radi)?
  • Da li se rešenje može pojednostaviti?
  • Da li  se koristi nešto što ne mora da se koristi (programski okvir/API/biblioteka)?
  • Da li se kod dobro uklapa u postojeću arhitekturu?
  • Da li kod može lako da se održava?
  • Da li je izmena primenljiva u smislu kompatibilnosti sa prethodnim verzijama?
  • Da li promena utiče na druge delove sistema?
  • Da li su neke izmene hardkodovane? Uvek je bolje koristiti konstante ili enumeraciju.

Čitljivost

  • Da li se kod razume iz prve i zašto ne?
  • Da li čitljivost može da se poboljša promenom imena funkcija/klasa/promenjlivih?
  • Mogu li metode da se skrate?
  • Da li je kontrolni tok može da bude jasniji?
  • Ima li nepotrebnih komentara?
  • Da li se pridržavamo SOLID principa?
  • Da li slično rešenje već postoji u kodu i zašto ono nije upotrebljeno?

Upotrebljivost funkcionalnosti

  • Da li je predloženo rešenje razumljivo i upotrebljivo za krajnjeg korisnika?
  • Da li je intuitivno za upotrebu?

Testiranje

  • Da li kod može da se testira?
  • Da li su napisani adekvatni unit ili integracioni testovi?
  • Da li su napisani testovi dovoljni?
  • Kolika je pokrivenost koda testovima?
  • Da li će izmena uticati na postojeće testove?

Performanse

  • Da li će rešenje uticati na performanse celog sistema?
  • Da li postojeće rešenje može da se napiše tako da je efikasnije?

Bezbednost

  • Postoji li neki sigurnosni propust?
  • Da li su autorizacija i autentifikacija pravilno primenjene?
  • Da li promena otkriva neke osetljive informacije, poput ključeva, lozinki itd.?
  • Da li se pravilno primaju i šalju podaci spoljašnjima sistemima?
  • Postoji li mogućnost za SQL injekcije?