You are on page 1of 84

10/2008 (166)

SPIS TREŚCI
06 AKTUALNOŚCI nąć wielu błędów w sztuce, zapewnia weryfikację na wczesnym sta-
Rafał Kocisz dium. Zachęca zespół projektowy do współpracy, dzielenia się wie-
dzą, wprowadza dobre nawyki. Zapewnia produktowi stabilną pod-
12 OPIS CD stawę a członkom zespołu sposób podnoszenia umiejętności.

38 Wstęp do IBM WebSphere MQ v6.0


BIBLIOTEKA MIESIĄCA Paweł Pietrasz
14 OVal – walidacja spójności danych w aplikacjach Paweł opisuje IBM WebSphere MQ jako rozwiązanie pozwalające na inte-
korporacyjnych grację różnych systemów informatycznych poprzez dostarczenie mechani-
Sebastian Piotrowski zmów pozwalających na łatwą wymianę komunikatów pomiędzy nimi.
Walidacja spójności danych to mało lubiany temat w społeczności
programistycznej, zazwyczaj kojarzy się z monotonną, powtarzalną 42 Wyzwalacze w aplikacjach biznesowych
i mało kreatywną pracą. Z drugiej strony – w kontekście wymagań Artur Mościcki
jakościowych w aplikacjach korporacyjnych, spójność danych to je- Artur omawia kwestie związane z wykorzystaniem wyzwalaczy (trig-
den z kluczowych aspektów, którego nie można pominąć. W niniej- gerów) w aplikacjach biznesowych. Oprócz typów wyzwalaczy, ta-
szym artykule pokażemy jak usprawnić i uprzyjemnić sobie pracę bel INSERTED i DELETED prezentuje sposoby identyfikacji rodzaju
związaną z walidacją spójności danych w aplikacjach biznesowych triggera, sposoby wywołania rekurencyjnych i zagnieżdżonych wy-
pisanych w języku Java, przy pomocy biblioteki OVal. zwalaczy. Omawia również triki pozwalające na nieuruchamianie
wyzwalacza dla określonych wierszy oraz niezwykle istotną z punk-
tu widzenia aplikacji biznesowych kwestię wykorzystywania wy-
NARZĘDZIA PROGRAMISTYCZNE zwalaczy na perspektywach.
22 Joomla 1.0.do 1.5 – migracja krok po kroku
Stefan Wajda
Wprawdzie Joomla 1.5 jest następcą 1.0, ale różnice między obu wyda- BAZY DANYCH
niami są tak istotne, że Joomla 1.0.x nie można unowocześnić do Joom- 50 Lokal zamienię od zaraz
la 1.5 przy pomocy łatki aktualizującej. Jedyną możliwą drogą jest migra- Artur Opaliński
cja – założenie nowej witryny na Joomla 1.5 i przeniesienie danych z Jo- Artur opisuje jakie problemy występują podczas przeróbki aplika-
omla 1.0.x. Migracja przebiega w dużej mierze automatycznie. Ten arty- cji do funkcjonowania w nowej wersji systemu operacyjnego. Nawet
kuł przeprowadzi Cię krok po kroku przez cały proces migracji. jeśli same zmiany w aplikacji nie są skomplikowane, przejście przez
stosowną część cyklu jej rozwoju zajmuje czas – przeważnie naj-
cenniejszy zasób w projektach informatycznych. Niestety, nierzad-
TESTOWANIE OPROGRAMOWANIA ko oprócz przerabiania kodu samej aplikacji typu enterprise, trze-
28 Była sobie inspekcja – aplikacja procesu inspekcji ba uwzględnić jej integrację z nowym środowiskiem operacyjnym
Arkadiusz Merta – nowe metody startowania, zmiany niektórych komend systemu
Inspekcja kodu jest jednym z ważniejszych procesów jakościowych, operacyjnego i formatu ich wyników, ponowną instalację i konfigu-
które powinny być prowadzone w ramach projektu. Pomaga unik- rację usług pomocniczych, itd

Miesięcznik
PHP Software
Solutions Developer’s
jest wydawany przezJournal
Software-Wydawnictwo
(12 numerów w Sp.
roku)
z o.o. Le périodique
Dział reklamy:hakin9 est publié par
adv@software.com.pl
jest wydawany przez Software-Wydawnictwo Sp. z o.o. Software-Wydawnictwo
Prenumerata: Marzena Sp. z o.o. pren@software.com.pl,
Dmowska
Dyrektor wydawniczy: Sylwia Pogroszewska Bokserska,
tel. 02-682
+48 22 427 Varsovie,
36 79; +48 22Pologne
427 36 53
Dyrektor wydawniczy: Sylwia Małecka Tél. +48 22 887 10 10, Fax. +48 22 887 10 11
Redaktor naczelny: Patrycja Wądołowska patrycja.wadolowska@software.com.pl www.phpsolmag.org
Redaktor naczelny: Iwona Chwedoruk iwona.chwedoruk@software.com.pl Adres korespondencyjny:
Redaktorzy prowadzący: Anna Kozioł anna.koziol@software.com.pl Directeur de la publication
Software-Wydawnictwo Sp.: Jarosław
z o.o., Szumski
Kierownik produkcji: MartaMagdalena
KurpiewskaSobiś
marta.kurpiewska@software.com.pl
magdalena.sobis@software.com.pl ul. Bokserska 1, 02-682 Warszawa, Polska
tel. +48 22 427
Imprimerie, 36 91, fax :+48
photogravure 10122 244 24
Studio, 59 Tęgi
Firma
Projekt
Skład i łamanie:
okładki: Grzegorz
AgnieszkaLaskowski
Marchocka www.sdjournal.org
Ekonomiczna 30/36,redakcja@software.com.pl
93-426 Łódź
Imprimé en Pologne/Printed in Poland
DTP Manager:
Projekt okładki:Robert
Agnieszka
Zadrożny
Marchocka
robert.zadrozny@software.com.pl
Abonnement (France métropolitaine, DOM/TOM) : 1 an
Kierownik produkcji:
Wyróżnieni betatesterzy:
Marta
Ł. Kurpiewska
Lechert, S. Nieszwiec, R.Zacharczyk
marta.kurpiewska@software.com.pl Dołączoną do magazynu
(soit 6 numéros) 38 € płytę CD przetestowano programem AntiVirenKit firmy
G DATA Software Sp. z o.o.
Nakład: 6Mateusz
Korekta: 000 egz.Lipiński matlipinski@wp.pl Dépôt légal : à parution
Wyróżnieni betatesterzy: P. Bańka, A. Poniedziałek, R.Zacharczyk ISSN : 1731-7037
Distribution : MLP
Dział reklamy: adv@software.com.pl Redakcja dokłada
Parc d’activités dewszelkich
Chesnes,starań,
55 bdbydepublikowane
la Noirée w piśmie i na towarzyszących mu
Prenumerata: Marzena Dmowska pren@software.com.pl nośnikach
BP 59 F - informacje i programy były poprawne, jednakże
38291 SAINT-QUENTIN-FALLAVIER CEDEXnie bierze odpowiedzialności
za
(c) efekty wykorzystania ich; nie gwarantuje
2005 Software-Wydawnictwo, także réservés
tous les droits poprawnego działania programów
Nakład: 6 000 egz. shareware, freeware i public domain.

4 10/2008
SYSTEMY OPERACYJNE ZESTAWIENIE
54 Inteligentne partycjonowanie zasobów w syste- 70 Zestawienie narzędzi do testowania oprogra-
mach czasu rzeczywistego mowania
Roman Końszyn
Roman opisuje technologię inteligentnego partycjonowania zaso-
bów – rozszerzenie systemu operacyjnego czasu rzeczywistego na WYWIAD
poziomie jądra. Technologia ta pozwala na tworzenie bezpiecznych 74 Wywiad z Kevinem Parkerem
grup składających się z kilku aplikacji i wątków, pozwalając jednocze-
śnie na maksymalnie efektywne wykorzystanie zasobów procesora. W
niniejszym artykule przyjrzymy się dokładniej, co to jest inteligentne
partycjonowanie zasobów i jakie zalety ma ono dla programistów i
projektantów wbudowanych systemów czasu rzeczywistego.

PROGRAMOWANIE UML
58 Język UML 2.x w dydaktyce akademickiej
Stanisław Wrycza, Bartosz Marcinkowski
Autorzy zaprezentowali założenia metodologiczne dotychczas sto-
sowanego programu nauczania języka UML. Artykuł zawiera uwa-
runkowania oraz wyniki badania ankietowego oraz wnioski, ściśle
związane z modyfikacjami, poczynionymi w dotychczas stosowa-
nym programie nauczania języka UML. Treść niniejszego artykułu
oparto na doświadczeniach uczelni wyższych w Gdańsku, zebranych
w ramach wykładów i laboratoriów, wspieranych studiami przypad-
ków, narzędziami CASE i treściami e-learningowymi.

WARSZTATY
64 Własny „słup ogłoszeniowy” – konta użytkowni-
ków oraz administracja
Piotr Plenik
Piotr w poprzednim artykule utworzył serwis ogłoszeniowy, który
spełnia swoją podstawową funkcję – umożliwia przeglądanie oraz
samodzielne dodawanie ogłoszeń. Jednak nie wróży mu sprawnego
działania bez kont użytkowników z możliwością dodawania ogło-
szeń tylko po zalogowaniu, zarządzania ogłoszeniami oraz użytkow-
nikami przez administratora oraz krótszych i czytelniejszych adre-
sów URL. W tym artykule zajmiemy się wszystkimi w/w kwestiami,
pozostawiając na koniec kwestie kończenia aplikacji oraz ostatecz-
ną publikację na serwerze.

Uszkodzone podczas wysyłki płyty wymienia redakcja.

Wszystkie znaki firmowe zawarte w piśmie są własności odpowiednich firm zostały


użyte wyłącznie w celach informacyjnych.

Redakcja używa systemu automatycznego składu

Osoby zainteresowane współpracą prosimy o kontakt:


sdj@software.com.pl

Druk: 101studio DTP

Wysokość nakładu obejmuje również dodruki. Redakcja nie udziela pomocy


technicznej w instalowaniu i użytkowaniu programów zamieszczonych na płycie
CD-ROM dostarczonej razem z pismem.

Sprzedaż aktualnych lub archiwalnych numerów pisma po innej cenie niż


wydrukowana na okładce – bez zgody wydawcy – jest działaniem na jego
szkodę i skutkuje odpowiedzialnością sądową.

www.sdjournal.org 5
Aktualności

Del.icio.us szybsze i bez kropek


Yahoo! wprowadził zmiany w del.icio.us Microsoft
wesprze Fundację Apache
– hostowanej usłudze do przechowywa-
nia, opisywania i współdzielenia łącz do
witryn internetowych (zwanych popular-

P
nie odnośnikami). Najważniejszą zmianą odczas odbywającej się w USA konferen- sane wyżej posunięcie jest częścią szerszej inicja-
według firmy są modyfikacje silnika strony, cji Otwartego Oprogramowania, Funda- tywy Microsoftu w celu zwiększenia kompaty-
które mają sprawić, że witryna będzie dzia-
łać szybciej pod rosnącym obciążeniem
cja Apache poinformowała o pozyskaniu bilności Apache z platformą .NET. Pomimo za-
– aktualnie z del.icio.us korzysta około nowego sponsora, jakim jest Microsoft. Gigant z pewnień Erenkrantz'a, informacja na temat ru-
pięciu milionów użytkowników. Użyt- Redmond zobowiązał się bowiem do wspierania chu Microsoftu spotkała się w środowisku Open
kownikom jednak nie to rzuci się w oczy, fundacji kwotą 100 tys. dolarów rocznie, przy- Source z dużym dystansem, nutką podejrzliwo-
przynajmniej nie od razu – inna zmiana łączając się tym samym do grona platynowych ści, oraz – z zadowoleniem. Najprawdopodob-
polega bowiem na... rezygnacji z kropek
sponsorów, tuż obok Google i Yahoo!. Zdaniem niej, wiele osób, w dalszym ciągu będzie po-
w nazwie i adresie serwisu. Yahoo! na ofi-
cjalnym blogu usługi przyznaje, że kropki Justina Erenkrantza, prezesa fundacji, nowa ini- strzegało całą sytuację jako swego rodzaju pułap-
były dla większości użytkowników ogrom- cjatywa Microsoftu jest kolejnym krokiem w za- kę, aczkolwiek – jak zapewnia jeden z przedsta-
nym utrudnieniem. Ludzie często mylili kresie zwiększenia interoperacyjności. Wierzy, wicieli Fundacji – model zarządzania organiza-
nazwę, wpisując różne kombinacje – np. że przedsięwzięcie to jest wyłącznie podyktowa- cją nie pozostawia miejsca na jakiekolwiek nad-
de.licio.us, del.icio.us.com albo del.licio.us. ne uzasadnioną chęcią polepszenia współpracy użycia. Sam Ramji, szef działu do spraw wolne-
Serwis był więc łakomym kąskiem dla
pomiędzy Apache, a rozwiązaniami spółki. Jako go oprogramowania w Microsofcie, równocze-
scammerów. Teraz nazwa i adres brzmi
po prostu delicious.com i jest prostsza do przykład wskazuje projekt Apache POI, będący śnie zapewnił, że wspomniany krok w żaden
zapamiętania. Obecni użytkownicy ser- zbiorem bibliotek Javy, pozwalający na zapisy- sposób nie wiąże się z rezygnacją z rozwijania
wisu oczywiście będą musieli się do niej wanie i odczytywanie dokumentów w formacie serwera IIS. Korporacja nie ukrywa przy tym, że
przyzwyczaić, a także ponownie zalogo- MS Office. Twierdzi ponadto, że społeczność korzyści płynące z nawiązanej współpracy, mogą
wać. Inne, już nie tak zauważalne zmiany skupiona wokół serwera, na ogół pragmatycz- przełożyć się na implementację nowych, cieka-
w serwisie to między innymi wydłużenie
opisów zakładek z 255 do tysiąca znaków.
na i otwarta na udział zewnętrznych korpora- wych funkcji w nadchodzącym IIS8, w tym na
Nowych funkcji i widoków doczekał się cji, nie powinna mieć nic przeciwko uczestnic- wsparcia dla języka PHP.
także interfejs serwisu. twu Microsoftu. Nie wiadomo na razie, czy opi- http://www.techit.pl/
http://yahoo.com/

Zawirowania wokół Yahoo!


Gears ze wsparciem
dla Gmail i Google Calendar
Firma Google poinformowała o planach

L
przedstawienia nowych odsłon GMail i ipiec i początek sierpnia bieżącego roku dyrektorami. Równolegle pojawiła się kolejna cie-
Google Calendar, obsługujących wtycz- były dla koncernu Yahoo! gorącymi mie- kawa informacja, że przybywa akcjonariuszy, któ-
kę Gears, co ma pozwolić na pracę z siącami. Czas ten był pełen emocji szcze- rzy proponują całkowite odparcie nacisków Icah-
tymi aplikacjami bez aktywnego połą-
gólnie dla zarządu korporacji. Całe zamieszanie na. Wśród nich jest fundusz Legg Mason Capital
czenia z Internetem. Kolejną nowością w
obydwu aplikacjach będzie obsługa stan- zaczęło się od tego, że inwestor Carl Icahn po od- Management, jeden z najbardziej znaczących ak-
dardu SyncML do synchronizacji kontak- mownej odpowiedzi Yahoo! na kolejną propozycję cjonariuszy Yahoo!. Posiada on około 6,5% akcji
tów. Zapowiedź ta jest najprawdopodob- sfinalizowania transakcji z Microsoftem złożył w firmy – dwadzieścia razy więcej, niż grupa Plan B.
niej próbą popularyzacji produktów kor- Securities and Exchange Commision (odpowied- W tym momencie wizja przejęcia całkowitej kon-
poracji na rynku biznesowym, a szczegól- nik Komisji Nadzoru Finansowego sprawujący troli nad internetowym koncernem przez Carla
nie wśród niewielkich przedsiębiorstw.
w USA kontrolę nad obrotem giełdowym) infor- Icahna zaczęła tracić realne kształty. W końcu za-
Mało który pracodawca zaryzykował-
by brak dostępu do tak podstawowych macje co do planowanych zmian w zarządzie fir- rządowi Yahoo! udało się zawrzeć kompromis z in-
usług jak poczta, czy kalendarz, wskutek my. Analitycy zastanawiali się, czy Icahn sprzyja- westorem. W ramach ugody Carl Icahn wycofał
awarii sieci. Co ciekawe, niektórzy konku- jący Microsoftowi będzie chciał wymienić cały za- się z dążenia do wymiany całego zarządu. Ośmiu
renci Google, np. Zimbra czy Zoho, oferu- rząd Yahoo!, czy tylko jego część. Okazało się, że jego dotychczasowych członków ma zostać wybra-
ją już niektóre z wymienionych funkcjo- chodzi o wszystkie dziewięć osób. Jeśli Icahnowi nych ponownie, w tym prezes Jerry Yang. Jedyną
nalności, właśnie w oparciu o produkt
udałoby się przeforsować tę zmianę podczas wal- osobą, która zrezygnuje będzie Robert Kotick. W
giganta z Mountain View, zapewniając
dostęp do swoich aplikacji w trybie offi- nego zgromadzenia akcjonariuszy, to wtedy nawet jego miejsce wejdzie nie kto inny, tylko sam Carl
line. Wprowadzenie obsługi protoko- bez większościowego pakietu akcji, ale ze swoimi Icahn. Dodatkowo skład zarządu będzie rozsze-
łu SyncML (Synchronization Markup Lan- ludźmi w zarządzie mógłby kontrolować całą fir- rzony o dwie osoby, które wskaże sprzyjający Mi-
guage) jest również warte podkreślenia. mę i najprawdopodobniej doprowadziłby do fu- crosoftowi inwestor. Oznacza to, że firmą Yahoo!
Dzięki niemu możliwe stanie się synchro-
zji Yahoo! z Microsoftem na warunkach propo- będzie niedługo zarządzać nie dziewięć, a jedena-
nizowanie informacji pomiędzy różnymi
urządzeniami, głównie za sprawą uzna- nowanych przez giganta z Redmond. Tymczasem ście osób. Nie wiadomo jeszcze, jaka będzie polity-
nia go przez gigantów komórkowych, w pojawiły się informacje, że możliwy jest kompro- ka nowego zarządu względem Microsoftu. Icahn
tym Nokię, Sony, LG, IBM-a i Siemensa, mis. Akcjonariusze zrzeszeni w grupę nazywanej nawet mając po swojej stronie dwóch innych
implementując wsparcie dla niego, przy- Yahoo Plan B, na czele której stanął Ironfire Capi- członków raczej nie ma zbyt wiele do powiedze-
najmniej w części produktów. W najbliż- tal zaproponowani, by uniknąć agresywnej i po- nia. Być może jednak kompromis zakrojony jest na
szym czasie standard SyncML ma umożli-
tencjalnie szkodliwej dla firmy batalii i zawczasu szerszą skalę i poczyniono już pewne ustalenia w
wiać też również eksport wiadomości, co
czyni go tym bardziej interesującym roz- zawrzeć z Icahnem kompromis – zgodzić się na tej kwestii. O szczegółach dowiemy się zapewne w
wiązaniem. czterech proponowanym przez niego członków niedalekiej przyszłości.
http://www.readwriteweb.com/ zarządu, a pięć miejsc obsadzić dotychczasowymi http://betanews.com/

6 10/2008
Aktualności

Bilion adresów stron zindek- Google będzie


inwestował w rozwijające się firmy

sowanych przez Google


The Wall Street Journal donosi, że Google
stworzy fundusz venture capital i będzie
inwestować w małe, rozwijające się przedsię-

S
tale rośnie ilość publikowanych w In- dy Sieć nie była jeszcze tak duża i nie każdy wzięcia. Działanie funduszy tego typu polega
ternecie informacji. Jak wynika z miał do niej swobodny dostęp, co też wyraź- na wykupywaniu części udziałów w niewiel-
kich firmach, co zwykle właścicielom daje
pierwszego raportu przygotowanego nie przekładało się na ilość publikowanych in-
spory zastrzyk gotówki niezbędny do rozwi-
przez Google w 1998 roku, ilość witryn oscy- formacji. Wówczas bowiem jedna stacja robo- nięcia działalności, a funduszowi gwarantu-
lowała wówczas w graniach 26 milionów. Na cza była w stanie obliczyć wykres Page Rank je zyski – oczywiście w przypadku sukcesu
przestrzeni ostatnich ośmiu lat widywaliśmy na 26 milionów na przestrzeni kilku godzin, firmy, w którą wcześniej zainwestował. Grupa
już wiele dużych liczb. Bilion jest ogromną a następnie wykorzystaniu tak przygotowane- pracująca nad projektem założenia funduszu
liczbą niepowtarzalnych adresów URL, a ty- go zbioru przez określoną ilość czasu. Dzisiaj, w Google kierowana jest przez Davida Drum-
monda, jednego z wysoko postawionych
le właśnie, jak twierdzi Google, zindeksowa- wyszukiwarka giganta z Mountain View, na dyrektorów firmy. Nad wyborem firm, w które
nych zostało w ich wyszukiwarce. Czy jed- bieżąco indeksuje zasoby sieci, gromadząc i fundusz będzie inwestować czuwać ma Wil-
nak tak duża ilość zindeksowanych doku- aktualizując informacje o stronach, przetwa- liam Maris, 33-letni inwestor giełdowy, który
mentów faktycznie oznacza ich istnienie i ja- rzając grafy połączeń wiele razy w ciągu dnia. na koncie ma już szereg sukcesów inwestycyj-
ka jest liczba stron na całym świecie? Google Zdaniem korporacji, wykres biliona adresów nych z bardzo dużymi zyskami. Informacja nie
została jeszcze oficjalnie potwierdzona przez
z uśmiechem odpowiada, że nie wie, gdyż nie idealnie oddaje porównanie z mapą przedsta-
Google, nie wiadomo też jaka będzie struktu-
ma czasu spojrzeć na nie wszystkie. Ściślej wiającą identyczną ilość skrzyżowań. Zatem, ra funduszu. Jest to jednak ważny krok w ogól-
mówiąc, ich liczba jest tak naprawdę nieskoń- aby przedstawić ogrom pracy wykonywanej niejszym kontekście – pokazuje nowe pode-
czona. Przykładowo miejsca zawierające tzw. przez klastry obliczeniowe, Google za przy- ście dużych firm do start-upów, gdzie zamiast
automatycznie generowaną treść, jak kalen- kład podaje, iż każdorazowe obliczenie wy- zwykłego przejmowania ich i wcielania we
darze internetowe, w których obecne są lin- kresu jest równoważne z określeniem na ma- własne struktury, inwestuje się w nie i rozwija
ich działalność pod dotychczasową marką.
ki do następnych dni, mogłyby być traktowa- pie miasta skrzyżowania, które są obecne na
http://www.techcrunch.com/
ne za każdym razem jako nowa strona. Tak się każdej drodze w Stanach Zjednoczonych, z tą
jednak nie dzieje, ponieważ nie wynikają z te- różnicą, że mapa ta jest blisko 50 tysięcy razy Mojave – Vista wcale nie taka straszna?
go żadne korzyści. Przykład ten pokazuje tak- większa od rzeczywistej mapy USA z 50 tysią- Mojave to nazwa kodowa nowej wersji sys-
że, że nie ma jednej, ścisłej definicji określa- cami razy większą liczbą dróg i skrzyżowań. temu operacyjnego Windows, bezpośred-
niego następcy Visty, który ma rozwiązywać
jącej co jest użyteczną witryną, a co nie. Acz- Niewątpliwe wynik Google przyprawia zwy-
wszystkie problemy i niedociągnięcia aktual-
kolwiek korporacja jest dumna z posiadania kłego zjadacza chleba o lekki ból głowy. Pozo- nego systemu – tak Microsoft mówił uczestni-
największego indeksu spośród wszystkich staje mieć nadzieję, że firma nie spocznie na kom doświadczenia. W rzeczywistości Mojave
wyszukiwarek, a jej celem jest zindeksowa- laurach, wkraczając na coraz to nowsze ryn- to bezprecedensowy eksperyment, w którym
nie wszystkich danych świata. Dwaj inżynie- ki internetowego biznesu i świadcząc nowa- udział wzięło ponad 120 użytkowników Win-
dowsa, Linuksa i Mac OS X należących do naj-
rowie Google, Jesse Alpert i Nissan Hajajlm, torskie usługi.
bardziej zagorzałych sceptyków i krytykan-
wspominają natomiast same początki, kie- http://www.google.com/ tów Visty. Zamiast nowego systemu pokazy-
wano im właśnie... Windows Vista. W trakcie
10-minutowej demonstracji i po niej kamery
Google bliskie nagrywały reakcje i komentarze uczestników.
Eksperyment jest może nieco kontrowersyj-

przejęcia Digg.com ny, ale efekty mówią same za siebie. Zdecy-


dowana większość uczestników była bardzo
zadowolona z tego, co zobaczyli. Niektórzy

W
okolicach marca br. pojawiły się kontroli jego raportów finansowych, pod- po prostu nie umieli wyjść z podziwu, jaki
pierwsze informacje na temat czas którego wydarzyło się coś, co spowodo- postęp dokonał się od czasów Visty. Innym
przejęcia Digg.com przez Go- wało podjęcie tak drastycznych decyzji. Dwa wręcz brakowało słów. Wszystkie te reakcje
ogle. Na początku dyrektor zarządzający ser- niezależne źródła zbliżone do jednej ze spół- można obejrzeć w klipach wideo, które poja-
wiły się na witrynie projektu Mojave (http:
wisu agregującego newsy, Jay Adelson, sta- ek podają natomiast, iż faktycznym powo-
//www.mojaveexperiment.com/). Projekt był
nowczo zaprzeczał tym informacjom. Jed- dem zerwania rozmów były problemy tech- realizowany przez trzy dni w lipcu w San Fran-
nakże kilka miesięcy później sprawa nabra- niczne, które wyszły na jaw w wyniku owej cisco. Komputer, który był wykorzystywa-
ła szybkiego tempa – podpisane zostało na- kontroli. Inne źródło ujawnia zaś, że przy- ny do demonstracji to notebook HP Pavilion
wet wstępne porozumienie określające wa- czyną była niezgodność charakterów po- DV2000 z 2 GB pamięci RAM. Nie jest to wcale
maszyna o bardzo wygórowanych możliwo-
runki przejęcia i wydawało się, że sprawa szczególnych zespołów obu korporacji. Tym
ściach sprzętowych. Wytłumaczeniem takie-
jest bardzo bliska pozytywnego finału. Do- samym, w mocno niesprzyjającej atmosfe- go wyniku eksperymentu jest raczej fakt, że
celowo, serwis Digg miał stać się częścią Go- rze, trudno najprawdopodobniej będzie zna- większość z tych, którzy najbardziej krytykują
ogle News. Google było gotowe za to zapłacić leźć Digg'owi kupca. W tym celu wynajął on nowy system Microsoft po prostu go nie uży-
200 milionów dolarów. Okazało się jednak, bank inwestycyjny Allen & Co. Wiadomo wało, a spora część nigdy nawet nie widzia-
że gigant z Mountain View w ostatniej chwi- jednak, że jest on jednak znany głównie z za- ło w akcji. Microsoft zapowiada, że planuje
wykorzystać wyniki eksperymentu w przy-
li zdecydował się odejść od rozmów, zabiera- mykania powierzonych mu przedsiębiorstw.
szłych kampaniach marketingowych Visty.
jąc 200 mln dolarów. Do zerwania transak- Czy to oznacza że również i Digg niebawem Ciekawe czy to doświadczenie zmieni wize-
cji doszło na etapie końcowego badania tech- zniknie z Sieci? runek systemu?
nologii wykorzystywanych przez Digg'a oraz http://www.techcrunch.com/ http://www.microsoft.com/poland

www.sdjournal.org 7
Aktualności

DNSSEC zabezpieczy domeny .org


ICANN jednogłośnie zatwierdził propo- Microsoft skierował
SQL Server 2008 do produkcji
zycję Public Interest Registry, operato-
ra domen .org, by zarządzana przez nich
globalna domena najwyższego pozio-

P
mu była pierwszą, która wdrożyła proto- odczas konferencji Wednesday Micro- ściach płynących z wdrożenia nowego SQL Se-
kół zabezpieczeń DNSSEC. W ramach tego soft podał do wiadomości, że SQL Se- rvera podając 10 konkretnych przyczyn prze-
porozumienia PIR będzie również aktyw-
nie pracować na rzecz stworzenia planu
rver 2008 osiągnął status RTM (Release mawiających za adaptacją nowej wersji w środo-
edukacyjnego i adopcyjnego DNSSEC w to Manufacturing), co oznacza, że produkt skie- wisku korporacyjnym. Mowa była między in-
pozostałych strukturach Internetu. Ideą rowany został do produkcji. Wraz z nową wer- nymi o lepszej skalowalności nowej edycji oraz
DNSSEC jest rozwiązanie fundamental- sją aplikacji wydano także jej edycję Web. Wer- wzroście wydajności. Gigant z Redmond pod-
nych problemów zabezpieczeń liczącego sja Web pojawiła się stosunkowo późno, na żą- kreślił także, iż opinie otrzymywane od użyt-
już ćwierć wieku systemu DNS. Niedawno
danie klientów, którym nie odpowiadała żadna kowników starszej edycji programu pozytyw-
patchowane przez szereg producentów
luki umożliwiające atak typu cache poiso- z pozostałych edycji serwera. SQL Server 2008 nie wpłynęły na rozwój programu. Pozwoliło to
ning nie mają prawa bytu po implemen- znajdował się w fazie betatestów od ponad ro- rozwinąć nową wersję aplikacji bazodanowej w
tacji DNSSEC m.in. za sprawą wykorzy- ku i prace nad oprogramowaniem zostały wła- przeciągu zaledwie trzech lat. W oficjalnej not-
stania podpisów cyfrowych. Umożliwia- śnie ukończone. Microsoft wstępnie udostęp- ce prasowej Microsoft pochwalił się także kil-
ją one sprawdzenie, czy otrzymane infor- nił produkt posiadaczom subskrypcji progra- koma wielkimi przedsiębiorstwami testujący-
macje pochodzą z prawidłowego serwe-
mów MSDN oraz TechNet. Microsoft SQL Se- mi SQL Server 2008, m.in. były to Xerox, Sie-
ra. DNSSEC jest rozwijany od 1997 roku.
Wczesne wersje miały poważne proble- rver 2008 to nowy system do zarządzania i ana- mens, Fidelity Investments czy Clear Channel
my architekturalne, które uniemożliwia- lizy danych. SQL Server 2008 oferuje nowe, Communications. Kampania reklamowa no-
ły szerokie zastosowanie w strukturach rozbudowane możliwości, takie jak efektywne wej wersji produktu opatrzona została trzema
Internetu. Wkrótce większość problemów zarządzanie w oparciu o reguły, audyty, obsłu- słowami – inteligentny, zaufany i produktyw-
została rozwiązana, ale pojawiły się kolej- ga bardzo dużych hurtowni danych, dane geo- ny. Microsoft mówi także, iż nowy SQL Server
ne – tym razem o charakterze formalno-
prawnym. Również i na tym polu DNSSEC
graficzne i przestrzenne oraz zaawansowane 2008 to nie tylko ulepszona baza danych, lecz
obronił się, ale najważniejsze części spe- usługi raportowania i analizy. SQL Server 2008 także centralne repozytorium dla Microsofto-
cyfikacji zostały opublikowane dopiero jest bezpieczną, efektywną i inteligentną plat- wego modelu strategii zarządzania danymi oraz
w marcu bieżącego roku. Tak naprawdę formą niezbędną do obsługi aplikacji o znacze- inteligentnego biznesu w firmie. Użytkownicy
domena .org nie jest pierwszą TLD, która niu krytycznym dla działalności firmy. Baza da- starszych edycji SQL Server chcący wdrożyć
wdroży DNSSEC. Wcześniej zrobiły to nie-
nych Microsoftu udostępniona została w sze- najnowszą wersję oprogramowania powinni za-
które inne krajowe domeny najwyższego
poziomu. Wdrożenie DNSSEC przez .org ściu edycjach, każda dopasowana do preferen- interesować się narzędziem Microsoft SQL Se-
de facto oprócz korzyści rodzi także kolej- cji i wymagań odrębnego segmentu odbiorców: rver 2008 Upgrade Advisor. Jako ciekawostkę
ny problem – ICANN (i tylko ICANN) uzyska Compact, Express, Web, Standard, Enterrpri- warto dodać, że radość w Microsofcie z okazji
w ten sposób dostęp do głównych kluczy se, oraz Workgroup. Nowa wersja – SQL Se- ukończenia nowego SQL Server była tak duża,
szyfrujących, a nie wszyscy są zgodni co rver 2008 Web – została wydana po raz pierw- że Ted Kummert, viceprezes korporacji, prze-
do tego, czy amerykańska instytucja może
szy wraz z tą edycją produktu Microsoftu. Skie- farbował włosy na jasno pomarańczowo. Więcej
być godna zaufania w tak delikatnej kwe-
stii, jaką jest światowy Internet. rowana jest do przedsiębiorstw hostujących da- informacji na temat SQL Server 2008 można
http://www.techit.pl/ ne. Zawiera narzędzia niezbędne wsparciu ni- znaleźć na oficjalnej stronie produktu znajdu-
skobudżetowych, wielkoskalowych aplikacji jącej się pod adresem http://www.microsoft.com/
ContentID – pies na pirackie materiały Webowych oraz środowisk przechowywania sqlserver/2008/en/us/default.aspx.
Firma Anvato zaprezentowała technolo-
danych. Podczas spotkania Wednesday Micro- http://www.idg.pl/
gię o nazwie ContentID, która z założe-
nia pomóc ma w walce z rozpowszech- soft przekonywał zaproszonych gości o korzy- http://www.techit.pl/
nianiem nielegalnych materiałów wideo.
W skład wspomnianej technologii wcho-
dzą dwa moduły – Perceptual Signature,
oraz Perceptual Search. Pierwszy z nich w Inteligentne blacklisty
opinii producenta jest narzędziem, które
umożliwi symulację ludzkiej percepcji.
Drugi natomiast to wyszukiwarka podo-
przyszłością zabezpieczeń?
N
bieństw pomiędzy oryginalnymi materia- aukowcy z instytutu SANS i SRI In- na jest na podstawie analizy logów firewalla ty-
łami, a tymi publikowanymi w popular- ternational stworzyli eksperymen- sięcy innych biorących udział w projekcie. Ogól-
nych serwisach pokroju YouTube. Avanto talną wersję algorytmu do inteligent- na idea polega na przewidywaniu, jakie sieci i wi-
dumnie informuje, że mechanizm w prze-
nego, dynamicznego tworzenia blacklist. Algo- tryny mogą być atakowane w przyszłości na pod-
ciągu zaledwie pięciu sekund potrafi prze-
skanować około miliona minut, czyli prze- rytm przypomina ten używany przez Google stawie danych o podobnych atakach w przeszło-
szło 16,6 tys. godzin ścieżek wideo, zacho- podczas określania wskaźnika PageRank. Usłu- ści. Usługa HPB została oficjalnie zademonstro-
wując przy tym skuteczność na poziomie ga została nazwana Highly Predictable Blackli- wana zostanie podczas konferencji Usenix Secu-
99%. Jeśli technologia ContentID w prak- sting. Jak działa nowatorski algorytm? W skrócie rity Symphosium. Zainteresowani mogą zapi-
tyce okaże się tak skuteczna, jak zachwa- blacklista tworzona jest indywidualnie dla każ- sać się do sieci DShield i samodzielnie przetesto-
la ją obecnie producent, może oznaczać to
dego członka obsługiwanej przez SANS Internet wać działanie usługi wysyłając swoje logi w odpo-
znaczny przełom w ochronie praw autor-
skich, ale jednocześnie koniec takich serwi- Storm Center sieci DShield na podstawie oce- wiednim formacie, stosując się do instrukcji za-
sów jak YouTube czy DailyMotion. ny prawdopodobieństwa, że atakujący odwiedzi wartych na stronach projektu.
http://mashable.com/ właśnie tę konkretną witrynę. Ocena dokonywa- http://www.techit.pl/

8 10/2008
Aktualności

Google Knol – poważny Midori – przyszłość


systemów operacyjnych?

konkurent Wikipedii?
Serwis SDTimes podzielił się informacja-
mi uzyskanymi z wewnętrznych doku-
mentów Microsoftu na temat projektu

P
arę miesięcy temu pojawiła się informa- nego hasła, przed jego publikacją. Witryna jest Midori – systemu operacyjnego nowej
cja o rozpoczęciu zamkniętego, wyma- dostępna pod adresem http://knol.google.com/. generacji, który być może za kilkanaście
lat zostanie następcą Windows. System
gającego zaproszenia, programu beta Jako ciekawostkę związaną z nowym serwisem
ten oparty jest na mikrojądrze Singula-
nowej usługi Google, której zadaniem jest zbie- warto wspomnieć o pewnym drobnym proble- rity. Pracuje nad nim zespół podlegają-
ranie naukowych i specjalistycznych publikacji, mie firmy Google. Otóż wszystko byłoby w po- cy Craigowi Mundiemu, zajmującemu
pisanych przez samych użytkowników. Usłu- rządku, gdyby nie fakt, iż domena Knol.com, stanowisko Chief Research and Strate-
ga nosi nazwę Google Knol i niedawno zosta- pod którą miałaby funkcjonować usługa jest gy Officer w firmie Microsoft. Midori
ła udostępniona publicznie. Ideą przyświecają- już zajęta. Obecnie usługa funkcjonuje pod ad- to system o zupełnie innej architektu-
rze, niż znany dzisiaj Windows. Jest to
cą Google Knol jest przede wszystkim umożli- resem knol.google.com, natomiast domena, któ- system rozproszony, bez wątpienia wpi-
wienie użytkownikom pisania, a następnie do- rą Google jest zainteresowane należy do holen- sujący się w realizowaną od niedaw-
dawania, poprawiania i komentowania treści derskiej firmy, specjalizującej się w dystrybu- na przez Microsoft strategię Software
na tematy, w których są specjalistami. Podsta- cji odkurzaczy. Wspomniany adres został za- + Services. Potencjalny następca Okie-
wową cechą odróżniającą go od Wikipedii jest rejestrowany przez Hilco Knola, właściciela nek będzie składał się z kodu zarządza-
nego (opartego o .NET Framework) i nie-
przywiązywanie wielkiej uwagi do autorstwa. przedsiębiorstwa w 2002 roku za kilka EUR.
zarządzanego. Aplikacje pracować będą
Autorzy są wymieniani z imienia i nazwiska Jeśli transakcja zostanie sfinalizowana, ozna- na wyższym poziomie, który będzie war-
z opcjonalnym zdjęciem obok. Metoda mode- czać to może dla niego interes życia. Przedsta- stwą abstrakcji dla fizycznych maszyn
rowanej współpracy (ang. moderated collabo- wiciele korporacji z Mountain View skontakto- i procesorów. Ten model wewnętrznie
ration) pozwala natomiast każdemu czytelni- wali się już z Knolem w sprawie zakupu wspo- przez Microsoft nazywany jest Asyn-
kowi dokonać dowolnej edycji, którą pierwot- mnianej domeny. Koncern zaoferował w za- chronous Promise Architecture. Z doku-
mentacji Midori wynika także, że będzie
ny autor tekstu może zaakceptować, odrzucić mian okrągłą sześciocyfrową sumę. Holender-
on posiadał obiektowe API pracujące w
bądź zmodyfikować, zanim zmiany staną się ski przedsiębiorca odrzucił jednak propozycję podwyższonym modelu bezpieczeństwa.
widoczne publicznie, co ma pomóc w walce z wyszukiwarkowego giganta, tłumacząc, iż po- Duże zmiany pojawią się również w war-
wandalizmem. Od strony edytorskiej nie widać datek dochodowy w Holandii nie dał by mu zy- stwie graficznego interfejsu użytkow-
wielu zmian w porównaniu z edytorem Google sku jakiego oczekuje. Dodał także, że gotów jest nika – chociaż ze wspomnianej wynika,
Docs. Możliwe jest między innymi ustawienie odstąpić domenę za kwotę 1 miliona Euro, któ- że Microsoft nie zdecydował się jeszcze
na konkretne rozwiązania. Nie wiadomo
formatowania oraz wstawienie grafik, cyta- ra pozwoli mu opłacić zmianę całego wizerun- również, czy Midori w ogóle kiedykol-
tów, linków i przypisów. Serwis pozwala rów- ku jego firmy. Google uważa, że adres postaci wiek ujrzy światło dzienne. Na razie pro-
nież na zdefiniowanie licencji na jakiej publi- knol.com byłby dużo atrakcyjniejszy dla usługi, jekt jest dopiero w fazie inkubacji, rodzi
kowany jest przez nas tekst, a także umieszcze- niż dotychczasowa subdomena. Teraz pytanie, się w głowach inżynierów Microsoftu i
nie reklam AdSense, dzięki czemu kiedy autor czy koncern zdecyduje się za tą atrakcyjność w pewnie dopiero w ciągu kilku najbliż-
szych lat wyjaśni się, czy zostanie sko-
zdecyduje się umieścić je przy swoim artykule, postaci domeny położonej najwyżej w hierar-
mercjalizowany.
otrzyma część zysków pochodzących z reklam. chii gTLD zapłacić tak dużą sumę? http://www.techit.pl/
Usługa daje też możliwość oceniania, czy zre- http://www.google.com/
cenzowania przez zaproszonego specjalistę da- http://domainnews.com/ VIA otwiera dokumentację chipsetów
VIA Technologies – największy tajwań-
ski producent obwodów scalonych znany

ICANN otwiera głównie z chipsetów do płyt głównych,


procesorów i pamięci – opublikował nie-

rejestrację domen .me


zwykle obszerne wytyczne dla progra-
mistów tworzących otwarte sterowniki.
Ponad ośmiuset stronicowa dokumenta-

O
rganizacja ICANN sprawująca kon- a kolejne adresy będą mogły być rejestrowa- cja udostępniona na stronach VIA opisu-
je technologię PadLock – generatora liczb
trolę nad światowym systemem do- ne bez ograniczeń. Według rejestru ICANN,
losowych i zaawansowanego, sprzętowe-
men otworzyła ogólnodostępną, do tej pory przyjęto ponad 30 tysięcy wnio- go silnika kryptograficznego obsługujące-
światową rejestrację domen zakończonych sków rejestracyjnych dla domen .me. ICANN go między innymi algorytmy RSA, wbudo-
rozszerzeniem .me. Rozszerzenie to zostało w 2008 roku ma sporo pracy. Najpierw orga- wanego w procesory VIA Eden, C3 oraz C7,
przyznane Czarnogórze jako krajowa domena nizacja zmniejszyła ograniczenia w rejestracji technologię układów VX800/820 – czyli
między innymi pierwszego zintegrowane-
najwyższego poziomu, po uzyskaniu przez nią domen .pro, dotąd zastrzeżonych dla specjali-
go procesora graficznego VIA wspierają-
niepodległości. Z tego faktu ucieszą się nie tyl- stów wykonujących wolne zawody. Później za- cego DirectX 9.0 oraz technologię chipse-
ko osoby chcące podkreślić swoją tożsamość w decydowano o totalnym uwolnieniu domen tu mobilnego CX700. Krok ten jest częścią
Internecie, ale przede wszystkim firmy, któ- najwyższego poziomu tak, by wkrótce możli- zapowiedzianej wcześniej strategii popra-
re od momentu uruchomienia prerejestracji we było rejestrowanie dowolnych rozszerzeń wy wizerunku firmy w środowisku Open
w maju wydały majątek na rezerwację takich – oczywiście za spore pieniądze. Dla chiń- Source i nastąpił w ślad za zatrudnieniem
Heralda Weltego – programisty pracują-
domen, jak buy.me, love.me, date.me czy con- skich użytkowników Internetu opracowano
cego nad jądrem Linuksa oraz założycie-
tact.me. Później te i inne domeny robiły furo- także możliwość używania chińskich znaków la GPL-Violations.org – w roli łącznika ze
rę na serwisach aukcyjnych. Od teraz pod no- zamiast rozszerzenia .cn. społecznością.
wymi domenami będą uruchamiane serwisy, http://betanews.com/ http://www.slashdot.org/

www.sdjournal.org 9
Aktualności

MPAA planuje
serwis z legalnymi treściami Oprogramowanie Open
Source zagrożeniem dla firm?
Organizacja MPAA (Motion Picture Asso-
ciation of America) próbowała dotąd
wielu sposobów walki z piractwem

F
– jej ostatni pomysł ma jednak szansę irma Fortify Software, specjalizująca się w pieczeństwem sieciowym, postrzegają na ogół ota-
okazać się pierwszym posunięciem nio- przeprowadzaniu audytu oprogramowa- czający ich świat jedynie w barwach białych bądź
sącym faktyczne korzyści dla użytkowni-
nia, przetestowała 11 aplikacji Open So- czarnych, jednocześnie krytykując taką postawę.
ków. Według różnych źródeł, MPAA pra-
cuje nad witryną informującą o legal- urce, napisanych w Javie, przeznaczonych do pra- Niezwykle mocno skrytykował też programistów
nych możliwościach nabywania w sieci cy w firmie. Jak się okazało, każda z nich zawie- systemu OpenBSD, który z założenia ma być naj-
filmów bez konieczności uciekania się do rała luki w bezpieczeństwie. Według Jacoba We- bezpieczniejszą dystrybucją Uniksa. Stwierdził
rozwiązań nielegalnych. Witryna, która sta, szefa grupy odpowiedzialnej za przygotowa- on bowiem, iż będąc skoncentrowanym tak moc-
nie ma jeszcze nazwy, pozwoli wyszu- nie raportu, fakt występowania licznych usterek no na łataniu usterek bezpieczeństwa, nie zaj-
kać interesujące pozycje, po czym skie-
ruje użytkowników do pobliskich (dla nas
bezpieczeństwa jest niepokojący. Korporacje po- mują się niczym innym. Według Fortify Softwa-
raczej dość odległych, bo pewnie wyłącz- winny traktować oprogramowania Open Sour- re, postawa Torvaldsa, w kwestiach bezpieczeń-
nie za oceanem) miejsc, gdzie można ce jako poważne zagrożenie. Howard Schmidt, stwa jest wspólna w społeczności Open Source,
nabyć bilety lub wypożyczyć bądź kupić były doradca do spraw bezpieczeństwa informa- która wyraźnie nie ignoruje tych kwestii, nie sta-
płyty DVD, a także do serwisów interne- tycznego Białego Domu, twierdzi natomiast, że wia ich jednak za priorytet. Przedstawiony w ra-
towych pozwalających legalnie pobrać
otwarte oprogramowanie stanowi piętę achilleso- porcie obraz wydaje się tym bardziej ważny, bio-
cyfrowe treści. Jak informuje serwis Ars
Technica powołując się na anonimowe wą współczesnych przedsiębiorstw. Jego wdroże- rąc pod uwagę fakt, że wiele firm już teraz patrzy
źródła gazety Variety, za inicjatywą stoją nie powinno być wcześniej dokładnie przemyśla- w stronę wdrożenia bezpłatnych rozwiązań. Rów-
wszystkie główne wytwórnie filmowe ne, rozważając wszystkie jego zalety i wady, gdyż nież najnowsze badania Gartnera wskazują, że do
oraz większość internetowych przedsię- nie posiada ono narzędzi do szybkiego elimino- 2011 roku aż 80% przedsiębiorstw, wykorzysty-
wzięć sprzedających filmy online. Sam wania wykrywanych błędów. Twórca jądra Linuk- wane oprogramowanie, przynajmniej częściowo,
serwis będzie przedsięwzięciem nieko-
sa, Linus Torvalds, w odpowiedzi na opublikowa- będzie opierać się o otwarte komponenty.
mercyjnym. Pomysł na serwis powstał w
wyniku badań, które wskazały, że wielu ny raport, stwierdził, że osoby zajmujące się bez- http://www.darkreading.com/
przeciętnych użytkowników ma proble-
my z odróżnieniem w sieci... treści legal-
nych oraz nielegalnych. Zaawansowa-
nym internautom odróżnienie iTunes Microsoft otworzy kolejne
laboratorium Open Source
od serwisów torrentowych z pewnością
nie przysparza najmniejszych trudności,
widać jednak że nie dla wszystkich są to

M
rzeczy oczywiste – sporo ludzi wpisuje icrosoft zapowiedział otwarcie kolej-
po prostu w Google poszukiwane tytuły nego laboratorium badawczego do
i bez większego zastanowienia udaje spraw interoperacyjności i produk-
się w zaproponowane, nie zawsze legal-
tów Open Source, tym razem – na Filipinach. In-
ne miejsca. Póki co, pracownicy MPAA
wstrzymują się od komentarzy na temat auguracja nowego oddziału korporacji odbyła się
tego pomysłu. we wrześniu br., w którym różnego rodzaju entu-
http://arstechnica.com/ zjaści i pasjonaci otwartego oprogramowania, bę-
dą mogli zajmować się wspieraniem działań na
DirectX 11 zapowiedziany
rzecz interoperacyjności w produktach korpora- zachowania jeszcze lepszej współpracy technolo-
Podczas tegorocznego GameFest (http:
//www.xnagamefest.com/) firma Micro- cji, w tym implementacji formatu Open Docu- gii korporacji z innymi rozwiązaniami. Oddział
soft oficjalnie zapowiedziała kolejną, jede- ment Format (ODF). Zdaniem dyrektora gene- ten nie jest pierwszym w historii Microsoftu; fir-
nastą już wersję bibliotek DirectX. Naj- ralnego NNC, stanowić ono będzie doskonałe ma posiada wiele podobnych placówek zlokalizo-
nowsza edycja, podobnie jak poprzednia, miejsce do wykazania się kreatywnością, z kolei wanych w różnych częściach globu.
przeznaczona będzie tylko pod Windows sam Microsoft uważa, że prace te torują drogę dla http://www.gmanews.tv/
Vista. Kiedy wypuszczono DX10, użytkow-
nicy zmuszeni zostali do zmiany kart gra-

Polskie domeny .eu w czołówce


ficznych na obsługujące nowy standard.
Jedenastka na szczęście takiej rewolucji nie
wprowadza – jest kompatybilna z poprzed-

P
nią wersją bibliotek, a więc także z obsłu- olacy zarejestrowali do tej pory po- roku nastąpił więc 50-procentowy wzrost. Jak
gującym je sprzętem. DX11 niesie ze sobą
nad 150 tys. domen Unii Europejskiej zaznacza Marcin Majerek z serwisu Domeny.pl
nowe technologie, które pozwolą na użycie
kart GPU jako równoległego procesora (.EU). Daje nam to 5 miejsce w Europie dodając do tego 1,1 mln polskich domen naro-
o ogólniejszym zastosowaniu (nie tylko i potwierdza rosnące zainteresowanie domena- dowych i ponad 300 tysięcy innych adresów
odpowiedzialnego za grafikę), czy popra- mi w naszym kraju. Przed nami są tylko tacy gi- zagranicznych rejestrowanych przez Polaków,
wią rozłożenie mocy na wątkach w maszy- ganci rynku internetowego jak: Niemcy (876 czyni to z naszego kraju silnego gracza na ryn-
nach wielordzeniowych. Dojdzie również tys.), Holendrzy (387 tys.), Brytyjczycy (361 ku internetowym. Domeny .eu rejestrowane są
sprzętowe wsparcie dla teselacji, co umoż-
tys.) i Francuzi (224 tys.). W Polsce szczegól- od grudnia 2005 roku. To dziewiąty pod wzglę-
liwi twórcom gier pokazanie w swoich tytu-
łach ładniejszych, mniej kanciastych brył nie silny wzrost rejestracji .eu nastąpił w ostat- dem ilości adres na świecie. W sumie jest ich –
przy oglądaniu modeli z bliska. nim półroczu. W grudniu zeszłego roku było na dzień dzisiejszy – około 2,85 miliona.
http://www.gamikaze.pl/ 100 tysięcy polskich domen .eu. W ciągu pół http://domeny.pl/

10 10/2008
Aktualności

Google pozwane za kampa- Aurora – nowy kształt webowego


interfejsu użytkownika?

nię reklamową w AdWords


Firma Adaptive Path, przy współpracy z
Mozilla Labs, zaprezentowała na począt-
ku sierpnia br. w San Francisco, projekt

K
alifornijski prawnik Hal Levitte skie- tomiast to 1009 wyświetleń reklamy, 25 klik- kolejnej koncepcji interfejsu webowego o
rował do sądu pozew przeciwko fir- nięć i podobnie jak w poprzednim przypadku nazwie Aurora. Jego głównym autorem jest
Jesse James Garrett, znany między innymi
mie Google, zarzucając jej oszustwo żadnej konwersji. Łącznie za tą bezwartościową
z popularnej ostatnimi czasy techniki two-
i naruszenie etyki biznesowej. Sprawa dotyczy kampanię promującą Levitte zapłacił około 140 rzenia aplikacji WWW – AJAX. Ideą przy-
wykupionej przez niego w systemie AdWords USD, czyli około 15% całego budżetu, przezna- świecającą Aurorze jest przywrócenie kilku
reklamy usług jego poradni prawniczej Levit- czonego na reklamę swoich usług. Aktualnie podstawowych cech współcześnie rzadko
te International. Pozew trafił do sądu 11 lipca prawnicy Levitte’a starają się nadać sprawie sta- spotykanych, w tym świadomości kontek-
br., prawnik zarzuca w nim firmie Google, iż tus pozwu zbiorowego. Są oni przekonani, iż stu, naturalnej interakcji, ciągłości, czy też
możliwości pracy z aplikacjami przez wielu
został oszukany poprzez wyświetlanie promo- sprawa nie dotyczy tylko ich klienta, ale rów- użytkowników jednocześnie, dzięki czemu
cyjnych tekstów jego poradni prawniczej na ni- nież wielu innych oszukanych w ten sposób. możliwe stałoby się zastosowanie wspólne-
skiej jakości stronach parkingowych, czyli stwo- Jeśli sędzia prowadzący sprawę nada jej status go interfejsu użytkownika bez względu na
rzonych głównie z myślą o gromadzeniu i prze- pozwu zbiorowego i znajdzie się odpowiednia wykorzystywany typ urządzenia czy para-
chowywaniu masowo linków. Twierdzi on, iż liczba oszukanych klientów może to oznaczać metry jego ekranu, a także łatwość przy-
stosowania przeglądarki do użytkownika,
nie został należycie poinformowany o fakcie, dla giganta z Mountain View ogromne proble-
a zarazem do trudności w zarządzaniu inte-
że wykupiona przez niego kampania reklamo- my i konieczność wypłaty wysokich kar. rakcją z siecią Web. Jeśli chodzi o zarządza-
wa w AdWords będzie wyświetlana na tego ty- http://informationweek.com/ nie, różnego rodzaju dane takie jak ludzie,
pu stronach. Według ekspertów zatrudnionych miejsca i rzeczy są przedstawiane w posta-
przez Levitte’a zarówno reklamy wyświetlane ci obiektów w trójwymiarowej przestrzeni.
na łamach serwisów parkingowych, oraz stro- Ich położenie jest ściśle powiązane z działa-
niami ze strony użytkownika. W przypadku,
nach błędów, na których promocyjne teksty
gdy korzysta on z danego obiektu, zbliża
również były wyświetlane, nie działają popraw- się on do niego, w przeciwnym wypadku,
nie. Proceder pierwszy dał 202 528 odsłon, powoduje to jego oddalanie. Zmiana poło-
668 kliknięć i ani jednej konwersji. Drugi na- żenia odbywa się natomiast za pomocą
specjalnego paska przypominającego w
działaniu dock z systemu Mac OS X, umiej-

Cuil konkurencją dla Google? scowionego w dolnej części ekranu. Projekt


jest udostępniony na licencji Creative Com-
mons Attribution-Noncommercial-Share

P
od koniec lipca br. ruszyła nowa wy- nej inteligencji do zgadywania znaczeń in- Alike w wersji trzeciej. Dostępny jest rów-
szukiwarka internetowa Cuil, któ- deksowanych zdań – jak to czynią rozwiąza- nież krótki film (http://www.vimeo.com/
ra chwali się indeksem zawierają- nia konkurencyjne, a dużo prostszego i przez 1450211?pg=embed&sec=1450211) przed-
stawiający praktyczne wykorzystanie inter-
cym ponad 120 mld unikalnych stron. Bio- to skuteczniejszego algorytmu pozwalające-
fejsu. Jak ponadto zapewnia Adaptive Path,
rąc pod uwagę fakt, że indeks Google jest nie- go po prostu precyzyjniej kategoryzować wi- jego nowy produkt jest zaledwie puntem
mal dziesięciokrotnie większy, warto przyj- tryny. Dodatkowo, Cuil opracował dość ory- wyjścia dla otwartej dyskusji na temat przy-
rzeć się, czym Cuil zamierza przekonać do ginalny interfejs użytkownika prezentujący szłości interfejsów użytkownika.
siebie użytkowników – jest to bowiem pro- wyniki wyszukiwania w trzech kolumnach http://www.adaptivepath.com/
jekt ambitny, spekulacje na jego temat cią- zawierających znacznie szerszy opis witryn, a
Google znów zyskuje
gnęły się już od kilku lat, a szczegóły utrzy- także zdjęcia. W prawym górnym rogu znaj- na rynku wyszukiwarek w USA
mywane były dotąd w wyjątkowo dużej ta- duje się kontrolka pozwalająca zawęzić wyni- Według najnowszych statystyk opublikowa-
jemnicy. Co czyni Cuil unikalnym i wartym ki wyszukiwania do konkretnych kategorii. nych przez Hitwise, na rynku wyszukiwarek
uwagi przedsięwzięciem? Po pierwsze, jest to Firma twierdzi, że prywatność użytkowni- w Stanach Zjednoczonych Google jeszcze
dziecko byłych pracowników Google, którzy ków jest jej oczkiem w głowie – adresy IP łą- bardziej umacnia swoją niekwestionowaną
pozycję lidera. Google w czerwcu br. uzyskał
nie odeszliby raczej z firmy z naiwnym po- czących się z Cuil komputerów nie są nigdzie
wynik blisko 70%, o jeden procent więcej, niż
stanowieniem zbudowania w garażu auten- zapisywane. Cuil nie wykorzystuje również w maju. W tym samym czasie wyszukiwarki
tycznej konkurencji bez oryginalnego pomy- ciastek do kojarzenia konkretnych maszyn dwóch największych rywali, Yahoo! i Microso-
słu. Otóż Cuil opracował rzekomo wielokrot- z zapytaniami. Być może ten właśnie aspekt ftu, traciły udział w rynku. Yahoo! tradycyjnie
nie tańszą w utrzymaniu technologię indek- funkcjonowania Cuil okaże się jego najwięk- uplasowało się na drugim miejscu z wynikiem
sowania zasobów w sieci i obsługi zapytań szym atutem, tak jak kiedyś atutem Google około 19%, a Live Search jak zwykle musiał
zadowolić się jednocyfrowym wynikiem na
użytkowników, która dodatkowo zapewniać nad Altavistą okazało się odejście od znie-
poziomie nieco ponad 5%. Na czwartym,
ma bardziej dokładne wyniki wyszukiwania. nawidzonych przez użytkowników praktyk ostatnim monitorowanym miejscu w statysty-
Tego można się było spodziewać, pytanie czy pozycjonowania wyników oraz zanieczysz- kach Hitwise za czerwiec znalazł się Ask.com z
idą za tym większe konkrety... Cuil twierdzi, czania wyników wyszukiwania spamem. W wynikiem niewiele ponad 4%. Wyniki zostały
że nie kataloguje stron wyłącznie na podsta- chwili obecnej dość trudno dobić się do ser- opracowane na podstawie danych zebranych
od 10 milionów użytkowników w USA. Warto
wie wyrwanych z kontekstu słów kluczowo wisu Cuil ze względu na częste przeciążenia
zauważyć, że Google utrzymuje wynik powy-
występujących w treści, ale także w oparciu o serwerów związane z wyjątkowo dużym za- żej 60% od września 2006 roku i nic nie wska-
relacje między nimi. Jest to podejście seman- interesowaniem usługą. zuje na to, by miało się to szybko zmienić.
tyczne, nie używa ono jednak technik sztucz- http://www.techcrunch.com/ http://www.cnet.com/

www.sdjournal.org 11
Opis CD

TurboDemo 6.5 domości, ustalać numer centrum SMS, określać ilość przechowy-
Wciąż myślisz jak zrobić prezentację inną niż wszystkie? Nie trać wanych wiadomości, czytać i usuwać zawartość folderów SMS.
czasu TurboDemo 6.5 to program stworzony z myślą o Tobie! Oprócz tego otrzymują Państwo dostęp do różnych parametrów
TurboDemo to skuteczny i prosty w użyciu program, który prze- telefonu: IMEI, model telefonu, wersję, jak również poziom sy-
chwytuje ekran i tworzy interaktywne dema, samouczki, symula- gnału, stan baterii i in. Dany moduł umożliwia wysyłkę zwykłego
cje oprogramowania oraz filmy w kilka minut. Nie wymaga znajo- tekstu, tekstu w formacie Unicode, wiadomości z załącznikami
mości programowania i co najważniejsze dostępny jest w polskiej takimi jak obrazki, dzwonki, logotypy grup abonentów i operato-
wersji językowej. rów. Po otrzymaniu wiadomości lub potwierdzenia jej dostarcze-
Przy rozpowszechnianiu nowego produktu często zadawane nia komponent automatycznie generuje odpowiednie zdarzenie.
jest pytanie: jak dotrzeć do jak największej liczby odbiorców? Pro- Moduł pozwala także automatycznie usuwać wchodzące wiado-
fesjonalna prezentacja w tym wypadku to dopiero początek. Wów- mości. Moduł Kalendarz jest przeznaczony do pracy z kalenda-
czas najlepszym rozwiązaniem jest umieszczenie prezentacji w In- rzem telefonu – pozwala on czytać, dodawać, zmieniać i usuwać
ternecie. Jednak zwykle są one zbyt duże… i tutaj pomoże Ci tak- notatki w kalendarzu.
że TurboDemo. Jednym kliknięciem zmieni prezentację na Flasha, TOxygenSMS Component pracuje w operacyjnych systemach
a następnie dzięki zaawansowanej kompresji umieści ją na stronie Microsoft Windows 95, 98, NT i 2000 i obsługuje następujące
internetowej. GSM telefony Nokia:
To doskonałe narzędzie dla specjalistów ds. marketingu, szkole- Moduł SMS: 3210, 3310, 3330, 3390, 3350, 3410, 3510, 5110,
niowców wielu branż, twórców różnych stron i portali interneto- 5130, 5190, 5210, 6110, 6130, 6150, 6190, 6210, 6250, 6310,
wych oraz dla indywidualnego użytkownika. 6310i, 6510, 7110, 7190, 8210, 8290, 8250, 8310, 8390, 8850,
TurboDemo 6.5 to program do tworzenia interaktywnych 8855, 8890, 8910;
dem. Przygotowanie prezentacji składa się z trzech podstawo- Opcja Kalendarz: 6210, 6250, 7110, 7160, 7190.
wych etapów: rejestrowanie obrazów oraz dźwięków, dodawa-
nie do zapisanego materiału efektów specjalnych (m.in. animo- TOxygenDirectorySpy Component
wane notatki, dymki i rollovery, obiekty interaktywne o kon- for Borland Delphi and C++ Builder
figurowalnych kształtach, stylach, kolorach i formatowaniu), a TOxygen Directory Spy, komponent przeznaczony dla Bor-
na końcu opublikowanie w wybranym formacie. A jest z cze- land Delphi wersji 3, 4, 5 i 6 – pozwala obserwować modyfi-
go wybierać. TurboDemo potrafi dodawać interaktywne efek- kacje systemu plików (na przykład: tworzenie pliku lub kata-
ty do prezentacji, a następnie zapisywać gotową wersję w for- logu, dostęp do nich, ich usuwanie, zmiany rozmiaru i atrybu-
matach: Flash, Java, EXE, AVI, ASF, PDF, animowanych GIF, tów). Osobliwość tego komponentu polega na tym, że w odróż-
BMP i JPEG. W każdej chwili można skorzystać z kreatora, a nieniu od wielu podobnych narzędzi zwraca on dokładną na-
wspaniałą zaletą jest przejrzysty interfejs programu. Wszystko zwę katalogu lub pliku, w którym dokonane zostały zmiany,
to sprawia, że w każdej chwili możemy przedstawić swoją pre- razem z dotychczasowymi jak i aktualnymi wartościami zmo-
zentację, a następnie przesłać ją pocztą elektroniczną, zyskując dyfikowanych parametrów. Można śledzić zmiany w katalo-
czas i pieniądze. gach i ich podkatalogach nie tylko na dyskach lokalnych ale i
Funkcjonalność programu sprawia, że można dowolnie kształ- sieciowych.
tować graficznie każdą prezentację i zmieniać jej opisy tekstowe, Podstawowe możliwości:
tworząc na przykład różnego rodzaju materiały poglądowe, testy,
quizy czy konkursy z wyświetlaną punktacją i statystyką. To spra- • obserwacja zmian systemu plików w odrębnych wątkach;
wia, że program cieszy się uznaniem zarówno uczniów, jak na- • zawsze znana jest dokładna nazwa katalogu lub pliku, który
uczycieli oraz wykładowców, ułatwia proces nauczania i czyni go został zmodyfikowany;
bardziej atrakcyjnym. • zawsze znane są dotychczasowe oraz aktualne wartości
Nowością w wersji 6.5 jest możliwość ustawienia jakości dźwię- zmodyfikowanych parametrów;
ku przy formacie do ASF, nowe paski postępu dla formatu Flash, a • obserwacja wielu katalogów i ich podkatalogów;
także nowe skórki dla baloników i notatek. Program dostępny jest • obserwacja zmian systemu plików nawet na dyskach sie-
w wersjach: Standard, Professional, Studio oraz Enterprise. ciowych.
Program TurboDemo to profesjonalne narzędzie dla twór-
ców, specjalistów oraz indywidualnych użytkowników, jednym Oxygen Directory
słowem dla wszystkich. Spy ActiveX Control
Więcej informacji: http://www.turbodemo.pl Oxygen Directory Spy ActiveX Control pozwala obserwować
modyfikacje systemu plików takie jak tworzenie pliku lub kata-
TOxygenSMS logu, dostęp do nich, ich usuwanie czy zmiany rozmiaru i atry-
Component for Borland butów.
Osobliwość ActiveX Control polega na tym, że w odróżnieniu
Delphi and Borland C++ Builder od podobnych narzędzi zwraca on dokładną nazwę katalogu lub
TOxygenSMS Component – to moduł do zarządzania telefona- pliku, w którym dokonane zostały zmiany, razem z dotychczaso-
mi Nokia. Moduł SMS pozwala wysyłać i otrzymywać SMS-wia- wymi jak i aktualnymi wartościami zmodyfikowanych parame-

12 10/2008
Opis CD

trów. Można śledzić zmiany w katalogach i ich podkatalogach nie Xandros Server 2
tylko na dyskach lokalnych ale i sieciowych. Xandros to profesjonalna dystrybucja przeznaczona głównie dla firm i
Podstawowe możliwości: instytucji . Jest to kompleksowe rozwiązanie serwerowe wyposażone w
narzędzia znacznie usprawniające i przyspieszające administrację sys-
• obserwacja zmian systemu plików w odrębnych wątkach; temem. Xandors Server dostarczany jest z elementami, które ułatwiają
• zawsze znana jest dokładna nazwa katalogu lub pliku, któ- jego integrację z już istniejącymi sieciami opartymi na produktach Mi-
ry został zmodyfikowany; crosoft, Solaris czy innymi dystrybucjami Linux. Producenci tworząc
• zawsze znane są dotychczasowe oraz aktualne wartości system postawili na jego jak największą skalowalność, łatwość konfigu-
zmodyfikowanych parametrów; racji i kompatybilność z innymi produktami.
• obserwacja wielu katalogów i ich podkatalogów; System dostarczany jest w kilku wersjach, dzięki temu wszyscy klien-
• obserwacja zmian systemu plików nawet na dyskach sie- ci mogą wybrać rozwiązanie najlepiej pasujące do ich potrzeb. Na dołą-
ciowych; czonej płycie znajduje się serwerowa wersja Xandrosa, która jest prze-
• ActiveX Control jest kompatybilny z Microsoft Visual Ba- znaczona do zastosowań w firmach i instytucjach, w szczególności ta-
sic, Microsoft Visual C++, Microsoft Access, Borland Del- kich które korzystają z rozwiązań Microsoft (R). Xandros Server 2 za-
phi, Borland C++ Builder oraz innymi narzędziami pro- wiera implementacje protokołów komunikacyjnych tej firmy oraz ser-
gramowania wspierającymi ActiveX. wer Scalix, który potrafi współpracować z MS Exchange.

Jeśli nie możesz odczytać zawartości płyty CD,


a nie jest ona uszkodzona mechanicznie, sprawdź
ją na co najmniej dwóch napędach CD.
W razie problemów z płytą,
prosimy pisać pod adres:
cd@software.com.pl

Redakcja
nie udziela
pomocy
technicznej
w instalowaniu
i użytkowaniu
programów
zamieszczonych na płytach
CD-ROM dostarczonych razem z
pismem.

www.sdjournal.org 13
Biblioteka miesiąca

OVal
Walidacja spójności danych w aplikacjach korporacyjnych

W niniejszym artykule pokazane jest jak usprawnić i uprzyjemnić sobie


pracę związaną z walidacją spójności danych w aplikacjach biznesowych
pisanych w języku Java, przy pomocy biblioteki OVal.

guł biznesowych), ograniczeń systemu bazoda-


Dowiesz się: Powinieneś wiedzieć: nowego (reguł bazodanowych), wymagań za-
• Co to jest spójność danych i jaką rolę pełni w • Podstawy programowania w języku Java. chowania spójności systemu i innych czynni-
świecie aplikacji biznesowych; ków wziętych pod uwagę podczas projektowa-
• Jak wspomóc proces kontrolowania spójności nia systemu.
danych przy pomocy biblioteki OVal.
Warstwy i gradacja
Jak wiemy ze Shreka, ogry, cebula oraz aplika-
Wszystkie aspekty związane z podniesie- cje mają warstwy. Dla aplikacji są to – warstwa
niem jakości i bezpieczeństwa oprogramo- prezentacji aplikacji, usług, dostępu do danych
Poziom trudności wania są interesujące, zajmiemy się aspekta- oraz trwałego magazynu danych. W której z
mi zachowaniem spójności danych (pospoli- nich chronić spójność danych? Odpowiedź jest
tą walidacją). prosta, najlepiej w każdej:

W
itaj, Czytelniku! Czeka Cię wy- Skąd się biorą reguły aplikacji? • warstwa prezentacji – nie pozwól by użyt-
cieczka po grząskim gruncie spój- Każdy produkt wytwarzany na potrzeby klien- kownik wprowadził złe dane (walidacja
ności danych, nie obędzie się rów- ta musi zmierzyć się z ograniczeniami nakła- wprowadzanych danych przez użytkow-
nież bez indoktrynacji i krzewienia wiary w ist- danymi przez biznes, infrastrukturę i uży- nika);
nienie wysokiej jakości kodu. Gotowy? tą technologię. Słyszymy o regułach bizneso- • warstwa aplikacji – walidacja parametrów
Aplikacja korporacyjna (enterprise applica- wych, niezmiennikach, ograniczeniach, wa- przepływu sterowania w aplikacji;
tion) wspomaga i automatyzuje procedury da- runkach itp. Wiele podobnych pojęć jest uży- • warstwa usług – nie pozwól by
nego przedsiębiorstwa. Istnieje tylko w jednym wanych w różnych kontekstach. Uporządkuj- prezentacja/inny system dostarczył nie-
celu, aby zaspokajać wymagania biznesu. Po- my zatem nazewnictwo, reguła lub ogranicze- spójnych danych (walidacja modelu oraz
siada zespół cech, które wyróżniają ją od zwy- nie, które będzie implementowane w aplika- warunków wykonania);
kłych programów. Uzbrojona jest w narzędzia cji nazwiemy regułą aplikacji (application ru- • warstwa trwałego magazynu danych –
zwiększające jej niezawodność, łatwość obsługi, le). Reguły aplikacyjne będą powstawały w wy- ograniczenia i niezmienniki w bazie da-
konfigurowalność i bezpieczeństwo. Świadczy niku dostarczonych wymagań biznesowych (re- nych.
usługi (gromadzi, przetwarza, prezentuje da-
ne) realizując logikę biznesową. Jest to zwykle Listing 1. Wstępna implementacja modelu biznesowego opisanego w przypadku Pani Zosi
kilka kroków z życia danego biznesu (np. reje-
stracja sprzedanej książki poprzedzona spraw- public class Employee1 implements Serializable {
dzeniem jej stanu).
Metoda (usługa) biznesowa w odróżnieniu private static final long serialVersionUID = 1L;
od zwykłej metody jest wzbogacona m.in. o:
private Long id;
• wsparcie dla transakcji (ACID);
• bezpieczeństwo (uwierzytelnienie i auto- private String firstName;
ryzacja); private String lastName;
• audyt (kto i kiedy wprowadzi zmiany); private String pesel;
• logowanie (śledzenie wykonania);
• politykę obsługi wyjątków (śledzenie nie- private Date employmentStart;
powodzeń); private Date employmentEnd;
• ochronę spójności danych (walidacja i wa- }
runki poprawnego wykonania).

14 10/2008
OVal 1.0

Koszt implementacji walidacji w każdej war- Podczas sprawdzania poprawności obiektu ty- zachodzi potrzeba wprowadzenia lokaliza-
stwie jest wysoki, najlepiej by było użyć tej sa- pu Employee w przypadku gdy pole firstName cji, parametr message jest mało pożyteczny.
mej implementacji w każdej z warstw. DDD będzie zawierać null zostanie zwrócona in- OVal dostarcza inny bardziej odpowiedni:
(Domain Driven Development) – pojęcie opar- formacja o złamaniu reguły wymagalności te- errorCode. Możemy tam wpisać tekstową re-
te na modelu domenowym pozwala na po- go pola. Jak przyjrzymy się parametrom tej prezentację kodu, który zostanie zwrócony w
dróż obiektów z danymi przez wszystkie war- adnotacji dostrzeżemy tam bardzo pożytecz- przypadku złamania reguły:
stwy aplikacji. Jest to najlepsze miejsce do im- ne opcje jak np. message. Możemy określić ja-
plementacji reguł aplikacji. Modelujemy tutaj ki komunikat będzie zwracany w przypadku @NotNull(errorCode = "firstName.notNull")
problem jako klasy reprezentujące odpowied- złamania reguły: private String firstName;
nie pojęcia biznesowe wraz z wymaganym za-
kresem informacji. @NotNull(message = "Imię jest wymagane") kod ten możemy wykorzystać do odczytania
Wydzielmy trzy stopnie walidacji obiektu private String firstName; komunikatu z pliku właściwości (properties).
biznesowego, będą one trochę inaczej imple- Dobrze aby kod błędu był znaczący więc war-
mentowane: Niestety w korporacyjnych aplikacjach, gdzie to zastosować nazwę pola wraz z nazwą spraw-
komunikaty są zmieniane dosyć często lub dzanej reguły (np. „mojePole.lenght”).
• 1 stopień: walidacja zawartości pola tego
samego obiektu; Listing 2. Model z Listingu 1 udekorowany adnotacjami OVal
• 2 stopień: walidacja pomiędzy polami tego
samego obiektu; public class Employee1 implements Serializable {
• 3 stopień: walidacja pomiędzy polami
dwóch różnych obiektów w modelu. private static final long serialVersionUID = 1L;

Podział ten pozwala lepiej zrozumieć kom- @NotNull(errorCode = "id.notNull", profiles = {"model"})
pleksowy model zabezpieczenia spójności da- private Long id;
nych w systemie. Dość tego przydługiego
wstępu, zabierzmy się do walidacji danych za- @NotNull(errorCode = "firstName.notNull", profiles = {"view", "model"})
mkniętych w obiektach biznesowych.
@MaxLength(errorCode = "firstName.Length", value = 2, profiles = {"view", "model"})
Przypadek Pani Zosi
Określmy dziedzinę w kontekście, której bę- private String firstName;
dziemy budować model.
Pewna mało znana korporacja potrzebuje auto- @NotNull(errorCode = "lastName.notNull", profiles = {"view", "model"})
matyzacji kartoteki pracowniczej przechowywa-
nej w części na kartach papierowych i w plikach @MaxLength(errorCode = "lastName.Length", profiles = {"view", "model"}, value = 200)
arkuszy kalkulacyjnych. Specjalistka w tej dziedzi- private String lastName;
nie pani Zosia przekazała nam wymagania:
Potrzebujemy przechowywać informacje o pra- @NotNull(errorCode = "pesel.notNull", profiles = {"view", "model"})
cowniku, jego pesel, imię, nazwisko, datę zatrud-
nienia, datę zwolnienia. Ponadto chcemy by pesel @MatchPattern(errorCode = "pesel.matchPattern", pattern = "^\\d{11}$", profiles =
składał się z 11 cyfr oraz data zatrudnienia była {"view", "model"})
wcześniejsza od daty zwolnienia. private String pesel;
Zastanawiamy się przez chwilę nad wybo-
rem metodologi w której będziemy rozwijać @NotNull(errorCode = "employmentStart.notNull", profiles = {"view", "model"})
nasz produkt, wybór padł na jedną ze zwin- private Date employmentStart;
nych metodyk (Cowboy Coding). Bierzemy wy-
magania na warsztat i po dwóch łykach kawy private Date employmentEnd;
mamy model implementacyjny dla naszego sys- }
temu (Listing 1).
Podczas prac nad modelem dostaliśmy in- Listing 3. Metoda sprawdzająca czy pracownik nie zwalnia się przed zatrudnieniem
formacje od pani Zosi, że wszystkie informa- @AssertTrue(errorCode = "employmentEnd.valid", profiles = {"view", "model"})
cje oprócz daty zakończenia są niezbędne w ze- @IsInvariant
stawieniach dla Pana Prezesa, postanowiliśmy
uwzględnić to w naszych pracach. Zaimple- public boolean validateEmploymentEnd() {
mentujmy najpierw wymagania dotyczące obo-
wiązkowych pól. Wykorzystamy w tym celu ad- boolean isValid = true;
notacje @NotNull z przybornika OVala. Określa
ona iż dane pole łamie regułę aplikacji jeżeli je- if (this.employmentStart != null && this.employmentEnd != null) {
go wartością jest null.
isValid = this.employmentStart.before(this.employmentEnd);
@NotNull }
private String firstName;
return isValid;
Oznaczyliśmy nasze pole (walidacja pierwsze- }
go poziomu) jako wymagane. Co zyskujemy?

www.sdjournal.org 15
Biblioteka miesiąca

W naszym modelu mamy ciekawy przypadek


Listing 4. Implementacja prostej klasy narzędziowej, wspomagającej proces walidacji jest to pole id. Nie było one wymienione przez
public class ValidationUtil { Panią Zosię jednak my dodaliśmy je aby nadać
każdemu pracownikowi unikatowy identyfika-
public static List<String> getErrorCodes(String[] profiles, Object entity) { tor w naszym systemie. Pole to jest wymagane,
List<String> errorCodes = new ArrayList<String>(); ale dopiero w warstwie usług, przed zapisaniem
List<ConstraintViolation> violations = executeValidation(profiles, entity); do bazy. Chcąc zgodnie z założeniem wykorzy-
stywać walidację we wszystkich warstwach apli-
for(ConstraintViolation violation : violations) { kacji mamy pewien dylemat. Na szczęście twór-
errorCodes.add(violation.getErrorCode()); ca OVala przewidział nasze potrzeby, rozwiąza-
} niem jest tu mechanizm profili. Ten prosty i
użyteczny mechanizm pozwala określić, która z
return errorCodes; sprawdzanych reguł jest brana pod uwagę. Zde-
} finiujmy dwa profile view (reguły z tej grupy bę-
dą sprawdzane w warstwie widoku) oraz model
private static List<ConstraintViolation> executeValidation(String[] profiles, Object (reguły z tej grupy będą brane pod uwagę w war-
entity) { stwie usług). Mamy więc:
Validator validator = new Validator();
validator.disableAllProfiles(); @NotNull(errorCode = "firstName.notNull",
profiles = {"view",
for (String profile : profiles) { "model"})
validator.enableProfile(profile); private String firstName;
}
a w przypadku id:
return validator.validate(entity);
} @NotNull(errorCode = "id.notNull", profiles
= {"model"})
public static String getMessageByErrorCode(String errorCode) { private Long id;
Properties appRulesProperties = new Properties();
try { Zerknijmy na pozostałe parametry. Mamy
appRulesProperties.load(ValidationUtil.class.getResourceAsStream("/app- severity, możemy go użyć aby określić jaką
rules.properties")); wagę ma nasza reguła (np. w przypadku zła-
} catch (IOException e) { mania z niskim priorytetem można wyświe-
e.printStackTrace(); tlić okno z ostrzeżeniem i pozwolić na kon-
} tynuację działania). Następny jest doo, nie
return appRulesProperties.getProperty(errorCode); mam pojęcia do czego służy więc go pominę.
} OVal wyposażony jest w dużą liczbę adnota-
} cji reprezentujących walidację dla różnych ty-
pów pól i sposobów walidacji. Jestem w sta-
Listing 5. Implementacja metody getErrorCodes nie zaprezentować tylko parę co do reszty od-
public List<String> getErrorCodes(String[] profiles) { syłam do podręcznika i javadoców. Wróćmy
// generic validation do naszego imienia, biznes mówi, że jest wy-
List<String> errorCodes = ValidationUtil.getErrorCodes(profiles, this); magane, a baza (którą odziedziczyliśmy po sta-
return errorCodes; rej aplikacji) wymaga by pole to miało maksy-
} malnie 200 znaków. Zaimplementujemy to
wymaganie za pomocą adnotacji @MaxLenght,
Listing 6. Implementacja klasy reprezentującej identyfikator działu mamy więc:
public class Department implements Serializable, ValidationSupport {
@NotNull(errorCode = "firstName.notNull",
private static final long serialVersionUID = 1L; profiles = {"view",
"model"})
@NotNull(errorCode = "id.notNull", profiles = {"model"}) @MaxLength(errorCode = "firstName.Length",
private Long id; value = 2, profiles =
{"view", "model"})
@NotNull(errorCode = "code.notNull", profiles = {"view", "model"}) private String firstName;
@Length(errorCode = "code.length", min = 2, max = 2, profiles = {"view", "model"})
private String code; Wprawne oko dostrzeże tu pluskiew (bug) od-
nośnie długości pola, na razie zostawmy ten
public List<String> getErrorCodes(String[] profiles) { problem.
List<String> errorCodes = ValidationUtil.getErrorCodes(profiles, this); Podobna do @MaxLenght jest adnotacja
return errorCodes; @Lenght w której możemy określić minimalny
} i maksymalny zakres długości dla tekstu.
} Dla pola pesel mamy specjalne wymaga-
nie, Pani Zosia prosiła aby zawartość składała

16 10/2008
OVal 1.0

się z jedenastu cyfr. Postępując zgodnie z zasa- wiednie wiadomości i wyświetlić użytkowni- która wykona walidację na zewnątrz obiek-
dą klient nasz pan dodajmy taką regułę. Użyje- kowi. Następny dylemat, jaką klasę obdarzyć tu, lub klasę obiektu biznesowego, która sa-
my potężnego narzędzia dostarczanego przez odpowiedzialnością za sprawdzenie popraw- ma przeprowadzi ten proces na sobie i zależ-
OVal jakim jest adnotacja @MatchPattern. Wa- ności? Mamy do wyboru klasę narzędziową, nych od siebie obiektach. Ze względu na to,
liduje ona pole tekstowe za pomocą wyrażeń
regularnych. Jeżeli nie znajdziemy odpowied- Listing 7. Kaskadowe sprawdzanie powiązanych obiektów biznesowych
niej dla siebie adnotacji dla pola tekstowego to
@MatchPattern załatwi każde wysublimowane public List<String> getErrorCodes(String[] profiles) {
wymaganie:
// generic validation
@NotNull(errorCode = "pesel.notNull",
profiles = {"view", List<String> errorCodes = ValidationUtil.getErrorCodes(profiles, this);
"model"})
@MatchPattern(errorCode = // custom validation
"pesel.matchPattern",
pattern = "^\d{11}$", if (this.department != null) {
profiles = {"view", List<String> departmentErrorCodes = ValidationUtil.getErrorCodes(profiles,
"model"}) this.department);
private String pesel;
for (String departmentErrorCode : departmentErrorCodes) {
Zgodnie z zasadami sztuki walidacji udekoro- errorCodes.add("department." + departmentErrorCode);
waliśmy też pozostałe pola (Listing 2). }
Wszystkie nasze reguły były pierwszego }
poziomu (opisujące pole). Następnym ro-
dzajem są reguły dotyczące zależności po- return errorCodes;
między polami w danym obiekcie. W naszym }
jednoklasowym modelu mamy datę rozpo-
częcia i datę zakończenia pracy. Pani Zosia Listing 8. Implementacja klasy testów dla rozważanego modelu
ewidentnie upierała się przy sprawdzeniu public class ModelTest {
czy aby ktoś nie zwalnia się przed zatrudnie-
niem. Innymi słowy kolejne wymaganie mó- @Test
wi: data zwolnienia musi być późniejsza od public void validateViewModelTest() throws Exception {
daty zatrudnienia. Użyjemy zestawu narzę-
dzi przygotowanych do walidacji drugiego Employee employee = new Employee();
stopnia, są to między innymi: @AssertTrue
i @AssertFalse. List<String> errorCodes = employee.getErrorCodes(new String[] {"widok"});
Dla każdej z tych adnotacji potrzebujemy printErrorCodes(errorCodes);
metody która sprawdzi określone przez nas wa-
runki, dla @AssertTrue każda metoda walidu- Assert.assertTrue("errorCodes = 0", errorCodes.size() == 0);
jąca, która zwróci false dodaje złamaną regu- }
łę, odwrotnie w przypadku @AssertFalse me-
toda która zwróci true oznacza złamanie regu- private void printErrorCodes(List<String> errorCodes) {
ły (Listing 3). if (errorCodes.size() == 0) {
Mamy ładną, tłustą definicję klasy obiektu System.out.println("Test passed");
biznesowego. Najwyższy czas zabrać się za te- } else {
sty naszego rozwiązania (odwrotnie jak to ra- System.out.println("Broken rules:");
dzą w TDD). Mamy definicję klasy, mamy do- int i = 1;
dany aspekt walidacji, brakuje nam jeszcze na- for (String error : errorCodes) {
rzędzia, które sprawdzi nasze warunki na dzia- System.out.println("\t" + i + ") " + error);
łającym obiekcie. OVal dostarcza klasy narzę- i++;
dziowej, której zadaniem jest sprawdzić po- }
prawność danego obiektu. }
}
Validator validator = new Validator();
BusinessObject bo = new BusinessObject(); }
List<ConstraintViolation> violations =
validator.validate(bo); Listing 9. Efekt działania metody pomocniczej wypisującej zestaw złamanych reguł
Broken rules:
Jest to silne narzędzie ale związu-
je nas z implementacją OVala (klasa 1) firstName.notNull
ConstraintViolation). Chcemy opakować je- 2) employmentStart.notNull
go funkcjonalność aby proces walidacji koń- 3) pesel.notNull
czył się zwróceniem listy złamanych kodów, 4) lastName.notNull
aby można je później przetłumaczyć na odpo-

www.sdjournal.org 17
Biblioteka miesiąca

że łatwiej jest kaskadowo wywoływać spraw- swoje wybrakowane reguły. Do roboty, w ce- Podczas implementacji interfejsu w naszej kla-
dzanie na obiektach zależnych (kompozy- lu wykonania spójnego sposobu walidacji we sie (i sprawdzeniu kto nas ostatnio odwiedzał)
tach i kolekcjach) wybieramy drugie rozwią- wszystkich obiektach biznesowych dodamy dostrzegliśmy, że w każdej klasie trzeba bę-
zanie. Dodatkowym plusem tego rozwiąza- interfejs wspomagający takie zachowanie: dzie dodać podobną funkcjonalność. Proste
nia jest możliwość dodania do tej metody operacje przeniesiemy do klasy narzędziowej
swojej dodatkowej logiki i ewentualnych no- public interface ValidationSupport { aby zmniejszyć powtarzalność kodu (ujemny
wych kodów błędów (np. po ręcznej imple- public List<String> wpływ dziedziczenia metodą copy'ego-paste'a).
mentacji walidacji trzeciego stopnia). Od tej getErrorCodes(String[] profiles); Spójrzmy na Listing 4.
chwili obiekt biznesowy sam umie wskazać } Teraz gdy sobie ułatwiliśmy pracę możemy
dodać naszą implementację getErrorCodes
(Listing 5).
W Sieci W ostatniej chwili Prezes zażądał od Pani Zo-
• http://oval.sourceforge.net/ – strona domowa biblioteki OVal; si by w zestawieniu obok nazwiska pracowni-
• http://oval.sourceforge.net/userguide.html – podręcznik użytkownika biblioteki OVal; ka pojawił się kod wydziału. Po szybkim telefo-
• http://oval.sourceforge.net/api/index.html – opis interfejsu programistycznego (API) bibliote- nie do kierownika naszego projektu Pani Zosia
ki OVal w postaci javadoców; zajęła się swoimi ważkimi sprawami, a my do-
• http://jcp.org/en/jsr/detail?id=303 – szczegółowe informacje na temat specyfikacji JSR 303:
staliśmy kukułcze jajo pod postacią nowej kla-
Bean Validation.
sy w naszym modelu. Wymagania podpowia-
dają nam iż wydział jest obowiązkowy i musi
mieć poprawny numer składający się z 2 zna-
Listing 10. Rozszerzenie klasy testów: niepoprawna data zatrudnienia ków. Kawa wystygła więc bierzemy się za robo-
tę, zaimplementujemy wydział jako nową kla-
@Test sę (Listing 6).
public void validateViewModelTest() throws Exception { Klasa została udekorowana adnotacjami i
przyszykowana do przyszłej walidacji. Obiekt
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); klasy Department będzie kompozytem w kla-
sie Emploee, tak więc dodajemy tam odpowied-
Employee employee = new Employee(); nie pole:

employee.setDepartment(new Department()); @NotNull(errorCode = "department.notNull",


profiles = {"model"})
employee.setFirstName("Jan"); private Department department;
employee.setLastName("Kowal");
employee.setEmploymentStart(sdf.parse("2008.01.01")); W naszym przypadku informacje z obiek-
employee.setEmploymentEnd(sdf.parse("2007.01.01")); tów dwóch klas będą prezentowane na jed-
employee.setPesel("12345678911"); nym ekranie, jak więc zwalidować za jed-
nym zamachem obiekt klasy Emploee oraz
List<String> errorCodes = employee.getErrorCodes(new String[] {"view"}); odpowiadający mu Department? OVal do-
printErrorCodes(errorCodes); starcza pewne narzędzie, jest to adnota-
cja @AssertValid, niestety sprawdza tyl-
Listing 11. Opis złamanych reguł dla testu opisanego na Listingu 10 ko czy dany obiekt jest poprawny, w przy-
Broken rules: padku złamania reguły wewnątrz obiektu
1) firstName.Length jest zwracany pojedynczy errorCode przy-
2) employmentEnd.valid pisany do tej adnotacji, a nie lista złama-
3) department.code.notNull nych reguł osadzonego obiektu. Potrzebu-
jemy listy wszystkich złamanych reguł po
Listing 12. Implementacja metody uzyskiwania komunikatu według podanego kodu błędu to by wyświetlić je w postaci komunikatów
public static String getMessageByErrorCode(String errorCode) { pod odpowiadającymi im polami. Na szczę-
Properties appRulesProperties = new Properties(); ście mamy naszą metodę getErrorCodes i
try { to jest dobre miejsce by wywołać kaskadowo
appRulesProperties.load(ValidationUtil.class.getResourceAsStream("/app- sprawdzanie powiązanych obiektów bizne-
rules.properties")); sowych. Dodatkowo sposób ten rozwiązuje
} catch (IOException e) { problem powielania się errorCodów, gdyż
e.printStackTrace(); do każdego errorCodu pozyskanego z kla-
} sy Department dodamy dodatkowy identy-
return appRulesProperties.getProperty(errorCode); fikator department. Zmodyfikowaną meto-
} dę można zobaczyć na Listingu 7.
Nadszedł czas aby sprawdzić przydatność na-
Listing 13. Opis złamanych reguł z dołączonymi komunikatami dla użytkownika szego modelu. Przetestujemy wymagania za po-
Broken rules: mocą popularnego narzędzia jakim jest JUnit
1) firstName.Length (klasa testów na Listingu 8).
Messages: Tworzymy nowy, czysty obiekt klasy pra-
1) Pole 'Imię' może zawierać maks. 200 znaków cowniczej i sprawdzamy czy zawiera spójne
i poprawne dane. Uruchamiamy test, meto-

18 10/2008
OVal 1.0

Listing 14a. Finalna postać klas modelu i testów dla przypadku Pani Zosi
public class Employee implements Serializable, ValidationSupport for (String departmentErrorCode : departmentErrorCodes)
{ {
errorCodes.add("department." + departmentErrorCode);
private static final long serialVersionUID = 1L; }
}
@NotNull(errorCode = "id.notNull", profiles = {"model"})
private Long id; return errorCodes;
}
@NotNull(errorCode = "firstName.notNull", profiles = {"view", // properties
"model"}) }
@MaxLength(errorCode = "firstName.Length", value = 2, profiles
= {"view", "model"}) public class Department implements Serializable,
private String firstName; ValidationSupport {

@NotNull(errorCode = "lastName.notNull", profiles = {"view", private static final long serialVersionUID = 1L;
"model"})
@MaxLength(errorCode = "lastName.Length", profiles = {"view", @NotNull(errorCode = "id.notNull", profiles = {"model"})
"model"}, value = 200) private Long id;
private String lastName;
@NotNull(errorCode = "code.notNull", profiles = {"view",
@NotNull(errorCode = "pesel.notNull", profiles = {"view", "model"})
"model"}) @Length(errorCode = "code.length", min = 2, max = 2, profiles
@MatchPattern(errorCode = "pesel.matchPattern", pattern = "^\ = {"view", "model"})
\d{11}$", profiles = {"view", "model"}) private String code;
private String pesel;
public List<String> getErrorCodes(String[] profiles) {
@NotNull(errorCode = "employmentStart.notNull", profiles = List<String> errorCodes = ValidationUtil.getErrorCodes(pro
{"view", "model"}) files, this);
private Date employmentStart; return errorCodes;
}
private Date employmentEnd; // properties
}
@NotNull(errorCode = "department.notNull", profiles =
{"model"}) public class ModelTest {
private Department department;
@Test
@AssertTrue(errorCode = "employmentEnd.valid", profiles = public void validateViewModelTest() throws Exception {
{"view", "model"}) SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
@IsInvariant Employee employee = new Employee();
public boolean validateEmploymentEnd() { employee.setDepartment(new Department());
boolean isValid = true; employee.setFirstName("Jan");
employee.setLastName("Kowal");
if (this.employmentStart != null && this.employmentEnd != employee.setEmploymentStart(sdf.parse("2008.01.01"));
null) { employee.setEmploymentEnd(sdf.parse("2009.01.01"));
employee.setPesel("12345678911");
isValid = this.employmentStart.before(this.employment employee.getDepartment().setCode("KD");
End);
} employee.setId(1L);
employee.getDepartment().setId(1L);
return isValid;
} List<String> errorCodes = employee.getErrorCodes(new
String[] {"view", "model"});
public List<String> getErrorCodes(String[] profiles) { printErrorCodes(errorCodes);
// generic validation printErrorMessages(errorCodes);
List<String> errorCodes = ValidationUtil.getErrorCodes(pro
files, this);
Assert.assertTrue("errorCodes = 0", errorCodes.size() ==
// custom validation 0);
if (this.department != null) { }
List<String> departmentErrorCodes = ValidationUtil.getE
rrorCodes(profiles, this.department); private void printErrorCodes(List<String> errorCodes) {

www.sdjournal.org 19
Biblioteka miesiąca

da pomocnicza wypisuje nam zestaw wszyst- Dostajemy informacje od JUnit, że teraz jest zmuszą nas do własnej implementacji inter-
kich złamanych reguł (Listing 9). wszystko ok. fejsu Validator).
Pierwsze spostrzeżenie, testowaliśmy tylko re- Pozostaje nam odwzorować kody błędów na Problem sprawdzania poprawności danych
guły z grupy view więc pole id nie zostało wy- komunikaty dla użytkownika. Komunikaty bę- jest na tyle powszechny, że został zgłoszony
pisane jako niepoprawne. Drugie spostrzeżenie, dziemy przechowywać w plikach właściwości wniosek o standaryzację (JSR 303). W dostęp-
tylko reguły wymagalności (@NotNull) zostały (properties). Struktura pliku wygląda tak: nym już szkicu dokumentu dostępny jest opis
sprawdzone. Jest to logiczne zachowanie, skąd technologii i proponowane nazewnictwo. Za-
można wiedzieć czy pole ma zadaną długość firstName.Length=Pole 'Imi\u0119' mo\ powiada się na kawał pożytecznej specyfikacji.
skoro zawiera wartość nieokreśloną. Uzupełnij- u017Ce zawiera\u0107 maks. 200 znak\ Oval nie jest jedynym szeryfem w mieście. Dla
my nasz obiekt o parę informacji (wpiszmy złą u00F3w Javy mamy – Beans Validation (Spring modules) i
datę końca zatrudnienia), Listing 10. Hibernate annotations. Dot NET nie jest tu bied-
Nasz niezawodny tester (JUnit) wskazuje na- Trzeba pamiętać aby polskie znaki były zapi- niejszy i doczekał się implementacji .NET Valida-
stępujące niezgodności (Listing 11). sywane w standardzie unicode. Do klasy na- tion Framework. Każdy z tych zrębów projekto-
Jak widzimy zadziałała walidacja dla osadzone- rzędziowej ValidationUtil dodajemy metodę wych ma wady i zalety. OVal jako jedyny obsłu-
go obiektu klasy wydziałowej. Walidacja drugiego uzyskiwania komunikatu według podanego ko- guje profile (W JSR 303 nazwane grupami), nie-
stopnia określająca zależności pomiędzy datą roz- du błędu – Listing 12. stety dokumentacja użytkownika jest dość skąpa.
poczęcia pracy i zakończenia wskazuje błędną da- Na potrzeby testów tego rozwiązania naru- Przeznaczenia adnotacji i ich parametrów trzeba
tę zakończenia pracy. Podczas rozwijania naszego szymy integralność pola firstName przekracza- zazwyczaj poszukiwać w dokumentacji javadoc
modelu wkradł się defekt (pani Zosia wyraźnie jąc jego zakres (lub zmniejszając maksymalną oraz dostarczonym kodzie źródłowym.
prosiła aby długość pola imię miało wystarczającą dopuszczalną długość tekstu). Wynikowy ko-
długość). Naprawiamy to zwiększając maksymal- munikat przedstawiony jest na Listingu 13. Podsumowanie
ną długość do 200 znaków. Dodamy też nazwę Ostatecznie model i klasa z testem wygląda To dopiero początek drogi przez szuwary wa-
wydziału dla naszego pracownika i poprawiamy jak Listingu 14. lidacji, proponuję zerknąć do dokumenta-
datę zwolnienia. Po ponownym uruchomieniu Z dumą udajemy się do pani Zosi obwieścić, cji OVala. Jest on nie tylko zrębem projekto-
testu otrzymujemy komunikat Test passed. iż robota zrobiona. Jakże zaskoczeni jesteśmy wym do walidacji POJO wspiera DBC (projek-
Zapomnieliśmy jednak o naszym drugim gdy pani Zosia drapie się po głowie oglądając w towanie przez kontrakty) za pomocą adnota-
profilu który będziemy wykorzystywać w war- notatniku naszego świeżo wypieczonego JAR'a. cji i AspectJ. Zawiera silny mechanizm połą-
stwie usług, a więc dodajmy go do testu: No cóż chyba zapomnieliśmy o jakimś istotnym czenia języków interpretowanych tj. mvel i be-
elemencie aplikacji (GUI). anshell z aspektami spójności danych. Adno-
List<String> errorCodes = employee.getErro Dla każdego rozwiązania dedykowanego tacje są tylko jednym ze sposobów określenia
rCodes(new String[] dla technologii webowych (spring, free mar- reguł walidacji w OVal. Innym mniej związa-
{"view", "model"}); ker, jsf) należy dopisać kawałek kodu integra- nym z kodem Javy sposobem jest użycie pli-
cyjnego łączącego daną technologię z rozwią- ków konfiguracyjnych XML. Ale o tym mo-
Bezwzględny tester mówi: zaniami OVala (OVal dostarcza klas integru- że kiedy indziej...
jących, które implementują standard walida- Czytelniku dotarłeś tutaj, więc powinieneś
Broken rules: cji dla Spring, jednak nadaje się on do pro- dostać model za wytrwałość, niech moc walida-
1) id.notNull stych rozwiązań, bardziej skomplikowane cji będzie z Tobą!
2) department.id.notNull

Listing 14b. Finalna postać klas modelu i testów dla przypadku Pani Zosi
Ok, pozostaje nam ponadawać identyfikato-
ry dla tych obiektów i już możemy bezpiecz- if (errorCodes.size() == 0) {
nie utrwalić obiekt w bazie. Zazwyczaj identy- System.out.println("Test passed");
fikatory są generowane przez system (np. me- } else {
todą autoinkrementacji w bazie danych) ale System.out.println("Broken rules:");
dla pokazania mechanizmu profili wstawimy int i = 1;
je ręcznie. for (String error : errorCodes) {
System.out.println("\t" + i + ") " + error);
employee.setId(1L); i++;
employee.getDepartment().setId(1L); }
}
}
SEBASTIAN PIOTROWSKI private void printErrorMessages(List<String> errorCodes) {
Sebastian Piotrowski pracuje na stanowisku Senior if (errorCodes.size() != 0) {
Software Developer w firmie System.out.println("Messages:");
BLStream wchodzącej w skład Grupy BLStream. int i = 1;
Grupa BLStream powstała by efektywniej wykorzy- for (String error : errorCodes) {
stywać potencjał dwóch, szybko rozwijających się System.out.println("\t" + i + ") " + ValidationUtil.getMessageByErrorCode
producentów oprogramowania – BLStream i Ga- (error));
melion. Firmy wchodzące w skład grupy specjali- i++;
zują się w wytwarzaniu oprogramowania dla klien- }
tów korporacyjnych, w rozwiązaniach mobilnych }
oraz produkcji i testowaniu gier. }
Kontakt z autorem: }
sebastian.piotrowski@blstream.com

20 10/2008
REKLAMA
Narzędzia programistyczne

Joomla 1.0 do 1.5


Proces migracji krok po kroku

Wprawdzie Joomla 1.5 jest następcą 1.0, ale różnice między obu
wydaniami są tak istotne, że Joomla 1.0.x nie można unowocześnić do
Joomla 1.5 przy pomocy łatki aktualizującej. Jedyną możliwą drogą
jest migracja – założenie nowej witryny na Joomla 1.5 i przeniesienie
danych z Joomla 1.0.x.
• stwórz pełną zapasową kopię działają-
Dowiesz się: Powinieneś wiedzieć: cej witryny – systemu plików i bazy da-
• Jak krok po kroku przejść przez cały proces mi- • Podstawowe informacje o Joomla 1.0. nych;
gracji. • przetestuj migrację na replice witryny,
najlepiej na serwerze produkcyjnym;
• starą witrynę usuń dopiero wówczas,
dajności witryny, tryb zgodności wstecz- gdy nabędziesz pewności że nowa dzia-
nej umożliwia wprawdzie działanie star- ła poprawnie.
Poziom trudności szych rozszerzeń w nowym Joomla!, ale
walory nowego oprogramowania będą Ponadto przed migracją warto najpierw
odczuwalne wtedy jedynie, gdy unowo- zaktualizować swoją witrynę Joomla 1.0.x
cześnimy także dodatkowe składniki, a do najnowszej wersji w tej serii (aktualnie

N
ie ma co zawracać kijem wody w ze starszych rozszerzeń będziemy korzy- 1.0.15). Pełnego sukcesu taki krok nie za-
Wiśle, ani młyńskiego koła ręka- stać wyjątkowo; pewni, ale może zaoszczędzić niespodziewa-
mi zatrzymywać. Nowy Joomla po- • migracja wymaga niekiedy sporego na- nych sytuacji.
wstał także i po to, by zastąpić starszego. A że kładu czasu i pracy oraz takiej znajo-
rzeczy niemożliwych w informatyce chyba mości obu systemów, by poradzić sobie Dwa etapy
nie ma, to i możliwa jest doskonała migracja z z koniecznością ręcznego przenoszenia Migracja przebiega w dwóch etapach. W
Joomla 1.0 do 1.5. Doskonała, czyli bezstrat- części danych – nie wszystkie bowiem pierwszym etapie trzeba:
na, bez frustracji, że coś zepsujemy, trwają- dane są przenoszone automatycznie;
ca tak krótko, że użytkownicy naszej witry- • migracja niesie ze sobą ryzyko niepowo- • zgromadzić potrzebne pakiety instala-
ny nawet się nie spostrzegą, kiedy jej dokona- dzenia. cyjne (Joomla!, komponentów i innych
my. Tak czy owak, wcześniej czy później trze- rozszerzeń);
ba ją przeprowadzić. Generalnie rzecz biorąc – opłacalne jest mi- • sporządzić kopię bezpieczeństwa prze-
Ale czy na pewno? Promotorowi Joom- growanie z witryn małych, z niewielką ilo- noszonej witryny (systemu plików i ba-
la! w Polsce nie wypada ani wątpić w słusz- ścią danych, z niewielką ilością rozszerza- zy danych);
ność takiego zabiegu, ani tym bardziej znie- jących rdzeń komponentów, modułów i in- • przygotować do przeniesienia dane – usta-
chęcać do migracji. Wręcz przeciwnie – wy- nych dodatków. wienia i treści przenoszonej witryny.
pada przekonywać że warto i objaśnić, jak jej Na pewno warto migrować duże witryny
dokonać najbezpieczniej i najprościej. Nie nawet z dużą ilością danych, jeśli obsługiwa- W drugim etapie trzeba:
będziemy zatem zbytnio na temat korzyści ne są przez standardowe komponenty, a dla
i strat dywagować, ale też nie możemy prze- nielicznych rozszerzeń istnieją nowsze wer- • zainstalować Joomla 1.5 z migrowanymi
milczeć, że: sje lub rozwiązania alternatywne. danymi;
Głęboko natomiast trzeba się zastanowić • doinstalować rozszerzenia, z których ko-
• migracja nie zawsze jest zupełnie bez- nad migracją rozbudowanej, a dobrze działa- rzystaliśmy w Joomla 1.0;
stratna – może pociągać za sobą ko- jącej witryny z wieloma dodatkowymi skład- • przetestować i skorygować działanie no-
nieczność zmodyfikowania oryginalnej nikami, dla których nie opracowano jesz- wej witryny.
treści, a nawet rezygnacji z niektórych cze unowocześnionych wersji. Być może na-
dawniejszych rozszerzeń, które nie ze- wet w ogóle nie należy z takich witryn mi- Warto sobie w tym momencie uświadomić,
chcą się dobrze sprawować nawet mi- grować. że w nowej witrynie nie odtworzymy wszyst-
mo włączenia trybu zgodności wstecz- kiego w 100 %, chociażby dlatego, że nie-
nej (legacy); Bezpiecznie których rozwiązań w Joomla 1.5 po prostu
• migracja nie zawsze skutkuje rzeczywi- Migracja jest bezpieczna, dopóty zachowujemy nie ma albo zostały zastąpione innymi. Do-
stym unowocześnieniem i poprawą wy- standardowe środki ostrożności. A zatem: brym przykładem jest polecenie {mosimage}

22 10/2008
Migracja Joomla 1.0 do 1.5

umieszczające w Joomla 1.0 obrazki w arty- Najnowszą wersję komponentu migracyj- dzone przez komponenty rozszerzające Jo-
kułach. Standardowe wystąpienia tego po- nego – w chwili pisania artykułu była to wer- omla!, potrzebuje dodatkowych wtyczek.
lecenia zostaną przekonwertowane, ale jeśli sja 1.0 znajdziesz na stronie Pasamio Projec-
to polecenie zastosowano także w jakimś in- t's FRS. Krok 4: Doinstaluj wtyczki migracyjne
nym komponencie niż Content (Artykuły), to Natomiast polskie wydanie komponentu Niestety, w tym miejscu – oprócz dobrej wia-
konwersję trzeba przeprowadzić ręcznie. Na znajdziesz w składnicy Polskiego Centrum Jo- domości – mamy i złą: udało nam się znaleźć
szczęście, takich problemów jest niewiele, a omla! jedynie wtyczki do komponentu JoomFish.
dokładne przetestowanie witryny po migracji Komponent instalujemy w standardowy Do innych – nawet śladu. Na dodatek te do
pozwoli je zdiagnozować i naprawić. sposób w swojej witrynie Joomla 1.0.x, którą JoomFish są tak ukryte, że trudno je znaleźć,
chcemy migrować (albo w Mambo 4.5.2): nie mówiąc już o tym, iż trzeba wiedzieć, że
I etap: Przygotowanie do migracji istnieją. Zajrzyj do sekcji SVN.
• wybierz z menu zaplecza pozycję Insta- Na szczęście, jest i dobra wiadomość: po-
Krok 1: Zgromadź potrzebne materiały latory –> Komponenty; trzebne wtyczki szybko się projektuje i łatwo
Pobieranie plików z Internetu nie stano- • kliknij przycisk Przeglądaj i wskaż na pisze nawet, jeśli nie mamy żadnych doświad-
wi dziś zwykle żadnego problemu, ale po- dysku swojego komputera pakiet insta- czeń w programowaniu. Można się zresztą
trzebne pakiety instalacyjne warto zgroma- lacyjny; bez nich obejść. Natomiast bez wtyczek dla
dzić przed rozpoczęciem migracji. A będą • naciśnij przycisk Wczytaj plik i zainstaluj. JoomFisha byłoby trudno w przypadku, gdy
potrzebne: mamy witrynę wielojęzyczną.
Po chwili pojawi się komunikat o udanej in- Do migracji danych z nierdzennych kom-
• najnowszy pakiet instalacyjny Joomla 1.5; stalacji, a w menu Komponenty znajdziesz ponentów potrzebne są dwa rodzaje wty-
• najnowszy pakiet językowy dla Joomla nową pozycję –> Migrator. Wywołaj ją. czek: ETL i SQL. Pierwsza, wtyczka SQL, jest
1.5; Na stronie otwierającej znajdziesz zwięzłą zwykłym plikiem SQL z poleceniami tworzą-
• pakiety instalacyjne rozszerzeń, wyko- instrukcję oraz – na dole – zestaw odnośni- cymi potrzebne tabele. Druga, wtyczka ETL,
rzystywanych w Joomla 1.0, najlepiej ków, pod którymi kryją się polecenia kom- jest skryptem PHP, generującym odpowied-
już w wersji dla J! 1.5; ponentu lub ekrany z dodatkowymi infor- nie wpisy w pliku SQL. Wtyczka ETL roz-
• pakiet instalacyjny komponentu Migrator; macjami. szerza działanie klasy ETLPlugin tak, aby
• pakiety wtyczek ETL i SQL dla kompo- Migrator przenosi do pliku migracyjnego komponent obsługiwał przenoszenie innych
nentu Migrator. tylko dane gromadzone w rdzennych tabe- danych, niż należące do rdzennych kompo-
lach Joomla!. Aby obsługiwał dane zgroma- nentów.
Krok 2: Sporządź bezpieczną kopię
witryny
W to, że dysponujesz aktualną i bezpieczną
kopią swojej witryny nawet nie śmiemy wąt-
pić. Niemniej – upewnij się, że to najaktual-
niejsza kopia. A gdyby było inaczej, uaktual-
nij ją:

• przekopiuj na swój komputer w bez-


pieczne miejsce cały katalog działającej
witryny Joomla 1.0;
• wykonaj najaktualniejszy zrzut bazy da- Rysunek 1. Instalacja komponentu w Joomla 1.0
nych.

Bardzo pomocnym w wykonaniu tych za-


dań może być komponent JoomlaPack z
http://www.joomlapack.net.

Krok 3: Zainstaluj w Joomla 1.0


komponent Migrator
Przygotowanie danych z przenoszonej witryny
zostało zautomatyzowane dzięki pracy dwóch
programistów – Haralda Baera, który opraco-
wał przed kilku laty komponent eBackup, oraz
Samuela Moffatta, który ten komponent prze-
projektował do nowego zadania, udostępnia-
jąc go pod nazwą Migrator. Komponent wyko-
nuje jedno, ale jakże istotne zadanie: generuje
zrzut odpowiednio przekonwertowanej bazy
danych witryny zbudowanej na Joomla! 1.0.x
lub Mambo 4.5.2 0. Dokładniej – dwa zada-
nia: konwertuje treści oraz ustawienia konfi-
guracyjne, w tym przenosi niektóre ustawie-
nia z plików do bazy danych. Ale to już tajem- Rysunek 2. Strona główna komponentu Migrator. Zwróć uwagę, że odnośniki do narzędzi komponentu
nice programu niezbyt dla nas istotne. umieszczono na dole ekranu

www.sdjournal.org 23
Narzędzia programistyczne

Wtyczka ETL ETLPlugin{}, a przykłady zastosowania funk- Pełny przykład skryptu wtyczki Adsmana-
Wtyczki ETL są rzeczywiście niezwykle łatwe cji znajdziemy w skryptach standardowych ger Ads ETL znajduje się na Listingu 2.
do napisania – zwykle wystarczy 5 linii kodu wtyczek ETL, umieszczonych w katalogu
PHP. Przykłady znajdziemy wśród skryptów /plugins komponentu. Wtyczka SQL
komponentu, w katalogu /plugins. Wzorcowy Aby samodzielnie przygotować potrzebne We wtyczkach SQL umieszczamy zapytanie
kod wtyczki ETL przedstawia Listing 1. wtyczki ETL: SQL generujące potrzebną tabelę bazy da-
W pierwszej linii definiujemy nową kla- nych. Przykład wtyczki SQL znajduje się na
sę rozszerzającą klasę ETLPlugin{}. Następ- • skopiuj podany powyżej kod; Listingu 3.
nie wywołujemy dwie metody – funkcję get- • nazwę klasy zastąp nazwą tabeli; Stworzenie wtyczek SQL jest więc rzeczy-
Name(), która zwraca wykorzystywaną przez • napis Nazwa opisowa zastąp zwięzłym wiście banalnie proste – wykonujemy zrzut
komponent opisową nazwę przenoszonej tabe- opisem tabeli; struktury swojej bazy danych Joomla 1.0, a
li, oraz funkcję getAssociatedTable(), która do • napis nazwatabeli zastąp rzeczywistą następnie zapisujemy kod dla każdej tabeli w
pliku migracyjnego przenosi zapytania tworzą- nazwą tabeli (bez przyrostka jos_ czy in- pliku nazwanym: nazwatabeli.sql
ce potrzebną tabelę i zapytania umieszczające nego); Dodajmy jeszcze, że niekoniecznie każ-
w tej tabeli dane komponentu. • zapisz plik jako skrypt php nazwany: na- dą wtyczkę trzeba zapisywać w odrębnym
Doświadczeni programiści mogą stworzyć zwatabeli.php. skrypcie. Wszystkie wtyczki dla jednego
wtyczki bogatsze w funkcje, np. opuszczają- komponentu można zapisać w dwóch pli-
ce wskazane kolumny tabel (pola), zmienia- Uwaga: we wszystkich trzech przypadkach kach – w jednym definicje klas ETL, w dru-
jące nazwy pól czy zmieniające wartości w – nazwy klasy, opisowej nazwy tabeli i rze- gim kwerendy SQL.
kolumnach. Pełną listę metod znajdziemy w czywistej nazwy tabeli można zastosować
skrypcie migrator.class.php w definicji klasy dokładnie taki sam tekst. Instalacja wtyczek
Pojedyncze wtyczki można zainstalować za
Listing 1. Wzorcowy kod wtyczki ETL pomocą polecenia dostępnego w komponen-
cie – jeśli masz tylko jedną czy dwie wtycz-
<?php ki, użyj formularza Instalacja rozszerzeń Mi-
class NazwaTabeli_ETL extends ETLPlugin { gratora:
Jeśli jednak masz więcej dodatków i dys-
function getName() { return “Nazwa opisowa”; } ponujesz dostępem do serwera, możesz
przesłać pliki dodatków do ich poszczegól-
function getAssociatedTable() { return “nazwatabeli”; } nych katalogów (/plugins oraz /tables). Kom-
} ponent używa tylko plików, które istnieją w
?> jego katalogach, więc rejestracja w bazie da-
nych nie jest wymagana do zastosowania do-
Listing 2. Przykładowy kod wtyczki ETL dla komponentu AdsManager datku.
<?php
/** Krok 5: Stwórz plik migracyjny SQL
Po zainstalowaniu wszystkich niezbędnych
* Adsmanager Ads ETL Plugin wtyczek, przystępujemy do właściwego za-
* Wtyczka Adsmanager Ads ETL dla tabeli #__adsmanager_ads dania – wygenerowania pliku migracyjnego
* @package Migrator SQL. W tym celu:
* @author Stefan Wajda <zwiastun@zwiastun.net>
* @license GNU/GPL http://www.gnu.org/licenses/gpl.html • na stronie startowej komponentu kliknij
* @copyright 2008 Stefan Wajda polecenie Utwórz plik migracyjny SQL;
* @version SVN: $Id:$ • na dole kolejnej strony naciśnij polecenie
*/ Rozpocznij migrację.

class Adsmanager_Ads_ETL extends ETLPlugin { Przez chwilę potrwa wykonywanie zadań,


function getName() { return "Wtyczka ETL - Adsmanager ads"; } na ekranie dosłownie zamigoczą dwie stro-
function getAssociatedTable() { return 'adsmanager_ads'; } ny z informacjami o przebiegu operacji. I w
} końcu pojawi się komunikat o zakończeniu
?> pracy z nazwą utworzonego pliku SQL i od-
nośnikiem do strony z plikami do pobrania.
Listing 3. Przykład wtyczki SQL dla komponentu AdsManager, tworzącego tabelę Po naciśnięciu odnośnika Pobierz pojawi się
#__adsmanager_categories >> strona z listą plików migracyjnych. Można tu-
CREATE TABLE IF NOT EXISTS `jos_adsmanager_categories` ( taj stworzony plik pobrać lub usunąć. Etykie-
`id` int(10) unsigned NOT NULL auto_increment, ta odnośnika Informacja o SQL ma w zamy-
`parent` int(10) unsigned default '0', śle projektanta prowadzić do podglądu pliku
`name` varchar(50) default NULL, SQL, ale funkcja najwyraźniej nie została w
`description` varchar(250) default NULL, wydaniu 1.0 zaimplementowana.
`ordering` int(11) default '0', Uwaga: Oczywiście, podczas generowania
`published` tinyint(1) default '0', pliku migracyjnego mogą zdarzyć się błędy w
PRIMARY KEY (`id`) działaniu komponentu. Komponent wczytu-
) ENGINE=MyISAM; je dodane skrypty wszystkich wtyczek ETL i
SQL i sprawdza ich poprawność. Jeśli napo-

24 10/2008
Migracja Joomla 1.0 do 1.5

tka błędy, przerwie działanie i wyświetli od- • zapoznajemy się z licencją, jeśli jej nie kalny przedrostek nazw tabel, inny niż uży-
powiedni komunikat. znamy; wany w witrynie Joomla 1.0.
• konfigurujemy bazę danych; Po skonfigurowaniu bazy danych i – ewen-
II etap: Nowa witryna • konfigurujemy – jeśli jest nam potrzeb- tualnie obsługi FTP – dochodzimy do mo-
z przeniesionymi danymi na – warstwę FTP. mentu, w którym finalizujemy migrację da-
Dysponując plikiem migracyjnym, możemy nych.
przystąpić do II etapu pracy, obejmującego Jeśli dysponujemy tylko jedną bazą danych, Komunikaty ekranowe na stronie Konfi-
instalację Joomla 1.5 z danymi migracyjny- trzeba pamiętać, aby w 4. kroku ustalić uni- guracja witryny jasno i jednoznacznie infor-
mi, dodanie rozszerzeń oraz testowanie no-
wej witryny.

Krok 6: Zainstaluj Joomla! 1.5 z danymi


migracyjnymi
Nową witrynę zakładamy w środowisku, w
którym będzie ona działała, a więc zwykle
na tym samym serwerze co witryna opar-
ta na Joomla 1.0. Możemy zainstalować Jo-
omla 1.5:

• w tym samym katalogu – zamiast dzia-


łającej witryny;
• w podkatalogu, a tym samym w subdo- Rysunek 3. Instalacja rozszerzeń Migratora. Prościej jednak przesłać skrypty wtyczek za pomocą FTP do
menie działającej witryny 1.0. katalogów /plugins i /tables

Dopóki jednak nie mamy pewności, że mi-


gracja przebiegnie pomyślnie, dotychczaso-
wa witryna powinna pozostać nienaruszona.
Pierwsze rozwiązanie zatem raczej w rachu-
bę nie wchodzi. Nową witrynę instalujemy w
nowym, odrębnym katalogu, z nową bazą da-
nych albo – jeśli dysponujemy tylko jedną ba-
zą danych – z innym przedrostkiem nazw ta-
bel. Ale nawet jeśli zdecydujemy się na zastą-
pienie starej witryny nową instalacją, to:

• wszystkie pliki starej witryny przenosi-


my w bezpieczne miejsce, np. do nowego
katalogu;
• pliki instalacyjne umieszczamy w opróż-
nionym, pustym katalogu.

W żadnym wypadku nie należy nadpisywać


plików starej witryny, skryptami pakietu in-
stalacyjnego Joomla 1.5.x. Jedyne, co może-
my pozostawić w katalogu instalacyjnym z
zasobów starej witryny, to pliki danych (np.
grafiki) oraz skrypty szablonów. Wszelkie
inne pozostałości mogą być źródłem niepo-
prawnej instalacji i błędów w działaniu no-
wej witryny.
Przypomnienie: jeśli jeszcze nie masz tego Rysunek 4. Na górze - komunikat o pomyślnym stworzeniu pliku migracyjnego. Na dole strona z listą
kroku za sobą, sporządź pełną kopię zapaso- plików migracyjnych do pobrania
wą istniejącej witryny, zarówno systemu pli-
ków, jaki bazy danych. Kopię umieść w bez- Listing 4. Instrukcja usuwająca tabelę w pliku instalacyjnym .xml
piecznym miejscu tak, aby podczas testowa-
nia nowej instalacji w ogóle nie mieć do niej <query>
dostępu. DROP TABLE IF EXISTS `#__nazwa_tabeli`;
Pierwsze pięć kroków wykonujemy tak, </query>
jak w przypadku zwykłej instalacji Joomla,
a więc: Listing 5. Instrukcja w pliku instalacyjnym .xml wstawiająca dane
<query>
• wybieramy język instalacji; INSERT INTO `#__nazwa_tabeli` VALUES (1,0,'Jakis_tekst','Jakis_tekst','',0,1,0);
• przeglądamy informacje o środowisku </query>
instalacyjnym;

www.sdjournal.org 25
Narzędzia programistyczne

mują, że w tym kroku możemy umieścić w wać migrate.sql. Katalogi /installation/sql/ założenie – wszystkie nazwy tabel w pliku
witrynie: migration/ oraz katalog podręczny (/tmp) migracyjnym SQL generowanym przez kom-
muszą być udostępnione do zapisu dla użyt- ponent mają przedrostek jos_. Nie oznacza
• Dane przykładowe; kownika www ((np. wwwrun, www-data to, że w nowej instalacji tabele muszą mieć
• a. Dane migracyjne ze skryptu SQL czy apache). również przedrostek jos_. Wręcz przeciw-
zgodnego z Joomla 1.5; Aby poprawnie migrować dane: nie – ustalasz go swobodnie, konfigurując
• b. Dane migracyjne ze skryptu SQL bazę danych, o czym już wspominaliśmy.
zgodnego z Joomla 1.0. • zaznacz opcję Dane ze skryptu; Instalator podejmie próbę stworzenia ta-
• w polu Przedrostek nazw tabel w po- bel bazy danych i jeśli operacja się powie-
Oczywiście, nas interesuje trzecia opcja – przedniej instalacji wpisz jos_, nawet je- dzie, otrzymamy na kolejnym ekranie stoso-
migracja ze skryptu zgodnego ze struktu- śli był inny; waną informację.
rą bazy danych Joomla 1.0 (a więc i Mambo • podaj standard kodowania poprzedniej
4.5.2). Dane migracyjne możemy wczytać ze witryny – zwykle ISO-8859-2, rzadziej Migracja nieudana
skryptu SQL: UTF-8; Może się wszakże zdarzyć, że otrzymamy nie-
• zależnie od wybranej metody: zbyt radosny komunikat o napotkanych pod-
• przesłanego na serwer za pomocą proto- • naciśnij przycisk Przeglądaj i wskaż czas migracji problemach. Jednym z częst-
kołów FTP lub SCP; plik ze skryptem migracyjnym SQL szych problemów jest niepoprawna struktura
• oczekującego na wczytanie za pośred- albo; standardowej tabeli jos_users. Błąd pojawia
nictwem protokołu HTTP podczas in- • zaznacz opcję Skrypt migracyjny jest się w przypadkach, gdy w starej witrynie ko-
stalacji. na serwerze; rzystaliśmy z komponentów, które zmieniają
• zaznacz opcję: Skrypt migracyjny z Joom- strukturę tej tabeli (należy do nich m.in. fo-
Druga z metod jest wygodniejsza, ale nie za- la 1.0.; rum Fireboard). W przypadku tej i ewentu-
wsze skuteczna. Zakończy się powodzeniem • naciśnij przycisk: Wczytaj i uruchom. alnie innych zmodyfikowanych standardo-
tylko wtedy, gdy przenosimy niewielką wi- wych tabel bazy danych problem jest łatwy
trynę (plik migracyjny SQL jest mniejszy Zauważ – w przypadku migracji z Joomla! do rozwiązania. Trzeba w Joomla 1.0 powtó-
niż 2MB). Jeśli jest większy, trzeba go prze- 1.0 zawsze podajemy, że tabele w pliku mi- rzyć tworzenie pliku migracyjnego, poprze-
słać na serwer za pomocą dowolnego klienta gracyjnym mają przyrostek jos_. Autor kom- dzając tę czynność dodaniem wtyczki SQL z
FTP lub SCP do katalogu /installation/sql/ ponentu Migrator, aby nie komplikować poleceniami tworzącymi zmodyfikowaną ta-
migration/. Przesyłany plik musi się nazy- zbytnio swojego rozwiązania, przyjął takie belę. Pamiętamy, że stworzenie wtyczki SQL
wymaga sporządzenia zrzutu bazy danych
np. W programie phpMyAdmin i zapisaniu
w odrębnym pliku instrukcji tworzących po-
trzebną tabelę.

Zakończenie migracji
Aby zakończyć instalację:

• naciśnij przycisk Dalej, co spowoduje po-


wrót na stronę Konfiguracja witryny;
• w polu Nazwa witryny wpisz nazwę
swojej witryny i ponownie naciśnij przy-
cisk Dalej (danych administratora nie
trzeba podawać);
• usuń katalog /installation (tymczasowo
wystarczy zmienić jego nazwę).

Jeśli podamy nowe hasło i adres administrato-


ra, instalator spróbuje je zmienić w bazie da-
nych, ale operacja ta niekoniecznie musi się za-
kończyć powodzeniem. Lepiej nie ryzykować!
Rysunek 5. Krok 5 instalacji Joomla 1.5. – migracja danych
Krok 7: Dodaj i skonfiguruj
rozszerzenia
Zanim zabierzemy się za dokończenie migra-
cji, rozejrzyjmy się zarówno po witrynie, jaki
zapleczu administracyjnym. Z łatwością za-
uważymy, że w nowej witrynie:

• aktywny jest tylko moduł głównego me-


nu, pozostałe moduły menu zniknęły
bez śladu;
• nie ma żadnych treści udostępnianych
przez niestandardowe komponenty;
Rysunek 6. Krok 5 instalacji Joomla 1.5. – migracja danych – komunikat o powodzeniu migracji • wszystkie pozycje menu odwołujące się

26 10/2008
do niestandardowych komponentów są Po doinstalowaniu komponentów
wyłączone; Trzeba je, oczywiście, skonfigurować:
• w menu Komponenty na zapleczu nie ma
ani jednego niestandardowego kompo- • włączyć tryb zgodności wstecznej (legacy);
nentu; • przywrócić ustawienia konfiguracyjne
• na liście modułów i dodatków są tylko roz- ustalone w poprzedniej witrynie;
szerzenia należące do rdzenia Joomla! • poprawić odwołujące się do nich pozycje
menu.
Czyżby migracja się nie powiodła? Wszak
komunikat głosił, że się udała, co więcej – Tryb zgodności wstecznej
są niektóre treści, można się zalogować na Aby komponenty i inne rozszerzenia napisa-
zaplecze. ne dla Joomla 1.0 działały w Joomla 1.5, mu-
Oczywiście, że migracja przebiegła po- si być włączony tryb zgodności wstecznej. Z
myślnie, ale Migrator: menu zaplecza wybieramy pozycję Rozszerze-
nia -> Dodatki, odszukujemy dodatek System
• nie przenosi informacji o zainstalowa- - Spuścizna (System – Legacy) i w kolumnie
nych dodatkowo rozszerzeniach oraz; Włączony naciskamy czerwoną ikonę z bia-
• wyłącza pozycje menu umieszczone w łym krzyżykiem. W efekcie zmieni się ko-
innych modułach niż menu główne (a lor i kształt ikony (zielony haczyk), a w pa-
więc np. usermenu, othermenu); sku informacyjnym po prawej stronie menu
• na stronie frontowej pozostawia włączo- pojawi się informacja oznaczona ikoną Joom-
ny jedynie moduł głównego menu oraz la! o tym, że witryna działa w trybie zgodno-
nowy w Joomla 1.5 – ścieżki powrotu ści z 1.0.
(breadcrumbs).
Przywrócenie
Stosunkowo łatwo można uaktywnić wyłą- ustawień konfiguracyjnych
czone pozycje menu i moduły. Wystarczy Wiele komponentów przechowuje swoje
zaznaczyć je na listach i opublikować. Nie ustawienia w plikach konfiguracyjnych. Naj-
oznacza to jeszcze, że wszystko zadziała, jak prostszym sposobem przywrócenia ustawień
oczekujemy - pozycje menu wywołujące tre- dokonanych w poprzedniej wersji witryny
ści komponentów odwołują się do nieistnie- jest więc odszukanie potrzebnego pliku kon-
jących rozszerzeń. Nie wystarczy, że je doin- figuracyjnego i przekopiowanie go do odpo-
stalujemy. Trzeba jeszcze połączyć je z pozy- wiedniego katalogu w Joomla 1.5. Zwykle
cjami menu. jest to katalog /administrator/components/
nazwa_komponentu, a plik nosi zwykle na-
Przed instalacją komponentów zwę config.nazwa_komponentu.php. W
Nie spiesz się, zwłaszcza gdy sporo czasu za- przypadku, gdy w pliku konfiguracyjnym
jęło Ci własnoręczne stworzenie wtyczek znajdowały się wartości tekstowe (np. regula-
ETL i SQL, by migrować dane z komponen- miny), a witryna kodowana była w ISO-8859-
tów. Instalatory wielu komponentów usuwa- 2, konieczna może być wcześniejsza konwer-
ją swoje tabele, jeśli takie istnieją już w bazie sja pliku do formatu UTF-8.
danych. Możliwe są dwa rozwiązania:
Krok 8. Popraw odwołania w menu
• dokonać odpowiednich zmian w bazie Dzięki nowej w Joomla 1.5 funkcji zmiany
danych - przed instalacją i po zainstalo- typu pozycji menu to zadanie jest niezwy-
waniu komponentu; kle łatwe do wykonania. Nie musimy usuwać
• zmodyfikować pliki instalacyjne kompo- dawnych pozycji menu – wystarczy otworzyć
nentu. je do edycji, nacisnąć przycisk Zmień typ i
wskazać na liście doinstalowany wcześniej
Drugi ze sposobów wydaje się prostszy. komponent, a następnie sprawdzić na stronie
Przed zainstalowaniem komponentu prze- frontowej, czy wszystko działa należycie.
glądamy plik nazwa_komponentu.xml
(ewentualnie także nazwa_komponentu.po-
lish.xml) i usuwamy z niego instrukcje na- STEFAN WAJDA
kazujące usunięcie istniejących w bazie da- Stefan Wajda [Zwiastun] jest liderem PCJ!, koordy-
nych tabel. Instrukcje usuwające tabele znaj- natorem Zespołu Tłumaczy i Dokumentacji akre-
dują się na Listingu 4. dytowanym przy Translation Work Group projektu
Przy okazji warto również sprawdzić, czy Joomla!, wydawcą witryn PCJ, autorem wpełni zlo-
nie ma instrukcji umieszczających przykła- kalizowanych wersji Mambo i Joomla!, komponen-
dowe dane albo przykładowe kategorie. Takie tów josDirectory i josResource. Spolonizował ponad
instrukcje również nie są potrzebne - wszak 150 rozszerzeń dla Joomla!, opublikował w Interne-
mamy dane z poprzedniej witryny. Usuwamy cie około 600 artykułów poświęconych wszystkim
zatem z plików instalacyjnych .xml instruk- aspektom Joomla!.
cje wyglądające, jak na Listingu 5. Kontakt:zwiastun@joomla.pl

www.sdjournal.org 27
Testowanie oprogramowania

Była sobie inspekcja


Aplikacja procesu inspekcji

W pierwszej części artykułu zdefiniowaliśmy proces inspekcji. Używając


podejścia PDCA (ISO 9001, PMBok) osiągnęliśmy elastyczność, skalowalność
i uniwersalność. Teraz nadszedł czas na wykorzystanie teorii do konkretnego
zadania – inspekcji kodu źródłowego.
częcia każdego z etapów od wyników poprzed-
Dowiesz się: Powinieneś wiedzieć: niego (Rysunek 1). Stąd, podstawowa ścieżka
• Jak aplikować proces inspekcji do kodu źró- • Definicja procesu inspekcji; zadań inspekcyjnych:
dłowego; • Podstawy zarządzania projektami;
• Jak efektywnie zarządzać inspekcją; • Podstawy planowania jakości. • analiza przedmiotu inspekcji (np. kodu
źródłowego); dokonywana przez inspek-
tora;
• przetwarzanie komentarzy i wprowadza-
przedmiotach, ale jednocześnie same są częścią nie poprawek, wykonywane przez autora;
większego systemu (projektu, organizacji). Iden- • weryfikacja poprawek przez inspektora;
Poziom trudności tyfikacja powiązań w takim systemie jest kluczo- • ulepszanie procesu, który może postu-
wa dla jego prawidłowego funkcjonowania. lować każdy z członków zespołu inspek-
Te dwie płaszczyzny – aplikacja procesu in- cyjnego.
spekcji i jego relacje z pozostałymi procesami

P
ierwsze spotkanie z ISO 9001:2000 za- – będą przedmiotem poniższych rozważań. Na każdym etapie dodatkowo istnieją możli-
zwyczaj się wiąże ze sporym zaskocze- wości konsultacji między członkami zespołu
niem. Jesteśmy przyzwyczajeni do te- Od czego zacząć? inspekcyjnego (rozdział Konsultacje).
go, że norma jest synonimem konkretu – za- Zgodnie z przyjętym założeniem oddzielenia de- Ścieżce zadań towarzyszy odpowiedni prze-
wiera szczegółowy przepis, jest precyzyjna i jed- finicji procesu od jego aplikacji, niniejsze opraco- pływ informacji:
noznaczna. Natomiast jeden z początkowych wanie składa się z trzech części – przygotowa-
paragrafów ISO 9001 brzmi: Wszystkie wyma- nia, definicji procesu oraz uwag do jego aplika- • komentarze są wynikiem analizy kodu
gania niniejszej normy międzynarodowej są uni- cji. Części te stanowią obraz wyzwania, z którym źródłowego;
wersalne i mają być stosowane do wszystkich or- przyjdzie Wam się zmierzyć. I tak: przygotowanie • przekazywane są autorowi do rozpatrze-
ganizacji, niezależnie od typu, wielkości i produk- wprowadza w temat, dostarcza podstawowego nia (etap naprawy);
tów [1]. To zdanie bardzo dobrze oddaje jej du- słownictwa koniecznego do zrozumienia defi- • jeżeli komentarze nie są jednoznaczne
cha. ISO 9001 jest bowiem zbiorem wytycz- nicji procesu. Definicja procesu stanowi model, (trudno określić źródło zastrzeżeń, ziden-
nych, a nie rozporządzeń, zawiera wymagania, zawiera metodykę na tyle ogólną i uniwersalną, tyfikować odpowiedni fragment kodu) ko-
a nie gotowe rozwiązania. Proces certyfikacji aby pasowała do systemu jakości obowiązującego nieczna jest dodatkowa konsultacja z in-
polega tu na stwierdzeniu, czy wymagania te w Waszej organizacji. Zadaniem trzeciej części, spektorem. Może się okazać, że inspek-
są spełnione. będącej przedmiotem tego artykułu, jest użycie tor źle zrozumiał analizowany fragment i
W podobny sposób skonstruowaliśmy nasz procesu inspekcji w projekcie, którego produk- komentarz będzie odrzucony lub przeka-
proces inspekcji. Sama definicja opisuje etapy tem jest oprogramowanie, a przedmiotem in- zany do ponownego sformułowania (tzn.
inspekcji, wejścia i wyjścia dla każdego z tych spekcji – kod źródłowy (Tabela 1). analiza musi być przeprowadzona ponow-
etapów oraz techniki (narzędzia) pozwalające nie). Jeżeli komentarz jest zasadny, od-
na osiągnięcie zadanych celów. W żaden spo- Aplikacja procesu zwierciedla rzeczywisty problem, zgłoszo-
sób nie wskazuje kategorii zagadnień, do któ- Definicja procesu inspekcji zakłada istnienie ny zostanie PR (ang. Problem Report). Jeże-
rych proces inspekcji jest wykorzystany (typ), czterech etapów – analizy, naprawy, weryfika- li komentarz odnosi się do zmiany lub do-
ich skali (wielkości) ani przedmiotu (produktu). cji oraz ulepszania. Dla każdego z tych etapów dania funkcjonalności – odpowiednio bę-
Jednak za taką uniwersalność trzeba płacić do- zdefiniowaliśmy warunki rozpoczęcia (wejścia) dzie zgłoszony CR (ang. Change Request)
datkowym wysiłkiem, który musi być poświę- oraz techniki, których zastosowanie zaowocuje lub REQ (ang. Requirement);
cony na zastosowanie teorii do konkretnej po- odpowiednimi rezultatami (wyjściami). Dzięki • autor rozwiązuje PR. CR i REQ będą roz-
trzeby. Mówimy wtedy o aplikacji procesu. takiej definicji poszczególne etapy inspekcji sa- patrzone w trakcie projektowania następ-
Procesy w projekcie (organizacji) nie działa- me stały się procesami. Powiązanie między ni- nych wersji produktu;
ją w izolacji. Operują na właściwych dla nich mi uzyskaliśmy poprzez uzależnienie rozpo- • poprawiony przedmiot jest przedstawiany

28 10/2008
Była sobie inspekcja

inspektorowi do weryfikacji. Nie musi to szczególnie gdy w ramach oszczędności czasu i terminowość wykonania zadania (tu: analizy, na-
jednak być ten sam inspektor, który doko- zasobów, decydujemy się na ograniczenie for- prawy, weryfikacji, ulepszania). Związane jest to
nywał analizy. Rolę inspektora może rów- malizacji procesu inspekcji. Zalecamy, aby in- z koniecznością doszkalania (każdy członek ze-
nież spełnić narzędzie do statycznej anali- spektorzy byli wybierani spośród najbardziej społu zna inny fragment kodu, a w dyskusji nad
zy kodu (rozdział Wykorzystanie narzędzi); doświadczonych osób w zespole. komentarzami uczestniczą wszyscy) oraz cza-
• przedstawione do weryfikacji rozwiąza- Również odpowiednie przyporządkowanie sem, jaki wymagają interakcje i zarządzanie nimi
nie komentarza może nie odpowiadać roli autora może nie być łatwe. W dużym pro- (rozdział Konsultacje). Operowanie za pomocą
wyobrażeniom inspektora lub mieć wady jekcie pracę wykonuje się zbiorowo, kod jest małych, dobrze wyspecjalizowanych zespołów,
uniemożliwiające jego wdrożenie. Należy tworzony przez wielu deweloperów i wielokrot- może tu być o wiele efektywniejsze.
wtedy powtórzyć naprawę. Może się jed- nie przerabiany. Rzadko można zidentyfikować W opracowaniu założyliśmy, że uczestnicy
nak zdarzyć, że rozwiązanie nie zostało osobę, która napisała dany fragment kodu (tzn. procesu inspekcji rekrutują się z zespołu pro-
zrozumiane przez inspektora i po konsul- fizycznego autora). Rolę autora w inspekcji nale- jektowego pracującego nad przedmiotem in-
tacji będzie zaakceptowane; ży więc traktować wirtualnie. Może to być osoba spekcji. Źródłem członków procesu inspekcyj-
• posiadając listę zgłoszonych komentarzy, odpowiedzialna za dany moduł, ekspert w kon- nego mogą być jednak nie tylko osoby bezpo-
oceniamy ich jakość i wagę (rozdział Mia- kretnym aspekcie funkcjonowania produktu. średnio zaangażowane w jego rozwój. Często
ry projektowe i procesowe). Na podstawie Często jednak do tej roli wybiera się po prostu zatrudnia się w tym celu np. menadżera ds. ja-
wyciągniętych wniosków wprowadzamy jednego z członków zespołu projektowego, być kości (ang. quality officer), specjalistów od two-
ulepszenia. może zajmującego się aktualnie rozwojem innej rzenia dokumentacji technicznej (ang. technical
części produktu. Taki autor będzie potrzebował writer), przedstawicieli klienta i innych. Zaspo-
Proszę zwrócić uwagę, że w trakcie każdego z dodatkowego czasu na zapoznanie się z komen- kajanie zasobów może również odbywać się w
etapów, komentarze są uzupełniane o odpo- towanym fragmentem. Z drugiej strony podnosi ramach outsourcingu. Należy wtedy pamiętać o
wiednie informacje, np. status (z nowy na od- to poziom świadomości kodu w zespole. konieczności zawarcia odpowiednich umów re-
rzucony, odroczony lub zaakceptowany), akcje, Ilość ról oraz zakres przyporządkowanych im gulujących zachowanie tajemnicy (ang. non-di-
jakie powinny być podjęte (np. zgłoszony PR, obowiązków mogą być różne w zależności od sclosure agreement, NDA).
CR lub REQ) itp. Tak uzupełniany rejestr ko- przyjętej techniki inspekcji (por. inspekcja for-
mentarzy jest ważną częścią dokumentacji malna). Należy się jednak dobrze zastanowić, Rola menadżera projektu
projektowej. czy zwiększanie ilości ról jest opłacalne. Wię- Opinie, jakie często słyszymy na temat roli me-
cej ról wymaga większego zespołu inspekcyjne- nadżera projektu w procesie inspekcji, stawia-
Role a zasoby go. Gdy zabraknie zasobów, jednej osobie będzie ją sprawę jasno – trzymać ich jak najdalej! O ile
W dotychczasowych rozważaniach odnosili- przyporządkowywane kilka różnych ról. Roz- można zgodzić się, że wpływ na kształt inspek-
śmy się do trzech podstawowych ról – kierow- mywa to odpowiedzialność, wymaga rozwiązy- cji (np. perspektywy) powinien mieć jedynie
nika inspekcji, inspektora oraz autora. wania konfliktów interesów oraz dzielenia cza- zespół inspekcyjny, o tyle przydział czasu i zaso-
Rola kierownika inspekcji jest szczególna. To su między zadaniami. Jeżeli możliwe jest skom- bów (harmonogram, budżet) leży wyłącznie w
jego zadaniem jest przystosowanie procesu in- pletowanie odpowiednio dużego zespołu, radzi- gestii menadżera projektu.
spekcji do potrzeb projektu. Biorąc pod uwa- my zwrócić szczególną uwagę na sposób prowa- W idealnym świecie, przyjmując jakość za
gę istniejące ograniczenia projektowe (osiągal- dzenia konsultacji. Jak stwierdza prawo Brook- najwyższe kryterium akceptacji, powinniśmy
ność zasobów, dojrzałość produktu, jego przy- sa [5], ilość interakcji między członkami zespo- usprawniać bezustannie. Jedynie produkt o nie-
szłe plany rozwoju), musi on zdecydować, któ- łu (tu: inspekcyjnego) ma negatywny wpływ na spotykanej jakości byłby w stanie zaspokoić wy-
re techniki będą najbardziej odpowiednie, jakie
strategie należy zastosować (np. jakie perspek- Tabela 1. Przewodnik po przygotowaniu, procesie inspekcji i jego aplikacji
tywy, początkowe listy kontrolne). Kierownik
Przygotowanie Proces inspekcji Zagadnienia aplikacji
inspekcji jest również odpowiedzialny za śle-
dzenie postępów, zbieranie i rozsyłanie komen- Procesy Podejście procesowe w obrębie po- Aplikacja procesu
szczególnych etapów inspekcji Miary projektowe i procesowe
tarzy, zarządzanie dokumentacją procesu oraz
Współpraca między procesami
dostarczanie miar procesowych i projektowych
menadżerowi projektu. Do jego zadań nale- Role Powiązanie ról z zadaniami dla po- Role a zasoby
szczególnych etapów inspekcji Rola menadżera projektu
ży również ocena i wprowadzanie usprawnień
procesu, perspektyw i list kontrolnych. Techniki inspekcji Wykorzystanie technik inspekcji w Ograniczenia technik inspekcji
procesie inspekcji: Adaptacja technik inspekcji
Dobrym kandydatem do tej roli jest zatem
• role a etapy w inspekcji; Wykorzystanie narzędzi
kierownik techniczny lub architekt projektu. • przepływ zadań i komunikacja Konsultacje
Posiadana przez nich znajomość projektu po- między członkami zespołu inspek-
zwoli na rozstrzyganie ewentualnych rozbież- cyjnego.
ności w opiniach inspektorów (w ramach kon- Strategie inspekcji: Organizacja inspekcji z wykorzysta- Wykorzystanie perspektyw
sultacji). Doświadczenie pomoże w dostrzeże- perspektywy niem perspektyw: Ulepszanie perspektyw
niu ogólnych reguł, wyborze standardów i pro- • analiza zgodnie z perspektywą;
mowaniu najlepszych praktyk implementacji • ulepszanie: dodawanie perspek-
tyw w zależności od potrzeb, uści-
(ang. best practises).
ślanie aspektów, zakresu i celów per-
Najbardziej wymagającą jest rola inspektora. spektyw.
Osoba przyporządkowana do tego zadania mu-
Strategie inspekcji: li- Organizacja inspekcji z wykorzysta- Budowanie list sprawdzających
si dysponować najbardziej specyficznymi pre- sty sprawdzające niem list sprawdzających: Ulepszanie list sprawdzających
dyspozycjami. Chodzi tu nie tylko o eksperta w • analiza zgodnie z listami spraw-
rzemiośle, ale również o osobę charakteryzują- dzającymi;
cą się samodzielnością, samodyscypliną, otwar- • ulepszanie: uzupełnianie list w
tością i komunikatywnością. Jest to wymagane, oparciu o wyniki inspekcji

www.sdjournal.org 29
Testowanie oprogramowania

magania klientów. Ci, wytrwali w swoim poszu- wane zadania. Wykorzystuje perspektywy, łączy Niezadowolenie z istniejącego stanu rzeczy mo-
kiwaniu ideału, płaciliby cierpliwie za kolejne je z zadaniami rozwoju i naprawy produktu (co że wynikać np. z niespójności kodu, trudności
iteracje inspekcji. Kompromis między jakością i zwiększa możliwości harmonogramowania). w utrzymywaniu brudnego kodu, błędami wyko-
czasem nie byłby nawet brany pod rozwagę. Menadżer jest również interfejsem zespołu nania, których źródłem są niedostatki w rzemio-
Oczywiście nie żyjemy w idealnym świecie. na zewnętrzny świat. Jego zadaniem jest prze- śle. Sposobem na rozwiązanie takich problemów
Wszelkie opóźnienia w dostarczeniu produktu konanie szefa produktu co do słuszności dzia- jest przeprowadzenie inspekcji kodu. Pierwszy-
nie są akceptowalne (ang. time to market). Me- łań zespołu inspekcyjnego. Nie chodzi o samą mi krokami będą analiza istniejących proble-
nadżer projektu jest osobą, która musi się z po- ideę – podnoszenie jakości zawsze się opłaca. mów, wprowadzenie ich śledzenia i rozpoczę-
dobnymi kompromisami zmierzyć. Chodzi o znalezienie odpowiednich argumen- cie inspekcji. Menadżer wykluczony z procesu
To właśnie przekonanie o konieczności do- tów, które połączą świat inżynierów i biznesu inspekcyjnego nie będzie potrafił poprzeć tych
konywania wyboru między czasem/zakresem/ (robienia rzeczy dobrze i robienia dobrych rze- działań odpowiednimi argumentami.
kosztami a jakością podsuwa pomysły unikania czy – wysokiej jakości i produktów, które moż- Rola menadżera projektu nie kończy się jed-
zaangażowania menadżerów w inspekcję kodu. na sprzedać [3]). Zadaniem szefów produktu nak na planowaniu. Jest on również odpowie-
Ich rola ograniczana jest do popychania projek- jest postrzeganie projektu przez kontekst szer- dzialny za funkcjonowanie zespołu w wymiarze
tu do przodu z dnia na dzień. Natomiast in- szego programu, celów biznesowych organiza- czysto ludzkim. Jego zadaniem jest zapewnienie
spekcja nakazuje zatrzymać się na chwilę i po- cji. Jakość jest tym, co klienci zakładają, nowa odpowiedniej atmosfery w pracy, utrzymywa-
myśleć – rozważyć potencjalne skutki. Mene- funkcjonalność – tym, czego potrzebują, co po- nie relacji osobistych na poziomie koleżeńskim,
dżerzy zaś wydają się pierwszymi z tych, któ- zwala na zdobywanie rynku. przeciwdziałanie konfliktom. Niestety inspekcja
rzy w obliczu zbliżającej się publikacji gotowi Potraktujmy więc proces inspekcji jako zmia- kodu niesie za sobą ryzyko przerodzenia się w po-
są poświęcić długofalowe zyski na korzyść szyb- nę spotykającą się z oporem przed jej wprowadze- lowanie na czarownice. Wymagane jest więc, aby
kich (tymczasowych) korekt pozwalających na niem. Spójrzmy na nierówność Gleichera [4]: członkowie zespołu odnieśli się do niej obiek-
dotrzymanie terminów. tywnie, a nie w kategoriach osobistych. Niedo-
Jest to oczywiście prawda. Cała sztuka polega Dissatisfaction * Vision * First steps > zwolone są tu analizy zgłaszanych komentarzy
jednak na tym, aby podobnych wyborów nie trze- Resistance to change względem fizycznego autora kodu. Nie przynio-
ba było dokonywać. Chodzi tu o podejście, gdzie są one żadnej nowej wiedzy na temat produktu,
proces tworzenia produktu jest skonstruowany Aby przezwyciężyć opór przed zmianą (ang. a mogą doprowadzić do niepotrzebnych napięć
w sposób, który będzie gwarantował najwyższą resistance to change) należy: w zespole. Zastosowanie ma tu idea programo-
jakość. Jakość nie może być jedną z sił w projek- wania bezosobowego (ang. egoless programing, zob.
cie – powinna być wynikiem operowania zakre- • wykazać, że obecny stan nie jest zadowala- [6], [7]). Idea ta opiera się na traktowaniu wyni-
sem, czasem i kosztami. Mądry menadżer to wie. jący (ang. dissatisfaction); ków własnej pracy poprzez pryzmat celu (pro-
Zamiast wymawiać się brakiem czasu i zasobów • pokazać, jakie pozytywne efekty można duktu). Chodzi tu o świadomość, że tworzymy
– promuje techniki osobistej inspekcji, planuje oczekiwać (ang. vision); kod nie dla siebie, ale dla innych. Praca, którą wy-
inspekcje kompletne wprzód, poszczególne eta- • przedstawić kroki wymagane do osiągnię- konujemy, nie ma na celu zaspokojenia naszych
py inspekcji wplata pomiędzy aktualnie wykony- cia tych efektów (ang. first steps). ambicji. Ma służyć wyższemu dobru; tu: jako-

������������������� ��������� ����� ������������


�������������������������������������
��������� ����������� �����������������
���������������������
���������������������� �������������
������������
������� ������������������ ����������
�����������
�����������������������
���������
������������������������������� ������������ ������
��
����������� ������������������������
������������������������

��� ����������
���������������������
��������������
�����������

�������
�����������

�� ��������������
��������������

��������������������� �����������������������

�������������������
����������������������
������������������
����������� �����������
������������������� ����������� �����������������������
�������������������

���������� ������������
�������� �������� �������������������������������������������������
������������������������������������������������������������������������������� ����������������������

�������� ��������������

������������ ��������������������������� ��������� ���������������������������


�������� �������������������� �� �������

Rysunek 1. Zadania w kontekście ról i etapów inspekcji

30 10/2008
Była sobie inspekcja

ści, powodzeniu produktu. Taka zmiana punk- Kolejnym sposobem na ogarnięcie dużej ilo- nich elementy najbardziej nam odpowiadają-
tu widzenia owocuje bardziej obiektywnym po- ści kodu jest użycie narzędzi do analizy statycz- ce. W obliczu ograniczonych zasobów, bardziej
dejściem, otwartością na propozycje zmian, go- nej. Rozpatrywanie ostrzeżeń kompilatora (np. skłonni będziemy wykorzystywać techniki an-
towością do uczenia się, czerpania z doświad- GCC), uwag zgłaszanych przez narzędzia typu gażujące mniejszą ich ilość. W tym kontekście
czeń innych. Nie ma to nic wspólnego z umniej- Lint, Valgrind jest bardzo efektywnym sposo- najkorzystniejsza jest inspekcja osobista (Tabe-
szaniem własnej wartości – raczej z ukierunko- bem znajdywania niektórych kategorii proble- la 2). Większość błędów będzie wykryta, zanim
waniem się na podnoszenie kwalifikacji. Jest to mów (rozdział Wykorzystanie narzędzi). zostaną dodane do produktu.
najlepszy sposób, aby zdać sobie sprawę ze słabo- Istotny jest również wybór sposobu przegląda- Odpowiedzią na ograniczenia czasowe jest uży-
ści, niedostatków w wiedzy i umiejętnościach i nia kodu. Użycie metodologii z góry na dół (ang. wanie narzędzi do analizy statycznej kodu. Anali-
otrzymać szansę na szybkie ich nadrobienie. A top-to-bottom) wymaga dostarczenia poprawnej za przez nie wykonywana jest bardzo szybka i po-
przecież właśnie to jest jednym z podstawowych dokumentacji projektowej. Wszyscy wiemy, że wtarzalna (rozdział Wykorzystanie narzędzi).
celów inspekcji. nie zawsze jest to wymaganie realistyczne. Czę- Znaczne straty na czasie będą rezultatem
sto zdarza się, że dokumentacja nie jest ani aktu- niepoprawnie prowadzonych konsultacji. Na-
Ograniczenia technik inspekcji alna, ani kompletna. Inspekcja jest doskonałym leży więc dokładnie przemyśleć okoliczności
Czy możliwe jest bezbolesne wkomponowanie momentem na uzupełnienie jej! W miarę zagłę- i sposoby ich prowadzenia. Krótki email może
inspekcji kodu w procesy projektowe? Podsta- biania się w szczegóły funkcjonowania produk- wyjaśnić wątpliwości i znacznie usprawnić pra-
wowym ograniczeniem jest tu ilość dostępnego tu, można aktualizować dokumentację, tak aby cę. Przedłużające się w nieskończoność posie-
czasu i zasobów. Nie ma jednak konieczności ro- odpowiadała stanowi faktycznemu. dzenie całego zespołu nie doprowadzi do żad-
bienia całej inspekcji na raz. Skuteczną prakty- Jeżeli braki w dokumentacji nie pozwala- nych wniosków (rozdział Konsultacje).
ką jest ograniczenie liczności zespołu inspekcyj- ją nam swobodnie przechodzić od ogółów do Zdecydowanie, pomimo dodatkowych na-
nego (zaangażowanych zasobów) oraz poświęca- szczegółów, korzystniejsze jest podejście od do- kładów zasobów i czasu, należy podjąć starania
nie na zadania inspekcyjne nie więcej niż 2 go- łu do góry (ang. bottom-to-top). Zaczynanie od o formalizację dokumentacji procesu inspekcji.
dziny dziennie. Inspekcja wymaga bardzo dużej szczegółów, od warstw najniższych, pozwala Jest to konieczne do odpowiedniego planowa-
koncentracji, której nie da się utrzymywać przez ograniczyć wymagany zakres wiedzy. Pozwa- nia, śledzenia postępów w pracy, rozumienia
dłuższy czas. Dodatkowo ograniczamy ilość li- la angażować członków zespołu o mniejszych wprowadzonych zmian i powodów, dla których
nijek kodu przeglądanych dziennie. Rozsądną umiejętnościach lub mniejszej znajomości pro- zdecydowano się na nie.
granicą jest 200 – 400 linii [8]. Przeglądnięcie duktu. W miarę wspinania się na coraz wyższe Rozważania nad adaptacją technik inspekcji
2000 linijek w 2 godziny oznacza, że inspektor poziomy, wiedza (a wraz z nią dokumentacja) należy uzupełnić o kwestie dynamiki projektu,
poświęcił niecałe 4 sekundy na każdą linijkę. Jest jest uzupełniana. Wiąże się to z ryzykiem utra- jego potrzeb. Projekt silnie rozwijany, wzboga-
to bardzo pobieżna inspekcja, być może ograni- ty z oczu szerszego kontekstu. Uwzględniając cany o coraz to nowe funkcje, wymaga zwięk-
czoną jedynie do zaliczenia listy sprawdzającej. jednak zysk w postaci zapewnienia solidnych szenia dokładności inspekcji osobistych oraz
Mówimy tu przecież o kodzie źródłowym, któ- podstaw, jest to również podejście skuteczne. tych dokonywanych w zakresie dodanego ko-
ry nie jest naturalnym językiem ludzi. du. Celem będzie tu udowodnienie, że nowe
Planowane i kontrolowane zastosowanie po- Adaptacja technik inspekcji elementy mają odpowiednią jakość i pasują do
wyższych ograniczeń nie powinno spowodo- Porównując ograniczenia projektowe i właści- całości rozwiązania. Projekt stabilny, w któ-
wać większych opóźnień w projekcie. Z drugiej wości technik inspekcji [2], możemy wybrać z rym głównym zadaniem jest podnoszenie jako-
strony efekty wprowadzanych zmian nie będą
tak spektakularne. Często nawet trudno będzie Tabela 2. Adaptacja technik inspekcji
wykazać, w jakim stopniu poprawa jakości pro- Technika Stopień użycia Elementy użyte Elementy zaniechane/
duktu (wyrażona np. w procentowym powo- zmienione
dzeniu testów regresyjnych) zawdzięczana jest Cały zespół
inspekcji, a w jakim regularnemu usuwaniu Formalna Ograniczone • formalna dokumentacja Zaniechane:
błędów znalezionych na podstawie analizy dy- • spotkania całego zespołu;
namicznej. Sposób ten jednak jest dobrym kro- • mnogość ról w zespole in-
kiem w stronę uczynienia inspekcji regular- spekcyjnym;
ną praktyką projektową. Członkowie zespołu, Zmienione:
• autor wirtualny;
przyzwyczajeni do takiego trybu pracy, z cza-
sem zaczną realizować zadania inspekcji sami z Inspektor+Autor
siebie w ramach inspekcji osobistej [2]. Jeden na jeden Częste • konsultacje bezpośred- Zmienione:
W zaawansowanym stadium projektu, za- nio między inspektorem i • konsultacje obowiązkowo
kres przedmiotu inspekcji może się okazać cał- autorem; dokumentowane (email, notat-
• konsultacje mało for- ka, wpis w Bugzilli)
kiem spory. Dla 100 tysięcy linijek kodu i dwóch malne;
inspektorów przeglądających po 400 linijek
Wspomagana Obowiązkowe • integracja narzędzi do
dziennie – będziemy potrzebowali co najmniej
narzędziami analizy statycznej z konfi-
6-7 miesięcy, aby przejrzeć całość (plus urlopy guracją projektu;
i zwolnienia). Stosowanie perspektyw wspar- • uzgodniony sposób inter-
tych listami kontrolnymi proces ten znakomi- pretacji wyników;
cie usprawni. Przykładowo, jeżeli obserwujemy Autor
wiele problemów związanych z nieodpowied-
Osobista Obowiązkowe • autor dokonuje osobiście Zmienione:
nim zarządzaniem pamięcią – skoncentrujmy inspekcji fragmentu przed • uzupełnianie dokumenta-
się najpierw na perspektywie rozpatrującej alo- dodaniem do całego roz- cji na podstawie inspekcji oso-
kację i zwalnianie pamięci. Sprawdźmy operacje wiązania; bistej;
na buforach (kopiowanie, zerowanie) oraz po- • błędy są wyłapywane na
prawność obsługi błędów z tym związanych. poziomie lokalnym;

www.sdjournal.org 31
Testowanie oprogramowania

ści, wymagać będzie więcej inspekcji komplet- Poprawianie ich może nie być możliwe lub nie le- przypadku komunikujemy konkretny sukces
nych, sprawdzających jak zachowują się różne żeć w interesie projektu (np. zmiana spowodowa- (wszystkie pliki nagłówkowe sprawdzone), za-
aspekty rozwiązania. Z kolei inspekcja projek- łaby przejęcie odpowiedzialność za nie). Zakres kończenie pewnego etapu, punkt, w którym się
tu tuż przed publikacją będzie bardziej formal- jest wtedy odpowiednio ograniczany. Podobnie, znajdujemy. Podobnie spektakularne są rapor-
na, gdyż jej celem jest dostarczenie miar jakości ze względu na harmonogram prac, niektóre z mo- ty z usuwania uwag Lint'a, np. w wersji 2.0 było
charakteryzujących produkt. dułów będą analizowane w pierwszej kolejności. 1431 uwag, teraz mamy jedynie 302. Postęp im-
W ramach technik inspekcji operujemy więc Duża ilość uwag zgłaszanych przez Lint'a wy- ponujący, być może wystarczy na usprawiedli-
– celami, stopniem formalizacji, zakresem oraz musza precyzyjne określenie celu. W ramach wienie, dlaczego nadal pozostało 300 uwag.
ilością inspektorów w stosunku do ilości autorów. opisu perspektywy należy podać: Perspektywy nie będą jednak skuteczne, jeże-
Zmiana wartości i wagi tych parametrów jest do- li zaniechamy ich stałego uzupełniania do sta-
konywana na podstawie potrzeb projektu. • jakie kategorie uwag nas interesują? nu produktu i wymagań formułowanych jego
• jaka waga uwag nas interesuje? względem.
Wykorzystanie perspektyw • jakiego mierzalnego efektu się spodzie-
Podstawową strategią wykorzystywaną w pro- wamy? Ulepszanie perspektyw
ponowanym procesie inspekcji są perspektywy. Produkt, przedmiot perspektywy, ciągle się zmie-
Pozwalają one skoncentrować uwagę inspekto- Dla przykładu – podczas analizy powiązań nia. Dodawane są do niego coraz to nowe funkcje,
ra na pojedynczym aspekcie kodu źródłowego. między modułami, interesują nas uwagi doty- kod jest większy, stawiane są mu coraz bardziej
Zamiast szukać wszystkich możliwych proble- czące złego włączania nagłówków (problemy wygórowane wymagania. Perspektywy muszą za
mów, inspektor patrzy na jedną, charaktery- ze słowem kluczowym extern, wielokrotne takimi zmianami nadążać. Muszą obejmować co-
styczną cechę kodu. Pod uwagę brany jest je- inkluzje itp.). Poszukujemy jedynie uwag kry- raz to nowe aspekty, dostosowywać swój zakres,
dynie materiał określony zakresem perspekty- tycznych, ignorując ostrzeżenia i informacje. zaostrzać stawiane cele. Ulepszanie perspektyw
wy. Zadaniem inspektora jest osiągnięcie wy- Naszym celem jest zlikwidowanie wszystkich jest procesem koniecznym. Jeżeli zostanie zanie-
znaczonego, mierzalnego celu. Te trzy wartości uwag krytycznych (zob. kryterium S.M.A.R.T dbane, w niedługim czasie będą odnosić się one
– aspekt, zakres oraz cel – muszą być uwzględ- w rozdziale Konsultacje). do nieistniejącego przedmiotu. Analiza opierana
nione w opisie perspektywy. Inną zaletą stosowania perspektyw jest moż- na nich będzie bezprzedmiotowa.
Spróbujmy skonstruować perspektywę, która liwość estymacji pozostałej ilości pracy. Konty- Innym impulsem do ulepszania perspek-
używa Lint'a – narzędzia do statycznej analizy nuując przykład z Lintem – już po kilku dniach tyw są wnioski z ich przeprowadzenia. Jeżeli
kodu źródłowego. Aspekt tej perspektywy będzie będziemy widzieli, że usunięcie 10 uwag zaj- inspektor zauważa, że niektóre aspekty nale-
dotyczył przeglądania kodu w poszukiwaniu od- muje średnio godzinę. Na tej podstawie mo- ży uściślić lub rozwinąć, opis perspektywy po-
stępstw od standardów kodowania. Standard ko- żemy przypuszczać, ile czasu zajmie usunię- winien zostać odpowiednio zmieniony. Może
dowania odnosi się nie tylko do np. nazewnictwa cie reszty uwag (ang. duration). Niestety z na- się również okazać, że wybrany zakres skutku-
funkcji, wyglądu kodu (formatowania pliku, ko- szych obserwacji wynika, że na pierwszy ogień je jedynie lokalną poprawą – w dziedzinie ca-
mentarzy), ale również do konkretnych elemen- idą uwagi najprostsze do usunięcia. Zastosowa- łego produktu postęp nie jest dostatecznie za-
tów rzemiosła – np. inicjowania zmiennych, eks- nie może tu mieć reguła Pareto stwierdzająca, dowalający.
portowania funkcji, weryfikacji argumentów. że 80% pracy zajmuje 20% czasu. Szacunki uzy- W trosce o to, aby aspekt perspektywy nie
Ponieważ niektóre z tych elementów mogą być skane na podstawie wykonania części perspek- stał się zbyt ogólny, zestaw perspektyw z cza-
w różnych standardach różnie definiowane, ko- tywy mogą być więc bardzo zgrubne. Jest to sem jest rozszerzany. Przykładowe perspekty-
nieczne jest odpowiednie skonfigurowanie Lin- jednak i tak więcej niż uzyskamy w podejściach wy mogą odnosić się do:
ta. W pliku konfiguracyjnym określimy stan- polegających na jednoczesnej analizie wszyst-
dardy, zgodnie z którymi kod ma być sprawdza- kich możliwych problemów. • używania pamięci, gdzie sprawdzamy alo-
ny (np. ANSI C, ISO C, C99), zakres kodu, jaki Używanie perspektyw ułatwia również ra- kacje i zwalnianie pamięci, zarządzanie
ma być poddany analizie oraz poziom restrykcyj- portowanie postępu prac. Z punktu widze- błędami;
ności narzędzia (ilość i rodzaj zgłaszanych uwag, nia menadżera projektu (a właściwie public re- • wielowątkowości, gdzie sprawdzamy, jak
poziom ich wyzwalania). lations) prezentowanie informacji 10% kodu w kodzie realizowane jest zarządzanie
W zakres inspekcji wchodzi zazwyczaj cały do- poddano inspekcji jest o wiele mniej komforto- wątkami;
stępny kod (inspekcja kompletna). Zdarzają się we niż komunikat – przeglądnięty został 100% • powiązań w kodzie, gdzie analizujemy, jak
jednak projekty, które wykorzystują moduły po- nagłówków (mimo że owe nagłówki mogą fak- poszczególne moduły rozwiązania współ-
chodzące od innych dostawców (ang. third party). tycznie stanowić 10% całości kodu). W drugim pracują ze sobą, jak są separowane, czy
funkcje są potrzebnie eksportowane;
Tabela 3. Przykładowe wyniki uzyskane przez analizę za pomocą narzędzia Lint • redundancji w kodzie, gdzie sprawdzamy
Kod uwa- Opis Ilość wystąpień Ocena ważności czy przypadkiem niektóre funkcje nie są
gi [mała/średnia/wysoka] duplikowane, implementowane wielokrot-
534 Wartość zwracana przez funkcję jest 221 Wysoka nie lub niewykorzystywane;
ignorowana • przenośności kodu, gdzie sprawdzamy czy
525/539 Za płytkie/głębokie wcięcia w stosun- 71 Mała
kod może jest tak samo interpretowany na
ku do wyszczególnionej linii. różnych platformach (używanie typów na-
tywnych, wyrównywanie typów wylicze-
529 Zadeklarowana w funkcji zmienna 65 Mała
nigdy nie została użyta. niowych w pamięci);
• komentarzy w kodzie;
613 Prawdopodobne użycie zerowego 11 Wysoka
wskaźnika jako argumentu wywołania
• komplikacji kodu, gdzie sprawdzamy czy
kod nie jest zbyt zawiły. Może to utrud-
571 Podejrzane rzutowanie 8 Średnia
niać jego czytelność i wymuszać testowa-
644 Użyta zmienna nie została wcześniej 3 Wysoka nie wielu ścieżek wykonania (np. McCabe
zainicjowana Cyclomatic Complexity).

32 10/2008
Była sobie inspekcja

Powyższa lista uwidacznia elastyczność per- np. odnosić się do projektu, w którego ramach ko wnioski z działania jednej perspektywy. W
spektyw. W zależności od potrzeb, można zostały stworzone. Sprawdzamy tu sztukę, zna- strategii przygotowanej przez zespół inspek-
zmieniać ich ilość. Nie muszą odnosić się do jomość rzemiosła – funkcjonowanie jest dome- cyjny należy więc określić, czy listy sprawdza-
całego projektu, nie wszystkie trzeba wyko- ną perspektyw. Dodatkowo, zbytnie uszczegó- jące powinny zbierać wnioski z różnych per-
rzystywać przy każdej inspekcji. Co więcej – łowienie listy może sprawić, że inspektorzy, spektyw (tzn. jedna lista zawierająca ranking
można używać ich nie tylko jako element in- ufając w jej kompletność, ograniczą się jedynie najczęstszych/najważniejszych problemów),
spekcji, ale również przy wspieraniu rozwoju do sprawdzania elementów przez nią wyszcze- czy też każda z perspektyw powinna posiadać
produktu. Koncepcja taka jest popularna pod gólnionych. swoją własną listę. Obie te metody mają swo-
paradygmatem programowania aspektowego Dla przykładu z Tabeli 3 listę sprawdzającą je zalety i wady. Do szybkich sprawdzeń (ang.
(ang. aspect-oriented programming, AOP). Taki przedstawiono w Tabeli 4. Widać tam, że każ- sanity check), osobistych inspekcji i nauki rze-
sposób rozwijania produktu pozwala na przej- dy element z listy został wzbogacony o dodat- miosła zdecydowanie polecamy pojedynczą li-
ście z tradycyjnego podejścia strukturalnego kowe informacje: stę. W przypadku ulepszania procesu korzyst-
(wertykalnego) na zorientowane na dostarcze- niejszy jest podział względem perspektyw.
nie funkcjonalności, usługi (horyzontalne). • identyfikator, pozwalający na jednoznacz-
ne odwoływanie się do elementu listy; Ulepszanie list sprawdzających
Budowanie list sprawdzających • źródło określające, na jakiej podstawie Podobnie jak perspektywy, listy sprawdzające
Kolejną strategią wykorzystywaną w procesie punkt został dodany. Podanie konkretne- ulepsza się na podstawie mechanizmu sprzę-
inspekcji są listy sprawdzające. Buduje się je we- go odniesienia (dokumentu) umożliwia żenia zwrotnego:
dług kryterium prawdopodobieństwa (często- dokładne sprawdzenie stawianych wyma-
ści) występowania problemu oraz jego wpływu gań. Informacja taka będzie przydatna na • inspektorzy podczas analizy (lub autorzy
na całość produktu. Obecność wielu nieużywa- etapie analizy i naprawy; podczas inspekcji osobistej) sprawdzają
nych zmiennych będzie zwiększała rozmiar wy- • sposób weryfikacji, określający możliwości poszczególne problemy znajdujące się na
maganej pamięci. Produkt nie będzie optymal- sprawdzenia, czy zasygnalizowany problem liście;
ny, ale (gdy mimo wszystko spełnione są ogra- (nadal) istnieje. W tym przypadku podane • jeżeli problem występuje w analizowanym
niczenia na rozmiar wymaganej pamięci) jest zostały kody błędów Lint'a. Informacja taka fragmencie, inspektor zgłasza odpowied-
nadal akceptowalny. Natomiast choćby jedno zostanie wykorzystana na etapie weryfika- ni komentarz z priorytetem odpowiadają-
źle obsłużone dzielenie przez zero spowodu- cji: jeżeli naprawa będzie przeprowadzona cym pozycji problemu na liście;
je błąd krytyczny, który uniemożliwi funkcjo- prawidłowo, podany kod błędu nie powi- • zgodnie z komentarzem, kod jest napra-
nowanie całego produktu. W tym przypadku nien być więcej sygnalizowany; wiany. Autor widzi, że jest to częsty błąd
ilość ma mniejsze znaczenie niż waga proble- • wskazówki – wyjaśnienia dotyczące punk- i postanawia zwrócić na niego szczególną
mu. Kryteria te należy więc ostrożnie ważyć. tu, dodatkowe referencje, wnioski ze wcze- uwagę;
Przykładowo, dla perspektywy opartej na na- śniejszych inspekcji (przydatne przy ulep- • ponieważ autorzy są świadomi szczególnie
rzędziu Lint, otrzymaliśmy zestaw uwag jak w szaniu list). częstego występowania problemu, starają
Tabeli 3. Możemy z niej wyczytać, że w pro- się więcej go nie popełniać;
dukcie istnieje generalny problem ze sprawdza- Proszę zwrócić tu uwagę, że zaprezentowana • kolejne inspekcje wykazują, że problem
niem wartości zwracanych przez funkcje (uwa- lista sprawdzająca zawiera elementy z różnych jest dużo rzadszy. Może być przesunięty
gi o kodzie 534). W takim kodzie brakuje od- dziedzin. Mamy w niej typowe błędy w sztu- na dalsze pozycje w liście sprawdzającej.
powiedniej obsługi błędów (zaimplementowa- ce (1.1-1.3), potencjalne problemy z przeno-
ne ścieżki wykonania nie uwzględniają przy- śnością kodu (1.4) oraz problemy z formatowa- Obniżanie priorytetu elementu listy spraw-
padków negatywnych). Problem jest więc czę- niem kodu (1.5). Wszystkie zostały wysnute ja- dzającej musi się odbywać zgodnie z zastrzeże-
sty i na pewno istotny. Podobnie ma się sytuacja
z uwagami o kodzie 613 i 644. Mimo że jest ich
znacznie mniej, konsekwencje braku sprawdza-
����������� ������
nia stanu zmiennej przed jej wykorzystaniem
�������������������
mogą być bardzo poważne. Z kolei uwagi o ko- �������������������������������������� ������������
�������
dzie 571 sygnalizują problemy z przenośnością ������� ������
kodu na różne platformy. Jeżeli jest to jednym z �������
��������
wymagań w stosunku do produktu – ich waga
może wzrosnąć ze średniej do wysokiej. Uwagi
o kodzie 525, 539 i 529 świadczą o tym, że kod �����������������
������
������
był wielokrotnie i niezbyt skrupulatnie przera-
biany. Choć jest ich dużo, w porównaniu do po- ������������������
���������
������������
���������
przednich są nieszkodliwe (chyba że produkt ��������
polega na dostarczeniu kodu źródłowego, a nie ����
gotowych bibliotek). ����������
�����������
Poszczególne elementy listy sprawdzającej
(ang. checkpoints) muszą być testowalne, ale nie
nazbyt szczegółowe. Wymaganie testowalno- �����
����������� �����������
ści (inaczej atomiczności) zapobiega sformuło- �������
waniom typu: czy kod spełnia wymagania stan-
dardu kodowania? Trudno w takim przypadku ����������
������
jednoznacznie stwierdzić, co właściwie należy �������
sprawdzić. Z drugiej strony należy pamiętać, że ������
listy powinny być uniwersalne – nie powinny Rysunek 2. Współdziałanie procesów w projekcie

www.sdjournal.org 33
Testowanie oprogramowania

niami w stosunku do problemów krytycznych niki są powtarzalne, mierzalne (numeryczne) Problemy z używaniem narzędzi do statycz-
sformułowanymi w poprzednim rozdziale. przez co łatwo je analizować pod wieloma ką- nej analizy kodu związane są najczęściej z błę-
Zmiany na liście sprawdzającej można użyć tami. Sam proces analizy automatycznej trwa dami popełnionym na etapie ich wdrożenia.
np. do weryfikacji skuteczności prowadzonych zazwyczaj bardzo krótko. Dodanie takich na- Może to być np. zła konfiguracja, użycie nie-
szkoleń. Popełnianie dużej ilości błędów uję- rzędzi do konfiguracji projektu (np. generowa- zgodne z przeznaczeniem, mylna interpreta-
tych w standardzie kodowania, sugeruje niedo- nie raportów Lint z każdą kompilacją) pozwoli cja wyników związana z nieznajomością narzę-
stateczną znajomość tego dokumentu. Jeżeli mi- na śledzenie trendów. Umożliwi to weryfikację dzia. Jedyną radą jest odpowiednie szkolenie.
mo szkolenia przeprowadzonego w tym zakre- poprawności naprawy problemów wskazanych Znaczna jest pokusa wykorzystania kilku
sie, ilość ta nie zmieni się, możemy domniemać, w czasie inspekcji. różnych narzędzi. Jeżeli analiza jest tak szyb-
że szkolenie było nieskuteczne. Szkolenie należy Niestety nie jest to rozwiązanie idealne. ka, spróbujmy wykonać ją z pomocą wszyst-
powtórzyć, zmieniając jego formułę – np. uwy- Przyjrzyjmy się kilku potencjalnym proble- kich dostępnych środków. Każde z narzędzi,
puklając, które z zapisów są szczególnie ważne. mom: trochę inaczej skonstruowane, zwróci uwagę
Problemy wysoko utrzymujące się na liście na inne problemy. Rozwiązanie ich uczyni nasz
sygnalizują też niedostatki w dzieleniu się wie- • narzędzie jest tak dobre, jak dobrzy są jego produkt idealnym. Niestety, często jest tak, że
dzą w zespole. Pomimo że błędy są zauważane, autorzy; wprowadzenie poprawek zgodnie z jednym na-
sposoby ich rozwiązywania mogą być niejasne • narzędzie musi być odpowiednio wdrożo- rzędziem, powoduje sygnalizowanie błędów
dla wszystkich członków zespołu. Usprawnie- ne; przez inne narzędzie. Skończyć się to może po-
nie mechanizmu dzielenia się wiedzą powinno • różne narzędzia realizujące podobne cele prawianiem kodu zgodnie z wymaganiami na-
sytuację tę poprawić. mogą dostarczać sprzeczne wyniki; rzędzi.
• narzędzie może być zbyt restrykcyjne; Podobnie ma się sytuacja z restrykcyjnością
Wykorzystanie narzędzi • narzędzia są kosztowne. narzędzi. Niektóre z nich mają tendencję do
Dzięki zastosowaniu perspektyw i list spraw- zgłaszania setek tysięcy uwag. Konieczna w ta-
dzających praca inspektora jest lepiej ukierun- W przypadku oprogramowania o ugruntowa- kim wypadku jest ich odpowiednia kategoryza-
kowana i bardziej uporządkowana. Mimo to, nej pozycji na rynku stosunkowo rzadko zda- cja. Rozwiązywanie powinno odbywać się w ko-
analiza kodu jest zadaniem wymagającym du- rzają się sytuacje, w których źródłem proble- lejności od najważniejszych (krytycznych) aż
żej wiedzy, samodyscypliny i koncentracji. Dla- mów jest samo narzędzie, a nie analizowany po te o charakterze informacyjnym. Oczywi-
tego jest tak mocno obciążona czynnikiem ludz- przez nie przedmiot. Inaczej bywa z narzędzia- ście stan projektu może taki porządek zmienić
kim. Jeżeli ten sam fragmentu kodu zosta- mi konstruowanymi wewnątrz organizacji, w – np. uzupełnienie komentarzy w obliczu zbli-
nie poddany analizie dwóm różnym inspekto- odpowiedzi na potrzeby projektu. Ich jakość żającego się terminu publikacji kodu do klien-
rom, możemy być pewni, że dostarczone przez jest zazwyczaj niska ze względu na pośpiech, z ta będzie ważniejsze niż usuwanie ostrzeżeń o
nich rezultaty będą różne. Różna będzie ilość jakim są tworzone. Często jest to prywatny kod niekompatybilności typów (wcale nie twierdzi-
komentarzy, ich jakość, różny będzie czas wy- pisany przez deweloperów w jednym, konkret- my, że jest to postępowanie poprawne).
konania takiego zadania. Analiza dokonywa- nym celu. Nie są głównym przedmiotem pro- Mnogość uwag prowokuje również ich za-
na przez człowieka nie jest procesem powta- jektu i nie podlegają tak ścisłej kontroli jakości, miatanie pod dywan. Może to mieć miejsce,
rzalnym. jak sam produkt. Bez dokumentacji, przetesto- zwłaszcza gdy producent narzędzia umożliwia
Takich skutków ubocznych natury ludzkiej wane na pojedynczym przypadku – mogą za- takie działania. Przyjrzyjmy się następującemu
jest oczywiście więcej. Samopoczucie, osobi- wierać błędy. Włączanie ich do mechanizmów fragmentowi kodu:
ste animozje w stosunku do autora przedmio- zapewniania jakości może wiązać się z ryzy-
tu analizy, nadchodzący weekend – wszyst- kiem. Dlatego zalecamy używanie sprawdzo- /*lint -esym(534, sprintf)*/
kie te pozamerytoryczne uwarunkowania mo- nych rozwiązań, wykorzystywanych wcześniej char buffer [20];
gą ujemnie wpływać na obiektywizm pracy in- w innych projektach (organizacjach), oferowa- int a=5, b=3;
spektora. Analiza będzie wtedy mało rzetelna, nych przez znane firmy i rozwijanych przez sprintf (buffer, "%d plus %d is %d", a, b,
niedokładna. wiele lat. Przykładem takiego oprogramowa- a+b);
Tych wad pozbawione są narzędzia do anali- nia może być wspomniany wcześniej Lint firmy
zy statycznej kodu. Uzyskiwane przez nie wy- Gimpel, FXCop (Microsoft) i wiele innych. Pierwsza linijka listingu powoduje wyłączenie
ostrzegania przed brakiem sprawdzania war-
Tabela 4. Lista sprawdzająca dla wyników analizy z Tabeli 3 tości zwracanej przez funkcję sprintf. Jaką
ID Do sprawdzenia Źródło Weryfika- Wskazówki więc będziemy mieli gwarancję, że w zmien-
cja nej buffer znajdzie się przewidziany przez
1.1 Wartości zwracane przez Standard kodo- Lint, kod
nas łańcuch znaków? Pół biedy, jeżeli podob-
funkcje muszą być spraw- wania, 5.1.3 534 na instrukcja znajdzie się w pliku konfigura-
dzane. cyjnym. Jest to wtedy działanie zaplanowa-
1.2 Argumenty muszą być spraw- Standardy kodo- Lint, kod ne i zamierzone, którego motywy są znane a
dzone przed wywołaniem. wania, 6.2.3 613 wprowadzenie poparte odpowiednimi ustale-
1.3 Zmienne muszą być zainicjo- Standard kodo- Lint, kod
niami (np. zaakceptowane przez klienta). Jed-
wane po deklaracji. wania, 6.2.1 644 nak sporna linijka umieszczona została bezpo-
średnio w kodzie źródłowym. Ciekawe, ile ta-
1.4 Rzutowania zmiennych mu- Standardy kodo- Lint, kod Więcej na temat rzutowa-
szą być wykonane każdora- wania, 7.2.1 571 nia zmiennych znajdziesz kich instrukcji znalazło się w całym produk-
zowo. w <...> cie? Ile potencjalnych błędów w taki sposób
1.5 Poziomy wcięć w kodzie mu- Standardy kodo- Lint, kody: Wcięcia muszą być wyko-
zostało ukrytych?
szą być zachowane. wania, 3.3 525, 539, nane za pomocą znaków Ostatnia kwestia odnosi się do kosztów
529 tabulatora a nie spacji. wprowadzania narzędzi do projektów. Wymie-
Konfiguracja edytora kodu niliśmy już nakłady związane ze szkoleniem,
można znaleźć w <...> wdrożeniem i zarządzaniem. W przypadku

34 10/2008
Była sobie inspekcja

oprogramowania komercyjnego należy liczyć Wartość R będzie częścią wspólną zbiorów mający na celu podkreślenie, że niekoniecznie
się również z kosztami licencji, które dla tej ka- M i C, ilością błędów znalezionych przez oby- chodzi o typowe posiedzenie, w którym człon-
tegorii produktów są zazwyczaj wysokie. W ce- dwóch inspektorów. Jest to metoda lepsza kowie zespołu inspekcyjnego uczestniczą oso-
lu ograniczenia wydatków licencyjnych, należy niż wstrzykiwanie, gdyż nie wymaga mody- biście. W przypadku projektów rozproszonych
przede wszystkim upewnić się, czy podobne fikowania przedmiotu analizy. Proszę jednak po różnych lokalizacjach może to być w ogóle
narzędzia nie są już wykorzystywane w naszej mieć na uwadze, że inspektorzy mogą uznać niemożliwe. Znacznie korzystniejsza jest w ta-
organizacji, sprawdzić prawne możliwości dzie- przeprowadzanie takich doświadczeń za pró- kich wypadkach np. wymiana opinii w ramach
lenia i przenoszenia licencji (używanie poprzez by sprawdzenia ich pracy. systemu kontroli zmian (wpisy w Bugzilli), ko-
dostęp zdalny, np. Citrix) i oszacować opłacal- W związku z powyższymi rozważaniami: respondencja elektroniczna, czat na Skype lub
ność zakupu względem możliwości wykorzy- po prostu rozmowa telefoniczna. Zwłaszcza
stania w innych projektach. Można również po- • jedynie cele osiągnięte całkowicie mogą zalecalibyśmy wszelkie formy pisane, które są
szukać oprogramowania opartego na licencjach bezpośrednio przekładać się na poprawę źródłem wprawdzie nieformalnej, ale zawsze
typu OpenSource. jakości; dokumentacji. Posiadanie takiego materiału
• miary powinny odnosić się tylko i wyłącz- umożliwia np. prześledzenie motywów, jakie
Miary projektowe i procesowe nie do dojrzałości produktu, nigdy do ja- doprowadziły do takich, a nie innych decyzji.
Z racji ilości produkowanych danych, inspek- kości pracy inspektorów; Wraz z upływem czasu takie informacje okażą
cja kodu wydaje się wdzięcznym narzędziem • miary dostarczone przez inspekcję powin- się bardzo przydatne.
do formułowania wniosków projektowych. Pa- ny być weryfikowane w kontekście popra- Kłopot z tradycyjnymi spotkaniami pole-
trząc na ilość i jakość zgłoszonych komentarzy, wy dynamicznego zachowania produktu ga na tym, że (wbrew pozorom) prowadzenie
możemy zastanawiać się nad stopniem dojrza- (testy regresyjne i systemowe). ich wymaga wiele umiejętności i doświadcze-
łości produktu. W najprostszym podejściu – nia. Proszę zwrócić uwagę, że jest to dość dro-
im mniej komentarzy, tym produkt jest dojrzal- Ostatni punkt listy odnosi się do użytego ga metoda komunikacji – zakładając koszt pra-
szy. Waga tych komentarzy może być jednak wcześniej określenia obserwowalnej poprawy ja- cy jednej osoby na poziomie 200 euro dziennie,
różna. Część z nich zostanie odrzucona, część kości. Inspekcja nie jest celem samym w sobie. dwugodzinne spotkanie 10-osobowego zespołu
zakwalifikowana jako propozycje zmian w Jej celem jest poprawa jakości produktu. W to wydatek rzędu 500 euro! Czy na pewno de-
przyszłych wersjach (CR i REQ), część odnosi dziedzinie tworzenia oprogramowania jakość cyzje podjęte podczas spotkania będą warte ta-
się do literówek w komentarzach. Niektóre jed- produktu odnosimy do zachowania produktu kich pieniędzy?
nak zostaną zarejestrowane jak raporty o błę- zgodnie z wymaganiami klienta. Inspekcja ko- Jeżeli mimo wszystko zdecydujemy się na
dach (PR) do uwzględnienia w fazie naprawy. du źródłowego jest więc jednym ze sposobów podobną formę konsultacji, radzimy pamiętać
Nadal – PR'y mogą odnosić się tak do nieuży- poprawy zachowania dynamicznego produk- o kilku zasadach, które pozwolą rozsądnie wy-
tej zmiennej zapomnianej w kodzie (mało ele- tu, jego wykonania. Ostateczną miarą jej suk- dać wspomniane pieniądze:
ganckie, ale też i nie bardzo szkodliwe), jak i źle cesu jest obserwowalna poprawa zachowania –
zastosowanego muteksu (groźba zakleszczenia, np. zwiększenie ilości zaliczanych testów re- • wyznaczcie cel spotkania. Cel powinien
ang. deadlock). Podobnie jest z miarami celów. gresyjnych, zwiększenie stabilności produktu. być konkretny, jednoznaczny (ang. specific),
Usunięcie połowy z tysiąca ostrzeżeń Linta nie- Miary inspekcji odnoszą się głównie do śledze- mierzalny (ang. measurable), realistyczny
wątpliwie jest sukcesem. Jednak przy takiej ilo- nia jej przebiegu. Ostateczna weryfikacja efek- (ang. achievable), odpowiednio ważny, aby
ści szacunek poprawy kodu może być obarczo- tywności procesu inspekcji dokona się w pro- angażować do jego rozwiązania zaproszo-
ny bardzo dużym błędem – śledzenie jakości cesie testowania. nych uczestników (ang. relevant) i w końcu
usuniętych uwag (ich wagi, typu) będzie zbyt Inaczej traktowane są miary procesowe. Ich określony w czasie (ang. timely). Jednym sło-
pracochłonne. W takiej sytuacji jedynie usunię- głównym zadaniem jest wspomaganie organi- wem – cel powinien być S.M.A.R.T.;
cie wszystkich uwag Lint'a może przyczynić się zacji procesu inspekcji. Poprzez porównywa- • ustalcie agendę. Agenda powinna być wy-
do obserwowalnej poprawy jakości. nie czasu zaplanowanego na wykonanie zadań słana do uczestników spotkania odpo-
Należy tu wspomnieć o metodach pozwala- inspekcji z czasem rzeczywiście na nie poświę- wiednio wcześniej. Agenda powinna za-
jących na szacowanie ilości błędów, które pozo- conym, uzyskamy możliwość lepszego harmo- wierać wskazówki, jak przygotować się do
stały w kodzie, błędów jeszcze nieodkrytych. nogramowania. Szacunki powstałe w ten spo- spotkania (co doczytać, na jaki temat wy-
Pierwsza z nich to wstrzykiwanie defektów [9]. sób pomogą lepiej ocenić czas i zasoby wyma- robić sobie zdanie);
Polega na przekazaniu do analizy spreparowa- gane w kolejnych iteracjach inspekcji. Sposo- • w spotkaniu powinny uczestniczyć tylko
nego przedmiotu, do którego wprowadziliśmy bem na wyznaczenie efektywności procesu in- osoby bezpośrednio zaangażowane w pro-
C defektów. Jeżeli inspektor znajdzie K nowych spekcji jest dokonanie analizy wartości wypra- blem. Nie ma sensu trwonić czasu innych
defektów i R defektów dodanych przez nas (tzn. cowanej (ang. earned value). Polega ona na po- – o końcowych ustaleniach wystarczy po-
razem znajdzie K+R defektów), możemy oszaco- równaniu skumulowanych planowanych i rze- informować ich np. drogą elektroniczną;
wać, że całkowita liczba defektów w przedmio- czywistych kosztów zadań inspekcji w stosun- • zawsze należy określić i pilnować czasu spo-
cie analizy jest równa: ku do stopnia ich realizacji. Konfrontując ilość tkania oraz poszczególnych punktów agen-
i koszt zadań wykonanych w dniu kontroli z dy. Spotkania przeciągające się w nieskoń-
LiczbaDefektówWD = K * C / R wielkościami planowanymi, obliczamy prze- czoność najczęściej do niczego nie prowadzą;
widywane opóźnienie i całkowity koszt proce- • każdy punkt agendy podsumowujcie
Inną metodą jest podwójne łowienie (metoda su. Na tej podstawie można wnioskować moż- przez wniosek lub akcję do wykonania
Lincolna – Petersena, ang. mark and recaptu- liwości wprowadzania korekt do harmonogra- przez konkretnego członka spotkania.
re), gdzie ten sam fragment kodu poddajemy mu, tak aby zminimalizować odchylenie od za- Brak podsumowania oznacza, że dyskusja
analizie przez dwóch inspektorów. Jeżeli je- mierzonego budżetu. była bezprzedmiotowa;
den z nich znajdzie C defektów, a drugi M de- • jeden z uczestników spotkania powinien
fektów, możemy zastosować wzór: Konsultacje sporządzać notatki (ang. meeting minutes)
W niniejszym opracowaniu użyliśmy określe- w celu późniejszego udostępnienia ich in-
LiczbaDefektówLP = M * C / R nia konsultacje zamiast spotkania. Jest to zabieg nym zainteresowanym.

www.sdjournal.org 35
Testowanie oprogramowania

Powyższe zasady powinny być stosowanie do analiza miar projektowych i procesowych, co do tytułu email'a (np. identyfikator ko-
wszystkich spotkań. Specyficzny charakter ulepszanie procesu inspekcji; mentarza z nazwą modułu) i sposobu zapi-
inspekcji sprzyja stosowaniu tej formy czę- • techniki inspekcji: przeprowadzenie anali- sywania go na dysku projektowym pod usta-
ściej niż w innych procesach (dla inspekcji for- zy, naprawa i weryfikacja przedmiotu ana- loną ścieżką i nazwą. Jeżeli zostanie to opisa-
malnej takie konsultacje są wręcz narzędziem lizy na podstawie zebranych komentarzy, ne w dokumentacji procesowej i konsekwent-
podstawowym). Stąd nieumiejętne prowadze- zarządzanie narzędziami (wdrożenie, me- nie przestrzegane – żaden audytor ISO 9001
nie spotkań może skutkować znaczącym spad- chanizmy interpretacji wyników), konsul- nie powinien mieć do takiego postępowania
kiem wydajności. tacje między członkami zespołu inspek- zastrzeżeń.
cyjnego; Inspekcja wymaga również interakcji z pro-
Współpraca między procesami • strategie inspekcji: tworzenie i ulepszanie cesami konfiguracji projektu. Mianem kon-
Zgodnie z definicją ISO 9001, podejściem perspektyw i list sprawdzających; figuracji projektu określamy tu całe otocze-
procesowym nazywamy identyfikację pro- nie projektu oraz mechanizmy wymagane,
cesów w organizacji oraz zarządzanie tymi Cele inspekcji muszą być zgodne z założe- aby projekt mógł być wykonywany. Będą to
procesami (i ich powiązaniami). Wynika z niami systemu jakości projektu (organi- np. sposoby przechowywania kodu (repozy-
tego, że nie wystarczy poznać, jakie proce- zacji). Jej mechanizmy muszą odwoływać torium CVS), kontroli zmian (np. Bugzilla),
sy funkcjonują w obrębie systemu. Koniecz- się do mechanizmów przyjętych w projek- obrotu dokumentami (Wiki) aż po zarządza-
ne jest również określenie powiązań, zależ- cie, nie mogą ich dublować czy nadpisy- nie licencjami (kompilatory, środowiska pro-
ności między tymi procesami. Dla naszej wać. Miary dostarczone przez inspekcję mu- gramistyczne) i środkami trwałymi (kompu-
inspekcji oba te warunki zostały spełnione. szą należeć do zestawu miar wykorzystywa- tery, sieć laboratoryjna). Inspekcja, jako jeden
Okazało się bowiem, że etapy inspekcji rów- nych w projekcie. Jednym słowem – proces z procesów zachodzących w projekcie, będzie
nież można określić jako procesy. Powiąza- inspekcji musi być zbieżny z innymi proce- częścią tego otoczenia.
nia między nimi pokazaliśmy na Rysunku 1. sami w projekcie. Powyższa lista obejmuje jedynie główne i
i szeroko omówiliśmy w podrozdziałach te- Podobnie jest z komunikacją w projekcie. bezpośrednie zależności. W rzeczywistym
go opracowania. Na potrzeby inspekcji nie powinno się two- projekcie mogą być one bardziej skomplikowa-
Jak analiza, naprawa, weryfikacja i ulep- rzyć żadnych specjalnych form (kanałów) ko- ne, ale również dające większe możliwości ste-
szanie są podprocesami inspekcji, tak pro- munikacji. Jeżeli jednak sposób komunikacji rowania.
ces inspekcji sam jest elementem większego wymagany przez inspekcję nie istnieje, nale-
systemu. Konsumuje wyniki jednych proce- ży go wdrożyć z zamysłem wykorzystania w Podsumowanie
sów i dostarcza produkty na potrzeby funk- innych procesach (tzn. nie w ramach samej Inspekcja kodu jest jednym z ważniejszych
cjonowania drugich. Weźmy dla przykładu inspekcji, ale w ramach procesu komunika- procesów jakościowych, które powinny być
czas i zasoby (Rysunek 2). Ich alokacja na cji w projekcie). prowadzone w ramach projektu. Pomaga
potrzeby inspekcji musi być przewidziana Przykładem może tu być komunika- uniknąć wielu błędów w sztuce, zapewnia
harmonogramem prac. Zadania inspekcji, cja między inspektorem i autorem poprzez weryfikację na wczesnym stadium. Zachę-
wedle wskazówek dotyczących ról inspek- pocztę elektroniczną. Taka korespondencja ca zespół projektowy do współpracy, dzie-
cyjnych, muszą być przyporządkowane od- zawiera opis zmian wraz z dyskusją nad ni- lenia się wiedzą, wprowadza dobre nawyki.
powiednim zasobom. Harmonogram musi mi, tokiem rozumowania, wnioskami. Jeże- Zapewnia produktowi stabilną podstawę a
więc uwzględnić: li wymienione email'e mają być później trak- członkom zespołu sposób podnoszenia umie-
towane jako forma dokumentacji, muszą ist- jętności.
• proces inspekcji: adaptacja procesu inspek- nieć mechanizmy ich jednoznacznej identy- Inspekcja nie może jednak zastąpić analizy
cji (ustalenie zasad inspekcji), zbieranie i fikacji i lokalizacji. Należy więc umówić się dynamicznej (testowania). Jej zakres ograni-
cza się do analizy statycznej. Nie zapewni usu-
nięcia błędów powstających podczas interakcji
Bibliografia funkcji, różnych modułów, na styku aspektów
funkcjonowania.
• [1] ISO 9001:2000, International Organization for Standardization, 2005; Wdrażanie inspekcji wymaga również nie-
• [2] Była sobie inspekcja – określenie, przygotowanie i definicja procesu inspekcji, Arkadiusz małego wysiłku. Jest procesem, który może po-
Merta, SDJ 09/2008;
chłonąć duże zasoby na bardzo długi czas, ła-
• [3] The executive in action, Peter F. Drucker, 1985;
• [4] Change Formula, Gleicher, Beckhard and Harris, 1987; two przy tym wymknąć się spod kontroli. Ko-
• [5] The Mythical Man-Month – Essays on Software Engineering, Peter F. Brooks, 1995; nieczne jest dokładne planowanie i ścisła kon-
• [6] Peer Reviews in Software – A Practical Guide, Karl E. Wiegers, 2001; trola postępów.
• [7] The Cathedral and the Bazaar, Eric Steven Raymond, 2000; Na pytanie, czy inspekcję stosować, odpo-
• [8] Best Practices for Peer Code Review, SmartBear Software;
wiedź jest jedna: tak! Jednak: odpowiednio
• [9] Przeglądy oprogramowania i standard IEEE1028, Bartosz Michalik;
do wymogów produktu, ograniczeń projektu i
zgodnie z obowiązującym budżetem.

Zapamiętaj
• Inspekcja to kluczowy proces zapewniania jakości produktu; ARKADIUSZ MERTA
• Wdrożenie inspekcji we wczesnych stadiach projektu zaoszczędzi wiele testowania; Autor od 10 lat zajmuje się zagadnieniami pro-
• Inspekcja ma na celu poprawę jakości produktu, nie jakości pracy inspektorów;
jektowania i realizacji oprogramowania. Aktual-
• Efektywność inspekcji weryfikuje poprawa zachowania produktu względem wymagań
klienta; nie jest pracownikiem Silicon & Software Systems
• Klient zakłada jakość, oczekuje funkcjonalności – proces inspekcji musi uwzględniać ograni- Polska zatrudnionym na stanowisku menadżera
czenia projektowe; projektów.
Kontakt z autorem: arkadiusz.merta@s3group.com

36 10/2008
Narzędzia programistyczne

Wstęp do IBM
WebSphere MQ v6.0
IBM WebSphere MQ jest rozwiązaniem pozwalającym na integrację
różnych systemów informatycznych poprzez dostarczenie mechanizmów
pozwalających na łatwą wymianę komunikatów pomiędzy nimi.

wysłania bądź odebrania wiadomości jest


Dowiesz się: Powinieneś wiedzieć: znacznie ułatwiona;
• Czym jest MQ i jaka jest jego rola w procesie • Czytelnik powinien mieć podstawową wiedzę • dzięki temu, że MQ jest naszym pośredni-
integracji systemów; na temat systemów kolejkowych; kiem nie ma żadnego problemu aby zinte-
• Jak uzyskać dostęp do MQ z poziomu języka • Posiadać podstawową umiejętność programo- grować w ten sposób trzy, cztery i więcej
Java. wania w języku Java. aplikacji;
• dzięki temu, że nie jest wymagana bezpo-
średnia komunikacja mamy pewność, że
• w przypadku konieczności integracji wię- podczas problemów z dostępem do sieci
cej niż dwóch aplikacji zadanie może być po jednej ze stron, nie stracimy żadnego
Poziom trudności bardzo trudne i podatne na błędy; komunikatu.
• w przypadku problemów z dostępem do
sieci komunikat może zostać częściowo Czym zatem jest IBM WebSphere MQ? Pa-
lub w całości utracony. trząc od strony biznesowej można powie-

W
raz z rozwojem systemów informa- dzieć, że MQ jest to rozwiązanie dające nam
tycznych, a co za tym idzie, szere- Rozważmy teraz komunikację pośrednią (Ry- możliwość integracji różnych systemów in-
gu usług coraz częściej pojawia się sunek 2) w taki sposób, aby odnieść się do wad formatycznych niezależnie od platformy, ję-
konieczność wymiany informacji pomiędzy przedstawionych w metodzie komunikacji zyka oraz technologii w jakich zostały napi-
różnymi systemami. Projektując zupełnie no- bezpośredniej. sane. Dzięki temu, że działa na zasadzie po-
we rozwiązanie teoretycznie możemy zintegro- Analizując rysunek przedstawiający komuni- średnika w komunikacji pomiędzy aplikacja-
wać dwa duże systemy poprzez implementa- kację pośrednią wnioskujemy, że: mi, można znacznie mniejszym nakładem sił
cje komunikacji bezpośredniej pomiędzy nimi, zintegrować dwie lub więcej dotąd niezależ-
jednak można się spodziewać, że integracja bę- • nie mamy konieczności implementacji me- nych aplikacji bez konieczności sporych mo-
dzie wymagać połączenia więcej niż dwóch sys- chanizmów pozwalających na komunika- dyfikacji w kodzie.
temów, z których każdy pracuje na innej plat- cję bezpośrednią, ponieważ nasza wiado-
formie i został zaimplementowany w różnych mość musi zostać dostarczona do MQ, za- Podstawowe pojęcia
językach. tem każda aplikacja uczestnicząca w pro- Zanim przejdę do przykładów, przedstawię
Oczywiście ta druga możliwość jest znacznie cesie wysyłania informacji musi mieć me- zbiór niezbędnych pojęć, które będą towarzy-
bardziej prawdopodobna niż pierwsza, ponie- chanizm wysyłania komunikatu do MQ i szyć nam w dalszej części artykułu.
waż w większości przypadków nowe usługi czy nic więcej;
rozwiązania biznesowe to rozwój już istnieją- • ponieważ każdy komunikat przechodzi • Manager Kolejek (ang. Queue Manager) –
cych systemów, a nie tworzenie czegoś nowego. przez MQ nie ma konieczności aby aplika- odpowiada za dostarczenie możliwości ko-
Przyjrzyjmy się komunikacji bezpośredniej cja wysyłająca i aplikacja odbierająca dzia- rzystania z usług dostarczonych przez We-
(Rysunek 1) łały w danej chwili; bSphere MQ. Z poziomu Queue Managera
Analizując powyższy rysunek można wy- • poprzez dostarczone biblioteki przez We- mamy możliwość definiowania kolejek,
wnioskować kilka istotnych informacji: bSphere MQ implementacja mechanizmu kanałów itp. Każdą pracę związaną z ob-

• konieczność implementacji mechanizmów


pozwalających tworzyć bezpośrednie połą-
czenie pomiędzy dwoma aplikacjami; ��������� ���� ���������
• konieczność działania aplikacji A i B w
chwili wymiany informacji pomiędzy nimi;
• spory narzut kodu konieczny do obsługi
takiej komunikacji; Rysunek 1. Schemat komunikacji bezpośredniej

38 10/2008
IBM WebSphere MQ

sługą komunikatów musimy rozpocząć od Praca z WebSphere MQ Explorer rzenia dwóch przykładów, które zaprezentują
utworzenia Queue Managera; Zakładając, że instalacja WebSphere MQ zakoń- nam wszystkie pojęcia z drugiego akapitu oraz
• Kolejka (ang. Queue) – jest to obiekt w któ- czyła się powodzeniem, możemy przejść do utwo- przygotują odpowiedni podkład pod kolejny aka-
rym składowane są przesyłane komunikaty
oraz obiekt z którego można dany komuni-
kat pobrać. WebSphere MQ dostarcza nam
wiele typów kolejek, natomiast w tym ar- ��������� ���� ����������������
tykule skorzystamy z dwóch typów:

• kolejka lokalna (ang. local queue) – ko-


lejka która jest zarządzana przez ma-
nagera kolejek do którego aplikacja jest ����
podłączona. Zatem, jeżeli za pomo-
cą aplikacji nawiązujemy połączenie z
managerem kolejek o nazwie QM1 to
lokalna kolejka może być zarządzana
���������
tylko przez tego managera;
• kolejka zdalna (ang. remote queue) –
kolejka, która może być zarządzana
przez innego managera kolejek niż ten Rysunek 2. Schemat komunikacji pośredniej w oparciu o IBM WebSphere MQ
do którego jesteśmy podłączeni. Jeże-
li za pomocą aplikacji nawiązujemy Listing 1. Aplikacja kliencka wysyłająca komunikat do zdalnej kolejki
połączenie z managerem kolejek o na-
zwie QM1 to zdalna kolejka daje nam package mq;
możliwość przeprowadzenia na niej import com.ibm.mq.MQC;
operacji za pomocą QM1 mimo tego, import com.ibm.mq.MQEnvironment;
że za zarządzanie tą kolejką odpowie- import com.ibm.mq.MQException;
dzialny jest inny manager kolejek. import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
Przede wszystkim jest jedna podstawowa róż- import com.ibm.mq.MQQueue;
nica pomiędzy kolejką lokalną i zdalną. Za- import com.ibm.mq.MQQueueManager;
równo do kolejki lokalnej jak i zdalnej może- public class MQSendRemote {
my wstawić wiadomość, natomiast odczytać private String channel = "CLIENT.QM2";
możemy jedynie z kolejki lokalnej. private String qManager = "QM2";
private MQQueueManager qMgr;
• Kanał (ang. channel) – daje nam możli- public void init() {
wość komunikacji pomiędzy różnymi ma- MQEnvironment.hostname = "localhost";
nagerami kolejek. WebSphere MQ dostar- MQEnvironment.channel = channel;
cza nam dwa typy kanałów: MQEnvironment.port=1415;
• kanał komunikatów (ang. message //CCSID, http://www03.ibm.com/systems/i/software/globalization/default_list.html
channel) – odpowiada za transfer wia- MQEnvironment.CCSID=1250;
domości pomiędzy różnymi manage- MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES);
rami kolejek; }
• kanał MQI – odpowiada za wywoła- public void start() {
nia managera kolejek z poziomu apli- try {
kacji podłączonej jako klient. qMgr = new MQQueueManager(qManager);
• Słuchacz (ang. listener) – odpowiada za ak- int openOptions =MQC.MQOO_OUTPUT;
ceptacje żądań przesyłanych komunikacją MQQueue queue = qMgr.accessQueue("Q1", openOptions);
sieciową. Żądanie może przyjść albo z ma- MQMessage message = new MQMessage();
nagera kolejek albo aplikacji klienckiej; message.writeUTF("test 1");
• Komunikat (ang. message) – wiadomość message.priority=3; //ustawiamy piorytet wiadomości
przekazywana do kolejki. WebSphere MQ MQPutMessageOptions messageoptions = new MQPutMessageOptions();
definiuje nam cztery typy wiadomości queue.put(message, messageoptions);
(Datagram, Request, Reply, Report). W dal- queue.close();
szym przykładzie będziemy korzystać z Mgr.disconnect();
komunikatu typu Datagram który jest } catch (MQException ex) {
podstawowym komunikatem nie wyma- System.out.println("An MQSeries error occurred : Completion code "+
gającym żadnej odpowiedzi ani potwier- ex.completionCode + " Reason code " + ex.reasonCode);
dzenia odebrania. }catch (java.io.IOException ex) {
System.out.println("An error occurred whilst writing to themessage buffer: "+ ex);
W oparciu o te podstawowe pojęcia oraz infor- }
macje zawarte w pierwszym akapicie przejdź- }
my do zbudowania przykładu w którym wy- }
korzystamy powyższe pojęcia w praktyce.

www.sdjournal.org 39
Narzędzia programistyczne

pit w którym wykonamy pewne operacje na kolej- naszej zdalnej kolejki i klikamy Next. W nowym der Advanced z QM1 i prawym przyciskiem
kach z poziomu aplikacji napisanej w języku Java. oknie musimy zdefiniować parametry określa- myszy kliknijmy na Channels. Następnie nale-
jące kolejkę do której nasza kolejka będzie prze- ży wybrać New->Receiver Channel. W nowym
Przykład 1. Wysłanie i odebranie kazywać komunikaty. oknie wpiszmy nazwę QM2.QM1 i wybierz-
komunikatu z lokalnej kolejki W polu Remote queue wpisujemy Q1 nato- my Finish.
Krok 1 miast w polu Remote queue manager należy wpi- Analogicznie dla QM2 należy utworzyć ka-
Otwieramy WebSphere MQ Explorer i w le- sać QM1. Należy upewnić się, że pole Transmis- nał przesyłu (ang. sender channel). Postępując
wym oknie Navigator klikamy prawym przyci- sion queue jest puste i wybrać Finish. analogicznie jak dla QM1 należy wybrać New-
skiem myszy na folderze Queue Managers i wy- Następnie, analogicznie jak w poprzednim >Sender Channel, wpisać nazwę QM2.QM1 i
bieramy opcję New->Queue Manager. przykładzie, powinniśmy stworzyć lokalną ko- kliknąć na Next.
W nowym oknie uzupełnić pole o nazwie lejkę. W nowym oknie w polu Connection name na-
Queue manager name wpisując QM1, zazna- W tym celu należy rozwinąć QM2 i na fol- leży wpisać nazwę komputera bądź IP kompu-
czyć opcję Make this the default queue manager derze Queues wybrać New->Local Queue. W no- tera gdzie znajduje się QM1. W naszym przy-
i wybrać Next. wym oknie wpisujemy nazwę QM1 i klikamy na padku będzie to localhost.
Następnie nie dokonujemy żadnych zmian, kli- Next. W kolejnym polu zaznaczamy pole Usage W polu Transmission queue należy wpisać na-
kamy dalej na Next. W kolejnym oknie zaznacza- na Transmission i klikamy Finish (Rysunek 4). zwę kolejki QM_Q1 i wybrać Finish.
my Start queue manager oraz Auto start queue ma- Krok 3 Krok 4
nager i klikamy na Next. W nowym oknie zazna- W kolejnym kroku musimy zapewnić moż- Po utworzeniu kanału przesyłu klikamy na
czamy Create listener configured for TCP/IP oraz liwość przekazywania komunikatów przez nim prawym przyciskiem myszy i uruchamia-
wpisujemy port. Domyślnie wpisany jest 1414 i zdalną kolejkę w QM2 do lokalnej kolejki my go wybierając Start.
ponieważ jest to nasz pierwszy manager kolejek QM1. W tym celu należy utworzyć dwa ka- Krok 5
to możemy zostawić 1414 i kliknąć na Finish. nały odpowiedzialne za wysyłanie i odbiera- W tym kroku dokonamy weryfikacji pro-
Po tych czynnościach powinniśmy mieć nie komunikatów. W QM1 utworzymy kanał cesu przekazywania komunikatów pomię-
utworzoną kolejkę o nazwie QM1. odbioru (ang. receiver channel). Rozwińmy fol- dzy dwoma kolejkami. Należy wstawić testo-
Krok 2
Drugim krokiem będzie utworzenie lokalnej
kolejki do przechowywania naszych komunika-
tów. W tym celu należy rozwinąć QM1 i na fol-
derze Queues wybrać New->Local Queue.
W nowym oknie wpisujemy nazwę kolejki
Q1 i wybieramy Finish (Rysunek 3)
Krok 3
W celu wysłania komunikatu do kolejki Q1
należy kliknąć prawym przyciskiem myszy na
Q1 i wybrać opcję Put Text Message, natomiast
w celu weryfikacji poprawności wysłanej infor-
macji należy wybrać Browse Messages.

Przykład 2. Wysłanie
komunikatu do kolejki zdalnej
Krok 1
Analogicznie do poprzedniego przykładu na-
leży utworzyć drugiego managera kolejek o na-
zwie QM2 oraz porcie np. 1415. Rysunek 3. Widok po przeprowadzeniu Kroku 1 i Kroku 2
Krok 2
Analogicznie do poprzedniego przykładu
wybierzmy opcję tworzenia kolejki z tą różnicą,
że zamiast wybrać Local Queue wybieramy Re-
mote Queue Definition. Nadajemy nazwę Q1 dla

W Sieci
• http://w w w-306.ibm.com/sof t ware/
integration/wmq/

Bibliografia
• WebSphere MQ Application Programing
Guide
• WebSphere MQ Application Programing
Reference
• WebSphere MQ Using Java
Rysunek 4. Schemat po przeprowadzeniu Kroku 1 i Kroku 2

40 10/2008
IBM WebSphere MQ

wy komunikat do kolejki Q1 w QM2. Wiado- Korzystając z Eclipse dostarczonego wraz z IBM • MQEnviroment – klasa, która zawiera sta-
mość ta powinna zostać przesłana do kolejki WebSphere stwórzmy nowy projekt (dzięki temu, tyczne pola wykorzystywane do utworze-
Q1 w QM1. że Eclipse jest zintegrowany z MQ to niemal wszyst- nia obiektu MQQueueManager. Ustawienie
kie niezbędne biblioteki zostaną dodane podczas tych zmiennych nie jest konieczne w trybie
Dostęp do WebSphere MQ tworzenia projektu). Ponieważ w naszym przykła- binding mode, który ma dostęp do systemo-
z poziomu języka Java dzie oprzemy się o MQ base Java musimy dodać wych zmiennych środowiskowych. Pisząc
W oparciu o poprzedni paragraf, gdzie przygoto- jeszcze jedną bibliotekę com.ibm.mq.jar która znaj- program w MQ base Java w trybie klienc-
waliśmy sobie QM1 i QM2 wraz ze zdefiniowany- duje się w IBM\WebSphereMQ\Java\lib. kim musimy ustawić część zmiennych za-
mi kolejkami i kanałami, omówię teraz metodę do- Przykładowy kod programu, który jest odpo- nim utworzymy obiekt MQQueueManager;
stępu do MQ z poziomu języka Java jako klient. wiedzialny za przesłanie komunikatu do kolejki • MQMessage – reprezentuje zarówno dane jak
Zanim przejdziemy do programowania mu- obsługiwanej przez QM2 przedstawia Listing 1. i deskryptor wiadomości przesyłanej do MQ.
simy ustawić sobie jeszcze jeden kanał tym ra- Zanim jednak zapoznamy się z kodem źródło- Posiada metody pozwalające odczytywać wia-
zem będzie to kanał typu Server-connection chan- wym, warto zapoznać się za co dana klasa odpo- domość, dane z deskryptora wiadomości jak i
nel. Analogicznie do poprzednich przykładów wiada, dzięki temu zrozumienie poniższych ko- grupę metod pozwalających na zapis danych;
wybieramy New->Server-connection channel i wpi- dów źródłowych powinno być łatwiejsze. • MQPutMessageOptions – klasa pozwalająca
sujemy nazwę CLIENT.QM2 i klikamy na Next. na ustawienie opcji wpływających na wyko-
W zakładce MCA należy podać login użytkow- • MQC – interfejs, który definiuje wszystkie nywanie metody MQQueue.put();
nika na którym pracujemy w Windows i kliknąć stałe, za pomocą których możemy definio- • MQGetMessageOptions – klasa pozwalająca
na Finish. wać właściwości pozostałych obiektów; na ustawienie opcji wpływających na wyko-
nywanie metody MQQueue.get();
Listing 2. Aplikacja kliencka odbierająca komunikat z lokalnej kolejki • MQQueue – klasa odpowiedzialna za do-
starczenie metod pozwalających na zarzą-
package mq; dzanie kolejką. W naszych przykładach
import com.ibm.mq.MQC; korzystamy z put(), get() oraz close();
import com.ibm.mq.MQEnvironment; • MQQueueManager – klasa odpowiedzialna
import com.ibm.mq.MQException; za dostarczenie połączenia do managera
import com.ibm.mq.MQGetMessageOptions; kolejek w MQ.
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQQueue; Poniżej zamieszczam także kod (Listing 2)
import com.ibm.mq.MQQueueManager; który odbiera wiadomość z kolejki umieszczo-
public class MQGet { nej w QM1 która odbiera wiadomość wysłaną
private String channel = "CLIENT.QM1"; przez QM2. Należy pamiętać o konieczności
private String qManager = "QM1"; utworzenia kanału dla QM1 podobnie jak w
private MQQueueManager qMgr; powyższym przykładzie.
public void init() {
MQEnvironment.hostname = "localhost"; Podsumowanie
MQEnvironment.channel = channel; Powyższe przykłady a zarazem cały artykuł, któ-
MQEnvironment.port=1414; ry miał pokazać jak postawić pierwsze kroki w
tym środowisku, to tylko wstęp do IBM WebSphe-
//CCSID, http://www-03.ibm.com/systems/i/software/globalization/default_list.html re MQ, który daje nam ogromne możliwości ale
MQEnvironment.CCSID=1250; zarazem wymaga poznania wielu aspektów zwią-
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES); zanych z wykorzystywaniem tego rozwiązania do
} różnych zadań. Sam przykład programu w Java
public void start() { to jedna z wielu możliwości jakie daje nam MQ
try { i język Java. Jedną z ciekawszych możliwości jest
qMgr = new MQQueueManager(qManager); tryb binding mode, który pozwala budować apli-
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; kacje w języku Java komunikujące się z MQ po-
MQQueue queue = qMgr.accessQueue("Q1", openOptions); przez JNI, a nie jak ma to miejsce w moim przy-
MQMessage retrievedMessage = new MQMessage(); kładzie, poprzez połączenie sieciowe.
MQGetMessageOptions gmo = new MQGetMessageOptions(); Zwolennicy JMS mają do dyspozycji imple-
queue.get(retrievedMessage, gmo); mentacje interfejsów JMS dzięki dostarczone-
String msgText = retrievedMessage.readUTF(); mu rozwiązaniu WebSphere MQ JMS.
System.out.println("The message is: " + msgText); Kończąc ten artykuł mogę jedynie zachęcić
queue.close(); wszystkich do zapoznania się z MQ i popróbo-
qMgr.disconnect(); wania implementacji w jednym z dostępnych
} catch (MQException ex) { języków. Wszelkie niezbędne informacje moż-
System.out.println("An MQSeries error occurred : Completion code "+ na znaleźć na stronie IBM gdzie dostępne są
ex.completionCode + " Reason code " + ex.reasonCode); liczne manuale i ebooki.
}catch (java.io.IOException ex) {
System.out.println("An error occurred whilst writing to themessage buffer: "+ ex); PAWEŁ PIETRASZ
} Autor jest studentem III roku informatyki na WFMiIS
} Politechniki Krakowskiej oraz pracuje na stanowi-
} sku programmer w firmie DRQ S.A.
Kontakt z autorem: pawel.pietrasz@gmail.com

www.sdjournal.org 41
Aplikacje biznesowe

Wyzwalacze w
aplikacjach biznesowych
SQL Server 2005/2008
W artykule zostaną omówione kwestie związane z wykorzystaniem wyzwalaczy
w aplikacjach biznesowych – triki pozwalające na nieuruchamianie wyzwalacza
dla określonych wierszy oraz niezwykle istotną z punktu widzenia aplikacji
biznesowych kwestię wykorzystywania wyzwalaczy na perspektywach.
Ale trzeba pamiętać, że na tabelach tych
Dowiesz się: Powinieneś wiedzieć: nie są założone indeksy, dlatego każde zapy-
• Jak używać aplikacji biznesowych; • Podstawy SQL; tanie SELECT uruchomione na takiej tabeli
• Jak zapewnić bezpieczeństwo w aplikacjach • Podstawowa znajomość SQL Server 2005/ oznacza skanowanie całej tabeli. Istnieją oczy-
biznesowych używając wyzwalaczy; 2008. wiście pewne wyjątki od tej zasady – np. jeśli
• Jakie negatywne skutki w aplikacjach bizneso- użyjemy predykatu TOP wraz z klauzulą ORDER
wych może powodować używanie dużej liczby. BY, to serwer nie będzie musiał skanować ca-
łej tabeli.
Tabele INSERTED i DELETED zostały w
odmienny sposób zdefiniowane w SQL Se-
działania triggera, ale także skutki działania rver 2000 oraz w kolejnych wersjach SQL
Poziom trudności innych instrukcji uruchomionych w danej Server 2005 i 2008. W SQL Server 2005
transakcji (czyli od momentu jawnego użycia i SQL Server 2008 tabele te są widokami
instrukcji BEGIN TRAN lub od początku wyko- opartymi na sekcji dziennika zdarzeń, któ-
nywanego kodu w przypadku braku instruk- ry zawiera zapis rekordów modyfikowanych
cji BEGIN TRAN). przez instrukcję powodującą uruchomienie

W
yzwalacze (triggery) to obiekty ba- SQL Server 2005 i SQL Server 2008 po- wyzwalacza.
zy danych, które są uruchamia- zwalają na tworzenie triggerów dla instruk- Tak więc każde zapytanie skierowane do
ne automatycznie, jako następ- cji INSERT, UPDATE, DELETE (czyli dla instruk- tabel INSERTED lub DELETED oznacza ko-
stwo wystąpienia pewnych zdarzeń na serwe- cji DML) oraz dla instrukcji CREATE, ALTER, nieczność skanowania dziennika transakcji,
rze SQL Server. SQL Server 2005 i SQL Server DROP (czyli instrukcji DDL). Natomiast nie który zapisywany jest w sposób sekwencyj-
2008 obsługują triggery wyzwalane przez in- jest możliwe utworzenie wyzwalacza dla in- ny. To może okazać się wąskim gardłem dla
strukcje Data Manipulation Language (DML) strukcji SELECT, a także wyzwalacza urucha- systemu biznesowego przetwarzającego du-
oraz instrukcje Data Dafinition Language mianego przed instrukcją (czyli wyzwalacza żą liczbę transakcji. W SQL Serwer 2005 i
(DDL). Ogólna postać triggera została przed- typu BEFORE). Najbardziej zbliżone działanie SQL Server 2008 rozwiązano ten problem
stawiona w ramce do triggera typy BEFORE można uzyskać stosu- poprzez zastosowanie bazy tempdb. Otóż w
Triggery, podobnie jak procedury i funk- jąc trigger typu INSTEAD OF. SQL Server 2005 i SQL Server 2008 tabele
cje składowane podlegają następującym fazom INSERTED i DELETED wskazują na ozna-
przetwarzania – analiza składniowa, tłumacze- Tabele INSERTED i DELETED czane numerami wersji wiersze w bazie da-
nie nazw i optymalizacja. Jednak w przeciwień- Wewnątrz triggera mamy dostęp do sta- nych tempdb. Samo oznaczanie numerami
stwie do procedur i funkcji składowanych trig- rej i nowej wersji modyfikowanych wier- wersji wierszy w tabelach bazy danych jest
gery nie mają swojego interfejsu, czyli nie posia- szy – dzieje się tak dzięki tabelom specjal- nową techniką zastosowaną po raz pierwszy
dają parametrów wejściowych i wyjściowych i nym INSERTED i DELETED. Tabela IN- w SQL Server 2005, która wykorzystywana
nie można wywoływać ich w sposób jawny. Są SERTED zawiera nowy obraz modyfikowa- jest przy obsługiwaniu nowych poziomów
one uruchamiane w sposób automatyczny, ja- nych wierszy, a tabela DELETED stary ob- izolacji obrazów migawkowych, wyzwalaczy,
ko reakcja na zdarzenie, które zaszło na serwe- raz. Oczywiście tabela INSERTED będzie operacji na indeksach.
rze baz danych. zawierać dane tylko i wyłącznie w przypad- Jak już wspomniałem technologia ta po-
Triggery są również częścią transakcji, która ku triggerów uruchamianych przez instruk- zwala na przechowywanie w bazie tempdb
spowodowała ich uruchomienie. Oznacza to, cje INSERT i UPDATE. Natomiast dla wyzwala- wcześniejszych wersji danych. Na potrze-
że transakcja nie zostanie zakończona, dopóki czy uruchamianych przez instrukcję DELETE by wyzwalaczy zapisywane są dane modyfi-
nie zakończy się działanie wyzwalacza. będzie pusta. kowane przez instrukcję wyzwalającą przed
Natomiast, jeśli wewnątrz wyzwalacza Tabele INSERTED i DELETED mają taką sa- jej uruchomieniem i po jej uruchomieniu.
umieszczona zostanie instrukcja ROLLBACK mą strukturę jak tabele, dla których zdefinio- Z tego też względu tabele INSERTED i DE-
TRAN, to wycofane zostaną nie tylko skutki wano wyzwalacz. LETED używają bazy tempdb, a nie dzienni-

42 10/2008
SQL Server 2005/2008

ka transakcji. Dzięki temu wyzwalacze wy- cyjnie (jeden za drugim). SQL Server 2005 instrukcję SQL. Gdy żaden rekord nie został
konywane są efektywniej (na bazie tempdb i SQL Server 2008 umożliwiają za pomocą zmieniony, to następuje koniec działania wy-
możliwe jest wykonywanie wielu działań, procedury składowanej sp_settriggerorder zwalacza. W przeciwnym wypadku spraw-
natomiast na dzienniku transakcji możli- wskazanie pierwszego i ostatniego wyzwala- dzane jest, w której z tabel INSERTED lub
we jest wykonywanie działań w sposób se- cza – kolejność pozostałych wyzwalaczy nie DELETED są wiersze i wypisywany jest odpo-
kwencyjny). jest określona. wiedni komunikat.
Jednak wykonywanie zbyt wielu wyzwa- Głównym zadaniem triggerów typu AFTER W SQL Server 2000 zamiast instrukcji IF
laczy w aplikacjach biznesowych może być jest reagowanie na zmiany wykonywane na ((SELECT COUNT(*) FROM INSERTED)>0) le-
przyczyną słabej wydajności takich aplika- serwerze baz danych. Można ich także użyć piej jest ze względów optymalizacyjnych
cji. Tabele INSERTED i DELETED nie są in- w odpowiedzi na wykonanie instrukcji wy- użyć fragmentu IF EXISTS(SELECT * FROM
deksowane – z tego też względu przy dużej zwalającej np. do zapewnienia reguł integral- INSERTED), gdyż sprawdzanie ilości wierszy
ilości danych operacje SELECT wykonywa- ności, których nie udało się uzyskać za pomo- poprzez COUNT(*) jest zdecydowanie bar-
ne na tych tabelach mogą trwać długo. Jed- cą ograniczeń. dziej kosztowne niż wykorzystanie EXISTS.
nak jeśli w aplikacji biznesowej potrzebu- Optymalizatory SQL Server 2005 i SQL Se-
jemy przeskanować całą tabelę INSERTED Rozpoznawanie rodzaju triggera rver 2008 zdecydowanie lepiej radzą sobie z
lub DELETED i potrzebne dane można uzy- Czasem istnieje konieczność utworzenia jed- instrukcjami w stylu IF ((SELECT COUNT(*)
skać w pojedynczym zapytaniu, to niewiele nego triggera dla różnych instrukcji, ale w FROM INSERTED)>0).
da się zrobić w celu poprawienia wydajno- dalszym ciągu istnieje konieczność posiada- Aby sprawdzić działanie kodu z Listingu
ści. Natomiast jeśli musimy korzystać z ta- nia wiedzy, jaka instrukcja została urucho- 1 należy wykonać instrukcje INSERT, UPDATE,
beli INSERTED lub DELETED w wielu ite- miona. DELETE. Dla instrukcji INSERT
racjach, to lepszym rozwiązaniem jest sko- Np. do celów rejestracyjnych można użyć
piowanie danych do innej tabeli (lub tabeli jednego wyzwalacza dla instrukcji INSERT, INSERT INTO dbo.Osoby VALUES (Jan,
tymczasowej) za pomocą nielogowanej ope- UPDATE, DELETE, a przy okazji można zapi- 'Kowalski', 5000, 1);
racji SELECT INTO i założenie na nowej tabe- sać jaki to był rodzaj instrukcji. W celu iden-
li indeksu. tyfikacji instrukcji można sprawdzić zawar- otrzymamy następujący wynik:
tość tabel INSERTED i DELETED. Jeśli użyt-
SELECT * INTO Tymczasowa FROM Inserted kownik wykona instrukcję UPDATE, to da- Instrukcja INSERT
CREATE UNIQUE CLUSTERED INDEX idx_nazwa_ ne będą znajdować się zarówno w tabeli IN- (1 row(s) affected)
indeksu SERTED i DELETED. W przypadku instruk-
ON Tymczasowa(nazwa_kolumny); cji INSERT, dane będą znajdować się tylko w W przypadku instrukcji UPDATE
tabeli INSERTED, a w przypadku instrukcji
Zrozumienie działania tabel INSERTED i DELETE tylko w tabeli DELETED. Na Listin- UPDATE dbo.Osoby SET pensja=5500
DELETED w SQL Server 2005 i SQL Server gu 1 zaprezentowaliśmy kod źródłowy, któ- WHERE id=1
2008 jest kluczem do tworzenia efektywnych ry pozwala na rejestrowanie wykonywanych
aplikacji biznesowych (tak naprawdę efektyw- instrukcji. w wyniku otrzymamy:
nie działających wyzwalaczy w tych aplika- Zmienna @@rowcount przechowuje infor-
cjach). Natomiast złe używanie tabel INSER- macje na temat liczby dodanych, usuniętych Instrukcja UPDATE
TED i DELETED może prowadzić do dużych lub zmodyfikowanych wierszy przez ostatnią (1 row(s) affected)
problemów wydajnościowych, co w aplika-
cjach biznesowych jest niedopuszczalne. Listing 1. Identyfikacja rodzaju wyzwalacza

Triggery typu AFTER CREATE TRIGGER trg_Osoby


Triggery typu AFTER uruchamiane są po zakoń- ON dbo.Osoby
czeniu instrukcji powodującej ich wywołanie. FOR INSERT, UPDATE, DELETE –- wyzwalacz na instrukcje INSERT, UPDATE, DELETE
Najczęstszą odmianą wyzwalaczy typu AS
AFTER są wyzwalacze DML AFTER, czyli trigge-
ry tworzone dla konkretnych tabel i konkret- DECLARE @row_count int;
nych instrukcji typu UPDATE, INSERT, DELETE. -- pobieramy ilość wierszy, które zostały dodane, zmienione, usunięte
Tego typu wyzwalaczy można używać tylko i SET @row_count = @@rowcount;
wyłącznie do tabel trwałych (nie można ich -- gdy nie zostanie zmieniony żaden wiersz ...
używać w stosunku do widoków i tabel tym- IF (@row_count = 0)
czasowych). BEGIN
Jeśli instrukcja DML wywołująca wyzwalacz PRINT 'Nie zmieniono danych' -- ... wypisanie komunikatu ...
spowoduje wystąpienie błędu, to wyzwalacz nie RETURN; -- ... i koniec triggera
zostanie uruchomiony. END;
Wyzwalacze typu AFTER są wywoływane na
poziomie instrukcji, a nie na poziomie wiersza, IF ((SELECT COUNT(*) FROM INSERTED)>0) –- jeśli są wiersze w INSERTED ...
tak więc ilość wywołań triggera nie zależy od IF ((SELECT COUNT(*) FROM DELETED)>0) -- ... i w DELETED ...
ilości modyfikowanych wierszy. PRINT 'Instrukcja UPDATE' -- ... to wykonano instrukcję UPDATE
Dla każdego obiektu i dla każdego typu in- ELSE -- ... i nie ma wierszy w DELETED
strukcji DML można tworzyć wiele wyzwala- PRINT 'Instrukcja INSERT' -- ... to wykonano instrukcję INSERT
czy typu AFTER. Jeśli dla jednej tabeli i jedne- ELSE -- w przypadku, gdy nie ma wierszy w INSERTED
go typu instrukcji mamy kilka różnych wy- PRINT 'Instrukcja DELETE'; -- to wykonano instrukcję DELETE
zwalaczy, to będą one uruchamiane sekwen-

www.sdjournal.org 43
Aplikacje biznesowe

Natomiast w przypadku uruchomienia in- • lokalne tabele tymczasowe o konkretnej Funkcja COLUMNS_UPDATED
strukcji DELETE nazwie widoczne są dla tworzącej je se- i predykat UPDATE – selektywne
sji, na poziomie wywołującym, oraz na wywoływanie wyzwalaczy
DELETE FROM dbo.Osoby wszystkich poziomach wewnętrznych; Tworząc aplikacje biznesowe zdarza się, że
WHERE id=1 • aby tabela tymczasowa zapobiegła tylko chcemy reagować tylko i wyłącznie na zmia-
jednej próbie uruchomienia danej instruk- nę wartości niektórych kolumn. SQL Server
SQL Server 2005 lub SQL Server 2008 wypi- cji SQL, należy po powrocie do zadania 2005 i SQL Server 2008 pozwalają na uru-
szą komunikat: wywołującego usunąć tę tabelę; chamianie triggera w sytuacjach, gdy zmie-
• tabele tymczasowe tworzone są w ba- nione zostały tylko niektóre kolumny (np.
Instrukcja DELETE zie tempdb – tak więc używając funk- gdy ktoś próbuje zmienić wartość klucza
(1 row(s) affected) cji OBJECT _ ID do sprawdzenia istnienia głównego). W SQL Server 2005 i SQL Se-
tabeli tymczasowej, należy używać na- rver 2008 mamy dwa mechanizmy zapew-
Gdy wykonana zostanie instrukcja, która nie zwy tabeli kwalifikowanej przy pomo- niające selektywne uruchamianie wyzwala-
zmieni żadnych danych, cy nazwy bazy danych. Wywołanie funk- czy. Są to funkcja COLUMNS_UPDATED i predy-
cji OBJECT _ ID bez przedrostka tempdb w kat UPDATE.
-- w bazie nie istnieje osoba o id = 300 czasie połączenia z inną bazą danych za- W predykacie UPDATE jako parametr wej-
DELETE FROM Osoby WHERE id = 300 wsze zwróci wartość NULL . ściowy należy podać nazwę kolumny. Wyni-
kiem działania instrukcji jest wartość TRUE lub
to wyświetlony zostanie komunikat Listing 2 prezentuje wyzwalacz uruchamiany FALSE w zależności od tego, czy podana w para-
dla określonych instrukcji. metrze wejściowym kolumna została zmienio-
Nie zmieniono danych Podczas wykonywania instrukcji UPDATE na na w klauzuli SET polecenia UPDATE urucha-
(0 row(s) affected) tabeli dbo.Osoby miającego wyzwalacz. Predykat UPDATE zwróci
wartość TRUE dla każdej kolumny, jeśli polece-
Nieuruchamianie triggerów UPDATE dbo.Osoby niem uruchamiającym wyzwalacz jest instruk-
dla konkretnych instrukcji SQL SET nazwisko = 'Kowalski' cja INSERT.
Nie istnieją formalne metody pozwalające WHERE nazwisko = Nowak Funkcja COLUMNS_UPDATED zwraca łańcuch
uniknąć wywołania wyzwalacza dla konkret- bajtów, w którym każdej kolumnie odpowia-
nej instrukcji SQL. trigger nie zostanie wywołany – wyświetlony da jeden bit. Bit przyjmuje wartość 1 w przy-
Możliwe jest całkowite wyłączenie triggera zostanie komunikat informujący o tym, że je- padku, gdy kolumna została zmieniona, lub
za pomocą instrukcji den wiersz uległ zmianie. 0, gdy kolumna nie została zmieniona. Każ-
dy bajt w łańcuchu reprezentuje 8 kolejnych
ALTER TABLE DISABLE TRIGGER (1 row(s) affected) kolumn (po jednym bicie na kolumnę) – w
ramach każdego bajtu, bity uporządkowa-
Co zrobić jednak w sytuacji, gdy trzeba za- Po usunięciu tabeli dbo.test_update ne są od prawej do lewej. Oznacza to, że in-
blokować wywoływanie wyzwalacza dla formacja o zmianie pierwszej kolumny zapi-
konkretnej instrukcji – co w przypadku DROP TABLE dbo.test_update; sana jest w pierwszym bajcie po lewej stro-
aplikacji biznesowych (o dużym poziomie nie łańcucha, w pierwszym bicie znajdują-
skomplikowania) może być dość często wy- i wykonaniu instrukcji UPDATE cym się po prawej stronie danego bajtu. Na-
magane? tomiast drugą kolumnę reprezentuje dru-
Trzeba opracować własną metodę – musi- UPDATE dbo.Osoby SET nazwisko = 'Abacki' gi bit od prawej strony w tym samym bajcie.
my zasygnalizować, że nie chcemy wywoły- WHERE nazwisko = 'Kowalski' W celu sprawdzenia, czy określone kolumny
wać wyzwalacza. Jednym z trików pozwala- zostały zmienione, trzeba posłużyć się opera-
jących na realizację tego zadania jest użycie zobaczymy komunikat informujący, że trigger torem bitowego iloczynu logicznego (&) po-
tabel o konkretnych nazwach – mogą to być zadziałał poprawnie. równując mapę bitową zwróconą przez funk-
tabele tymczasowe. Jeśli użyjesz tabel tym- cję COLUMNS_UPDATED z własną maską bitową,
czasowych, to musisz pamiętać o trzech za- Trigger działa w której należy włączyć bity tylko interesują-
sadach: (1 row(s) affected) cych nas kolumn.
Problemem dla osób używających funk-
cji COLUMNS_UPDATED może być fakt, że bi-
Ogólna postać triggera towy operator iloczynowy w SQL Server
CREATE TRIGGER [nazwa_schematu_bazy.]nazwa_wyzalacza 2005 i SQL Server 2008 wymaga poda-
ON { tabela | perspektywa } nia wartości całkowitoliczbowych (lub war-
[ WITH <opcje_wyzwalacza> ] tości, które można niejawnie przekształ-
{ FOR | AFTER | INSTEAD OF } cić na typ całkowitoliczbowy). Z kolei sa-
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } ma funkcja COLUMNS_UPDATED może zwró-
[ WITH APPEND ]
cić wartość dłuższą niż 8 bajtów, czyli war-
[ NOT FOR REPLICATION ]
AS { polecenia SQL }
tość zwracana przez funkcję może nie zmie-
ścić się w zmiennej największego typu całko-
Po słowach kluczowych CREATE TRIGGER należy umieścić nazwę wyzwalacza (można ją poprze- witoliczbowego – BIGINT. Wtedy koniecz-
dzić nazwą schematu). Następnie po słowie ON należy wskazać tabelę lub perspektywę, dla której ne jest wyodrębnienie fragmentu zwracane-
uruchamiany będzie trigger. Wyrażenie WITH <opcje_wyzwalacza> służy do zdefiniowania opcji go łańcucha poprzez wykorzystanie funkcji
wyzwalacza. Kolejne dwie linie wskazują, kiedy trigger będzie uruchamiany. Po słowie kluczowym
SUBSTRING. Np. aby wyciąć kolumnę o pozy-
AS znajduje się ciało wyzwalacza.
cji @nr_kolumny wystarczy posłużyć się frag-
mentem.

44 10/2008
SQL Server 2005/2008

SUBSTRING(COLUMNS_UPDATED(), (@nr_kolumny Na Listingu 4 zaprezentowano wyzwalacz, Operacje wykonywane w trigge-


– 1) / 8 + 1, 1) który zamiast funkcji COLUMNS _ UPDATED wy- rze na wybranych wierszach
korzystuje predykat UPDATE. Triggery mogą również wykonywać opera-
Maskę, którą trzeba przygotować, aby spraw- Kod wyzwalacza z predykatem UPDATE cje na poszczególnych wierszach, albo odpo-
dzić, czy dany bit ma wartość 1 lub 0, generu- jest bardziej czytelny i łatwiejszy do napi- wiednio reagować w zależności od wartości
je się poprzez podnoszenie liczby 2 do potęgi o sania. Jednak w sytuacjach, gdy chcemy przechowywanych w poszczególnych wier-
jeden mniejszej niż pozycja danego bitu w baj- sprawdzić, czy większa liczba kolumn zo- szach. W wyzwalaczach można używać kur-
cie. Wyrażenie obliczające pozycje bitu o nu- stała zmieniona, lepiej jest używać funkcji sorów, tworzyć tabele. W aplikacjach bizne-
merze @nr _ bitu w bajcie mogłoby wyglądać COLUMNS_UPDATED. sowych tego typu możliwości triggerów moż-
następująco:
Listing 2. Przykład wyzwalacza uruchamianego dla określonej instrukcji
(@nr _ bitu - 1) % 8 + 1
USE test;
, a wyrażenie generujące maskę: GO

POWER(2, (@nr _ bitu-1) % 8). -- jeśli istnieje tabela dbo.test_update ...

W celu sprawdzenia wartości bitu należy prze- IF OBJECT_ID('dbo.test_update') IS NOT NULL


prowadzić operacje bitowego iloczynu pomię- DROP TABLE dbo.test_update; -- ... to ją usuwamy
dzy przygotowaną maską, a wartością zwraca- GO
ną przez funkcję COLUMNS _ UPDATED. Wyraże-
nie takie może wyglądać następująco: -- tworzymy tabelę, dzięki której nie uruchomimy wyzwalacza

IF SUBTRING(COLUMNS_UPDATED(), (@nr_kolumny CREATE TABLE dbo.test_update


– 1) / 8 + 1, 1) & (
POWER(2, (@nr_bitu - 1) % 8) > 0 -- kolumna kolumna INT
została zmieniona )
GO
Po zapoznaniu się z teoretycznymi wiadomo-
ściami, nadszedł czas, aby zaprezentować wy- -- jeśli istnieje wyzwalacz dbo.trg_UPDATE ...
zwalacz, który korzysta z funkcji COLUMNS _
UPDATED (Listing 3). Naszym celem będzie wy- IF OBJECT_ID('dbo.trg_UPDATE') IS NOT NULL
pisanie komunikatu, jeśli w instrukcji UPDATE DROP TRIGGER dbo.trg_UPDATE; -- ... to go usuwamy
zmieniona została kolumna pensja. GO
Kolumna pensja jest czwartą kolumną w ta- -- tworzymy wyzwalacz ...
beli Osoby, dlatego w wyzwalaczu użyliśmy CREATE TRIGGER trg_UPDATE
wyrażenia (4 - 1), choć nic nie stoi na prze- ON dbo.Osoby -- ... na tabeli dbo.Osoby ...
szkodzie, aby zamiast tego działania napisać po FOR UPDATE -- ... dla instrukcji UPDATE
prostu liczbę 3. Jednak naszym zdaniem użycie AS
wyrażenia (4 - 1) jest bardziej czytelne dla ko- -- jeśli tabela dbo.test_update istnieje ...
goś czytającego ten kod. IF OBJECT_ID('dbo.test_update') IS NOT NULL
Aby sprawdzić poprawność działania stwo- RETURN; -- ... to kończymy działanie wyzwalacza ...
rzonego wyzwalacza należy wykonać dowolną PRINT 'Trigger działa'; -- ... w przeciwnym wypadku wyzwalacz normalnie działa
instrukcję UPDATE. GO

UPDATE dbo.Osoby SET pensja=3300 Listing 3. Przykład użycia funkcji COLUMNS_UPDATED wewnątrz wyzwalacza
WHERE id=1 -- jeśli w bazie jest wyzwalacz ...
IF OBJECT_ID('dbo.trg_columns_updated') IS NOT NULL
W wyniku uruchomienia powyższego zapyta- DROP TRIGGER dbo.trg_columns_updated; -- ... to go usuwamy
nia otrzymamy: GO

Zmieniono kolumnę pensja -- tworzymy wyzwalacz ...


(1 row(s) affected) CREATE TRIGGER dbo.trg_columns_updated
ON dbo.Osoby -- ... na tabeli Osoby ...
Natomiast w przypadku zapytania UPDATE mo- FOR UPDATE -- ... na instrukcję UPDATE
dyfikującego inną kolumnę niż pensja AS
-- jeśli bitowy iloczyn wartości zwracanej przez funkcję COLUMNS_UPDATED ...
UPDATE dbo.Osoby SET nazwisko = 'Kowalski' IF SUBSTRING(COLUMNS_UPDATED(), (4 - 1) / 8 + 1, 1) &
WHERE id=1 POWER(2, (4 - 1) % 8) > 0 -- ... i maski przygotowanej przez nas ...
-- ... jest większy od 0 to wyświetlany jest komunikat ...
Wyzwalacz nie zostanie uruchomiony i w wy- PRINT 'Zmieniono kolumnę pensja'
niku otrzymamy tylko następującą informację: ELSE -- ... w przeciwnym wypadku
RETURN; -- ... działane wyzwalacza jest kończone
(1 row(s) affected)

www.sdjournal.org 45
Aplikacje biznesowe

na wykorzystać do audytu (śledzenia zmian) -- wszystkim osobom zarabiający 3000 zł Triggery typu INSTEAD OF mają wiele zalet,
niektórych tabel. Na Listingu 5 zaprezento- i więcej zmieniono pensje na 3500 zł które są niezwykle przydatne przy tworzeniu
wano wyzwalacz, który będzie tworzył in- UPDATE dbo.Osoby SET pensja = 3500 aplikacji biznesowych:
strukcje UPDATE dla poszczególnych wierszy, WHERE pensja >= 3000
które zostały zmodyfikowane w tabeli Oso- • mogą być stosowane do omijania ograni-
by dowolną instrukcją UPDATE. Dzięki dzia- Powyższa instrukcja zmieniła cztery wier- czeń modyfikacji przeprowadzanych na
łaniu wyzwalacza będziemy w stanie stwier- sze. Dla każdego z wierszy zapisana została perspektywach – np. w perspektywach
dzić, w jaki sposób zmienione zostały po- w tabeli logów (Osoby _ log _ update) odpo- nie można aktualizować kolumn będą-
szczególne wiersze w tabeli Osoby i w razie wiednia instrukcja UPDATE. Oczywiście nie cych wynikiem kalkulacji, lub agregacji.
potrzeby przywrócić starą wersję danych w jest to najbardziej optymalny sposób logo- Stosując wyzwalacze typu INSTEAD OF
danym wierszu. wania operacji (zamiast budować instrukcję można przeprowadzić analizę instrukcji
Na początku stworzono tabelę, która bę- UPDATE można zapisać poszczególne wartości SQL i wykonać odpowiedni kod na uży-
dzie przechowywać informacje dotyczące pól), ale wskazuje sposób postępowania w ta- wanych w perspektywie kolumnach tabel
daty oraz treść instrukcji zmieniającą po- kich sytuacjach. źródłowych;
szczególne wiersze. Po stworzeniu tabe- • są uruchamiane przed sprawdzeniem zde-
li, która będzie przechowywała nasze logi, Triggery typu INSTEAD OF finiowanych ograniczeń – dzięki temu
należy stworzyć trigger (Listing 5). W wy- Triggery typu INSTEAD OF uruchamiane są możliwa jest identyfikacja działań, które
zwalaczu tym zastosowane zostaną różne- zamiast oryginalnej instrukcji SQL przepro- normalnie nie powiodłyby się i zastąpie-
go rodzaju triki, które mogą zwiększyć je- wadzanej na określonym obiekcie. Nie są to nie tych działań poprawnym kodem, któ-
go efektywność (poszczególne instrukcje zo- triggery działające na zasadzie BEFORE, któ- ry nie będzie naruszał ograniczeń.
stały opisane w postaci komentarzy na Li- re są uruchamiane przed oryginalną instruk-
stingu 5). cją, ale takie, które są uruchamiane zamiast tej Listing 6 prezentuje działanie wyzwalacza ty-
W wyzwalaczu wykorzystano kilka trików, instrukcji. Oryginalna instrukcja nigdy nie zo- pu INSTEAD OF. Instrukcję INSERT wstawiają-
które mogą przyspieszyć wykonywane dzia- stanie wykonana. Wyzwalacze typu INSTEAD ca dane do tabeli Osoby zastąpiono wyzwala-
łania: OF mają duże znaczenie w przypadku tworze- czem typu INSTEAD OF, który sprawdza, czy
nia aplikacji biznesowych. Otóż tworząc apli- pensja dodawanej osoby jest większa od 0. Je-
• skopiowano zawartość tabel INSERTED i kacje biznesowe musimy zapewnić bezpie- śli tak nie jest, to instrukcja wstawienia nie
DELETED do tabel tymczasowych za po- czeństwo danych. Z tego też względu użyt- jest wykonana.
mocą nielogowanej, a co za tym idzie bar- kownikom bardzo często udostępniane są wi- Próba wykonania instrukcji INSERT
dzo szybkiej operacji SELECT INTO. Oczy- doki (zamiast tabel) zawierające tylko wyma-
wiście, aby możliwe było skopiowanie da- gane do pracy danego użytkownika informa- -- próba dodania osoby, z pensją 0 zł
nych w ten sposób nie może istnieć tabela cje. Czasem jednak zachodzi konieczność, aby zakończy się niepowodzeniem
docelowa; ten użytkownik zmodyfikował lub dodał dane INSERT INTO dbo.Osoby
• na utworzonych tabelach tymczasowych do oryginalnej tabeli. VALUES('Albert', 'Bielecki', 1000, 1);
założone zostały indeksy, które przyspie- Oczywiście użytkownik nie wie, że dane,
szają działania związane z pobieraniem które ogląda pochodzą z widoku, a nie tabeli. nie spowoduje dodania wiersza do tabeli Osoby.
danych; A więc, jeśli otrzyma polecenie dodania wpi- Zwracamy szczególną uwagę na fakt, że trig-
• kursor wewnątrz wyzwalacza utworzono su, spróbuje tę czynność wykonać na dobrze ger typu INSTED OF działa ZAMIAST wywołu-
z opcją FAST _ FORWARD. znanym mu widoku. W takiej sytuacji moż- jącej go instrukcji. Tak więc, jeśli w kodzie wy-
na użyć wyzwalacza typu INSTEAD OF, któ- zwalacza, zostanie pominięta instrukcja wywo-
Teraz można napisać instrukcje UPDATE na ta- ry sprawdza poprawność wprowadzanych łująca wyzwalacz (w ciele triggera nie będzie in-
beli Osoby, która zmieni kilka wierszy. Wy- danych i wstawia dane do oryginalnej tabe- strukcji INSERT wstawiającej dane do tabeli), to
zwalacz powinien zapisać odpowiednie za- li (triggery typu INSTEAD OF można tworzyć żadne zmiany nie zostaną wykonane.
pytanie SQL dla każdego z modyfikowanych na widokach w przeciwieństwie do trigge-
wierszy. rów typu AFTER). Wyzwalacze i perspektywy
W aplikacjach biznesowych ze względów bez-
Listing 4. Przykład użycia predykatu UPDATE wewnątrz wyzwalacza pieczeństwa użytkownikom końcowym bar-
dzo często udostępniane są perspektywy za-
IF OBJECT_ID('dbo.trg_update') IS NOT NULL miast oryginalnych tabel. Aktualizacja, do-
DROP TRIGGER dbo.trg_update; danie lub usunięcie danych z perspektywy
GO bardzo często nie jest możliwe. I tu z pomo-
cą przychodzą wyzwalacze typu INSTEAD OF.
CREATE TRIGGER dbo.trg_update Dzięki wyzwalaczom można także sprawdzić
ON dbo.Osoby poprawność instrukcji próbującej dodać, mo-
FOR UPDATE dyfikować lub usunąć dane z perspektywy.
AS Można także zablokować wpisywanie niepo-
prawnych wartości.
IF UPDATE(pensja) -- jeśli kolumna pensja została zmieniona ... Możliwe jest udostępnienie użytkownikowi
dodawania danych do tabel, mimo że tabele te
PRINT 'Zmieniono kolumnę pensja' -- ... wypisywany jest komunikat mogą nie być widoczne (użytkownikowi udo-
stępniona może być tylko perspektywa). Dzię-
ELSE -- ... w przeciwnym wypadku ... ki takiemu podejściu funkcjonalność aplikacji
RETURN; -- ... wyzwalacz jest kończony nie jest ograniczana, a bezpieczeństwo (co w
przypadku aplikacji biznesowych jest bardzo

46 10/2008
SQL Server 2005/2008

Listing 5. Kod służący do audytu tabeli

USE test; DECLARE cur_del CURSOR FAST_FORWARD FOR


GO SELECT
-- jeśli tabela istnieje w bazie danych ... ins.Id,
IF OBJECT_ID('dbo.Osoby_log_update') IS NOT NULL ins.Imie,
DROP TABLE dbo.Osoby_log_update; -- ... to ją usuwamy ins.Nazwisko,
GO ins.Pensja,
-- tworzymy nową tabelę zawierającą dwie kolumny ins.Id_dzialu,
CREATE TABLE dbo.Osoby_log_update del.Id,
( del.Imie,
Data DATETIME, del.Nazwisko,
instrukcja VARCHAR(300) del.Pensja,
); del.Id_dzialu
-- jeśli istnieje wyzwalacz w bazie danych ... FROM dbo.___tmp_inserted ins, dbo.___tmp_deleted del
IF OBJECT_ID('dbo.trg_log_update') IS NOT NULL WHERE ins.Id = del.Id;
DROP TRIGGER dbo.trg_log_update; -- ... to go usuwamy
GO -- otwieranie kursora
-- tworzymy nowy wyzwalacz ... OPEN cur_del;
CREATE TRIGGER dbo.trg_log_update -- pobranie danych z kursora do zmiennych
ON dbo.Osoby -- ... na tabeli Osoby ... FETCH NEXT FROM cur_del INTO
FOR UPDATE -- ... dla instrukcji UPDATE @ins_Id, @ins_Imie, @ins_Nazwisko, @ins_Pensja, @ins_Id_dzialu,
AS @del_Id, @del_Imie, @del_Nazwisko, @del_Pensja, @del_Id_dzialu;
-- dane z tabel inserted i deleted kopiowane są za pomocą -- dopóki są dane w kursorze
szybkiej WHILE @@FETCH_STATUS = 0
-- nielogowanej instrukcji SELECT INTO do nowych tabel, na BEGIN
których -- tworzenie instrukcji UPDATE aktualizującej wartości
-- zakładany jest indeks w celu przyspieszenia działań w poszczególnych
kursorze -- kolumn w tabeli Osoby – dzięki tej instrukcji będzie można
IF OBJECT_ID('dbo.___tmp_deleted') IS NOT NULL przywrócić
DROP TABLE dbo.___tmp_deleted; -- jeśli istnieje tabela, -- starsze wartości poszczególnych pól
to jest usuwana SET @sql = 'UPDATE dbo.Osoby SET '
-- skopiowanie tabeli deleted do nowej tabeli za pomocą + 'Imie = ' + QUOTENAME(@ins_Imie, '''') + ', '
nielogowanej (szybkiej!!!) + 'Nazwisko = ' + QUOTENAME(@ins_Nazwisko ,'''') + ', '
-- instrukcji SELECT INTO + 'Pensja = ' + CAST(@ins_Pensja AS VARCHAR) + ', '
SELECT * INTO dbo.___tmp_deleted FROM Deleted; + 'Id_dzialu = ' + cAST(@ins_Id_dzialu AS VARCHAR) + ' '
-- założenie indeksu na tabeli + 'WHERE '
CREATE UNIQUE CLUSTERED INDEX idx_del + 'Id = ' + CAST(@ins_Id AS VARCHAR) + ' AND '
ON ___tmp_deleted(Id); + 'Imie = ' + QUOTENAME(@ins_Imie, '''') + ' AND '
+ 'Nazwisko = ' + QUOTENAME(@ins_Nazwisko, '''') + ' AND '
IF OBJECT_ID('dbo.___tmp_inserted') IS NOT NULL + 'Pensja = ' + CAST(@ins_Pensja AS VARCHAR) + ' AND '
DROP TABLE dbo.___tmp_inserted; + 'Id_dzialu = ' + CAST(@ins_Id_dzialu AS VARCHAR);
SELECT * INTO dbo.___tmp_inserted FROM Inserted;
-- wstawienie daty i kodu instrukcji do tabeli logów
CREATE UNIQUE CLUSTERED INDEX idx_ins INSERT INTO dbo.Osoby_log_update (Data, instrukcja)
ON ___tmp_inserted(Id); VALUES(getdate(), @sql);

-- deklaracja zmiennych -- pobranie kolejnego wiersza z kursora


DECLARE FETCH NEXT FROM cur_del INTO
@ins_Id INT, @ins_Id, @ins_Imie, @ins_Nazwisko, @ins_Pensja, @ins_Id_
@ins_Imie VARCHAR(20), dzialu,
@ins_Nazwisko VARCHAR(30), @del_Id, @del_Imie, @del_Nazwisko, @del_Pensja, @del_Id_
@ins_Pensja MONEY, dzialu;
@ins_Id_dzialu INT, END; -- koniec pętli
@del_Id INT,
@del_Imie VARCHAR(20), CLOSE cur_del; -- zamknięcie kursora
@del_Nazwisko VARCHAR(30), DEALLOCATE cur_del; -- zwolnienie zasobów związanych z
@del_Pensja MONEY, kursorem
@del_Id_dzialu INT, -- usunięcie tabel tymczasowych
@sql VARCHAR(300); -- ... i zmiennej IF OBJECT_ID('dbo.___tmp_deleted') IS NOT NULL
przechowującej kod zapytania DROP TABLE dbo.___tmp_deleted;
IF OBJECT_ID('dbo.___tmp_inserted’) IS NOT NULL
-- deklaracja kursora, pobierającego dane z tabel DROP TABLE dbo.___tmp_inserted;

www.sdjournal.org 47
Aplikacje biznesowe

ważne) jest zdecydowanie większe. Dzięki wy- wych powinno być ograniczone – ze wzglę- że uruchamiać na poziomie bazy danych. Ogól-
zwalaczowi typu INSTEAD OF instrukcja SQL du na wydajność oraz możliwość popełnienia na składnia takiego wyzwalacza wygląda nastę-
pozwoli dodać dane do tabeli (a perspektywa błędów. Procedury rekurencyjne wymaga- pująco:
zostanie zaktualizowana) ją kontroli, aby nie były wywoływane w nie-
skończoność. Na szczęście SQL Server 2005 CREATE TRIGGER nazwa_wyzwalacza
Rekurencyjne i zagnieżdżone i SQL Server 2008 nie pozwolą na urucha- ON DATABASE
wywoływanie triggerów mianie wyzwalaczy w nieskończoność, ponie- FOR rodzaj_instrukcji
SQL Server 2005 i SQL Server 2008 obsłu- waż mają zakodowane ograniczenie do 32 po- AS { polecenia SQL }
gują rekurencyjne i zagnieżdżone wywoła- ziomów zagnieżdżenia. Gdy następuje próba
nia triggerów. Z zagnieżdżonym wywoła- wywołania po raz 33 wyzwalacza, to zgłasza- Rodzaj _ instrukcji może przybierać róż-
niem wyzwalaczy mamy do czynienia, gdy je- ny jest błąd i wszystkie operacje wykonane w nego rodzaju wartości np. CREATE _ TABLE,
den wywołany trigger powoduje uruchomie- remach 32 wywołań są wycofywane. Należy CREATE _ VIEW, DDL _ DATABASE _ LEVEL _
nie innego wyzwalacza. Natomiast rekuren- również pamiętać, że wyzwalacze wywoływa- EVENTS itp.
cyjne wywołanie zachodzi wówczas, gdy wy- ne są również wtedy, gdy instrukcja wywołu- Wyzwalacze na poziomie bazy danych mo-
zwalacz uruchamia sam siebie bezpośrednio jąca je, nie zmodyfikuje żadnego wiersza. Je- gą pełnić bardzo ważne role w aplikacjach biz-
lub poprzez inne instrukcje. Domyślnie re- śli w takim wypadku uruchomione zostanie nesowych np. mogą sprawdzać, czy użytkow-
kurencyjne wywoływanie triggerów w SQL rekurencyjne wywoływanie wyzwalacza, to nik próbuje tworzyć tabele bez klucza głów-
Server 2005 i SQL Server 2008 jest wyłączo- cały proces zakończy się po 32 wywołaniu. W nego (i zgłaszać wyjątek w takich sytuacjach),
ne. Aby więc włączyć rekurencyjne wywoły- aplikacjach biznesowych sytuacja taka nigdy lub logować operacje DDL wykonywane na ba-
wanie wyzwalaczy (np. na bazie test) należy nie powinna następować (ze względu na du- zie danych.
uruchomić polecenie: że wymagania dotyczące wydajności takich
aplikacji). Oczywiście w aplikacjach bizneso- Wyzwalacze uruchamiane
ALTER DATABASE test wych najlepiej jest nie stosować rekurencyj- na poziomie serwera baz danych
SET RECURSIVE_TRIGGERS ON nych wywołań triggerów. Jednak, gdy nie je- Wyzwalacze można także uruchamiać na po-
steśmy w stanie uniknąć rekurencyjnego wy- ziomie serwera baz danych. Funkcjonalność ta
Ponowne wyłączenie rekurencyjnych wywo- wołania wyzwalacza to konieczne jest wpro- może przydać się do logowania operacji wyko-
łań wyzwalaczy zachodzi po wykonaniu po- wadzanie kontroli przerywania rekurencji w nywanych na poziomie serwera (np. tworze-
lecenia: miejscu, w którym trigger nie powinien być nie, usuwanie loginów). Aby wyzwalacz dzia-
już wywoływany. łał na poziomie serwera musi być uruchomio-
ALTER DATABASE test ny z opcją ON ALL SERVER.
SET RECURSIVE_TRIGGERS OFF Wyzwalacze uruchamiane
na poziomie bazy danych Podsumowanie
Używanie rekurencyjnych i zagnieżdżonych Wyzwalacze można uruchamiać nie tylko na W artykule tym zaprezentowano kilka trików,
wywołań wyzwalaczy w aplikacjach bizneso- poziomie obiektu bazy danych. Można je tak- których wykorzystanie może znacznie upro-
ścić tworzenie rozwiązań biznesowych. Jed-
Listing 6. Przykład wyzwalacza typu INSTEAD OF nak samo używanie wyzwalaczy nie przynosi
korzyści w postaci dużej wydajności – szcze-
-- jeśli w bazie jest wyzwalacz ... gólnie należy unikać rekurencyjnych i za-
gnieżdżonych wywołań wyzwalaczy. Rekom-
IF OBJECT_ID('dbo.trg_osoby_1') IS NOT NULL pensatą używania triggerów jest większe bez-
DROP TRIGGER dbo.trg_osoby_1; -- ... to usuwamy go pieczeństwo danych i obiektów w aplikacjach
GO biznesowych. Tak więc jeśli chcesz zapewnić
bezpieczeństwo i nie zależy Ci na dużej wy-
-- tworzymy nowy wyzwalacz ... dajności aplikacji – to używaj widoków z połą-
czeniu z triggerami. Jeśli priorytetem jest wy-
CREATE TRIGGER dbo.trg_osoby_1 dajność aplikacji biznesowej, to należy unikać
ON dbo.Osoby -- ... na tabeli Osoby ... wyzwalaczy.
INSTEAD OF INSERT -- ... wykonywany zamiast instrukcji INSERT
AS
ARTUR MOŚCICKI
-- sprawdzamy, czy pensja jest większa od 0 Artur Mościcki jest z wykształcenia informaty-
kiem. Obecnie pracuje jako programista baz da-
-- jeśli nie, to kończymy działanie wyzwalacza (instrukcja INSERT nych i hurtowni danych. Ma również doświad-
czenie w tworzeniu aplikacji BI dla dużych i śred-
-- nie zostanie wykonana) nich firm. Jest współautorem książek: Oracle 10g
i Delphi. Programowanie baz danych,SQL Se-
IF (SELECT pensja FROM INSERTED) <= 0 RETURN; rver 2005. Zaawansowane rozwiązania bizne-
sowe oraz Photoshop. Pluginy i efekty specjalne.
-- jeśli pensja jest większa od 0, to piszemy odpowiednią instrukcję INSERT Oprócz hurtowni i baz danych, jego drugą infor-
-- wstawiającą dane do tabeli Osoby matyczną pasją jest fotografia cyfrowa i obrób-
ka zdjęć za pomocą Adobe Photoshop. W wol-
INSERT INTO dbo.Osoby (imie, nazwisko, pensja, id_dzialu) nych chwilach kibicuje piłkarskiej reprezentacji
SELECT imie, nazwisko, pensja, id_dzialu FROM INSERTED; Argentyny.
Kontakt z autorem: arturmoscicki@op.pl

48 10/2008
Narzędzia programistyczne

Lokal zamienię od zaraz


Jak szybko przenieść aplikację do środowiska operacyjnego
Solaris 10
Oprócz przystosowania samej aplikacji typu enterprise do nowej
wersji systemu operacyjnego, trzeba uwzględnić jej integrację z
nowym środowiskiem – metody startowania, zmiany komend systemu
operacyjnego, konfigurację usług pomocniczych, itp. Z Solaris można
przenosić całe, niezmienione środowiska aplikacji.
• BrandZ, poszerzające Solaris Zones o moż-
Dowiesz się: Powinieneś wiedzieć: liwość uruchamiania środowisk operacyj-
• Jak wykorzystać środki dostępne w Solaris 10 • Co to jest Solaris i jak się nim administruje w nych opartych na odmiennych systemach
do stworzenia wydzielonego środowiska dla podstawowym zakresie; operacyjnych, nawet pochodzących od
aplikacji; • Jakie wyzwania pojawiają się przy moderniza- różnych producentów;
• Jak produkty Solaris 8 Containers i Solaris 9 Con- cji aplikacji typu enterprise; • Solaris Binary Application Guarantee, któ-
tainers zapewniają zgodność środowiska działa- • Na czym polegają techniki wirtualizacji i emu- ra przekłada się na stabilność API.
nia aplikacji z poprzednimi wersjami Solaris. lacji.
Szybkie przenosiny
Przy zastosowaniu Solaris 8 Containers podsta-
niczyć koszta utrzymania przez konsolidację wowe kroki migracji aplikacji wraz z jej środo-
wielu aplikacji na jednym serwerze. wiskiem wyglądają następująco (Rysunek 1):
Poziom trudności Kwestia modernizacji środowiska operacyj-
nego Solaris bez konieczności zmiany aplika- • instalacja na sprzęcie nowego serwera śro-
cji została dobrze rozwiązana przez firmę Sun dowiska operacyjnego Solaris 10;
Microsystems w roku 1997 i już od tej pory, • utworzenie w Solaris 10 przynajm-

P
roblem przeróbki aplikacji do funkcjo- czyli od Solaris w wersji 2.6, obowiązuje gwa- niej jednej pełnej (whole-root) zony typu
nowania w nowej wersji systemu ope- rancja zgodności (Solaris Application Guaran- SUNWsolaris8 i przekopiowanie na nią
racyjnego może okazać się niebagatel- tee [1]) – aplikacja napisana poprawnie dla obrazu istniejącego dotąd środowiska
ny. Nawet jeśli same zmiany w aplikacji nie poprzedniej wersji Solaris będzie mogła dzia- operacyjnego Solaris 8. Obraz istniejące-
są skomplikowane, przejście przez stosowną łać bez modyfikacji na każdej kolejnej wer- go środowiska można utworzyć komen-
część cyklu jej rozwoju zajmuje czas – prze- sji Solaris. dą cpio(1), można też użyć bardziej za-
ważnie najcenniejszy zasób w projektach in- Pozostają jednak otwarte kwestie, co zro- awansowanych narzędzi Solaris. Obraz
formatycznych. bić, jeśli aplikacja nie spełnia warunków Sola- dotychczasowego środowiska operacyj-
Niestety, nierzadko oprócz przerabiania ris Application Guarantee, albo jeśli pozostaje nego może zawierać również dane aplika-
kodu samej aplikacji typu enterprise, trze- bardzo ograniczony czas na dopracowanie i te- cji; jednak dane aplikacji można również
ba uwzględnić jej integrację z nowym środo- stowanie środowiska dla aplikacji. przenieść inną metodą – na przykład po-
wiskiem operacyjnym – nowe metody star- przez przełączenie zawierających je wolu-
towania, zmiany niektórych komend syste- Przeprowadzki minów pamięci masowej w sieci SAN do
mu operacyjnego i formatu ich wyników, po- w kontenerach z logo Sun nowego serwera;
nowną instalację i konfigurację usług pomoc- Sun Microsystems zaproponował ostatnio no- • automatyczne uruchomienie narzędzia
niczych, itp. watorski sposób na odsunięcie w czasie mo- P2V (Physical to Virtual), które dokona
W efekcie oprócz zmian w aplikacji typu en- dernizacji sprzętu i systemu operacyjnego od kilku kroków przystosowujących obraz
terprise, powstają istotne zmiany w przygoto- modernizacji aplikacji i jej środowiska. W po- Solaris 8 do działania w środowisku wir-
wanym dla niej środowisku, co z kolei wymu- staci produktów Solaris 8 Containers oraz So- tualnym;
sza opracowanie i opisanie procedur obsługi laris 9 Containers (poprzednie nazwy to Sola- • start zony wraz z całym środowiskiem
takiego nowego środowiska. To znowu wyma- ris 8 Migration Assistant, czy Project Etude) wy- aplikacji, i start samej aplikacji.
ga czasu, którego i tak już brakuje. korzystano wcześniejsze mechanizmy opraco-
Tymczasem klient czy użytkownik czę- wane przez Sun: Analogicznie przenosi się aplikację przy sto-
sto nalega na szybką modernizację systemu sowaniu Solaris 9 Containers.
operacyjnego ze względu na obsługę nowego • Solaris Zones, czyli możliwość jednocze- Ponieważ Solaris 8 Containers czy Solaris 9
sprzętu, utrzymanie jednolitości w swoim śro- snego uruchamiania na jednym kompu- Containers działają w zonach typu whole-root,
dowisku IT, z powodu kończącego się wsparcia terze wielu oddzielnych, wirtualnych czyli maja własne, kompletne kopie całego śro-
serwisowego dla starej wersji, czy chcąc ogra- środowisk operacyjnych; dowiska aplikacji, można w ramach jednego

50 10/2008
Lokal zamienię od zaraz

systemu z Solaris 10 równocześnie użytkować tami DTrace, czy zaawansowane automatycz- • środowisko działania (
wiele Solaris 8 Containers oraz Solaris 9 Conta- ne reakcje na awarie sprzętu i oprogramowa- ) dla aplikacji. Na środowisko dzia-
iners, i to każdy z nich z odrębnym zakresem nia (FMA, Predictive Self Healing). Wszyst- łania dla aplikacji składają się z kolei:
poprawek (patches). ko to zwiększa szanse, że projekt ostatecznej, • oryginalne środowisko Solaris 8, prze-
Organizacyjnie rzecz biorąc, w opisany po- pełnej migracji będzie sukcesem, i zaowocuje niesione z poprzedniego serwera. Śro-
wyżej sposób dokonuje się częściowa migracja możliwie dużym wykorzystaniem potencjału dowisko to jest automatycznie uzu-
aplikacji do środowiska operacyjnego Solaris nowego środowiska (Rysunek 1). pełniane o kilka typowych poprawek
10 – mimo iż sama aplikacja i jej bezpośred- (patches) Solaris 8, usuwających błędy
nie środowisko nie ulegają zauważalnej zmia- Rzeczy w kontenerach nieakceptowalne przy pracy w infra-
nie, to pojawia się nowy system operacyjny Może nasunąć się pytanie – w której wersji strukturze BrandZ lub Solaris Zones
wynikający z zastosowania Solaris 10 oraz być systemu operacyjnego działa właściwie aplika- (np. poprawki do linkera, mountera).
może nowy serwer. Jest to sytuacja, która ma cja po przeprowadzce? Aby odpowiedzieć na Ostatecznie są to więc oryginalne pli-
szanse spełnić podstawowe oczekiwania klien- to pytanie, przyjrzyjmy się bliżej, jak zrealizo- ki wykonywalne i konfiguracyjne So-
ta, a wciąż pozostawia dowolnie długi czas na wane jest środowisko Solaris 8 Container (ana- laris 8;
rozpoznanie i przygotowanie pełnej migracji. logicznie działa Solaris 9 Container). • zmienione niektóre skrypty startowe
Pojawia się okazja do stopniowego zapozna- Docelowe środowisko aplikacji można po- Solaris 8 z katalogu /etc/init.d. Startu-
wania z nowym systemem i np. uaktualnia- dzielić wstępnie na dwie części: jąc zona nieglobalna nie jest na przy-
nia procedur utrzymania. Otwierają się no- kład uprawniona do samodzielnego
we możliwości oferowane przez Solaris 10 • moduł P2V (physical to virtual) urucha- wykrywania i konfiguracji urządzeń
– wykorzystanie dynamicznego systemu pli- miany w czasie instalacji oraz startu (boot) (devfsadm(1m), vxvm(1m)), czy pełnej
ków ZFS, dogłębna analiza wydajności skryp- środowiska; konfiguracji interfejsów sieciowych.
Zona nieglobalna ze względu na ogra-
niczenia Solaris Zones nie może tak-
że uruchamiać pewnych usług – stąd
����������
wyłączane są skrypty startowe do ser-
���
������ wera NFS, serwera PPP, serwera NTP,
��� montowania wymiennych nośników
����� ���� ���� ���� informacji (volfs(1m)), itp.
��������� ������������ ������� �������
• kilka zmienionych komend Solaris 8,
które np. próbują czytać informacje o
���������

���������
konfiguracji sprzętu (prtconf(1m), prt-
diag(1m), psrinfo(1m)). Z założenia So-
laris Zones nie mają dostępu do ta-
���������

��������� kich informacji. Jednak niegdysiejsi


twórcy środowiska aplikacji działają-
������ cej w Solaris 8 nie mogli być świado-
mi tego ograniczenia, stąd takie ko-
���������� mendy musiały się znaleźć w Solaris 8
������������� ����������
�������� Container, a co więcej – mogą wyma-
gać bibliotek (np. związanych z dostę-
Rysunek 1. Migracja aplikacji i jej środowiska z wykorzystaniem Solaris 8 Containers pem do nowych funkcji dzisiejszego
sprzętu) dostępnych dopiero w Sola-
ris 10. Aby udostępnić te biblioteki,
podczas startu zony montuje się w jej
������������������� ��������� ��������� ���������
��������� ����� ������� ������� katalogu /.SUNWnative, tylko do od-
czytu, rodzime (native) katalogi /usr,
/lib, i /platform. Oczywiście dostęp
do bibliotek w tak nietypowej loka-
���������������������� ����������������������
�������������������� �������������������� lizacji można łatwo ograniczyć tylko
dla zmodyfikowanych komend, któ-
��������������

��������������

re rzeczywiście tego potrzebują.


�������

�������
�����������

�����������
���������

���������
�������

�������
�����

�����

���
W ramach Solaris 8 Container mieści się też
jeden ładowany moduł jądra (kernel loadable
module, jako /platform/<karch>/kernel/brand/
���������� ���������� sparcv9/s8_brand) służący przede wszystkim
��������� ���������
do identyfikacji wersji brandu przez jądro.
Z opisu powyższych składników środowiska
������������������������ ������������������������ działania aplikacji jasno wynika, ze potrzebne
jest dodatkowe oprogramowanie, które doko-
���������� ���������� na niezbędnych przeróbek Solaris 8. I właśnie
������������� �������� taką rolę pełni moduł P2V (physical to virtu-
al), który przetwarza środowisko operacyjne
Rysunek 2. Zmiany oryginalnego środowiska Solaris 8 przy przenoszeniu do Solaris 8 Container przystosowane do samodzielnego działania

www.sdjournal.org 51
Narzędzia programistyczne

bezpośrednio na sprzęcie, na środowisko dzia- wciąż mogą się wszak znajdować wpisy doty- Moduł P2V jest dodatkowo automatycz-
łające w świecie Solaris Zones o ograniczonych czące nieistniejących w nowym systemie urzą- nie uruchamiany przed każdym startem (bo-
uprawnieniach. W tym celu podczas instala- dzeń, w tym urządzeń tworzonych przez daw- ot) środowiska operacyjnego i weryfikuje,
cji moduł P2V między innymi dodaje brakują- ne wersje menedżerów woluminów (volume czy np. nieświadome modyfikacje admini-
ce poprawki (patches) do Solaris 8, modyfiku- managers). stratora lub dodawanie poprawek (patches)
je skrypty startowe Solaris 8 z katalogu /etc/in- Również plik system(4) jest analizowany, nie zmieniło opisanych powyżej cech środo-
it.d, oraz przegląda i modyfikuje niektóre pliki gdyż zawarte w nim ustawienia np. dotyczące wiska. Ewentualne niekorzystne zmiany są
konfiguracyjne Solaris 8 (Rysunek 2). komunikacji między procesami przez semafo- przez P2V automatycznie wycofywane.
Pliki konfiguracyjne kontrolowane są na ry czy segmenty pamięci dzielonej nie są do- A zatem od momentu przeprowadzki apli-
przykład w celu dezaktywacji serwera NFS stępne w zonach nieglobalnych, i muszą być kacja działa w środowisku, na które składa się
(dfstab(4)), Sun Remote Services (SRS) (cron- sterowane z zony globalnej. jądro Solaris 10 oraz przestrzeń użytkowni-
tab(1), inittab(4)), czy Solaris Resource Mana- Twórcy modułu P2V postarali się także o ka (userland) Solaris 8. Aplikacja może ko-
ger (pam.conf(4)), gdyż wiadomo, że to opro- automatyczną zmianę nazewnictwa interfej- rzystać z dotychczasowych usług środowiska
gramowanie nie może działać w środowisku sów sieciowych przy przenosinach na nowy operacyjnego Solaris 8 czy dodatkowych apli-
Solaris Zones. sprzęt. Maszyny z Solarisem 8 miewały in- kacji przeniesionych wraz ze środowiskiem,
W ramach kontroli plików konfiguracyj- terfejsy ethernet ze sterownikami hme czy qfe, których konfiguracja pozostaje niezmienio-
nych, moduł P2V usuwa także zbędne mon- podczas gdy współcześnie spotyka się raczej na. Aplikacja poprzez oryginalne biblioteki
towania. W tablicy montowań (vfstab(4)) sterowniki e1000g czy ce. Solaris 8 wywołuje funkcje systemowe jądra
Solaris 10. Ponieważ w dzięki Solaris Applica-
tion Guarantee stosowne wywołania systemo-
Co to są Solaris Zones ? we pozostają niezmienione między wersjami
W Solaris 10 wprowadzona możliwość tworzenia odizolowanych środowisk wykonania dla apli-
kacji, zwanych zonami. Wszystkie zony korzystają ze wspólnego jądra systemu operacyjnego, Solaris, nie ma problemu przy współpracy
które działa w tylko jednej kopii. Każda zona posiada jednak własne, niedostępne dla pozosta- starszych bibliotek z nowszym jądrem.
łych zon pliki, przestrzeń procesów, urządzenia, konfigurację. Z punktu widzenia użytkownika
czy aplikacji, zona wydaje się autonomicznym komputerem. Jak tam na nowym?
Mechanizm Solaris Zones zapewnia rozdzielenie zon z punktu widzenia bezpieczeństwa, oraz
Ponieważ tak przygotowany system posia-
znaczne uniezależnienie od awarii występujących w sąsiednich zonach.
Każdy system z Solaris 10 posiada dokładnie jedną zone globalna, nadrzędną w stosunku do zon da jądro Solaris 10, to możliwa jest praca ze
nieglobalnych, które są równorzędne wobec siebie. Konfiguracja całości systemu odbywa się z wszystkimi, również najnowszymi, cecha-
zony globalnej. Zony nieglobalne maja mniejsze uprawnienia, i pozwalają tylko na zmianę wła- mi Solaris 10. Choć aplikacja przeniesiona
snej konfiguracji. z poprzedniego systemu nie jest ich świado-
Każda zona nieglobalna może mieć komplet własnych, oddzielnych systemów plików (who- ma i nie jest w stanie wprost się do nich od-
le-root zone). Jednak ze względu na łatwość utrzymania, możliwe jest współdzielenie tylko do
woływać, to jednak może korzystać np. z no-
odczytu katalogów odziedziczonych z zony globalnej (sparse-root zones). W ten sposób z zo-
ny globalnej jedną operacją można dokonać np. wspólnego uaktualnienia wszystkich zon ty- wych systemów plików (ZFS), podwyższonej
pu sparse-root. wydajności czy niezawodności jądra. Z kolei
Solaris 8 Containers i Solaris 9 Containers to zawsze zony nieglobalne typu whole-root. Ponieważ z zony globalnej można precyzyjnie badać
ich katalogi mają zawartość specyficzną dla obcego środowiska operacyjnego,więc ich współ- zachowanie aplikacji z użyciem DTrace, czy
dzielenie z innymi zonami nie wchodzi w grę.
wykorzystać najnowsze osiągnięcia w zarzą-
dzaniu zasobami (resource management).
Taka konstrukcja Solaris 8 Containers (i
analogicznie Solaris 9 Containers) wnosi jed-
Jądro a przestrzeń użytkownika w systemie operacyjnym nak również ograniczenia – mogą w nich
System operacyjny można bardzo precyzyjnie podzielić na dwie części – jądro (kernel) i prze-
strzeń użytkownika (userspace, userland). działać tylko aplikacje funkcjonujące na po-
Do zadań jądra należy zarządzanie zasobami systemu, oraz zapewnienie komunikacji między ziomie użytkownika (userland, user space,
sprzętem a oprogramowaniem. To jądro rozstrzyga, które z aktualnych zadań uzyska dostęp do user-level), a nie jądra Solaris 8. Nie można
czasu procesora. Jądro kontroluje, do których obszarów pamięci ma dostęp każde z zadań. używać sterowników urządzeń z Solaris 8.
Podczas startu (boot) systemu jądro po swojej inicjalizacji uruchamia pierwszy proces (w Unixie – Nie można ładować modułów jądra Solaris
proces init), i od tej pory zwykle nie realizuje zadań bezpośrednio, a tylko reaguje na zewnętrzne
zdarzenia – wywołania systemowe (syscalls) ze strony aplikacji w przestrzeni użytkownika, oraz
8 – na przykład związanych z menedżerem
przerwania zgłaszane przez sprzęt. Dodatkowym zadaniem jądra może być wykonywanie nie- woluminów czy firewallem. Tego typu zada-
skończonej pętli gdy nie są wykonywane użyteczne zadania. Tę pętlę nazywa się procesem bez- nia muszą zostać wydzielone do zony global-
czynności systemu (idle process). nej. Oprócz ograniczeń właściwych dla Sola-
Od pierwszego uruchomionego procesu sterowanie przekazane jest do przestrzeni użytkownika ris 8 Containers i Solaris 9 Containers należy
(userspace, userland). Stanowią ją wszystkie elementy systemu poza jądrem, działające przeważ-
wziąć pod uwagę mniejsze uprawnienia Sola-
nie również w oddzielnej od jądra przestrzeni adresowej. Należą do nich biblioteki do realizacji
operacji wejścia-wyjścia, czy do innej interakcji z jądrem, ale także np. shell czy usługi rozwiązy- ris Zones, które mogą się okazać niewystar-
wania nazw, dzielenia plików, itp. czające dla starych aplikacji. Są to dość rzad-
kie przypadki, jednak mogą wymagać głęb-
szej analizy.
Jak zwykle przy zmienionym środowisku
W Sieci nasuwa się pytanie, czy działająca w nim apli-
• http://www.sun.com/software/solaris/guarantee.jsp – szczegóły Solaris Application Guaran- kacja może odczuć, że nie funkcjonuje w ory-
tee [1] ginalnym otoczeniu. Otóż nowoczesna apli-
• http://www.sun.com/software/solaris/containers/getit.jsp – strona oferująca oprogramowa- kacja, pisana ze świadomością istnienia zon
nie (21MB Product + 550MB sample Solaris image) [2] i Solaris 10 jest w stanie to wykryć – wystar-
• http://docs.sun.com/app/docs/coll/1759.1 – dokumentacja produktu [3]
czy że odwoła się do jednej z nowych funk-
cji jądra Solaris 10. Stara aplikacja, pocho-

52 10/2008
Lokal zamienię od zaraz

dząca z czasów Solaris 8, nie powinna na-


potykać przeszkód w działaniu, o ile jej wy-
magania mieszczą się w zakresie wymienio-
nych uprzednio możliwości zon i Solaris 8
Containers.
Kolejne zagadnienie rozpatrywane zwy-
kle w emulowanych środowiskach to wydaj-
ność. W tym wypadku powinna być ona zbli-
żona do wydajności aplikacji działającej w So-
laris 10 na nowym sprzęcie. Nie wprowadza
się wszak żadnego dodatkowego kodu wyko-
nywalnego na ścieżce między aplikacją a jej
środowiskiem.

Podsumowanie
Każdy może wypróbować Solaris 8 Conta-
iners czy Solaris 9 Containers za darmo, po-
zyskując oprogramowanie [2] i dokumenta-
cję [3] ze strony firmy Sun Microsystems. Li-
cencja pozwala na 90 dni zabawy z produk-
tem. Przy używaniu produkcyjnym wyma-
gana jest subskrypcja na wsparcie serwisowe
producenta.
Oprogramowanie pozwala migrować tyl-
ko środowiska operacyjne Solaris 8 i Sola-
ris 9 – starsze wersje Solaris nie są już i tak
wspierane przez Sun. Źródłowy system mo-
że mieć dowolnie dawną aktualizację Sola-
ris SPARC – obsługiwany jest nawet Solaris
SPARC 8 FCS – czyli pierwsze wydanie So-
laris SPARC 8 z marca roku 2000. Dopusz-
czalne są zarówno 32-bitowe jak i 64-bito-
we aplikacje.
Jako docelowe serwery mogą służyć maszy-
ny z procesorami zgodnymi ze specyfikacją
SPARC, z zainstalowanym co najmniej Sola-
ris 10 wydanie 8/07 oraz z poprawką (patch)
o symbolu 127111-01. W szczególności mo-
gą to być serwery Sun CoolThreads z najnow-
szymi, wielordzeniowymi i wielowątkowy-
mi procesorami UltraSPARC T2, o obniżo-
nym zużyciu energii elektrycznej. Tym sa-
mym Solaris 8 Containers i Solaris 9 Conta-
iners pozwalają w prosty, szybki sposób prze-
nieść niezmienioną aplikację wraz z jej środo-
wiskiem na najnowocześniejszy sprzęt i sys-
tem operacyjny.
Pojawiają się natychmiastowe korzyści z za-
stosowania tych nowych komponentów, mi-
mo iż dopasowywanie aplikacji do nowego
środowiska zostaje odsunięte w czasie. Klient
może wcześniej cieszyć się większą jednolito-
ścią środowiska IT, czy obniżyć koszta utrzy-
mania konsolidując aplikacje z Solaris 8, So-
laris 9 i Solaris 10 na jednym systemie, Czas
– ważny wróg jakości w projektach informa-
tycznych – został pokonany...

ARTUR OPALIŃSKI
Autor jest pracownikiem Sun Microsystems. W pra-
cy wdraża elementy platformy Sun. Wolny czas wy-
pełnia mu dwójka małych dzieci.
Kontakt z autorem: Artur.Opalinski@sun.com

www.sdjournal.org 53
Testowanie oprogramowania

Inteligentne
partycjonowanie zasobów
Systemy czasu rzeczywistego
„Złożoność chipów podwaja się co 18 miesięcy, natomiast stopień
złożoności oprogramowania podwaja się co 10 miesięcy…”
Prof. dr Franz Raming
i kontrolnego testowania, kiedy wartość prze-
Dowiesz się: Powinieneś wiedzieć: projektowania i przekodowania oprogramowa-
• Czym jest inteligentne partycjonowanie zaso- • Co to jest system wbudowany; nia okazuje się nadzwyczaj wysoka. Niestety,
bów; • Co to jest zarządzanie wątkami; niewielu programistów i projektantów potrafi
• Jakie daje korzyści. • Czym są priorytety zadań. zdiagnozować i rozwiązać te problemy na po-
ziomie systemu.
Programiści powinni umiejętnie manipulo-
wać priorytetami zadań z możliwą zmianą za-
dardowym załadowaniu, podczas maksymalne- chowania się wątków w systemie, a następnie
go obciążenia oraz w przypadku awarii. dokonywać powtórnego testowania i uściśle-
Poziom trudności Przy równoległym sposobie opracowania, nia własnych modyfikacji. Proces ten może za-
w procesie integrowania podsystemów stwo- jąć kilka roboczych tygodni, co doprowadzi do
rzonych przez każdą grupę programistów nie- zwiększenia nakładów i opóźnienia we wpro-
zmiennie powstają problemy związane z wydaj- wadzeniu gotowego produktu do sprzedaży.

N
a wystawie Embedded World 2006 nością. W rzeczywistości, wiele z tych proble- Problem komplikuje się w związku z tym,
firma QNX Software Systems przed- mów pojawia się dopiero w procesie integracji że wiele wbudowanych systemów tworzą dy-
stawiła technologię inteligentnego
partycjonowania zasobów – rozszerzenie sys-
temu operacyjnego czasu rzeczywistego na po-
�������������������
ziomie jądra. Technologia ta pozwala na two-
rzenie bezpiecznych grup składających się z
kilku aplikacji i wątków, pozwalając jednocze- ����

śnie na maksymalnie efektywne wykorzysta-


nie zasobów procesora. W niniejszym artyku-
le przyjrzymy się dokładniej, co to jest inteli- �
gentne partycjonowanie zasobów i jakie zalety
ma ono dla programistów i projektantów wbu- �������� �
dowanych systemów czasu rzeczywistego.

Zarządzanie wątkami z zadaniami
w systemach wbudowanych �

Z reguły wiele podsystemów, procesów i wąt-



ków, które tworzą nowoczesny system, jest
���
opracowywanych równolegle. Projekt dzie-
li się na liczne grupy robocze, z których każ- ����������������������������������������������������������������������������������������������������������������������������������������������
da w trakcie realizacji ma swoje własne ce- ����
le, schematy wyznaczania priorytetów za- ������� �������
dań i podejście do optymalizacji procesu re- �����
alizacji.
Kiedy podsystemy te integrują się w jednym
Rysunek 1. Priorytetowe planowanie gwarantuje, że najbardziej krytyczne zadania otrzymują dostęp do
środowisku roboczym, wszystkie części syste-
zasobów procesora, lecz także może być przyczyną problemów w przypadku, kiedy zadanie o wysokim
mu powinny zapewniać otrzymanie wymaga- priorytecie niezamierzenie lub zamierzenie korzysta ze wszystkich mocy procesora. Przykładowo,
nej odpowiedzi przy dowolnym scenariuszu zadanie A przeszkadza wszystkim innym zadaniom w uzyskaniu dostępu do procesora po czasie swojego
wykonania, łącznie z pracą systemu przy stan- uruchomienia (czwarta jednostka czasu)

54 10/2008
Inteligentne partycjonowanie zasobów

namiczne, pracujące w sieci urządzenia, któ- wistych aktualnie realizowanych komponen- nologiami, aby zagwarantować, że każdy kom-
re mogą (lub powinny) oferować wsparcie no- tów? I jak urządzenie może bezpiecznie doko- ponent (starszy i nowszy) zawsze będzie miał
wych możliwości funkcjonalnych oprogra- nać takiej aktualizacji podczas partycjonowania dostęp do wymaganych mocy obliczeniowych,
mowania podczas całego okresu korzystania z w systemie operacyjnym, zapewniając stały do- włączając w to czas procesora.
nich. Taka możliwość modernizacji ma wiele stęp i wysoki poziom niezawodności? W takich Dotychczas systemy operacyjne korzystały z
zalet, lecz także pociąga za sobą mnóstwo pro- przypadkach rzadko udaje się dokonać urucho- planowania wielowątkowego i priorytetowego
blemów w trakcie projektowania. Na przykład, mienia nowych komponentów lub mocy obli- w celu realizacji kontroli zadań cykli procesora.
w jaki sposób urządzenie może ładować i uru- czeniowych w celu zapewnienia pewnej pracy Programiści mogą dla każdego wątku określić je-
chamiać nowe komponenty programowe, po- nowych komponentów. Tym samym programi- go priorytet, a następnie planować ich realizację,
mijając tryb pracy i realizację w czasie rzeczy- ści powinni posługiwać się najnowszymi tech- korzystając z określonej strategii projektowania,
na przykład cyklicznego algorytmu (Round-ro-
������������������
bin) lub zasady FIFO. Priorytety określają kolej-
kę gotowych wątków do realizacji w pierwszej
���������������������������������������������������������������������������������������������� kolejności, a strategia projektowania zaleca, jakie
���� wątki o takich samych priorytetach będą wspól-
nie wykorzystywać moc procesora.
Planowanie priorytetowe jest wygodną meto-
� dą określania priorytetów dla każdego zadania.
Powoduje to jednak powstawanie problemów:
� jeżeli priorytet danego zadania jest o chociaż-
��������
by jeden poziom wyższy niż innego, to zada-
� nie o wyższym priorytecie ma możliwość cał-
kowitego zablokowania zasobów procesora za-
� daniu o niższym priorytecie. Za przykład mo-
gą posłużyć dwa procesy – proces A i proces
� B, gdzie A ma niedużo większy priorytet niż
��� B. Jeżeli w procesie A zawartych jest nadmier-
���������������������������������������������������������������������������������������������������������������������������������������������� na ilość zadań lub dochodzi do odmowy wyko-
���� nania, to zablokuje on dostęp do procesu B (jak
������� �������
również do każdego innego procesu o niższym
priorytecie).
����� ������
������ Podobne problemy powstają we wszystkich
obszarach, w których korzysta się z oprogramo-
Rysunek 2. Podczas gdy planowanie stałych partycji przeszkadza w wykorzystaniu wszystkich cykli wania wbudowanego. W samochodzie proces
procesora przez zadanie o wysokim priorytecie (np. przez zadanie A), może ono także doprowadzić do A może odpowiadać za wyświetlacz systemu
obniżenia wydajności, marnując nieużywane cykle procesora w danej grupie (np. w grupie 3) nawigacji, a proces B za odtwarzacz mp3; jeże-
li system nawigacji używa zbyt wiele cykli pod-
czas określania trasy, może on odebrać zasoby, z
���������������������
których powinien korzystać odtwarzacz mp3 i
���������������������������������������������������������������������������������������������� doprowadzi do jego nieprawidłowej pracy. Pod-
����
czas pracy w sieci, proces A może być protoko-
łem TCP/IP i przekierowania, a proces B agen-
tem protokółu SNMP. W układzie sterowania
produkcją, proces A może być obwodem stero-

wania manipulatora robota, a proces B interfej-
sem HMI (ang. human-machine interface).

�������� Usługi, sterowane wątkami o niższym priory-
tecie, łącznie z usługami diagnostycznymi, któ-
� �
re bronią systemu przed błędami programistycz-
nymi lub awariami, mogą być pozbawione mocy


���

����������������������������������������������������������������������������������������������������������������������������������������������
����

�������������������� ������� �������


�������������������������� ����� ����
����������������������� ������

Rysunek 3. Inteligentne partycjonowanie przeszkadza w użyciu przez zadania o wysokim priorytecie


większej ilości zasobów procesora, niż procentowo dla nich określone, oprócz przypadków, gdy
wykorzystywane cykle procesora staną się dostępne w systemie. Na przykład, zadania A i D mogą
być realizowane w czasie przydzielonym grupie 3, ponieważ zadania E i F nie wymagają dostępu do Rysunek 4. Krytyczna aplikacja zajmuje 100%
przypisanych im cykli procesora. W przypadku planowania stałych partycji ten wolny czas byłby utracony zasobów, pracując jako jedyna

www.sdjournal.org 55
Testowanie oprogramowania

procesora na nieokreślony czas, tym samym po- go podejścia, żadne z zadań w dowolnej grupie Inteligentne
wodując ryzyko zaistnienia przerw w pracy sys- nie będzie mogło użytkować więcej niż na stałe partycjonowanie zasobów
temu. Niezależnie od tego, dla jakiego rynku przydzielony tej grupie procent czasu proceso- Inne podejście, zwane partycjonowaniem inte-
przeznaczony jest system, brak zasobów dla za- ra. Na przykład, jeśli grupie przydzielono 30% ligentnym, usuwa te mankamenty, zapewnia-
dań lub procesów jest poważnym problemem. zasobów procesora, a proces w tej grupie zosta- jąc bardziej dynamiczny algorytm planowania.
Aby rozwiązać ten problem, niektóre syste- nie błędnie ukończony, to będzie on mógł wy- Podobnie jak w przypadku statycznego podej-
my operacyjne czasu rzeczywistego, na przy- korzystać nie więcej niż 30% czasu procesora. ścia do partycjonowania, partycjonowanie in-
kład LynxOS, korzystają z mechanizmu stałego Ponieważ algorytm planowania jest stały, teligentne daje programiście systemów możli-
przydzielania zasobów procesora grupom wąt- grupa w żadnym przypadku nie będzie mogła wość zarezerwowania cykli procesora dla pro-
ków, zgodnie ze standardem AIRINC-653. Pro- wykorzystać cykli procesora przydzielonych in- cesu lub grupy procesów. Daje to pewność, że
gramista systemu może dzielić zadania (wąt- nym grupom, nawet jeżeli nie wykorzystają one obciążenie jednego z podsystemów lub grupy
ki) na grupy (partycje), i określać procent cza- przydzielonych im zasobów. W rezultacie obni- nie będzie wpływać na dostępność innych pod-
su procesora dla każdej z grup. Korzystając z te- ża się ogólna wydajność systemu. systemów.
W odróżnieniu jednak od statycznych me-
tod, przy niepełnym obciążeniu procesora pla-
nowanie wykonania wątków w procesorze nie
różni się od zwykłego planowania wykonania
wątków w systemie operacyjnym QNX Neu-
trino, tzn. w procesorze umieszcza się gotowy
do wykonania wątek o maksymalnie wysokim
priorytecie. W rezultacie wątki w jednej grupie
mogą mieć dostęp do każdego z cykli procesora,
które nie są wykorzystywane przez wątki w do-
wolnej innej grupie.
Przy pełnym obciążeniu procesora system
inteligentnego partycjonowania ściśle ograni-
cza przydzielanie czasu procesora grupom wąt-
ków na podstawie ustalonych dla każdej gru-
py wartości. Grupie wątków wydziela się gwa-
rantowany czas procesora w ramach wartości,
które mogą być wykorzystane. Wewnątrz każ-
dej grupy wątki konkurują o czas procesora na
podstawie ustalonych dla każdego wątku prio-
rytetów. Pozwala to programistom na optyma-
lizację przydzielania wątkom priorytetów, jed-
nak nie w ramach całego systemu, a jedynie we-
wnątrz grupy. Zastosowanie technologii inteli-
Rysunek 5. Aplikacja niekrytyczna Go-Slow odebrała aplikacji krytycznej wymagane zasoby gentnego partycjonowania nie wymaga zmia-
ny kodu aplikacji czasu rzeczywistego, nie jest
konieczna także zmiana modelu programowa-
nia lub metod debugowania, już znanych pro-
gramistom.
Podejście to, po raz pierwszy zastosowane
przez firmę QNX Software Systems, łączy za-
lety wskazanych wcześniej metod i daje progra-
mistom systemów następujące możliwości:

• zapewnienie gwarantowanego przydzia-


łu czasu procesora, kiedy system jest moc-
niej obciążony – gwarantuje to, że wszyst-
kie grupy otrzymają przydzielone im zaso-
by procesora;
• wykorzystanie planowania priorytetowe-
go czasu rzeczywistego, kiedy system nie
jest obciążony, co pozwala systemowi na
wykorzystanie tego samego trybu plano-
wania, z którego korzystają obecnie;
• wykorzystanie wolnych zasobów proceso-
ra, zarezerwowanych dla grup, które nie
do końca zostały załadowane, co daje moż-
liwość przydzielenia ich innym grupom,
potrzebującym ich do pracy przy maksy-
Rysunek 6. Aplikacja niekrytyczna Go-Slow nie wykorzystuje zasobów procesora, które dzielone są malnym obciążeniu, i pozwala wykorzy-
między dwie pozostałe grupy stać 100% mocy procesora;

56 10/2008
Inteligentne partycjonowanie zasobów

• łączenie możliwości planowania inteli- aplikacji i usług. Awaryjne komponenty syste- (Go-Slow). Jak widać na ilustracji (Rysunek 4),
gentnego partycjonowania z istniejącymi mu są izolowane, tzn. nie będą one mogły wy- podczas pracy naszej aplikacji krytycznej zajęte
systemami bez zmian kodu, w rezultacie korzystać więcej czasu procesora, niż im przy- są wszystkie zasoby procesora.
czego aplikacje i usługi systemowe moż- pisano. W ten sposób system zachowuje goto- Samochód porusza się z prędkością 83 km/h.
na po prostu uruchomić w grupie, a pro- wość do pracy w każdej sytuacji. Zwiększmy teraz obciążenie systemu, wykorzy-
gram planujący zagwarantuje, że grupy bę- Wykorzystanie mechanizmu inteligentnego stując aplikację niekrytyczną (Go-Slow). Jak wi-
dą miały dostęp do przydzielonych im za- partycjonowania jest bardzo proste. Przy star- dać na Rysunku 5, wszystkie zasoby procesora są
sobów; cie systemu wspierającego inteligentne party- zajęte i aplikacji krytycznej brak zasobów proceso-
• dynamiczne dodawanie i konfiguracja gru- cjonowanie zasobów automatycznie tworzo- ra. Samochód porusza się z prędkością 19 km/h.
py w procesie wykonania, pozwalające sys- na jest jedna grupa z przydzielonymi 100% za- Uruchamiamy teraz trzy aplikacje z zasto-
temowi na regulację zużycia zasobów pro- sobów procesora, która nosi nazwę System. W sowaniem inteligentnego partycjonowania za-
cesora w odpowiedzi na awarię lub inne grupie tej uruchamiane są wszystkie procesy. sobów. W systemie, jak opisano wyżej, tworzy-
sytuacje; W każdej chwili można tworzyć inne grupy i my trzy grupy procesów: System o wartości 20
• zagwarantowanie, że operacje przywraca- przydzielać im zasoby, korzystając z następu- % czasu procesora, Critical i Untrusted z warto-
nia będą mieć do dyspozycji cykle proce- jącego polecenia: ściami 40% czasu procesora dla każdego z pro-
sora, potrzebne im do naprawienia błędów cesów. Aplikację Go-Slow uruchamiamy w gru-
systemowych, poprawiając tym samym aps create –b40 Critical pie Untrusted, aplikację krytyczną Car urucha-
średni czas naprawy systemów o wysokim aps create –b40 Untrusted miamy w grupie Critical, a wszystkie pozostałe
stopniu dostępności; procesy i wątki będą pracować w grupie System.
• wstrzymywanie wykonania kodu mają- Te polecenia utworzą dwie grupy (Critical, Jak widać na Rysunku 6, aplikacja Go-Slow nie
cego na celu przechwycenie całego czasu Untrusted) z dostępem do 40 % czasu proce- wykorzystuje zasobów procesora i wolne zasoby
procesora, poprzez odmowę wykonania. sora dla każdej. dzielone są między pozostałe dwie grupy proce-
Aby uruchomić aplikację w konkretnej gru- sów. Procesor jest wówczas obciążony w 100%.
Inteligentne partycjonowanie zasobów po- pie, wystarczy skorzystać z dobrze znanego Zwiększmy obciążenie systemu za pomocą
zwala na tworzenie bezpiecznych grup z kilku użytkownikom QNX polecenia on. aplikacji Go-Slow. W związku z tym, że inte-
aplikacji i wątków. Co to są bezpieczne grupy? ligentne partycjonowanie zapewnia przydziele-
Bez stworzenia grup składających się z kilku on -Xaps=Critical Car nie zasobów procesora grupie aplikacji, aplika-
aplikacji i wątków, awaryjne aplikacje mogą po- on -Xaps=Untrusted Go_slow cji Go-Slow będą przydzielone zasoby proceso-
zbawić kluczowe aplikacje niezbędnych zaso- ra zgodnie z ustalonymi wartościami. W związ-
bów procesora. Na przykład, błędy kodu apli- Poniższy przykład ilustruje, w jaki sposób ku ze zwiększonym obciążeniem systemu i
kacji mogą przypadkowo stać się przyczyną po- działa inteligentne partycjonowanie zasobów. brakiem wolnych zasobów procesora, wszyst-
wstawania takich warunków, które doprowa- Uruchomimy w systemie trzy aplikacje bez kie grupy aplikacji otrzymują zasoby zgodnie
dzą do zatrzymania pracy całego systemu. Po- inteligentnego partycjonowania zasobów. Pierw- z ustalonymi wartościami (Rysunek 7). Apli-
dobnie ataki DoS (Odmowa usługi/Denial of Se- sza aplikacja to monitor zasobów systemowych kacja krytyczna Car zaczęła działać wolniej, co
rvice) mogą obciążyć system zadaniami siecio- (APSMonitor), druga aplikacja (Car) to proces możemy zaobserwować po prędkości ruchu sa-
wymi i tym samym pozbawić kluczowe aplika- krytyczny, (brak przecinka) który prezentuje mochodu, jednak nasza aplikacja krytyczna
cje dostępu do zasobów procesora. Inteligent- ruch samochodu, trzeci proces – niekrytyczny, działa i nadal ma dostęp do zasobów, które zo-
ne partycjonowanie zasobów pozwala na ogra- lecz wymagający znacznych zasobów systemo- stały jej przydzielone.
niczenie tych zagrożeń i ochronę kluczowych wych, wykorzystywany do obciążenia systemu Na podstawie zaprezentowanego przykła-
du można wywnioskować, że inteligentne
partycjonowanie pozwala programistom sys-
temów wbudowanych na tworzenie bezpiecz-
nych grup z kilku aplikacji lub wątków i gwa-
rantuje efektywne przydzielenie czasu proceso-
ra tym grupom, którym są one potrzebne. Jeże-
li na etapie projektowania przy określaniu prio-
rytetów wątków wystąpiły błędy, to przy zasto-
sowaniu technologii inteligentnego partycjono-
wania można je poprawić na etapie konfigu-
rowania systemu, bez konieczności ponownej
kompilacji komponentów programowych.
Podsumowując należy powiedzieć, że inteli-
gentne partycjonowanie to pierwszy przykład
podejścia do partycjonowania zasobów zgodne-
go z modelem planowania standardu POSIX.
Dzięki temu istniejące systemy na bazie POSIX
i QNX Neutrino będą mogły skorzystać z zalet
nowatorskiego rozwiązania bez wprowadzania
zmian do kodu i architektury aplikacji.

ROMAN KOŃSZYN
Autor jest wykładowcą w Centrum Szkoleniowym
firmy SWD Software.
Rysunek 7. Podczas pracy procesowi Go-Slow przydzielona jest ustalona ilość zasobów Kontak z autorem: info@swdsoft.pl

www.sdjournal.org 57
UML

Język UML 2.x


w dydaktyce akademickiej
Język UML to chleb codzienny analityka i projektanta systemów
informatycznych. Jak jednak sprawić, by początkujący adepci zawodu
nie mieli problemów z jego opanowaniem?

bie i stronnicze. Ich mnogość potwierdza te-


Dowiesz się: Powinieneś wiedzieć: zę, iż tempo uaktualniania i modyfikowania
• Na jakie elementy języka UML kłaść nacisk • Czym jest język UML; UML – jak również złożoność tego języka i
podczas nauki; • Z jakich diagramów składa się język UML i jak potencjalne trudności początkujących użyt-
• Czym jest wersja Light języka UML; się te diagramy stosuje. kowników, wynikające z tego – zostały nie-
• Jak zorganizować szkolenie z zakresu UML. doszacowane.

Proces dydaktyczny
zwaniem w nauczaniu analizy i projektowa- – założenia metodologiczne
nia systemów informatycznych. Z drugiej Istota nauczania języka UML 2.x na Uniwer-
Poziom trudności strony, ani zastosowania biznesowe ani prak- sytecie Gdańskim wynika z doświadczenia i
tyczne studia przypadków nie wykorzystu- dostępnej wiedzy w zakresie dydaktyki ana-
ją całego, zróżnicowanego instrumentarium lizy i projektowania systemów informatycz-
języka UML 2.x. Wprost przeciwnie – wy- nych. Podstawowe założenia tego podejścia

J
ęzyk UML (Unified Modeling Language), daje się, że także w tym przypadku znajduje obejmują:
zaproponowany przez Boocha, Jacobso- zastosowanie reguła metodologiczna 20 – 80,
na i Rumbaugh, przyciągnął uwagę za- stanowiąca, że 20% kategorii UML wystarcza • zrozumienie istoty procesów biznesowych
równo środowisk akademickich, jak również w 80% zastosowań. Pozostałe 80% kategorii i systemowych;
praktyków w środowisku analityków i projek- modelowania UML wykorzystuje się z silnie • rozwiązywanie postawionych praktycz-
tantów systemów informatycznych. Specyfi- zróżnicowaną częstotliwością. Obie te prze- nych problemów biznesowych;
kacje języka UML pozwalają na dokumen- słanki skłoniły badaczy do zaproponowania • nieustanną aktualizację posiadanych zaso-
towanie systemu informatycznego w kate- zwięzłych wersji UML. Wersje uproszczone bów;
goriach przypadków użycia, ich scenariuszy, zwykle poleca się jako podstawowy element • pracę w grupach, zorientowaną na współ-
klas, interakcji oraz innych diagramowych kursów wprowadzających w tematykę two- pracę interpersonalną w zakresie specy-
kategorii notacyjnych, wybranych do tego ce- rzenia systemów informatycznych, podczas fikowania i rozwiązywania problemów
lu spośród aktualnego zbioru 13 typów dia- gdy wersję kompletną – uczestnikom stu- (symulacja funkcjonowania rzeczywi-
gramów języka UML w wersji 2.1. Narzędzie diów na poziomie magisterskim. stych zespołów projektowych);
to sprawdza się w modelowaniu znacznego Na podstawie rzeczywistych projektów • silne wsparcie profesjonalnego oprogra-
zakresu rozwiązań z zakresu tworzenia syste- oraz doświadczenia dydaktycznego moż- mowania typu CASE (Computer-Aided
mów informatycznych, odpowiadających po- na stwierdzić, iż jedynie wybrane elementy Software Engineering);
trzebom gospodarki opartej na wiedzy. Stan- kompletnego potencjału języka UML znajdu- • zaangażowanie zasobów e-learningingo-
dard jest nieustannie monitorowany, rozwi- ją zastosowanie w cyklu życia systemu. Auto- wych w proces dydaktyczny.
jany, modyfikowany i ulepszany przez orga- rzy notacji uproszczonych zazwyczaj propo-
nizację OMG (Object Management Group). nują ograniczony zestaw diagramów UML Zakres kursu był nieustannie rozwijany, m.
UML jest nie tylko ugruntowanym standar- wraz ze zbiorem odpowiednich kategorii po- in. poprzez włączenie technik i metodologii
dem w dziedzinie oprogramowania, lecz rów- jęciowych, przypisywanych do tych diagra- pokrewnych UML, takich jak:
nież najpopularniejszym językiem nauczania mów – zazwyczaj pojęć, które zdaniem au-
inżynierii oprogramowania, a w szczególno- torów są najbardziej istotne w procesie na- • modelowanie procesów biznesowych
ści analizy i projektowania systemów infor- uczania i osiąganiu celów w praktycznych (BPM);
matycznych na różnych poziomach studiów projektach. • modelowanie analityczne;
akademickich. Jak zaznaczono wcześniej, nie występu- • Rational Unified Process (RUP).
UML 2.x jako całość jest złożonym skła- je wspólne stanowisko autorów w zakresie
dniowo i semantycznie językiem graficz- zawartości uproszczonej wersji UML, a wy- Wymienione powyżej założenia procesu dy-
nym, a – co za tym idzie – poważnym wy- mienione propozycje są niezależne od sie- daktycznego oraz zasoby zostały wkompo-

58 10/2008
Jzyk UML 2.x w dydaktyce akademickiej

nowane w podejście dydaktyczne, zorien- ła uzupełniona o pokrewne metody, techniki daktycznym, można było zainicjować proces
towane na rozwiązywanie problemów, jak i metodologie obiektowe, takie jak BPM, mo- dydaktyczny, realizowany w laboratoriach
wskazano na Rysunku 1. dele analityczne oraz RUP. Materiały źródło- komputerowych. Wszystkie laboratoria wy-
Kluczowym elementem omawianego po- we służyły jako podstawa do autonomicznej posażono w narzędzie CASE – Enterprise
dejścia jest naturalnie obszerna wiedza w za- działalności dydaktycznej, takiej jak wykła- Architect, wspomagające proces nauczania.
kresie języka UML. Rolę stymulującą pełniły dy, autorski podręcznik kursowy, zestaw stu- Diagramowa dokumentacja UML 2.0 roz-
ponadto liczne podręczniki dotyczące UML diów przypadku i ćwiczeń oraz content e-le- wiązywanych studiów przypadków jest or-
2. Tematyka, oparta na języku UML, zosta- arningowy. Dzięki niniejszym zasobom dy- ganizowana w oparciu o model architektu-
ry 4+1 Kruchtena, jak przedstawiono na Ry-
sunku 2.
������������
����������� Tym samym, proces tworzenia systemu ini-
���������
���������� cjowany jest w ramach perspektywy przypad-
ków użycia, która to perspektywa jest usytu-
������������������ owana centralnie wobec innych perspektyw.
������������ Istotną rolę w specyfikowaniu wymagań peł-
���������������� nią diagramy przypadków użycia, dokumen-
�������� ��������� tacja scenariuszy przypadków użycia – a także
������� �������
modele procesów biznesowych i analityczne.
���������
���� Wychodząc od wyszczególnionych i szcze-
������������ gółowo udokumentowanych przypadków uży-
������� ����������
cia, można przygotować wybrane diagramy
�����������
spośród 12 pozostałych ich rodzajów, organi-
���������������������� zując te diagramy w odpowiednie perspekty-
����������� wy. Perspektywy obejmują zarówno statykę,
�������������������
�������������������� jak i dynamikę systemu. Szczegółowe diagra-
my dalszych perspektyw są naturalnie wspie-
������������������ rane przez zastosowane narzędzie CASE.
����������������� W rezultacie procesu, przedstawionego na
���������
���������������� ������� ���������� Rysunku 1, generowana jest dokumentacja
konkretnego studium przypadku. Dokumen-
������������������
tacja ta jest następnie iteracyjnie dopracowy-
�������������������������� wana, prezentowana przez grupę oraz oce-
�������������������� niana. Należy poruszyć najistotniejsze aspek-
ty systemu, podczas gdy liczba godzin, prze-
Rysunek 1. Założenia i rezultaty akademickiego kursu języka UML 2.x znaczona na przygotowywanie różnych ele-
mentów poszczególnych dokumentacji, jest
elastyczna i dostosowywana do charaktery-
������������ styki danego projektu.
���������������� Wybrane rozwiązania studiów przypadku,
���������������������������� zaprezentowane przez studentów, włączane
����������������
���������������������� są do puli projektów z zakresu UML 2, prze-
������������������� chowywanej na platformie e-learningowej.
������������������� Zasadnicze zalety zastosowanej metody
�����������������
������������������������ (Rysunek 1) są następujące:
����������������������������
�������������������� ���������������� • metoda stymuluje studentów do aktyw-
�������������������
nej i kreatywnej pracy grupowej, jak
również zasadniczo zwiększa wiedzę i
��������������������������� umiejętności w zakresie UML;
��������������������
������������ ����������������
• praca oparta na studiach przypadku daje
������������������ szansę na symulowanie warunków prak-
��������������������
tycznej pracy projektowej i realizowania
zadań, na które studenci mogą natrafić
w przyszłej pracy zawodowej;
�������������������� • ogólna wydajność grupy rośnie, gdyż każ-
�����������������������
�������������������������� ���������������� dy jej członek jest dopingowany i kontrolo-
wany przez pozostałych członków grupy.

������������������������ Wybrane wyniki badania


���������������������� Kursy z zakresu języka UML (wersja 2.1, 2.0
�������������������
���������������� i wcześniejsze) są realizowane na Uniwersy-
tecie Gdańskim od 2001 roku. Wypracowa-
ne podejście dydaktyczne było aktualizowa-
Rysunek 2. Perspektywy architektury systemu wraz z zalecanymi diagramami Źródło: (Wrycza i in., 2005) ne i udoskonalane wraz z każdą kolejną wer-

www.sdjournal.org 59
UML

sją UML. Autorzy niniejszego artykułu zi- rze ankietowym wśród studentów specjalno- • wskazania diagramów stanowiących naj-
dentyfikowali i przeanalizowali szereg pro- ści Informatyka Ekonomiczna. Jego rezultaty lepszą podstawę do generowania kodu
blemów dydaktycznych, wynikających z pozwoliły nie tylko na dogłębną ocenę kursu źródłowego.
przeprowadzonego badania. Jednym z pod- UML przez jego uczestników, lecz także sta-
stawowych wniosków jest fakt niemożno- nowiło podstawę do dokonania rewizji aktual- Obszerna graficzna analiza statystyczna wraz
ści przyswojenia przez studentów zasad sto- nie stosowanego podejścia. z komentarzami została zaprezentowana w
sowania pełnego zestawu diagramów UML. Grupa docelowa obejmowała 180 studen- innych opracowaniach autorów. Poniżej ko-
Dodatkowo każdy z rodzajów diagramów tów, zarówno z uczelni prywatnych, jak i pu- mentowane są jedynie wybrane wyniki.
UML wyposażono w rozbudowany zestaw blicznych, posiadających wiedzę i kompe- Kwestionariusz zainicjowano pytaniem o
kategorii modelowania UML, spośród któ- tencje w zakresie zarówno obiektowego, jak złożoność języka UML (Rysunek 3). Uznanie
rych uczestnicy szkoleń wybierają zawężo- i strukturalnego podejścia do tworzenia sys- języka UML za nadmiernie złożony ma funda-
ny podzbiór kategorii i stosują je w praktyce, temów informatycznych. Kwestionariusz an- mentalne znaczenie z punktu widzenia wpro-
podczas gdy inne są ignorowane. W ramach kietowy składał się z 17 podstawowych pytań. wadzania wersji Light języka UML. Odpowie-
definiowania założeń przyszłej wersji Light Pytania dotyczyły głównie pojęć związanych z dzi respondentów potwierdziły hipotezę auto-
autorzy przyjęli następujące trzy podstawo- wersją Light języka UML, wzajemnych zależ- rów – 51% ankietowanych uważało UML za
we ograniczenia: ności pomiędzy podejściem strukturalnym a średnio trudny, 33% za trudny, podczas gdy
obiektowym, jak również potencjalnych roz- 7% za bardzo trudny. A zatem dla ponad 90%
• wersja Light powinna składać się wyłącz- szerzeń i technik pochodnych w stosunku do studentów zawężona wersja języka UML, tj.
nie z najpowszechniej stosowanych w UML. W celu dokonania precyzyjnej oceny UML Light, stanowiłaby cenną asystę w przy-
praktyce diagramów, natomiast składnia zakresu proponowanej wersji Light dokonano swajaniu języka.
poszczególnych diagramów powinna być analizy następujących kwestii: Ankietowani studenci mieli możliwość
maksymalnie zawężona; przyswojenia na zajęciach i/lub w praktyce
• UML 2.x Light powinna w szerokim za- • oceny poziomu złożoności języka UML; wszystkich 13 rodzajów diagramów języka
kresie wspomagać główne dyscypliny • adekwatności liczby rodzajów diagra- UML. Liczba diagramów jest w sposób natu-
metodyki RUP, tj. specyfikację wyma- mów języka UML 2.x; ralny powiązana ze złożonością języka. Więk-
gań oraz analizę i projektowanie; • oceny użyteczności poszczególnych ro- szość z badanych (ponad 57%) uznała, iż UML
• wersja taka powinna być w pełni kompa- dzajów diagramów; składa się ze zbyt wielu rodzajów diagramów.
tybilna z pełną specyfikacją języka UML • identyfikacji diagramów przeciążonych Pozostali respondenci akceptowali pełny ze-
2.x. zaawansowanymi kategoriami pojęcio- staw diagramów UML, nie odnosząc się jed-
wymi; nakże do wpływu i znaczenia liczności za-
Dla określenia zakresu wersji UML 2.x Light • wytypowania diagramów przyjaznych awansowanych kategorii modelowania składa-
autorzy przeprowadzili badanie o charakte- użytkownikowi; jących się na poszczególne diagramy.
Skoro poszczególne rodzaje diagramów
użytkowane są ze zróżnicowaną intensywno-
ścią – niektóre mają charakter uniwersalny,
inne stosowane są w specyficznych sytuacjach
– postawiono pytanie o użyteczność poszcze-
gólnych rodzajów diagramów. Badanie wyka-
zało, iż w opinii respondentów najbardziej
użyteczne są następujące diagramy:

• diagramy klas (62% pozytywnych wska-


zań respondentów);
• diagramy przypadków użycia (56%);
Rysunek 3. Oszacowanie stopnia trudności UML • diagramy czynności (26%);
• diagramy sekwencji (21%);

Studium potwierdziło powszechnie uznawa-


ną rolę przewodnią pełnioną przez dwa rodza-
je diagramów – diagramy klas oraz diagramy
przypadków użycia. W istocie stanowią one
dwa podstawowe graficzne formalizmy mode-
lowania odpowiednio struktury oraz dynami-
ki systemu informatycznego. Dodatkowo dia-
gramy przypadków użycia inicjują iteracyjno-
przyrostowy cykl życia metodyki RUP (Ratio-
nal Unified Process), pełniąc tym samym spe-
cyficzną rolę w każdym projekcie. Z kolei jako
najmniej użyteczne postrzegane są:

• diagramy maszyny stanowej (28%);


• diagramy harmonogramowania (19%);
• diagramy rozlokowania (13%);
Rysunek 4. Ocena stopnia nadmiarowości kategorii modelowania w diagramach języka UML • diagramy struktur połączonych (12%).

60 10/2008
Jzyk UML 2.x w dydaktyce akademickiej

Niewątpliwie wciąż niedoceniana jest ro- mów klas są tam w szerokim zakresie imple- współczesnej informatyki. Ocena diagramów
la diagramów maszyn stanowych oraz dia- mentowane praktycznie. UML z tego punktu widzenia powinna uła-
gramów rozlokowania, choć i tak nie pre- Przyjazność dla użytkownika jest jednym twić wytypowanie zakresu wersji UML Light.
tendują one do roli najbardziej uniwersal- ze słów kluczowych a zarazem wyzwaniem Opierając się na wynikach badania należy
nych. Podczas gdy diagramy maszyny sta-
nowej są bogate semantycznie, lecz niechęt- �������������
nie stosowane przez początkujących anali-
tyków i projektantów, diagramy rozlokowa- ��������������
nia są bliższe fizycznemu wdrożeniu syste-
mu w zgodzie z metodyką RUP. Stąd dwa
powyższe rodzaje diagramów należy szcze-
gólnie polecić realizującym kursy z zakresu
programowania. ����������������� ����������������
W związku z czwartym kryterium, stu-
dentów poproszono o wskazanie diagramów
przeciążonych zaawansowanymi kategoria-
mi modelowania (Rysunek 4). W ocenie stu-
dentów cecha ta dotyczy przede wszystkim ������� ����������������
�������
����������������
�������
poszczególnych rodzajów diagramów inte- ����������� �����������
�����������������

�����������
rakcji. I tak, 32% respondentów uważało, że
nadmierność pojęciowa towarzyszy przede
���������������� ���������������� �������
wszystkim diagramom sekwencji (32% od- �������
powiedzi), podczas gdy odpowiednio 28% ���������
i 27% respondentów oceniło w ten sposób
�������
diagramy sterowania interakcją oraz diagra- �������������������
����������
my komunikacji. Spośród diagramów inte-
rakcji wyłącznie diagram harmonogramowa-
nia został uznany za stosunkowo nieskompli-
kowany. Problem nadmiarowości nie doty-
czył również semantycznie bogatych diagra- ������� �������� ������� ��������
mów obiektów, diagramów przypadków uży- ����������� ������������ ����������������� �����������
cia oraz diagramów klas. Tylko odpowiednio
14%, 18% oraz 20% respondentów zakwali- �������
�������
fikowało te diagramy jako nadmiarowe. Ak- �����������������
�������
���������
ceptacja dla znacznej złożoności diagramów
klas wiąże się z doświadczeniem studentów
w dziedzinie programowania w języku obiek-
towym Java. Kategorie modelowania diagra- Rysunek 5. Diagramy UML 2.x zakwalifikowane do wersji Light

Tabela 1. Podstawowe i zaawansowane kategorie modelowania w kontekście wersji Light języka UML 2.x
Diagram klas Diagram przypadków Diagram czynności Diagram sekwencji
użycia
Podstawowe kategorie Klasa Przypadek użycia Czynność Aktor
modelowania Atrybut Aktor Podczynność Klasa
Operacja Asocjacja binarna Początek Klasa graniczna
Asocjacja binarna Koniec Klasa sterująca
Nazwa asocjacji Przepływ sterowania Klasa przechowująca
Role Linia życia
Nawigacja Ośrodek sterowania
Liczebność Komunikat synchroniczny
Agregacja
Kompozycja
Zaawansowane kategorie Zobowiązanie Zależność zawierania Decyzja Komunikat asynchroniczny
modelowania Widoczność Zależność rozszerzania Łącznik Komunikat zwrotny
Atrybut/operacja statyczna Uogólnienie Złączenie Komunikat utracony
Asocjacja n-arna Rodzaje aktorów Akcja Komunikat znaleziony
Klasa asocjacyjna Liczebność Przekaźnik danych Komunikat opcjonalny
Asocjacja zwrotna Nawigacja Parametr czynności Komunikat oczekujący
Asocjacja wielokrotna Realizacja Waga Warunek
Kwalifikacja Sygnał Samowywołanie
Uogólnienie Bufor centralny Iteracja
Zależność Składnica danych Rozgałęzienie
Realizacja Partycja Fragment wyodrębniony
Obszar rozszerzenia Przywoływane wystąpienie interakcji
Obszar przerwania Brama
Manipulator wyjątków

www.sdjournal.org 61
UML

podkreślić, że diagramy przypadków użycia Wspomniany już wielokrotnie pragmatycz- Rozwój narzędzi CASE zainspirował bada-
zostały uznane za najłatwiejsze do opanowa- ny wymiar diagramów klas i ich ścisły związek nia oraz prace nad generowaniem kodu źró-
nia i zarazem przyjazne użytkownikowi spo- z programowaniem spowodował, że osiągnęły dłowego na podstawie dokumentacji syste-
śród 13 diagramów UML 2.x. Niemalże 3⁄4 re- one również wysoką ocenę – 66% responden- mowej, przygotowanej z wykorzystaniem ję-
spondentów doceniło tą cechę, tak niezbęd- tów zakwalifikowały je jako łatwe lub bardzo zyka UML. Diagramy tego języka dają solid-
ną szczególnie w dziedzinach modelowania łatwe w użytkowaniu. Studenci docenili rów- ną podstawę do generowania kodu źródłowe-
biznesowego oraz specyfikacji wymagań. W nież (59%) znaczenie diagramów czynności ja- go na bazie diagramowej specyfikacji syste-
istocie, diagramy te stanowią wspólną plat- ko szkieletu dla algorytmów oraz specyfikacji mu. Respondenci uznali następujące rodza-
formę porozumienia poszczególnych udzia- programistycznych. Przyjazność dla użytkow- je diagramów za dobra podstawę do tworze-
łowców systemu – tj. właścicieli, menadże- nika pewnych typów diagramów UML powin- nia specyfikacji programistycznych:
rów, przyszłych użytkowników oraz infor- na być ponownie rozważona. Uwaga ta doty-
matyków. Współpraca tych grup udziałow- czy w szczególności diagramów sterowania • diagram klas (66% odpowiedzi pozy-
ców staje się dobrą podstawą dla osiągnięcia interakcją (43%), diagramów rozlokowania tywnych);
poprawności, precyzji, spójności oraz kom- (39%) oraz diagramów struktur połączonych • diagramy czynności (42%);
pletności dokumentacji w konsekwencji za- (38%). Wspomniane rodzaje diagramów nale- • diagramy sekwencji (34%);
stosowania merytorycznie powiązanych dia- ży traktować jako naturalnych kandydatów do • diagramy komunikacji (34%);
gramów UML. wykluczenia z wersji Light języka UML 2.x. • diagramy komponentów (23%).

Podsumowanie
Bibliografia Ostatecznie, w wyniku przeprowadzonych
• Alphonce C., Ventura P.: QuickUML: A Tool to Support Iterative Design and Code Development, badań proponuje się umieszczenie w wer-
Proceedings of OOPSLA, Anaheim 2003, s. 80-81; sji Light języka UML czterech rodzajów dia-
• Ambler S. W.: The Elements of UML 2.0 Style, Cambridge University Press, Cambridge 2003; gramów:
• Booch G., Rumbaugh J., Jacobson I.: The UML Reference Manual. 2nd edition, Addison-Wesley,
Boston 2004;
• diagramów przypadków użycia;
• Brewer J., Lorenz L.: Using UML and Agile Development Methodologies to Teach Object-Orien-
ted Analysis & Design Tools and Techniques, Proceedings of CITC4, Lafayette 2004, s. 54-57; • diagramów klas;
• Burton P. J., Bruhn R. E.: Using UML to Facilitate the Teaching of Object-Oriented Systems Analy- • diagramów czynności;
sis & Design, Journal of Computing Sciences in Colleges, 2004, 19 (3), s. 278-290; • diagramów sekwencji.
• DeLooze L. L., Minimal UML Diagrams for a Data-Driven Web Site, SIGITE, 2005, s. 229-232;
• Dennis A.: Systems Analysis and Design with UML Version 2.0, Wiley, Nowy Jork 2005; Wspomniane cztery rodzaje diagramów (Ry-
• Dobing B., Parsons J.: How UML is Used, Communications of ACM, 2006, 49 (5), s. 109-113.
• Eriksson H., Penker M., Lyons B., Fado D.: UML 2 Toolkit, OMG Press, Indianapolis 2004; sunek 5) pozwalają na modelowanie wszyst-
• Flint S., Gardner H., Boughton C.: Executable/Translatable UML in Computing Education, Confe- kich podstawowych aspektów systemu, tj.
rences in Research and Practice in Information Technology, 2004, s. 69-75; specyfikacji wymagań oraz analizy i projek-
• Kontio M.: Architectural Manifesto: Designing Software Architectures. Part 5. Introducing the 4+1 towania zarówno struktury, jak i dynamiki
View Model, http://www-128.ibm.com/developerworks/wireless/library/wi-arch11, 2005 (stan na systemu. Dostarczają również odpowiedniej
sierpień 2007);
ilości danych pod kątem generowania kodu.
• Kruchten P.: Architectural Blueprints - the ‘4+1’ View Model of Software Architecture, IEEE So-
ftware, 1995, 12 (6), s. 42-50; Nie występuje konieczność wprowadza-
• Kruchten P.: The Rational Unified Process, Addison-Wesley, Boston 2004; nia wyczerpującej listy dostępnych kategorii
• LeBlanc C., Stiller E.: UML for Undergraduate Software Engineering, Proceedings of JCSC 15, modelowania do specyfikacji systemowych,
Consortium for Computing in Small Colleges, 2000, s. 8-18; przygotowanych z wykorzystaniem wersji Li-
• OMG, Object Management Group: The UML 2.1 Superstructure Convenience Document, http:// ght języka UML 2.x. Podstawowe kategorie
www.omg.org/cgi-bin/doc?ptc/2006-04-02, 2006 (stan na sierpień 2007);
• Poyla G.: How to solve it, Princeton University Press, Nowy Jork 1957; modelowania są niezbędne do tworzenia dia-
• Sparx Systems Enterprise Architect 7.0, http://www.sparxsystems.com.au (stan na sierpień gramów na poziomie konceptualnym, pod-
2007); czas gdy zaawansowane kategorie modelowa-
• Tabrizi M., Collins C., Ozan E., Li K.: Implementation of Object-Orientation Using UML in Entry nia – do tworzenia diagramów na poziomie
Level Software Development Courses, Proceedings of SIGITE, Salt Lake City 2004, s. 128-131; wdrożeniowym. Propozycja podziału katego-
• Trujillo J.: A Report on the First International Workshop on Best Practices of UML, SIGMOD Re-
rii modelowania pomiędzy podstawowe oraz
cord, 2006, 35 (3), s. 48-50;
• Turner S. A., Perez-Quinones M., Edwards S. H.: minimUML: A Minimalist Approach to UML Dia- zaawansowane może stanowić punkt wyj-
gramming for Early Computer Science Education, ACM Journal of Educational Resources in ścia w określaniu zakresu pojęciowego po-
Computing, 2005, s. 1-24; szczególnych diagramów, jak przedstawiono
• Wrycza S. (red.): UML 2.1. Ćwiczenia, Helion, Gliwice 2006; w Tabeli 1.
• Wrycza S., Marcinkowski B.: UML 2 Teaching at Postgraduate Studies – Prerequisites and Practi- Zgodnie z wynikami badania, na Rysunku 5
ce, Proceedings of ISECON 2005, 22, AITP Foundation for Information Technology Education,
Columbus, rekord 5123, 2005, s. 1-7;
zaprezentowano wszystkie cztery rodzaje dia-
• Wrycza S., Marcinkowski B.: UML 2 Academic Course – Methodological Background and Survey gramów (diagramy klas, przypadków użycia,
Benchmarking, Proceedings of ISECON 2006, 23, AITP Foundation for Information Technolo- czynności i sekwencji) oraz towarzyszące im
gy Education, Columbus, rekord 5125, 2006, s. 1-6; kategorie modelowania w ramach proponowa-
• Wrycza S., Marcinkowski B.: Towards a Light Version of UML 2.x: Appraisal and Model, Pro- nej wersji Light języka UML 2.x.
ceedings of the 2nd AIS SIGSAND European Symposium on Systems Analysis and Design,
Gdańsk 2007, s. 46-53;
• Wrycza S., Marcinkowski B., Wyrzykowski K.: Język UML 2.0 w modelowaniu systemów informa-
tycznych, Helion, Gliwice 2005;
• Wrycza S., Rybiński W.: Information Systems Development Education: Assumptions and Practice, STANISŁAW WRYCZA
(w) Stowell F. A., West D., Howell J. G. (red), Systems Science. Addressing Global Issues. Ple- BARTOSZ MARCINKOWSKI
num Press, Nowy Jork 1993, s. 475-481. swrycza@univ.gda.pl
bmarc@univ.gda.pl

62 10/2008
��������������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������
��������������������������������������������������������������������������������������������
������������
�����������������������������������������������������������������

�����������������������������������
������������������������������

�����������������������������������������������������������������������������������������������
��������������������������������������������������������������������������

�����������������������������

��������������������������������������������������������������������������������������������������
����������������������������
������������������������������������������������������������
�����������������������������������������������������������������������������
��������������������������������������
���������������������������������������������������������
������������������������������������������������
����������������������������������������������������
���������������������������������������
�������������������������������������������

����������

���������������������������������������������������������������������������������������
�����������������������������������������
�������������������������������������������
��������������������������������������������������������������������������
�������������������������

����������������������������������������������������������������
�����������������

�������������������������������������������
��������������������������������������������������������������������������������������
�����������������������������������������������������������������������������������������������
�����������������������������������������������������
Warsztat

Własny „słup
ogłoszeniowy”
Konta użytkowników oraz administracja
Aż trudno uwierzyć, że na 5 stronach artykułu można zadbać o
bezpieczeństwo aplikacji, tworząc działający mechanizm rejestracji oraz
autoryzacji. Pewnie trudno Ci będzie uwierzyć, że możesz osiągnąć ten
efekt w Twoich aplikacjach, przy niewielkich nakładach czasu i pracy.
sfGuardPlugin. Jeżeli dokładniej przyjrzymy
Dowiesz się: Powinieneś wiedzieć: się jego budowie, dostrzeżemy podobieństwo
• W jaki sposób stworzyć w pełni funkcjonalny • W jaki sposób zainstalować symfony; ze strukturą aplikacji (szczegóły zawarliśmy w
system autoryzacji; • Wszystko, co znajdowało się w części I artykułu. artykule dotyczącego Pluginów).
• Zadbać o przejrzyste adresy stron w aplikacji; Plugin zawiera schemat bazy danych oraz da-
• Stworzyć panel administracyjny. ne testowe, dlatego podajemy w symfony 1.0:

> symfony propel-build-model


tliwe lub wręcz niewykonalne. Ale nie musimy > symfony propel-build-sql
się martwić – autoryzacja w Symfony zajmie nam > symfony propel-insert-sql
Poziom trudności wyjątkowo mało czasu. > symfony cc
Przy mechanizmie autoryzacji oraz upraw- > symfony propel-load-data postup
nień skorzystamy z pluginu sfGuardPlu-
gin, który możemy znaleźć na stronie http:// Komendy te kolejno:

W
poprzednim artykule utworzyli- www.symfony-project.org/plugins/sfGuardPlugin
śmy serwis ogłoszeniowy, który oraz na płycie CD. • aktualizują model danych w katalogu/
spełnia swoją podstawową funk- postup/lib/model/;
cję – umożliwia przeglądanie oraz samodziel- Instalacja dodatku sfGuardPlugin • generują kod SQL;
ne dodawanie ogłoszeń. Jednak nie wróżyłbym Aby go zainstalować, w katalogu naszego pro- • wysyłają zapytania do bazy danych;
mu dobrego działania bez: jektu wystarczy podać dla symfony 1.0: • wprowadzają dane testowe (tworzą konto
administratora).
• kont użytkowników, z możliwością doda- > symfony plugin-install http://
wania ogłoszeń tylko po zalogowaniu; plugins.symfony-project.com/sfGuardPlugin Następnym krokiem jest włączenie dostę-
• zarządzania ogłoszeniami oraz użytkow- pu naszej aplikacji dla modułu sfGuardAuth
nikami przez administratora; lub symfony 1.1 dla: w pliku /postup/apps/postup/config/settings.yml
• przejrzystych adresów URL. (Listing 1). W pliku tym dodajemy wpis
> symfony plugin:install sfGuardPlugin sfGuardAuth w parametrze enabled _
W tym artykule zajmiemy się wszystkimi ty- modules oraz ustawiamy domyślne akcje.
mi kwestiami, pozostawiając na sam koniec Po zainstalowaniu pluginu możemy podej- Akcja login_ wywoływana jest w sytuacji, kie-
kwestie kończenia aplikacji oraz ostateczną rzeć jego zawartość w katalogu postup/plugins/ dy niezalogowany użytkownik próbuje otworzyć
publikację na serwerze.
Listing 1. Włączenie modułu sfGuardAuth oraz zdefiniowanie akcji dotyczących autoryzacji – plik
Konta użytkowników – sfGuard- settings.yml
Plugin oraz system rejestracja all:
Po co nam konta użytkowników? Jeśli sporo .settings:
wolnego czasu i lubimy poświęcać go na bez- enabled_modules: [default, sfGuardAuth]
produktywne rzeczy – to na nic. Użytkownicy .actions:
niezalogowani mogą tworzyć ogłoszenia i wziąć login_module: sfGuardAuth
na siebie usuwanie niechcianych ogłoszeń. Al- login_action: signin
bo możemy prosić użytkowników o przesyłanie
loginów i haseł na nasz adres e-mail i samodziel- secure_module: sfGuardAuth
nie im tworzyć konta. Jednak przy większej secure_action: secure
liczbie użytkowników staje się to bardzo kłopo-

64 10/2008
Słup ogłoszeniowy w Symfony

zabezpieczoną stronę, natomiast secure_, gdy Dostosowanie • tworzymy nowy katalog sfGuardAuth w
użytkownik nie posiada wystarczających upraw- wyglądu strony logowania katalogu /postup/apps/postup/modules/;
nień (ang. credentials) do otwieranej akcji. Domyślna strona formularza logowania nie wy- • w nowo utworzonym katalogu sfGuar-
Efekt naszej pracy możemy podejrzeć, wcho- gląda zachęcająco. Przygotujemy szablon, który dAuth tworzymy katalogi templates/ oraz
dząc na adres http://postup/postup_dev.php/ będzie bardziej czytelny. Aby nadpisać domyśl- validate/;
sfGuardAuth/signin (Rysunek1). ny szablon w pluginie: • w katalogu templates/ tworzymy plik wy-
glądu szablonu signinSuccess.php i wprowa-
dzamy zawartość (Listing 2);
• w katalogu validate/ tworzymy plik si-
gnin.yml (Listing 3).

Po wprowadzeniu tych zmian, możemy podej-


rzeć nasz poprawiony wygląd formularza oraz
zobaczyć polskie komunikaty błędów po wy-
braniu Zaloguj się, bez wypełnienia formula-
rza (Rysunek 2).

Dodawania ogłoszeń, tylko przez


zalogowanych użytkowników
Aby można było ograniczyć logowanie dla ekra-
nu dodawania ogłoszeń, będziemy musieli:

• podmienić domyślne rozszerzenie klasy


myUser na rozszerzenie oferowane przez
sfGuardPlugin;
• dodać w wyglądzie nawigacje do akcji logo-
Rysunek 1. Wygląd aplikacji – domyślny formularz logowania pluginu sfGuardPlugin wania się i wylogowania się;
• ustawić zabezpieczenie dostępu dla niezalo-
gowanych użytkowników na akcję create w
Listing 2. Zawartość pliku signinSuccess.php
module advertisement, dopisujac do two-
<?php use_helper('Validation') ?> rzonego ogłoszenia informację o twórcy.

<h2>Logowanie</h2> Podmienienia rozszerzenia klasy doko-


nujemy w pliku postup/apps/postup/lib/
<p>Tworząc nowe konto, uzyskasz dostęp do dodawania ogłoszeń. </p> myUser.class.php, w którym zamieniamy roz-
szerzenie z sfBasicSecurityUser na sfGuardSe-
curityUser.
<div id="sf_guard_auth_form">
<?php echo form_tag('@sf_guard_signin') ?> <?php
class myUser extends sfBasicSecurityUser
<fieldset> {
}
<div class="form-row" id="sf_guard_auth_username">
<?php Wygląd nawigacji umieścimy w głównym sza-
echo form_error('username'), blonie wyglądu postup/apps/postup/templates/
label_for('username', 'Nazwa użytkownika'), layout.php. Dodamy go do nagłówka strony ko-
input_tag('username', $sf_data->get('sf_params')->get('username')); ło linku Strona główna” (Listing 6)
?> Wprowadziliśmy dwa linki, które pokazują
</div> się w zależności od tego, czy jesteśmy zalogo-
wani czy nie. Ustawienie zabezpieczeń wpro-
<div class="form-row" id="sf_guard_auth_password"> wadzamy, tworząc katalog config/ w katalogu
<?php modułu advertisement (postup/apps/postup/
echo form_error('password'), advertisement/), a następnie tworzymy w nim
label_for('password', 'Hasło'), plik security.yml zawierający:
input_password_tag('password');
?> create:
</div> is_secure: on
</fieldset>
Po zmianie konfiguracji, pamiętać warto o wy-
<?php echo submit_tag('Zaloguj się') ?> czyszczeniu zawartości cache, podając w ka-
talogu projektu komendę, poznaną wcześniej
</form> komendę:
</div>
> symfony cc

www.sdjournal.org 65
Warsztat

Informację o twórcy ogłoszenia można szybko do- cy (w stylu $this->ad->setCreatedBy($this- użytkownika: admin, hasło: admin), dodaj
dać, poprzez dopisanie do schematu bazy danych >getUser()->getUsername());. Wykonanie tej ogłoszenie, zobacz, co się stanie po wybraniu
takiego pola, przeładowanie ustawień bazodano- pracy pozostawimy Tobie. Dodaj ogłoszenie, gdy jesteś niezalogowany.
wych oraz dopisanie do akcji tworzenia ogłosze- Gotowe. Teraz możemy sprawdzić, jak
nia (executeCreate()) zapisu informacji o twór- wszystko dobrze działa. Zaloguj się (nazwa Tworzenie kont użytkowników
Z zagadnień dotyczących kont użytkowników
Listing 3. Zawartość pliku walidacji – signin.yml brakuje nam jeszcze rejestracji nowych kont. Przy
ich tworzeniu zadbamy również o weryfikację
methods: wprowadzanych adresów e-mail. Do tego celu w
post: [username, password] aplikacji stworzymy nowy moduł o nazwie user.

names: > symfony init-module postup user


username:
required: true W związku z tym, że w trakcie pisania artyku-
required_msg: Musisz podać nazwę użytkownika łu, formularze były gruntownie przebudowy-
validators: [userValidator] # zdefiniowanie walidatora userValidator wane, nie będziemy dokładnie ich omawiać
(gotowy moduł możemy pobrać z płyty, która
password: była dołączona do Software Developer’s Jour-
required: true nal 07/2008 – z pliku postup2_user_src.tgz).
required_msg: Musisz podać hasło Aby go zainstalować, rozpakowywujemy mo-
duł user do katalogu postup/apps/postup/modules/
userValidator: a następnie czyścimy cache (symfony cc),
class: sfGuardUserValidator # klasa odpowiedzialna za walidację http://postup/index.php/user/register .
param: Gdy mamy gotową akcję rejestracji, pozostaje
password_field: password tylko utworzyć link w głównym szablonie wy-
glądu layout.php.
Listing 4. Kod generator.yml dla modułu adminAd
generator: Zarządzanie
class: sfPropelAdminGenerator ogłoszeniami oraz użytkownika-
param: mi przez administratora
model_class: Ad Przygotowana od tego momentu aplikacja po-
theme: default winna już działać bez większych niespodzia-
nek. Problemów przysporzyć nam może już
fields: # ZDEFINIOWANIE NAZW DLA PÓL tylko sam użytkownik, który zechce korzystać
title: { name: "Tytuł" } z niej nie tak, jak planowaliśmy. A co w sytuacji,
content: { name: "Treść" } w której użytkownik doda ogłoszenie w złej ka-
city: { name: "Miejscowość" } tegorii, zapomni hasła, czy naruszy ustalone za-
woj: { name: "Województwo" } sady? W tym celu, przygotujemy panel admini-
contact_name: { name: "Kontakt" } stracyjny, w którym, będziemy zarządzać naj-
contact_phone: { name: "Telefon" } wrażliwszymi elementami.
contact_mail: { name: "E-mail" }
is_published: { name: "Opublikowany" } Czego potrzebujemy?
category_id: { name: "Kategoria" } Na potrzeby tego artykułu skupimy się tylko na
created_at: { name: "Data utworzenia" } najważniejszych aspektach.
updated_at: { name: "Data aktualizacji" } Przede wszystkim potrzebna jest nam moż-
liwość administrowania zamieszczonymi ogło-
list: # ZDEFINIOWANE ELEMENTÓW WIDOKU LISTY szeniami. Poprzez administruję, mamy na myśli
title: "Lista ogłoszeń" głównie edycję i wyłączanie istniejących ogłoszeń.
display: [=title, contact_name, created_at, is_published, category_id] Kolejną kwestią jest samo zarządzanie użytkow-
filters: [title, category_id, is_published] nikami. Przyda się możliwość zmiany haseł, czy
max_per_page: 10 blokowania kont niesfornym użytkownikom.
Na koniec, damy zalogowanym użytkownikom
edit: # ZDEFINIOWANIE ELEMENTÓW WIDOKU EDYCJI możliwość zgłaszania do administratora proble-
display: # ustalenie, co i jak należy pokazać w widoku edycji matycznych ogłoszeń. Informacja o zgłoszeniach
"Ogłoszenie": [title, content, category_id, city, woj] zostanie wysłana na e-mail administratora.
"Kontakt": [contact_name, contact_phone, contact_mail]
"Właściwości": [is_published, created_at, updated_at] Administracja ogłoszeniami
fields: # - wyłączenie edycji pól z datami Aby uzyskać oczekiwaną funkcjonalność, mo-
created_at: { type: plain } żemy skorzystać z admin-generatora, którego
updated_at: { type: plain } dostosujemy do naszych potrzeb.
content: { params: size=77x10 } # większe pole dla treści wiadomości Generowanie zarządzania ogłoszeniami mo-
żemy stworzyć komendą:

> symfony propel-init-admin postup adminAd Ad

66 10/2008
Słup ogłoszeniowy w Symfony

gdzie adminAd oznacza nazwę tworzonego //postup/postup_dev.php/adminAd. Nie mo- do przetestowania działania usługi przy logo-
przez nas modułu, natomiast Ad klasę ogło- żemy jednak zapomnieć o nałożeniu dostę- waniu się jako zwykły użytkownik.
szeń w modelu danych. Efekt możemy podej- pu do tego modułu tylko dla administrato- Na koniec dodamy link w głównym szablo-
rzeć na stronie modułu: http://postup/postup_ ra systemu ogłoszeń. Podobnie jak wcześniej, nie wyglądu (plik layout.php):
dev.php/adminAd tworzymy plik security.yml w katalogu konfi-
Pozostaje nam tylko dostosowanie generowa- guracji (postup/apps/postup/modules/adminAd/ <?php if ($sf_user->hasCredential('admin
nego kodu w pliku postup/apps/postup/modules/ config/). Zawartość konfiguracji opisaliśmy ')): ?>
adminAd/config/generator.yml do naszych po- na Listingu 5. <li><?php echo link_to('Zarządzaj
trzeb (Listing 4). Wpis credentials: admin będzie ograni- ogłoszeniami', 'adminAd/list') ?></li>
Dostosowany wygląd zarządzania ogło- czał dostęp tylko dla użytkowników posiadają- <?php endif; ?>
szeniami możemy podejrzeć na stronie http: cych uprawnienia administratora. Zachęcamy
Zarządzanie użytkownikami
Listing 5 – Ograniczenie uprawnień do całego modułu tylko dla administratora – plik settings.yml w
Przy zarządzaniu kontami użytkowni-
konfiguracji modułu ków gotowe rozwiązanie dostarcza moduł
sfGuardPlugin, który zainstalowaliśmy na po-
all: czątku artykułu.
is_secure: on Plugin sfGuardPlugin oprócz wykorzystane-
credentials: admin go wcześniej modułu sfGuardAuth do logowa-
nia posiada moduły:
Listing 6. Dodanie nagłówka strony koło linku Strona główna
... • sfGuardUser – do zarządzania kontami
<ul> użytkowników;
<li><?php echo link_to('Strona główna', '@homepage') ?></li> • sfGuardGroup – do zarządzania grupami
<?php if ($sf_user->isAuthenticated()): ?> użytkowników;
<li><?php echo link_to($sf_user->getUsername() . ' - wyloguj się', 'sfGuardAuth/ • sfGuardPermission – do zarządzania
signout') ?></li> uprawnieniami, które mogą być przypisywa-
<?php else: ?> ne do grup oraz do poszczególnych użytkow-
<li><?php echo link_to('Logowanie', 'sfGuardAuth/signin') ?></li> ników.
<?php endif; ?>
</ul> Dzięki takiej budowie i możliwości definiowa-
... nia użytkowników, grup i uprawnień w relacji
wiele do wielu, sfGuardPlugin staje się bardzo
Listing 7. Dopisanie linku w głównym szablonie elastycznym dodatkiem przy różnorodnych
<?php if ($sf_user->hasCredential('admin')): ?> rozwiązaniach.
<li><?php echo link_to('Zarządzaj ogłoszeniami', 'adminAd/list') ?></li> Do naszych potrzeb skorzystamy jedynie z
<li><?php echo link_to('Zarządzaj użytkownikami', 'sfGuardUser/list') ?></li> kont użytkowników. Do tego celu włączymy
<?php endif; ?> moduł sfGuardUser w poznanym już wcześniej
pliku konfiguracji settings.yml, dopisując go do
parametru enabled_modules (pamiętając o
późniejszym wyczyszczeniu cache). Efekt mo-
żemy zaobserwować na stronie http://postup/
postup_dev.php/sfGuardUser.
Podobnie jak przy module adminAd, musi-
my ograniczyć dostęp do tego modułu tylko
dla administratorów. Dokonujemy tego, two-
rząc katalog sfGuardUser w postup/apps/postup/
modules/, a następnie tworząc w nim katalog
config i tworzymy plik settings.yml z zawartością
opisaną w Listingu 5.
Na koniec dopisujemy link w głównym sza-
blonie wyglądu (plik layout.php) (Listing 7)

W Sieci
O instalacji sfGuardPlugin można przeczy-
tać na stronie: http://www.symfony.pl/link/
sfGuardPlugin.

Niestety, w artykule tym nie poświęcimy


miejsca na używanie wielojęzyczności, do-
stępnej w Symfony.
Szczegóły dotyczące sposobu korzystania
z wielojęzyczności możesz poznać na http:/
/www.symfony.pl/link/i18n
Rysunek 2. Wygląd aplikacji – przygotowany szablon logowania zawierający polskie komunikaty błędów

www.sdjournal.org 67
Warsztat

Krótsze adresy stron Ustawmy następujące adresy: • kategoria:


Najwyższy czas wziąć się za czytelność dłu-
gich adresów, które stworzyliśmy. Od same- • zamiast http://postup/advertisement/show/ url: /kategoria/:category
go początku naszego ciągu artykułów two- id/1 zróbmy krótki adres http://postup/ param: { module: advertisement, action:
rzyliśmy adresy długie i nieczytelne w stylu: ogloszenie/1 categoryList }
http://postup/index.php/advertisement/categoryList/ • nazwa kategorii niech ma adres np. http://
category/praca postup/kategoria/praca • dodaj_ogloszenie:
Czy nie przyjaźniejsze by były krótsze, czy- • dodawanie ogłoszeń: http://postup/dodaj_oglo-
telne i po polsku? szenie url: /dodaj_ogloszenie
Kolejną, równie istotną kwestią jest opty- • rejestracja: http://postup/rejestracja param: { module: advertisement, action:
malizacja w wyszukiwarkach. Z całą pewno- create }
ścią przy pozycjonowaniu nie chcielibyśmy, Otwórzmy sobie plik routing.yml (znajdu-
aby nasza strona pojawiała się przy podaniu w je się w katalogu postup/apps/postup/config/ • rejestracja:
wyszukiwarce np. słów: categoryList czy sfGu- ) i dodajmy sobie kilka reguł u góry tego
ardPlugin. pliku. url: /rejestracja
param: { module: user, action: register }
Wykorzystujemy routing • ogloszenie:
Najwyższy czas edytować reguły przekierowań. Po zmianie konfiguracji pamiętajmy wyczy-
W zależności od tego, czy posiadamy dostęp do url: /ogloszenie/:id ścić cache:
konfiguracji mod_rewrite na naszym serwe-
rze, adresy mogą być podawane ze skryptem in- param: { module: advertisement, action: > symfony cc
dex.php lub też bez niego. show }
Kiedy zobaczymy ponownie naszą stronę głów-
ną, miło zaskoczy nas, że na stronie wszyst-
kie zdefiniowane adresy zmieniły się na krót-
kie. Dzięki systemowi routingu i korzystania
z funkcji link _ to, wszystkie generowane od-
syłacze tworzą się zgodnie z zdefiniowanymi
przez nas regułami. Zasada ta również będzie
działać globalnie dla całej aplikacji, niezależnie,
czy będzie to zwykła strona, wysyłany mail czy
RSS. Ostateczny test, spróbujmy otworzyć sobie
stronę: http://postup/kategoria/praca
Jeżeli chcesz wiedzieć więcej na temat rutin-
gu, zapraszamy na stronę http://www.symfony.pl/
link/routing.

Podsumowanie
Jedyne 5 stron, a udało się tak dużo zrobić. Goto-
we dzieło zamieściliśmy na płycie dołączonej do
SDJ 07/2008 (plik postup_art2_gotowa_src.tgz)
Można by jeszcze wymyślać dodatkową funkcjo-
nalność, jednak pozostawimy to Twojej pomysło-
wości, drogi Czytelniku.
W następnym artykule dokładnie opiszemy
Rysunek 3. Wygląd aplikacji – formularz rejestracji nowego użytkownika ostatni i najważniejszy element – przygotowanie
oraz opublikowanie aplikacji na serwerze. Sądzę,
że ten temat z pewnością też Cię zainteresuje.

PIOTR PLENIK
Współzałożyciel firmy TeamLab.pl, specjalizującej
się w wytwarzaniu oprogramowania klasy enterpri-
se. Redaktor serwisu www.symfony.pl. Programista
PHP od ośmiu lat, od dwóch lat tworzący biznesowe
aplikacje w symfony. Programista Stowarzyszenia
Klon/Jawor przy największym Ogólnopolskim Por-
talu dla Organizacji Pozarządowych www.ngo.pl.
Student ostatniego roku Polsko-Japońskiej Wyższej
Szkoły Technik Komputerowych. Interesuje się zarzą-
dzaniem projektami biznesowymi oraz open source,
programowaniem (PHP, ASP.NET, Java), a także ba-
zami danych (MS SQL, Postgres, MySQL).
Rysunek 4. Wygląd aplikacji – panel administracji z ogłoszeniami Kontakt z autorem: piotr.plenik@teamlab.pl

68 10/2008
Zestawienie

Zestawienie narzędzi
do testowania oprogramowania

Zestawienie ma na celu prezentację najpopularniejszych komercyjnych


rozwiązań przeznaczonych do kompleksowego testowania oprogramowania,
stanowiących nieocenioną pomoc przy codziennej pracy każdego twórcy
oprogramowania. Mam nadzieję, że opisane tu alternatywy zachęcą
Czytelników do korzystania z tych narzędzi, a jednocześnie pomogą wybrać
rozwiązanie najlepiej dostosowane do Ich indywidualnych potrzeb.
Poniżej przedstawione jest zestawienie moż- • automatycznie generowane testy stron in-
liwości pakietu Microsoft Visual Studio Team ternetowych z możliwością dostosowa-
Edition for Software Testers: nia – niestandardowe zasady związane
ze sprawdzaniem i wydzielaniem oraz do-
• dynamiczna analiza kodu, statyczna anali- datkowe narzędzie do testowania stron in-
Microsoft Visual Studio za kodu, profilowanie kodu – narzędzia z ternetowych, które może wywoływać kod
Team System for Testers możliwością dostosowywania oraz wyszu- podczas wykonywania testu. Automatycz-
i Test Load Agent kiwania dowolnych elementów. Można ich ne generowanie kodu na podstawie zareje-
Dzisiejsze systemy oprogramowania korzy- używać w ramach procedur rejestrowania strowanych testów i wykorzystanie posia-
stają z wielu rozproszonych usług, łącząc ze na potrzeby kompilacji nocnej, co pozwa- danych umiejętności programistycznych
sobą platformy, protokoły oraz języki progra- la usuwać usterki przed zarejestrowaniem do tworzenia i poprawiania testów przy
mowania. Wszystkie te elementy mają zna- kodu w drzewie źródłowym; w rezultacie wykorzystaniu pełnej integracji z progra-
czący wpływ na środowisko operacyjne. Ze- otrzymujemy znaczną redukcję nakładu mem Visual Studio i językami z rodziny
społy pracowników osiągają coraz większy pracy związanego z przeróbkami przez te- .NET; w rezultacie otrzymujemy skróce-
stopień specjalizacji i geograficznego rozpro- stowanie jakości kodu już na najwcześniej- nie wydłużającego się czasu potrzebnego
szenia. Pomyślne wdrożenie nowoczesnych szych etapach programowania; na tworzenie i wykonywanie testów;
rozwiązań zależy od tego, czy uda się poko- • automatyczne, sterowane danymi testo- • obsługa wbudowanych metodologii – za-
nać dystans komunikacyjny pomiędzy dzia- wanie modułów przez programistów – stosowanie wbudowanych technologii
łem programistycznym i operacyjnym, tak rozszerzalne środowisko testowe z testa- Agile i CMMI pozwala zarządzać testami
aby cały dział IT był często i już od początku mi podstawowymi korzystającymi ze sta- w taki sam sposób, jaki stosowany jest w
angażowany w prace związane z cyklem życia rych wersji przypadków testowych oraz odniesieniu do kodu w całym okresie cy-
oprogramowania. dodatkowych typów testów, co pozwala klu programowania; w rezultacie narzuco-
W przeszłości narzędzia do testowania i na utworzenie i wbudowanie testów nie- ne zasady zwiększają wydajność testerów.
narzędzia programistyczne były oddzielny- standardowych. W rezultacie otrzymuje-
mi narzędziami. Testerzy używali oddziel- my możliwość ponownego wykorzystania Dla programistów aplikacji internetowych Mi-
nego środowiska, a pisane przez nich skryp- i powtarzania testów co zmniejsza koszty, crosoft oferuje dodatkowe, dedykowane roz-
ty testowania były zapisywane w oddziel- oszczędza czas i poprawia jakość; wiązanie – Visual Studio Team System Test
nym repozytorium i nie były uwzględniane • testowanie obciążenia– wydajne gene- Load Agent – umożliwiające generowanie te-
w kontroli źródła. Wyniki były czasem nie- rowanie testów obciążeniowych i pro- stowego obciążenie dla aplikacji interneto-
przewidywalne, śledzenie usterek trudne, a ste wdrażanie testowanego kodu, a także wych. W rezultacie Test Load Agent umożli-
wydajność testowana zazwyczaj w momen- wsteczne wdrażanie dzienników i wyni- wia podniesienie jakości obsługi poprzez bar-
cie, gdy cykl programowania był już prawie ków testów; w rezultacie programiści i te- dziej dokładne testowanie wydajności aplikacji
zakończony. Z tej przyczyny z cyklem pro- sterzy mogą symulować obciążenia pro- i serwerów internetowych pod obciążeniem.
gramistycznym wiązały się dodatkowe kosz- dukcyjne i szybko wykrywać problemy z Visual Studio Team System Test Load Agent,
ty, czas i stres. W programie Microsoft Visu- wydajnością w laboratoriach testowych na który składa się zarówno oprogramowanie
al Studio Team Edition for Software Testers oraz środowiskach przedprodukcyjnych; agenta, jak i kontrolera, pozwala na łatwe roz-
funkcje testowania zostały ściśle połączo- • integracja z programem Team Foundation szerzanie i dostosowywanie funkcjonalności,
ne z funkcjami współpracy programistycz- Server – umożliwia jednoczesne wyświetla- dając testerom dużą elastyczność oraz możli-
nej – wszyscy członkowie zespołu maję do- nie testu, kodu oraz metryki wymagań co w wość korzystania z następujących funkcji:
stęp do ogólnego udostępnionego magazynu rezultacie owocuje zaangażowaniem całego
umożliwiającego korzystanie z opcji oceny i zespołu do wczesnego wykrywania wąskich • symulowanie około 1.000 użytkowników
raportowania. gardeł w czasie całego cyklu programowania; na procesor;

70 10/2008
Zestawienie narzędzi do testowania oprogramowania

• precyzyjne symulowanie obciążenia i te- konywanie projektów testowych na pod- • UDDI – weryfikację zapytań, walidację i
stowanie wydajności aplikacji i serwerów stawie rezultatów uzyskanych bezpośred- testowanie obciążenia;
internetowych; nio z Visual Studio; • testowanie oparte na danych;
• licencja pozwalająca na symulację nieogra- • automatyczne tworzenie i umieszczanie • stosowanie metryk QoS (ang. Quality of
niczonej liczby użytkowników w jednym atrap dla istniejących zestawów testów – Service) przy testach obciążenia;
procesie (z obsługą procesorów dwurdze- SOAtest jest w stanie szybko i łatwo au- • automatyczne wykonywanie testów obcią-
niowych); tomatyzować emulację serwera dla wielu żenia i śledzenie metryk wydajności w po-
• ścisła integracja z Visual Studio Team Sys- platform co znacznie ułatwia współpracę szczególnych fazach cyklu produkcji opro-
tem Team Foundation Server, co pozwala pomiędzy rozproszonymi grupami i zna- gramowania;
na integrację danych z testów w różnego cząco skraca cykl produkcji oprogramowa- • penetracyjne testy bezpieczeństwa.
rodzaju raportach analitycznych. nia. Użytkownicy SOAtest mogą przy po-
mocy wizualnych narzędzi projektować Wymagania:
przebieg obciążenia serwisu i na podsta-
wie uzyskanych wyników tworzyć atrapy • Platforma: Windows 2000/XP i Vista, Li-
emulujące zachowanie serwisu. nux bądź Solaris;
• RAM: co najmnije 512 MB pamięci RAM
Dodatkowo SOAtest wspiera: per procesor; do wykonywania testów ob-
ciążeniowych zalecane jest minimum
Parasoft SOAtest • weryfikację zgodności z WS-I (na podsta- 1024 MB RAM.
Parasoft SOAtest 5.5 dodaje nowe możliwości wie schematów WSDL i weryfikacji se-
do obszernego pakietu testowego oferowane- mantycznej); Pisząc SOAtest warto wspomnieć, iż jest
go przez firmę Parasoft i jest zaprojektowane • SOAP, PoX (Plain XML) REST, JSON i to jeden z całej gamy produktów dedyko-
specjalnie pod kątem zwiększenia produktyw- BPEL; wanych testowaniu oprogramowania ofe-
ności oraz efektywności zespołów programi- • testowanie EJB; rowanych przez firmę Parasoft. Informa-
stycznych, pracujących nad złożonymi archi- • testowanie asynchroniczne; cje na temat pełnej oferty tej firmy moż-
tekturami zorientowanymi na usługi (Service • szereg standardów WS-*; na znaleźć na jej stronie internetowej (http://
Oriented Architectures, SOA) – także tych, • załączniki MTOM(XOP)/MIME/DIME; www.parasoft.com/).
które pracują w środowisku Microsoft .NET.
Parasoft SOAtest 5.5 to pierwsze rozwią-
zanie do testów SOA, które oferuje pełną
Wypowiedź Hewlett Packard
Pełny test procesu biznesowego wymaga przetestowania zarów-
obsługę środowisk wieloprotokołowych, w no interfejsu użytkownika, jak i wspomagających ten proces we-
tym Windows Communication Foundation bserwisów. Działy kontroli jakości są na ogół obeznane z testo-
(WCF). Nowością programu jest funkcja, któ- waniem interfejsu użytkownika i stosują rozwiązania, które auto-
ra pozwala programistom .NET badać komu- matyzują i przyspieszają ten proces. Mogą one jednak nie radzić
sobie z dokładnym testowaniem webserwisów, ponieważ braku-
nikaty wysyłane za pośrednictwem wielu pro-
je im interfejsu użytkownika, a użytkownicy nie mają oprogra-
tokołów, łącznie z zastrzeżonymi formatami mowania testującego. HP Service Test zapewnia testowanie in-
Microsoftu. SOAtest 5.5 ściśle integruje się z terfejsu użytkownika oraz webserwisów, co umożliwia komplek-
pakietem Microsoft Visual Studio Team Sys- sowe testowanie procesu biznesowego.
tem for Software Testers, dzięki czemu pro- Lubomir Stojek
gramiści mogą współdzielić, organizować i Ekspert ds. oprogramowa-
nia do zarządzania
wykonywać projekty Parasoft SOAtest, odczy- Hewlett-Packard Polska
tując wyniki bezpośrednio z poziomu Micro-
soft Visual Studio.
Parasoft SOAtest 5.5 zapewnia też zauto-
matyzowaną funkcję tworzenia inteligent-
Wypowiedź Parasoft
Posiadanie właściwych narzędzi do przeprowadzania testów w
nych atrap. Atrapy naśladują działające syste- architekturze SOA jest niezwykle istotne z uwagi na charakter
my, dzięki czemu producenci oprogramowa- wyzwań, jakie architektura SOA stawia przed osobami odpo-
nia mogą testować usługi w kontekście rzeczy- wiedzialnymi za zapewnienie jakości. Otóż środowiska zorien-
wistego działania aplikacji, nie zakłócając dzia- towane na usługi (SOA) stają się coraz bardziej heterogeniczne.
Współdziałać ze sobą muszą rożne interfejsy i protokoły. Archi-
łania systemu produkcyjnego. Oszczędza to
tektura SOA nie redukuje ilości tworzonych usług ani używanych
mnóstwo czasu i zasobów. standardów. Nie jest ograniczona też tylko do SOAP. Zawsze ma
Poniżej przedstawione jest zestawienie moż- się do czynienia z wieloma aplikacjami i platformami. W związku
liwości Parasoft SOAtest 5.5: z tym, aby zapewnić jakość procesom biznesowym, trzeba je do-
kładnie przetestować w takim właśnie heterogenicznym środo-
• wsparcie dla .NET WCF – klient SOAP Marek Kucharski wisku. Używane do tego narzędzia muszą być bardzo elastycz-
Prezes Zarządu ne, tak aby nie tylko sterowały procesem i sprawdzały rezulta-
wbudowany w rozwiązanie jest w stenie
Parasoft S.A. ty wykonania, ale także mogły włączać i wyłączać współpracu-
odwoływać się do usług Windows Com- jące systemy dziedzinowe, dostarczając dla nich w łatwy sposób
munication Foundation (.NET 3.0) wyko- inteligentnych zaślepek. Dodatkowo istotny jest czynnik ludzki.
rzystujących zarówno TCP jak i HTTP ja- Aby móc testować efektywnie w złożonym środowisku SOA bez
ko warstwę transportu; umiejętności programowania i szerokie wiedzy o standardach i
protokołach, narzędzie musi dostarczać łatwego i intuicyjnego
• integracja z Microsoft VSTS – SOAtest
interfejsu, który odetnie użytkownika od detali implementacyj-
oferuje wspacie dla użytkowników pakie- nych. SOAtest został stworzony właśnie z naciskiem na elastycz-
tu Microsoft VSTS Software Tester Edi- ność, łatwość użycia i wspieranie heterogenicznych środowisk.
tion. Integracja obejmuje zarządzanie i wy-

www.sdjournal.org 71
Zestawienie

HP QuickTest Professional oferuje wspacie dla Pakiet firmy Borland do zarządzania jakością
następujących technologii: w projektach informatycznych potrafi spro-
stać największym wyzwaniom stojącym przed
• Windows® Presentation Foundation; działami QA w niemal wszystkich firmach so-
• Serwisy webowe; ftware'owych. Wdrożone w tysiącach korpo-
• Macromedia Flex; racji na całym świecie rozwiązania firmy Bor-
• .NET; land do automatyzacji testów i integracji, za-
• JEE; rządzania i kontroli jakości pomagają w two-
HP QuickTest • Aplikacje ERP i CRM. rzeniu wolnych od wad, odpowiadających za-
Professional i Service Test łożeniom, wydajnych aplikacji w założonym
Aby skrócić czas i zmniejszyć koszty zwią- Dla twórców serwisów webowych HP oferu- czasie i określonym budżecie. Co więcej, raz
zane z testowaniem aplikacji, potrzebne są je również dodatkowe, dedykowane rozwiąza- dopasowane, potrafią zapewnić tę samą ja-
rozwiązania zapewniające pełną funkcjonal- nie – HP Service Test. Rozwiązanie to dzięki kość w procesie wytwarzania oprogramowa-
ność we wszystkich środowiskach bizneso- automatyzacji upraszcza i przyśpiesza funk- nie pomimo jego zmian, modyfikacji założeń
wych i procesach. Oprogramowanie HP Qu- cjonalne testowanie serwisów SOA usprawnia czy środowisk.
ickTest Professional wprowadza automaty- cały proces zarządzania jakością w systemach Zalety rozwiązań firmy Borland umożliwiają
zację testów funkcjonalnych i regresji obej- opartych na serwisach. zespołom projektowym:
mujących wszystkie główne aplikacje i śro-
dowiska programowe. To rozwiązanie wyko- • reagować na problemy związane z jakością
rzystuje koncepcję testowania sterowanego już od samego początku projektu, koncen-
za pomocą słów kluczowych, co upraszcza trując się na jakości wymagań, modelu i
tworzenie i obsługę testów. Pozwala ono te- kodu;
sterom na tworzenie przypadków testowych • zapewniać pełną widoczność zaawansowa-
przez przechwytywanie przepływów bezpo- Borland SilkTest nie i współpracę wszystkich zespołów pro-
średnio z ekranów aplikacji za pomocą za- Firma Borland wspiera przedsiębiorstwa w jektowych, w tym również strony bizneso-
awansowanej technologii przechwytywania. lepszym zarządzaniu procesem produkcji wej;
Dzięki zastosowaniu zintegrowanego środo- oprogramowania dostarczając rozwiązania w • wspierać podejście oparte na sprawdzo-
wiska skryptów i wprowadzania poprawek ramach strategii Open Application Lifecyc- nych procesach, mające na celu wyelimi-
specjaliści ds. testowania zyskują także pełen le Management (Open ALM). Wykorzysta- nowanie powtórnej pracy nad tymi samy-
dostęp do właściwości testów i obiektów niż- nie najlepszych praktyk związanych z two- mi elementami projektu.
szego poziomu. rzeniem oprogramowania oraz unikatowego
Poniżej przedstawione jest zestawienie pod- podejścia opartego na procesach, pozwala fir- Narzędzia wspierające działalność zespołów
stawowych funkcji pakietu: mie Borland na dostarczenie niezależnych od QA oferowane przez firmę Borland:
platformy i od posiadanych narzędzi, spraw-
• tworzenie zaawansowanych zestawów dzonych rozwiązań dedykowanych następu- • Borland SilkCentral Test Manager: otwar-
testów już po minimalnym przeszkole- jącym obszarom: te środowisko do zarządzania testami,
niu; wspierającego zespoły QA w całym cyklu
• poprawa współpracy pomiędzy grupami • Zarządzanie Procesem Dostarczania Opro- powstawania oprogramowania;
roboczymi dzięki zastosowaniu wspól- gramowania (Borland Management Solu- • Borland Gauntlet: rozwiązanie do aktyw-
nych bibliotek funkcji, zarządzania obiek- tions); nego tworzenia, integrowania i weryfiko-
tami i elastycznego przechowywania za- • Zarządzanie Wymaganiami (Requirements wania kodu zanim trafi do wspólnego re-
sobów; Definition & Management); pozytorium, izolowania usterek, weryfi-
• redukcja dokumentacji testowej; • Zarządzania Jakością (Lifecycle Quality kowania pokrycia kodu oraz zapewnienia
• szybsza naprawa awarii dzięki wprowa- Management); ciągłości powstawania buildów przy uży-
dzeniu pełnego dokumentowania i odtwa- • Zarządzania Zmianą (Change Manage- ciu tylko jednego narzędzia;
rzania awarii dla programistów. ment). • Borland SilkTest: rozwiązanie do automa-
tyzacji testów funkcjonalnych i regresyj-
nych, charakteryzujące się łatwym w ob-
Wersje ewaluacyjne prezentowanych rozwiązań słudze graficznym interfejsem użytkowni-
• http://www.borland.pl/downloads/marketing/sdj/SilkTest2008SP1_001.exe – wersja testowa ka, modułem nagrywania oraz stworzone-
SilkTest, go specjalnie na potrzeby testów automa-
• http://techpubs.borland.com/silk_gauntlet/SilkTest/2008SP1/tutorials/ – tutoriale związane z tycznych języka;
SilkTest, • Borland SilkPerformer: narzędzie do auto-
• http://www.microsoft.com/downloads/details.aspx?FamilyID=572e1e71-ae6b-4f92-960d-
matyzacji testów obciążeniowych i wydaj-
544cabe62162&DisplayLang=en – Test Load Agent,
• http://www.microsoft.com/downloads/details.aspx?FamilyID=d95598d7-aa6e-4f24-82e3- nościowych zapewnia pełna skalowalność
81570c5384cb&DisplayLang=en – Visual Studio Team Suite – najbardziej rozbudowany pakiet systemów, pozwalając na zachowanie sta-
VS wraz z rozszerzeniem Team System for testers, bilności i przewidywalności przy różnym
• http://www.microsoft.com/downloads/details.aspx?FamilyID=c7a809d8-8c9f-439f-8147- stopniu ich obciążenia.
948bc6957812&DisplayLang=en – maszyna wirtualna zawierająca preinstalowane narzędzia
firmy Microsoft przedstawione w niniejszym artykule,
• http://www.parasoft.com/jsp/products/home.jsp?product=SOAP – strona domowa SOAtest; Borland SilkTest jest produktem przeznaczo-
pobranie wersji ewaluacyjnej oprogramowania wymaga rejestracji, nych dla profesjonalnych testerów i specjali-
• https://h10078.www1.hp.com/cda/hpdc/display/main/index.jsp?zn=bto&cp=54_4012_100 – wi- stów od jakości, oczekujących sprawdzonego
tryna z której można pobrać ewaluacyjne wersje oprogramowania firmy HP (wymaga reje- i wydajnego rozwiązania z zakresu automaty-
zacji testów regresyjnych i funkcjonalnych. In-

72 10/2008
Zestawienie narzędzi do testowania oprogramowania

tuicyjny interfejs graficzny pozwala na łatwe • łatwy w użyciu kreator pomoże początku- • pełna integracja z narzędziami firmy Bor-
nagrywanie scenariuszy, umożliwiające wie- jącym użytkownikom tworzyć efektywne land do zarządzania testami oraz do zarzą-
lokrotne odtwarzanie i modyfikację w dowol- testy już za pierwszym razem; dzania zmianą i konfiguracją umożliwia
nym momencie, przy użyciu łatwego w obsłu- • zaawansowane testy mogą być tworzone lepszą automatyzację procesów w ramach
dze języka skryptowego. SilkTest oferuje pro- przy użyciu elastycznego obiektowego ję- działań QA.
stotę tworzenia testów regresyjnych i funk- zyka czwartej generacji, stworzonego spe-
cjonalnych bez obawy, że raz stworzone prze- cjalnie dla testerów; Testowanie funkcjonalne aplikacji w architek-
staną działać w przypadku zmian w kolejnych • pełne wsparcie dla unicode pozwala na turze SOA wymaga przeprowadzania testów
wersjach aplikacji – co jest poważnym proble- pełną swobodę bez względu na lokalizację bez interfejsu użytkownika. Borland oferuje
mem wielu obecnych na rynku rozwiązań. testowanej aplikacji czy systemu; taką możliwość w rozwiązaniu Silk Perfomer
SilkTest oferuje stabilność i kompatybilność z • wbudowany system odzyskiwania stanu SOA Edition.
większością środowisk, używanych w firmach aplikacji, w przypadku wystąpienia błę-
i organizacjach, dostarczając funkcjonalno- du zwraca system w stanie sprzed usterki i Wymagania dla Borland SilkTest:
ści łatwego przeprowadzania testów regresyj- wznawia dalsze kroki testu, w przeciwień-
nych i funkcjonalnych o szerokim spektrum stwie do wielu rozwiązań dostępnych na • Platforma: Windows 2000 (wersja 5.0, Se-
zastosowania. rynku, które kontynuują wykonywanie te- rvice Pack 4), Windows XP (wersja 5.1,
Poniżej przedstawione jest zestawienie moż- stu w stanie niestabilnym aplikacji; Service Packs 1, 1a, 2), Windows Server
liwości Borland SilkTest jako narzędzia do au- • system agentów umożliwia uruchamianie 2003 (Service Pack 1), lub Windows Vista,
tomatycznego testowania regresyjnego i funk- na wielu komputerach i w różnych środo- Red Hat Enterprise Linux WS (version 2.1
cjonalnego: wiskach bez konieczności kupowania peł- and3.0) lub Solaris (wersja 9 i 10) dla apli-
nej licencji dla każdego z nich; kacji tworzonych w systemie Motif;
• jedno rozwiązanie do tworzenia i urucha- • wizualne raporty oparte na TrueLog™ • Procesor: Intel Pentium 1 Ghz;
miania wszystkich testów funkcjonalnych upraszczają diagnostykę problemów w • RAM: 512 MB pamięci RAM dla maszyn
i regresyjnych w całym przedsiębiorstwie; przypadku wykrycia usterek; działających pod kontrolą Windows 2000
lub 1 GB RAM dla maszyn działających
pod kontrolą Windows XP, 2003, lub Vi-
sta. Do tych wymagań należy dodać ilość
pamięci RAM potrzebnej do działania te-
stowanej aplikacji.

Podsumowanie
Jak widać po zaprezentowanych opisach, każde
z proponowanych narzędzi stanowi pewne roz-
wiązanie kompleksowe – dodatkowo osadzone
w pewnej większej rodzinie produktów. Ciężko
jest porównywać tego typu rozwiązania, jeszcze
trudniej wybrać to właściwe. Czytelników, któ-
rzy w trakcie czytania niniejszego artykułu za-
interesowali się danym produktem, gorąco za-
chęcam do pobrania jego wersji ewaluacyjnej i
zapoznania się z nim w praktyce – jest to chyba
najlepsza droga do stwierdzenia czy dane roz-
wiązanie pasuje do konkretnych wymagań, któ-
rych jest przecież niezliczona ilość. W ramce
Wersje ewaluacyjne prezentowanych rozwiązań
umieszczone są konkretne namiary na prezen-
towane tu produkty. Jedno jest pewne – warto
zainteresować się narzędziami wspomagający-
mi proces testowania oprogramowania – dzię-
ki nim nasze programy, stają się bardziej nie-
zawodne, a życie zarówno programistów jak i
użytkowników – łatwiejsze.

RAFAŁ KOCISZ
pracuje na stanowisku Dyrektora Technicznego w
firmie Gamelion, wchodzącej w skład Grupy BLStre-
am. Grupa BLStream powstała by efektywniej wy-
korzystywać potencjał dwóch, szybko rozwijają-
cych się producentów oprogramowania – BLStre-
am i Gamelion. Firmy wchodzące w skład grupy
specjalizują się w wytwarzaniu oprogramowania
dla klientów korporacyjnych, w rozwiązaniach mo-
bilnych oraz produkcji i testowaniu gier.
Kontakt z autorem: rafal.kocisz@game-lion.com

www.sdjournal.org 73
Wywiad

Wywiad z
Kevinem
Parker’em
SDJ: Proszę opowiedzieć o swoich począt- SDJ: Jakie języki programowania i tech-
kach w Serena Software. nologie stosuje Serena Software w two-
Kevin Parker: Początkowo pracowałem w rzeniu aplikacji?
Kevin Parker Serenie jako kierownik produktu. Dość szyb- KP: Dziś w Serenie tworzymy aplikacje w
ko zostałem wicedyrektorem działu badań i większości w Javie. Stronę serwerową pisze-
Wiceprezes firmy Serena Software rozwoju oprogramowania, prowadziłem ten my w C++. Wciąż opracowujemy aplikacje
dział przez 8 lat, współtworzyłem projekt fra- dla mainframe w Assemblerze. Zatem uży-
mework dla Eclipse'a do zarządzania cyklem wamy tego, co uważamy że jest najodpo-
życia aplikacji (który wszyscy nazywają ALF wiedniejszym językiem dla określonej plat-
– Aplication Lifecycle Framework), a przez formy i określonego komponentu architek-
ostatnie trzy i pół roku byłem mentorem dla tury.
całej firmy.
SDJ: Czy używacie również .NET?
SDJ: Rozpoczynając prezentację na kon- KP: Ogólnie posiadamy dwie najważniej-
Kevin Parker ferencji Software Development Giga- sze platformy architektoniczne. Jedną z nich
Con stwierdził Pan, że to COBOL był Pa- jest .NET i jest to jedna z podstawowych plat-
– Wiceprezes i Chief na pierwszym językiem, dlaczego? form, których używamy dla tworzenia więk-
KP: W mojej pierwszej pracy byłem pro- szości kodu strony serwerowej; drugą plat-
Evangelist w firmie gramistą COBOL-a. Pisałem aplikacje w CO- formą używaną do programowania strony
BOL-u od 1978 do 1988 roku. A dziś na ca- klienckiej jest Eclipse.
Serena Software. łym świecie w ciągu roku – co jest zasko-
czeniem dla ludzi – powstaje jakieś 15 mi- SDJ: Jakie jest podejście Serena Software
Odpowiada za lionów linii nowego kodu w COBOL-u. Ję- do rozwoju Open Source i Linuksa?
zyk ten jest więc daleki od wyginięcia – po- KP: Naszą strategią w stosunku do Linuk-
strategię rozwoju dobnie jak słychać, że komputery typu ma- sa jest strategia naszych klientów . Jeśli nasi
inframe są już martwe, a nie są; IBM wy- klienci używają Linuksa, to my wspieramy Li-
technologii. puszcza coraz więcej komputerów main- nuksa. Tak samo jak w przypadku systemów
frame każdego roku i są one kręgosłupem IBM AIX, SUN Solaris, HP-UX, czy jakichkol-
Posiada 30-letnie wielu systemów biznesowych. Z tego wła- wiek innych.
śnie się wywodzę. Miałem szczęście w mo- Rdzeniem naszego biznesu jest przestrzeń
doświadczenie w jej karierze i zawsze umiałem dostosować zarządzania cyklem życia aplikacji, to znaczy,
się do każdej fali nowej technologii. Z do- pomaganie architektom i programistom w
branży, a zaczynał świadczenia wiem, że to co robiło się 30 lat tworzeniu aplikacji w sposób bardziej efek-
temu, robi się i dziś. Używamy innej termi- tywny. A dziś największa część naszych klien-
pracę od tworzenia nologii, wszystko robimy znacznie szybciej tów to są największe korporacje na świecie.
i znacznie łatwiej, ale podstawowe dyscy- Więc np. 10 największych firm w 10 najwięk-
oprogramowania. Jest pliny są dokładnie takie same, jak to już by- szych sektorach gospodarki używa produk-
ło 30 lat temu. Bardzo mi się podoba moż- tów Sereny. Zatem 10 największych banków,
m.in. posiadaczem liwość patrzenia z tej perspektywy, bo to 10 największych firm ubezpieczeniowych,
pomaga mi przewidzieć, jakie następne 10 największych wytwórców, 10 najwięk-
trzech patentów problemy zostaną stworzone przez no- szych firm telekomunikacyjnych na świe-
we technologie. W Serenie pomagamy lu- cie, używa produktów Sereny do zarządza-
technologicznych. dziom rozwiązywać problemy zarówno nia cyklem życia aplikacji. A jedną z charak-
na komputerach mainframe (od 1980 ro- terystycznych rzeczy dla wielkich firm jest to,
Świetny, ceniony i ku), jak i na platformach Unix czy Micro- że nie mają one zazwyczaj tylko jednej plat-
soft Windows. Posiadanie doświadczeń we formy systemowej czy deweloperskiej. Nie
chętnie zapraszany wszystkich tych obszarach oznacza, że je- używają np. tylko .NET, albo tylko Javy, nie
steśmy rzeczywiście dobrzy w tym, co ro- mają tylko platformy Linux albo Unix. Musi-
mówca. bimy. my więc wspierać wszystkie platformy sys-

74 10/2008
Wywiad

temów operacyjnych, wszystkie platformy problemu. Najlepszym sposobem na wspar- którym jest ona potrzebna użytkownikom
i narzędzia programistyczne, tak jak musi- cie użytkownika biznesowego w rozwiązy- biznesowym, tym lepiej aplikacje wspoma-
my również wspierać wszystkie typy baz da- waniu problemów jest udostępnienie im gają biznes i tym większy sukces osiąga biz-
nych, jakie tam występują – Oracle, Sybase, ich własnych danych.. A dane udostępniane nes. Zatem, zamiast budować aplikację, któ-
DB2, SQL Server i MySQL. Musimy wspie- w formie webservices są łatwiejsze w użyciu ra jest dla użytkownika końcowego użytecz-
rać IDE, których oni używają, czyli np. Ecli- niż Microsoft Excel czy Visio. Serena Software na w 80%, lepiej jest nie budować aplikacji,
spe, Microsoft Visual Studio, WebSphere AD umożliwia stworzenie i uruchomienie front- tylko zbudować zespół webserwisów i niech
Studio, czy JBuilder. Musimy również wspie- endu do tych webserwisów. To powoduje, że użytkownicy biznesowi sami wykorzystają
rać różne używane przez naszych klientów webserwisy są łatwe w użyciu, a nasza tech- je poprzez Mashupy. To im rzeczywiście bar-
narzędzia firm trzecich, jak np. HP Quality nologia nadaje im ludzką twarz. Zatem użyt- dziej się przyda. Myślę, że niektórzy progra-
Center, czy Load Runner. Mamy zatem bar- kownicy biznesowi mogą odpowiedzieć na miści mogą stwierdzić, że będą mieli całkiem
dzo szeroki zestaw partnerów, a nierzadko wiele swoich pytań nawet bez zawracania dobrą zabawę jako programiści, jeśli będą
i konkurentów, z którymi musimy się inte- głowy IT. A to skraca listę problemów zgła- pracować dla biznesu. Jeśli będą pracować w
grować, żeby wspierać naszych klientów. Za- szanych działom IT. kadrach, w produkcji, w sprzedaży, jako pro-
tem – co powiedziałem na początku – gdzie Po trzecie, często użytkownicy biznesowi gramiści biznesowi dla tych wydziałów, bo
jest strategia naszych klientów, tam jest i na- nie mogą dostać pełnej odpowiedzi od dzia- wtedy będą oni posiadali dokładną wiedzę
sza strategia. łów IT, bo część odpowiedzi jest informacją o tym, jak ten biznes działa; będą współpra-
znajdującą się na zewnętrz organizacji. Było- cownikami, czy doradcami ludzi, którzy pro-
SDJ: Jakie platformy systemowe i dewelo- by wspaniale, gdyby użytkownicy biznesowi wadzą taki biznes. I będziemy mieli rzeczy-
perskie są zatem popularne wśród klien- mogli pozyskiwać informacje jednocześnie wisty wgląd w to, jak wygląda faktyczna wi-
tów, czy jest to Linux, czy raczej .NET i ze swoich centrów danych oraz z otocze- zja tego biznesu, jaka jest jego strategia, ja-
Windows? nia biznesowego, łączyć je ze sobą na swo- ka jest polityka, jakie cele i ambicje kierow-
KP: Nie jest nią Linux. Pierwszym jest raczej im pulpicie i znajdować odpowiedzi na swo- nictwa, które prowadzi ten biznes. I będą oni
Windows, drugim pewnie Solaris, a potem je pytania. I tak właśnie powstaje klasyczny mogli wyrazić te aspiracje poprzez technolo-
– rzekłbym blisko obok siebie – są HP-UX i Mashup. Na przykład użytkownik chce zlo- gię i wdrażać ją w biznesie, mając szczegóło-
Linux. Ale ponieważ spory odsetek naszych kalizować swoje ciężarówki (co wymaga po- wą wiedzę o tym biznesie. I myślę, że jest to
klientów wciąż używa komputerów mainfra- łączenia informacje zawartych we własnych podstawowa zmiana reguł gry, gdzie nie ma
me, a w tych obszarach jesteśmy z pewnych centrach danych z informacjami o położe- już ustawicznego tłumaczenia tego, co biz-
względów wyjątkowi, to te platformy też niu np. z Google Earth, bądź z map aktualnie nes chciałby wyartykułować, na to, jak IT ro-
wspieramy. Rzekłbym, że trzy najważniejsze wykonywanych prac drogowych na drogach zumie i rozwiązuje problem. Dochodzimy te-
systemy operacyjne z punktu widzenia Sere- międzymiastowych) żeby móc się z nimi po- raz do miejsca, gdzie biznes faktycznie two-
ny, to Microsoft Windows, SUN Solaris i IBM łączyć i przekazać im, żeby zmienili trasę ob- rzy rozwiązanie, bez potrzeby tłumaczenia.
z/OS na komputerach mainframe. jeżdżając Warszawę, bo na ich trasie zdarzył A dzięki temu – w miarę możliwości – żadne
się wypadek i powstała blokada. Dzięki Ma- szczegóły nie umkną, bo nie będzie żadnej
SDJ: Proszę wyjaśnić czym są narzędzia shupom użytkownicy uzyskują lepsze odpo- potrzeby tłumaczenia. I myślę, że dla wielu
do tworzenia Mashupów biznesowych? wiedzi na biznesowe problemy, stosując in- programistów będzie to bardzo pouczające,
KP: Dobre pytanie. Myślę że są na nie trzy formację zintegrowaną, łącząc informację, a jednocześnie promujące, bo będą się czuli
możliwe – wzajemnie się uzupełniające – od- która jest dostępna w Sieci wraz z informacją częścią dostarczonego rozwiązania. Będą tak
powiedzi. dostępną w ich systemach biznesowych. samo dumni z tego, co robią w ramach or-
Przede wszystkim, na rynku IT jest znacz- Uważam, że Mashupy pod względem no- ganizacji, jak wtedy, gdy pracowali jako pro-
nie większe zapotrzebowanie na aplikacje, watorstwa są podobne do komputerów oso- gramiści w IT. A skutkiem ubocznym takiego
niż rynek jest w stanie dostarczyć. Użytkow- bistych z czasów ich początków. Gdy pojawi- przesunięcia będzie chociażby to, że coraz
nicy biznesowi starają się nieumiejętnie roz- ły się komputery osobiste, działy IT nie były mniej prac nad oprogramowaniem będzie
wiązywać swoje problemy informatyczne za zachwycone faktem, że, użytkownicy bizne- przenoszonych za granicę. Bo znacznie trud-
pomocą arkuszy Excela, baz danych Acces- sowi mają swoje własne komputery. Do dziś niej jest mieć eksperta biznesowego w Szan-
sa, oprogramowania ściąganego z Sieci oraz nadal mainframe'y są dobre dla wszystkich, ghaju , czy Bombaju. Łatwiej mieć kogoś ta-
za pomocą siermiężnych aplikacji otrzyma- są w jednym konkretnym miejscu. Okaza- kiego tu na miejscu, w centrali w Warszawie,
nych z gazet. To właśnie Mashupy bizneso- ło się jednak, że użytkownicy biznesowi po- bo siedzi w biurze obok szefa, korytarz dalej
we są metodą na szybkie tworzenie aplikacji. trzebowali komputerów osobistych. Uwa- od kierownictwa, które jest odpowiedzialne
poprzez ich prototypowanie, a potem wdro- żam, że z Mashupami jest tak samo. Mashupy za biznes i kanały komunikacyjne, a linie ko-
żenie prototypu. Nauczyliśmy się z Web 2.0, to technologia, która pozwala użytkowniko- munikacji są krótkie i rozwiązania są bardziej
że to co jest wystarczająco dobre, faktycz- wi biznesowemu zebrać w całość wszystkie odpowiadające jako rezultaty. Może to ozna-
nie jest wystarczająco dobre i wcale nie mu- źródła danych, samodzielnie dokonując po- czać, że niektóre z tych miejsc pracy, które
si być doskonałe. Użytkownicy zwykle są za- trzebnych integracji danych i procesów. straciliśmy na rzecz Indii, czy Chin, wrócą te-
dowoleni z najważniejszej funkcjonalności i raz jako rezultat tych działań.
nie potrzebują wszystkich bajerów i wodo- SDJ: Jakie pytania najczęściej zadają Se-
trysków. renie programiści? SDJ: Czy Serena Software posiada specjal-
Po drugie, użytkownicy biznesowi czasem KP: Często programiści pytają Co my mamy ny program dla programistów?
nie wiedzą, jak zadać pytanie działom IT. Mu- robić, kiedy użytkownicy biznesowi będą two- KP: Nie, to nie jest coś, czym Serena mogłaby
shupy biznesowe to narzędzia, które pozwa- rzyć własne aplikacje? Pierwsze co dział IT się zajmować. Istotą biznesu Sereny jest za-
lają użytkownikowi samemu znaleźć odpo- może (i powinien) zrobić w tej chwili dla biz- rządzanie cyklem życia aplikacji, zatem pro-
wiedź. Użytkownik ma wgląd w to, gdzie nesu, to opakować usługi tradycyjnych apli- gramiści często patrzą na nasze technologie
leży rzeczywisty problem i sam najszybciej kacji do postaci webserwisów – im więcej in- jako w pewnym sensie ograniczające ich kre-
znajduje rzeczywiste rozwiązanie swojego formacji możemy dostarczyć do miejsca, w atywność, bo my jesteśmy głównie zainte-

www.sdjournal.org 75
Wywiad

resowani rzeczami takimi, jak Software Con- globalną korporacją, gdzie każdy ma lapto- W ten sposób mamy naszego pierwsze-
figuration Management, takimi jak kontrola pa, wielu ludzi ma swoje biurka w biurze, go klienta następnego release'u naszego
wersji, strzeżenie dostępu do artefaktów, za- ale pracuje trzy dni w tygodniu w biurze, a produktu – Serenę. Bo jeśli będą z tym pro-
rządzaniem buildami itp. Ale myślę że każdy dwa w domu. Ci pracownicy, którzy miesz- blemy, chcemy się upewnić, że znajdziemy
zawodowy programista dzisiaj zdaje sobie kają daleko od biura pracują cały czas z do- je zanim oddamy to do klienta. I jest to na-
sprawę, że jeśli wprowadzi niedobrą zmia- mu. Mamy bardzo wyrafinowaną infrastruk- prawdę zachwycające, bo kiedy nasi klienci
nę w oprogramowaniu, przeniesie się to na turę i oczywiście lubimy mówić, że pijemy robią beta-testy naszego kodu, my już uży-
niebagatelny efekt dla biznesu, więc posia- własnego szampana, co oznacza po prostu, wamy tej wersji codziennie jako wersji pro-
danie na miejscu technologii, która pozwoli że nasi programiści używają naszych wła- dukcyjnej. I oczywiście oznacza to, że pro-
przewidzieć szkodliwe zmiany i im przeciw- snych narzędzi do tworzenia oprogramo- gramiści pracujący w Serenie wiedzą, że je-
działać, jest jak najbardziej w ich długofalo- wania. Zatem na przykład nasze flagowe śli zrobią naprawdę poważny błąd, to pierw-
wym interesie. narzędzie do Software Configuration Ma- si na tym ucierpią.
W większości części składowych naszych nagement nazywa się Dimensions i jedną
rozwiązań staramy się zapewnić, aby nasza z najmocniejszych zalet Dimensions jest to, SDJ: Jaką rolę widzi Pan dla partnerów
technologia nie dokładała programistom że ma bardzo, bardzo wysoką wydajność w i dlaczego warto zostać partnerem Se-
dodatkowej pracy. Ukrywamy zatem naszą sieci WAN. Więc jeśli zrobi się check-out ka- reny?
technologię pod kurtyną IDE i jeśli chodzi o wałku kodu w Indii albo w Saint Albans, czy KP: To proste: nie możemy być jednocze-
programistów, muszą oni tylko wykonywać w Redwood City, zajmuje to dosłownie mo- śnie wszędzie! Jesteśmy co prawda firmą
check-out i check-in, a my wykonujemy cała ment, nawet jeśli serwer jest w Hillsboro w globalną z biurami rozrzuconymi po całym
resztę od tego miejsca. Jeśli jednak pracow- Oregonie. Serwer jest zatem w jednym mie- świecie, ale to dopiero partnerzy wnoszą
nik pełni rolę Release/Build Manager-a, to na- ście a programiści na całym świecie. Jest to dodatkową wartość w postaci znajomo-
sza technologia jest dla niego ważna. Bo po- bardzo wydajny check-out. Jednym z naj- ści lokalnych uwarunkowań rynkowych,
zwala dostrzec cały obraz pracy nad opro- większych problemów związanych z posia- kulturowych, językowych, prawnych itd.
gramowaniem, cokolwiek by się tam działo, daniem programistów rozrzuconych po ca- A ze strategicznego punktu widzenia jest
nawet jeśli niektóre części dzieją się w Szan- łym świecie jest to, że jak przypisze się za- to dla nas bezcenne. Wspomniałem wcze-
ghaju, czy Bombaju, czy też oprogramowa- danie do programisty, może on nie być na śniej, że naszą strategią jest strategia na-
nie tworzy się w Kijowie czy Warszawie. Trze- nogach akurat w tym samym momencie, co szych klientów. Zdobycie zatem partne-
ba być pewnym, że się widzi wszystkie jed- jego menedżer. Mamy więc nasze wspania- ra, który już jest u klientów z innymi swo-
nostki konfiguracji, pewnym że wszystkie łe narzędzie, oczywiście stworzone z pomo- imi rozwiązaniami, szczególnie w sytuacji,
rzeczy są oprogramowane spójnie, że są cą Serena Business Mashups, które pozwa- gdy nasze rozwiązania doskonale uzupeł-
spójnie skompilowane, spójnie przetestowa- la nam przypisywać zadania współpracow- niają ofertę naszego partnera – to jest dla
ne, spójnie wdrożone. A jeśli cokolwiek pój- nikom, żeby pracowali i aktualizowali stan nas sytuacja idealna. Nasz partner już zna
dzie naprawdę źle to wszystko będzie mo- prac, a my będziemy widzieli status tego, strategie potencjalnego klienta, wie ja-
gło być też spójnie wycofane. I jeśli ktoś jest nad czym pracują nie potrzebując nawet z kich platform i technologii używa do bu-
Release Managerem, to wszystko to jest dla nimi rozmawiać, ani ich widzieć osobiście. dowania aplikacji biznesowych – może za-
niego rzeczywiście ważne – dlatego dostar- Mamy oczywiście tygodniowe telekonfe- tem szybko i trafnie zaoferować rozwiąza-
czamy mu takie narzędzia, a programista w rencje z członkami zespołów i tak dalej, ale nie adresując poprawnie określone potrze-
ogóle nie musi widzieć tych narzędzi. zawsze możemy widzieć, w jakim stanie są by klienta. Świetnym przykładem jest nasz
sprawy. A także dla biura zarządu projektu polski partner – firma CompFort Meridian.
SDJ: Kogo zatrudnia Serena Software? (Project Management Office) – bo biuro za- Specjalizując się w dostarczaniu rozwiązań
KP: Jesteśmy zupełnie jak każda inna firma rządu projektu też jest rozrzucone po świe- do zarządzania IT, dzięki naszym rozwią-
i mamy centra programistyczne na całym cie – mamy bardzo dobre narzędzie, zwa- zaniom jest w stanie dostarczyć klientowi
świecie. Mamy więc centra w Stanach Zjed- ne Mariner. Pozwala ono widzieć nad czym kompleksową usługę analizy, zaprojekto-
noczonych: w Bellevue w Washington, w Hil- każdy pracuje, widzieć kiedy pracownicy wania i wdrożenia zintegrowanego syste-
lsboro w Oregonie, w Redwood City w pól- kończą przydzielone zadania, by następnie mu zarządzania IT, właśnie z uwzględnie-
nocnej Kaliforni, w Woodland Hills w połu- przypisać ich do przyszłych projektów. Na- niem projektowego zarządzania cyklem
dniowej Kaliforni, w Colorado Springs w Co- rzędzie Mariner wykorzystujemy także do życia oprogramowania. Wspomniałem tak-
lorado. Mamy też centrum programistyczne zarządzania pomysłami na projekty, które że wcześniej o konieczności łatwości inte-
w Wielkiej Brytanii w Saint Albans (pierwot- mogą pochodzić od naszych klientów, od gracji oferty różnych producentów opro-
ne centrum w Europie) mamy kilka zespołów zarządu lub kierowników projektów. gramowania w jedno, spójne rozwiązanie.
programistów w Indiach w różnych miej- Nasze oprogramowanie także poddajemy W takiej sytuacji to rolą partnera jest za-
scach, mamy też mały zespół w Kijowie. Kra- rygorom cyklu życia aplikacji, w ramach prac pewnienie skutecznej i działającej integra-
ków? Jeszcze o tym nie myśleliśmy. Znaczącą projektowych. I do tego sami używamy tych cji, co niewątpliwie jest atrakcyjne z punk-
większość z tych lokalizacji posiadamy dlate- samych narzędzi, które chcemy, by używa- tu widzenia klienta, bo nie musi już sam
go, że albo mamy w tych miejscach oddziały li nasi klienci. Sami stosujemy przy tym naj- użerać się z wieloma dostawcami, by za-
przejętych firm, albo mamy tam partnerów lepsze praktyki w zarządzaniu projektami i pewnić współdziałanie różnych techno-
posiadających zespoły programistów. cyklem życia oprogramowania. W tym kie- logii. A partner – oprócz oczywistych wy-
runku kształcimy i przygotowujemy naszych miernych korzyści – zyskuje dostęp do na-
SDJ: Jeśli zatem inżynier oprogramowa- pracowników. szej świetnej technologii i sam może wes-
nia z Polski chciałby pracować w Serena Zdradzę jeszcze jedno – bo chyba niewie- przeć swoje wewnętrzne procesy naszymi
Software, powinien wybrać się na Wyspy lu o tym wie – jeśli stworzymy nowsze wersje rozwiązaniami. A najlepszą referencją jest
Brytyjskie? naszych produktów to najpierw wpuszcza- dostawca (w tym wypadku partner), który
KP: Około 1/2 naszych inżynierów prak- my beta-wersje do naszych własnych środo- sam efektywnie używa rozwiązań oferowa-
tycznie pracuje ze swojego domu. Jesteśmy wisk produkcyjnych. nych swoim klientom.

76 10/2008
Wywiad

SDJ: W jaki sposób postrzega Pan rolę cza-


sopism takich jak Software Developer's
Journal?
KP: Myślę, że czasopisma są naprawdę waż-
ne dla zespołów programistycznych Sere-
ny. Wziąwszy pod uwagę dostawców opro-
gramowania, którzy sami tworzą dostarcza-
ne aplikacje, często występują uogólnione
problemy, istnieją też uogólnione rozwią-
zania dla uogólnionych problemów. Więk-
szość naszych klientów tworzy specyficzne
rozwiązania dla specyficznych problemów.
Są to zatem zupełnie inne zestawy umiejęt-
ności. I będąc programistą, jest się zwykle za-
interesowanym tym, jakie są najnowsze tren-
dy w przemyśle, jakie są nowe pułapki w no-
wych IDE, czy nowych bazach danych. Dla-
tego czasopisma są naprawdę istotne dla
nas jako twórcy i dostawcy oprogramowa-
nia. Pomagają nam wejrzeć w to, co się dzie-
je na świecie.
Robimy w Serenie co możliwe, żeby pro-
gramiści byli otwarci na nowe trendy. Przy-
kładowo, całkiem dużo programistów Sere-
ny bierze udział w naszych dorocznych kon-
ferencjach klientów i użytkowników. Jest to
dla nas niepowtarzalna okazja, by spotykać
się z klientami i dowiadywać się, co robią.
Mamy do tego naszą specjalną strefę odpo-
wiedzi, gdzie gromadzą się wszyscy kumacze
(geeks) Sereny, co to chodzą w białych fartu-
chach i oczekują by podszedł klient i powie-
dział: jesteś kumaczem z Sereny, mam dla cie-
bie pytanie....
Chcemy, aby nasi inżynierowie spotyka-
li się bezpośrednio z klientem. Mamy spo-
tkania doradztwa produktów, gdzie nasi naj-
więksi klienci, którzy używają naszych pro-
duktów, spotykają się z zespołami produkto-
wymi i w najdrobniejszych szczegółach wy-
kładają rzeczy, które chcieliby mieć w przy-
szłych wersjach produktu. Mamy znakomitą
społeczność użytkowników – Serana Com-
munity – mającą też swój portal communi-
ty.serena.com, gdzie klienci i ludzie z Sere-
ny przesiadują razem. Nasi zawodowi kon-
sultanci i inżynierowie wsparcia oraz pro-
gramiści czatują z klientami, a klienci mówią:
hej, dlaczego to tak ma działać?, a ludzie Se-
reny mówią: a, no bo..., a czy wiedzieliście, że...
i dzielą się wszystkimi informacjami. I tak sta-
raliśmy się uczynić ścianę między klientem a
inżynierem możliwie najcieńszą, żeby inży-
nier oprogramowania mógł się dowiedzieć
dokładnie, jak klient używa produktu i coś z
tego wynieść. Bo – niestety – łatwo jest do-
stawcy oprogramowania stać się wieżą z ko-
ści słoniowej, obwarowanym miastem, z któ-
rego nic na zewnątrz się nie dostrzega i do
którego żadną miarą nie można się dobić. I
mocno się staramy różnymi sposobami, by
nasi programiści wiedzieli, co się dzieje u
klienta, a także by naszych klientów włączać
w tworzenie naszych produktów.

www.sdjournal.org 77
KLUB PRO
Oferta skierowana dla firm
Jeżeli Twoja firma jest prenumeratorem Software Developer’s Journal za comiesięczną
dopłatą 50 PLN +VAT możesz dodatkowo otrzymać reklamę.
Wystarczy tylko, aby profil Twojej firmy pokrywał się z naszym magazynem.
Wyślij do nas: logo firmy, dane kontaktowe i informację o firmie
Reklama przez 12 kolejnych numerów tylko za 600 PLN +VAT.
Jeżeli nie posiadasz jeszcze prenumeraty możesz ją zamówić w atrakcyjnej cenie.
Dla nowych prenumeratorów specjalna oferta – 690 PLN.

Skontaktuj się z nami:


sdj@software.com.pl tel. 22 427 36 91
pren@software.com.pl http://buyitpress.com

Opera Software Architektury systemów IT


Opera Software’s vision is to deliver the best In- Twórca frameworków JUVE i serwera aplikacji
ternet experience on any device. We are offering AVAX oferuje usługi, doradztwo, rozwiązania do
browser for PC/desktops and embedded pro- tworzenia nowoczesnych, dużych systemów i roz-
ducts that operates across devices, platforms wiązań informatycznych/internetowych, integrują-
and operating systems. Our browser can deliver ce architektury ery post-J2EE/.NET, wykorzystu-
a faster, more stable and flexible Internet expe- jące MDD/MDA dla dziedzin – bankowość, teleko-
rience than its competitors. munikacja, handel, e-commerce, ERP/Workflow/
CRM, rozwiązania internetowe, portalowe.
http://www.opera.com www.mpsystem.com mpsystem@mpsystem.com

FRONTLINE STUDIOS Future Processing


Frontline Studios – amerykańsko-polski twórca gier Future Processing to dynamiczna firma techno-
konsolowych oraz PC – szuka utalentowanych ko- logiczna działająca na globalnym rynku opro-
derów (bardzo dobra znajomość C/C++; Java, Del- gramowania. Jesteśmy zespołem wysokiej klasy
phi, UML), doświadczonych grafików (2D, 3D) oraz specjalistów posiadających wiedzę i doświadcze-
zespołów developerskich. Oferujemy długotermi- nie niezbędne do realizacji ambitnych projektów
nową pracę nad poważnymi projektami. Nie prze- informatycznych. Jeśli programowanie to Twoja
gap tej okazji! pasja dołącz do nas! (możliwość pracy zdalnej).

kadry@frontstudios.com http://www.future-processing.pl

Intercon Sp. z o.o. Kei.pl


Dostawca zaawansowanych rozwiązań informa- Kei.pl działa na rynku usług hostingowych od 2000
tycznych, nowoczesnych systemów sprzedażo- roku. Do naszych zadowolonych Klientów z du-
wych, systemów e-commerce oraz programów mą możemy zaliczyć wiele przedsiębiorstw sekto-
partnerskich. Oferujemy systemy wspierające za- ra MSP, instytucji oraz osób prywatnych. W ofer-
rządzanie przedsiębiorstwem oraz wielokanałową cie Kei.pl znajdują się pakiety hostingowe, a także
sprzedaż, rozwiązania typu e-CRM, systemy typu usługi dla wymagających Użytkowników – platfor-
work-flow, zaawansowane wnioski internetowe, roz- my e-Biznes oraz serwery fizyczne.
wiązania portalowe.
http://www.intercon.pl http://www.kei.pl
KLUB PRO

StatConsulting TTS Company Sp. z o.o.


StatConsulting to firma o znaczącej pozycji na ryn- Sprzedaż i dystrybucja oprogramowania komputero-
ku usług analitycznych oraz Data Mining. Nasza wego. Import programów na zamówienie. Ponad 200
oferta obejmuje m.in. modele scoringowe, rozwią- producentów w standardowej ofercie. Chcesz kupić
zania Fraud Detection oraz modelowanie ryzyka. oprogramowanie i nie możesz znaleźć polskiego do-
Tworzymy także własne rozwiązania informatycz- stawcy? Skontaktuj się z nami – sprowadzimy nawet
ne na potrzeby projektów Data Mining, Data Quali- pojedyncze licencje.
ty, zarządzania ryzykiem itd.

http://www.statconsulting.com.pl http://www.OprogramowanieKomputerowe.pl

Transition Technologies S.A. EPRO


Firma w branży high-tech od 1991. Producent opro- Naszą misją jest projektowanie najwyższej jako-
gramowania dla przemysłu (ponad 350 referencji z ści dedykowanych systemów IT, które cechuje
instalacji na całym świecie). Usługi z zakresu: hur- wysoka niezawodność, wydajność, ergonomicz-
townie danych i Business Intelligence, rozwiązania ność i intuicyjność w obsłudze oraz administracji.
eBusiness, optymalizacja, integracja danych, aplika- Głównym elementem oferty EPRO jest oprogra-
cji oraz procesów biznesowych, portale korporacyj- mowanie sklepu internetowego oraz identyfika-
ne, consulting i outsourcing usług IT, zaawansowa- cja wizualna.
na automatyka cyfrowa. tel. 085 743 66 38
http://www.tt.com.pl http://www.epro.com.pl

IT SOLUTIONS Softline rozwiązania mobilne


Wdrożenia i szkolenia z zakresu: Wiodący producent systemów mobilnych, do-
• SQL Server stawca aplikacji użytkowych dla biznesu (Sym-
• SharePoint Services bian OS, Windows Mobile, J2ME ) zaprasza do
IT SOLUTIONS • MS Project / Server
• Tworzenie aplikacji w technologii .NET
współpracy. Zostań naszym partnerem. Dołącz
do zespołu.

http://www.itsolutions.biz.pl
marcin.pytlik@itsolutions.biz.pl http://www.softline.com.pl

Osmosys Technologies Sp. z o.o. SWD Software Sp. z o.o


Dostarczamy kompletne rozwiązania dla rynku cy- System operacyjny czasu rzeczywistego RTOS
frowej telewizji interaktywnej. Oferujemy oprogra- QNX. Oficjalny dystybutor w Polsce.
mowanie typu middleware, aplikacje JAVA, syste- Zakres działalności: lokalizacja produktów QNX,
my nadawcze oraz usługi „pod klucz”. Nowe obsza- dostawy sprzętu i oprogramowania, doradztwo
ry działalności firmy to: odtwarzacze Blu-ray Disc, przedsprzedażowe, wsparcie techniczne, certyfi-
DLNA/Home Networking, akceleratory 3D, systemy kowane szkolenia, opracowania na zamówienie.
‘Video on Demand’, Push VoD oraz systemy rekla-
my interaktywnej.
http://www.osmosys.tv http://www.swdsoft.pl
Roczna prenumerata

tylko
250,-
Software Developer’s Journal (poprzednio Software 2.0)
jest miesięcznikiem głównie dla programistów, którzy li-
czą, że dostarczymy im gotowe rozwiązania, oszczędza-
jąc im czasu i pracy. Jesteśmy czytani przez tych, któ-
rzy chcą być na bieżąco informowani o najnowszych osią-
gnięciach w dziedzinie IT i nie chcą, żeby jakiekolwiek
istotne wydarzenia umknęły ich uwadze. Aby zadowolić
naszych czytelników, prezentujemy zarówno najnowsze
rozwiązania, jaki starsze, sprawdzone technologie.

Kontakt
1. Telefon 2. Online
+48 22 427 36 91 pren@software.com.pl
+48 22 427 36 79
+48 22 427 36 50 3. Adres
Bokserska 1
2. Fax 02-682 Warszawa
+48 22 244 24 59 Polska
Zamówienie prenumeraty

Prosimy wypełniać czytelnie i przesyłać faksem na numer:


00 48 22 244 24 59
lub listownie na adres:
Software-Wydawnictwo Sp. z o. o.
ul. Bokserska 1
02-682 Warszawa
Polska
E-Mail: pren@software.com.pl
Przyjmujemy też zamównienia telefoniczne:
0048 22 427 36 91
0048 22 427 36 79
0048 22 427 36 50

Jeżeli chcesz zapłacić kartą kredytową,


wejdź na stronę naszego sklepu internetowego www.buyitpress.com.

Imię i nazwisko ...............................................................................

Nazwa firmy.....................................................................................

Dokładny adres ..............................................................................

.........................................................................................................

Telefon ............................................................................................

E–mail .............................................................................................

ID kontrahenta ................................................................................

Numer NIP firmy .............................................................................

Fax (wraz z nr kierunkowym) .........................................................

□ automatyczne przedłużenie prenumeraty

Prenumerujesz
– zyskujesz
l oszczędność
pieniędzy Ilość Od
Ilość zama- numeru
l szybka dostawa Tytuł nume- wianych pisma Cena
rów prenume- lub mie-
l prezenty rat siąca

l bezpieczna płatność Software Develope-


12
180*/

ność on–line r’s Journal (1 płyta CD)


– dawniej Software 2.0
250
PLN

* cena prenumeraty rocznej dla osób prywatnych


W NASTĘPNYM NUMERZE SOFTWARE DEVELOPER’S JOURNAL 11/2008 167

ECOMMERCE
Sklep internetowy w PHP i SQLite
Textpattern – Wydajny, elastyczny i przyjazny CMS

PROGRAMOWANIE JAVA
Obliczenia numeryczne w programach komputerowych

PROGRAMOWANIE PHP
Zaawansowana obróbka grafiki w PHP
Porównanie opensource-owych platform blogowych opartych o PHP i ba-
zy danych

TESTOWANIE OPROGRAMOWANIA
Plugin – wielokrotne wykorzystanie sprawdzonych narzędzi

NOWE ARTYKUŁY W DZIAŁACH


Biblioteka miesiąca
Systemy operacyjne

I WIELE INNYCH ARTYKUŁÓW, KTÓRYCH NIE MOŻESZ PRZEOCZYĆ!

W spr
zedaż
y od 18
paźd
ziern
ika Redakcja zastrzega sobie możliwość zmiany zawartości pisma.

82 10/2008

You might also like