praktyczne code reviews - phpconpl
DESCRIPTION
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.TRANSCRIPT
![Page 1: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/1.jpg)
Praktyczne code reviews
Sebastian Marek -
Internal Systems Technical Architect
![Page 2: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/2.jpg)
@proofek
!• 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
![Page 3: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/3.jpg)
https://www.codeclub.org.uk/
Ochotnik Projekt Miejsce Dzieci
+ + +
Światowa sieć klubów programistycznych dla dzieci od 9 do 11 roku życia
![Page 4: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/4.jpg)
Dla kogo?
![Page 5: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/5.jpg)
Na początek
Wszystkie wydarzenia i postacie w tej prezentacji są fikcyjne.
!Jakiekolwiek podobieństwo jest całkowicie przypadkowe.
![Page 6: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/6.jpg)
Zespół
Stefan “Ma być zrobione” – Kierownik
Roman “Potrzebuję to na wczoraj” – Właściciel firmy
![Page 7: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/7.jpg)
Zespół
“Nocny Marek” – programista
Krzysiek “Haker” – doświadczony programista
Paweł “Będzie dobrze” – praktykant
![Page 8: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/8.jpg)
Sytuacja 1
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...?
![Page 9: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/9.jpg)
Sytuacja 2
Hmmm… ale wszyscy mają kupę roboty! Nie ma nikogo wolnego. Dajmy sobie spokój i puśćmy to prosto do testów…
Ok. Prawie gotowe! Jeszcze tylko code review...
![Page 10: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/10.jpg)
Sytuacja 3
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.
![Page 11: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/11.jpg)
Sytuacja 4
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!
![Page 12: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/12.jpg)
Code review
Marek - programistado Krzysiek -‐ inspektor
21:31 (0 minut temu)
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
![Page 13: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/13.jpg)
Prośba o code review
Tylko nie (e)mail!
![Page 14: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/14.jpg)
Jak poprosić?
Systemy śledzenia błędów -‐ JIRA -‐ Bugtrak -‐ ManFs !Narzędzia -‐ Crucible/Fisheye -‐ Gerrit -‐ Github -‐ Phabricator
![Page 15: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/15.jpg)
Code review
21:31 PM (13 minut temu)
Krzysiek - Inspektordo 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
Marek - programistado 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
![Page 16: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/16.jpg)
Na co zwracać uwagę?
Systemy kontroli wersji • konkretne zestawy zmian (changesets)
• unikanie konkretnych commitów
• inspekcja łatek (patches) ryzykowna, chyba że zautomatyzowana
![Page 17: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/17.jpg)
Code review
21:31 (25 minut temu)
Krzysiek, Możesz proszę an to spojrzeć? Właśnie skończyłem nad tym pracować…
21:44 (12 minut temu)
Marek, !Spoko, tylko na bazie jakiej gałęzi stworzyłeś tą gałąź? Bez tego nie dam rady zidentyfikować zestawu zmian. !--- Krzysiek
21:56 PM (0 minut temu)
Krzysiek, !No tak, przepraszam. Gałąź stworzyłem na podstawie mastera. !--- Marek
Marek - programista
Krzysiek - Inspektordo Marek -‐ programista
Marek - programistado Krzysiek -‐ inspektor
![Page 18: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/18.jpg)
Po co?
Co i !
dlaczego?
![Page 19: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/19.jpg)
Tak też można…
Paweł “Będzie dobrze”
• ma sens • działa • poprawne syntaktycznie • ok
Tradycyjne komentarze:
![Page 20: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/20.jpg)
Ale można i tak…
Krzysiek “Doświadczony Inspektor”
• PHP linter • PHP Code Sniffer • PHPUnit • phpDocumentor • PHP Depend • PHP Mess Detector • SonarQube
Używane narzędzia:
![Page 21: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/21.jpg)
Automatyzacja - PHP linter i PHP CodeSniffer
$ 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
![Page 22: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/22.jpg)
Unit testy z PHPUnit
$ 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.
![Page 23: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/23.jpg)
Statyczna analiza kodu z PHP Depend
PHP_Depend 0.10.6 by Manuel Pichler !Parsing source files: .................... 20 !Executing CyclomaticComplexity-Analyzer: ............. 261 !Executing ClassLevel-Analyzer: ............ 247 !Executing CodeRank-Analyzer: . 28 !Executing Coupling-Analyzer: ............. 267 !Executing Hierarchy-Analyzer: ............ 246 !Executing Inheritance-Analyzer: . 30 !Executing NPathComplexity-Analyzer: .............. 283 !Executing NodeCount-Analyzer: ........ 174 !Executing NodeLoc-Analyzer: .......... 205 !Generating pdepend log files, this may take a moment. !Time: 00:05; Memory: 25.50Mb
![Page 24: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/24.jpg)
Statyczna analiza kodu z PHP Mess Detector
![Page 25: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/25.jpg)
Statyczna analiza kodu z SonarQube
![Page 26: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/26.jpg)
Statyczna analiza kodu z SonarQube
![Page 27: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/27.jpg)
Statyczna analiza kodu z SonarQube
![Page 28: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/28.jpg)
Statyczna analiza kodu z SonarQube
![Page 29: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/29.jpg)
Statyczna analiza kodu z SonarQube
![Page 30: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/30.jpg)
Statyczna analiza kodu z SonarQube
![Page 31: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/31.jpg)
…zwraca uwagę na najważniejsze rzeczy
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)
Krzysiek “Doświadczony Inspektor”
![Page 32: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/32.jpg)
Największa zaleta – korzystają na tym wszyscy!
• 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
![Page 33: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/33.jpg)
Relacje międzyludzkie - 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ń
PRO
GR
AM
IŚC
I
![Page 34: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/34.jpg)
Relacje międzyludzkie – inspektorzy
• Prawdziwy autorytet jest poparty wiedzą i doświadczeniem, a nie stanowiskiem !
• Krytykuj kod a nie ludzi
INSP
EKTO
RZY
![Page 35: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/35.jpg)
Podsumowanie - co zawrzeć w code review
• Gdzie szukać kodu – Repozytorium, nazwa gałęzi, podstawa gałęzi
• Opis zmiany – Co zostało zmienione?
• Powód zmiany – Dlaczego kod został zmieniony?
CO
?
![Page 36: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/36.jpg)
Podsumowanie - kto powinien przeprowadzić inspekcję kodu?
• Pytaj ekspertów – W razie wątpliwości proś o pomoc
• KwesFonuj implementację – Upewnij się, że problem został właściwie
rozwiązany
KTO
?
![Page 37: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/37.jpg)
Podsumowanie – jak zgłosić code review?
• Historia zmian – 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
GD
ZIE?
![Page 38: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/38.jpg)
Podsumowanie - jak przeprowadzić dobrą inspekcję?
• Używaj narzędzi, automatyzuj • Zwracaj uwagę na duplikację i zbyt skomplikowany kod
• Oceń wpływ na inne systemy • Upewnij się, że kod jest dobrze udokumentowany i łatwy do zrozumienia
JAK
?
![Page 39: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/39.jpg)
![Page 40: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/40.jpg)
Podziękowania…
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
hgp://www.atlassian.com/angrynerds/
![Page 41: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/41.jpg)
…i dodatkowe materiały
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/
![Page 42: Praktyczne code reviews - PHPConPl](https://reader033.vdocuments.site/reader033/viewer/2022052522/54919a43b479597a588b5566/html5/thumbnails/42.jpg)
Pytania
Pytania?
h"ps:// /9759