Praktyczne
code reviews
t
ec
h it
k
rc
re
lA
Ma
ca
an chni
s ti
e
ba
sT
Se
tem
ys
l S
na
ter
In
!
• ponad	
  12	
  lat	
  doświadczenia	
  w	
  
programowaniu	
  
• zwolennik	
  automatyzacji	
  
procesów	
  
• TDD	
  ...
+
Ochotnik

+
Projekt

+
Miejsce

Światowa sieć klubów programistycznych
dla dzieci od 9 do 11 roku życia

https:/
/www.co...
Dla kogo?
Wszystkie wydarzenia i
postacie w tej
prezentacji są
fikcyjne.
!

Jakiekolwiek
podobieństwo jest
całkowicie
przypadkowe.
Na...
Roman “Potrzebuję to na wczoraj” – 	
  
Właściciel firmy

Stefan “Ma być zrobione” –
Kierownik

Zespół

	
  
“Nocny Marek” – programista

Krzysiek “Haker” – 	
  
doświadczony programista

Paweł “Będzie dobrze” – praktykant

Zespół
Jak długo zajmie wam skończenie
tego projektu?

Hmm, projekt, programowanie,
code review, testy…

Code review? A po co cod...
Ok. Prawie gotowe! Jeszcze tylko
code review...

Hmmm… ale wszyscy mają kupę roboty! Nie ma
nikogo wolnego. Dajmy sobie sp...
Cześć Stefan,
Potrzebuję Marka, żeby zrobił mi to
code review.

Marek pracuje nad czymś ważnym teraz,
ale Paweł może na to...
Ciągle robimy te code review, patrzymy
na ten kod, spędzamy nad tym masę
czasu, a za każdym razem jak
wypuszczamy nowy pro...
Code review
Marek - programista

21:31 (0 minut temu)

do	
  Krzysiek	
  -­‐	
  inspektor

Krzysiek, 	
  

!

Możesz prosz...
Tylko	
  nie	
  (e)mail!

Prośba o code review
Systemy	
  śledzenia	
  błędów	
  
-­‐ JIRA	
  
-­‐ Bugtrak	
  
-­‐ ManFs	
  
!

Narzędzia	
  
-­‐ Crucible/Fisheye	
  
-­...
Code review
Marek - programista

21:31 PM (13 minut temu)

do	
  Krzysiek	
  -­‐	
  inspektor
Krzysiek, 	
  

!

Możesz pr...
Systemy	
  kontroli	
  wersji	
  
• konkretne	
  zestawy	
  
zmian	
  (changesets)	
  
• unikanie	
  konkretnych	
  
commi...
Code review
21:31 (25 minut temu)

Marek - programista

Krzysiek, Możesz proszę an to spojrzeć? Właśnie skończyłem nad tym...
Co
i
!

dlaczego?
Po co?
Paweł	
  “Będzie	
  dobrze”
Tradycyjne	
  komentarze:
•
•
•
•

ma	
  sens	
  
działa	
  
poprawne	
  syntaktycznie	
  
ok
...
Krzysiek	
  “Doświadczony	
  Inspektor”

Używane	
  narzędzia:
•
•
•
•
•
•
•

PHP	
  linter	
  
PHP	
  Code	
  Sniffer	
  
...
$ php -l Libraries/Action.class.php 	
  
No syntax errors detected in Libraries/Action.class.php
$ php -l Libraries/Action...
 

$ phpunit
PHPUnit 3.6.12 by Sebastian Bergmann.

	
  

!
Configuration read from phpunit.xml.dist	
  
!

	
  
	
  
	
  ...
PHP_Depend 0.10.6 by Manuel Pichler

!

Parsing source files:
....................

	
  

	
  

	
  

20

!

