[ Pobierz całość w formacie PDF ]
.Dobrzy programici pisz programy, majc od pocztku na uwadze testy pokrycia.Odpowiedni projekt i planowanie moe pomóc wydoby wikszo informacji znarzdzi omawianych w tym podrozdziale.Istnieje kilka narzdzi, które pomagaj pozna stopie pokrycia kodu badanegoprogramu przez przeprowadzane testy.Jedno z nich krótko tutaj omówimy.Wikszo narzdzi moe pomóc tylko przy testach pokrycia pierwszego stopnia,czyli testach pokrycia instrukcji.Dlatego wanie trzeba dba o naleytepisanie kodu programu i dobór odpowiednich danych testowych.Narzdzia dla testów pokrycia pracuj na ogó na zasadzie wzbogacaniatestowanego programu.Dodaj one swój wasny dodatkowy kod przy kompilacjiprogramu.Kod ten suy do gromadzenia danych o tym, która instrukcja programujest w danej chwili wykonywana i jak czsto odbywa si ten proces.Poniewanarzdzia te dziaaj na poziomie instrukcji, dobrym pomysem moe by unikanietakich konstrukcji jzyka C, które porednio lub bezporednio wczaj kilkainstrukcji do jednego wiersza kodu.Jako przykad mona poda instrukcjwarunkow if albo instrukcj ptli zapisane w jednym wierszu.Innym, rzadziejspotykanym przykadem moe by doczanie makropolece preprocesora, którezwieraj jaki kod oraz potrójne instrukcje warunkowe.A oto przykad:/* Nieprawidowy styl kodowania dla pokrycia instrukcji */# define SOME_TEST(X) { if(X>0) X--; else X++ }z = a > b? func(a): func(b);for(i=0; i title_id == 0)###### return DVD_ERR_NOT_FOUND;85 if(title_id != title_record_to_compete -> title_id)###### return DVD_ERR_BAD_MEMBER_TABLE;Mona tutaj zaobserwowa, e pomimo przetestowaniu przypadku braku tytuu pyty(3 z 88 wywoa) nie przetestowano przypadku, gdy jako argument podany bypusty wskanik.Mamy wic dziur w naszych testach, poniewa nie ma pewnoci,czy funkcja radzi sobie ze wszystkimi wartociami argumentów.Co gorsza, nieprzetestowano take przypadku, gdy tytu jest szukany po jego usuniciu, comoe powodowa problemy, jeli uyjemy tego programu testujcego dozmodyfikowanej aplikacji.Mona zada od gcov podawania bardziej szczegóowych danych w pliku zpodsumowaniem suy do tego znacznik -f.Wówczas kada funkcja bdzie miestatystyk pokrycia:$ gcov -f flatfile.c87.50% of 16 source lines executed in function open_db_table60.00% of 15 source lines executed in function dvd_open_db100.00% of 9 source lines executed in function dvd_close_db66.67% of 6 source lines executed in function file_set83.33% of 6 source lines executed in function file_get75.00% of 4 source lines executed in function dvd_member_set83.33% of 12 source lines executed in function dvd_member_get87.50% of 16 source lines executed in function dvd_member_create100.00% of 4 source lines executed in function dvd_member_delete100.00% of 12 source lines executed in function dvd_member_get_id_from_number95.83% of 24 source lines executed in function dvd_member_search75.00% of 4 source lines executed in function dvd_title_set75.00% of 12 source lines executed in function dvd_title_get90.00% of 10 source lines executed in function dvd_title_create.$Informacj o pokryciu rozgazie mona uzyska, podajc znacznik -b wwywoaniu gcov:$ gcov -b flatfile.c44.42% of 412 source lines executed in file flatfile.c43.60% of 250 branches executed in file flatfile.c32.80% of 250 branches taken at least once in file flatfile.c52.50% of 120 calls executed in file flatfile.cCreating flatfile.c.gcov.$Jeeli teraz sprawdzimy zawarto pliku wyjciowego programu gcov, to zobaczymydodatkow informacj o rozgazieniach wynikajcych z instrukcji warunkowych.Dla kadej instrukcji, która ma wicej ni jedno moliwe wyjcie, jest terazpodawane procentowe obcienie tych wyj.Do instrukcji zawierajcychrozgazienia nale if, case, for, while itp., jak równie wywoania funkcji(bowiem z funkcji moe nie nastpi powrót).Kilka przykadów wyjani lepiej tozagadnienie:25 if(file_records == 0) {branch 0 taken = 84%/* Wanie utworzylimy plik.Poniewa jako identyfikatorauylimy zera jako zabezpieczenia, to musimy zarezerwowapierwszy wpis w pliku, a wic w tym miejscudodajemy pusty wpis */4 file_records = 1;4 }Mamy tu prost instrukcje if.Podany kod okrela warto warunku i nastpnierozgazia si wokó bloku kodu.Widzimy, e gcov zarejestrowa udzia tegorozgazienia (pomijanie if) równy 84%
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL