SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
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	
  i	
  CI	
  
• w	
  miarę	
  wolnego	
  czasu	
  
wspiera	
  open	
  source

h"ps://joind.in/9759
@proofek
+
Ochotnik

+
Projekt

+
Miejsce

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

https:/
/www.codeclub.org.uk/

Dzieci
Dla kogo?
Wszystkie wydarzenia i
postacie w tej
prezentacji są
fikcyjne.
!

Jakiekolwiek
podobieństwo jest
całkowicie
przypadkowe.
Na początek
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 code review? Co,
programować nie umiecie? Poza tym przecież
będą testy...?

Sytuacja 1
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
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
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
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
Tylko	
  nie	
  (e)mail!

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

Narzędzia	
  
-­‐ Crucible/Fisheye	
  
-­‐ Gerrit	
  
-­‐ Github	
  
-­‐ Phabricator
Jak poprosić?
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
Systemy	
  kontroli	
  wersji	
  
• konkretne	
  zestawy	
  
zmian	
  (changesets)	
  
• unikanie	
  konkretnych	
  
commitów	
  
• inspekcja	
  łatek	
  
(patches)	
  ryzykowna,	
  
chyba	
  że	
  
zautomatyzowana
Na co zwracać uwagę?
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
Co
i
!

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

ma	
  sens	
  
działa	
  
poprawne	
  syntaktycznie	
  
ok

Tak też można…
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…
$ 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

	
  

	
  

	
  

	
  
 

$ 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
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
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ść	
  
