podróż w krainę continuous integration
DESCRIPTION
Over the past two years we’ve been pushing to improve our automated testing practices within Plusnet and to win full support for it within the company across the spectrum of fellow developers, project managers and upper management. It took a while to agree on software we want to use, and standards we want to follow, but now all new code is being continuously built and tested and the results of that are visible business-wide. We use PHP_CodeSniffer to verify that we follow our coding standards, PHPDocumentor to generate automated API documentation, PHPUnit to run test suites and phpUnderControl to run all these tools regulary, at least once a day and to generate aggregated reports. Finally, Sonar allows us to create and publish reports visible to everybody and more importantly reports that everybody can understand. Setting it all up can be a tough exercise, but if you prepare to it upfront you might actually find it quite exciting! So, you strongly believe this is the way you should be developing your code, but you don’t really know where to start? Let me show you how our journey began. You don’t know how to convince your fellow developers to follow you? I’ll tell you how to establish a strong team that will follow you. Your managers seem to be more interested in delivering your project on time and don’t really see a point in spending additional time on unit testing and documenting your code? Maybe you haven’t shown them the benefits of continuous integration in a way they can understand. I’ll show you what worked for us.TRANSCRIPT
Sebastian Marek, Software Architect
Podróż w krainę Continuous Integration
@proofek
10 lat doświadczenia w PHP
współautor 2 książek o tematyce PHP
zwolennik automatyzacji procesów
TDD i CI
Dawno dawno temu
U stóp Góry Przeznaczenia
coraz dłuższy czas utrzymania
wzrastająca liczba problemów
mało zrozumiały i mało przejrzysty kod
skomplikowane i czasochłonne testowanie
Szukanie pomocy!
Pierwsze frustracje
sporadyczne “buildy” mieszanka php3 i php4 nauka w locie brak standardów
Tworzenie drużyny
Stuart Grimshaw Simon Westcott Ben Selby Sebastian Marek Rowan Merewood Ben Longden
Zwołanie rady
Kto? menadżerowie programiści
O czym? zagrożenia szanse plan wdrożenie
http://www.flickr.com/photos/pedromourapinheiro/3272323691/in/photostream/
Jak nie wiadomo o co chodzi to chodzi o pieniądze
Design debt Karne opłaty Odsetki
http://www.flickr.com/photos/your_teacher/1040476355/in/photostream/
Najlepsze rozwiązanie
VS.
Wsparcie i plan rozwoju
http://www.flickr.com/photos/jannem/3312115991/in/photostream/
Raporty i statystyki
http://www.flickr.com/photos/aussiegall/286709039/in/photostream/
Łączenie sił z mocniejszymi sojusznikami
Automatyzacja
http://www.flickr.com/photos/matthileo/3552898254/in/photostream/
Front wschodni
Zautomatyzowane buildy
wtyczka do Cruisecontrol wsparcie dla PHPUnit Intergracja z
phpDocumentor generowanie statystyk
kodu Raport code coverage Integracja z raportem
checkstyle Integracja z PHP Depend Integracja z PHPMD i wiele wiele więcej
PHPUnit
Najpopularniejsze narzędzie do unit testów oparte na standardzie xUnit, ze wsparciem dla: mock obiektów testów bazodanowych (dbUnit) raportów “code coverage” selenium RC platform continuous integration, takich jak CruiseControl,
Hudson, Bamboo
phpDocumentor
zautomatyzowane tworzenie dokumentacji dla PHP
wsparcie dla: HTML, PDF, CHM, XML
interfejs CLI i poprzez przeglądarkę internetową
łatwo konfigurowalny
PHP_Codesniffer
Oparty na predefiniowanych standardach kodowania Wykrywa niezgodności ze standardami kodowania W pełni konfigurowalny z możliwością definiowania
własnych standardów Codebrowser
Raport “code coverage”
Świadomość ilości przetestowanego kodu Procentowe przedstawienie pokrycia kodu testami Konfigurowalne przedziały akceptowalności Format clover Format HTML
Statystyki - PHP Depend
Statystyki: Cyclomatic Complexity NPath Complexity CodeRank Lines Of Code
PHP Mess Detector
Inteligentna analiza kodu: Potencjalne problemy Niezoptymalizowany kod Zbyt skomplikowane
operacje Nieużywane parametry,
metody, właściwości
phpUnderControl
Buildbox na co dzień
Rosnąca ilość nowych modułów Wydłużony czas budowania Częste zawieszenia Problemy ze stabilnością Problemy ze sprzętem
Potrzeba udoskonalenia
Hudson/Jenkins – następny krok
Łatwa instalacja Łatwa konfiguracja Wsparcie dla wtyczek Rozproszone “buildy” Internacjonalizacja
Hudson/Jenkins
Selenium
Automatyczne testy aplikacji internetowych
Władca pierścieni
http://www.flickr.com/photos/cosmic_bandita/2218419160/in/photostream/
Front zachodni
Sonar
Sonar
Platforma do zarządzania jakością kodu
Nieustanna analiza kodu Łatwy w konfiguracji Wsparcie dla wtyczek
Raporty dostępne dla wszystkich
Łatwo zrozumiałe raporty i statystyki Definicja celów Odpowiedzialność
Widok typu radiator
Raporty
Raporty
Raporty
Raporty
Raporty
Armia musi podążać za przywódcą
Idź za przykładem Bądź stanowczy, ale jednocześnie przyjazny i pomocny Szkolenia Proste i zrozumiałe reguły/standardy Kij i marchewka
You broke the build!
Where's the build?
Works on my machine?!
Czas na ciebie!
Podsumowanie
1. Rozpoznanie
2. Próba
3. Odpowiedni zespół
4. Powoli, małymi krokami
5. Bądź widoczny
6. Automatyzacja
Źródła
PHPUnit - http://www.phpunit.de/ phpUnderControl - http://phpundercontrol.org/ Jenkins - http://jenkins-ci.org/ Sonar - http://www.sonarsource.org/ phpDocumentor - http://www.phpdoc.org/ PHP_CodeSniffer -
http://pear.php.net/package/PHP_CodeSniffer/ PHP Depend - http://pdepend.org/ PHP Mess Detector - http://phpmd.org/ Selenium - http://seleniumhq.org/ xDebug - http://www.xdebug.org/
Pytania
Pytania?
http://joind.in/3199