Professional Documents
Culture Documents
Zwiksz efektywno
i zrb karier
Autor: Neal Ford, David Bock
ISBN: 978-83-246-2650-2
Tytu oryginau: The Productive Programmer
Format: 168237, stron: 216
Kady profesjonalista marzy o tym, aby w jak najkrtszym czasie zrobi i zarobi
jak najwicej dotyczy to rwnie programistw. Autor niniejszej ksiki, Neal Ford,
wychodzi naprzeciw tym marzeniom i stawia tez, e kluczem do sukcesu jest
mistrzostwo w posugiwaniu si dostpnymi narzdziami w poczeniu z okrelon
metodologi pracy, opart na mdroci staroytnych mylicieli. Jak uzyska t
wyrafinowan efektywno i tworzy wydajne programy, dowiesz si podrcznika,
ktry trzymasz w rkach.
Ksika Mistrz programowania. Zwiksz efektywno i zrb karier zawiera mnstwo
bezcennych porad, dotyczcych korzystania z narzdzi zwikszajcych produktywno,
ktre moesz zastosowa natychmiast! Dowiesz si z niej, jak unika najczstszych
puapek oraz w jaki sposb pozby si czynnikw dekoncentrujcych, zdajc
w kierunku wydajnej i efektywnej pracy. Nauczysz si tworzy kod o jednolitym
poziomie abstrakcji, pisa testy przed napisaniem testowanego kodu, zarzdza cyklem
ycia obiektw i stosowa techniki metaprogramowania. Dziki temu podrcznikowi
zdobdziesz potrzebn wiedz i przyswoisz sobie najlepsz metodologi pracy
a to szybko doprowadzi Ci do mistrzostwa w Twoim zawodzie.
Tworzenie pyty startowej
Rejestrator makr
Makra klawiszowe
Wyszukiwanie zaawansowane
Widoki zakorzenione
Automatyzacja interakcji ze stronami WWW
Mapy danych
Projektowanie oparte na testowaniu
Generowanie metryk kodu
Metaprogramowanie
Spis treci
Przedmowa .................................................................................................................... 7
Wstp .............................................................................................................................9
1. Wprowadzenie ............................................................................................................ 13
Dlaczego ksika o produktywnoci programistw
O czym jest ta ksika
Co dalej
14
15
17
I Mechanika ..............................................................................................19
2. Przyspieszenie ............................................................................................................. 21
Pyta startowa
Akceleratory
Makra
Podsumowanie
22
31
44
46
3. Skupienie ......................................................................................................................47
Pozbd si czynnikw rozpraszajcych
Wyszukiwanie przebija nawigowanie
Wyszukiwanie zaawansowane
Widoki zakorzenione
Ustawianie atrybutw trwaych
Skrty do wszystkich zasobw projektu
Uywaj kilku monitorw
Porzdkowanie miejsca pracy na wirtualnych pulpitach
Podsumowanie
48
50
52
54
56
57
57
57
59
4. Automatyzacja ............................................................................................................ 61
Nie wynajduj ponownie koa
Zapisuj zasoby na dysku
Automatyzacja interakcji ze stronami internetowymi
Kanay RSS
Wykorzystanie Ant do zada niezwizanych z kompilacj
Wykorzystanie narzdzia Rake do codziennych zada
Wykorzystanie Selenium do odwiedzania stron internetowych
Uyj basha do zliczania wyjtkw
Zastp pliki wsadowe interpreterem Windows Power Shell
Uywaj Automatora z Mac OS X do usuwania starych plikw
Oswajanie wiersza polece Subversion
Pisanie rozdzielacza plikw SQL w jzyku Ruby
Argumenty za automatyzacj
Nie strzy jaka
Podsumowanie
63
63
64
64
66
67
68
70
71
72
73
74
75
76
77
5. Kanoniczno ............................................................................................................... 79
Kontrolowanie wersji
Kanoniczny komputer kompilujcy
Porednio
Niedopasowanie falowe
Podsumowanie
80
82
83
90
102
II Praktyka ................................................................................................105
6. Projektowanie oparte na testowaniu ....................................................................... 107
Ewolucja testw
109
118
120
122
124
Spis treci
128
129
129
134
142
143
146
147
150
151
153
156
157
158
160
162
166
172
175
179
182
186
192
Spis treci
ROZDZIA 7.
Analiza statyczna
117
Jeli uywasz jzyka programowania o statycznej kontroli typw (jak Java lub C#), masz
do dyspozycji doskonae narzdzie umoliwiajce znalezienie takich rodzajw bdw,
ktre bardzo trudno wykry za pomoc przegldw kodu i innych standardowych technik.
Mowa o analizie statycznej metodzie wyszukiwania w kodzie okrelonych oznak wystpowania nieprawidowoci.
Narzdzia do analizy statycznej mona podzieli na dwie kategorie: narzdzia przeszukujce
skompilowane artefakty (tzn. pliki klas lub kod bajtowy) i narzdzia analizujce pliki rdowe. W rozdziale tym opisz przykadowe aplikacje kadego z tych rodzajw, a jako przykadowego jzyka uyj Javy, poniewa zestaw dostpnych narzdzi jest w tym przypadku
bardzo bogaty. Naley jednak pamita, e nie jest to technika przeznaczona wycznie do
stosowania w Javie. Z podobnych narzdzi mona korzysta we wszystkich najwaniejszych
jzykach programowania o statycznej kontroli typw.
Uwaam, e to moe by faszywy alarm, poniewa mamy tu do czynienia z definicj anonimowej klasy wewntrznej, wic autor prawdopodobnie zawsze zna typy argumentw.
Mimo wszystko co tu jest nie tak.
Poniej przedstawiono oczywisty bd znaleziony przez FindBugs. Ten fragment kodu znajduje si w pliku IteratorGeneratorTag.java:
if (countAttr != null && countAttr.length() > 0) {
Object countObj = findValue(countAttr);
if (countObj instanceof Integer) {
count = ((Integer)countObj).intValue();
}
else if (countObj instanceof Float) {
count = ((Float)countObj).intValue();
}
else if (countObj instanceof Long) {
count = ((Long)countObj).intValue();
}
else if (countObj instanceof Double) {
count = ((Long)countObj).intValue();
}
119
Przyjrzyj si uwanie ostatniemu wierszowi tego kodu. Znajdujcy si tam bd, nalecy do
kategorii poprawnoci programu FindBugs, zosta okrelony jako niemoliwe rzutowanie.
Ostatni wiersz powyszego listingu zawsze bdzie powodowa wyjtek rzutowania klas.
W istocie nie ma takiej sytuacji, w ktrej uruchomienie tego kodu nie wywoa problemu.
Programista sprawdza, czy obiekt o nazwie countObj jest typu Double, i od razu rzutuje go
na typ Long. Aby dowiedzie si, jak to si stao, wystarczy spojrze na znajdujc si wyej
instrukcj if: to jest bd kopiowania i wklejania. Tego typu bd trudno jest znale metod
przegldania kodu bardzo atwo go przeoczy. Najwyraniej w bazie kodu Struts nie ma
testu jednostkowego pokrywajcego ten wiersz kodu, poniewa w przeciwnym razie natychmiast by go wykryto. Co gorsza, ten bd wystpuje w trzech miejscach kodu Struts: we
wspomnianym pliku IteratorGeneratorTag.java i dwa razy w pliku SubsetIteratorTag.java. Powd?
Nietrudno zgadn. Kod ten zosta skopiowany i wklejony we wszystkich tych trzech miejscach
(FindBugs tego nie wykry, sam zauwayem, e te fragmenty s do siebie podejrzanie podobne).
Dziki moliwoci zautomatyzowania uruchamiania programu FindBugs przez Ant lub Maven
jako czci procesu kompilacji aplikacja ta peni funkcj bardzo taniej polisy ubezpieczeniowej na wypadek wystpienia rozpoznawanych przez ni bdw. Oczywicie nie mona zagwarantowa w ten sposb, e kod bdzie cakowicie wolny od bdw (i nie zwalnia to z obowizku pisania testw jednostkowych), ale program ten moe Ci uratowa przed paroma
nieprzyjemnymi wpadkami. Potrafi on nawet znale takie bdy, ktre trudno wykry w testach
jednostkowych, na przykad problemy z synchronizacj wtkw.
Narzdzia do analizy statycznej stanowi atwy sposb weryfikacji.
PMD mona okreli jako co pomidzy zwykym narzdziem do sprawdzania stylu (takim
jak CheckStyle, ktre weryfikuje, czy kod zosta napisany zgodnie z wytycznymi dotyczcymi
stylu, na przykad czy zostay zastosowane odpowiednie wcicia) a programem FindBugs,
ktry analizuje kod bajtowy. Rodzaje bdw, w wykrywaniu ktrych specjalizuje si PMD,
poka na przykadzie metody napisanej w jzyku Java:
private void insertLineItems(ShoppingCart cart, int orderKey) {
Iterator it = cart.getItemList().iterator();
while (it.hasNext()) {
CartItem ci = (CartItem) it.next();
addLineItem(connection, orderKey, ci.getProduct().getId(),
ci.getQuantity());
}
}
121
122
JavaNCSS
Otwarte narzdzie do mierzenia zoonoci cyklomatycznej (zobacz podrozdzia Zoono cyklomatyczna w rozdziale 6.).
Simian
Komercyjny program sucy do znajdowania powtarzajcych si fragmentw kodu.
Wersj dostpn w Panopticode mona bezpatnie testowa przez 15 dni. Po upywie tego
czasu naley usun program lub za niego zapaci. Planowane jest umoliwienie jego
wymiany na CPD.
Panopticode Aggregator
Narzdzie przedstawiajce raporty wszystkich narzdzi Panopticode w formie tekstowej
i graficznej (w postaci schematw).
Po uruchomieniu Panopticode przez jaki czas przeuwa kod rdowy, a nastpnie wypluwa
raport zawierajcy informacje o jego jakoci. Program ten tworzy take bardzo adne schematy w postaci zaawansowanych obrazw w formacie SVG (wikszo przegldarek potrafi
wywietla tego typu grafik). Schematy te maj dwie zalety. Pierwsz z nich jest to, e stanowi graficzny obraz wartoci okrelonej metryki. Na przykad na rysunku 7.3 zostaa
przedstawiona zoono cyklomatyczna projektu CruiseControl. Zacienione obszary reprezentuj rne przedziay wartoci dla okrelonej metody. Grube biae linie oznaczaj granice
pakietw, a cienkie linie granice klas. Kade pole odpowiada jednej metodzie.
Drug zalet schematw jest ich interaktywno. To nie jest tylko adny obrazek to obrazek interaktywny. Jeli rysunek ten zostanie wywietlony w przegldarce internetowej, kliknicie dowolnego pola spowoduje wywietlenie po prawej stronie metryk odpowiadajcej mu
metody. Schematy te umoliwiaj przeanalizowanie kodu w celu znalezienia metod i klas,
ktre sprawiaj problemy.
Panopticode wywiadcza programicie dwie bardzo istotne przysugi. Po pierwsze, nie trzeba w kadym projekcie cigle konfigurowa tych samych rzeczy. W typowym projekcie konfiguracja programu trwa nie wicej ni 5 minut. Po drugie, program umoliwia tworzenie
schematw, ktre su jako agregatory informacji. W projektach zwinnych agregator informacji (ang. information radiator) to reprezentacja stanu projektu umieszczona w jakim widocznym miejscu (na przykad w pobliu ekspresu do kawy). Dziki niemu czonkowie
zespou nie musz otwiera adnych zacznikw, aby sprawdzi stan projektu, poniewa
mog to zrobi, idc po kaw.
Jeden z rodzajw schematw, jakie mona tworzy za pomoc Panopticode, to ilustracje pokrycia kodu (zobacz podrozdzia Pokrycie kodu w rozdziale 6.). Jeli metryka wyglda jak
wielka czarna plama, nie jest dobrze. Zwikszanie pokrycia kodu zacznij od znalezienia najwikszej moliwej kolorowej drukarki i wydrukuj na niej swj schemat (waciwie za pierwszym razem zwykle wystarcza biao-czarna, poniewa i tak wydruk jest cay czarny). Powie
ten wydruk w widocznym miejscu. Po zakoczeniu jakiego wanego etapu pisania testw
wydrukuj nowy schemat i powie go obok poprzedniego. Jest on bardzo skutecznym motywatorem wszystkich czonkw zespou nikt nie chce by wiadkiem ponownego pogrania si projektu w ciemnoci. Jest to take dobry sposb na pokazanie kierownikowi, e pokrycie kodu testami jest coraz wiksze. Kierownicy lubi takie obrazy z rozmachem, a ten na
dodatek zawiera uyteczne informacje!
123
124
125