(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
• 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!
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
INSPEKTORZY

• Prawdziwy	
  autorytet	
  jest	
  poparty	
  wiedzą	
  i	
  
doświadczeniem,	
  a	
  nie	
  stanowiskiem	
  
!
• Krytykuj	
  kod	
  a	
  nie	
  ludzi

Relacje międzyludzkie – inspektorzy
• 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	
  
– 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	
  
– 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	
  
• 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	
  
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…
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
Pytania?
h"ps://	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /9759

Pytania

Mais conteúdo relacionado

Semelhante a Praktyczne code reviews - PHPConPl

Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
Jaroslaw Palka
 
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
Infoshare
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
Wydawnictwo Helion
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
Wydawnictwo Helion
 
Perl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programistyPerl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programisty
Wydawnictwo Helion
 

Semelhante a Praktyczne code reviews - PHPConPl (20)

[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
university day 1
university day 1university day 1
university day 1
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
 
Code review
Code reviewCode review
Code review
 
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
 
Skok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiSkok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacji
 
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiInfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
 
Testowanie bezpieczeństwa aplikacji mobilnych
Testowanie bezpieczeństwa aplikacji mobilnychTestowanie bezpieczeństwa aplikacji mobilnych
Testowanie bezpieczeństwa aplikacji mobilnych
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnych
 
MS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowychMS - Wprowadzenie do testów jednostkowych
MS - Wprowadzenie do testów jednostkowych
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
Testowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO AcademyTestowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO Academy
 
Perl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programistyPerl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programisty
 
Budowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworkówBudowanie aplikacji PHP bez użycia frameworków
Budowanie aplikacji PHP bez użycia frameworków
 
KraQA VIII - Techniki projektowania testów
KraQA VIII - Techniki projektowania testów KraQA VIII - Techniki projektowania testów
KraQA VIII - Techniki projektowania testów
 

Mais de Sebastian Marek

Continuous Inspection: Fight back the 7 deadly sins of a developer!
Continuous Inspection: Fight back the 7 deadly sins of a developer!Continuous Inspection: Fight back the 7 deadly sins of a developer!
Continuous Inspection: Fight back the 7 deadly sins of a developer!
Sebastian Marek
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking
Sebastian Marek
 

Mais de Sebastian Marek (16)

The Journey Towards Continuous Integration
The Journey Towards Continuous IntegrationThe Journey Towards Continuous Integration
The Journey Towards Continuous Integration
 
CodeClub - Teaching the young generation programming
CodeClub - Teaching the young generation programmingCodeClub - Teaching the young generation programming
CodeClub - Teaching the young generation programming
 
Managing and Monitoring Application Performance
Managing and Monitoring Application PerformanceManaging and Monitoring Application Performance
Managing and Monitoring Application Performance
 
Ten Commandments Of A Software Engineer
Ten Commandments Of A Software EngineerTen Commandments Of A Software Engineer
Ten Commandments Of A Software Engineer
 
Continuous Inspection: Fight back the 7 deadly sins of a developer!
Continuous Inspection: Fight back the 7 deadly sins of a developer!Continuous Inspection: Fight back the 7 deadly sins of a developer!
Continuous Inspection: Fight back the 7 deadly sins of a developer!
 
Test your code like a pro - PHPUnit in practice
Test your code like a pro - PHPUnit in practiceTest your code like a pro - PHPUnit in practice
Test your code like a pro - PHPUnit in practice
 
Effective code reviews
Effective code reviewsEffective code reviews
Effective code reviews
 
Effective code reviews
Effective code reviewsEffective code reviews
Effective code reviews
 
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practicePHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
 
Ten Commandments Of A Software Engineer
Ten Commandments Of A Software EngineerTen Commandments Of A Software Engineer
Ten Commandments Of A Software Engineer
 
PHP Benelux 2012: Magic behind the numbers. Software metrics in practice
PHP Benelux 2012: Magic behind the numbers. Software metrics in practice PHP Benelux 2012: Magic behind the numbers. Software metrics in practice
PHP Benelux 2012: Magic behind the numbers. Software metrics in practice
 
Magic behind the numbers - software metrics in practice
Magic behind the numbers - software metrics in practiceMagic behind the numbers - software metrics in practice
Magic behind the numbers - software metrics in practice
 
Back to basics - PHPUnit
Back to basics - PHPUnitBack to basics - PHPUnit
Back to basics - PHPUnit
 
Back to basics - PHP_Codesniffer
Back to basics - PHP_CodesnifferBack to basics - PHP_Codesniffer
Back to basics - PHP_Codesniffer
 
Sonar - the ring to rule them all
Sonar - the ring to rule them allSonar - the ring to rule them all
Sonar - the ring to rule them all
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking
 

Praktyczne code reviews - PHPConPl

  • 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. ! • 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. + Ochotnik + Projekt + Miejsce Światowa sieć klubów programistycznych dla dzieci od 9 do 11 roku życia https:/ /www.codeclub.org.uk/ Dzieci
  • 5. Wszystkie wydarzenia i postacie w tej prezentacji są fikcyjne. ! Jakiekolwiek podobieństwo jest całkowicie przypadkowe. Na początek
  • 6. Roman “Potrzebuję to na wczoraj” –   Właściciel firmy Stefan “Ma być zrobione” – Kierownik Zespół  
  • 7. “Nocny Marek” – programista Krzysiek “Haker” –   doświadczony programista Paweł “Będzie dobrze” – praktykant Zespół
  • 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. 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. 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. 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. 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
  • 14. Systemy  śledzenia  błędów   -­‐ JIRA   -­‐ Bugtrak   -­‐ ManFs   ! Narzędzia   -­‐ Crucible/Fisheye   -­‐ Gerrit   -­‐ Github   -­‐ Phabricator Jak poprosić?
  • 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. Systemy  kontroli  wersji   • konkretne  zestawy   zmian  (changesets)   • unikanie  konkretnych   commitów   • inspekcja  łatek   (patches)  ryzykowna,   chyba  że   zautomatyzowana Na co zwracać uwagę?
  • 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
  • 19. Paweł  “Będzie  dobrze” Tradycyjne  komentarze: • • • • ma  sens   działa   poprawne  syntaktycznie   ok Tak też można…
  • 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. $ 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.   $ 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. 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. Statyczna analiza kodu z PHP Mess Detector
  • 25. Statyczna analiza kodu z SonarQube
  • 26. Statyczna analiza kodu z SonarQube
  • 27. Statyczna analiza kodu z SonarQube
  • 28. Statyczna analiza kodu z SonarQube
  • 29. Statyczna analiza kodu z SonarQube
  • 30. Statyczna analiza kodu z SonarQube
  • 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. • 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. 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. INSPEKTORZY • Prawdziwy  autorytet  jest  poparty  wiedzą  i   doświadczeniem,  a  nie  stanowiskiem   ! • Krytykuj  kod  a  nie  ludzi Relacje międzyludzkie – inspektorzy
  • 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. – 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. – 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. • 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.
  • 40. 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…
  • 41. 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
  • 42. Pytania? h"ps://                          /9759 Pytania