Den v životě i vývojáři ALM: uživatel článek napsat nový kód
Jste nový uživatel aplikace Visual Studio správa životního cyklu (ALM) a Team Foundation Server (TFS)?Opravdu se ptáte jak vy a váš tým získat maximální výhody nejnovější verze těchto nástrojů k vytvoření vaší aplikace?
Potom trvat několik minut vás krok za krokem provede tento kurz dvě kapitoly a den v životy Peteru a Julia dva vývojáře na Fabrikam Fiber – fiktivní společnost, která poskytuje kabelové a související služby.Příklady použití aplikace Visual Studio a TFS rezervovat a aktualizovat kód, pozastavit práce, pokud jste kód přezkoumání, zkontrolovat změny a provádět další úkoly uvidíte.
Dosavadní článek
Nedávno začal tým přijímání Visual Studio a Team Foundation Server pro správu životního cyklu aplikací (ALM).Nastavení serveru a klientských počítačů, nevyřízené položky vytvořené plánované iteraci a dokončení ostatních plánování nezbytné zahájit vývoj jejich aplikace.
Přehled této kapitoly
Peteru krátce recenze jeho nevyřízené položky a vybere úkol, který mu bude fungovat na dnes.Osoba zapíše zkoušky jednotky pro kód, který má v úmyslu rozvíjet.Obvykle mu spustí testy za hodinu, postupně psaní podrobnější zkoušky a zapisovat kód, který umožní jejich předání.S kolegy, používající metodu, kterou mu psaní mu často popisuje rozhraní jeho kód.
[!POZNÁMKA]
Moje práce a kód disponibility funkce popisované v tomto tématu jsou k dispozici pouze v Visual Studio Premium a Visual Studio Ultimate.
V tomto tématu
Nevyřízené položky osobní posoudit a připravit úkoly zahájení práce
Vytvoření první test jednotky
Vytvořit inzerováním nového kódu
Spustit první test
Se dohodly rozhraní API
Červené, zelené, Refactor...
Průchod kódem
Když jsme hotovi?
Se změnami
Nevyřízené položky osobní posoudit a připravit úkoly zahájení práce
V Explorer týmu, Peter otevře Moje práce stránku.Tým souhlasila, že během aktuální sprint bude Peteru pracovat na vyhodnotit stav faktury, položky nejvyšší prioritu v nevyřízené položky výrobku.Peteru rozhodne začínají provádět matematické funkce podřízeného úkolu nejvyšší prioritu Nevyřízené položky zboží.Že mu přetažena z úkolu Dostupné pracovní položky do seznamu v průběhu pracovní položky & Změny seznam.
Přezkoumat osobní Nevyřízené položky a příprava úkolů zahájení práce
V Explorer týmu:
Pokud již nejste připojeni k týmu projektu, který chcete pracovat, pak připojit k týmu projektu.
Choose Home, and then choose My Work.
Na Moje práce stránky, přetáhněte úkol z Dostupné pracovní položky seznamu V průběhu pracovní položky oddílu.
Můžete také vybrat úkol v Dostupné pracovní položky seznam a pak zvolte Start.
Návrh plánu přírůstkové práce
Peteru obvykle vyvíjí kód v řadě malých krocích.Každý krok obvykle trvá déle, než hodinu a může trvat až na úrovni deset minut.V každém kroku mu zapíše nový test jednotky a změny kódu, který mu vyvíjí tak, aby předala nové test kromě testů, které mu byl zapsán.Někdy mu nová zkouška před změnou kód zapíše a někdy mu před zápisem test změny kódu.Někdy mu refactors.Mu právě zlepšuje kód bez přidání nových testů.Test, který projde, mu nikdy změní, pokud rozhodne, že ji nepředstavují správně požadavek.
Na konci každé malé krok mu spustí všechny testy jednotky odpovídající této oblasti kód.Mu nepovažuje kroku dokončení dokud každý test byl úspěšný.
Nebude mu však kód kontrolovat do Team Foundation Server dokud mu celý úkol dokončil.
Peteru zapíše dolů hrubý plán pro tuto sekvenci malých krocích.Ví, že přesné údaje a ty novější pořadí budou pravděpodobně měnit, protože pracuje.Zde je jeho počáteční seznam kroků, které pro tento úkol zejména:
Vytvořit testovací metody se zakázaným inzerováním – to znamená pouze podpis metody.
Splňovat určité typický případ.
Test široký rozsah.Ujistěte se, že kód odpovídá velkého rozsahu hodnot.
Výjimka na negativní.Řádně vypořádat s nesprávnými parametry.
Kód disponibility.Ujistěte se, že zkoušky jednotky vykonávají nejméně 80 % kód.
Tento druh plánu několik jeho spolupracovníků psát komentáře v jejich kódu test.Ostatní právě nazpaměť svůj plán.Peteru najde užitečné zapsat jeho seznam kroků v poli Popis úkolu pracovní položky.Pokud měl dočasně přepnout na další naléhavých úkolů, ví, kde chcete vyhledat v seznamu při schopen vrátit se k němu.
Vytvoření první test jednotky
Peteru začíná vytvořením test jednotky.Začíná mu test jednotky protože chce napsat příklad kódu, který používá jeho nové třídy.
Toto je první test jednotky knihovny třídy, který mu testování tak vytvoří nový projekt test jednotky.Mu otevře Nový projekt dialogové okno a zvolí Visual C#, Testa potom Projektu Test jednotky.
Zkušební projekt Jednotka poskytuje soubor C# do kterého mu psát jeho příkladu.V této fázi chce pouze ukazují, jak jeden z jeho nové metody bude vyvolána:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Fabrikam.Math.UnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
// Demonstrates how to call the method.
public void SignatureTest()
{
// Create an instance:
var math = new Fabrikam.Math.LocalMath();
// Get a value to calculate:
double input = 0.0;
// Call the method:
double actualResult = math.SquareRoot(input);
// Use the result:
Assert.AreEqual(0.0, actualResult);
}
}
}
Protože v době, kterou mu napsal jeho kód chce například práce mu příklad zapíše do zkušební metody.
Vytvoření jednotky zkušebního projektu a metody
Obvykle vytvoříte nový zkušební projekt pro každý projekt, který je právě testován.Pokud zkušební projekt již existuje, můžete přidat pouze nové zkušební metody a třídy.
Tento postup používá Visual Studio testovacímu systému jednotky, ale můžete použít také rámce od jiných poskytovatelů.Test Explorer funguje stejně s dalších rámců, pokud nainstalujete příslušný adaptér.
Vytvoření projektu Test, pokud již neexistuje.
- V Nový projekt dialogovém okně pole, zvolte jazyk, jako jazyka Visual Basic, Visual C++ nebo Visual C#.Zvolte Test a projektu Test jednotky.
Přidáte testy test třídy, která je k dispozici.Každý test jednotky je jeden způsob.
Každý test jednotky je nutné zadat TestMethod atribut a zkušební metody jednotky by měly mít žádné parametry.Můžete použít libovolný název pro jednotku zkušební metoda:
[TestMethod] public void SignatureTest() {...}
<TestMethod()> Public Sub SignatureTest() ... End Sub
Každý zkušební metoda by měla zavolat metodu Assert třída označující, zda má být předán nebo se nezdařilo.Obvykle ověřte rovnají očekávané a skutečné výsledky operace:
Assert.AreEqual(expectedResult, actualResult);
Assert.AreEqual(expectedResult, actualResult)
Zkušební metody mohou volat jiných běžných metod, které nemají TestMethod atributu.
Testy můžete uspořádat do více než jedné třídy.Každá třída je nutné zadat TestClass atributu.
[TestClass] public class UnitTest1 { ... }
<TestClass()> Public Class UnitTest1 ... End Class
Další informace o tom, jak psát v jazyce C++ zkoušky jednotky naleznete v Psaní testů jednotky pro C/C++ s rámci testování Microsoft jednotky pro C++.
Vytvořit inzerováním nového kódu
Peteru poté vytvoří projekt knihovny třídy pro jeho nový kód.Je nyní pro kód ve vývoji projektu a projektu pro zkoušky jednotky.Přidá projektu odkaz z projektu test kódu ve vývoji.
V novém projektu přidá nové třídy a minimální verzi metody, která umožní alespoň test úspěšně vytvořit.Nejrychlejší způsob, jak to je generování třídy a metody se zakázaným inzerováním z vyvolání v testu.
public double SquareRoot(double p)
{
throw new NotImplementedException();
}
Třídy a metody generování testů
Nejprve vytvořte projekt, kam chcete přidat nové třídy, pokud již existuje.
Pro vytvoření třídy
Umístěte kurzor na příklad třídy, kterou chcete generovat, například LocalMath.V místní nabídce zvolte Generování kódu, Nový typ.
V Nový typ dialogové okno, sada projektu projektu knihovny tříd.V tomto příkladu je Fabrikam.Math.
Metoda generování
- Umístěte kurzor na volání metody, například SquareRoot.V místní nabídce zvolte Generování kódu, Se zakázaným inzerováním metoda.
Spustit první test
Peteru vytvoří a spustí test stisknutím kombinace kláves CTRL + R, T.Výsledek zkoušky se zobrazí červený indikátor se nezdařil a zkoušky se zobrazí v seznamu Se nezdařilo zkoušky.
Mu umožňuje jednoduchou změnu kódu:
public double SquareRoot(double p)
{
return 0.0;
}
Mu znovu spustí test a předá:
Spustit testy jednotky
Na Test nabídce zvolte Spustit, Všechny testy.
-nebo-
Pokud Test Explorer je otevřený, zvolte Spustit všechny.
-nebo-
Umístěte kurzor do testovacího souboru kód a stiskněte klávesu CTRL + R, T.
Pokud test se zobrazí pod Se nezdařilo zkoušky:
Spusťte test, například poklepáním na název.
Bod, ve kterém je zobrazen testu se nezdařila.
Úplný seznam testů, zvolte Zobrazit vše.Vrátit do shrnutí, zvolte HOME zobrazení.
Pro podrobné informace o výsledku zkoušky, test vyberte v aplikaci Explorer otestujte.
Přejít do kódu test, poklepejte na test v aplikaci Explorer otestujte nebo zvolte Open Test v místní nabídce.
Ladění test, otevřete místní nabídku pro jednu nebo více testů a pak zvolte Ladění vybrané testy.
Spustit testy na pozadí při každém vytváření řešení, přepnout Spustit testy po sestavení.První spuštění testů, které již dříve selhalo.
Se dohodly na rozhraní
Peteru vyzývá své kolegy Michaela Lync a sdílí jeho obrazovky.Uživatel bude používat jeho součást.Prokáže svou první příklad.
Julia předpokládá, že v příkladu je OK, ale komentáře "mnoho funkcí předat testu."
Peteru odpovědi, "první test je právě zkontrolujte název a parametry funkce jsou správné.Nyní můžeme napsat test, který zachycuje hlavní požadavek této funkce."
Společně se zapisují následující zkoušky:
[TestMethod]
public void QuickNonZero()
{
// Create an instance to test:
LocalMath math = new LocalMath();
// Create a test input and expected value:
var expectedResult = 4.0;
var inputValue = expectedResult * expectedResult;
// Run the method:
var actualResult = math.SquareRoot(inputValue);
// Validate the result:
var allowableError = expectedResult/1e6;
Assert.AreEqual(expectedResult, actualResult, allowableError,
"{0} is not within {1} of {2}", actualResult, allowableError, expectedResult);
}
Tip
Pro tuto funkci používá Peteru Test první vývoje, osoba zapíše první test jednotky pro funkce a poté zapíše kód, který splňuje test.V ostatních případech zjistí, že tato praxe není reálné, tak místo toho že mu poté, co mu zapíše kód zapíše zkoušky.Ale jej považuje za velmi důležité testy jednotku zapsat – zda před nebo po kódu, protože vedou kód stabilní.
Červené, zelené, Refactor...
Peteru následuje cyklu, kdy mu opakovaně zapisuje test a potvrzuje, že selže, zapíše kód provést test předat, a považuje za optimalizace struktury programu – beze zkoušek, zlepšení kód.
Červená
Peteru stisknutí kombinace kláves CTRL + R, T spustit nový test, který vytvořil s Julia.Poté, co mu zapíše všechny zkoušky, mu vždy jej spustí a ujistěte se, že selže před osoba zapíše kód, který umožňuje předat.Toto je praxe, které mu zjištěné po mu zapomenuté umístit některé testy, které mu bylo napsané tvrzení.Zobrazení výsledků selhání díky mu, že když mu umožňuje předat, výsledek zkoušky správně označuje byl splněn požadavek.
Jiné užitečné praxe je nastavit Spustit testy po sestavení.Tato možnost spustí testy na pozadí při každém vytváření řešení, neustálého sestava stavu testovací kód.Peter byl nejprve podezřelé, že může být pomalá reakce aplikace Visual Studio, ale zjistí, že jen zřídka takovém.
Zelená
Peteru zapíše jeho první pokus na kód metody, která mu vývoj:
public class LocalMath
{
public double SquareRoot(double x)
{
double estimate = x;
double previousEstimate = -x;
while (System.Math.Abs(estimate - previousEstimate) > estimate / 1000)
{
previousEstimate = estimate;
estimate = (estimate * estimate - x) / (2 * estimate);
}
return estimate;
}
Peteru znovu spustí testy a předat všechny testy:
Refactor
Nyní, kód provede její hlavní funkci, Peteru vyhledá kód nalézt způsoby podání lépe provádět nebo usnadnit v budoucnu změnit.Realizuje mu, že mu může snížit počet výpočtů, provedených ve smyčce:
public class LocalMath
{
public double SquareRoot(double x)
{
double estimate = x;
double previousEstimate = -x;
while (System.Math.Abs(estimate - previousEstimate) > estimate / 1000)
{
previousEstimate = estimate;
estimate = (estimate + x / estimate) / 2;
//was: estimate = (estimate * estimate - x) / (2 * estimate);
}
return estimate;
}
Osoba ověří, že stále předat zkoušky:
Tip
Všechny změny provedené při vývoji kód by měl být optimalizace struktury programu nebo rozšíření:
-
Optimalizace struktury programu prostředky, protože nejsou přidání nové funkce není změna zkoušek.
-
Rozšíření znamená přidávání testů a provádět změny kódu, které jsou nezbytné předat stávající i nové zkoušky.
Pokud aktualizujete existující kód požadavky, které jste změnili, je také odstranit staré zkoušek, které již představují aktuální požadavky.
Neměňte zkoušek, které již prošly.Místo toho přidejte nové zkoušky.Zapisovat pouze testy, které představují skutečný požadavek.
Spustíte testy po každé změně.
... a opakovat
Peteru pokračuje jeho řadu rozšíření a optimalizace struktury programu kroky, pomocí seznamu jeho malé kroky jako hrubé vodítko.Refactoring krok mu není vždy provádět po jednotlivých rozšíření a někdy vykonává více než jednu refactoring krok za sebou.Ale mu vždy zkoušky jednotky po každé změně kódu.
Někdy přidá test, který vyžaduje žádná změna kódu, ale přidá jeho důvěry, že jeho kód funguje správně.Například chce ujistit, že funkce pracuje přes širokou škálu vstupy.Osoba zapíše další testy, například následující:
[TestMethod]
public void SqRtValueRange()
{
LocalMath math = new LocalMath();
for (double expectedResult = 1e-8;
expectedResult < 1e+8;
expectedResult = expectedResult * 3.2)
{
VerifyOneRootValue(math, expectedResult);
}
}
private void VerifyOneRootValue(LocalMath math, double expectedResult)
{
double input = expectedResult * expectedResult;
double actualResult = math.SquareRoot(input);
Assert.AreEqual(expectedResult, actualResult, expectedResult / 1e6);
}
Tento test předá při prvním spuštění:
Právě se ujistit, že tento výsledek není chyba, mu dočasně zavádí malé chyby do jeho test je selhání.Po shlédnutí selhání, mu opraví ji znovu.
Tip
Vždy proveďte test nezdaří dříve, než jej předat.
Výjimky
Peteru nyní přesune psaní testů pro výjimečné vstupů:
[TestMethod]
public void RootTestNegativeInput()
{
LocalMath math = new LocalMath();
try
{
math.SquareRoot(-10.0);
}
catch (ArgumentOutOfRangeException)
{
return;
}
catch
{
Assert.Fail("Wrong exception on negative input");
return;
}
Assert.Fail("No exception on negative input");
}
Tento test vloží kód do smyčky.Má použít Zrušit tlačítka v aplikaci Explorer Test.Tento kód ukončení během 10 sekund.
Peteru chce Ujistěte se, že na serveru sestavení nelze dojít nekonečné smyčky.Ačkoli server ukládá časový limit na úplné spustit, je velmi dlouhý časový limit a způsobit značné zpoždění.Proto tento test přidá explicitní časový limit:
[TestMethod, Timeout(1000)]
public void RootTestNegativeInput()
{...
Časový limit explicitní provede test nezdaří.
Peteru aktualizuje kód řešit tento výjimečný případ:
public double SquareRoot(double x)
{
if (x <= 0.0)
{
throw new ArgumentOutOfRangeException();
}
Regrese
Nové testování průchody, ale existuje regrese.Nyní se nezdaří test, který slouží k předání:
Peteru najde a opraví chybu:
public double SquareRoot(double x)
{
if (x < 0.0) // not <=
{
throw new ArgumentOutOfRangeException();
}
Po je stanovena, předat všechny testy:
Tip
Zkontrolujte každé zkoušky průchodů po každé změně, aby kód.
Průchod kódem
V intervalech během jeho práce a nakonec před mu kontroly v kódu, Peteru získá kód disponibility sestavy.Zobrazuje, kolik kód vykonal jeho zkoušky.
Petrův týmu cíle na pokrytí nejméně 80 %.Mohou zmírnit tento požadavek pro generovaný kód může být obtížné dosáhnout vysoké krytí pro tento typ kódu.
Dobré pokrytí není zaručeno, že plnou funkčnost součásti byl testován a nezaručuje, že kód bude fungovat pro každý rozsah vstupních hodnot.Nicméně je poměrně úzké korelace řádků kódu disponibility a pokrytí behaviorální místa komponenty.Proto dobré pokrytí posiluje jejich testování většina chování, které by měly důvěru týmu.
Získat sestavu kód disponibility na zkoušky nabídce zvolte Spustit, Analyzovat kód disponibility pro všechny testy.Potom znovu spusťte všechny testy.
Peteru získá celkové krytí 86 %.Když mu rozšíří celkem v sestavě, ukazuje, že kód, který mu vývoj má krytí 100 %.To je velmi uspokojivé, protože je důležité skóre pro kód zkoušeného.Nekrytý oddíly jsou skutečně v samotné zkoušky.Přepnutím Zobrazit kód disponibility barvy v zobrazit tlačítko Peteru částí kódu test nebyla vykonávána..Rozhodne, že tyto oddíly jsou důležité pro pokrytí, protože jsou v kódu test a by použít pouze pokud je zjištěna chyba.
Ověřte, že zvláštní zkoušky dosáhne do určité větve kód, můžete nastavit Zobrazit kód disponibility barvy v a pak spustit pomocí jednoho testu Spustit příkaz v místní nabídce.
Když jsme hotovi?
Peteru nadále aktualizovat kód v malé kroky, dokud je přesvědčen, že:
Dostupné jednotky proběhnou úspěšně.
V projektu velmi velké sadou testů jednotka může být nepraktické pro vývojáře je všechny spustit čekat.Místo toho projektu pracuje gated změnami služby, ve kterém všechny automatické testy spuštěny pro každé kontrole shelveset před sloučena zdrojovém stromu.Vrátit se změnami je odmítnuta, pokud se nezdaří spustit.To umožňuje vývojáři na vlastním počítači spustit minimální sadu testů jednotky a pokračovat další práci bez rizika porušení sestavení spuštění.Další informace naleznete v tématu Definovat proces Gated sestavení políčko ověřit změny.
Průchod kódem splňuje standard do týmu.75 % je požadavek typické projektu.
Jeho jednotky zkoušky simulovat všechny aspekty chování, které je požadováno, včetně typické i výjimečných vstupy.
Jeho kód se snadno pochopit a rozšířit.
Při splnění těchto kritérií, připraven Peteru zkontrolujte jeho kód do správy zdrojů.
Zásady vývoj kódu s jednotkou zkoušky
Peteru platí následující zásady při vývoji kódu:
Vypracovat zkoušky jednotky spolu s kódem a spustit je často během vývoje.Zkoušky jednotky představují specifikace komponenty.
Neměňte jednotku zkoušky změnily požadavky nebo zkoušky byly nesprávné.Přidáte nové zkoušky postupně rozšířit funkce kód.
Cílem nejméně 75 % kódu za zkoušky.Podívejte se na výsledky kód disponibility intervalech a před změnami zdrojový kód.
Testy jednotka spolu s kódem se změnami, tak, aby bylo možné spustit nepřetržité nebo pravidelné vytvoří server.
Pokud praktické, pro každý kus funkce zápisu že jednotky nejprve otestovat.Proveďte před vyvinout kód, který je splňuje.
Se změnami
Před kontrolou v jeho změny, použije Peteru Lync znovu sdílet svou obrazovku s jeho kolegu Michaela tak jí neformálně a interaktivně zkontrolovat s ním mu byl vytvořen.Zkoušky nadále zaměření jejich diskuse protože Julia je především zájem nemá jaký kód není jak funguje.Julia souhlasí s tím, co napsal Peter splňuje své potřeby.
Peteru kontroluje všechny změny byly provedeny, včetně obou zkoušek a kód a přidruží úkol splnil.Vrácení se změnami fronty do týmu týmu automatické sestavení systému ověřit pomocí procesu sestavení CI sestavení týmu a jeho změny.Tento proces sestavení pomáhá minimalizovat chyby v týmu jejich codebase vytváření a testování – v čisté prostředí odděleně od svých počítačů rozvoj – každá změna umožňuje týmu.
Peter je oznámeno dokončení sestavení.Ve výsledcích sestavení předány okna, he sees, které bylo úspěšné sestavení a všechny testy.
Chcete-li se změnami
V řádku nabídek zvolte zobrazení, Explorer týmu.
V Explorer týmu, zvolte Home a pak zvolte Moje práce.
Na Moje práce zvolte Kontrola V.
Prohlédněte si obsah Čekající změny stránku a přesvědčte se, zda:
Všechny příslušné změny jsou uvedeny v Zahrnuty změny
Všechny položky odpovídající práce jsou uvedeny v Související položky práce.
Určit Komentář pomoci týmu pochopení účelu tyto změny při prohlížení historie verzí řízení změněné soubory a složky.
Zvolte změnami.
Neustále integrovat kód
Další informace o definování nepřetržité integrační proces sestavení Definovat proces sestavování podporu kontinuální integrace.Po nastavení tohoto procesu sestavení můžete výsledky sestavení týmu upozorněni.
Další informace naleznete v tématu Spustit sledování a správa sestavení.