Testavimo įrankiai Mindaugas Škimelis
Visi nori testuoti... Greitai Pigiai Efektyviai Arba kitaip tariant: Gauti geresnės kokybės programinę įrangą už tapačią kainą
Kaip testuojama? Nepertraukiamas testavimas Automatizuotas testavimas Kodas taisomas; Pridedami nauji funkcionalumai; Ši praktika paskutiniu metu labai populiarėja; Extreme programming Automatizuotas testavimas Testuojamas konkretus kodas; Vykdomas testo kodas; Naudojami įvedimo duomenys; Laukiamas išėjimas Test-Driven Development Testavimas, testinių atvejų formuluvimas projekto vystymo metu.
Unit testavimas Nedideli testavimo atvejai nedideliems kodo gabalams. OO - puikiai tinkanti paradigma, nes turi daug smulkių dalių (units) vienetų testavimui. Didelis testų kiekis gali būt lengvai automatizuojamas.
Unit testavimas (2) Lūkesčiai: Modelio reikalavimai atsispindi vienetų testuose. Naujos savybės yra išvystytos taip, kaip tikimasi. Senos savybės veikia taip, kaip tikimasi.
JUnit & NUnit Java & .NET JUnit – vienetų testavimo freimworkas, Java platformai. Testai yra organizuojami hierarchiškai, dažniausia laikomasi tos pačios paketų struktūros. Testiniai atvejai agreguojami į testinius rinkinius; Vienas rinkinys per paketą; Vienas testinis atvejis per klasę; Metodas su metodu;
JUnit: Pavyzdys public class Math { static public int add(int a, int b) { return a + b; } static public int multiply ( int a, int b) { return a * b; } }
JUnit: Pavyzdys (2) public class TestMath extends TestCase { protected void setUp() { // put common setup code in here } protected void tearDown() { // put common cleanup code in here } public void testAdd() { int num1 = 3; int num2 = 2; int total = 5; int sum = 0; sum = Math.add(num1, num2); assertEquals(sum, total); } public void testMulitply() { int num1 = 3; int num2 = 7; int total = 21; int sum = 0; sum = Math.multiply(num1, num2); assertEquals("Problem with multiply", sum, total); } }
Debugeriai: Konceptai Breakpoint’ai Žingsninis vykdymas Stebėjimas Kintamųjų reikšmių keitimas Kodo keitimas
Loginimas Log4J Be kodo keitimo galima konfigūruoti: Loginimą į skirtingas vietas; Tik tam tikro lygio pranešimus (debug,info,error,..); Klasėms nustatinėti skirtingus lygius; Formatuoti išvedimą ir tt. class MyClass { private Logger LOG = Logger.getLogger(MyClass.class); public void method1() { ... x = algorithm.calculateResult(); LOG.debug(“x = “ + String.valueOf(x)); }
Profaileriai (Našumas) Profaileriai padeda surasti kodo dalis, kurios suvartoja netinkamus procesoriaus laiko kiekius. Šios surasto kodo dalys gali vaidinti “butelio kakliuko” vaidmenį analizuojamoje programinėje įrangoje. Profaileris gali padėti: įvertinti laiką, kurį “suvartojo” vienas ar kitas metodas; optimizuoti labiausiai apkrautas vietas.
Profaileriai (2) CPU laikas gali būti vartojimas: Netinkami algoritmai(burbulas) Nereikalingas objektų kūrimas Nereikalinga sinchronizacija tarp gijų ir tt. “Butelio kakliukai” turi savybę: Išlįsti ten, kur mažiausiai tikimasi. Tarkime, įtarimą kelia tam tikri algoritmai, o nepastebima, kad kažkur programoje įvykdoma 100000 nereikalingų kreipinių į String.toLowerCase()
Profaileriai (3)
Apkrova (Load Test) Apkrovos testavimo apkrauna testuojamą sistemą simuliuojamais vartotojais tam tikrais kiekiais arba kol sistema lūžta Tuo pat metu matuoja rezultatus: Atsako trukmę, neaptarnautų kvietimų procentą, klaidų kiekius.
Apkrova - JMeter
Apkrova (JMeter) JMeter palaikomi testų planai: Web DB FTP LDAP Web Servisai JMS Monitoring tests
Populiarūs nemokami įrankiai HttpUnit (Web testing) jMock (Mock Objects) Cactus (Server side, Servlet,EJB) FitNesse (Acceptance testing) JIRA,Eventum (Defects tracking) Profiler4j ir kt.. http://java-source.net/open-source/testing-tools
.NET įrankiai (statinė analizė) Reflector Complexity analyzer CCMetrics CRPlugin FxCop Source Monitor http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
Java įrankiai (statinė analizė) Bandera CheckStyle Classycle FindBugs Jlint PMD Soot http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
.NET įrankiai (Unit testing) csUnit MbUnit TestDriven.NET QuickUnit.net xUnit.net Nmate NUnitAsp http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
Java įrankiai (Unit testing) thisTest JTest JWalk JUnitEE JBehave beanSpec http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
Kiti įrankiai (komerciniai)
Kiti įrankiai (komerciniai)
Kiti įrankiai (komerciniai)
Testavimo įrankių pasirinkimo kriterijai Įvertinti esamą palaikymo infrastruktūrą Objektų atpažinamumas tarp skirtingų programavimo kalbų Scenarijų kūrimo ir palaikymo proceso lengvumas Scenarijų vykdymas Įvairių testavimo būdų realizavimo lengvumas Vartotojo įgūdžių tinkamumas
Testavimo priemonių nauda Lengvesnis testavimo procesas Testavimo trukmės mažinimas Mažesnės resursų sąnaudos Greičiau pasiekiama galutinio produkto fazė <$ || <€ gamybai ir palaikymui
Testuokite ir prisiminkite, kad...
Ačiū už dėmesį...