Executing Cyc...
Statyczna analiza kodu z PHP Mess Detector
Statyczna analiza kodu z SonarQube
Statyczna analiza kodu z SonarQube
Statyczna analiza kodu z SonarQube
Statyczna analiza kodu z SonarQube
Statyczna analiza kodu z SonarQube
Statyczna analiza kodu z SonarQube
Krzysiek	
  “Doświadczony	
  Inspektor”

Sprawdza:
• przejrzystość	
  kodu	
  
• wydajność	
  
• nadmierna	
  złożoność	
 ...
• Przekazywanie	
  wiedzy	
  
• Szkolenie	
  nowych/początkujących	
  
programistów	
  
• Wczesne	
  wykrywanie	
  błędów	...
PROGRAMIŚCI

• Zaakceptuj	
  fakt,	
  że	
  każdy	
  popełnia	
  błędy	
  (ty	
  też!)	
  
!
• “dziurawy”	
  kod	
  !=	
  ...
INSPEKTORZY

• Prawdziwy	
  autorytet	
  jest	
  poparty	
  wiedzą	
  i	
  
doświadczeniem,	
  a	
  nie	
  stanowiskiem	
 ...
• Gdzie	
  szukać	
  kodu	
  
• Opis	
  zmiany	
  

– Co	
  zostało	
  zmienione?	
  

• Powód	
  zmiany	
  
– Dlaczego	
 ...
– W	
  razie	
  wątpliwości	
  proś	
  o	
  pomoc	
  	
  

• KwesFonuj	
  implementację	
  
– Upewnij	
  się,	
  że	
  pro...
– systemy	
  śledzenia	
  błędów,	
  np.	
  Jira,	
  Trac,	
  ManFs,	
  itd.	
  
– narzędzia	
  do	
  inspekcji	
  kodu,	
...
• Używaj	
  narzędzi,	
  automatyzuj	
  

• Oceń	
  wpływ	
  na	
  inne	
  systemy	
  
• Upewnij	
  się,	
  że	
  kod	
  j...
hgp://www.atlassian.com/angrynerds/

hgp://georgegant.deviantart.com/art/Angry-­‐Nerds-­‐217554774	
  
hgp://www.flickr.com...
The	
  Ten	
  Commandments	
  of	
  Egoless	
  Programming:	
  hgp://alturl.com/q4dpa	
  

!

The	
  Code	
  review:	
  hg...
Pytania?
h"ps://	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /9759

Pytania
Praktyczne code reviews - PHPConPl
Upcoming SlideShare
Loading in …5
×

Praktyczne code reviews - PHPConPl

4,302 views

Published on

