You are on page 1of 13

Mistrz programowania.

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

Poznaj efektywne narzdzia oraz mistrzowskie techniki pracy!


Jak efektywnie zarzdza cyklem ycia obiektw?
Jak upraszcza trudne zadania przy uyciu technik metaprogramowania?
Jak wykorzysta mdro staroytnych filozofw w programowaniu?

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

Zosta najbardziej poszukiwanym i najlepiej opacanym programist!

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

7. Analiza statyczna ....................................................................................................... 117


Analiza kodu bajtowego
Analiza kodu rdowego
Generowanie metryk kodu za pomoc programu Panopticode
Analiza jzykw dynamicznych

118
120
122
124

8. Dobry obywatel ..........................................................................................................127


amanie zasady hermetyzacji
Konstruktory
Metody statyczne
Zachowania patologiczne

Spis treci

128
129
129
134

9. Nie bdziesz tego potrzebowa ............................................................................... 135


10. Staroytni filozofowie ...............................................................................................141
Arystotelesowskie wasnoci akcydentalne i istotne
Brzytwa Ockhama
Prawo Demeter
Tradycje programistyczne

142
143
146
147

11. Kwestionuj autorytety .............................................................................................. 149


Wcieke mapy
Pynne interfejsy
Antyobiekty

150
151
153

12. Metaprogramowanie ................................................................................................ 155


Java i refleksja
Testowanie Javy za pomoc jzyka Groovy
Pisanie pynnych interfejsw
Dokd zmierza metaprogramowanie

156
157
158
160

13. Metody i SLAP .............................................................................................................161


Wzorzec composed method w praktyce
SLAP

162
166

14. Jzykoznawstwo ........................................................................................................ 171


Jak do tego doszo
Dokd zmierzamy
Piramida Oli

172
175
179

15. Dobr odpowiednich narzdzi ...................................................................................181


Poszukiwanie idealnego edytora tekstu
Wybr waciwego narzdzia
Pozbywanie si niechcianych narzdzi

182
186
192

16. Podsumowanie kontynuujmy dyskusj ............................................................... 195

Dodatki .................................................................................................. 197


A Elementy skadowe ................................................................................................... 199
Skorowidz .................................................................................................................. 207

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.

Analiza kodu bajtowego


Analizatory kodu bajtowego szukaj w kodzie rdowym okrelonych oznak wystpowania
bdw. Wynikaj z tego dwa wnioski: po pierwsze, niektre jzyki programowania zostay
ju na tyle dobrze poznane, e w ich skompilowanym kodzie bajtowym mona wyszukiwa
czsto wystpujce wzorce oznaczajce bdy, a po drugie, narzdzia te nie znajduj wszystkich bdw, lecz tylko takie, ktrych wzorce zostay zdefiniowane. To nie oznacza, e narzdzia te s mao przydatne. Niektre znajdowane przez nie bdy s niezwykle trudne do
wykrycia innymi metodami (tzn. przez wielogodzinne bezproduktywne wlepianie wzroku
w ekran programu diagnostycznego).
Jednym z tego typu narzdzi jest otwarty program FindBugs, bdcy projektem przygotowanym
na Uniwersytecie Maryland. Program ten moe dziaa w kilku trybach: z poziomu wiersza
polece, zadania Ant lub rodowiska graficznego. Graficzny interfejs uytkownika aplikacji
FindBugs przedstawiono na rysunku 7.1.
FindBugs dziaa w kilku obszarach, do ktrych nale:
Poprawno
Program okrela prawdopodobiestwo wystpienia bdu.
Za praktyka
Wykrywa przypadki zamania jednego z podstawowych zalece dotyczcych pisania
kodu (na przykad przesonicia metody equals() i jednoczesnego nieprzesonicia
metody hashCode()).
Podejrzane elementy
Znajduje niejasne fragmenty kodu, przypadki dziwnych zastosowa, anomalie, kod sabej
jakoci.
W celu zilustrowania sposobu dziaania programu musiaem znale ofiar. Pado na otwarty
szkielet sieciowy Struts. Odkryem kilka prawdopodobnie faszywych alarmw z kategorii
zych praktyk, ktre zostay opisane nastpujco: W metodzie equals nie powinno przyjmowa si adnych zaoe dotyczcych typu jej argumentw. Zalecan praktyk definiowania metody equals() w Javie jest sprawdzenie rodowodu przekazywanego do niej obiektu
w celu upewnienia si, e operacja porwnywania ma sens. Oto fragment kodu Struts, ktry
sprawia te problemy. Znajduje si on w pliku ApplicationMap.java:
118

Rozdzia 7. Analiza statyczna

Rysunek 7.1. Graficzny klient aplikacji FindBugs


