Забележка към лекцията
В презентацията не беше покрита достатъчно пълно темата за quality tools. Докато споменахме за Maven, който по време на build може да изпълнява тестове (unit, функционални), все пак не застъпихме въпроса с избора на тестовия framework. Като малко е спорно дали той е tool-а, или по-скоро той е framework-а, а например една негова интеграция с IDE-то е tool-ът ви. Както и да е. Специално в света на Java, за unit тестове, сигурно сте чували за JUnit и TestNG.
Добър помощник са и mocking инструментите, като EasyMock и Mockito.
За тестване на UI можем да споменем Selenium фамилията от продукти, която позволява да си записвате някакъв user interaction с web application-а. Като често изборът ви зависи от конкретната технология. Ще дадем няколко примера. Трябва да внимавате с избора на Selenium продукт, защото например при Rails базиран UI се оказва, че разпознаването на графичните контроли е по-особено, и затова има създаден Selenium Rails проект (че дори от версия на версия, Rails UI-ът не е много съвместим). Аналогично, мониторирането на Rails application-и е малко по-различно от това на JavaEE application-и (в Rails понятието за сесия е по-различно от това в Java EE - javax.servlet.http.HttpSession, и за това JavaEE profilers могат да не работят изобщо срещу Rails application-и, дори когато те са подкарани в servlet контейнер (примерно Tomcat) и пакетирани във WAR. На мен това ми се случи с LambdaProbe tool-a. Влизах в application-а 100 пъти, а тулчето показваше, че има 0 сесии). Хубав избор за Rails мониториране е NewRelic.
Ако пък искате да тествате Eclipse plug-in, може да ползвате SWT bot, а наскоро разбрах и за проекта Jubula. Когато трябва да разработите UI модул, често е добре да можете предварително да си съставите някаква скица, за да имате представа как ще изглеждат графичните компоненти. Добър и интересен инструмент за това е WindowBuilder (разработен е от купена от Google програма, след това става open source).
За load тестове една възможност, която споменахме на лекцията, е LoadRunner, но той струва пари.
Друг раздел quality tool-ове са тези, свързани със security-то. Т.е. инструменти, които дали чрез статични проверки на кода, или чрез анализ на execution flows дървото, засичат някои възможности за проблеми (например code injection, path traversal или XSS уязвимости). Можем да споменем например FindBugs, макар че сигурно има още десетки - като например платения tool Fortify.
Друга секция са и code coverage tool-ове като EMMA.
Наскоро попаднах на Java Modeling Language - език за описание на спецификация чрез анотации или коментари в кода. Не съм го ползвал, не съм чувал и разни познати да го ползват, но изглежда интересно. Има и някаква tool интеграция.
За финал, ще ви споделя какво каза Reza Rahman на миналогодишната java2days конференция на тема "Java EE 6 testing", ето неговите препоръки (повечето инструменти са базирани на JUnit):
- Servlet 3.0 - HttpUnit, HtmlUnit, Cactus, Selenium, ServletUnit
- JSF 2.0 - JSFUnit
- CDI, EJB 3.1 - Arquillian, EJB3Unit за по-прости сценарии
- JPA 2.0 - някоя embedded база (JavaDB, Derby, HSQL), DBUnit
- JAX-WS, JAX-RS - soapUI
Всеки случай, добре е да се провери какво предлага cloud provider-ът по отношение на tool-овете.
Поздрави,
Крум.