V úterý 1.2. pokračoval posledná lekcí online kurz pod názvem "Leden - měsíc testování aplikací", tentokrát věnované pohledu vývojáře na oblast kvality aplikací a testování.

Logistika a podmínky pro získání knihy´

Podmínkou je účast na 4 z 5 LiveMeetingů. Nyní proběhne spárování na základě e-mailových adres zadaných při registraci a při vstupu do jednotlivých LiveMeetingů. Všichni zaregistrovaní dostanou nejpozdějí 4.2. e-mail:

  • Lidé bez nároku na knihu – mohou uplatnit „reklamaci“ nejpozději do 11.2., například pokud se zúčastnili, ale z důvodu překlepu v adrese nedošlo ke správnému spárování
  • Lidé s nárokem na knihu – email bude pro ověření obsahovat registrační adresu, bude možné zaslat zpět opravenou/změněnou adresu

Rozesílka knihy proběhne ve druhé polovině února, pokud k vám kniha nedorazí do 1.3., ozvěte se nám.

Záznam a prezentace

Záznam

Prezentace o testování z pohledu vývojáře

Otázky a odpovědi

Jednotlivé otázky jsem si dovolil stylisticky a jazykově upravit.

Je možné databázový projekt použít i pro Entity Framework? Když databázi vytvářím vlastně jako EF model?
Pokud použijete tzv. model-first přístup, můžete si vygenerovat databázi z modelu (případně v code-first modelu se generuje z kódu). V reálném životě je však vždy třeba databázi upravovat, přidávat indexy apod. Proto bych doporučil po prvotním vygenerování databáze z ní založit databázový projekt a tento pak zahrnout do změnového řízení a dále rozvíjet.

Je možný scénář, kdy databázi vytvořím v DB projektu a z fyzické databáze generuji EF model?
Určitě ano, EF model lze generovat z databáze a je lhostejné, zda tato databáze vznikla ručním vytvořením anebo nasazením na základě databázového projektu.

Lze srovnat možnosti databázového projektu ve VS a možnosti SQL Server Management Studio?
SSMS nabízí možnost správy databázových skriptů, ale přistupuje k nim v podstatě pouze jako k sadě textových souborů. Naproti tomu Visual Studio si vygeneruje kompletní model databáze, takže rozumí vnitřním závislostem, může kontrolovat jeho konzistenci (např. zda se nepoužívají neexistující názvy tabulek), provádět refactoring, generovat unit testy, generovat testovací data, porovnávat model oproti nasazené databázi apod. Jeho funkčnost je tedy nesrovnatelně širší.

Je nějak podporována i migrace dat při změnách ve schématu DB? Např. pokud změním strukturu tabulky přidáním nového sloupce, který může být NULL, nepřijdu o data ve změněné tabulce?
Nasazení nové verze databáze v rozumné míře zachová existující data, např. při přidání nového sloupce anebo změně jeho typu. Při složitějších operacích (např. rozdělení sloupce na dva) je ale nutné použít vlastní skript. Je třeba si uvědomit, že jedním z cílů databázového projektu je naprosto reprodukovatelná možnost vytvoření testovací databáze – schématu i generovaných anebo skriptem vkládaných testovacích dat, kde vše je plně verzováno v repository zdrojového kódu. Problémy zmíněné v otázce by tedy bylo relevantní řešit spíše až v produkčním prostředí, kde rozhodně není vhodné pouštět nasazení automaticky – spíše si vygenerovat změnové skripty a pečlivě je zrevidovat, a teprve potom spustit.

Nezdá se Vám omezující čekat například hodinu na build při zapnuté funkci gated check-in než můžete pokračovat v další úloze na daném projektu?
Není nutné čekat na dokončení check-inu. Je možné pracovat dále a poté dát Reconcile nebo Get Latest (podle toho, zda si necháte změny v pracovním prostoru) a synchronizovat tedy změny „sám se sebou“. Samozřejmě tato funkce klade určité překážky individuálnímu vývojáři, na druhou stranu zajišťuje, že nevědomá chyba jednoho člověka neznemožní práci všem ostatním, kteří nebudou mít kompilovatelný projekt. Je tedy třeba vzít v úvahu počet lidí v týmu a zvážit, zda se tato funkce v dané situaci hodí či nikoliv.

