Visual Studio Team System: Kvalita software a Test- Driven Development Michael Juřek Software Architect Microsoft s.r.o.
Členové týmu Architekt infrastruktury Architekt aplikace Projektový manažer Vývojář Tester Koncový uživatel
Visual Studio Team System Change ManagementWork Item TrackingReportingProject Portal Visual Studio Team Foundation Server Integration ServicesProject Management Process and Architecture Guidance Dynamic Code Analyzer Visual Studio Team Edition Software Architects Static Code Analyzer Code Profiler Application DesignerSystem Designer Logical Datacenter Designer Visual Studio Team Edition Software Developers Visual Studio Industry Partners Team BuildDeployment DesignerUnit Testing (C#, VB.NET)Code CoverageTeam Explorer (includes Team Foundation Server CAL)Visual Studio Professional EditionLoad TestingManual Testing Test Case Management Visual Studio Team Edition Software Testers Class Designer (in Visual Studio Standard Edition and higher) Visio for Enterprise Architects (in MSDN Premium Subscription) Visual Studio Team Edition Database Professionals Offline Database Project Schema Compare DB Rename Refactoring Data GeneratorData CompareUnit Testing (T-SQL) Návrh tříd Návrh distribuovaných systémů Analýza kódu Další typy testů Správa testů Unit testy
Agenda Analýza kódu Unit testy Další typy testů Správa testů
Statická analýza Identifikace problémů v kódu před spuštěním nebo nasazením Analyzuje úspěšně zkompilovaný kód, nikoliv zdrojový kód Řada konfigurovatelných pravidel: Od jmenných konvencí až po potencionální bezpečnostní díry Integrována s Team Foundation Serverem Politika pro check-in, analýza buildů Původ je v nástrojích FxCop a PREFast
Kompilace Kód.dll,.exe Preproc Compiler, linker Varování, chyby Bez statické analýzy...
Kód Kompilace Statická analýza Analýza kódu Kontrola pravidel Varování, chyby.dll,.exe Se statickou analýzou...
Statická analýza kódu: Nastavení analýzy Spuštění analýzy Integrace s TFS
Profilování Analýza běžícího kódu Řízený (managed) nebo nativní kód Sběr informací o běžícím kódu, zásobníku, čase, alokaci paměti (objektů) apod. Založen na dvou nástrojích používaných interně v MS Integrován do prostředí Visual Studia Dva způsoby měření: Sampling – sběr informací v pravidelných intervalech (HW závislé, nelze na VirtualPC) Instrumentace každého volání bloku kódu
main AMethod BMethod Aplikace nezměněna, měření má malou režii, ale je pouze přibližné main 3 AMethod 6 BMethod 9 2 Sampling
main AMethod BMethod main 001 AMethod0023 BMethod0098 … Přesné měření (větší režie), ale aplikace není původní, má přidané instrukce. Instrumentace
Analýza zásobníku a běžících vláken kódu Vizualizace dat v prostředí Visual Studia Volání mezi bloky kódu: Doba a počet volání bloků Vztah volající – volaný Analýza paměti a funkce GC (volitelně): Počet a místo alokace typů objektů Doba života objektů Možnost exportu do XML Analýza dat z profilování
Profilování managed kódu: Nastavení vlastností SpuštěníAnalýza
Agenda Analýza kódu Unit testy Další typy testů Správa testů
Integrace testování do vývojového procesu Unit testy definují postup vývoje: Testy jsou vytvářeny podle specifikace rozhraní tak, aby pokryly všechny dostupné metody Testují základní funkci, okrajové podmínky, definované chybové stavy Vytváří se pouze kód, který vede k úspěchu nějakého unit testu Kód Vývoj založený na testování (Test-driven development, TDD)
Initialization/Clenaup kód na úrovni knihovny (assembly), třídy i metody Statická třída Assert pro výstup výsledků ExpectedException atribut pro očekávané výjimky Více volání téhož testů s různými parametry: Data-driven testy (vizuální podpora vytváření) Integrace s prostředím Možnosti unit testů ve VSTS
Integrace s prostředím.NET framework Testovací metody založeny na atributech Visual Studio Automatické generování testovacích tříd Implementace a ladění testovacího kódu Správa testů a seznamů testů Měření pokrytí kódu (Code coverage) Team Foundation Server Testy jsou odrůdou zdrojového kódu (verzování, správa zdrojového kódu) Vytváření testů je součástí projektového plánu (Work Items integrace) Udržování vazeb a příčinných souvislostí: selhaný test -> bug -> fix -> automatické oznámení testerovi
Code coverage Pro unit testy není důležitá kvantita, ale kvalita Vhodným měřítkem je „code coverage“ Jaký podíl napsaného kódu je pokryt unit testy? Možnost analýzy „shora dolů“ Řešení -> Projekt -> Třída -> Metoda Pozor, neměří kvalitu kódu ani testů: Pokud např. v kódu není ošetřena hraniční podmínka a neexistuje unit test pro tuto situaci, můžete mít 100% pokrytí a přesto je to špatně Proto je důležité psát testy podle zadání a ne podle kódu Dejte si vysoký, ale realistický cíl pro pokrytí 100% je typicky nedosažitelných
Code coverage Kolik kódu bylo skutečně otestováno unit testy? Vizuálně v kódu Procentuálně jako rozpad podle projektů, tříd, bloků kódu
Unit test: GenerováníImplementaceSpuštění Integrace s Code coverage Data-driven, ExpectedExceptionAttribute
Umístěte testy do separátních projektů Udržujte vztah 1:1 mezi projektem a jeho testovacím projektem Používejte „black box“ přístup Pište testy podle zadání/analýzy a ne podle implementace Pište testy PŘED anebo BĚHEM vývoje, ne PO Každý test by měl testovat pouze jednu funkci Každý test by měl být nezávislý na ostatních testech Testujte hraniční případy i případy vedoucí k očekávaným výjimkám Najdete-li chybu v kódu, napište selhávající unit test a teprve pak ji začněte opravovat Doporučení
Agenda Analýza kódu Unit testy Další typy testů Správa testů
Funkční testy web aplikací Některé možné otázky ohledně funkce: Jaká je doba odezvy na typickou úlohu? Nenarušil upgrade/fix funkci aplikace? Dává vyhledávání očekávaný výsledek? Mnoho řešení od třetích stran: Různé schopnosti, různé možnosti vlastního rozšíření, různé cenové hladiny Nový nástroj pro tyto scénáře ve VSTS: Nástupce nástroje Application Center Test Nepodporuje jiné typy rozhraní (WinForms,...) Alespoň ne v této verzi
Web testy Integrovány do Visual Studia Jednoduše – další typ testu Na základě nahrané posloupnosti stránek anebo pomocí kódu: Extrakce parametrů a validace výsledku Nejen pro ASP.NET Pro jakoukoliv HTTP komunikaci Lze použít i pro webové služby Absolutní rozšiřitelnost Zajímavé rysy: Forms Authentication, Viewstate, Cookies
Možnosti web testů Web Test je posloupnost URL s parametry Možnost nahrání z Internet Exploreru Editovatelný XML formát Variace parametrů (data-driven test) Extrakce parametrů pro následné použití Text, regulární výraz, hlavička, atribut, skryté pole, pole formuláře,... (vlastní) Validace výsledku: Hodnota pole, hledání textu, doba odezvy, kontrola atributů, kontrola počtu tagů,... (vlastní) Možnost automatického převodu na kód Poté neomezená rozšiřitelnost a flexibilita
Web test: Nahrání Nastavení data-driven provádění Validation rules Extraction rules Vytvoření testu jako kódu
Zátěžové testování Multi-threadové provádění: unit testů web testů Sběr hodnot přednastavených výkonových čítačů Porovnání hodnot s nastavenými mezními hodnotami Možnost nastavení mixu scénářů, prohlížečů, kvality síťového spojení Flexibilní nastavení zátěže: Konstantní Postupné zvyšování Zvyšování až do splnění nějakého cíle
Zátěžový test: Vytvoření Nastavení sledovaných čítačů SpuštěníVyhodnocení
Ostatní typy testů „Setříděný“ test (Ordered) Provádí jiné testy ve specifikovaném pořadí Obecný test (Generic) Obalení existujícího programu z příkazové řádky Vyžaduje minimální integrační práci Manuální test Dokument ve Wordu nebo v textovém souboru Integrace do spouštění seznamu testů Výsledek testu = volba testera spouštějícího test Vlastní testy Možnost rozšiřování Visual Studia
Agenda Analýza kódu Unit testy Další typy testů Správa testů
Test Manager Vytváření a správa seznamů testů Jednotlivé testy jsou v hierarchických seznamech Podobně jako jsou soubory ve složkách Nastavení konfigurace spouštění testů Řada parametrů ovlivňujících běh testu Code coverage atd. Spouštění testů: Vybraných individuálně Podle seznamů testů
Integrace do prostředí VS Definice seznamů testů a konfigurace testů je uložena v souborech: Mohou být využity mimo Visual Studio, např. z příkazové řádky (MSTest.exe) Integrace s Team Foundation Serverem Definice seznamů testů a konfigurace testů může být uložena ve verzovaném úložišti Úspěšný průchod seznamem testů může být podmínkou pro uložení kódu do úložiště Seznam testů může být prováděn jako součást kontroly automatických buildů
Test Manager Práce se seznamy testů Spouštění testů Spouštění testů z příkazové řádky Integrace s TFS – automatický build
Závěrem Visual Studio Team Edice přinášejí velké množství individuálních nástrojů architektům Návrh distribuovaných systémů Modelování tříd Vlastní modely a postupy... vývojářům Statická analýza kódu Profilování kódu... testerům Unit testy Další typy testů Správa testů