Wykład 5
Transkrypt
Wykład 5
Informatyzacja przedsiębiorstw WYKŁAD dr inż. Piotr Zabawa IBM/Rational Certified Consultant [email protected] wersja 0.1.0 07.10.2010 Wykład 5 Techniki pracy w środowisku Jboss Drools Wstęp Podobnie jak w każdej pracy o charakterze informatycznym niemal nigdy nie udaje się opracować gotowego rozwiązania od razu bezbłędnie. Dlatego Drools oferuje szereg rozwiązań ułatwiających testowanie, poszukiwanie błędów i ich naprawianie. Należy wziąć dodatkowo pod uwagę fakt, że język reguł biznesowych jest językiem deklaratywnym mającym swoją specyfikę. Poprawianie błędów jest szczególnie trudne. Zagadnienia • • • • • • Testy jednostkowe z mockowaniem Testy integracyjne Testy akceptacyjne Pisanie scenariuszy testowych Wykonywanie scenariuszy testowych Statyczna analiza reguł Zagadnienia • Specyficzne techniki – Rete Tree View – Debug event listener – Komentowanie fragmentów warunków reguł – Wykorzystanie System.out w konsekwencjach reguł – Podgląd kodu źródłowego klasy generowanej dla konsekwencji reguły – Wstrzykiwanie System.out do warunków reguł z wykorzystaniem mvel Testy jednostkowe W testach jednostkowych chodzi o przetestowanie reguły w oderwaniu od całego otoczenia – testujemy poprawność samej reguły a nie np. usług, z których ona korzysta. Aby móc zastosować takie podejście należy skorzystać z bibliotek mockujących, np. jMock. Biblioteka ta umożliwia wykonanie klasy, która zastępuje usługę rejestrując wywołania jej metod (nazwa metody, ilość wywołań, czas wywołania, kolejność wywołań). Testy jednostkowe reguł Testem jednostkowym powinien zostać pokryty każdy warunek reguły. Jeśli warunek nie jest spełniony, to test powinien nie przejść (fail). Takie podejście umożliwia dokonywanie refaktoryzacji reguł z ograniczonym ryzykiem naruszenia dotychczasowej ich funkcjonalności. Test powinien uwzględniać brak dostępnego faktu, na którym działa reguła, dostępność jednego faktu, wielu faktów w sesji. Testy jednostkowe workflow Testy jednostkowe dla procesów powinny być podzielone na dwie części: • Testy definicji procesu (w bazie wiedzy tylko zasób *.rf) • Testy reguł Test definicji procesu powinien testować każdy węzeł procesu w celu sprawdzenia prawidłowości rozpływu sterowania. Szczególny nacisk należy położyć na sprawdzenie każdej gałęzi procesu oraz na sprawdzanie warunków w poszczególnych węzłach. Testy integracyjne reguł/procesów Są to testy wyższego poziomu niż jednostkowe. Testują one całą bazę wiedzy i sprawdzają współpracę pomiędzy regułami. W odróżnieniu od testów jednostkowych nie stosujemy mockowania, bo chodzi nam właśnie o działanie na poprawnie zainicjowanych obiektach. W tym rodzaju testów w zastosowaniu do workflow nie testujemy osobno definicji procesu a osobno reguł lecz oba elementy łącznie. Testy akceptacyjne reguł Są to systemowe testy black-box’owe wykonywane przed przekazaniem systemu klientowi. Ich zbiór może być wyspecyfikowany jako jeden z elementów wymagań (testujemy zgodność działania systemu właśnie z wymaganiami). Specyfikacja takiego testu systemowego obejmuje: • Określenie wymaganych dla testu wpisów konfiguracyjnych systemu • Określenie wymaganych dla testu danych wejściowych • Określenie spodziewanych danych wyjściowych Testy akceptacyjne reguł Istnieje szereg narzędzi ułatwiających implementowanie testów akceptacyjnych. Jednym z nich jest Framework for Integrated Test (FIT). Przechowuje on specyfikację testów w dokumentach typu doc lub rtf. Podejście to zastosowano w Drools i jest ono dostępne przez Guvnor, a więc są dedykowane do użytku dla analityków biznesowych. Testy akceptacyjne reguł Kroki w Guvnor: • Załadowanie pakietu reguł biznesowych • Import modelu oraz brakujących pakietów/bibliotek • Utworzenie scenariusza testowego (sekcje GIVEN i EXPECT dla każdego testu oraz przycisk More… dla kolejnych testów) – do dyspozycji informacja o polach i ich typach wydobyta z testowanej klasy • Wykonanie scenariusza testowego (przycisk Run scenario) – pokazuje się pasek sukcesu, podsumowanie, log audytu • Wykonanie wszystkich scenariuszy Testy akceptacyjne reguł Możliwość wykonania tych testów z zewnątrz poprzez ich URL. Może to mieć duże znaczenie w przypadku zastosowania serwera automatycznych buildów (continuous integration server). Statyczna analiza reguł Pisanie testów jest czynnością niezwykle żmudną. Dlatego lepiej jest korzystać z możliwości automatyzowania tego procesu. Jedną z takich możliwości oferuje właśnie analiza statyczna reguł. Jednym z elementów Drools jest drools-verifier, który używa własnych reguł do analizowania reguł użytkownika. Jest zintegrowany z Guvnor. Statyczna analiza reguł Kroki w Guvnor: • Wskazanie pakietu reguł • Uruchomienie analizy • Ręczna analiza wyników (błędy, ostrzeżenia, uwagi) Pakiet ten jest nowy w Drools i wewnętrzne reguły analizy będą stopniowo uzupełniane. Specyficzne techniki Wymieniono je wcześniej. Tutaj zostaną poruszone niektóre z nich. Specyficzne techniki Wymieniono je wcześniej. Tutaj zostaną poruszone niektóre z nich. Event listeners Inaczej zwane callback handlers mają wiele zastosowań: • Audyty • Debugowanie • Wyprowadzanie funkcjonalności poza reguły(np. metoda afterActivationFired w AgendaEventListener do tworzenia Messages i Report) Event listeners W Drools są następujące event listenery: 1. org.drools.event.rule.WorkingMemoryEventListener – nasłuch zdarzeń w sesji z bazą więdzy (insert/update/retract faktu) 2. org. drools.event.rule.AgendaEventListener – nasłuch zdarzeń w agendzie sesji z bazą wiedzy (create/cancel activation, before/after activation fired, agenda group pop/push) Event listeners 3. org.drools.event.knowledgebase.KnowledgeBaseEventLis tener – nasłuch zdarzeń w bazie wiedzy (dodawanie/usuwanie pakietów, reguł, funkcji, lock/unlock) 4. org.drools.event.process.ProcessEventListener – nasłuchiwanie zdarzeń instancji procesu (before/after process started/completed,…) Jest wiele wersji tych listenerów, m.in. Wypisująca do konsoli, przeznaczona do dziedziczenia. Debugowanie reguł Drools Eclipse plugin oferuje możliwość debugowania konsekwencji reguł w pliku reguł. Możliwości takie jak w debugingu Java i w Guvnor (widoki Audit, Working Memory, Agenda, Global Data, Process Instance). Możliwość logowania do pliku w celu analizy off-line zdarzeń (tylko zdarzeń?). Debugowanie procesu Drools Eclipse plugin oferuje dodatkowe widoki do debugowania procesu: • Process Instances (pokazuje wszystkie instancje procesów) • Process Instance (pokazuje grafową reprezentację procesu i aktualny węzeł) Aby aktywować te widoki należy ustawić breakpoint w metodzie beforeNodeTriggered klasy ProcessEventListener (wejście przez proces) albo w konsekwencji reguły (wejście przez regułę). Analiza generowanego kodu Kompilator Drools w czasie kompilacji pliku reguł generuje wiele klas Java. Klasy te są zapisywane w RAM, jednak można je przekierować do pliku: • -Ddrools.dump.dir=„target/dumpDir” • KnowledgeBuilderConfiguration configuration = KnowledgeBuilderFactory. newKnowledgeBuilderConfiguration(); configuration.setOption(DumpDirOption. get(new File(„target/dumpDir”))); Można przeprowadzić szczegółową analizę kodu i zobaczyć jaki kod jest naprawdę wykonywany. Wykorzystanie możliwości mval Można tymczasowo tylko w celu debugowania wstrzyknąć do warunków reguły dodatkowy kod, np. dialect „mvel” when Account ( eval(System.out.println(„matched”); balance>1))