Je podporován automatický build včetně provedení automatických testů na lokální počítač?
Automatický build vyžaduje instalaci TFS, která může být i na lokálním počítači např. pro potřeby jednotlivce. Jestli chcete provádět buildy na serveru a testy UI někde jinde, tak to rovněž možné je. Musíte nainstalovat Test Controller (kdekoliv, např. na TFS serveru) a dále Test Agent (na počítači, kde mají běžet testy). Ve specifikaci buildu pak specifikujete, kde se testy nachází (jméno DLL) a použijete nastavení .testsettings takové, které odkazuje na váš Test Controller a Test Agent. Upozorňuji ale, že pokud takto chcete provádět též testy uživatelského rozhraní, není možné v danou chvíli dělat na počítači nic jiného, proto by to měl být jiný počítač/virtuál, než u kterého momentálně sedíte.

Zachytávají unit testy i nebezpečné konstrukce (možnosti napadnutí)?
Ne, nezachytávají. To je do určité míry úlohou statické analýzy kódu.

Není plánované nějaké výkonnostní zlepšení Impact analýzy v SP? Přestali jsme používat poté, co začalo zamrzat Studio a automatizované testy se mnohdy ani nedokončily.
Určitě SP1 bude obsahovat i opravy v tomto směru. Jinak v případě problémů zkuste vymazat lokální databázi s Test Impact daty (je v adresáři projektu) a vygenerovat ji znovu, případně negenerovat data pro celé řešení , ale pouze pro relevantní části (lze ovlivnit v nastavení Test Impact sběru dat).

FxCop 1.35,1.36 pro statickou analýzu byl dříve zadarmo. Znamená to, že nyní ve verzi 10.0 je dostupný pouze pro vyšší verze VS?
FxCop je víceméně stejná technologie jako statická analýza kódu ve Visual Studiu a je nadále dostupný ke stažení na http://www.microsoft.com/downloads/. Rozdíl je v tom, že FxCop je samostatná utilita – není integrován ani do prostředí Visual Studia, ani do životního cyklu vývoje (zejména týmového buildu).

Při odstranění buildu se odstraní i příslušné symboly ze symbol serveru / source serveru?
Pokud se maže build, zobrazí se dialog, kde můžete zvolit, co všechno chcete vymazat – jednou z nabízených položek jsou právě i symboly, jejichž mazání je standardně zapnuto.Verzovaná historie zdrojového kódu je v repozitory a ta samozřejmě zůstává bez ohledu na buildy.

Je možné měřit metriky kódu na úrovni changesetů od určitého uživatele, např. za určité období?
Standardní výstupem je XML soubor s detailem na úrovni tříd a metod, tento lze vygenerovat i z příkazové řádky, např. jako součást denního buildu. Jakákoliv další data si musíte odvodit vlastním zpracováním.

Jak je model architektury v layer diagramu asociovaný s projekty anebo řešením? Dá se asociovat automaticky?
S vrstvami layer diagramu lze asociovat jednotlivé třídy, jmenné prostory anebo celé knihovny/projekty. Děje se tak přetažením příslušné entity myší na vrstvu v layer diagramu buď z okna Solution Explorer anebo Architecture Explorer.

Je možné symbol server & source server používat v kombinace s lokálním buildem, tedy bez použití TFS?
Symbol server lze udržovat a vytvářet i jinými způsoby než během buildu na TFS, více informací zde. Pro source server ale potřebujete historii zdrojových kódů, a to není bez TFS reálné.

Pokud provádím automatický build a někdo má check out pro nějaký soubor, co se stane?
Check out vyjadřuje pouze záměr editovat soubor, neznamená nutně změnu. Build server pracuje s již uloženými změnami (dokončený check in) a tudíž mu samotný check out nijak nevadí.

Dá se zachytit nějaký "podraz" ze strany programátora, který přidá nový jmenný prostor anebo novou knihovnu, která není s modelem asociovaná a tudíž se nekontroluje vůči architektuře?
Předně validace architektury není primárně nástrojem, který by všemi prostředky zabránil záměrnému narušení architektury, je myšlen spíše jako pomůcka pro vývojáře proti nechtěným porušením architektury a návrhových vzorů. Strukturu knihoven a jmenných prostorů by měl vždy zakládat seniorní člen týmu a ne kdokoliv z vývojářského týmu.

Je možné ze statické analýzy kódu zjistit, zda někdo přidal něco nového (např. projekt nebo třídu)?
Ze statické analýzy kódu to možné není. Množství přidaných řádků zjistíte z datového skladu, ale nikoliv ve smyslu struktury kódu.

Děkuji vám za účast na celém kurzu a těším se někdy na slyšenou/na shledanou.

Michael