Testování, ladění a dokumentace programů doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes
[email protected]
Obsah z z z z z
Strategie ladění programů Testování správnosti programů Testování výkonnosti Generování dokumentace Internacionalizace (lokalizace)
PTE - Testování, ladění, dokumentace
2
1
Strategie ladění programů z
„Hledání chyby je proces ověřování mnoha věcí, v jejichž platnost věříme, až do nalezení toho, co není pravda.“ z
z
z
z
V určitém bodě programu má proměnná x hodnotu v. V konkrétním příkazu if-then-else se provede právě větev else. Funkce f se volá se správnými parametry.
Vše je třeba ověřit – jak? PTE - Testování, ladění, dokumentace
3
Strategie ladění programů z
„Binární vyhledávání“ z
Omezujeme úsek programu, ve kterém se hledaná chyba může vyskytovat
z
Příklad: Hledáme místo, kde se nastavila nesprávná hodnota nějaké proměnné.
z
Lze použít i na některé problémy při překladu.
PTE - Testování, ladění, dokumentace
4
2
Strategie ladění programů z
Ladicí výpisy z z
z
pomocí printf/cout/Systém.out.write – nevhodné odstranění z odladěné verze – komentáře, podmíněný překlad ???
Logovací nástroje (např. log4j) z z
možnost konfigurace (úroveň výpisu, kam, …) požadavek na nízkou režii – ponechává se v hotovém programu
PTE - Testování, ladění, dokumentace
5
Strategie ladění programů z
Sledování stopy programu (trace) z z
z
Výpis posloupnosti zpracovaných řádků Výpis volání podprogramů
Analýza obsahu paměti po chybě z z z
Uložení obrazu paměti do souboru (core v Unixu) Statická analýza bodu, kde došlo k chybě Propojení se zdrojovým programem PTE - Testování, ladění, dokumentace
6
3
Strategie ladění programů Využití ladicího programu
z z z
1. 2. 3. 4.
Součást většiny integrovaných výv. prostředí Na zdrojové nebo instrukční úrovni Definice bodů zastavení (breakpoint) Spuštění programu Kontrola stavu v bodech zastavení Krokování od bodu zastavení (step into, step over) PTE - Testování, ladění, dokumentace
7
Testování programů z z
Cíl: Snížení rizika výskytu chyby Nutný je pesimismus! z
z
Opakované testování (re-testing) z
z
výskyt chyb je třeba očekávat
kontrola, zda jsme opravili chybu
Regresní testování z
kontrola, zda jsme opravou nevnesli nové chyby PTE - Testování, ladění, dokumentace
8
4
Testování programů z
Verifikace z
z
z
Ověření interní konzistence produktu (zda produkt odpovídá návrhu, návrh analýze, analýza požadavkům) Formální verifikace – často obtížná
Validace z
Ověření (externím nezávislým zdrojem), zda celé řešení splňuje očekávání uživatelů nebo klientů PTE - Testování, ladění, dokumentace
9
Úrovně testování z
Alfa z
Provádí se před zveřejněním produktu z z
z
Beta z
z
Vývojáři „Výstupní kontrola“
Poskytnutí produktu vybrané skupině externích uživatelů, získání zpětné vazby
Gama z
Kompletní dílo, které zcela neprošlo interní kontrolou kvality PTE - Testování, ladění, dokumentace
10
5
Co je to chyba? z
Jakýkoliv problém, snižující kvalitu programu. z z z z z
Funkcionalita Užitná hodnota Spolehlivost Výkon Požadavky uživatele
PTE - Testování, ladění, dokumentace
11
Sledování chyb (bug tracking) z
Výskyt chyby je třeba zaznamenat tak, aby se chyba dala reprodukovat z z z z
z
Jaké kroky k výskytu chyby vedly? Jaké bylo očekávané chování? Jaké bylo skutečné chování? (Jaké jsou důsledky a závažnost chyby?)
Nástroje pro sledování chyb z
BugZilla – http://www.bugzilla.org/ PTE - Testování, ladění, dokumentace
12
6
Metody testování z
„Ruční“ testování z z z
z
náročné není opakovatelné snadno se přehlédnou chyby
Systematické testování z z z
jednotkové testy (unit tests) – třídy, metody integrační testy – logické moduly, celé aplikace generování testů - zajištění maximálního pokrytí zdrojového textu PTE - Testování, ladění, dokumentace
13
Testování programů z
JUnit z z z
prostředí Java, varianty i pro jiné jazyky (NUnit, CPPUnit, …) programátorské rozhraní pro tvorbu testů nástroje pro automatické provádění testů z z
z z
grafické rozhraní příkazový řádek, akce pro Ant
využití reflexe pro vyhledání testů uvnitř tříd rozšíření pro testování webových aplikací, servletů, databázových aplikací, ... PTE - Testování, ladění, dokumentace
14
7
JUnit z z
z z z
z z z
import junit.framework.TestCase; public class TestXYZ extends TestCase { } void setUp() {…} void tearDown() {…} void testX() {…}
inicializace finalizace krok testu
assertTrue(podmínka), assertFalse(…) assertEquals(x,y), assertNotNull(x) … PTE - Testování, ladění, dokumentace
15
Příklad package cviceni3; import junit.framework.TestCase; public class protected protected protected
TestZlomek extends TestCase { Zlomek z1 = new Zlomek(1, 3); Zlomek z2 = new Zlomek(2, 6); Zlomek z3 = new Zlomek(2, 3);
protected void setUp() { } protected void tearDown() { } public void testEquals() { assertEquals(z1, z1); assertEquals(z1, z2); } public void testAdd() { Zlomek result = Zlomek.plus(z1, z2); assertEquals(result, z3); } } PTE - Testování, ladění, dokumentace
16
8
Vývoj řízený testy (TDD) Napíšeme testy Napíšeme program Spustíme automatizované testování Provedeme refaktorizaci Opakujeme až do odstranění všech chyb
1. 2. 3. 4. 5.
Hlavním cílem je dosáhnout toho, aby všechny testy prošly
z z
mohou ale být chybné testy! PTE - Testování, ladění, dokumentace
17
Refaktorizace z
Transformace zdrojového textu, která vede ke zlepšení jeho čitelnosti nebo struktury, avšak bez změny významu nebo chování z z
z z
z
Přejmenování proměnné. Vytvoření podprogramu ze zadaného úseku programu. Nahrazení posloupnosti příkazů if polymorfismem. …
Důležitá součást metodiky TDD, XP PTE - Testování, ladění, dokumentace
18
9
Testování výkonnosti z z
Sledování počtu volání určitých funkcí Sledování času stráveného výpočtem různých částí programu z
z
podklad pro optimalizaci změnou algoritmu
Nástroje: profiler z z
gprof součást vývojových prostředí PTE - Testování, ladění, dokumentace
19
Generování dokumentace z
Oddělená dokumentace z z
z
problémy s aktualizací nutnost uvádět kompletní specifikace
Dokumentace jako součást zdrojového textu z z z
snadnější údržba (např. včetně verzování) literární programování (D. Knuth) dokumentační značky - javadoc PTE - Testování, ladění, dokumentace
20
10
Program javadoc z
Dokumentace ve speciálních poznámkách /** * Dokumentační poznámka */
z
Dokumentační značky + HTML @author
Joe @param x Popis parametru x
z
Rozšíření – generování zdrojových textů pomocí šablon - XDoclet PTE - Testování, ladění, dokumentace
21
Příklad /** * Konstruktor zlomku. * Naplní čitatele a jmenovatele a převede * zlomek do normalizovaného tvaru. * @param citatel Čitatel zlomku. * @param jmenovatel Jmenovatel zlomku. */ public Zlomek(int citatel, int jmenovatel) { this.citatel = citatel; this.jmenovatel = jmenovatel; normalizuj(); } PTE - Testování, ladění, dokumentace
22
11
Tvorba aplikací pro mezinárodní prostředí z
úprava programů pro mezinárodní prostředí
z
Internacionalizace (i18n) z
z
Zajištění takových vlastností aplikace, aby byla potenciálně použitelná kdekoliv
Lokalizace (l10n) z
Přizpůsobení aplikace konkrétnímu jazykovému a kulturnímu prostředí PTE - Testování, ladění, dokumentace
23
Internacionalizace (i18n) z z z z z z
Formát data a času Zápis čísel Měna Jazyk (abeceda, číslice, směr psaní, …) Telefonní čísla, adresy, PSČ Míry a váhy
PTE - Testování, ladění, dokumentace
24
12
Lokalizace (l10n) z z z
Jazykové verze, překlady Zvyklosti Symbolika z z
z z
Barvy ikony
Estetika Kulturní hodnoty, sociální kontext PTE - Testování, ladění, dokumentace
25
Nástroje pro i18n/l10n z
Překlad textových řetězců z z
extrakce textů – překlad – vložení zpět oddělení textů od programu z
z
z
např. soubory .properties v různých jazykových verzích
knihovna gettext – pro různé progr. jazyky
Přístup k informacím o prostředí z
setlocale(), getlocale(), … PTE - Testování, ladění, dokumentace
26
13