Wbrew powszechnym opiniom, nie tak prosto jest zrobić dobre Code Review. Robione w pośpiechu, tylko po to by je "odbębnić", często stwarza więcej szkody niż pożytku. Opowiem wam dlaczego code review jest ważne i jak wykorzystać ten proces aby upewnić się, że napisany kod jest najwyższej jakości. Będę nie tylko mówił o tym kto powinien robić code reviews, i dla kogo, jakie informacje są potrzebne do przeprowadzenia skutecznego code review, ale także jak zrobić dobre code review w najkrótszym możliwym czasie.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,302
On SlideShare
0
From Embeds
0
Number of Embeds
1,919
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Praktyczne code reviews - PHPConPl

  1. 1. Praktyczne code reviews t ec h it k rc re lA Ma ca an chni s ti e ba sT Se tem ys l S na ter In
  2. 2. ! • ponad  12  lat  doświadczenia  w   programowaniu   • zwolennik  automatyzacji   procesów   • TDD  i  CI   • w  miarę  wolnego  czasu   wspiera  open  source h"ps://joind.in/9759 @proofek
  3. 3. + Ochotnik + Projekt + Miejsce Światowa sieć klubów programistycznych dla dzieci od 9 do 11 roku życia https:/ /www.codeclub.org.uk/ Dzieci
  4. 4. Dla kogo?
  5. 5. Wszystkie wydarzenia i postacie w tej prezentacji są fikcyjne. ! Jakiekolwiek podobieństwo jest całkowicie przypadkowe. Na początek
  6. 6. Roman “Potrzebuję to na wczoraj” –   Właściciel firmy Stefan “Ma być zrobione” – Kierownik Zespół  
  7. 7. “Nocny Marek” – programista Krzysiek “Haker” –   doświadczony programista Paweł “Będzie dobrze” – praktykant Zespół
  8. 8. Jak długo zajmie wam skończenie tego projektu? Hmm, projekt, programowanie, code review, testy… Code review? A po co code review? Co, programować nie umiecie? Poza tym przecież będą testy...? Sytuacja 1
  9. 9. Ok. Prawie gotowe! Jeszcze tylko code review... Hmmm… ale wszyscy mają kupę roboty! Nie ma nikogo wolnego. Dajmy sobie spokój i puśćmy to prosto do testów… Sytuacja 2
  10. 10. Cześć Stefan, Potrzebuję Marka, żeby zrobił mi to code review. Marek pracuje nad czymś ważnym teraz, ale Paweł może na to spojrzeć. Ale Paweł jest stażystą i nie zna jeszcze tego systemu... Chcesz mieć to code review zrobione czy nie?! Mam tylko Pawła. Sytuacja 3
  11. 11. Ciągle robimy te code review, patrzymy na ten kod, spędzamy nad tym masę czasu, a za każdym razem jak wypuszczamy nowy produkt mamy problemy. Marnujemy tylko czas! Sytuacja 4
  12. 12. Code review Marek - programista 21:31 (0 minut temu) do  Krzysiek  -­‐  inspektor Krzysiek,   ! Możesz proszę spojrzeć na to? Właśnie skończyłem nad tym pracować.   Zmiany są w moim repozytorium w gałęzi “problem-naprawiony”.   ! Dzięki   ! ---   Marek Kliknij tutaj, aby Odpowiedz or Przekaż dalej
  13. 13. Tylko  nie  (e)mail! Prośba o code review
  14. 14. Systemy  śledzenia  błędów   -­‐ JIRA   -­‐ Bugtrak   -­‐ ManFs   ! Narzędzia   -­‐ Crucible/Fisheye   -­‐ Gerrit   -­‐ Github   -­‐ Phabricator Jak poprosić?
  15. 15. Code review Marek - programista 21:31 PM (13 minut temu) do  Krzysiek  -­‐  inspektor Krzysiek,   ! Możesz proszę spojrzeć na to? Właśnie skończyłem nad tym pracować.   Zmiany są w moim repozytorium w gałęzi “problem-naprawiony”.   ! Dzięki   ! ---   Marek Krzysiek - Inspektor do  Marek  -­‐  programista 21:44 (0 minut temu) Marek,   ! Spoko, tylko na bazie jakiej gałęzi stworzyłeś tą gałąź?   Bez tego nie dam rady zidentyfikować zestawu zmian.   ! ---   Krzysiek Kliknij tutaj, aby Odpowiedz or Przekaż dalej
  16. 16. Systemy  kontroli  wersji   • konkretne  zestawy   zmian  (changesets)   • unikanie  konkretnych   commitów   • inspekcja  łatek   (patches)  ryzykowna,   chyba  że   zautomatyzowana Na co zwracać uwagę?
  17. 17. Code review 21:31 (25 minut temu) Marek - programista Krzysiek, Możesz proszę an to spojrzeć? Właśnie skończyłem nad tym pracować… Krzysiek - Inspektor 21:44 (12 minut temu) do  Marek  -­‐  programista Marek,   ! Spoko, tylko na bazie jakiej gałęzi stworzyłeś tą gałąź?   Bez tego nie dam rady zidentyfikować zestawu zmian.   ! ---   Krzysiek Marek - programista 21:56 PM (0 minut temu) do  Krzysiek  -­‐  inspektor Krzysiek,   ! No tak, przepraszam. Gałąź stworzyłem na podstawie mastera.   ! ---   Marek
  18. 18. Co i ! dlaczego? Po co?
  19. 19. Paweł  “Będzie  dobrze” Tradycyjne  komentarze: • • • • ma  sens   działa   poprawne  syntaktycznie   ok Tak też można…
  20. 20. Krzysiek  “Doświadczony  Inspektor” Używane  narzędzia: • • • • • • • PHP  linter   PHP  Code  Sniffer   PHPUnit   phpDocumentor   PHP  Depend   PHP  Mess  Detector   SonarQube Ale można i tak…
  21. 21. $ php -l Libraries/Action.class.php   No syntax errors detected in Libraries/Action.class.php $ php -l Libraries/Action.class.php   Errors parsing Libraries/Action.class.php $ phpcs –standard=Zend Libraries/Action.class.php !         FILE: /Volumes/git/modules/AccountChange/Libraries/Action.class.php -------------------------------------------------------------------------------FOUND 2 ERROR(S) AND 1 WARNING(S) AFFECTING 3 LINE(S) -------------------------------------------------------------------------------44 | ERROR | Protected member variable "arrOptions" must contain a leading | | underscore 66 | WARNING | Line exceeds 80 characters; contains 82 characters 97 | ERROR | Line exceeds maximum limit of 120 characters; contains 135 | | characters --------------------------------------------------------------------------------       ! Time: 0 seconds, Memory: 5.75Mb Automatyzacja - PHP linter i PHP CodeSniffer        
  22. 22.   $ phpunit PHPUnit 3.6.12 by Sebastian Bergmann.   ! Configuration read from phpunit.xml.dist   !       ..................IIII................IIIIIIIIIIIIIIIIIIIIIII.. 63 / 240 ( 26%) .............................................I.....I........... 126 / 240 ( 52%) ............................................................... 189 / 240 ( 78%) ...................................................   ! Time: 02:01, Memory: 26.75Mb   OK, but incomplete or skipped tests! Tests: 240, Assertions: 514, Incomplete: 29. Unit testy z PHPUnit
  23. 23. PHP_Depend 0.10.6 by Manuel Pichler ! Parsing source files: ....................       20 ! Executing CyclomaticComplexity-Analyzer: ............. ! Executing ClassLevel-Analyzer: ............ ! Executing CodeRank-Analyzer: . ! Executing Coupling-Analyzer: .............     247   28   Executing Hierarchy-Analyzer: ............   267   ! Executing Inheritance-Analyzer: . !   246   Executing NPathComplexity-Analyzer: .............. Executing NodeCount-Analyzer: ........ ! Executing NodeLoc-Analyzer: ..........   261   ! !     30     283     174   ! !   205   Generating pdepend log files, this may take a moment. Time: 00:05; Memory: 25.50Mb Statyczna analiza kodu z PHP Depend
  24. 24. Statyczna analiza kodu z PHP Mess Detector
  25. 25. Statyczna analiza kodu z SonarQube
  26. 26. Statyczna analiza kodu z SonarQube
  27. 27. Statyczna analiza kodu z SonarQube
  28. 28. Statyczna analiza kodu z SonarQube
  29. 29. Statyczna analiza kodu z SonarQube
  30. 30. Statyczna analiza kodu z SonarQube
  31. 31. Krzysiek  “Doświadczony  Inspektor” Sprawdza: • przejrzystość  kodu   • wydajność   • nadmierna  złożoność   (complexity)   • wpływ  na  inne  systemy   • czy  problem  został   rozwiązany • duplikacja  kodu   • jakość  kodu   • problemy  z  wdrażaniem   systemu  (deployment)   • niedociągnięcia  na  etapie   projektowania  (soZware   design) …zwraca uwagę na najważniejsze rzeczy
  32. 32. • Przekazywanie  wiedzy   • Szkolenie  nowych/początkujących   programistów   • Wczesne  wykrywanie  błędów  i   problemów     • Poprawa  jakości  kodu   • Promowanie  zbiorowej   odpowiedzialności  za  kod   Największa zaleta – korzystają na tym wszyscy!
  33. 33. PROGRAMIŚCI • Zaakceptuj  fakt,  że  każdy  popełnia  błędy  (ty  też!)   ! • “dziurawy”  kod  !=  kiepski  programista   ! • nieważne  jak  dużo  wiesz,  zawsze  znajdzie  się  ktoś   kto  wie  więcej   ! • Nie  przepisuj  kodu  bez  wcześniejszych  uzgodnień   Relacje międzyludzkie - programiści
  34. 34. INSPEKTORZY • Prawdziwy  autorytet  jest  poparty  wiedzą  i   doświadczeniem,  a  nie  stanowiskiem   ! • Krytykuj  kod  a  nie  ludzi Relacje międzyludzkie – inspektorzy
  35. 35. • Gdzie  szukać  kodu   • Opis  zmiany   – Co  zostało  zmienione?   • Powód  zmiany   – Dlaczego  kod  został  zmieniony? Podsumowanie - co zawrzeć w code review CO? – Repozytorium,  nazwa  gałęzi,  podstawa  gałęzi  
  36. 36. – W  razie  wątpliwości  proś  o  pomoc     • KwesFonuj  implementację   – Upewnij  się,  że  problem  został  właściwie   rozwiązany Podsumowanie - kto powinien przeprowadzić inspekcję kodu? KTO? • Pytaj  ekspertów  
  37. 37. – systemy  śledzenia  błędów,  np.  Jira,  Trac,  ManFs,  itd.   – narzędzia  do  inspekcji  kodu,  np.  Fisheye/Crucible,  gerrit,   Phabricator     • Rozmowa/Programowanie  w  parach   – upewnij  się,  że  komentarze  są  udokumentowane Podsumowanie – jak zgłosić code review? GDZIE? • Historia  zmian  
  38. 38. • Używaj  narzędzi,  automatyzuj   • Oceń  wpływ  na  inne  systemy   • Upewnij  się,  że  kod  jest  dobrze   udokumentowany  i  łatwy  do  zrozumienia Podsumowanie - jak przeprowadzić dobrą inspekcję? JAK? • Zwracaj  uwagę  na  duplikację  i  zbyt   skomplikowany  kod  
  39. 39. hgp://www.atlassian.com/angrynerds/ hgp://georgegant.deviantart.com/art/Angry-­‐Nerds-­‐217554774   hgp://www.flickr.com/photos/dawgbyte77/3058349367/   hgp://www.flickr.com/photos/zzpza/3269784239/   hgp://www.flickr.com/photos/toolmanFm/6170448143/   hgp://www.flickr.com/photos/coyau/7630782996/   hgp://www.flickr.com/photos/73885983@N02/6729908421/   hgp://www.osnews.com/story/19266/WTFs_m Podziękowania…
  40. 40. The  Ten  Commandments  of  Egoless  Programming:  hgp://alturl.com/q4dpa   ! The  Code  review:  hgp://www.soulbroken.co.uk/blog/2010/07/the-­‐code-­‐review/     ! Fisheye/Crucible:  hgp://www.atlassian.com/soZware/crucible/overview   ! Gerrit:  hgp://code.google.com/p/gerrit/   ! Github:  hgps://github.com/   ! Phabricator:  hgp://phabricator.org   ! PHPUnit:  hgp://phpunit.de     ! PHP  CodeSniffer:  hgp://pear.php.net/PHP_CodeSniffer     ! PHP  Depend:  hgp://pdepend.org/     ! PHP  Mess  Detector:  hgp://phpmd.org/     ! SonarQube:  hgp://www.sonarqube.org/   …i dodatkowe materiały
  41. 41. Pytania? h"ps://                          /9759 Pytania

×