Professional Documents
Culture Documents
PODYPLOMOWE STUDIUM
PROWADZENIA PROJEKTÓW INFORMATYCZNYCH
PRACA DYPLOMOWA
Grzegorz Ol˛edzki
Opiekun naukowy:
dr inż. Włodzimierz Dabrowski
˛
STRESZCZENIE
Ciagła
˛ integracja jest praktyka˛ coraz cz˛eściej stosowana˛ w projektach informa-
tycznych, zwłaszcza tych rozwijanych metodykami zwinnymi. Stanowi pomocne narz˛edzie
wspomagajace
˛ monitorowanie stanu rozwoju aplikacji, przyczyniajac
˛ si˛e do poprawy jakości
wytwarzanego oprogramowania.
Praca prezentuje poj˛ecie ciagłej
˛ integracji– poczawszy
˛ od genezy jego powstania.
Omówiono wachlarz możliwości oferowanych przez środowiska ciagłej
˛ integracji wraz z opi-
sem znaczenia poszczególnych elementów. Zanalizowano korzyści niesione przez ciagł
˛ a˛ in-
tegracj˛e oraz koszty, z jakimi trzeba si˛e liczyć przy jej wdrożeniu. Przedstawiono również
krótki opis trzech popularnych produktów – serwerów ciagłej
˛ integracji. Ważnym elementem
pracy jest także opis zbioru najlepszych praktyk, uznanych przez środowisko osób zwiaza-
˛
nych z ciagł
˛ a˛ integracja.˛ Praca przedstawia również propozycje praktycznego rozwiazania
˛
problemu skali – ważnego zwłaszcza przy zastosowaniach ciagłej
˛ integracji w wi˛ekszych
organizacjach.
ABSTRACT
Spis treści
Wst˛ep 5
3 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
2.1.3 TeamCity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.2 Najlepsze praktyki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.3 Skalowalność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.3.1 Klaster serwerów ciagłej
˛ integracji . . . . . . . . . . . . . . . . . . . 53
2.3.2 Budowanie etapowe . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Zakończenie 58
Bibliografia 60
4 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Wst˛ep
5 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
czasie (kilku godzinach, kilku dniach czy czasem tygodniach) zbieraja˛ si˛e i próbuja˛ dopaso-
wać swoje zmiany tak, by doprowadzić do poprawnego działania złaczonej
˛ aplikacji.
P. Duvall w [PD07] definiuje integracj˛e krótko jako:
działanie polegajace
˛ na połaczeniu
˛ oddzielnych elementów kodu źródłowego w ca-
łość w celu sprawdzenia, jak razem działaja.˛ 1
• Nigdy nie jest do końca wiadomo, jak długo taka integracja potrwa (co stanowi ogrom-
na˛ przeszkod˛e w planowaniu zasobów na potrzeby projektu informatycznego).
Dlatego sytuacja, w której integracja wykonywana jest raz na jakiś czas nazywana jest „inte-
gracyjnym piekłem” (ang. integration hell).
Odpowiedź na te bolaczki
˛ może stanowić ciagła
˛ integracja.
Ciagła
˛ integracja
Z poj˛eciem ciagłej
˛ integracji (ang. Continuous Integration) pierwszy raz można si˛e
było spotkać w pracach K. Becka i M. Fowlera – współautorów metodyki XP (od ang. Extre-
me Programming – programowanie ekstremalne).
Istota˛ pomysłu jest automatyzacja procesu integracji – tak, by mogła być wykony-
wana przez komputer, a nie człowieka (dzi˛eki czemu może być wykonywana cz˛eściej).
Sam M. Fowler definiuje w [Fow06] poj˛ecie ciagłej
˛ integracji jako:
1
Tłumaczenie własne. Podobnie wszystkie inne cytaty w pracy.
2
Martin Fowler - autor wielu ksia˛żek z dziedziny inżynierii oprogramowania, specjalizujacy
˛ si˛e w anali-
zie i projektowaniu zorientowanych obiektowo, j˛ezyku UML, wzorcach projektowych, zwinnych metodykach
prowadzenia projektów informatycznych (zwłaszcza Extreme Programming). Uznawany za pioniera ciagłej
˛ in-
tegracji.
6 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Ciagła
˛ integracja jest praktyka˛ w projektach informatycznych polegajac
˛ a˛ na cz˛estym
integrowaniu efektów pracy przez członków zespołu. Każda integracja jest sprawdzana przez
automatyczny proces testowania (w tym budowanie)4 tak, by wykrywać bł˛edy tak szybko jak
to jest możliwe.
• jej wprowadzenie ma na celu przede wszystkim ułatwienie oceny i sama˛ popraw˛e ja-
kości wytwarzanego oprogramowania,
7 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Rozdział 1
• serwer ciagłej
˛ integracji – narz˛edzie ciagłej
˛ integracji.
Użytkownicy pracuja˛ zwykle na swoich stacjach roboczych. Ich praca zaczyna si˛e
od pobrania kodu źródłowego z repozytorium kodu. Nast˛epnie dokonuja˛ zmiany kodu źró-
dłowego, testuja˛ zmieniany kod, po czym wgrywaja˛ poprawki do repozytorium.
Repozytorium kodu przechowuje kod źródłowy aplikacji we wszystkich historycz-
nych wersjach. W każdej chwili jest w stanie udost˛epnić zarówno najnowsza˛ wersj˛e kodu
źródłowego, jak i dowolne wcześniejsze wydanie. Poza kodem źródłowym aplikacji sensu
stricte repozytorium przechowuje wszystkie dane wejściowe potrzebne do zbudowania apli-
kacji.
Serwer ciagłej
˛ integracji jest narz˛edziem, które przeprowadza ciagł
˛ a˛ integracj˛e.
Regularnie, dla każdego zarzadzanego
˛ przez siebie projektu, pobiera najnowsza˛ wersj˛e kodu
źródłowego z repozytorium i dokonuje próby integracji. O wynikach próby informuje użyt-
kowników, udost˛epniajac
˛ raport z próby integracji.
Rysunek 1.1 w schematyczny sposób przedstawia proces ciagłej
˛ integracji i wymia-
n˛e informacji mi˛edzy trzema najważniejszymi elementami opisanymi powyżej.
8 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Najcz˛eściej w danej organizacji rozwija si˛e wi˛ecej niż jeden projekt. Każdy z nich
z osobna konfiguruje si˛e w taki sposób, by był zarzadzany
˛ przez serwer ciagłej
˛ integracji. Tak
wi˛ec serwer ciagłej
˛ integracji zwykle nadzoruje integracj˛e wi˛ecej niż jednego projektu.
Co wi˛ecej, czasami dany projekt wyst˛epuje w różnych wersjach i równolegle trwaja˛
prace programistyczne nad różnymi wersjami tego samego projektu. Zasadnym jest potrak-
towanie wtedy różnych wersji jako osobnych projektów z punktu widzenia ciagłej
˛ integracji
– wszak różni si˛e ich baza kodu źródłowego, wymagania przed nimi stawiane itd.
Stan projektu – poprawny czy niepoprawny – jednoznacznie określany jest przez
ostatnia˛ prób˛e integracji. Jeśli si˛e powiodła (tj. aplikacja przeszła pomyślnie proces budowa-
nia, wszystkie sprawdzenia), uznaje si˛e, że projekt w systemie ciagłej
˛ integracji jest w stanie
poprawnym. Jeśli ostatnia próba integracji z jakichkolwiek powodów si˛e nie powiodła, okre-
śla si˛e stan jako niepoprawny. Warto podkreślić, że wcześniejsze niż ostatnie wyniki integra-
cji nie maja˛ znaczenia dla określenia stanu projektu. Nawet jeśli projekt przez ostatni tydzień
integrował si˛e poprawnie, a jedna ostatnia integracja si˛e nie powiodła - mówi si˛e, że projekt
9 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
jest w stanie niepoprawnym. Oczywiście nie wyklucza to sensowności badania historii inte-
gracji i zliczania, jak cz˛esto projekt wyst˛epuje w stanie poprawnym. Nie należy jednak mylić
tego ze stanem projektu.
Wyzwalanie integracji
10 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
11 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
pracy ludzi, która nast˛epnie może być w sposób zautomatyzowany przetwarzana w celu uj-
rzenia końcowego produktu.
Nie widać ważnych czynników ograniczajacych
˛ sensowność stosowania ciagłej
˛ in-
tegracji w zależności od wielkości zespołu programistycznego. Ciagła
˛ integracja ma nawet
pewien sens w projektach jednoosobowych, oczywiście dużo wi˛ekszy – w liczniejszych
przedsi˛ewzi˛eciach. Po przekroczeniu pewnej skali (kilku – kilkunastu osób) ciagła
˛ integracja
wymaga pewnego sformalizowania ról – mianowania osób odpowiedzialnych za integracj˛e
poszczególnych projektów (podobnie bez stosowania ciagłej
˛ integracji taki rozmiar zespołu
programistycznego wymaga pewnej struktury. Tak wi˛ec w pewien sposób ciagła
˛ integracja
nie narzuca tym samym nowego wymagania). Najpewniej do zadań osoby odpowiedzialnej
za integracj˛e projektu trzeba by zaliczyć na przykład:
• rozwiazywanie
˛ wszelkich problemów ze środowiskiem używanym przez serwer ciagłej
˛
integracji do budowania projektu.
• budowanie,
12 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
5
Niepowodzenie kompilacji (czy któregokolwiek innego etapu integracji) z powodu braku wolnej pami˛eci
operacyjnej czy miejsca na dysku może stanowić dobry przykład niedeterminizmu integracji. Tzn. dwie próby
integracji z tymi samymi danymi (z tym stanem repozytorium) moga˛ dać zupełnie różne wyniki.
13 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
14 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Pierwszym etapem każdej integracji jest odświeżenie kodu źródłowego. Jest to etap
o tyle konieczny, że do dalszych kroków integracji potrzebne sa˛ dane wejściowe. Głównym
ich elementem jest kod źródłowy aplikacji; dodatkowymi elementami moga˛ być różnego
rodzaju pliki konfiguracyjne, skrypty bazodanowe itp. Samo odświeżenie kodu źródłowego
i danych polega na wykonaniu operacji pobrania najnowszej wersji plików z repozytorium
kodu. Ze wzgl˛edu na różnorodność repozytoriów kodu serwery ciagłej
˛ integracji dostarczaja˛
zwykle osobne interfejsy do każdego z nich.
W tym miejscu warto podkreślić konieczność przechowywania przez repozytorium
całości kodu źródłowego, plików konfiguracyjnych, skryptów bazodanowych i wszystkich
innych zasobów potrzebnych do integracji i uruchomienia aplikacji. Chociaż ten wymóg wy-
daje si˛e być banalny i oczywisty, to jednak cz˛esto spotyka si˛e organizacje, w których w wy-
niku bałaganu, niefrasobliwości czy braku dobrze określonych procedur, niektóre dane nie sa˛
przechowywane w repozytorium kodu (np. minimalna zawartość bazy danych potrzebna do
uruchomienia aplikacji) – patrz rozdział 2.2.
Kontynuowanie integracji nie zawsze jest celowe. Jako przykład niech posłuża˛ dwie
typowe sytuacje.
Po pierwsze, po odświeżeniu kodu z repozytorium może si˛e okazać, że od czasu
ostatniej próby integracji aplikacji nie nastapiły
˛ żadne zmiany w kodzie źródłowym (czy
ogólniej – w zbiorze danych wejściowych integracji). Cz˛esto serwery ciagłej
˛ integracji kon-
figuruje si˛e w ten sposób by nie podejmować w takiej sytuacji kolejnej próby integracji. Jako
że proces integracji powinien być deterministyczny, wi˛ec kolejna integracja z tymi samymi
danymi wejściowymi powinna dać ten sam wynik. Jak wykazano powyżej, ze wzgl˛edu na
sama˛ zmienność środowiska, w którym dokonuje si˛e ciagła
˛ integracja, takie założenie nie
musi być słuszne.
Po drugie, cz˛estokroć jedna organizacja rozwija kilka różnych projektów zależnych
od siebie – aplikacje dzielone sa˛ na moduły badź
˛ jedne aplikacje wymagaja˛ innych aplika-
cji do działania. W szczególności czasami do integracji aplikacji nadrz˛ednej konieczne sa˛
uprzednio zbudowane wersje aplikacji zależnych. Dlatego jeśli ostatnia próba integracji jed-
nej z zależnych aplikacji zakończyła si˛e fiaskiem, nie ma sensu przeprowadzać integracji
aplikacji nadrz˛ednej.
15 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
1.3.3 Budowanie
Budowanie jest najistotniejszym etapem integracji, w ogólności ma na celu prze-
transformowanie kodu źródłowego aplikacji do takiej postaci, która˛ da si˛e uruchomić. W za-
leżności od konstrukcji technologicznej aplikacji (w tym j˛ezyka programowania, infrastruk-
tury) proces budowania może przybierać różne kształty.
W niektórych technologiach proces budowania jest na tyle skomplikowany, że wy-
maga wykorzystania specjalnie do tego celu przeznaczonych narz˛edzi. Serwery ciagłej
˛ inte-
gracji nie zajmuja˛ si˛e bowiem samym budowaniem, a raczej jedynie uruchamianiem odpo-
wiednio skonfigurowanego narz˛edzia budujacego.
˛
Przykład 2. Jako inny przykład można podać aplikacj˛e uruchamiana˛ jako program
wykonywalny w systemie Linux. Głównym produktem integracji może być w takim przy-
padku pakiet programu (typu RPM, DEB, itp.), którego stworzenie zdefiniowane jest w pliku
konfiguracyjnym narz˛edzia budujacego
˛ pakiety – np. poprzez kompilacj˛e kodu źródłowego
i linkowanie.
16 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Podsumowujac:
˛ produktem budowania powinna być aplikacja w postaci gotowej do
uruchomienia – czy to w postaci jednego pliku, czy zestawu plików.
1.3.4 Testowanie
Jak podkreślono we wst˛epie tej pracy, jednym z głównych celów wdrożenia cia-
˛
głej integracji jest poprawa jakości wytwarzanego oprogramowania. Podstawowymi narz˛e-
dziami mierzacym
˛ jakość oprogramowania sa˛ różnorakie testy. Opis możliwych podejść do
testowania aplikacji leży poza zakresem tej pracy, warto jednak podkreślić, że z natury rze-
czy środowiska ciagłej
˛ integracji współpracuja˛ dobrze jedynie z paradygmatami testowania
umożliwiajacymi
˛ automatyzacj˛e procesu testowania.
17 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Testy interfejsu użytkownika stanowia˛ na tyle ważny aspekt testowania, że warto im
si˛e dokładnie przyjrzeć; z tego powodu zostały wydzielone z niniejszego opisu do osobnego
podrozdziału – 1.3.7.
Warto zauważyć, że sam wynik przeprowadzenia zestawu testów (zarówno pojmo-
wany w prosty sposób: jako negatywny lub pozytywny, jak i dokładniejszy – liczba niedzia-
łajacych
˛ testów) nie musi być jedynym efektem testowania.
Przydatne informacje daja˛ narz˛edzia do mierzenia pokrycia kodu źródłowego te-
stami. Dzi˛eki zastosowaniu różnych technik systemowych można mierzyć dokładnie, które
linie kodu aplikacji zostały wykonane podczas uruchomienia testów. Pozwala to określić
tzw. stopień pokrycia kodu testami, co już jako pojedyncza liczba może świadczyć o stopniu
przetestowania aplikacji. Im wi˛eksza cz˛eść kodu źródłowego jest przetestowana przez te-
sty jednostkowe, tym pewniejszy jest sam wynik testów. Ideałem byłoby oczywiście, gdyby
wskaźnik pokrycia kodu testami był bliski 100%, jednak osiagni˛
˛ ecie takiego wyniku może
być kosztowne. Samo rozłożenie wagi mi˛edzy ilościa˛ nakładów na tworzenie testów a wiel-
kościa˛ wskaźnika (przekładajacego
˛ si˛e na wiarygodność testów) pozostawia si˛e do decyzji
osób zarzadzaj
˛ acych
˛ projektem.
Co ważne, jeśli w danym projekcie wskaźnik pokrycia kodu testami jest stosunkowo
wysoki, pozwala to być pewniejszym jakości produktów. Równie ważna˛ wiadomość stanowi
18 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Rysunek 1.4: Przykład raportu pokrycia kodu testami wygenerowanego przez narz˛edzie
Clover firmy Atlassian.
Źródło: http://www.atlassian.com/software/clover/screenshots/.
• klasy, które według jakiejś heurystyki sa˛ wskazane jako 20 najbardziej niepewnych
(można podejrzewać, że narz˛edzie wybiera najbardziej złożone klasy z najmniejszym
pokryciem testami),
19 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Narz˛edzia mierzace
˛ pokrycie testami udost˛epniaja˛ też dużo dokładniejsze statysty-
ki. Niektóre z nich podaja˛ dla każdej linii kodu wartość pokazujac
˛ a,˛ ile razy dana linia zosta-
ła uruchomiona podczas testów. Ułatwia to programistom tworzenie przekrojowych testów
sprawdzajacych
˛ różne przebiegi działania aplikacji, a wi˛ec w końcowym efekcie przyczynia
si˛e do zwi˛ekszenia świadomości na temat jej faktycznej jakości.
Jest to o tyle ważne, że niedoświadczeni autorzy testów cz˛esto maja˛ tendencj˛e do
sprawdzania tylko tzw. przebiegów pozytywnych. Oznacza to, że nie testuja,˛ jak aplikacja
reaguje na różnego rodzaju bł˛edy, niepoprawne dane wejściowe czy inne niepożadane
˛ badź
˛
nietypowe sytuacje. W takich przypadkach narz˛edzie mierzace
˛ pokrycie kodu testami cz˛esto
wykazuje, że te partie kodu, które zajmuja˛ si˛e obsługa˛ bł˛edów czy sytuacji wyjatkowych,
˛ nie
zostały w ogóle przetestowane. Okazuje si˛e to jednak na tyle wcześnie, że można jeszcze
nadrobić te braki. Widać wi˛ec, że wyniki takiej analizy sa˛ dla autorów testów bardzo cenne.
20 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Ciekawy jest przykład kolejnej instrukcji warunkowej w linii 464. Liczba na marginesie
wskazuje, że instrukcja została wykonana 11200 razy, ale czerwony kolor tła informuje, że
za każdym razem wyliczenie dało ten sam wynik. Za każdym razem z tych 11200 razy stero-
wanie przechodziło do linii 465, co świadczy o tym, że ani razu nie został przetestowany ten
fragment kodu z danymi powodujacymi
˛ negatywne wyliczenie warunki instrukcji warunko-
wej. Najlepiej by było dopisać nowy test, który skutkuje uruchomieniem tego samego kodu,
podczas którego wyrażenie e.parent b˛edzie miało wartość null.
1.3.5 Przeglad
˛ kodu – statyczna analiza kodu
Na rynku dost˛epnych jest wiele narz˛edzi do statycznej analizy kodu. Kryteria stoso-
wane przez nie podczas oceny kodu sa˛ różne.
6
Poj˛ecie przegladu
˛ kodu zwykle rozumie si˛e jako r˛eczne przejrzenie zmian w kodzie innego członka ze-
społu programistycznego w celu wykrycia bł˛edów, usterek czy niezgodności ze specyfikacja.˛ Poj˛ecie automa-
tycznego przegladu
˛ kodu nawiazuje
˛ do tego, niejako podkreślajac
˛ podobny cel obu procesów, mimo stosowania
zupełnie różnych środków.
21 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
22 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Oczywiście takie elementy jak wielkość zastosowanych wci˛eć, sposób pisania ko-
mentarzy, nazewnictwo klas, metod, funkcji czy zmiennych, nie wpływaja˛ na jakość działania
samej aplikacji (można powiedzieć – sa˛ oboj˛etne komputerowi), jednak mimo wszystko sa˛
to ważne cechy kodu, bo nie sa˛ one oboj˛etne ludziom – tym, którzy ten kod źródłowy b˛eda˛
utrzymywać, poprawiać, testować itd.
Przykładowym narz˛edziem sprawdzajacym
˛ formatowanie kodu źródłowego w sto-
sunku do ustalonych reguł jest Checkstyle9 . Podobnie jak FindBugs narz˛edzie wyszczególnia
linie kodu źródłowego, w których wyst˛epuja˛ bł˛edy, wskazujac
˛ ich wady. Ponadto wszystkie
usterki sa˛ podzielone na priorytety – w zależności od stopnia rozbieżności kodu z wytyczny-
mi.
9
Darmowe narz˛edzie rozpowszechniane na licencji LGPL. Patrz http://checkstyle.
sourceforge.net/.
23 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
24 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
• Nie jest przenośne – tj. w przypadku konieczności założenia nowej instancji bazy da-
nych na innym serwerze wymaga dodatkowego nakładu, którego da si˛e uniknać
˛ prze-
chowujac
˛ skrypty tworzace
˛ baz˛e danych.
Oczywiście bład
˛ podczas automatycznego uruchomienia aplikacji definitywnie dys-
kwalifikuje dana˛ wersj˛e aplikacji. Skutkiem tego powinno nastapić
˛ przerwanie próby inte-
gracji z wynikiem negatywnym. Z drugiej strony samo poprawne uruchomienie aplikacji nie
jest jeszcze gwarancja˛ jej poprawnego działania, dlatego warto to działanie przetestować –
o czym mowa w nast˛epnym podrozdziale.
25 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
26 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
• Udost˛epnienie raportu próby integracji, który jest budowany na podstawie danych wyj-
ściowych wszystkich narz˛edzi zestawionych w procesie integracji. Przykładowymi skła-
dowymi raportu sa:
˛ komunikat końcowy kompilatora, raport narz˛edzia testujacego
˛ o wy-
niku przeprowadzonych testów, raport narz˛edzia mierzacego
˛ pokrycie kodu źródłowe-
go aplikacji testami itp.
• wyłaczenia
˛ tymczasowo i właczenia
˛ ponownie danego projektu z/do procesu automa-
tycznej integracji,
• zaniechania trwajacej
˛ próby integracji.
27 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
28 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
tworzenie własnych kanałów, które każdy użytkownik może dostosować do swoich potrzeb
– np. przez wybranie interesujacych
˛ go projektów.
Kanały RSS sa˛ usługa˛ sieciowa,˛ do której dost˛epne jest wiele narz˛edzi. Co wi˛ecej
czytnik RSS może być wykorzystywany do otrzymywania informacji z wielu różnych źródeł.
Tym samym zastosowanie kanałów RSS jako narz˛edzia do informowania programistów przez
serwer ciagłej
˛ integracji może okazać si˛e wygodne i proste do wdrożenia.
Inne urzadzenia
˛ do informowania o stanie projektu
10
Por. http://www.tfsbuild.com/Default.aspx?Page=ControlLavaLampsAndStreetLights
29 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Środowisko ciagłej
˛ integracji może zostać wykorzystane w procesie zarzadzania
˛
wersjami oprogramowania. Podstawa˛ do tego jest spostrzeżenie, że serwer ciagłej
˛ integra-
cji w pewien sposób sprawdza stabilność i jakość zarzadzanej
˛ przez siebie aplikacji. Istota˛
publikowania nowej wersji produktu jest sprawdzenie, czy spełnia ona postawione wobec niej
oczekiwania. Serwer ciagłej
˛ integracji z natury rzeczy wspomaga taka˛ kontrol˛e. Publikowa-
nie nowej wersji programu ma sens oczywiście jedynie wtedy, gdy serwer ciagłej
˛ integracji
wskazuje pozytywny stan aplikacji.
30 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Jeśli tylko całość procesu integracji zakończyła si˛e pomyślnie i bezbł˛ednie, warto
zapisać stan kodu źródłowego. Pozwala to w każdej chwili wrócić do ostatniej działajacej
˛
wersji. Taka wersja nie może oczywiście stanowić wersji stabilnej aplikacji, jednak nadaje
si˛e do testowania funkcji ostatnio dodanych do aplikacji. Repozytoria kodu umożliwiaja˛ ety-
kietowanie plików. Oznaczenie może wi˛ec polegać na przypisaniu etykiety całemu kodowi
źródłowemu aplikacji. Schematycznie takie przesyłanie informacji z serwera ciagłej
˛ integra-
cji do repozytorium kodu zostało przedstawione na rysunku 1.10.
31 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
• Nocne wersje (ang. nightly builds) – sa˛ to wersje programu automatycznie budowa-
ne w regularnych odst˛epach czasu – najcz˛eściej w odst˛epach jednodniowych o ściśle
określonej porze. Swoja˛ nazw˛e wzi˛eły z tego, że zwykle buduje si˛e je w nocy, kiedy
nie sa˛ prowadzone żadne prace programistyczne.
• Wersje kandydackie (ang. candidate releases) – sa˛ to wersje prywatne ogłaszane zwy-
kle w czasie poprzedzajacym
˛ czas ogłoszenia publicznej wersji. Prywatne wersje służa˛
do użytku wewn˛etrznego jako materiał do testowania aplikacji przed dostarczeniem jej
klientowi.
Należy podkreślić, że samego procesu ogłaszania wersji nie można w wi˛ekszości
sytuacji w pełni zautomatyzować. Automatycznie ogłaszane wersje sa˛ przetestowane jedynie
w tym zakresie, w jakim serwer ciagłej
˛ integracji testuje aplikacj˛e, a zwykle nie jest to stopień
zadowalajacy.
˛ Tak wi˛ec środowiska ciagłej
˛ integracji jedynie wspomagaja˛ wersjonowanie,
nie sa˛ w stanie w pełni go zautomatyzować.
32 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
33 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Zastosowanie ciagłej
˛ integracji niesie za soba˛ wiele korzyści – zarówno doraźnych,
których efekty widać w danym projekcie, jak i długoterminowych, na których moga˛ sko-
rzystać przyszłe projekty prowadzone przez organizacj˛e. Pogrupowane w kategorie korzyści
opisano w kolejnych podrozdziałach.
Serwery ciagłej
˛ integracji nie wpływaja˛ bezpośrednio na jakość produktu, jakim
jest oprogramowanie. Pozwalaja˛ jedynie t˛e jakość kontrolować; środowisko ciagłej
˛ integracji
należy wi˛ec raczej postrzegać jako miernik jakości wytwarzanego oprogramowania.
Niemniej do korzyści z wdrożenia ciagłej
˛ integracji w procesie produkcji oprogra-
mowania należy zaliczyć wymuszenie automatyzacji testów (i innych mechanizmów kontroli
jakości opisanych w poprzednich rozdziałach). Jak wspomniano, ogromna˛ zaleta˛ automa-
tycznych testów jest ich powtarzalność. Raz skonstruowany test może zostać przeprowadzo-
ny przez komputer wielokrotnie – w przeciwieństwie do r˛ecznych testów, w których nakład
czasu i zasobów potrzebny do przeprowadzania testu jest w zasadzie identyczny za każdym
razem. Dzi˛eki testom automatycznym możliwe jest ciagłe
˛ testowanie aplikacji, co z kolei
pozwala stale kontrolować jej jakość.
Jak podkreśla M. Fowler w pracy [Fow06] ogromne znaczenie ma też fakt, że przy
zastosowaniu ciagłej
˛ integracji skraca si˛e średni czas od powstania bł˛edu do jego naprawie-
nia. Dzieje si˛e tak dlatego, że tuż po wprowadzeniu bł˛ednego kodu do repozytorium, serwer
ciagłej
˛ integracji pobiera go i sprawdza, próbujac
˛ budować aplikacj˛e. W przypadku wykrycia
bł˛edu, serwer ciagłej
˛ integracji zgłasza bład
˛ i powiadamia o tym zainteresowanych progra-
mistów w czasie rz˛edu minut od dokonania zmiany. Dzi˛eki temu twórcy sa˛ na bieżaco
˛ ze
zmienianym fragmentem aplikacji i nie musza˛ poświ˛ecać czasu na przypomnienie architek-
tury. W podejściu tradycyjnym bł˛edy sa˛ najcz˛eściej wykrywane dużo później, tj. pod koniec
projektu, albo co gorsza po wdrożeniu produktu do użytku, kiedy naprawienie bł˛edu jest dużo
bardziej kosztowne.
M. Fowler w [Fow06] zwraca również uwag˛e na psychologiczny aspekt szybkiego
poprawiania bł˛edów. Odwołujac
˛ si˛e do tzw. zjawiska wybitych okien (ang. Broken Windows
34 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Syndrome)11 postuluje jak najszybsze poprawianie usterek. Jego zdaniem dłuższe pozosta-
wanie nienaprawionych bł˛edów skutkuje mniejsza˛ dbałościa˛ programistów. Widzac
˛ niena-
prawione bł˛edy programiści sa˛ mniej ostrożni i łatwiej o nowe usterki.
Z kolei V. Subramanian w [Sub04] zauważa, że automatyzacja procesu budowa-
nia umożliwia wspieranie różnych konfiguracji systemowych – np. uruchamianie aplikacji
na różnych platformach sprz˛etowych, testowanie z użyciem różnych systemów zarzadzania
˛
baza˛ danych, testowanie webowego interfejsu użytkownika z użyciem różnych przegladarek
˛
internetowych itd. W wi˛ekszości organizacji programiści na swoich komputerach instaluja˛
tylko jedna˛ ze wspieranych konfiguracji. Nie sposób wymagać, by każdy z nich instalował
u siebie różne systemy operacyjne, systemy baz danych, przegladarki
˛ i stworzony przez sie-
bie kod testował w działaniu w wielu konfiguracjach.
11
Broken Windows Syndrome – teoria socjologiczna oparta na obserwacji stanu budynków miejskich. Jeśli
wybita szyba nie zostaje szybko wymieniona, zaczyna si˛e pojawiać coraz wi˛ecej wybitych szyb w sasiednich
˛
oknach. Jedno uchybienie pozostajace
˛ długo nienaprawione świadczy o przyzwoleniu na nast˛epne uchybienia.
12
Patrz [Man01].
35 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
1.5.3 Zarzadzanie
˛ zmianami
Bolaczk
˛ a˛ prawie każdego projektu informatycznego sa˛ zmiany założeń w trakcie
prowadzenia projektu. Biora˛ si˛e one z wielu powodów – jak na przykład zmian potrzeb zama-
wiajacego
˛ w czasie trwania projektu czy bł˛ednego zdefiniowania jego celów. Jest to zjawisko
nieuchronne i ciagła
˛ integracja nie jest w stanie mu zapobiec, ale może pomóc minimali-
zować jego skutki. Jak napisano w poprzednim podrozdziale, dzi˛eki stałemu utrzymywaniu
aplikacji w poprawnym stanie można wdrożyć procedur˛e wgladu
˛ zamawiajacego
˛ w bieżacy
˛
stan rozwijanej aplikacji. Pozwala to w sposób proaktywny przygotowywać si˛e na zmiany.
Im wcześniej zostana˛ zgłoszone żadania
˛ zmian, tym mniej kosztowne jest ich uwzgl˛ednienie.
Z takiego rozwiazania
˛ korzyści czerpie zarówno dostawca, jak i zamawiajacy
˛ produkt infor-
matyczny – dostawca może planować dalsze kroki w pewniejszy sposób, a zamawiajacy
˛ nie
jest narażony na ryzyko opóźnienia projektu czy zwi˛ekszenia jego kosztów.
Doskonale wpisuje si˛e to w koncepcj˛e zwinnych metod zarzadzania
˛ projektem in-
formatycznym, których nadrz˛ednym celem jest satysfakcja zamawiajacego
˛ – w przeciwień-
stwie do projektów prowadzonych w sposób tradycyjny, w których priorytetem jest zgodność
z poczatkow
˛ a˛ specyfikacja.˛
36 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
37 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Środowisko ciagłej
˛ integracji b˛edzie wymagało nieustannych nakładów z powodu
konieczności wyznaczenia osób odpowiedzialnych za nadzorowanie każdego z projektów za-
rzadzanych
˛ przez serwer ciagłej
˛ integracji. Praktyka zastosowania ciagłej
˛ integracji pokazuje,
że mimo automatyzacji integracji ważne jest, by każdy z projektów miał swojego opiekuna.
Jest on odpowiedzialny za dbanie o to, by projekt był możliwie cz˛esto w poprawnym stanie.
Nie oznacza to obowiazku
˛ samodzielnego naprawiania bł˛edów, ale zadaniem takiej osoby jest
wyznaczanie, kto z programistów ma si˛e zajać
˛ naprawianiem bł˛edu. Nie zawsze komunikat
bł˛edu z testów jednoznacznie wskazuje „winnego” powstania bł˛edu – zwłaszcza gdy kilka
osób pracuje nad jednym fragmentem aplikacji. Innym zadaniem pozostaje naprawianie bł˛e-
dów niewynikajacych
˛ z samego kodu aplikacji, jak na przykład usterek całej infrastruktury
integracji danego projektu.
38 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Rozdział 2
– budowania,
– testowania,
• skalowalność.
39 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
40 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
2.1.1 CruiseControl
Interfejs użytkownika
19
W dosłownym tłumaczeniu mianem „cruise control” określa si˛e tempomat – urzadzenie
˛ stosowane np.
w samochodach, które samoczynnie utrzymuje zadana˛ pr˛edkość podróżna.˛
20
W firmie ThoughtWorks przez wiele lat pracował wspomniany wielokrotnie w tej pracy M. Fowler.
21
Według badań przedstawionych w [Fle09] CruiseControl ma 42-procentowy udział w rynku.
41 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Jak widać na rysunku 2.1, interfejs aplikacji jest całkiem czytelny – kolorem zielo-
nym oznaczono projekty, które sa˛ w poprawnym stanie; kolorem czerwonym – te, których
ostatnia próba integracji si˛e nie powiodła. W aplikacji Dashboard możliwe jest m.in.:
• ogladanie
˛ stanu każdego z zarzadzanych
˛ projektów,
Konfiguracja
2.1.2 Hudson
Hudson jest stosunkowo młodym produktem na rynku ciagłej
˛ integracji, jednak
szybko zyskuje sobie popularność („podbierajac”
˛ użytkowników programowi CruiseCon-
trol).
22
Patrz: http://cruisecontrol.sourceforge.net/main/configxml.html.
42 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
43 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
– zielonym. Źródeł tej odmienności należy doszukiwać si˛e w różnicach kulturowych mi˛edzy
światem zachodnim a Japonia,˛ z której pochodzi autor aplikacji.
Z poczatku
˛ troch˛e nieintuicyjnym wydaje si˛e wprowadzenie jeszcze trzeciego ko-
loru, żółtego, który oznacza, że projekt jest niestabilny. Należy wtedy rozumieć, że ostat-
nia próba integracja zakończyła si˛e co prawda pomyślnie, ale któryś z jej elementów zgło-
sił ostrzeżenie. Na korzyść takiego rozwiazania
˛ w Hudsonie może świadczyć fakt, że pułap
liczby ostrzeżeń, od którego projekt jest uznawany za niestabilny, jest konfigurowalny. Nie
stanowi wi˛ec problemu praktyczne wyeliminowanie tego pośredniego stanu nazwanego nie-
stabilnym, a dodatkowa możliwość konfiguracji powinna być zawsze uznawana za zalet˛e.
W ramach uzupełnienia warto wspomnieć o klasycznym rozumieniu terminu „stabil-
ność” rozwoju aplikacji. Pod tym poj˛eciem zwykle rozumie si˛e raczej stan rozwoju aplikacji
w kontekście czasowym. Jeśli zmiany sa˛ przewidywalne i rzadko zdarza si˛e, że kod źródło-
wy jest wadliwy, to można mówić o stabilnym projekcie. Niestabilny projekt czy niestabilna
faza projektu oznacza taki okres w rozwoju aplikacji, kiedy cz˛esto zdarza si˛e, że aplikacja
nie działa poprawnie.
Co ciekawe, Hudson poza obecnym stanem aplikacji wyświetla również informacj˛e
o „zdrowiu” aplikacji. Doskonale pasuje to do opisywanego powyżej sposobu rozumienia
stabilności według K. Kawaguchiego. Wnioskujac
˛ na podstawie kilku ostatnich prób budo-
wania (czy zakończyły si˛e sukcesem czy porażka)
˛ ocenia na ile stabilny (zdrowy) jest pro-
dukt. Ikony nawiazuj
˛ a˛ do prognoz pogody – od słońca (produkt w pełni zdrowy) po burz˛e,
która wskazuje „ciemne chmury nad projektem”.
2.1.3 TeamCity
Innym rozwiazaniem
˛ dost˛epnym na rynku produktów wspomagajacych
˛ ciagł
˛ a˛ in-
tegracj˛e jest TeamCity firmy JetBrains24 . W przeciwieństwie do Hudsona i aplikacji Cru-
iseControl, TeamCity nie jest rozwijany jako otwarte oprogramowanie, jednak podstawo-
wa wersja TeamCity (Professional Edition) jest dost˛epna za darmo, można ja˛ zastosować
w mniejszych projektach (do 20 konfiguracji budowania), liczac
˛ si˛e z pewnymi ogranicze-
niami w funkcjonalności. Licencja na pełna˛ wersj˛e (Enterprise Edition) kosztuje 1700 euro.
Brak dost˛epnego kodu źródłowego aplikacji może wpływać negatywnie na elastyczność za-
stosowania tego rozwiazania
˛ w bardziej skomplikowanych konfiguracjach. Jest to z pewno-
ścia˛ informacja, której nie należy pominać
˛ przy wyborze rozwiazania
˛ ciagłej
˛ integracji.
24
Firma JetBrains jest znana w świecie Javy ze środowiska programistycznego IntelliJ IDEA, które oferuje.
Wywodzi si˛e z Czech.
44 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Poj˛ecia
• projekt,
• konfiguracja budowania,
• agent.
Interfejs użytkownika
45 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
46 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
2. Automatyzacja budowania.
3. Samo-testujaca
˛ si˛e integracja.
6. Szybka integracja.
9. Przejrzystość i jawność.
47 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Warto jeszcze raz podkreślić, że w repozytorium kodu należy przechowywać nie
tylko kod źródłowy, ale wszystkie zapisy potrzebne do zbudowania aplikacji. Sam M. Fowler
w [Fow06] opisuje to w sposób nast˛epujacy:
˛
Samo-testujaca
˛ si˛e integracja
M. Fowler pisze:
48 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
programu nie oznacza, że działa on poprawnie. Nowoczesne j˛ezyki o statycznym systemie
typów26 moga˛ wykrywać pewne bł˛edy, ale wiele z nich i tak prześlizgnie si˛e przez sieć.
Dobrym sposobem na wykrywanie bł˛edów w sposób szybszy i bardziej efektywny jest
właczenie
˛ automatycznych testów do procesu budowania. Testowanie oczywiście nie rozwia˛że
wszystkich problemów, ale może ujawnić wiele bł˛edów, co jest warte zachodu. W szczególno-
ści wzrost popularności Programowania Ekstremalnego (ang. Extreme Programming (XP))
oraz ang. Test Driven Development27 spowodował zainteresowanie samo-testujacym
˛ si˛e ko-
dem [. . . ].
Wdrożenie ciagłej
˛ integracji polega nie tylko na zainstalowaniu serwera; jest to tak-
że praktyka, której trzymaja˛ si˛e członkowie zespołu programistycznego28 . Polega ona na cz˛e-
stym wgrywaniu wprowadzonych przez siebie zmian do repozytorium.
Im cz˛eściej wgrywa si˛e kod do repozytorium, tym rzadziej wyst˛epuja˛ konflikty pod-
czas wgrywania (sytuacje, w których dwaj różni programiści dokonali niezależnych zmian
w tym samym pliku). Przestrzeganie reguły cz˛estego wgrywania zmian wymusza też podział
pracy na mniejsze zadania. Każde wgranie kodu jest podmiotem osobnych testów ze strony
serwera ciagłej
˛ integracji, co z kolei powoduje, że poszczególne fragmenty wi˛ekszej zmiany
sa˛ lepiej przetestowane.
26
Wśród obecnie popularnych j˛ezyków programowania j˛ezykami o statycznym systemie typów sa˛ m.in. C,
C++, C#, Java, Perl – w przeciwieństwie do j˛ezyków z dynamicznym systemem typów, takich jak: JavaScript,
PHP, Python, Ruby, Smalltalk.
27
TDD – Technika programowania, której istota˛ jest pisanie testów przed napisaniem samego testowanego
kodu. W ten sposób definiujac
˛ testy definiuje si˛e oczekiwanie zachowanie fragmentów programu. Po samym
napisaniu testów nie maja˛ one szansy zadziałać, dopiero „dopisanie” testowanego kodu może spowodować po-
prawny przebieg testów. Takie podejście zwi˛eksza jakość tworzonego kodu – przez zapobieganie powstawaniu
w nim bł˛edów.
28
Por. z definicja˛ przedstawiona˛ we wst˛epie tej pracy.
49 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Szybka integracja
50 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
• użycie tych samych bibliotek, które b˛eda˛ używane w systemie produkcyjnym, nawet
jeśli wydaja˛ si˛e niepotrzebne,
51 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Na rynku dost˛epnych jest wiele narz˛edzi, których celem jest tworzenie zaślepek
do różnego typu usług sieciowych, co pozwala wybrnać
˛ z trudnej sytuacji przy zestawianiu
środowiska testowego.
2.3 Skalowalność
Jak napisano w rozdziale 2.2, istotnym dla skutecznego działania ciagłej
˛ integracji
w projekcie jest sprawne działanie serwera.
Z jednej strony da˛ży si˛e do skracania jak to tylko możliwe czasu pojedynczej próby
integracji. Głównie po to, by odpowiedź o stanie aplikacji po wgraniu kodu do repozytorium
przychodziła do zainteresowanych członków zespołu jak najszybciej. Jednakowoż długi czas
trwania prób budowania poszczególnych aplikacji przekłada si˛e na gorsza˛ wydajność całego
środowiska ciagłej
˛ integracji, a im sprawniej przebiega integracja, tym cz˛eściej można jej
próbować.
Przeciwstawnym da˛żeniem jest tendencja do rozbudowywania zestawu testów tak,
by aplikacje były sprawdzane w coraz dokładniejszy sposób. Im wi˛ecej różnych sposobów,
52 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
na które program jest sprawdzany, tym wi˛eksza pewność co do jego jakości. W naturalny
sposób gruntowne inspekcje prowadza˛ jednak do wydłużenia czasu integracji.
Chcac
˛ pogodzić obie tendencje można spróbować nast˛epujacych,
˛ zupełnie różnych,
rozwiazań:
˛
53 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
54 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
30
W opinii autora niniejszej pracy brak jest dobrego tłumaczenia na polski. Sugerowane przez niektórych
„przetwarzanie w chmurze” nie wydaje si˛e odpowiednie.
31
EC2 – pełna nazwa Amazon Elastic Compute Cloud – sieciowa usługa wynajmu wirtualnych kompute-
rów. Ostatnio szybko zyskuje na popularności, reklamowana jako rewolucja w dziedzinie zarzadzania
˛ zasobami
serwerowymi w firmie.
32
Najbardziej znanym produktem tej australijskiej firmy jest JIRA – narz˛edzie do śledzenia zadań, bł˛edów
itp.
55 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
• lokalny agent – uruchamia prób˛e integracji na tej samej maszynie co serwer ciagłej
˛
integracji,
Jak każde zastosowanie cloud computing, również cloud computing w służbie ciagłej
˛ inte-
gracji pokazuje, że do dokonywania dużych obliczeń wcale nie sa˛ konieczne duże inwestycje
w sprz˛et. Co wi˛ecej, zastosowanie tego pomysłu pozwala na dynamiczne decydowanie o ilo-
ści mocy obliczeniowej poświ˛econej na ciagł
˛ a˛ integracj˛e i płacenie tylko za wykonana˛ prac˛e.
56 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
57 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Zakończenie
Bez watpienia
˛ ciagła
˛ integracja, jeśli tylko b˛edzie poprawnie stosowana, może być
przydatna w wi˛ekszości projektów programistycznych. Sama lektura różnych koncepcji po-
stulowanych przez zwolenników ciagłej
˛ integracji może być inspirujaca
˛ i wspomóc nadzoro-
wanie jakości w projektach informatycznych.
33
Ang. insane.
58 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Popularność
Ciagła
˛ integracja wydaje si˛e być dobrym pomysłem, jednym z kilku prostych na-
rz˛edzi, które moga˛ dużo wnieść do projektu informatycznego. Tym bardziej intrygujaca
˛ jest
niezbyt duża popularność tego podejścia. Co prawda niektóre badania wskazuja˛ na ogromna˛
popularność34 tego zjawiska, ale nie wydaja˛ si˛e one wiarygodne. Bliższa prawdy zdaje si˛e być
ankieta35 przeprowadzona w marcu 2009 na stronie jdn.pl (tak wi˛ec w polskim środowisku),
której wyniki przedstawiono w poniższej tabeli:
Jak wyglada
˛ ciagła
˛ integracja (CI) w twoim projekcie?
nie wiem o co chodzi 32% (43 głosy)
nie mamy odpowiedniego narz˛edzia 12% (16 głosów)
nie działa, bo nie ma testów 15% (20 głosów)
jest, ale nikogo to nie obchodzi 19% (25 głosów)
jest, kto zepsuje build musi odbyć kar˛e 17% (22 głosy)
jest, zespół jest rozliczany z ilości zepsutych buildów 5% (7 głosów)
59 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
być dobrym tematem do dalszych badań. Ciekawym wynikiem byłyby informacje, co przy-
ciaga,
˛ a co zraża do stosowania ciagłej
˛ integracji? Co stoi na przeszkodzie wi˛ekszej popular-
ności ciagłej
˛ integracji?
Poza obszar tej pracy wykraczaja˛ również rozważania na temat sposobu automaty-
zacji testów. Wydaje si˛e, że w dobie powszechnie dost˛epnych dużych mocy obliczeniowych
i w czasach szybkiej wymiany idei istnieje wiele różnych ciekawych i przydatnych koncepcji
automatycznego testowania aplikacji.
Testować można m.in.:
• pod katem
˛ poprawności działania, szybkości, wydajności itp.
Interesujaca
˛ byłaby analiza poszczególnych rodzajów automatycznych testów apli-
kacji komputerowych – w szczególności ich zastosowań, ograniczeń, korzyści jakie moga˛
nieść, wskazań, kiedy i w jakich projektach moga˛ być szczególnie przydatne.
60 / 61
Grzegorz Ol˛edzki, Środowiska ciagłej
˛ integracji w wytwarzaniu oprogramowania
Bibliografia
[Duv07] Paul Duvall. Automation for the people: Continuous integration anti-patterns.
http://download.boulder.ibm.com/ibmdl/pub/software/dw/java/j-ap11297-pdf.pdf,
2007.
[Fle09] Georg Fleischer. Continuous integration. what companies expect and solutions
provide. http://appl.fontysvenlo.org/results/2008/GF/continuous_integration.pdf,
2009.
[Fow06] Martin Fowler. Continuous integration. http://martinfowler.com/articles/
continuousIntegration.html, 2006.
[Man01] Manifesto for agile software development. http://agilemanifesto.org, 2001.
[mat] Ci feature matrix. http://confluence.public.thoughtworks.org/display/CC/
CI+Feature+Matrix.
[Min08] Eric Minick. Continuous integration: Was fowler wrong?
http://www.anthillpro.com/blogs/anthillpro-blog/2008/07/14/
continuous_integration_was_fowler_wrong.html, 2008.
[Min09] Eric Minick. Continuous integration maturity mo-
del. http://www.anthillpro.com/blogs/anthillpro-blog/2009/05/05/
continuous_integration_maturity_model.html, 2009.
[PD07] Andrew Glover Paul Duvall, Steve Matyas. Continuous Integration: Improving
Software Quality and Reducing Risk. Addison-Wesley, 2007.
[Sav04] Alberto Savoia. Extreme feedback for software development.
http://www.developertesting.com/archives/month200404/20040401-
eXtremeFeedbackForSoftwareDevelopment.html, 2004.
[Sub04] Venkat Subramaniam. Test driven development – part iii: Continuous integration.
http://www.agiledeveloper.com/articles/TDDPartIII.pdf, 2004.
61 / 61