2009-07-16 15 views
7

Pracowałem nad stosunkowo dużym systemem na własną rękę, i to po raz pierwszy pracuję nad dużym systemem (zajmującym się ponad 200 kanałami informacji jednocześnie). Wiem, jak używać Junit do testowania każdej metody i testowania warunków brzegowych. Ale nadal, dla testu systemowego, muszę przetestować wszystkie interfejsy i prawdopodobnie również niektóre testy warunków skrajnych (może są inne rzeczy do zrobienia, ale nie wiem, jakie one są). Jestem całkowicie nowy w świecie testowania i proszę podać mi kilka sugestii lub wskazać mi, jak dobry tester kodu wykonałby testowanie systemu.Jak najlepiej przetestować kod Java?

PS: 2 pytania szczegółowe Mam: jak testować funkcje prywatne? jak testować interfejsy i unikać efektów ubocznych?

Odpowiedz

6

Oto dwie strony internetowe, które mogą pomóc:

Pierwszym z nich jest lista open source Java tools. Wiele narzędzi to dodatki do JUnit, które umożliwiają łatwiejsze testowanie lub testowanie na wyższym poziomie integracji.

W zależności od systemu, czasami JUnit będzie działać w testach systemowych, ale struktura testu może być inna.

Co do metod prywatnych, sprawdź this question (i pytanie, do którego się odwołuje).

Nie można testować interfejsów (ponieważ nie ma żadnego zachowania), ale można utworzyć abstrakcyjne podstawowe klasy testowe do testowania implementacji interfejsu zgodnie z jego umową.

EDYCJA: Również, jeśli nie masz jeszcze testów jednostkowych, sprawdź Working Effectivly with Legacy Code; jest to konieczne do testowania kodu, który nie jest dobrze skonfigurowany do testowania.

+0

+1 dla odniesienia do książki Piórka. –

+0

Zamówiłem książkę właśnie teraz. Dzięki. – Lily

3

Mocking to dobry sposób na symulowanie testów systemowych podczas testów jednostkowych; zastępując (wyśmiewając) zasoby, od których zależy inny komponent, można wykonywać testy jednostkowe w środowisku "podobnym do systemu", bez konieczności skonstruowania całego systemu.

Co do konkretnych pytań: ogólnie rzecz biorąc, nie powinieneś używać testów jednostkowych do testowania funkcji prywatnych; jeśli są prywatne, są prywatne dla tej klasy. Jeśli chcesz coś przetestować, przetestuj publiczną metodę, która używa tej prywatnej metody do zrobienia czegoś. Unikanie skutków ubocznych, które mogą być potencjalnie problematyczne, najlepiej wykonać przy użyciu pełnego środowiska testowego (które można łatwo przetrzeć z powrotem do stanu "pierwotnego") lub przy użyciu szyderstwa, jak opisano powyżej. Testowanie interfejsów odbywa się przez testowanie metod interfejsu.

2

Funkcje prywatne będą testowane podczas publicznych funkcji, które je wywołują. Testowanie funkcji publicznej tylko dba o to, aby zwracany wynik był poprawny.

Podczas pracy z API (do innych pakietów lub adresów URL, a nawet do pliku/sieci/bazy danych) powinieneś je kpić. Dobry test jednostkowy powinien przebiegać w ciągu kilku milisekund, nie w sekundach. Kpiny to jedyny sposób na zrobienie tego. Oznacza to, że błędy między pakietami można rozwiązywać znacznie łatwiej niż błędy logiczne na poziomie funkcjonalnym. Dla Java easymock to bardzo dobre szydercze ramy.

3

Po pierwsze, jeśli masz już duży system, który nie ma żadnych testów jednostkowych, a zamierzasz dodać trochę, to pozwól, że udzielę ogólnej porady.

Od utrzymania systemu i pracy z nim, prawdopodobnie już znasz obszary systemu, które wydają się być buggiest, które często się zmieniają i które nie zmieniają się bardzo często. Jeśli tego nie zrobisz, zawsze możesz przejrzeć dzienniki kontroli źródła (używasz kontroli źródła, prawda?), Aby dowiedzieć się, gdzie skupia się większość poprawek i zmian. Skoncentruj swoje wysiłki testowe na tych klasach i metodach. Istnieje ogólna zasada o nazwie 80/20 reguła, która ma zastosowanie do całego szeregu rzeczy, przy czym jest to jedna z nich.

Mówi, że przeciętnie, powinieneś być w stanie pokryć 80 procent spraw wykroczenia, wykonując zaledwie 20% pracy. Oznacza to, że pisząc testy dla zaledwie 20% kodu, możesz prawdopodobnie złapać 80% błędów i regresji. To dlatego, że większość delikatnego kodu, zwykle zmieniony kod i najgorszy obrażający kod stanowi zaledwie 20% bazy kodu. W rzeczywistości może być jeszcze mniej.

Powinieneś użyć junit, aby to zrobić i powinieneś użyć czegoś w stylu JMock lub innej szyderczej biblioteki, aby upewnić się, że testujesz w izolacji. Do testów systemowych/testów integracyjnych, czyli testowania rzeczy podczas ich wspólnej pracy, mogę polecić FitNesse. W przeszłości miałem z tym duże doświadczenie.Umożliwia napisanie testu w przeglądarce internetowej przy użyciu prostych układów tabelarycznych, w których można łatwo zdefiniować swoje dane wejściowe i oczekiwane wyniki. Wszystko, co musisz zrobić, to napisać małą klasę wsparcia zwaną Urządzeniem, która zajmuje się tworzeniem komponentów.

1

Możesz zajrzeć na tę listę: Tools for regression testing/test automation of database centric java application? po listę interesujących narzędzi.

Kiedy wydaje się już używać JUnit obszernie to znaczy, że jesteś już „test zakażonych”, że jest to dobry punkt ...

w moim osobistym doświadczeniem, najtrudniejsze do zarządzania to dane. Chodzi mi o to, że bardzo dokładnie kontroluję dane, z których przeprowadzane są testy.

0

Listy narzędzi podane wcześniej są przydatne. Z własnego doświadczenia to narzędzia, które uważam za użyteczne:

Makiety - Mockito to doskonała implementacja i posiada sprytne techniki, które zapewniają, że musisz tylko kpić z metod, na których Ci zależy.

Testowanie bazy danych - DBunit jest niezbędny do konfigurowania danych testowych i sprawdzania interakcji z bazą danych.

Testy obciążeniowe - Jmeter - gdy zobaczysz, że minęło lekko przylegające gui, jest to bardzo solidne narzędzie do konfigurowania scenariuszy i przeprowadzania testów warunków skrajnych.

Jeśli chodzi o ogólne podejście, zacznij od próby uruchomienia testów dla zwykłych "szczęśliwych ścieżek" za pośrednictwem aplikacji, które mogą stanowić podstawę do testów regresji i testów wydajności. Po zakończeniu można zacząć przeglądać przypadki skrajne i scenariusze błędów.

Mimo że ten poziom testów powinien być dodatkiem do dobrych testów jednostkowych.

Powodzenia!

Powiązane problemy