entries.add(new Map.Entry() {
public boolean equals(Object obj) {
Map.Entry entry = (Map.Entry) obj;
return ((key == null) ? (entry.getKey() == null) :
key.equals(entry.getKey())) && ((value == null) ?
(entry.getValue() == null) :
value.equals(entry.getValue()));
}

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();
}

Analiza kodu bajtowego

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.

Analiza kodu rdowego


Narzdzia do analizy kodu rdowego przeszukuj kod rdowy w celu znalezienia okrelonych oznak wystpowania bdw. W zaprezentowanym przykadzie uyem otwartego
narzdzia Javy o nazwie PMD. Program ten dziaa z poziomu wiersza polece, Ant oraz ma
wtyczki do wszystkich najwaniejszych rodowisk programistycznych. Aplikacja ta znajduje
nastpujce typy nieprawidowoci:
Potencjalne bdy
Na przykad puste bloki trycatch.
Martwy kod
Nieuywane zmienne lokalne, parametry i zmienne prywatne.
Nieoptymalny kod
Marnotrawne uycie acuchw.
Nadmiernie skomplikowane wyraenia
Wielokrotne uycie kodu spowodowane kopiowaniem i wklejaniem.
Duplikaty kodu (obsugiwane przez pomocnicze narzdzie o nazwie CPD)
Wielokrotne uycie kodu spowodowane kopiowaniem i wklejaniem.
120

Rozdzia 7. Analiza statyczna

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());
}
}

PMD poinformuje, e metod t mona zoptymalizowa przez dodanie do pierwszego


parametru (ShoppingCart cart) modyfikatora final. Dziki zastosowaniu si do tej rady
mona zmusi kompilator do wykonania za nas wikszej iloci pracy. Poniewa w Javie
wszystkie obiekty s przekazywane przez warto, nie mona zmiennej cart przypisa referencji do nowego obiektu wewntrz tej metody, a prba zrobienia tego spowoduje wystpienie
bdu. PMD oferuje kilka tego typu wskazwek, ktre pomagaj zoptymalizowa dziaanie
rnych narzdzi (na przykad kompilatora).
Program PMD ma rwnie funkcj wykrywania podejrzanie wygldajcych skopiowanych
i wklejonych fragmentw kodu (jak wczeniej pokazany kod Struts) o nazwie CPD (ang. Cut-Paste
Detector). Interfejs uytkownika CPD zosta zbudowany przy uyciu biblioteki Swing. S w nim
wywietlane stan i problematyczny fragment kodu (rysunek 7.2). Sposb jego dziaania oczywicie rwnie jest zwizany z zasad DRY, ktr opisaem w rozdziale 5.

Rysunek 7.2. Narzdzie Cut and Paste Detector programu PMD


Analiza kodu rdowego

121

Wikszo podobnych narzdzi do analizy kodu rdowego ma API dajce si dostosowa


do indywidualnych potrzeb, w ktrym mona utworzy wasne zestawy regu (takie API ma
zarwno FindBugs, jak i PMD). Wikszo z nich oferuje ponadto tryb interaktywny i, co
jeszcze waniejsze, pozwala uruchamia si jako cz zautomatyzowanych procesw, na
przykad cigej integracji. Uruchamianie tych narzdzi przed kadym wysaniem plikw do
repozytorium jest bardzo prostym sposobem na uniknicie typowych bdw. Kto zada
sobie trud zidentyfikowania bdw, a Ty moesz z tego skorzysta.

Generowanie metryk kodu


za pomoc programu Panopticode
Zagadnienia zwizane z metrykami kodu wykraczaj poza zakres tematyczny tej ksiki, ale
produktywno w ich generowaniu nie. Jeli chodzi o jzyki o statycznej kontroli typw (jak
Java i C#) jestem wielkim zwolennikiem cigego gromadzenia metryk, aby mie pewno, e
problem zostanie rozwizany moliwie jak najszybciej. Oznacza to, e zwykle mam cay zestaw narzdzi do mierzenia jakoci kodu (wcznie z programami FindBugs i PMD/CPD),
ktre uruchamiam w ramach procesu cigej integracji.
Konfigurowanie tych wszystkich programw w kadym projekcie jest kopotliwe. Podobnie
jak w przypadku programu Buildix (zobacz podrozdzia Nie wynajduj ponownie koa w rozdziale 4.) chciabym mie wstpnie skonfigurowan ca infrastruktur. W tym wanie najlepszy jest Panopticode.
Podobny problem mia kiedy jeden z moich kolegw (Julias Shaw), ale on zamiast narzeka
jak ja, wzi si do roboty. Panopticode1 to program typu open source zawierajcy mnstwo
wstpnie skonfigurowanych narzdzi do generowania metryk kodu. Jego jdro stanowi plik
kompilacji Ant, zawierajcy wiele projektw open source i ich wstpnie skonfigurowanych
plikw JAR. Wystarczy poda ciek do swoich plikw rdowych, ciek do bibliotek
(innymi sowy, ciek do wszystkich plikw JAR potrzebnych do skompilowania projektu)
oraz katalog testw, a nastpnie uruchomi plik kompilacyjny Panopticode. Program zajmie
si reszt.
Emma
Narzdzie typu open source do mierzenia pokrycia kodu testami (zobacz podrozdzia
Pokrycie kodu w rozdziale 6.). Zmieniajc jeden wiersz w pliku kompilacji Panopticode, mona z tego narzdzia przeczy si na narzdzie Cobertura (kolejny program open
source do mierzenia pokrycia kodu rdowego Javy).
CheckStyle
Otwarty weryfikator stylu kodu. Mona utworzy dostosowane do wasnych potrzeb
zestawy regu za pomoc jednego wpisu w pliku kompilacji Panopticode.
JDepend
Otwarte narzdzie zbierajce metryki numeryczne na poziomie pakietw.

Do pobrania pod adresem http://www.panopticode.org.

122

Rozdzia 7. Analiza statyczna

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!

Generowanie metryk kodu za pomoc programu Panopticode

123

Rysunek 7.3. Mapa obrazujca zoono cyklomatyczn projektu CruiseControl

Analiza jzykw dynamicznych


Mimo e jzyki dynamiczne s uwaane za jedne z najefektywniejszych w wielu dziedzinach
programowania, brakuje dla nich narzdzi analitycznych, ktrych istnieje mnstwo dla jzykw o statycznej kontroli typw. Tworzenie narzdzi do analizy kodu rdowego jzykw
dynamicznych jest trudniejsze, poniewa nie mona oprze si na cechach systemu typw.
W przypadku jzykw dynamicznych bada si gwnie zoono cyklomatyczn (ktr
mona analizowa w kadym jzyku o blokowej strukturze kodu) i pokrycie kodu testami.
Przykadowym narzdziem do sprawdzania pokrycia kodu w jzyku Ruby jest rcov. W Ruby
on Rails narzdzie to jest nawet dostpne standardowo (przykadowy raport rcov przedstawiono na rysunku 15.1). Do mierzenia zoonoci cyklomatycznej mona uy programu
Saikuro2.

Do pobrania pod adresem http://saikuro.rubyforge.org.

124

Rozdzia 7. Analiza statyczna

Z powodu niedostpnoci typowych statycznych narzdzi analitycznych programici jzyka


Ruby stali si sprytniejsi. W wyniku tej sytuacji powstao kilka ciekawych propozycji mierzenia kodu nietypowymi metodami. Jedna z nich to flog3. Program ten analizuje przypisania,
rozgazienia oraz wywoania, ktrym nadaje wag. Przypisuje pewn warto kademu
wierszowi metody i przedstawia wyniki w nastpujcej postaci (jest to wynik zwrcony dla
przykadu SqlSplitter z podrozdziau Refaktoryzacja programu SqlSplitter w celu umoliwienia testowania rozdziau 15.):
SqlSplitter#generate_sql_chunks: (32.4)
20.8: assignment
7.0: branch
3.4: downcase
3.0: +
2.9: ==
2.8: create_output_file_from_number
2.8: close
2.0: lit_fixnum
1.7: %
1.4: puts
1.4: lines_o_sql
1.2: each
1.2: make_a_place_for_output_files
SqlSplitter#create_output_file_from_number: (11.2)
4.8: +
3.0: |
1.8: to_s
1.2: assignment
1.2: new
0.4: lit_fixnum

Z tego raportu wynika, e najbardziej zoon metod w klasie jest generate_sql_chunks,


ktrej warto wynosi 32.4 (suma wartoci znajdujcych si pod ni). Najwysza zoono
w tej metodzie jest zwizana z przypisaniami. Aby wic j uproci, naleaoby zacz od
przyjrzenia si instrukcjom przypisania, ktrych jest tam cae mnstwo.
Nietypowym przypadkiem jest jzyk Groovy, poniewa sam w sobie jest dynamiczny, ale
wytwarza kod bajtowy w jzyku Java. Oznacza to, e mona uywa standardowych narzdzi do analizy kodu Java, ale pod warunkiem e bd one uruchamiane na kodzie bajtowym.
Wyniki mog jednak nie by satysfakcjonujce. Groovy do wykonania niektrych swoich
sztuczek potrzebuje utworzenia wielu klas porednich i osonowych, dlatego w raporcie zostanie wykazanych wiele klas, ktrych w rzeczywistoci nie utworzye. Niektrzy programici zajmujcy si tworzeniem narzdzi do analizy kodu napisanego w Javie zaczli ju bra
pod uwag jzyk Groovy (przykadowym narzdziem, ktre moe by stosowane do analizy
kodu w tym jzyku, jest Cobertura), ale ich prace s dopiero w pocztkowej fazie.

Do pobrania pod adresem http://ruby.sadi.st/Flog.html.

Analiza jzykw dynamicznych

125

You might also like