SDJ - Listopad 2012 ebook

Transkrypt

SDJ - Listopad 2012 ebook
Spis treści
Praca z „Legacy Code” część 2 Przekleństwo
czy intelektualne wyzwanie? ....................................................................... 3
Grzegorz Gubiński
Wielu programistów nie chce pracować w projektach, w których głównym zajęciem jest utrzymanie produktu a nie jego rozwój. W przypadku takich projektów metafora produkcji oprogramowania wymyślona przez Alistaira Cockburna – gra bagienna – ma zdwojoną siłę przekazu. Programiści pracujący w takim środowisku starają się…
przetrwać. Ponieważ nie znają moczar, boją się w nie wchodzić. Jednak
ich zadaniem jest opieka nad cennymi roślinami-funkcjonalnościami
– za to są przecież wynagradzani. Aby wybrnąć z sytuacji większość
z nich decyduje się na najbezpieczniejszą z pozoru strategię – minimalne
ingerencje. Jednak takie podejście powoduje dalszą degenerację środowiska ich pracy – bagno zarasta coraz bardziej.
czesnym zachowaniu dostępności. W odpowiedzi na to zapotrzebowanie departamenty IT wdrażają technologię wirtualizacji, środowiska cloud computingu i ujednoliconego przetwarzania dla systemów logicznych. Takie działania są efektywne dla IT, ale jednocześnie tworzą nowe
zależności w systemach fizycznych zarządzanych przez departamenty
obiektów i skutkują zmianami w zarządzaniu zasilaniem, chłodzeniem
i przestrzenią fizyczną. Czynniki te w połączeniu z rosnącymi kosztami energii elektrycznej, wymaganiami dotyczącymi zgodności z przepisami i umowami SLA powodują, że menedżerowie centrum danych
są zmuszeni zajmować się nie tylko działaniem sprzętu IT, ale także kompleksową obsługą całości infrastruktury centrum danych jako elementów ekosystemu.
Grywalizacja życie to nie bajka ................................................................ 16
Adrian „Adio” Zając
Rozwój technologii to wyzwanie dla programistów ................................ 10
Dariusz Dudek
Producenci sprzętu komputerowego prześcigają się w tworzeniu
urządzeń o coraz lepszych parametrach – mniejszych, lżejszych,
z coraz większą mocą obliczeniową. Podobnie dzieje się w obszarze
technologii IT. Z jednej strony oznacza to zwiększenie możliwości
twórców oprogramowania, jednak z drugiej, stawia przed informatykami sporo wyzwań.
Obecnie głównym wyzwaniem dla programistów jest bycie na bieżąco
ze zmianami na rynku technologii, który jest bardzo dynamiczny. Nowości, które początkowo wydają się jedynie ciekawostkami, często stają
się poważnymi konkurentami wobec sprawdzonych i znanych produktów. Okazuje się, że nowe rozwiązanie mogą być lepsze i znacznie tańsze.
Dzięki dobrej znajomości rynku zespoły projektowe wraz z programistami mogą zaprojektować i stworzyć systemy najlepiej dopasowane do potrzeb biznesu, ale też najbardziej korzystne finansowo.
Centrum danych - budowa czy kolokacja? .............................................. 11
Edyta Marchaluk
Rosnące potrzeby IT, digitalizacja kolejnych dziedzin życia, wymagające sprzętowo aplikacje, czy wreszcie ekspansja i nowe obszary działalności firm, stawiają managerom IT wyzwanie zapewnienia przestrzeni dla rozrastających się środowisk IT. Decyzje w tym obszarze poparte są najczęściej szeregiem analiz biznesowych, ale mogą mieć także podłoże w przyzwyczajeniach. Jedno z nich podpowiada nam, że wykonanie czegoś samodzielnie będzie tańsze. Drugie,
że jeśli coś jest naszą własnością, to mamy nad tym większą kontrolę,
a więc mamy większe poczucie bezpieczeństwa. Czy rzeczywiście tak
jest? Co powinniśmy rozważyć podejmując decyzję dotyczącą budowy
własnego centrum danych?
Zarządzanie infrastrukturą centrum danych
wypełnia lukę pomiędzy IT a obiektami . ................................................ 13
Piotr Kowalski
W dobie oszczędności i kryzysu gospodarczego menedżerowie centrów danych znajdują się pod ogromną presją podnoszenia efektywności działalności i zwiększenia wykorzystania dostępnych zasobów. Są
zmuszeni do podwyższania wydajności i redukcji kosztów przy jednoMiesięcznik Software Developer’s Journal
(13 numerów w roku) jest wydawany
przez SoftPress Sp. z o.o.
2
Prezes: Natalia Sieniutowicz
Redaktor Naczelny: Natalia Sieniutowicz
Redaktor Prowadzący: Patrycja Popławska
Skład i łamanie: Marcin Ziółkowski,
Graphics & Design Studio, www.gdstudio.pl
Kierownik Produkcji: Andrzej Kuca
[email protected]
Wirtualna zabawa w farmera stała się ogólnoświatowym fenomenem,
bijąc rekordy popularności. Zasiadając przed swoją ukochaną konsolą po ciężkim i wyczerpującym dniu nauki, czy pracy liczymy na chwilę relaksu po trudach dnia codziennego. Efekt takiego „odstresowywania się” jest o tyle lepszy, o ile dany tytuł spełnia swój główny cel,
którym jest dostarczenie szeroko pojętej rozrywki, czy to za sprawą hipnotyzującej zmysły grafiki, urzekającej ścieżki dźwiękowej, zapierającej
dech w piersiach fabuły, czy pompującej do krwi adrenalinę akcji.
Metodyka Agile i projekty SharePoint
– mezalians, ślub czy pogrzeb? ................................................................ 21
Janusz Falkiewicz – Analityk i Konsultant Biznesowy, JADE.
Metodyk zwinnych jako takich sądzę, iż nie ma potrzeby przedstawiać
- oficjalnie zostały ogłoszone jako manifest już w 2001 roku. Po szczegóły, bądź dla odświeżenia pamięci, polecam sięgnąć do tego źródła:
www.agilemanifesto.org/iso/pl/.
Idea jest prosta i chwytliwa: w realizacji wdrożeń informatycznych ważni są ludzie, współpraca z Klientem, interakcja wewnętrzna, reagowanie
na zmiany, cykliczne iteracje (trwają od 2 do 4 tygodni, są to tzw. sprinty) no i oczywiście działające oprogramowanie. A działające oznacza
wspomagające pracę i realizację celów biznesowych Klienta, takie, które on
„wykorzystuje”, a nie „obsługuje”. No software – just tools.
Programowanie w świecie nowych technologii ...................................... 24
Bogdan Bereza
Trzy podstawowe pytania
• Programiści – czy tworzą działające, zgodne z potrzebami klienta
aplikacje, czy tylko produkują i kompilują kod źródłowy?
• Rozwój technologii – czy to tylko bardziej wypasiona elektronika
oraz systemy operacyjne i języki programowania o coraz dziwaczniejszych
nazwach, czy również zmiany metod, procesów, organizacji?
• Nowość – dla jednej osoby, dla danej firmy, czy autentyczna nowość?
Co to właściwie jest „programowanie”?
Czy oznacza to tworzenie oprogramowania, a więc złożony proces,
obejmujący całą drogę od analizy wymagań, poprzez projektowanie, pisanie kodu, integrację, testowanie, wdrożenie i utrzymanie?
Czy też programowanie, to samo kodowanie: pisanie kodu źródłowego,
kompilowanie, ewentualnie anali za statyczna i testy jednostkowe
Adres korespondencyjny:
SoftPress Sp. z o.o.
ul. Bokserska 1, 02-682 Warszawa,
Polska
tel. +48 22 427 36 91,
fax +48 22 224 24 59
www.sdjournal.org
[email protected]
Dział reklamy:
[email protected]
Redakcja dokłada wszelkich starań, by publikowane w piśmie i na towarzyszących mu nośnikach
informacje i programy były poprawne, jednakże nie bierze odpowiedzialności za efekty wykorzystania ich; nie gwarantuje także poprawnego
działania programów shareware, freeware i public domain. Wszystkie znaki firmowe zawarte
w piśmie są własności odpowiednich firm. Zostały
użyte wyłącznie w celach informacyjnych. Osoby
zainteresowane wspópracą prosimy o kontakt:
[email protected]
Praca
z „Legacy Code” część 2
Przekleństwo czy intelektualne wyzwanie?
Wielu programistów nie chce pracować w projektach, w których
głównym zajęciem jest utrzymanie produktu a nie jego rozwój.
W przypadku takich projektów metafora produkcji oprogramowania
wymyślona przez Alistaira Cockburna – gra bagienna – ma
zdwojoną siłę przekazu. Programiści pracujący w takim środowisku
starają się… przetrwać. Ponieważ nie znają moczar, boją się w nie
wchodzić. Jednak ich zadaniem jest opieka nad cennymi roślinamifunkcjonalnościami – za to są przecież wynagradzani. Aby wybrnąć
z sytuacji większość z nich decyduje się na najbezpieczniejszą
z pozoru strategię – minimalne ingerencje. Jednak takie podejście
powoduje dalszą degenerację środowiska ich pracy – bagno zarasta
coraz bardziej. Widząc pogarszającą się powoli, lecz niezmiennie
sytuację stają się coraz bardziej sfrustrowani i zniechęceni. Niniejszy
artykuł ma za zadanie przedstawić strategię osuszania mokradeł
wraz z kilkoma użytecznymi technikami.
Dowiesz się:
Powinieneś znać:
• w jaki sposób radzić sobie z niepożądanymi
zależnościami w kodzie.
• podstawy języka C++
• podstawy Test Driven Development
• podstawowe pojęcia programowania obiektowego
D
osłowne znaczenie terminu kod spadkowy, to „kod, który otrzymaliśmy od
innej osoby”. Jednak w środowisku
zwinnych metodyk wytwarzania oprogramowania powszechnie przyjęła się definicja „kod
bez lub z małą ilością testów automatycznych”. Bez względu na definicję kod spadkowy
(czy też odziedziczony) wzbudza w programistach niemiłe skojarzenia. Wśród najczęściej
wymienianych są trudność ze zrozumieniem
kodu, oraz związany z nim strach przed wprowadzeniem niepożądanych efektów podczas
4
pielęgnacji. Z takim problemem mierzy sie codziennie wielu programistów.
Aby móc skutecznie radzić sobie innym
z takimi zadaniami M. Featchers zaproponował heurystykę wprowadzania zmian w
kodzie spadkowym. Algorytm ten składa się
z pięciu etapów:
• Znalezienie punktów, w których dokonywać będziemy zmiany,
• Znalezienie miejsc, w których będziemy
testować,
• Usunięcie niepożądanych zależności pomiędzy elementami, które będziemy testować a ich otoczeniem,
• Napisanie testów,
• Wprowadzenie pożądanych zmian.
W poprzednim artykule zajmowaliśmy się
dwoma pierwszymi krokami powyższej heurystyki i w związku z tym, możemy założyć,
że mamy już wiedzę na temat tego:
• gdzie i w jaki sposób będziemy dokonywać zmiany, oraz
Praca z „Legacy Code” część 2
• w jaki sposób i w jakich miejscach najwygodniej będzie nam testować.
Aby tego dokonać posługiwaliśmy się dwoma
pomocnymi na tych etapach technikami. Były to tak zwanym scratch-refaktoring i szkice
efektów. W niniejszym artykule zajmiemy się
krokiem 3 – usuwaniem niepożądanych zależności.
Co sprawia, że zmiana
kodu odziedziczonego
jest taka trudna?
Oczywiście zmiana, jako taka jakiegokolwiek
kodu nie jest trudna. Trudność polega na tym,
że jako profesjonaliści chcemy naszą zmianę
zweryfikować za pomocą testów automatycznych. W przypadku pisania nowego kodu
z zastosowaniem TDD podjęcie decyzji jak
testować jest wystarczającym warunkiem do
tego, aby zacząć pisać test. Niestety, mając do
czynienia z kodem spadkowym programiści
często wpadają w błędne koło problemu „jajka
i kury”. Z definicji kod taki nie ma testów,
lub ma ich mało. To powoduje, że trudno poprawić jego strukturę (refaktoryzować) bez obawy o skutki takich zmian. Taka obawa często prowadzi do wybierania
takich rozwiązań, które wprowadzą minimum zmiany w kodzie. Takie dodawanie
kolejnego przysłowiowego „jednego if-a”
skutkuje nieuchronnie wzrostem skomplikowania kodu. Natomiast skomplikowana
struktura wewnętrzna utrudnia lub nawet
uniemożliwia napisanie testów. Sposobów,
w jaki obniżamy testowalność aplikacji jest
wiele. Jednym z najczęstszych problemów
przy próbie pisanie testów jednostkowych
w kodzie spadkowym są skomplikowane zależności. Zależności mogą uniemożliwić nam
stworzenie w środowisku testowym obiektu
klasy, w której wprowadzamy zmiany. Przykładem może tu być parametr konstruktora,
którego do poprawnej inicjalizacji wymaga
podania wielu kolejnych równie skomplikowanych obiektów. Te z kolei wymagają kolejnych itd. Wywołana w ten sposób lawina
może oznaczać skompilowanie i ręczne skonstruowanie znacznej części systemu. Tak
skonstruowany test będzie zazwyczaj nadmiarowy, bardzo pracochłonny, podatny na
błędy i trudny w pielęgnacji. Inną kłodą rzucaną przez zależności pod nasze nogi może
być fakt, że czasem nie będziemy chcieli w teście współpracować z obiektami oryginalnych
(produkcyjnych) klas. Najczęstszym przypadkiem są tutaj obiekty współpracujące z bazami danych. Współpraca naszego testowego
obiektu z obiektem wykonującym połączenie do bazy danych lub komunikującym sie
poprzez sieć na pewno wielokrotnie spowolni
wykonanie przypadku testowego ,a dodatkowo może wprowadzić utrudniającą testowanie losowość zachowania. Dla uproszczenia
rozważań przyjąć możemy, że miejsce zmiany
i miejsce testowania są takie same, (choć nie
zawsze jest to prawdą – patrz pierwsza część
artykułu – szkice efektów) oraz że będę tych
pojęć używał zamiennie.
Zależności publiczne i prywatne
Wszystkie wymienione zależności pomiędzy
elementami (klasami, modułami itd.) można
podzielić na dwie kategorie: publiczne i prywatne. Pierwszą z nich są powiązania wynikające z interfejsu klasy lub modułu, drugą stanowią powiązania zdefiniowane w funkcjach
i metodach. Ta pierwsza grupa - jawne powiązania jest z punktu widzenia testowalności
przypadkiem łatwiejszym. Większość publicznych powiązań obiektu, który zamierzamy
testować z obiektami klas, które są „trudne”
w tworzeniu lub współpracy można, po niewielkich zmianach zastąpić zależnościami do
interfejsów lub klas abstrakcyjnych. Po takiej
zmianie umożliwiamy sobie oddzielenie testowalnego obiektu od reszty środowiska przez
zastosowanie dublerów testowych. Wystąpienie kłopotliwych zależności prywatnych jest
większym wyzwaniem: wymaga dodatkowych
kroków umożliwiających ich wyeliminowanie.
Powyższe uwagi w przypadku programowania
zorientowanego obiektowo oznaczają powiązania pomiędzy obiektami.
Zależności od wartości losowych
return 0;
Występowanie w kodzie losowych lub związanych z czasem wartości także może poważnie utrudniać testowanie. Do tych pierwszych
należą wszelkie wywołania generatorów liczb
pseudolosowych, do drugich wszystkie odmiany znaczników czasowych (ang. time-stamp)
i dat. Problem najłatwiej zobrazować wyobrażając sobie przykładową komputerową wersję
dowolnej gry planszowej z kostkami do gry.
W grach tego typu ruch gracza uzależniony
jest od ilości wyrzuconych oczek na kostce do
gry. W wersji komputerowej rzut kostką symulowany jest poprzez wywołanie jakiejś odmiany funkcji „random”. Gdy przystępujemy do
testowania elementów związanych z ruchem
graczy po planszy, bez odseparowania zależności od generatora - za każdym razem algorytm
przesuwający pionek będzie przesuwał go
w inne miejsce.
private:
Krok 3 – Usuwanie
niepożądanych zależności
Listing 1. Klasa z metodą odwołującą się do czasu (przed zmianami)
class ClassUnderTest {
public:
// metoda wywołująca funkcję systemową
int functionUnderTest() {
std::time_t t = std::time(NULL);
std::tm tm = std::localtime(&t);
if (tm.tm_wday == 0 /*Sunday*/
|| tm.tm_wday == 6 /* Saturday*/) {
performFullProcedure();
performSimplifiedProcedure();
} else {
}
}
int performSimplifiedProcedure() {
// some complicated code here
return 0;
}
int performFullProcedure() {
// some even more complicated stuff ...
return 0;
}
};
Na szczęście istnieją skuteczne sposoby pozbywania się niepożądanych zależności. Techniki
refaktoryzacji, o których mowa są wystarczająco bezpieczne, aby stosować je również do
kodu bez testów.
Przypadek 1: Testowana funkcja zależna jest
od funkcji systemowej (daty systemowej, czasu systemowego, generatora liczb pseudolosowych itd.).
5
Listing 2. Klasa po zmianach
class ClassUnderTest {
public:
// metoda wywołująca funkcję systemową
// po wydzieleniu fragmentu do osobnej metody
int functionUnderTest() {
std::tm tm = getLocalTime();
if (tm.tm_wday == 0 || tm.tm_wday == 6) {
performFullProcedure();
} else {
performSimplifiedProcedure();
}
return 0;
}
private:
// wydzielona część odwołująca się do systemu
virtual std::tm getLocalTime() {
std::time_t t = std::time(NULL);
std::tm tm = std::localtime(&t);
return tm;
}
int performSimplifiedProcedure() { return 0; }
int performFullProcedure() { return 0; }
};
Listing 3. Podklasa testowa
class TestingVersionUnderTest: ClassUnderTest {
private:
// wersja testowa metody – zwraca dogodny dla testu wynik
virtual std::tm getLocalTime() {
std::tm tm;
tm.tm_wday = 0;
return tm;
}
};
Listing 4.
class ClassWithLongMathods {
public:
int someLongMathod(int id, std::string name, Person &dsc);
// metoda wywołująca metodę „someLongMathod”
void clientMathod();
// metoda wywoływana przez „someLongMathod”
void anotherMethod();
private:
// pole do którego odwołuje się „someLongMathod”
std::string someData;
};
void ClassWithLongMathods::clientMathod() {
. . . . . . .
int ret = someLongMathod( id, “na”, person );
. . . . . . .
}
int ClassWithLongMathods::someLongMathod(int id,
std::string name, Person &dsc){
. . . . . . .
if( someData == name ){
anotherMethod();
}
. . . . . . .
}
6
Wyobraźmy sobie metodę, która inaczej zachowuje się w dni robocze, inaczej w dni wolne
(listing 1). W dni robocze uruchamiany jest
szybki, ale mało dokładny algorytm obliczania pewnej wartości. W dni wolne natomiast
wykonywana jest pełna wersja. Rozwiązaniem
jest refaktoryzacja „nadpisanie metod(y)
w podklasie”
Algorytm zmiany:
• Zidentyfikuj elementy, które stanowią
problem
• Jeśli elementem tym jest bezpośrednie
wywołanie funkcji systemowej – użyj refaktoryzacji „Wyodrębnienie metody”, (jeśli używasz języka Java i środowiska Eclipse możesz zaznaczyć to wywołanie
i użyć skrótu alt+shif+m). Jeśli kłopotliwe
zachowania stanowią metodę – upewnij
się, że można tę metodę nadpisać. Przykładowo w języku Java może to między
innymi oznaczać zmianę zakresu metody
jeśli dotychczas była prywatna (listing 2).
• Stwórz w testach podklasę i nadpisz kłopotliwe metody w taki sposób, aby zachowywały się w pożądany sposób (listing 3).
Powyższą technikę stosować można także
w wielu innych wypadkach. Wśród innych częstych przykładów można wymienić:
• tworzenie obiektu dowolnej klasy. Wydzieleniu metody dla instrukcji tworzącej
obiekt jest de-facto zastosowaniem wzorca „metoda tworząca”.
• Unieważnienie dowolnego niepożądanego zachowania. Jeśli mamy dowolny fragment kodu, o którym wiemy, że nie wpływa na modyfikowaną funkcjonalność, ale
spowalnia testy (przykład: weryfikacja
uprawnień użytkownika)
Przypadek 2: Testowanie zmiany w długiej
metodzie.
Jednymi z najczęściej występujących problemów w kodzie są zapachy „długa metoda”
i „wielka klasa”. Problematyczne w nich jest
między innymi to, że długa metoda z definicji
robi wiele różnych rzeczy i czasem weryfikacja zmian poza tą metodą jest niemożliwa.
W takich sytuacjach warto rozważyć przeniesienie metody do nowej klasy. Przykładowy
pseudo-kod z oczywistych względów zawiera
długą metodę tylko z nazwy (listing 4), lecz
powinno to wystarczyć do zobrazowania problemu i jego rozwiązania.
Poniższy algorytm zaczerpnięty został
z książki „Working Effectively with Legacy
Code”. Podobny algorytm zaproponowany
został przez M. Fowlera w książce „Refactoring: Improving the Design of Existing Code”.
Praca z „Legacy Code” część 2
Listing 5. Po krokach 1-4
class SomeLongMathod {
int _id;
std::string _name;
Person &_dsc;
public:
SomeLongMathod(int newId, std::string newName,
Person &newDsc)
: dsc(newDsc) {
Id = newId;
name = newName;
}
int run();
};
Listing 6. Po kroku 5
int SomeLongMathod::run() {
. . . . . . .
if( someData == name ){
foo3();
anotherMethod();
}
. . . . . . .
}
Listing 7. Po kroku 6 i 7 z dodaną referencją do klasy
macierzystej
class SomeLongMathod {
private:
int id;
std::string name;
Person dsc;
ClassWithLongMathods source;
public:
SomeLongMathod(ClassWithLongMathods &newSource,
int newId, std::string newName, Person &newDsc)
: source(newSource), dsc(newDsc) {
Id = newId;
name = newName;
};
int run();
};
// przeniesiona metoda z referencją do obiektu klasy
macierzystej
int SomeLongMathod::run() {
foo1();
if( source.someData == name ){
foo3();
source.anotherMethod();
}
foo4();
return id + 100;
}
void ClassWithLongMathods::clientMathod() {
. . . . . . .
SomeLongMathod methodObject(id, “na”, person );
methodObject.run();
. . . . . . .
}
• Stwórz klasę, która zostanie gospodarzem dla przenoszonego kodu (proponuję nadać jej nazwę nawiązującą do nazwy
metody, którą przenosimy)
• Stwórz konstruktor, skopiuj do niego sygnaturę przenoszonej metody
• W nowej klasie dodaj pola, które przechowają wartości przekazane przez parametry wywołania konstruktora.
• Stwórz w nowej klasie bezparametrową
metodę, która będzie wykonywała przenoszony kod (proponuję nazwy „run”
lub „execute”), Jeśli oryginalna metoda
zwraca wartość – nowa metoda powinna
zwracać taki sam typ. Dodatkowo, w niektórych językach np. w języku Java - jeśli
metoda wyrzuca wyjątek – nowa metoda
powinna zadeklarować taki sam typ wyjątku (listing 5).
• Przenieś ciało metody do stworzonej metody wykonawczej (listing 6). Skompiluj.
• Jeśli nowa metoda używa metod lub pól
ze starej klasy – podaj, jako pierwszy parametr do konstruktora referencję do
obiektu klasy macierzystej. Odwołania do
pól i metod starej zastąp wywołaniami do
pól i metod dodanej referencji. Czasem
wymagać to będzie zmiany poziomu dostępu.
• Jeśli nowa klasa kompiluje się wróć do
oryginalnej klasy i usuń metodę. Wywołanie metody zastąp stworzeniem egzemplarza nowej klasy i wywołaniem na nim
metody uruchamiającej przeniesiony kod
(listing 7).
• Jeśli trzeba, zastąp wywołania metod ze
starej klasy, odwołaniami do interfejsu
(zobacz refaktoryzację „wyodrębnienie
interfejsu”)
Wielką zaletą opisanego powyżej algorytmu
jest jego skuteczność. Można go zastosować
dosłownie do każdej długiej metody. Bezpośrednią potencjalną wadą użycia jest obniżenie hermetyzacji klasy. Oczywiście dzięki
temu podnosimy (czy raczej tworzymy) testowalność. Obie te cechy – testowalność i hermetyzacja są narzędziami służącymi temu samemu celowi: podniesieniu niezawodności kodu.
Dlatego mając do wyboru rezygnację z jednej
na korzyść drugiej zawsze wybiorę wyższą testowalność.
W tym miejscu warto przypomnieć, że
sprzymierzeńcem w pracy z kodem jest
dobra znajomość języka programowania.
Kilka lat temu, gdy pracowałem w projekcie, w którym używany był język Delphi odkryłem w aplikacji wycieki pamięci.
Problem związany był z tym, że:
• w kodzie wywoływanym przez wydzialaną metodę następowała leniwa
7
inicjalizacja jednego z parametrów
przekazanych, oraz dodatkowo, że
• zainicjalizowany obiekt zwracany był
poprzez parametr wywołania.
Po zastosowaniu tego algorytmu leniwa inicjalizacja zachodziła oczywiście dalej, ale aktualizowana była jedynie składowa nowo powstałego obiektu. Parametr przekazywany do nowopowstałego
obiektu pozostawał niezainicjowany poza wywoływaną funkcją, co z kolei skutkowało ponowną próbą stworzenia obiektu
w innym fragmencie kodu. Ponieważ, dodatkowo, wszystko to działo się w języku
programowania, który wymagał jawnego zwalniania pamięci (Delphi) to oprócz
utraty danych wprowadzonych do kłopotliwego obiektu następował wyciek pamięci. Był to jedyny problem spowodowany zastosowaniem powyższego algorytmu, jaki kiedykolwiek odkryłem.
Listing 8.
class Person {
string _firstName, _familyName;
PersonDAO *_personDao;
public:
• Skopiuj konstruktor, który sprawia kłopoty
• Określ, które obiekty tworzone w konstruktorze stanowią problem
• Po kolei usuwaj te parametry przenosząc
je do listy parametrów konstruktora (listing 9)
• Ze starego konstruktora usuń cały kod
(poza inicjacją kłopotliwych zmiennych)
i zastąp go wywołaniem nowego konstruktora (listing 10)
Po takiej refaktoryzacji mamy do dyspozycji
dwa konstruktory. Pierwszy – z mniejszą ilościa parametrów nadal tworzy potrzebne sobie
8
Person(string firstName, string familyName, time_t
birthDate);
};
Person::Person(string firstName, string familyName,
time_t birthDate) {
_personDao = new PersonDAO(); // problematyczny
_familyName = firstName;
_birthDate = birthDate;
Przypadek 3: Testowanie zmiany w obiekcie
z kłopotliwymi powiązaniami z innymi obiektami.
Inna często występującą sytuacją są zależności
do obiektów-składowych tworzonych w konstruktorze. Niejednokroć zdarza się, że klasa
mając jedynie bezparametrowy konstruktor
w swoim ciele powołuje do życia kilkanaście
innych obiektów. Często jeden lub wiele z nich
wpływa na zachowanie obiektu w sposób uniemożliwiający skuteczne napisanie testów.
Przykładem może być sytuacja, w której
klasa reprezentująca osobę powołuje w konstruktorze obiekt służący zapisywaniu/odczytywaniu obiektów z bazy danych – DAO
(wzorzec Obiektu Dostępu do Danych – ang.
Data Access Object - listing 8). Testując taki
obiekt interesować nas będzie czy spełnia
swoje zadania w systemie (np. czy zwraca metoda „string getFullAddress()” zwróci poprawnie sformatowany adres wraz z imieniem
i nazwiskiem) i czy ewentualnie podejmie
próbę zapisania się w bazie danych a nie to
czy rekord w bazie danych powstanie – to jest
już rola wspomnianego wcześniej obiektu
DAO.
Algorytm: Parametryzacja Konstruktora
time_t _birthDate;
}
obiekt
_familyName = familyName;
_personDao->save( *this );
Listing 9. Po kroku 3
// oryginalny
konstruktor
Person::Person(string firstName, string familyName, time_t birthDate) {
_personDao = new PersonDAO(); // problematyczny obiekt
_familyName = familyName;
}
_familyName = firstName;
_birthDate = birthDate;
_personDao->save( *this );
// dodany, testowy konstruktor
Person::Person(string firstName, string familyName, time_t birthDate, PersonDAO *personDao) {
_personDao = personDao;
_familyName = familyName;
}
_familyName = firstName;
_birthDate = birthDate;
personDao->save( *this );
Listing 10. Wersja finalna
// oryginalny
konstruktor po usunięcu duplikacji
Person::Person(string firstName, string familyName, time_t birthDate) {
}
this(familyName, familyName, birthDate, new PersonDAO());
Person::Person(string firstName, string familyName,
time_t birthDate, PersonDAO *personDao) {
_personDao = personDao;
_familyName = familyName;
}
_familyName = firstName;
_birthDate = birthDate;
_personDao->save( *this );
Praca z „Legacy Code” część 2
Listing 11. Klasy reprezentujące osobę oraz singleton
umożliwiający jej zapis do bazy danych (wersja wyjściowa)
// klasa – singleton, który sprawia kłopoty
class PersonDAO {
private:
PersonDAO( string url, string usr, string pass);
string connectingStr, usr, pass;
static PersonDAO* PersonDAO::instance(){
static PersonDAO *_instance;
public:
if( _instance == NULL ) {
}
}
string url = getUrl();
_instance = new PersonDAO(url, “admin”, “*”);
return _instance;
void save(Person &person) const;
void update(Person &person) const;
};
void remove(Person &person) const;
Person* find(int Id);
// klasa, którą chcemy testować
obiekty samodzielnie i używany jest w kodzie
produkcyjnym. Drugi konstruktor, do którego poza oryginalnymi parametrami dodaliśmy
nowe służyć nam będzie do dostarczenia w kodzie testowym dublerów testowych zamiast
egzemplarzy, które sprawiały nam problem.
Przypadek 4: Zależność od Singletonu
Występowanie w kodzie wzorca singleton
jest szczególnym przypadkiem zależności od
elementów statycznych. W większości popularnych implementacji wzorca klasa singletonu jest odpowiedzialna za stworzenie
egzemplarza. Klasa tworzonego obiektu jest
podana wprost. To powoduje, że w takich implementacjach nie ma możliwości zwrócenia
obiektu klasy pochodnej bez istotnych zmian
w implementacji wzorca. Jedną z możliwości
jest zmiany jest użycie rejestrów singletonów,
kolejną stworzenie osobnych konfiguracji dla
kodu produkcyjnego i testowego oraz korzystających z nich fabryk abstrakcyjnych.
Jeśli taka zmiana jest niemożliwa lub nieopłacalna można posłużyć się innymi, mniej
pracochłonnymi sposobami.
class Person {
Sposób 1 - Wprowadzenie wzorca Monostate.
• Zmień wszystkie pola klasy singletona na
statyczne
• Zmień zakres metody zwracającej egzemplarz na prywatny
• Sprawdź kod inicjalizujący egzemplarz
obiektu singletonu (zazwyczaj w metodzie instance) Jeśli stworzenie polega jedynie na wywołaniu prywatnego konstruktora: zmień jego zakres konstruktora na
publiczny
• Jeśli nie ma bezparametrowego konstruktora, stwórz go i przenieś kod inicjalizujący (listing 12).
• Skompiluj; Wszędzie tam gdzie kompilator zgłosi błędy związane z niedostępnością metody zwracającej egzemplarz (instancje()): zmień wywołanie na stworzenie egzemplarza.
• Usuń metodę zapewniającą dostęp do egzemplarza (instancje()) i zmienną przechowującą egzemplarz (listing 13).
• Jeśli w kodzie testowym trzeba będzie
nadpisać którąkolwiek upewnij się czy
to będzie możliwe (np. przez uczynienie
metody wirtualną w C++, czy też usunięcie modyfikatora final w Java)
string _firstName, _familyName;
PersonDAO *_personDao;
Person(string firstName, string familyName, time_t birthDate);
time_t _birthDate;
public:
};
Person::Person(string firstName, string familyName, time_t birthDate) {
_familyName = firstName;
_birthDate = birthDate;
}
_familyName = familyName;
_personDao = PersonDAO::instance();
_personDao->save( *this );
Listing 12. Zmiana po stronie singletonu (kroki 1-3)
class PersonDAO {
private:
PersonDAO( string url, string usr, string pass);
static string _connectingStr, _usr, _pass;
static PersonDAO *_instance;
static PersonDAO* instance();
public:
PersonDAO();
void save(Person &person) const;
void update(Person &person) const;
};
void remove(Person &person) const;
Person* find(int Id);
Teraz możemy zastosować „wydzielenie metody” i „nadpisanie metod w podklasie”. Po
tych krokach w miejscu gdzie używaliśmy
single tonu mamy metodę kreującą egzemplarz pochodny od mona state, w którym to
przedefiniowaliśmy kłopotliwe dla nas zachowania.
9
Listing 13. Ostateczny wygląd kodu
// klasa – która sprawiałą kłopoty – obecnie monostate
class PersonDAO {
private:
PersonDAO( string url, string usr, string pass);
static string _connectingStr, _usr, _pass;
};
Person* find(int Id);
// zmiana w kodzie klienta
Person::Person(string firstName, string familyName, time_t
birthDate) {
public:
_familyName = firstName;
this (getUrl(), „admin”, „****”);
_birthDate = birthDate;
PersonDAO() { // przeniesiony kod inicjalizujący
}
void save(Person &person) const;
void update(Person &person) const;
void remove(Person &person) const;
}
_familyName = familyName;
_personDao = new PersonDAO();
_personDao->save( *this );
Listing 14. Po dodaniu metody umożliwiającej ustawienie innego egzemplarza.
class PersonDAO {
private:
PersonDAO( string url, string usr, string pass);
static string _connectingStr, _usr, _pass;
_instance = newInstance;
static PersonDAO *_instance;
void save(Person &person) const;
static PersonDAO* instance();
void update(Person &person) const;
public:
// dodana metoda umożliwiająca ustawienie
void setInstance(PersonDAO *newInstance){
// zwracanego egzemplarza
Sposób 2 – Dodanie statycznego settera.
Metoda ta polega na dodaniu do singletonu
metody pozwalającej ustawić zwracaną instancję – w ten sposób możemy wpływać na to co
zostanie zwrócone przez metodę instancje (Listing 14). Oczywiście ma to (poza zmniejszeniem hermetyzacji) wadę: trzeba pamiętać,
aby po teście przywrócić oryginalną instancję.
Usunięcie zależności nie jest oczywiście
celem samym w sobie. Uniemożliwia nam jedynie napisanie testów, które upewnią nas w
przekonaniu, że modyfikując kod wprowadziliśmy tylko takie efekty, o których myśleliśmy i że
żadna z pozostałych funkcjonalności systemu
nie została zepsuta. Mając to za sobą będziemy
mogli przystąpić do napisania testów i wprowadzenia nowych funkcjonalności lub zmodyfikowania (poprawienia) starych. To jednak będzie
tematem ostatniej, trzeciej odsłony tematu.
Refaktoryzacja
Seria małych przekształceń kodu nie
zmieniających jego funkcjonalności mających na celu poprawę STRUKTURY kodu.
10
};
};
void remove(Person &person) const;
Person* find(int Id);
Kod Spadkowy (ang. Legacy Code)
1. Kod napisany przez kogoś innego.
2. Kod z małą ilością lub pozbawiony zupełnie testów automatycznych..
W Sieci
Wzorzec Monostate
Wzorzec zapewniający, że wszystkie dane przechowywane przez egzemplarz są
współdzielone przez wszystkie egzemplarze danej klasy.
•
Wzorzec Singleton
Wzorzec zapewniający, że istnieje tylko jeden egzemplarz obiektu oraz dostarczający globalny punkt dostępu do tego egzemplarza.
Zapachy Kodu (ang. Code Smells)
Ogólne pojęcie zaproponowane przez
Kenta Becka wyjaśniające kiedy kod powinien zostać poddany refaktoryzacji.
Dublerzy Testowi (ang. Test Doubles)
Zaproponowana przez Gerard Meszaros
ogólna nazwa na wszystkie obiekty, na
które podmieniamy oryginały w celu ułatwienia testowania
•
•
•
•
http://www.objectmentor.com/resources/
articles/WorkingEffectivelyWithLegacy
Code.pdf
http://my.safaribooksonline.com/
book/software-engineering-anddevelopment/0131177052
http://my.safaribooksonline.com/book/
software-engineering-and-development/
refactoring/0201485672
http://twogrumpycoders.wordpress.com/
http://astyle.sourceforge.net/
Grzegorz Gubiński
Trener Agile z Nokia Siemens Networks, z pond
trzynastoletnim doświadczeniem w programowaniu w takich językach jak C++, Java, Pascal/Delphi czy też Flex. Obecnie zajmuje się między innymi wdrażaniem metodyki Scrum oraz praktyk inżynierskich programowania ekstremalnego.
Rozwój technologii to wyzwanie dla programistów
Rozwój technologii
to wyzwanie dla programistów
Producenci sprzętu komputerowego prześcigają się w tworzeniu
urządzeń o coraz lepszych parametrach – mniejszych, lżejszych, z coraz
większą mocą obliczeniową. Podobnie dzieje się w obszarze technologii
IT. Z jednej strony oznacza to zwiększenie możliwości twórców oprogramowania, jednak z drugiej, stawia przed informatykami sporo wyzwań.
O
becnie głównym wyzwaniem dla programistów jest bycie na bieżąco ze zmianami na rynku technologii, który jest
bardzo dynamiczny. Nowości, które początkowo
wydają się jedynie ciekawostkami, często stają się
poważnymi konkurentami wobec sprawdzonych i
znanych produktów. Okazuje się, że nowe rozwiązanie mogą być lepsze i znacznie tańsze. Dzięki
dobrej znajomości rynku zespoły projektowe wraz
z programistami mogą zaprojektować i stworzyć systemy najlepiej dopasowane do potrzeb biznesu, ale
też najbardziej korzystne finansowo.
Nowinki technologiczne wiążą się z koniecznością stałego dokształcania i podnoszenia kwalifikacji, zdobywania nowych umiejętności i certyfikatów.
Praca programisty wymaga znajomości gotowych
produktów, takich jak serwery baz danych, serwery
aplikacyjne, portale, silniki procesów, system obiegu
dokumentów. W tym obszarze programiści certyfikują się w zakresie produktów oferowanych przez
największych na świecie dostawców technologii
(np. Microsoft, Oracle, IBM czy JBoss).
Rozwój technologiczny bezpośrednio dotyczy
takich czynników jak bezpieczeństwo informacji,
ergonomia systemów czy ich skalowalność. W tym
kontekście każda implementacja nowych rozwiązań zwiększa ryzyko wystąpienia problemów. Stąd
wiele firm i dostawców decyduje się na technologie,
które gwarantują jak największe bezpieczeństwo
danych. Nie zmienia to jednak faktu, że dostawca powinien pomóc dokonać wyboru prezentując
także korzyści w obszarach ergonomii, wydajności
i skalowalności przy użyciu najnowszych rozwiązań.
Klienci chcą mieć pewność, że otrzymają od
dostawcy stabilne rozwiązanie, stworzone w technologii, która nie zostanie wycofana czy wyparta
z rynku w ciągu najbliższych kilku lat. W wielu
przypadkach w ten aspekt bezpieczeństwa wpisuje się możliwość rozwoju systemu, dostępność
nowych wersji, otwartość czy łatwość dokonania
migracji. Jeżeli programiści nie są na bieżąco z najnowszymi technologiami, to po pierwsze ich klienci
będą potencjalnie tracić korzyści wynikającej
z wdrażania tańszych i lepszych rozwiązań, po dru-
gie zaś, w dłuższej perspektywie dla programistów
może to oznaczać utratę klientów i zleceń.
Języki programowania
Jednym z zagadnień, które muszą śledzić programiści, są języki programowania. Języki podstawowe
wykorzystywane w tworzeniu rozwiązań stale się
rozwijają. Opanowanie ich wszystkich jest praktycznie niemożliwe, dlatego programiści specjalizują się
w jednym bądź kilku językach. Stąd w przypadku
tworzenia produktu lepiej bazować na jednym języku.
Dla klientów ważne są możliwości, jakie dają nowe technologie. Z punktu widzenia zespołu projektowego przed przystąpieniem do pracy najważniejszy będzie wybór odpowiedniej technologii. Twórcy
rozwiązania muszą mieć stuprocentową pewność,
że wybrany język, technologia czy platforma pozwolą stworzyć i wdrożyć wymagane przez klienta funkcjonalności. Jednocześnie wybór ten należy
wpisać w trendy rozwoju rynku i branży, w jakiej
działa klient. W praktyce producenci wykorzystują
nowe – i tym samym nie dość dobrze sprawdzone
– języki i platformy tylko w prototypach i małych
rozwiązaniach.
Zmiany technologiczne
Dla programistów bardzo istotne są zmiany związane z wzorcami architektonicznymi i projektowymi,
co może rzucać nowe światło na sposoby tworzenia
oprogramowania. Tego rodzaju zmiany pozwalają
lub wręcz zmuszają do przemodelowania myślenia
o tym, w jaki sposób można spełnić oczekiwania
klienta. Do takich zmian technologicznych należały m.in. MOM (Message-oriented middleware),
SOA (Service-oriented architecture), rozwój narzędzi workflow/BPM, dBPM (dynamic BPM), REST
(Representational state transfer), a w ostatnim czasie
rozwój modelu chmury (Cloud computing) wraz
z coraz powszechniejszym udostępnianiem w sieci usług w modelu SaaS (a także IaaS i PaaS). Warto
zwrócić uwagę, że tego rodzaju zmiany są trudne do
przyjęcia, ponieważ wymagają znacznego zaangażowania po stronie klienta i jego współpracy z dostawcą
oprogramowania.
Chmura
Jednym z obecnie największych wyzwań jest cloud
computing. To typowa innowacja, która zmienia dotychczasową filozofię dostarczania oprogramowania
klientom. Jej konsekwencją jest przekierowanie na
inne tory myślenia o rozwiązaniach IT zarówno
po stronie dostawców, jaki i użytkowników.
Wsparcie społeczności
W przypadku wielu wdrożeń i projektów tworzenia rozwiązań dedykowanych ważnym czynnikiem
sukcesu jest możliwość współpracy twórców oprogramowania z jego użytkownikami. Rola klienta nie
powinna sprowadza
się wyłącznie do złożenia zamówienia. Ważne jest
środowisko tworzenia i budowania aplikacji, dobre
IDE, wsparcie do debugowania, wsparcie do wykonywania testów jednostkowych, narzędzia SCM
(Software configuration management). Ważna jest
też społeczność – otoczenie – zgromadzona wokół
danej technologii. Na nie składają się firmy i ludzie,
którzy dostarczają bibliotek, dzielą się doświadczeniami, a nawet aplikacjami wykorzystującymi technologię. Umiejętność korzystania z tego rodzaju społeczności ułatwia tworzenie nowych rozwiązań.
Nieświadomi sobie szkodzą
Postęp technologii jest wyzwaniem także dla samych
firm. Nieświadomość postępu doprowadza czasem
do sytuacji, w których organizacja zostaje ze starą
technologią, co w konsekwencji powoduje problemy przy dalszym rozwoju systemu czy aktualizacji.
(np. poprzez uniemożliwienie migracji do nowej wersji systemu operacyjnego). Tacy „maruderzy technologiczni” narażają się na duże trudności w funkcjonowaniu przedsiębiorstwa, co niemal zawsze skutkuje
wysokimi i nieprzewidzianymi kosztami.
Dariusz Dudek
Główny Specjalista IT, Pentacomp
Systemy Informatyczne S.A.,
www.pentacomp.pl
11
Centrum danych
– budowa czy kolokacja?
Rosnące potrzeby IT, digitalizacja kolejnych dziedzin życia, wymagające sprzętowo aplikacje, czy wreszcie ekspansja i nowe obszary działalności firm, stawiają managerom IT wyzwanie zapewnienia
przestrzeni dla rozrastających się środowisk IT. Decyzje w tym obszarze poparte są najczęściej szeregiem analiz biznesowych, ale mogą
mieć także podłoże w przyzwyczajeniach. Jedno z nich podpowiada
nam, że wykonanie czegoś samodzielnie będzie tańsze. Drugie, że
jeśli coś jest naszą własnością, to mamy nad tym większą kontrolę,
a więc mamy większe poczucie bezpieczeństwa. Czy rzeczywiście
tak jest? Co powinniśmy rozważyć podejmując decyzję dotyczącą
budowy własnego centrum danych?
Kwestia skali, czyli jakiego
centrum danych potrzebuję?
Budowa własnego centrum danych to jedna z
najważniejszych, podejmowanych na lata decyzji dotyczących infrastruktury przedsiębiorstwa. Aby inwestycja nie odpowiadała tylko na
bieżące potrzeby konieczne jest oszacowanie
niezbędnej powierzchni w określonym czasie.
Nie może to być jednak inwentaryzacja obecnego stanu serwerów i prosta ekstrapolacja, ale
bardziej złożone prognozowanie przyrostu zasobów serwerowych. To także okazja do przeprowadzenia konsolidacji istniejących, często
rozproszonych zasobów, określenia poziomu
wirtualizacji czy migracji do nowych rozwiązań np. w modelu „as a Service”„.
Dopiero taka prognoza, a wręcz strategia
rozwoju, pozwoli określić potrzeby firmy
w dłuższej perspektywie oraz konieczną –
nadmiarowość powierzchni centrum danych,
która będzie zajmowana w miarę pojawiających się w przyszłości potrzeb (warto pamiętać, że utrzymanie niewykorzystanej po-
12
wierzchni centrum danych to także bardzo
istotny koszt).
Własne centrum danych to inwestycja na
lata, ale obecnie nie mówimy już o perspektywie kilkunastoletniej. Wystarczy odwiedzić
serwerownię wybudowaną np. w 2000 roku
by zobaczyć jak szybko następuje funkcjonalne
starzenie się takich obiektów. Nowe, efektywniejsze technologie, zużywanie się istniejącej
infrastruktury, niesatysfakcjonująca efektywność energetyczna czy niezależny od inwestora
brak możliwości zwiększania mocy centrum
danych dla coraz bardziej energochłonnych
urządzeń, znacznie skraca cykl życia centrum
danych. Dlatego już na tym etapie warto rozważyć istniejące alternatywy dla budowy własnej infrastruktury.
Gdzie mogę umieścić sprzęt?
Budowa własnego centrum danych angażuje zwykle kilka działów przedsiębiorstwa oprócz IT, także administrację czy finanse.
Najczęściej wymaga stworzenia interdyscypli-
narnego zespołu projektowego, nawet jeżeli inwestycja realizowana jest przez wyspecjalizowanego dostawcę tego typu rozwiązań.
Decydując się na budowę własnego centrum danych należy pozytywnie odpowiedzieć na następujące pytania:
• Czy obecna siedziba pozwala na budowę data center? Czy dysponujemy powierzchnią nadającą się do zaadoptowania na potrzeby tego typu obiektu? Czy
kwestie własnościowe i prawne pozwalają na adaptację części budynku na ten cel?
Czy jest to docelowa (nietymczasowa) siedziba firmy?
• Konstrukcja i lokalizacja budynku – ważna
jest nośność stropów, możliwość przeprowadzenia prac budowlanych, a także czy
budynek znajduje się w miejscu nienarażonym na zdarzenia losowe (np. powodzie).
• Czy można zapewnić wystarczające i redundantne zasilanie z 2 niezależnych źródeł? Czy można umieścić w siedzibie generator prądotwórczy?
Centrum danych - budowa czy kolokacja?
• Czy można zapewnić odpowiednie chłodzenie? Czy budynek pozwala na instalację systemu chłodzenia (np. montaż chillerów, przewodów itp.)
• Jaki jest system wykrywania, sygnalizacji i gaszenia pożaru w budynku? Czy jest
możliwość montażu systemu gaszenia gazem obojętnym?
• Jakie jest bezpieczeństwo fizyczne budynku? Czy budynek chroniony jest
w trybie 24/7/365, ma system monitoringu, powiadomienia o nieuprawnionym
dostępie?
• Czy jest możliwy dostęp do budynku
przez 24 godziny na dobę i w dni wolne
od pracy w razie planowanych i nieplanowanych prac?
Decydując się na usługę kolokacji na tego typu pytania nie musimy odpowiadać, bowiem
spełnienie wszystkich powyższych wymagań
spada na dostawcę. Dynamiczny rozwój outsourcingu tego obszaru i rosnąca konkurencja
na rynku powoduje, że coraz łatwiej o usługi
kolokacji optymalnie dopasowane do specyfiki
danego środowiska IT, oferowane w dogodnym
miejscu, o poziomie bezpieczeństwa i dostępności zwykle trudno osiągalnych we własnej
lokalizacji.
Komercyjne centra danych oferują wszelkie
możliwe warianty powierzchni kolokacyjnej
- od pojedynczych U, szaf rack, poprzez odse-
parowane, specjalnie chronione boxy, po indywidualne pomieszczenia z dedykowana infrastrukturą, siecią, systemem bezpieczeństwa
w modelu DCaaS (Data Center as a Service)
czy też powierzchnię o wysokiej gęstości mocy.
Jak szybko można uruchomić
centrum danych?
Czas uruchomienia nowej serwerowni szacowany jest na 8-24 miesiące, z czego znaczną
część pochłaniają kwestie formalne, w tym
pozwolenia, ekspertyzy, projekty architektoniczne, wybór i umowy z dostawcami. Również w tym przypadku wariant kolokacyjny
ma zdecydowaną przewagę – powierzchnia
kolokacyjna jest bowiem dostępna niemalże
z dnia na dzień, po podpisaniu umowy. Wraz
z rozwojem firmy można też dowolnie zwiększyć zajmowaną powierzchnię, przepływności
ł ączy czy utylizowaną moc elektryczną.
Ile to kosztuje?
Na kluczowe koszty w wariancie budowy własnego centrum danych składają się: dostosowanie pomieszczeń, infrastruktura, przyłącza sieciowe, energetyczne, czy też nieprzewidziane
we wstępnych analizach wydatki, jak np. budowa przyłącza światłowodowego czy rozbudowa stacji transformatorowej, która odbywa
się na koszt odbiorcy.
Koszt budowy 1m2 centrum danych o standardzie Tier3 i powierzchni kilkuset metrów
kwadratowych w istniejącym już pomieszczeniu oscyluje w granicach kilkunastu tysięcy
złotych. Im mniejsza powierzchnia, tym średni koszt metra staje się wyższy.
Koszty Capex to oczywiście nie wszystko.
Niebagatelne znaczenie mają koszty związane
z zarządzaniem i utrzymaniem centrum danych. Najistotniejsze są opłaty za utylizowaną
moc, łącza (connectivity), koszty związane
z personelem technicznym dedykowanym do
utrzymania DC, umowy serwisowe, czy wymiana baterii UPS co kilka lat.
W przypadku korzystania z komercyjnego
data center koszty ograniczają się do stałych
i przewidywalnych pozycji: jednorazowa opłata aktywacyjna oraz miesięczne opłaty za powierzchnię kolokacyjną, łącza, zużycie energii
i ewentualne usługi dodatkowe np. zdalnej
pomocy.
Obecnie dostawcy oferują elastyczne formy
opłat, np. ryczałtowe bądź licznikowe rozliczanie energii, za rzeczywistą utylizację pasma,
czy szereg usług dodatkowych zawartych w cenie powierzchni. Innym argumentem przemawiającym na korzyść wariantu kolokacyjnego
jest także obserwowany na rynku spadek cen.
Edyta Marchaluk
Product Manager, GTS Poland
Decyzja „budować czy kolokować” wymaga przeanalizowania wielu czynników, w tym rozważenia, czy budowa i utrzymywanie własnego centrum danych
przyniesie strategiczne korzyści firmie, jakie są najważniejsze cele biznesowe i najlepsze sposoby wykorzystania wewnętrznych zasobów firmy.
Zatem czy warto podejmować wysiłek budowania własnego centrum danych?
Korzyści kolokacji vs budowa własnego centrum danych
Własne centrum danych
Całkowita kontrola nad data center: dostępem, warunkami
środowiskowymi, sposobem wykorzystania
Kolokacja w komercyjnym data center
Redundancja i niezawodność trudno osiągalna
w serwerowniach budowanych „in house”
Przewidywalne, stałe opłaty za rzeczywiste wykorzystanie
zasobów
Bliska odległość od data center, stały, nieograniczony dostęp
Przesunięcie kosztów z CapEx do OpEx
Brak kosztów utrzymania, serwisu, personelu Łatwy i szybki dostęp do powierzchni o wysokich parametrach
środowiskowych i zasilania
Skalowalność - elastyczne powiększenie zajmowanej
powierzchni wraz z rozwojem środowiska IT
Wiedza doświadczonych, wyspecjalizowanych
w data center specjalistów
Wsparcie techniczne
Odpowiedzialność za utrzymanie infrastruktury
i optymalnych warunków spoczywa na dostawcy
13
Zarządzanie
infrastrukturą
centrum danych wypełnia lukę
pomiędzy IT a obiektami
W dobie oszczędności i kryzysu gospodarczego menedżerowie
centrów danych znajdują się pod ogromną presją podnoszenia
efektywności działalności i zwiększenia wykorzystania dostępnych
zasobów. Są zmuszeni do podwyższania wydajności i redukcji
kosztów przy jednoczesnym zachowaniu dostępności.
W
odpowiedzi na to zapotrzebowanie
departamenty IT wdrażają technologię wirtualizacji, środowiska cloud
computingu i ujednoliconego przetwarzania dla
systemów logicznych. Takie działania są efektywne dla IT, ale jednocześnie tworzą nowe zależności w systemach fizycznych zarządzanych przez
departamenty obiektów i skutkują zmianami
w zarządzaniu zasilaniem, chłodzeniem i przestrzenią fizyczną. Czynniki te w połączeniu
z rosnącymi kosztami energii elektrycznej, wymaganiami dotyczącymi zgodności z przepisami
i umowami SLA powodują, że menedżerowie
centrum danych są zmuszeni zajmować się nie
tylko działaniem sprzętu IT, ale także kompleksową obsługą całości infrastruktury centrum danych jako elementów ekosystemu.
Infrastruktura centrum danych to coś więcej
niż tradycyjny sprzęt i sieci IT: obejmuje również
systemy zasilania, klimatyzacji, zasilacze UPS
i generatory oraz powiązane urządzenia przełączające. Komponenty te składają się na precyzyjnie dostrojony ekosystem, a jakakolwiek zmiana
jednego składnika może mieć szkodliwy lub nieprzewidywalny wpływ na pozostałe elementy.
Infrastruktura centrum danych (zasilanie,
chłodzenie i przestrzeń fizyczna) oraz infrastruktura teleinformatyczna są zazwyczaj zarządzane niezależnie przez oddzielne zespoły.
Każda warstwa jest zarządzana w sposób konserwatywny. Systemy zasilania i chłodzenia są
zwymiarowane w sposób umożliwiający zapewnienie odpowiedniej wydajności sprzętu
IT, a systemy IT wdrażane w sposób gwarantujący ich działanie w ramach limitów zasilania
i chłodzenia, co w rzeczywistości powoduje
14
konieczność zwiększenia bufora operacyjnego
zaprojektowanego wcześniej dla systemu. Takie
podejście sprawia, że zespoły obiektów zarządzają dostępnością centrum danych w sposób
skuteczny, ale mało efektywny. W dobie technologii wirtualizacji, cloud computingu i ujednoliconego przetwarzania takie podejście staje
się mało praktyczne. Menedżerowie centrum
danych muszą przyjąć bardziej kompleksową
zintegrowaną koncepcję nie tylko dla sprawnego
zarządzania efektywnością i kosztami, ale także
dla zagwarantowania wysokiej elastyczności,
realizacji umów o poziomie usług i możliwości
świadczenia usług IT.
Operatorzy centrum danych potrzebują rozwiązania zarządzania infrastrukturą spójnego
dla systemów IT i obiektów. Powinno ono być
skalowalne, bezpieczne, działające w czasie rzeczywistym, modułowe, łatwe we wdrożeniu
oraz kompatybilne z funkcjonującymi systemami zarządzania IT i obiektami, a także oferować
możliwość zdalnego zarządzania. Poszukując
rozwiązań automatyzacji operacji muszą oni
wybrać wszechstronną platformę, która umożliwi zbudowanie podstaw i sprawne rozwiązanie
pilnych problemów przy jednoczesnym zapewnieniu skalowalności pozwalającej reagować na
przyszłe potrzeby. A dla zapewnienia sprawnego
wdrożenia muszą także dokumentować procesy
i dostosować strukturę organizacyjną.
Podstawą trafnych, świadomych decyzji jest
kompleksowy wgląd w procesy przebiegające
w centrum danych z perspektywy infrastruktury centrum danych i infrastruktury IT. Konieczne jest uwzględnienie statycznego charakteru
dotychczasowego zarządzania centrum danych
całkowicie odmiennego od dynamiki nowych
technologii. Brak danych w czasie rzeczywistym,
to jest informacji o IT i obiektach, gromadzonych
niemal natychmiastowo za pośrednictwem natywnego systemu komunikacji pomiędzy urządzeniami, nie jest możliwe przyjęcie wiarygodnych założeń i podejmowanie trafnych decyzji
dotyczących kondycji centrum danych. Brak
funkcji w czasie rzeczywistym wpływa negatywnie na możliwości zarządzania problemem stwarzając ryzyko przeoczenia krytycznych zdarzeń
i pojawienia się istotnych zagrożeń dla infrastruktury. Ponadto obsługa w czasie rzeczywistym
staje się niezbędna dla bardziej precyzyjnego dostosowania zasobów fizycznych do obciążeń IT
i uzyskania wyższej wydajności.
IT a obiekty: luka
uniemożliwiająca optymalizację
Na przestrzeni ostatnich kilkunastu lat działy
IT i administracji obiektów zostały zmuszone
do przedefiniowania dotychczasowego statycznego podejścia do zasobów, by sprostać środowisku szybko zmieniających się potrzeb biznesowych. Podobnie jak departamenty IT podjęły
wyzwanie wdrożenia dostosowanych usług biznesowych: standaryzowanych, mierzalnych, elastycznych i adaptowalnych - tak samo zespoły
zarządzania obiektem muszą zapewnić działom
IT zasoby na żądanie (przestrzeń fizyczną, zasilanie, ogrzewanie, wentylację i klimatyzację),
które umożliwią świadczenie takich dynamicznych usług biznesowych.
Przy rosnącej zależności pomiędzy sferą IT
i obiektem, kwestią najważniejszą staje się wymiana informacji o zdarzeniach historycznych
Zarządzanie infrastrukturą
i w czasie rzeczywistym, która umożliwi dynamiczne dostosowywanie sposobu wykorzystywania zasobów. Zarządca obiektu polegając na
podstawowej prognozie mocy może w pewnej
mierze przewidzieć zapotrzebowanie IT na zasoby. Jednak wyłącznie w czasie rzeczywistym
można dostrzec dynamiczny charakter reakcji
centrum danych na potrzeby.
Trudność polega na tym, że menedżerowie IT
nie są informowani na bieżąco przez menedżerów budynków o wzajemnie powiązanych obciążeniach, czyli o codziennych zmianach kosztów
zasobów i mediów, a menedżerowie obiektu
o umowach o poziomie świadczenia usług
(SLA), do których przestrzegania podczas zaspokajania potrzeb firmy są zobowiązani menedżerowie IT. Nawiązanie ściślejszej współpracy
pozwala zarządcom obiektu zrozumieć drobne
niuanse planowania wydajności oraz uczestniczyć w identyfikacji zalet i wad wykorzystywania zasobów w obrębie centrum danych.
Ponadto, lepsze relacje zapewnią menedżerom
centrum danych informacje o kosztach zasobów
centrum danych i ułatwią podejmowanie decyzji dotyczących doboru aktywów, planowania
priorytetów i czynności off-line. W następstwie
lepszego zrozumienia tych wzajemnych oddziaływań oraz misji biznesowej oczywista staje się
kwestia potrzeby wdrożenia rozwiązania do
Zarządzania Infrastrukturą Centrum Danych
(Data Center Infrastructure Management
– DCIM).
Personel działu IT i obiektu musi przyjąć
bardziej dynamiczne podejście do zarządzania
wydajnością, które wymaga dostępu przez obie
strony do bieżących danych operacyjnych dotyczących mocy obliczeniowej, zasilania, chłodzenia i przestrzeni fizycznej.
Obecnie brakuje zintegrowanych danych niezbędnych do zarządzania wydajnością. Z tego
powodu większość departamentów IT wybiera
konserwatywny, minimalizujący ryzyko sposób
zarządzania. Jest to konieczna strategia i chociaż
zarządzanie efektywnością ma dziś wyższy priorytet niż w przeszłości to jednak zajmuje ono
drugie miejsce po dostępności. Koszt pojedynczego przestoju może przewyższać oszczędności
uzyskane dzięki wyższej efektywności. Sytuacja,
w której efektywność jest realizowana kosztem
niezawodności stwarza zagrożenie dla zdolności
centrum danych do obsługi firmy i może zmusić osoby zarządzające nim do szukania pracy
gdzie indziej.
Połączenie: Zarządzanie
Infrastrukturą Centrum Danych
Jeżeli rozwój centrum danych ma zmierzać
w kierunku zapewniania wyższej efektywności, wydajności i dostępności, to konieczne jest
zmniejszenie przepaści pomiędzy warstwą IT i
warstwą infrastruktury fizycznej centrum danych i stworzenie możliwości zarządzania nimi
jako jednym systemem.
Najlepszym sposobem osiągnięcia owocnej
integracji infrastruktury IT i obiektu jest wdrożenie efektywnego Zarządzania Infrastrukturą
Centrum Danych (DCIM). Krytycznym elementem staje się szczegółowy monitoring i pomiar w czasie rzeczywistym osiągów centrum
danych, wykorzystania i zużycia energii elektrycznej. Pozwala on menedżerom centrum danych podejmować trafne decyzje, odpowiednio
planować, a przez to optymalizować operacje.
DCIM oznacza możliwość wszechstronnego
zarządzania infrastrukturą centrum danych
poprzez optymalizację zasobów, efektywności
i dostępności. DCIM obejmuje zarządzanie warstwą fizyczną infrastruktury centrum danych,
warstwą infrastruktury IT oraz luką pomiędzy
nimi. Infrastruktura IT w pewnym sensie obejmuje platformę wirtualizacji, ponieważ dynamicznie przełączające się serwery wirtualne oddziałują na serwery fizyczne, na których są one
zainstalowane.
Dopiero niedawno pojawiły się na rynku
w pełni zintegrowane kompleksowe rozwiązania DCIM. Uniwersalna koncepcja DCIM daje
nowe spojrzenie na relacje pomiędzy obiektami
a komponentami infrastruktury IT i umożliwia
menedżerom centrum danych wyższą optymalizację wykorzystania zasobów centrum danych.
Prawidłowe wdrożenie strategii DCIM wymaga
doboru optymalnego pakietu sprzętu, oprogramowania i usług, który umożliwi menedżerom
centrum danych zapełnić lukę w krytycznej infrastrukturze.
Przed wdrożeniem rozwiązania DCIM menedżerowie centrum danych muszą odpowiedzieć sobie na wiele pytań:
• Które aktywa mają krytyczne znaczenie
dla infrastruktury mojego centrum danych
i jakie są zależności pomiędzy nimi? Repozytorium zasobów umożliwia menedżerom centrum danych realny wgląd w naj-
15
cenniejsze zasoby, a także kontekstowe spojrzenie na nie w perspektywie przyszłego
rozwoju centrum danych. Taka wybiegająca
w przyszłość analiza daje biznesowy wgląd
w krytyczne aktywa i gwarantuje osiągnięcie wyższego współczynnika zwrotu inwestycji (ROI) na aktywach. Pozwala także
uwolnić i przeznaczyć środki na inne istotne priorytety kluczowe dla menedżerów
centrum danych.
• Czy poproszony przez przełożonych będę
w stanie szybko sporządzić obszerny raport
monitorowania i analizy wszystkich aktywów centrum danych? Czy raport ten zidentyfikuje wąskie gardła centrum danych?
Efektywne rozwiązanie DCIM to produkt,
który w czasie rzeczywistym będzie monitorować wszystkie parametry przestrzeni fizycznej, zasilania i chłodzenia środowiska centrum danych. Korzystanie z modelowych i chwilowych danych realnych zbieranych w dużych odstępach czasu może prowadzić do przeoczeń i uniemożliwiać szybkie rozwiązywanie problemów oraz przewidywanie nieuchronnych zdarzeń. Rozwiązanie DCIM powinno oferować pulpity nawigacyjne oraz raportowanie w czasie rzeczywistym umożliwiające menedżerom centrum danych podejmowanie proaktywnych działań w celu zapobiegania awarii operacyjnej mającej swoje źródło w infrastrukturze. Raporty na temat infrastruktury centrum danych powinny być dostępne
na żądanie i sporządzane w czasie rzeczywistym, co pozwoli utrzymać dostępność i obniżać koszty.
• Czy moje centrum danych jest w stanie elastycznie obsługiwać codzienne obciążenia
i jednocześnie reagować na bieżące wymagania stawiane mojej firmie? Rozwiązanie
DCIM powinno obejmować przepływ prac
w procesie i zapewniać:
– Scenariusze rozwoju - możliwość modelowania zmian przed ich wdrożeniem;
– Wbudowane procesy zawierające kroki, których ukończenie jest konieczne
przed zatwierdzeniem działania;
– Wskaźniki dla umów o poziom świadczenia usług (SLA), będące standardowymi lub indywidualnymi miarami
sukcesu;
– Raportowanie informacji o niedostatecznie wykorzystywanej przestrzeni
fizycznej, mocy zasilania i chłodzenia.
Funkcja ta powinna rekomendować
optymalne rozmieszczenie urządzeń
na podstawie ich unikatowych wymagań oraz informować o bieżącym obciążeniu i wydajności infrastruktury.
• Czy oprogramowanie DCIM oferuje analizę tendencji i wiedzę niezbędną mojemu
zespołowi do opracowania całościowego
planu zarządzania wydajnością? Rozwiązania DCIM, dla zapewnienia kontroli bieżącego i przyszłego wykorzystania zasobów
centrum danych, powinny zapewniać menedżerom wgląd w:
– Potoki rzutowania - statusy projektów
na różnym etapie zatwierdzania oraz informacje o ich wpływie na infrastrukturę;
– Tendencje bieżącego i planowanego wykorzystania zasobów (na podstawie
danych historycznych). Menedżerowie
centrum danych powinni na przykład
być w stanie, na podstawie tendencji
wykorzystania, określić moment, kiedy moc i chłodzenie staną się niewystarczające.
• Jakie narzędzia internetowe raportowania dla kierownictwa i planistyczne zawiera rozwiązanie? Oprogramowanie DCIM
powinno standardowo zawierać konfigurowalne internetowe pulpity nawigacyjne i
narzędzia analityczne. Automatyzacja gromadzenia informacji o operacjach i raportowania za pomocą uniwersalnego internetowego pulpitu nawigacyjnego umożliwia
opracowywanie informacji zarządczych,
które stają się następnie jedynym źródłem
wiedzy dla DCIM i planowania. • Czy rozwiązanie DCIM dostosowuje się
do usług IT i biznesowych? Dostosowanie
usług IT w sposób gwarantujący realizację
celów i potrzeb biznesowych ma nadrzędne znaczenie. Każde rozwiązanie DCIM
musi umożliwiać kierownictwu centrum
danych dostosowanie wykorzystania zasobów do strategii Systemów Zarządzania IT
(ITSM), metodyki ITIL oraz strategii Zarządzania Usługą Biznesową (BSM).
Przyszłość DCIM
Obecnie menedżerowie centrum danych znajdują się pod presją redukcji kosztów i podnoszenia
poziomu usług. Na rynku dostępnych jest wiele
technologii wspomagających osiągnięcie tego celu: wirtualizacja, wysokoefektywne źródła zasilania serwerów oraz nowe technologie zasilania
i chłodzenia. Technologie te, wraz z opracowanymi w ostatnich latach dobrymi praktykami,
mogą przyczynić się do redukcji poboru energii,
ale nie umożliwiają wdrożenia prawdziwej optymalizacji. Optymalizacja centrum danych w kategoriach efektywności, wydajności i dostępności
wymaga znalezienia punktu pełnego wykorzystania zasobów bez zwiększania ryzyka awarii.
W ostatnich kilku latach wiele czynników
złożyło się na zwrot rynku w kierunku rozwiązań DCIM. Kluczowymi elementami prawidłowego funkcjonowania IT stało się zużycie energii
i wykorzystanie przestrzeni. Narzędzia DCIM
rozwijają się szybko i w najbliższych latach staną
się kluczowym elementem arsenału operatorów centrum danych. Dostarczać będą cennych
danych niezbędnych dla raportowania i uzyskiwania wyższych oszczędności energetycznych,
identyfikowania problematycznych punktów
infrastruktury i podnoszenia efektywności planowania wydajności. Według instytutu Gartner
„ponad 50% operatorów centrum danych wdroży narzędzia DCIM w 2013 roku”1.
Obecnie nadszedł czas, aby firmy przyjęły całościową koncepcję zarządzania infrastrukturą
centrum danych w czasie rzeczywistym i połączyły w sposób kompleksowy zarządzanie IT
i obiektami.
1
Raport Gartner, Net IT Out: DCIM New Tools to Monitor, Manage and Control Your Data Center, IT Jay Pultz, Infrastructure,
Operations & Management Summit, 5-7 czerwca, 2012 Orlando, Floryda
Piotr Kowalski,
Dyrektor Działu Inżynierskiego
w Emerson Network Power
16
Gdy gra przekracza
granice ekranu
Zasiadając przed swoją ukochaną konsolą po ciężkim i wyczerpującym dniu nauki, czy pracy liczymy na chwilę relaksu po trudach dnia
codziennego.Efekt takiego „odstresowywania się” jest o tyle lepszy,
o ile dany tytuł spełnia swój główny cel, którym jest dostarczenie
szeroko pojętej rozrywki, czy to za sprawą hipnotyzującej zmysły
grafiki, urzekającej ścieżki dźwiękowej, zapierającej dech w piersiach fabuły, czy pompującej do krwi adrenalinę akcji.
N
ie możemy jednak zapominać o równie istotnej, co wręcz podstawowej
roli elektronicznej rozrywki, a więc
udostępnieniu nam sposobu, do chociaż chwilowej ucieczki od rzeczywistości i zapomnieniu
o jej problemach. To główny powód, dla którego
(oprócz aspektów technicznych) w pierwszych
grach królowały wszelakiej maści światy science-fiction i fantasy. Wraz z upływem lat można
zauważyć diametralną zmianę tej tendencji, do
tego stopnia, iż ogromna część gier osadza gracza w faktycznie istniejących lokalizacjach, czy
miastach, a samo ich przedstawianie w coraz
większym stopniu nabiera cechy fotorealizmu.
Podobnie sprawa ma się z wydarzeniami przedstawianymi na ekranach naszych monitorów,
dzięki czemu każdy z nas może stać się członkiem oddziału desantowego na Normandię,
zatańczyć na scenie „Thriller’a” z samym Michaelem, przytrzeć lakier Hamiltonowi na torze w Monaco, czy nawet rzucić mokasynem w
prezydenta USA. Jak dotąd, pomimo ciągłych
prób samych deweloperów, aby wpłynąć na
nasz realny byt za pośrednictwem gier, jak chociażby standardowy już proceder umieszczania
reklam firm w świecie gry, granica pomiędzy
prawdziwym życiem, a jego wirtualnym odpowiednikiem zawsze zawierała się w brzegach
ekranu i przycisku włączania konsoli. Na samą
przyjemność „szarpania” w ulubione tytuły
składa się pewien wachlarz przyzwyczajeń i zachowań, który poniekąd wynika z umowności
wykreowanego świata. Każdy gracz doskonale
zna i wręcz ubóstwia zbieranie punktów doświadczeń, „żyłowanie” i poprawienie wyników
swoich oraz znajomych, nabijanie kolejnych le-
17
veli, wypełnianie questów, czy zdobywanie
osiągnięć i trofeów. To właśnie te czynniki tak
bardzo nas nakręcają i nie pozwalają odejść od
konsoli, niejednokrotnie sprawiając, że dzięki
syndromowi „jeszcze jednej godziny” doświadczymy tak zapierającego dech w piersiach widoku, jakim jest wschód słońca za oknem naszego
pokoju… i totalny zgon dwie godziny później
w szkole, lub pracy. Skoro te, tak doskonale nam
znane i wyuczone „growe czynności” potrafią
dawać nam tyle frajdy, jednocześnie zmuszając
nas do takich poświęceń, to dlaczego nie moż-
na wykorzystać tego zjawiska w normalnym,
zupełnie niewirtualnym życiu? Tak się składa,
że można.
Gamifikacyjny biznes
Nie od dziś wiadomo, że pieniądz rządzi światem. Jeżeli ktoś się z tym nie zgadza, to znaczy,
że nigdy nie wziął pożyczki z banku, lub jeszcze
nie zaczął jej spłacać. Menadżerowie oraz spece
od marketingu wielkich, zamożnych i niestety,
generalnie chciwych korporacji tego świata, prężą się jak pawian na stronie, aby znaleźć nowe
Gdy gra przekracza granice ekranu
alnym to jedno, ale każdy gracz doskonale wie,
że nic tak nie potrafi zwiększyć zaangażowania
w wykonywaniu danej czynności, jak gwarancja
otrzymania za nią nagrody, a głównym atutem
opisywanego fenomenu jest właśnie możliwość
uzyskania gratyfikacji w czysto realnej formie.
O potencjale, jaki kryje w sobie grywalizacja
świadczyć może fakt, iż w tym roku odbyła się
pierwsza, w całości poświęcona jej konferencja
– Gamification Summit 2011.
Jak nawozić,
żeby się nie nawozić
Kolejnym krokiem na drodze do ingerencji
w nasze życie, zaraz po wyżej wspomnianych
tytułach jest… pielenie grządek – tych wirtualnych, jak na razie. Niepodważalny hit ostatnich
miesięcy, czerpiący garściami z konsolowego
Harvest Moon’a, przeglądarkowy Farmville bije
rekordy popularności, przynosząc jej producentowi, firmie Zynga ogromne dochody. Można
mieć swoje zdanie na temat ambitności podobnych produkcji, w których rdzeń rozgrywki
sposoby wypchania swoich i tak już rozdętych
do granic możliwości portfeli. Tak więc, ktoś zauważył wyżej wspomniany fenomen, dokonał
skrupulatnych kalkulacji i wywnioskował, że na
„grze w życie” można naprawdę nieźle zarobić.
Czym więc jest grywalizacja, lub gramifikacja,
jeżeli ktoś lubi synonimy? Tak naprawdę jest to
stosunkowo nowe słowo i „odkrycie”, które trafiło do biznesowego słownika dopiero w 2010
roku. Generalnie oznacza ono przenoszenie do
realnego świata wszystkich tych mechanizmów
i zachowań, którymi rządzą się gry wideo, a które my, gracze tak dobrze znamy i kochamy. To
zupełna odwrotność tego, co do tej pory znaliśmy – to nie gra naśladuje życie, to życie naśladuje grę. Samo zjawisko dość szczodrze czerpie
ze znanych już programów lojalnościowych, jednakże to tylko preludium do rozwiązań i pomysłów, jakie stworzy ludzka kreatywność, napędzana chęcią zysku. Samo nabijanie punktów
za korzystanie z usług konkretnego producenta
i idące za tym różnorakie wynagrodzenie, to relatywnie stare i tak naprawdę tylko podświadomie wykorzystujące schemat grywalizacji rozwiązanie. Zjawisko zacierania granicy między
życiem a grą ma miejsce już od jakiegoś czasu,
subtelnie, acz konsekwentnie rozwijając swoją
ideę. Przypomnijmy sobie popularną matę do
ćwiczeń Wii Fit od Nintendo, za sprawą, której „tylko gra” stawała się profesjonalnym programem treningowym, analogicznym do jego
prawdziwego odpowiednika. Nie sposób nie
wspomnieć o święcącej swego czasu tryumfy
serii Guitar Hero od giganta gier muzycznych
Harmonix. Dzięki kontrolerom imitującym
wyglądem i funkcjonalnością prawdziwe instrumenty, mogliśmy, chociaż przez chwilę poczuć
się jak prawdziwe gwiazdy rocka. Immersja
i zlewanie się codzienności ze światem wirtu-
Dzięki Chromaroma , nawet zwykła podróż londyńskim metrem może zamienić się
w questa rodem z prawdziwqego RPG’a.
Jeżdżąc ekonomicznie sprawisz, że twoje wirtualne drzewko po prawej zacznie
powoli rosnąć.
18
Możemy snuć własne teorie spiskowe na temat wołowiny w BigMac’ach,
wale chyba każdy chciałby spróbować zagrać na takim ekranie.
ogranicza się do dojenia „łaciatych” i nawożenia plantacji kopru, co nie zmienia faktu, że gra
stała się światowym fenomenem. Szacuje się, że
około 100 milionów osób dziennie (sic!) zasiada
przed komputerem, by sprawdzić ilość zniesionych przez jego kury jajek. Gra do tego stopnia
ingeruje w nasz plan dnia, że za coś zupełnie normalnego uważa się wstawanie wcześniej rano do
pracy, aby tylko zdążyć zasiać kolejne plansze
zakupionymi nasionami. Wszędzie tam gdzie
jest kosmiczna popularność „produktu”, pojawiają się coraz to nowsze sposoby zarobienia na
nich przez osoby trzecie. Nie inaczej jest w tym
przypadku, gdyż już teraz każdy z nas może zakupić specjalny, dedykowany poradnik, jak zostać najlepszym we wsi wirtualnym farmerem.
Kolejnym przykładem, który jeszcze lepiej zobrazuje istotę grywalizacji, jest aplikacja Chromaroma, w którą od jakiegoś czasu „zagrywają”
się mieszkańcy Londynu. Korzystając „często
i gęsto” z londyńskiej komunikacji miejskiej
i posiadając kartę z nabitym biletem, za każdym
razem, gdy zbliżymy ją do kasownika, program
rejestruje nasze położenie. W ten sposób możemy wykonywać zlecone nam zadania, poprzez
dotarcie w wyznaczone miejsce, za co dostajemy
punkty, „zdobywając” ze znajomymi wyznaczone tereny. Program zachęca do przejścia niektórych odcinków pieszo, oferując powiększenie
naszego wyniku o odpowiednią wartość. Podobną, lecz znacznie bardziej rozwiniętą strukturę działania posiada Foursquare, do którego
potrzebujemy wyłącznie telefonu komórkowego. Za pomocą wbudowanego w aparat modułu GPS możemy informować znajomych gdzie
jesteśmy, sprawdzając jednocześnie najczęściej
odwiedzane przez nich lokale. Jeżeli dana miejscówka nie znajduje się na liście aplikacji, można
ją tam bardzo łatwo dodać. Często odwiedzając dane kina, knajpy czy bary dostajemy specjalne punkty, możemy też zostać nagrodzeni
medalami za wykonywanie zleconych zadań,
19
a nawet uzyskać z tego tytułu profity i zniżki
w danych lokalach, co w tym miejscu odsłania
marketingowy charakter aplikacji. Jeżeli lubicie pstrykanie fotek, to powinien was zainteresować Appysnap. Zabawa polega na robieniu
zdjęć na swoim telefonie, wypełniając podane
w zadaniu warunki. Tak, więc na początku
musimy uwiecznić naszą prywatną i osobistą
facjatę, na co mamy godzinę czasu. Później poziom trudności rośnie, wymagając od nas na
przykład odpowiedniej liczby osób w kadrze,
czy konkretnej imprezy w tle (znów marketing
gdyby ktoś nie zauważył). Najlepsi „domorośli
paparazzi” mają szansę na nagrody rzeczowe.
Lubicie porządki domowe? Też pytanie – każdy je wręcz kocha i aż płacze z radości, gdy łapie
w dłoń ścierę. Jeżeli jednak należycie do tego
minimalnego odsetka populacji, która nie może poradzić sobie z psychiczną barierą, blokująca gwałtowny wzrost endorfiny w organizmie
w czasie mopowania posadzki, to Chore Wars
jest stworzone wprost dla was. Zabawa polega
na wykonywaniu tak prozaicznych czynności
jak mycie zlewu, szorowanie wanny, czy zaprzyjaźnienie się z „WC kaczką”, za co rzecz jasna
dostajemy punkty, ścigamy się ze znajomymi
w rankingach i pretendujemy do tytułu „najzacniejszego technika higieny domowej”. Punkty
wystawiają oczywiście bezstronni sędziowie,
w postaci zadowolonych z pracowitości swoich
pociech rodziców. Grywalizacyjny trend nie
omija także i tych ostatnich, nabierając delikatnego, ekologicznego posmaku. W trosce o nasze
środowisko, hybrydowe modele Forda, załączyły do swoich bajeranckich komputerów pokładowych specjalny segment, imitujący rosnące,
wirtualne drzewko. Jeżeli będziemy jeździć
w sposób oszczędny, walcząc z przemożną chęcią wciskania pedału gazu do samej podłogi, to
nasza roślinka zacznie rozkwitać, wizualnie dając nam do zrozumienia, że przyczyniamy się do
ochrony środowiska. Wyniki możemy porównywać dla przykładu na 100 km odcinku, co
słusznie może przywodzić na myśl słynne „masterowanie wyników”. W tej pięknej idei jest też
i ciemna strona mocy, żerująca na ludzkiej zachłanności, która niweczy pierwotne założenia
twórców tego rozwiązania. Zanotowano przypadki, gdy kierowcy przejeżdżali na czerwonym
świetle, nie chcąc się zatrzymywać, gdyż ponowne ruszenie z miejsca sprawia, że licznik spalania
szybuje pod sufit, psując rekordowy wynik. Na
takich „fanatycznych ekologów” znaleźli sposób
Szwedzi. Gdy widzimy znajdujący się w pobliżu
fotoradar (załóżmy, że wyjątkowo nie jest to atrapa), to mimowolnie odczuwamy chęć schowania twarzy za kierownicą, a jeszcze lepiej zasłonięcia nią tablicy rejestracyjnej. Projekt Speed
Camera Lottery działa na zupełnie odmiennej
zasadzie niż znany nam system mandatowy. Radary robią zdjęcia losowym samochodom, które
przestrzegały przepisów ruchu drogowego, automatycznie włączając ich do loterii, w której
wygrana czerpana jest z puli mandatów zapłaconych przez piratów drogowych. Eksperyment
przyniósł efekt, zmniejszając średnią prędkość
o ok. 10 kilometrów. Jak już o przemierzaniu
odległości mowa, to warto wspomnieć o kolejnym pomyśle promującym tym razem zdrowie,
którego autorem jest firma Nike. Jej aplikacja
Nike + Tag zachęca nas do biegania, a wszystko,
czego potrzebujemy to telefon z GPS i specjalny sensor, który zlicza dokładną odległość, jaką
przebiegliśmy, spalone przez nas kalorie, czas,
czy średnią prędkość. Swoje wyniki możemy
wrzucić do sieci, porównując je z osiągnięciami
znajomych. Najsłabszy wynik w grupie zostaje
„otagowany”, co poniekąd zmuszą delikwenta
do poprawienia swojego rezultatu. Kolejny gi-
Wystarczy smartfon, specjalny sensor i (opcjonalnie, dla chętnych) buty, aby zwykłe,
poranne bieganie przerodziło się w rywalizacje z przyjaciółmi o jak najlepsze wyniki.
Gdy gra przekracza granice ekranu
gant naszego świata, tym razem ten mniej dbający o nasze zdrowie, czyli McDonald’s wymyślił
genialną akcję promocyjną, w której zwycięzca może odebrać nagrodę dosłownie od razu.
Zawiesił on w centrum Sztokholmu (Szwedzi
prekursorem gamifikacji?) ogromny billboard,
na którym każdy może zagrać w partyjkę sędziwego Ponga. Wystarczy, że na swoim smartfonie wejdziesz na odpowiednią stronę internetową, wybierzesz proponowaną nagrodę z menu,
a następnie sterując za pomocą telefonu nie
zaliczysz zbicia w ciągu pół minuty. Wtedy na
naszej komórce ląduje wirtualny kupon, który
możemy zrealizować tuż za rogiem.
Super 5 Beer Combo, please!
Jak doskonale widać na załączonych przykładach potencjał tkwiący w zjawisku grywalizacji
jest ogromny, a jego wykorzystanie nieraz wykracza poza granice bezlitosnego marketingu.
Wszystko opiera się na sposobie przeszczepienia naszych growych przyzwyczajeń na grunt
codziennej egzystencji i wdrożenia ich w zwyczajne obowiązki. Sprzątanie domu, jako sposób do nabijania kolejnych poziomów, już był,
a więc osiągnięcie levelu 30, odblokowujące
możliwość zmierzenia się z klozetowym bossem za pomocą „buławy przepychu” nikogo nie
powinien już dziwić. A co gdybyśmy dostawali
dodatkowe punkty doświadczenia z punktualne pojawianie się w pracy? A może warto powalczyć o specjalny mnożnik punktów, poprzez
szybsze wykonanie zadania, lub zrobienie tego
w grupie? Bardzo ciekawym pomysłem byłoby
wykorzystanie znanego nam z gier określenia
„combo”, oznaczające wykonywanie po sobie
pod rząd określonych czynności. Zamiast zaserwować oponentowi Super Combo Finish, moglibyśmy wypić kilka puszek napoju, czy piwa
za jednym zamachem. Taki „atak” umożliwiłby nam dostanie specjalnego bonusu, w postaci +1 do obrażeń. Bonusu z pianką rzecz jasna.
Rentowność inwestowania w strategie grywalizacyjne została potwierdzona w badaniach
naukowych. Jak donosi Nielsen Online, granie
to druga, zaraz po buszowaniu po portalach
społecznościowych czynność, jakiej oddają się
w Internecie Amerykanie, poświęcając jej miesięcznie kolosalną liczbę 407 mln godzin. Według innych badań obecna, szacunkowa wartość
rynku grywalizacji wynosi 100 mln dolarów,
a w przeciągu najbliższych 4 lat, wartość ta ma
wzrosnąć do 1,6 mld „zielonych”, zaś sama liczba tego typu aplikacji, oferowana przez koncerny ma podskoczyć o ok. 70%. Ponadto według
firmy M2 Research, ponad 45% firm przyglądających się metodom gamifikacyjnym za cel stawia sobie zwiększenie zaangażowania użytkowników produktu, 1/3 pragnie umocnić lojalność
klienta wobec marki, a co piąta chce podnieść jej
świadomość na rynku. Wbrew pozorom zalety
opisywanego trendu niekoniecznie muszą się
ograniczać wyłącznie do celów komercyjnych,
Przyszłość, w której życie stanie się jedną wielką grą, jest na szczęście naprawdę odległa,
chociaż jesteśmy na najlepszej ku temu drodze.
mając ogromne pole do popisu chociażby w samym systemie edukacji. Niejaki Lee Sheldon,
wykładowca na Uniwersytecie Indiana wpadł
na pomysł podzielenia swoich studentów na
gildie, podobne do tych z World of Warcraft.
Uczniowie zamiast standardowych ocen otrzymywali punkty XP, których odpowiednia ilość
wymagana była do zaliczenia semestru. No
cóż, nasze punkty ECTS od dawna wykorzystują ten patent, ale jakoś mniej przyjemnie
się kojarzą. Swoje 3 grosze do tematu dorzuciła również Annath Pai, kolejna nauczycielka
w amerykańskiej szkole. Eksperyment polegał
na stosowaniu list najlepszych wyników oraz
przydzielaniu uczniom odpowiednich wyzwań,
co przyczyniło się do podniesienia średniej ocen
w klasie. Mało tego, system oceniania tak zaangażował małych podopiecznych, że zaczęli się
oni uczyć nawet zagadnień z kolejnych lat. Jeżeli dodalibyśmy do tego perki zwalniające z pisania kartkówek, czy dające „niezniszczalność”
w czasie odpowiedzi przy tablicy, to mamy
sposób na zwiększenie wyników maturalnych
o jakieś 50%.
Gracz w klatce Skinnera
Rozwodząc się nad zaletami grywalizacji, nie
możemy zapomnieć o niebezpieczeństwie, jakie niesie ona ze sobą, co niestety najczęściej
wynika z ludzkiej chciwości i niepohamowanej chęci zysku. Jak dla mnie, już teraz lekkim „przegięciem” jest brazylijska aplikacja na
Facebooka o wdzięcznej nazwie Get Closer,
nagradzająca nas punktami za jak najdłuższe
przebywanie w związku z daną osobą. Pomimo wyraźnej kontrowersyjności tegoż programu, już teraz „bawi się” nim ok. 22 tys. osób,
a liczba ta raczej będzie się powiększać. Pomimo wyraźnych, pozytywnych możliwości, jakie
ma szansę przynieść ze sobą grywalizacja, czy to
w postaci pomocy ochrony środowiska, zwiększenia efektywności pracy, czy chociażby na
gruncie edukacji, zjawisko to posiada także grupę zagorzałych przeciwników, wywodzących się
głównie ze świata nauki. Najlepszym przykładem skrajnie odmiennej opinii jest profesor
Ian Bogost, zajmujący się mediami interaktywnymi na uniwersytecie technicznym w stanie
Georgia. Uważa on, że grywalizacja jest świetnym sposobem łatwego zwiększenia zysków
kosztem samych gier, co już nie podoba się ich
twórcom. Nadmierne wykorzystywanie pozytywnie kojarzących się mechanizmów z tychże
produkcji, może doprowadzić do „zmęczenia
materiału”, pewnego przesycenia danych czynników, co przyczyni się w końcu do negatywnego postrzegania samej elektronicznej rozrywki.
Bogost zaznacza, że tak naprawdę głównym celem grywalizacji, jest eksploatacja popularnych
haseł do momentu, aż nasze kieszenie zostaną
opróżnione, a ona sama zostanie zepchana na
boczny tor przez nowy, popularny trend. Z tego powodu proponuje, aby zjawisko to nazwać
raczej „eksploatyzacją”, co uwydatni jego prawdziwe zamiary. W międzyczasie samo, zbyt
intensywne wykorzystanie gamifikacji może
stworzyć wokół nas tzw. klatkę Skinnera. Jest
to urządzenie w formie skrzynki, w którym
B. Skinner badał procesy warunkowania.
Umieszczone w niej zwierzę, wciskając przycisk
otrzymywało nagrodę, najczęściej w formie pożywienia. Obawy, że podobne skłonności mogą
przejawiać się w zachowaniu ludzi są jak najbardziej słuszne. Już teraz posiadając kartę lojalnościową danej myjni, jesteśmy w stanie jechać na
drugi koniec miasta, omijając te bliższe i tańsze,
tylko po to by zyskać kolejne punkty. Mechanizm ten faktycznie może uczynić z nas jeszcze
„wydajniejsze maszynki do wydawania pieniędzy” i zmusić do bezmyślnego wciskania przycisku, tylko po to by z otworu wyskoczył nam
kolejny do kolekcji reklamowy długopis. Oczywiście ta czarna i pesymistyczna wizja świata,
wydaje się być mało prawdopodobna, a jeżeli
już to dość odległa. Sam temat grywalizacji to
istna góra lodowa, której czubek został jedynie
nieznacznie ukazany w powyższym artykule.
Można by snuć nieskończoną ilość pomysłów
i planów, nad jego wykorzystaniem w niedalekiej przyszłości, jednakże już nie mam na to
czasu. Muszę lecieć piąty raz tego dnia wyszorować zęby, gdyż brakuje mi jedynie 200 pkt. do
rangi „nieustraszonego obrońcy szkliwa”.
Adrian „Adio” Zając
Jest studentem Informatyki na Wydziale Fizyki,
Astronomii i Informatyki Stosowanej Uniwersytetu
Jagiellońskiego. Oprócz gier komputerowych, pasjonuje się również podróżami i dziennikarstwem.
Jest redaktorem SAGE, organizacji Gamedev Students Association.
Kontakt z autorem: [email protected]
20
21
Metodyka Agile
i projekty SharePoint
– mezalians, ślub czy pogrzeb?
Metodyk zwinnych jako takich sądzę, iż nie ma potrzeby przedstawiać – oficjalnie zostały ogłoszone jako manifest już w 2001 roku. Po szczegóły, bądź dla
odświeżenia pamięci, polecam sięgnąć do tego źródła: www.agilemanifesto.
org/iso/pl/.
I
dea jest prosta i chwytliwa: w realizacji wdrożeń informatycznych ważni są ludzie, współpraca z Klientem, interakcja wewnętrzna, reagowanie na zmiany, cykliczne iteracje (trwają
od 2 do 4 tygodni, są to tzw. sprinty) no i oczywiście działające oprogramowanie. A działające
oznacza wspomagające pracę i realizację celów
biznesowych Klienta, takie, które on „wykorzystuje”, a nie „obsługuje”. No software – just tools.
Zwinność, elastyczność, interakcja vs proceduralność, formalizacja, stosy dokumentów przesłaniające ludzi po stronie dostawcy
jak i odbiorcy. Pomyśl, po której stronie widzisz
siebie? (tu nie ma złej odpowiedzi!) A jeśli zapytać, po której Klient chciałby być? Odpowiedź
brzmi: to zależy J
Stosowanie metodyk zwinnych obserwowane jest często w młodych organizacjach, co przekłada się na poczucie „luzu” w firmie (tak jego
przyczyna jak i skutek). W młodej firmie panuje
mniejsza formalizacja, spotkania odbywają się
częściej i obejmują wszystkich pracowników,
zaś dyskusje krążą wokół szybkich, ambitnych
celów. W organizacjach dojrzalszych i ustrukturyzowanych takie relacje siłą rzeczy ograniczają
się do wyspecjalizowanych zespołów, mających
własne cele cząstkowe, składające się na cele strategiczne, gdzie niekoniecznie dobrym pomysłem jest zaburzanie porządku i harmonogramu prac. Niemniej, wiele projektów wewnętrznych w takich właśnie dojrzałych organizacjach
z powodzeniem prowadzonych jest zwinnie.
By wejść w temat metodyk zwinnych głębiej
należy przyjrzeć się którejś z jej konkretnych
odmian. Jedną z popularniejszych jest Scrum.
Mniej zorientowanych zachęcam do przejrzenia
Przewodnika po Scrum: http://www.scrum.org/
storage/scrumguides/Scrum%20Guide%20-%20
PL.pdf. Godną uwagi pomocą, tym razem już
dla osób pracujących zwinnie, jest Lista Kontrolna Scrum, przygotowana i udostępniona
przez tzw. społeczność scrumowców: http://
www.scrum.org.pl/wp-content/uploads/2010/02/
Scrum_checklist_PL.pdf.
22
Lista Kontrolna Scrum – nieoficjalne, ale
uznane „musthave” dla Scrum Mastera, „mustknow” dla Scrum Membera (źródło: http://www.
scrum.org.pl)
Choć metodyk zwinnych jest wiele: Programowanie ekstremalne, Feautre Driven Developement, Test Driven Developement, etx. to
poniżej w tekście najczęściej w domyśle będę
mówił o Scrum-ie.
SharePoint
Z technologią SharePoint pracuję intensywnie już
5 lat i jestem pewien, że nadal nie poznałem jej
wszystkich możliwości.
SharePoint jest platformą wspierającą zarządzanie zawartością, obsługę dokumentów, współpracę grupową i wiele (naprawdę wiele) innych
obszarów. Jego konstrukcja u podstaw zakłada
możliwość szybkiej i łatwej rozbudowy, celem pokrywania szerokiej gamy specyficznych potrzeb
przedsiębiorstw większości branż. Architektura
SharePoint jest również gotowa by działać w wielooddziałowych organizacjach – mamy tu aplikacje webowe, kolekcje stron, aplikacje usług,
scentralizowaną administrację. (zobacz : http://
technet.microsoft.com/en-us/library/cc263121.aspx)
– jest to mocny argument, dla którego produkt
wzbudza szerokie zainteresowanie dużych podmiotów.
Rozbudowa platformy może odbywać się
za pomocą zmian przez UI, z doświadczenia
wiem, że około 70% potrzeb udaje się pokryć
w ten sposób. Jednak pozostałe 30% należy zazwyczaj doprogramować. W tym specjalizują się
i certyfikują zespoły JADE. Stawiającym pierwsze kroki w tej technologii z pomocą przychodzi
SDK (http://www.microsoft.com/download/en/details.aspx?id=12323).
W postrzeganiu i „pożądaniu” produktów
Microsoftu niemałe znaczenie ma – co oczywiste – otoczka marketingowa. SharePoint na-
Metodyka Agile i projekty SharePoint
leży do rodziny Office. Daje to na start wysoki
poziom integracji z tym popularnym pakietem
biurowym. Dodatkowo wersja podstawowa SharePoint, tzw. Foundation, jest darmowa (pobierz
i spróbuj swoich sił: http://www.microsoft.com/
download/en/details.aspx?id=5970).
Osobiście nie należę do grona zaślepionych fanów technologii Microsoft. W toku swojej pracy
zawodowej miałem okazję spotkać się z różnymi
środowiskami, natomiast ze względu na ukierunkowanie technologiczne w miejscu, gdzie
pracuję, skupiam się na produktach „MSa”.
Przełożyło się to na rzetelną wiedzę tak o możliwościach jak i ograniczeniach poszczególnych
produktów.
Zawsze należy pamiętać, jakie jest główne
przeznaczenie SharePoint – niekoniecznie będzie się nadawał jako oprogramowanie do szpitalnych urządzeń USG, jednak doskonale się
sprawdzi jako Portal Firmowy, na którym treści
będzie można publikować tak, by były widoczne zarówno w Intra jaki i Internecie. Ponadto jest
bardzo dobrym narzędziem usprawniającym
współpracę między poszczególnymi działami,
także rozproszonymi geograficznie.
Co ważne w odniesieniu do platformy SharePoint - od strony bardziej technicznej – przy jej
rozwijaniu o kolejne moduły trzeba sprawdzać
zalecane podejście, zgodne z architekturą. Jeśli
nie przemyślimy sprawy pojawić się mogą łzy
(a wiadomo, że łzy programisty deprymują najmocniej J). Jeśli jednak kod, moduł przygotowany jest zgodnie ze sztuką, wtedy szybko możemy
cieszyć się nową funkcjonalnością w aplikacji
skali enterprise.
Zatem…
Jak będzie wyglądała metodyka zwinna w projektach SharePointowych? Czy połączy ich uczucie,
pasja, dopasowanie? Gdzie siła tej potencjalnej pary? Gdzie problemy? Poniżej spróbuję podzielić
się swoimi doświadczeniami i przemyśleniami.
Miejmy najgorsze za sobą, czyli kiedy nie
warto brnąć w ten związek. Pogrzeb.
Bardzo dojrzałe organizacje, by zapanować
na wszystkimi procesami tak wewnątrz jak
i na zewnątrz, wdrażają u siebie szereg zasad
i procedur. Postrzegają siebie jako byty dobrze
zorganizowane i takich właśnie działań oczekują od dostawców oprogramowania. Metodyka
zwinna może wzbudzić u nich obawy i krytykę, dlatego osobiście odradzałbym lobbowanie
podejścia Agile u takich Klientów. Poślą wdrożeniowca na szafot, bez procesu.
Po drugie, im większy projekt, tym większy
budżet i tym mniej (a wręcz wcale nie ma) miejsca na niewiadome. Dla bardzo dużych projektów Agile w swojej spontaniczności po prostu się
nie sprawdzi. Trudno mi podać przykład firmy,
która zgodzi się by zrobić zwinnie projekt za
1mln złotych.
W metodyce zwinnej z założenia nie skupiamy się na tym co będzie za n-iteracji, myślimy
o tym co będzie w obecnej. Zatem jeżeli zakres
wymagań, które stawia przed nami Klient, jest
dość potężny, a poszczególne wymagania przeważnie mają między sobą różne zależności, to
rozsądek podpowiada, by jednak dobrze przemyśleć na starcie, cały zakres projektu. Porządna
analiza uchroni nas w późniejszym czasie przed
przepisywaniem zakończonych modułów. Ciągłe zmiany tych samych obszarów prowadzą,
oprócz większych kosztów, do irytacji członków
zespołu projektowego. Inny przypadek straszący tragedią to ten,
w którym SharePoint miałby integrować się
z innymi systemami, lub wykonywać skomplikowane obliczenia, np. finansowe. Niezwykle
istotnym produktem projektu jest wtedy specyfikacja i dokumentacja techniczna integracji, czy
obliczeń.
A przecież pamiętamy, że metodyka zwinna redukuje do minimum ilość „formalności”
i „papierów” - nie wyobrażam sobie systemu
wykonującego obliczenia finansowe, który nie
posiadałby sensowej specyfikacji opisującej reguły przeliczeń, procesy, kartoteki. Waga biznesowa takiego systemu jest tak duża, że będzie on
prędzej czy później rozwijany/zmieniany/poprawiany. Bez odpowiedniej dokumentacji wszelkie ingerencje będą szalenie niebezpieczne. Zaś
dla samych programistów praca na podstawie
miękkich ustaleń, w obszarze skomplikowanych
algorytmów, mapowań i transformacji, byłaby
bardzo… nieprzyjemna. Tak nie robimy J
Bywa, że metodyka zwinna, dla przykładu
Scrum, wymaga stosunkowo nietypowego podziału ról w zespole. Dla niektórych organizacji
(dostawców oprogramowania), dostosowanie
się do takich zasad, jest bolesne (zmiana organizacyjna dotknie wszystkich jednostek, jej wprowadzenie wymaga czasu i wysiłku, przy czym zawsze jakaś część pracowników obawia się zmian
jako takich). Metodyki zwinnej nie da się zacząć
stosować „z dnia na dzień”.
I żyli długo i szczęśliwie, czyli warto. Ślub.
Projekty realizowane kaskadowo (bardziej tradycyjnie) od tych realizowanych zwinnie różnią
się zasadniczo okresem zaręczyn.
W tym pierwszym ujęciu najważniejszy produkt pojawia się pod koniec, w trakcie testów
po stronie Klienta. Zatem odbiorca żyje niejako
w nieświadomości, jak będzie wyglądał system,
którego oczekuje – jego ukochana szykuje się na
wieży i zejdzie z niej dopiero przed sam ołtarz.
Natomiast w przypadku metody zwinnej odbiorca już po pierwszej iteracji wie, za co płaci
– narzeczeństwo jest aktywne i silnie kontaktowe - Klient co i rusz dostaje mały, ale funkcjonalny kawałek systemu.
Brzmi pięknie i zachęcająco, ale żeby dostarczyć pierwszy kawałek, musi powstać jakiś szkielet, silnik, baza – coś co będzie trwałym fundamentem wszystkich funkcjonalności. W tej relacji faktycznie świetnie sprawdza się SharePoint,
którego startowy kształt daje solidne podstawy
pod konkretne wymagania Klienta. Pozwala
nam to szybko wystartować z pierwszą iteracją,
gdyż dostosowanie platformy przed pierwszym
spotkaniem, to kilka dni pracy, czyli niewiele.
Kluczowym elementem na początku projektu będzie prezentacja filozofii platformy (poznajmy się). Korzystając z tego, że już na starcie
mamy „n” modułów z dużą wartością funkcjonalną, możemy zaznajomić Klienta z interfejsem oraz wyczuć jego poziom akceptacji architektury SharePoint jako takiej. Jest to tzw. spotkanie gap/fit.
Ważne, aby ukierunkować pracę i dalsze iteracje z Klientem na tor odnajdywania w platformie optymalnych sposobów na realizację potrzeb, zamiast na tor przebudowywania tego, co
jest już gotowe, np. wstążki (w SharePoint, jako
że jest częścią rodziny Office, mamy wstążkę),
nawigacji, formularzy, czy ułożenia przycisków.
Akceptacja platformy na starcie, przyzwyczajenie do typowego dla SharePoint UI, pozwoli
oszczędzić dużo budżetu i zapobiegnie nerwom
w późniejszych etapach projektu.
Dzięki temu programista w zespole zyskuje
komfort pracy - nie będzie musiał się zastanawiać czy i gdzie dodać przycisk, co się ma wydarzyć po jego naciśnięciu. Może i ma skupić się na
tym jakie kartoteki, i procesy należy dostarczyć,
by pokryć oczekiwaną funkcjonalność i właściwie oprogramować elementy wykraczające poza
startowe możliwości.
Metodykę zwinną dobrze stosuje się u Klientów, dla których prowadziliśmy już doradztwo
i wdrożenie, którzy ufają nam (na bazie dotychczasowej współpracy). Klient jest spokojny,
wie, że metodyka, w której budżet całkowity
jest nieprecyzyjnie określony, jest bezpieczna,
a nawet korzystniejsza, gdyż dzięki niej dostarczamy Mu dokładnie tego, czego potrzebuje,
a nie tego, co wydawało mu się potrzebne na
starcie projektu. Przekłada się to często na sytuację, w której zamiast planowanych (np.) dziewięciu iteracji, wystarczyło zrealizować sześć,
by po nich Klient stwierdził, że ma wszystko
23
czego potrzebuje. Dodatkowo zostaje mu trochę budżetu w kieszeni na kolejne inwestycje
(np. w system mobilny).
Pierwsze spotkanie z Klientem, to również
zebranie listy wszystkich istotnych wymagań,
które powinny zostać zrealizowane. Wymagania
zostają spriorytetyzowane, tak by mieć świadomość, na czym powinniśmy się skupić w najbliższej iteracji.
W przypadku SharePoint cała funkcjonalność
bazowa (logowanie, role, strony, formularze) są
gotowe. Zatem wybór istotnych tematów, będzie obejmował – bardzo zwinnie - konkretne
wymagania biznesowe.
Wybrane tematy, do pierwszej iteracji, możemy od razu „przeklikać” z Klientem. W trakcie spotkania bardzo małym nakładem pracy,
jesteśmy w stanie pokazać szkielet docelowej
funkcjonalności. Dla Klienta zobaczenie czegoś i rozmawianie na namacalnym kształcie o
dalszych szczegółach jest dużo łatwiejsze, niż
opowiadanie „co by było, jeśli…” bądź przesyłanie maili o abstrakcyjnych obiektach (pamiętajmy, że Klient nie musi mieć pojęcia o świecie systemów).
Przygotowana lista tematów na najbliższy
cykl trafia na do zespołu. Jest omawiana, wyceniana i z miejsca implementowana.
Tu również pomaga nam SharePoint, gdyż
tak jak w przypadku spotkania z Klientem.,
tak i dla zespołu można przekazywać wiedzę
w oparciu o „żywy organizm”. Np.:
Product Owner:
W witrynie dla Działu Marketingu [klik,
klik], musimy dodać następujące elementy:
• Lista pracowników działu
• Katalog filmów flash
• Formularz kontaktowy – z powiadomieniami email
• Wszyscy pracownicy działu mogą zarządzać zawartością, pozostali użytkownicy tylko przeglądają. Jak to widzicie?
Scrum Member:
Patrz, punkty 1, 3, 4 [klik, klik, klik] – mamy
z pudełka. Punkt 2gi [klik, klik] będzie oparty o bibliotekę dokumentów, ale będzie bardziej złożony. Widziałem na www.CodePlex.
com fajny i oczywiście darmowy webpart do
wyświetlania filmów flash w SharePoint. To co
trzeba zrobić, to dodać event reciver do biblioteki filmów, tak by przy każdym filmie pojawiło się ładne, klikalne łącze odtwórz. W ciągu
jednego dnia przygotuję instalkę tych funkcjonalności, czyli WSPka i wrzucę ją do Systemu.
Product Owner:
Super! Uwaga Klienta jest taka, że ten moduł
musi być widoczny po prawej stronie [klik, klik],
a ten …”
Oprócz tego, że mamy szybką wizualizację,
rozwiązania zarówno własne, jak i zewnętrzne
można przenosić z jednego SharePoint na drugi, da nam oszczędność pracy, co pozwoli nam
w ciągu jednej iteracji wziąć na warsztat więcej
potrzeb Klienta do obsłużenia. Przypomnę, że
24
w metodyce zwinnej nie mamy wielu dokumentów, zatem nasze ustalenia muszą mieć od razu
odzwierciedlenie w pracach na rzecz bieżącej
iteracji. Spotkania zespołu odbywają się codziennie, więc nie sposób zapomnieć czy pogubić się
w zadaniach.
Bardzo ważnymi momentami pracy nad rozwiązaniem w oparciu o SharePoint (w zasadzie
bez względu na metodykę), są
• faza definiowania architektury systemowej
pod wymagania. Platforma narzuca pewne
podejścia, które jeśli zostaną pominięte, najprawdopodobniej w przyszłości spowodują
szereg problemów z systemem
• faza decyzji odnośnie punktu, do którego
wystarczą dostosowania w UI (pamiętamy, że SharePoint pozwala w UI dostosować środowisko w bardzo szerokim zakresie), a od którego musi pojawić się deweloper by dostarczyć niestandardową funkcjonalność
W ramach iteracji oczywiście nie powinniśmy
zmieniać zakresu, czy ustaleń. Nie powinniśmy
– bo tak głosi metodyka. Gdy jednak nie uda nam
się uniknąć takiej sytuacji, ważne jest by na bieżąco informować Klienta o wpływie zmiany na
sprint.
Po skończonej iteracji prezentujemy funkcjonalny kawałek Systemu. Minęło niewiele
czasu, a już można coś zobaczyć – ma to bardzo pozytywny wydźwięk. Generalnie w metodykach zwinnych czas pędzi – my pędzimy
z nim – stąd nazwa sprint; dzisiaj coś ustalamy, jutro już możemy to z dumą pokazać
współpracownikom.
Jest „juice” jest „fun”. J
Oprócz projektów z zaprzyjaźnionymi
Klientami, czy projektów odkrywających
przed Klientem „Świat SharePoint” - dobrym
mariażem dla metodyki zwinnej, w zasadzie
bez względu na wielkość organizacji odbiorcy, czy dostawcy, będzie ten z projektami wewnętrznymi. Praktyka pokazuje, że tematy
wewnętrzne z reguły nie są profitowe, więc ich
priorytet automatycznie nie jest z byt wysoki.
To wymusza przyrostowy model liczby dostarczanych rozwiązań, czyli Agile.
A propos finansów: skoro iteracje trwają
od dwóch tygodni do miesiąca, pozwala to na
„zgrabne” ciągłe finansowanie prac w ramach
projektu. W sytuacji idealnej cały zakres projektu zostaje podzielony na zamówienia, czyli niezależne od siebie paczki wymagań – tak właśnie
pracujemy z jednym z naszych Klientów. Mamy
uzgodnioną częściową płatność gdy podejmujemy paczkę/zamówienie. Średnio jedno zamówienie wymaga dwóch iteracji i czas realizacji
przekłada się na miesiąc (maksymalnie dwa).
Oczywiście po Zamówieniu nr 1, następuje Zamówienie nr 2. Jaki mamy efekt? Klient jest zadowolony, bo szybko otrzymuje i wykorzystuje
narzędzie (agile), Zarząd dostawcy jest zadowolony, bo jest stały przychód gotówki, a Zespół?
Zadowolony i zmotywowany, bo widzi efekty
swojej ciężkiej pracy i uśmiech na twarzach Wyżej Wymienionych.
Właśnie. Dobrze wykonany SharePointowy
projekt zwinny powoduje, że „morale załogi”
skacze do góry. Takie nastroje zawsze należy brać
pod uwagę, jako argument za agile, podczas wyboru metodyki dla kolejnego projektu.
Podsumowanie,
czyli… mezalians???
Jestem przekonany, że bazując na doświadczeniu organizacji w której pracuję, dla każdego
projektu potrafiłbym dobrać właściwą metodykę, bez obawy że wyjdzie … mezalians J
Obecnie w firmie JADE, która jest większą
i uporządkowaną organizacją, akcent leży na
efektywności i jakości oraz porządku i spokoju pracy. Udaje nam się pozyskiwać coraz
większe projekty, co przekłada się na nasze
ukierunkowanie w stronę metodyk formalnych. Jednak nadal część wdrożeń, zwłaszcza
SharePointowych prowadzimy zwinnie, gdyż
jesteśmy świadomi nieprzeciętnych korzyści
z Agile zarówno dla Klienta, jak i dla nas, w
tym (jak już to wcześniej wspominałem) dla
naszych Zespołów.
Skąd wiemy czy działać zwinnie czy formalnie? Nie ma tutaj jednoznacznej odpowiedzi,
gdyż tak naprawdę powinniśmy stronić od
skrajnych wartościowań metodyk oraz poszukiwań ich jednoznacznych powiązań z technologią. Nic na siłę.
Nie zapominajmy też, że metodyki zawsze definiują sytuację idealną. Gdy Klient nie jest przekonany co do słuszności Agile, pójście w stronę
formalną nie musi być czymś gorszym.
A kiedy każda opcja jest równie dobra, zbadajmy nastroje ludzi.
Na koniec chciałbym polecić krótki, aczkolwiek bardzo ciekawy artykuł dotyczący wyboru
metodyk w ogóle: http://sveinminde.wordpress.
com/2012/02/23/agile-methods-do-not-fit-everysoftware-development-project/
… i zaprosić do wspólnych projektowych doświadczeń z JADE J
Janusz Falkiewicz
Analityk i Konsultant Biznesowy, JADE.
Od 5 lat związany jest z JADE, Złotym Partnerem Microsoft i laureatem Microsoft Special Award Partner
of the Year 2011.
Zarządzał projektami implementacyjnymi oraz pełni rolę analityka we wdrożeniach takich produktów, jak Microsoft Office SharePoint Server oraz
MS Dynamics CRM; odpowiada za definiowanie wymagań klienta, planowanie oraz organizację prac
projektowych, a także za komunikację pomiędzy
wszystkimi interesariuszami.
Jest doświadczonym analitykiem biznesowym, aktywnym członkiem w IIBA; posiada certyfikaty Microsoft Certified Proffesional m.in. w obszarze Portals & Collaboration: Microsoft SharePoint 2010.
Z wykształcenia informatyk, Absolwent Wydziału
Matematyki i Informatyki UMK w Toruniu.
Prywatnie pasjonat wielkich budowli, antropologii,
kosmologii.
Programowanie
w świecie nowych
technologii
Trzy podstawowe pytania
• Programiści – czy tworzą działające, zgodne z potrzebami klienta aplikacje, czy tylko produkują i kompilują kod źródłowy?
• Rozwój technologii – czy to tylko bardziej wypasiona elektronika oraz systemy operacyjne i języki programowania o coraz dziwaczniejszych nazwach, czy również zmiany metod, procesów, organizacji?
• Nowość – dla jednej osoby, dla danej firmy, czy autentyczna nowość?
Co to właściwie
jest „programowanie”?
Czy oznacza to tworzenie oprogramowania, a więc
złożony proces, obejmujący całą drogę od analizy
wymagań, poprzez projektowanie, pisanie kodu,
integrację, testowanie, wdrożenie i utrzymanie?
Czy też programowanie, to samo kodowanie:
pisanie kodu źródłowego, kompilowanie, ewentualnie analiza statyczna i testy jednostkowe
– czyli to, co zwykle wykonują osoby zwane
programistami?
Jeśli programowanie, to pisanie kodu źródłowego na podstawie względnie dokładnej specyfikacji, wtedy zależność programisty od zmian
technologii bywa mniejsza.
Wiemy jednak, że w praktyce, na dobre i złe,
programiści – chcąc nie chcąc – pełnią wiele
funkcji: zbierają wymagania, testują, wdrażają,
odpowiadają za utrzymanie. Tak dzieje się czasem z powodu niefrasobliwości kierownictwa,
które nie rozumie potrzeby istnienia innych
uczestników projektu poza skrzętnymi programistami. Czasem firma i projekt są po prostu
bardzo małe. Niekiedy taki stan rzeczy bywa
wynikiem świadomego wyboru metod zwinnych, „agile”. Wówczas programiści muszą dobrze rozumieć technologię, dla której tworzą
kod – jest to niewątpliwe wyzwanie!
Co to właściwie
jest „technologia”?
Słysząc słowo „technologia”, zwykle wyobrażamy sobie coś twardego: nową elektronikę, nowe procesory, nowe światłowody, nowe sposoby
produkcji tychże, i tak dalej. Jeśli nie elektronika, mechanika ani nie chemia, to ostatecznie nowe aplikacje: systemy operacyjne (np. zaroiło się
nam w ostatnich latach od pseudo-nowości w
formie plejady androidów, iOS-ów, blackberries’ów, symbianów!), nowe algorytmy, nowe języki
programowania. Słowa „technologia” i „technika”
są po polsku powszechnie stosowane zamiennie.
Tymczasem angielskie słowo „technology”
oznacza coś więcej: także procesy, procedury,
25
sposoby organizacji. Przy takim rozumieniu
technologii, wyzwaniem dla programisty byłyby
również zmiany procesu tworzenia oprogramowania, takie jak, na przykład, przejście od modelu kaskadowego do przyrostowego, wdrożenie
RUP, stosowanie formalnych metod modelowania wymagań. Tak, to często bywa dla programistów większym wyzwaniem, niż nowe techniki!
Co znaczy „nowe”?
W jakimś stopniu każde zadanie programisty jest
nowe – nie programuje się zwykle ponownie tego, co już działa, lecz realizuje funkcjonalność dotąd nie istniejącą.
Po drugie, nowość to pojęcie względne: coś
może być nowością dla danej osoby, na przykład
język C# dla kogoś znającego Java, albo programowanie aplikacji MacOS dla kogoś, kto wcześniej pracował pod Windows.
Technologia może być nowością w jednej firmie, czy branży, choć gdzie indziej istniała już
wcześniej.
Wreszcie, istnieją też prawdziwe nowości: technologie, które wcześniej nie istniały w ogóle.
Takie technologie są dla programistów największym wyzwaniem: czasem wymagają radykalnej
zmiany dawnego podejścia, brak podręczników,
brak narzędzi, jest większe ryzyko popełnienia
błędów.
Programowanie
dla nowych technologii
Nowe technologie biznesu
Większość zmian w oprogramowaniu bierze się
z nowych potrzeb biznesowych. To biznes przychodzi do programistów i prosi „zróbcie to a to,
najlepiej na wczoraj”. Stara funkcjonalność na nowych urządzeniach, na przykład mobilnych; nowa funkcjonalność ze starych elementów, na przykład możliwość zeskanowania kodu kreskowego
towaru telefonem i sprawdzenie, czy produkt jest
naprawdę markowy; wreszcie zupełnie nowa funkcjonalność – na przykład nowe usługi bankowe
albo ubezpieczeniowe, dostępne przez Internet.
Tak, realizacja takich nowych technologii biznesowych to główny cel, podstawowe zadanie
i największe wyzwanie dla programistów! Dziś
oprogramowanie nie jest, jak 30 lat temu, dodatkiem do działania firmy czy instytucji, lecz jej
motorem! Umiejętność IT, aby szybciej, skuteczniej i taniej niż konkurencja realizować w niezawodnym, łatwym do modyfikowania kodzie,
zmieniające się jak w kalejdoskopie potrzeby
biznesu, jest kluczem do sukcesu firmy, albo…
powodem jej klęski, jeśli IT zawiedzie.
Nowe technologie platformy
Pojawienie się nowego procesora, zmiany
w systemie operacyjnym, nowe usługi internetowe (Web services), nowy protokół komunikacyjny, nowy algorytm szyfrowania danych, nowe,
pojemniejsze dyski – czy to wyzwania dla programistów, czy też sprawy dla nich obojętne?
Bywa bardzo różnie! Nowe urządzenie jest
wielkim wyzwaniem dla osoby, która pisze
sterownik dla tego urządzenia, a sprawą często
najzupełniej obojętną dla kogoś, kto tworzy kod
wysokiego poziomu. Pod warunkiem…
… pod warunkiem, że oprogramowanie ma
dobrą strukturę, realizuje zasady hermetyzacji
(encapsulation), modularyzacji, i ma właściwie
zbudowaną hierarchię klas.
Niezależnie od tego, jakiego rodzaju zmiany w technologiach miały, mają i będą miały
miejsce, umiejętność radzenia sobie z nimi
przez programistów zależy od umiejętności stosowania przez nich dobrego stylu programowania, wyboru właściwych języków
i nieulegania pokusie stosowania brzydkich
sztuczek (kludge) w pisaniu kodu!
Programowanie
jakiego poziomu?
Różne zmiany technologiczne mają różny wpływ
na pracę programistów, zależnie od tego, ja jakim
Programowanie w świecie nowych technologii
poziomie ich programowanie się odbywa. Programista sterowników sprzętu musi rozumieć nową
technologię i dostosowywać swój kod do jej zmian
przy każdej technicznej nowości, natomiast jest
zwykle obojętny na nowe wyzwania biznesowe.
Programista aplikacji WWW być może nie dba
(pod warunkiem, wspomnianej w poprzednim
akapicie, poprawnie realizowanej hermetyzacji)
o zmiany technologii układów scalonych, dysków
i wyświetlaczy, ale za to musi stawić czoła modyfikacjom biznesu, który jego aplikacja realizuje!
Tak więc, podsumowując, rozwój różnych
technologii jest – lub nie – trudnym wyzwaniem dla programistów, zależnie od tego, na
jakim poziomie wirtualnej maszyny działają!
Programowanie przy pomocy
nowych technologii
Nowe języki programowania
Programista szukający pracy ma czasem wrażenie, że znajomość właściwego języka programowania jest podstawowym warunkiem powodzenia! Jeśli wśród wymagań wobec stanowiska,
o które programista się ubiega, napisano „znajomość ADA95 | APL | Assembler | AWK |
Bash | Basic | C | C# | C++ … Ruby | Smalltalk
… Xbase | XHTML”, to nie ma zmiłuj! Bez znajomości tego języka jest się bez szans.
Cóż, wynika to z krótkowzroczności pracodawców, lub wręcz rozpaczliwej ignorancji działów zajmujących się rekrutacją, nie zdających
sobie sprawy z tego, że nowego języka programowania można się doskonale nauczyć w ciągu
kilku dni, natomiast opanowanie najlepszych
praktyk i zasad inżynierii oprogramowania zajmuje o wiele dłużej! Kiepski programista znający „właściwy” język, będzie wydajniejszy od
dobrego programisty, który tego właśnie języka
nie zna… przez pierwszy tydzień, a potem role
się odwrócą!
Czyli z punktu widzenia interesów własnej
kariery, zalecałbym programistom sprostanie
wyzwaniu uczenia się najnowszych, najmodniejszych języków, albo – przeciwnie – opanowaniu jakiegoś archaicznego dialektu, który jest
i niemodny, i bardzo potrzebny… jak COBOL
w roku 1999!
Natomiast z punktu widzenia faktycznych
umiejętności zlecam raczej znajomość kilku języków, co wybitnie ułatwi – w razie potrzeby
– szybkie uczenie się kolejnych.
Nie zapominajmy, że języki programowania
są dla ludzi, nie dla maszyn – mikroprocesor
i tak dostaje do wykonania sekwencję instrukcji
napisanych w kodzie maszyny, a psychologiczne podstawy, na których opiera się gołosłowne
twierdzenia o wyższości jednych języków nad innymi, są zwykle bardzo wątłe. Nie ma się czym
ekscytować!
Nowe paradygmaty programowania
W przeciwieństwie do poszczególnych języków,
ważna jest natomiast znajomość różnych paradygmatów, sposobów podejścia do programowania.
O ile przejście między C++, C# i Java nie powinno nastręczać żadnych trudności, o tyle zmiana
paradygmatu z asemblera na język strukturalny,
z języka strukturalnego na obiektowy, a z każdego
z nich – na rekurencyjny, jak Lisp czy Prolog, to
już większe wyzwanie. OK – takim wyzwaniom
programiści muszą sprostać, tak jak leśniczy nie
powinien błądzić w lesie, i nic ponadto. Zresztą,
nie wydaje się, aby należało się spodziewać czegoś
nowego w tej dziedzinie w najbliższej przyszłości.
Niekiedy, nowa technologia produktu programistycznego pociąga za sobą nowy paradygmat. Na przykład rozszerzająca się technologia
tworzenia usług internetowych, wykorzystująca
architekturę SOA, pociąga za sobą pewne nowe
sposoby programowania, niezależnie od używanego języka.
Czy nowe metody to też nowe
technologie?
To wprawdzie sprawa do teoretycznej dyskusji
(patrz wcześniejszy akapit: Co to właściwie jest
„technologia”?), ale nie ulega wątpliwości, że nowości czysto techniczne są dla programistów
w praktyce o wiele mniejszymi wyzwaniami, niż
stosowanie nowych metod wytwarzania oprogramowania. Dlatego pominięcie tego tematu oznaczałoby zamykanie oczu na to, co najistotniejsze!
Temu wyzwaniu programiści stawiają czoła, ze zmiennym powodzeniem, od ponad 60
lat. Kiedyś programowanie było zajęciem dla
samotnych geniuszy, często lauretaów Nobla
z fizyki1. Potem stało się zadaniem zespołowym,
trochę z pogranicza sztuki, trochę rzemiosła,
stopniowo – manufaktury. Rosnąca złożoność
przedsięwzięć informatycznych oraz ich efektowne niekiedy niepowodzenia spowodowały,
że usiłowano je uporządkować, zbiurokratyzować, uczynić bardziej przewidywalnymi. Z pra-oceanu pra-programowania wyłoniły się nowe,
nieznane wcześniej dyscypliny: analiza biznesowa, inżynieria oprogramowania, zarządzanie
konfiguracją, zapewnienie jakości, testowanie,
utrzymanie. Potem nadeszła kontr-rewolucja
„agile”, próba powrotu do pre-biurokratycznych
korzeni. Każda z tych zmian wywierała ogromny wpływ na treść i kształt pracy programistów,
każdorazowo wyzwaniem było poradzenie sobie w nowej rzeczywistości.
Programowanie,
kiedy świat się zmienia
Rozwój technologii oznacza zmiany. Jakim wyzwaniem są dla programistów zmiany?
Jak radzić sobie ze zmiennością
Na pierwszy rzut oka, zmiany, także te wynikające z rozwoju technologii, nie są dla programistów
ani większym, ani mniejszym wyzwaniem, niż
dla każdego innego. Zmiany powodują obawy,
poczucie zagrożenia, uaktywniają syndromy „tak
robiliśmy zawsze” oraz „lepiej nie próbować naprawić tego, co nie jest zepsute”. Jednak, zmiany w IT mają też swoją specyfikę, która odróżnia
je od zmian w, dajmy na to, hutnictwie, a upodabnia do zmian mody – są niezwykle szybkie
i nagłe.
Zmiany oprogramowania, wynikające ze
zmiany technologii, łatwo mogą doprowadzić
do chaosu, którego bezwinnymi (czasem, współwinnymi…) ofiarami często stają się programiści
i testerzy. Jeśli nie ma dobrze działającego procesu zarządzania zmianami wymagań, programiści
o zmianach dowiadują się często chaotycznie
i na ostatnią chwilę. Jeśli nie ma dobrego projektu, zmiany wdrażane przez programistów mogą
być niespójne. Jeśli nie dokonuje się analizy
wpływu (impact analysis), to zdarza się, że realizacja żądanej zmiany wymaga znacznie więcej
czasu, niż przewidywano. Tę litanię można by
ciągnąć jeszcze długo.
Łatwość modyfikacji
Rozwój technologii IT zwykle nie odbywa się skokowo, kwantowym skokiem, lecz drogą stopniowych, niewielkich zmian. Tak więc wyzwanie dla
programistów nie oznacza zwykle, że wyrzuca się
komplet starego oprogramowania i wszystko pisze zupełnie od nowa, lecz że dokonuje się modyfikacji już istniejących aplikacji i systemów. Dlatego łatwość, na ile oprogramowanie poddaje się
zmianom, tak zwana łatwość utrzymania (maintainability) decyduje, na ile rozwojowi technologii
towarzyszy nieustanna trauma, a na ile może się
on odbywać bezboleśnie, płynnie.
Niestety, przy projektowaniu systemów i podczas ich realizacji w projektach, ta właściwość
pada zbyt często ofiarą krótkowzroczności, chęci osiągnięcia pozornego sukcesu w bieżącym
projekcie kosztem… przyszłych pokoleń, jak
deficyt budżetowy państwa! W końcu szybciej
jest – zacytuję Adama Kolawę2, polskiego programistę-miliardera – przyspawać zapasowe
koło do osi, niż… mozolnie przykręcać pięć śrub!
Zaś kierownik projektu zostanie pochwalony
za zakończenie projektu w terminie - nikt nie
widzi, że osiągnięce kosztem jakości i łatwości
utrzymania. I tak oszczędność wynikająca ze
zwykłego niechlujstwa, wynosząca, dajmy na to,
100 K, powoduje wzrost kosztów testowania,
wdrożenia i napraw w ostatniej chwili o 1000 K,
zaś rozłożone na lata koszty utrzymania mogłyby być może i o 100.000 K mniejsze.
Nie magiczne języki programowania, nie mistyczne – zwinne, ekstremalne – metodyki,
nie betonowe normy typu PRINCE-2, ITIL czy
COBIT, lecz wyłącznie dobry proces inżynierii oprogramowania, dobre praktyki zapewniają, że programiści będą sobie radzic
z wyzwaniami płynącymi z rozwoju technologii bez potrzeby wylewania hektolitrów
potu i łez!
Bogdan Bereza,
[email protected], sqa.victo.eu
1
Artykuł na ten temat: „Przyszłość IT tworzą
geniusze” na victo.eu/PL/Wiedza.
2
Adam Kolawa „Skokowy wzrost wydajności”,
CeDeWu 2010, oraz www.nextleapinproductivity.com
26
Informacje prasowe
Xerox liderem
rynku urządzeń
wielofunkcyjnych
według raportu IDC
Warszawa, 8 października 2012 r. Według tegorocznego raportu IDC1, Xerox zajmuje pozycję lidera rynku sieciowych urządzeń wielofunkcyjnych dla biur różnej
wielkości. Eksperci wyróżnili szeroką i jedną z najbardziej kompleksowych w branży
ofert produktów z obszaru MFP. Analitycy docenili Xerox również za działania w obszarze rozwoju i promocji usług i rozwiązań z zakresu zarządzania dokumentami,
które są istotne z punktu widzenia realizacji celów biznesowych przedsiębiorstwa.
A
utorzy raportu „IDC MarketScape:
U.S., Networked Multifunction Peripherals for the Distributed Office
2012 Vendor Analysis” przeanalizowali oferty
dostawców MFP pod kątem konkurencyjności
i dopasowania do zmieniających się potrzeb
amerykańskiego rynku i klientów. Eksperci za
jeden z największych wyróżników firmy Xerox uznali szerokie portfolio produktów do
biur, zarówno kolorowych, jak i monochromatycznych drukarek i urządzeń wielofunkcyjnych, a także usług z obszaru zarządzania
drukiem.
„Xerox posiada szereg atutów potrzebnych
do zbudowania mocnej pozycji firmy na rynku urządzeń wielofunkcyjnych”, podsumowuje Keith Kmetz, vice president, Hardcopy
Peripherals Solutions and Services, IDC. „Sukces Xerox oznacza również, że klienci szukają
wartości dodanej i wybierają takich dostawców, którzy oprócz produktów dobrej jakości
potrafią dopasować strategię cenową do wymagań odbiorcy oraz zaproponować korzystny
model usługowy”, dodaje.
Xerox od wielu lat stawia na innowacyjność swoich produktów i usług, co sprzyja
zachowaniu równowagi pomiędzy tradycyjnymi a cyfrowymi rozwiązaniami. Narzędzia
opracowywane przez ekspertów firmy pomagają filtrować dane, szybko uzyskiwać najważniejsze informacje oraz upraszczać codzienne procedury i czynności. Przykładowo,
platforma Xerox Extensible Interface Platform® pozwala firmom na tworzenie opro-
28
gramowania, które umożliwia wykonywanie
skomplikowanych zadań z poziomu dotykowego ekranu urządzeń wielofunkcyjnych.
Informacje o Xerox
Xerox Corporation to spółka o wartości prawie
23 mld $, będąca światowym liderem w dziedzinie zarządzania procesami biznesowymi i
dokumentami. Firma, z siedzibą w Norwalk
w amerykańskim stanie Connecticut, dostarcza najnowocześniejsze rozwiązania technologiczne w zakresie dokumentów, usług, oprogramowania i materiałów eksploatacyjnych dla
produkcji i biur każdej wielkości. Dzięki ACS,
A Xerox Company, spółce przejętej przez Xerox w lutym 2010 roku, Xerox oferuje także
usługi outsourcingu procesów biznesowych
i usługi informatyczne, takie jak przetwarzanie danych, outsourcing procesów HR, pomoc finansowa i usługi zarządzania relacjami
z klientami, zarówno dla biznesu jak i sektora
publicznego na całym świecie. 140.000 pracowników Xerox obsługuje klientów w ponad
160 krajach.
Więcej informacji do zdobycia na stronach:
http://www.xerox.com, http://news.xerox.com,
http://www.realbusiness.com. Informacje z zakresu relacji inwestorskich są dostępne na stronie: http://www.xerox.com/investor.
konkretnym rynku. Badanie wykorzystuje metodologię bazującą na kryteriach jakościowych
i ilościowych. Jest prostą, graficzną ilustracją pozycji każdego dostawcy na rynku. IDC
MarketSpace zapewnia bazę porównawczą dla
produktów i usług, możliwości, strategii oraz
czynników obecnego i przyszłego sukcesu dostawców rozwiązań ICT. Badanie zapewnia
klientom możliwość oceny mocnych i słabych
punktów dostawców w różnych obszarach
i pod każdym kątem.
Kontakt dla mediów:
Aleksandra Żarkowska, Xerox Polska Sp. z o.o., +48 22 878 78 04, GSM +48 608 61 64 61,
[email protected]
Anna Podolak, Linkleaders Sp. z o.o., GSM +48
502 220 557, [email protected]
Uwaga:
Aby subskrybować kanały RSS firmy Xerox,
wejdź na stronę http://news.xerox.com/pr/xerox/
rss.aspx. Aby dodać swój komentarz lub sugestię, dowiedzieć się więcej o branży i ostatnich
wydarzeniach, wejdź na stronę: http://twitter.
com/xeroxcorp, http://realbusinessatxerox.blogs.
xerox.com, http://www.facebook.com/XeroxCorp,
http://www.youtube.com/XeroxCorp.
O IDC MarketScape
Analiza MarketScape została zaprojektowana
w celu zdobycia informacji na temat dostawców usług IT/telekomunikacyjnych (ICT) na
XEROX® i XEROX and Design® to znaki towarowe należące do Xerox Corporation
w USA i/lub innych krajach.
Szkolenia, certyfikacja, warsztaty, doradztwo
Inżynieria oprogramowania
Zarządzanie konfiguracją (wg iNTCCM)
Metodyki zwinne (agile)
Podstawy zapewnienia jakości
Zarządzanie ryzykiem (wg T. DeMarco)
Certyfikaty IT
Skuteczny dział IT (wg A. Kolawy)
Udoskonalanie procesów IT
Testowanie
Certified Associate in Software Testing
QAI
Certified Software Tester
Certified Manager of Software Testing
wg ISTQB
Podstawy testowania (CTFL)
Zaawansowany – analityk (CTAL TA)
Zaawansowany – kierownik (CTAL TM)
Zaawansowany – techniczny (CTAL TTA)
Ekspert – Improving the Testing Process
Ekspert – Test Manager
Automatyzacja testowania
Projektowanie przypadków testowych
Zarządzanie testowaniem
Testowanie aplikacji mobilnych
CAT – Certified Agile Tester
Skuteczne inspekcje i przeglądy
Inżynieria wymagań
IREB
wg REQB
Podstawy inżynierii wymagań
Pozyskiwanie i konsolidacja wymagań
Poziom podstawowy
Poziom zaawansowany
szkolenia.victo.eu
[email protected]
507 545 747

Podobne dokumenty