Podróż w krainę Continuous Integration

Post on 17-Dec-2014

1.806 views 1 download

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 of Podróż w krainę Continuous Integration

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