Detta är ett utdrag från Unit Testing Succinctly eBook, av Marc Clifton, vänligt tillhandahållen av Syncfusion.
Den vanliga mantra som vi hör om vilken mjukvarumetodik som helst, är att det förbättrar användbarhet och kvalitet, minskar utvecklings- och testtid och bringar produkten på marknaden snabbare och med färre buggar. Det här är höga mål, men jag har ännu inte sett en metodik som levererar Graal of software development.
I slutändan är den primära anledningen att skriva enhetsprov att bevisa korrekthet, och det här händer bara om du skriver enhetsprov väl. Enhetstester i sig kommer inte direkt att förbättra användbarheten eller kvaliteten på din produkt. Du kan fortfarande göra en röra av ansökan om det har visat sig vara korrekt eller inte - och det är säkerligen inte garanterat att minska utveckling och testtid (mer om detta senare) eller ta din produkt på marknaden tidigare.
Så, låt oss vara tydliga och verkliga från get-go: Enhetsprovning kan användas för att verifiera korrekthet och alla sidoeffekt Det som uppstår med hänsyn till din utvecklingsprocess måste balanseras med ansträngningarna att skriva och bibehålla användbara enhetsprov.
Välskrivna enhetsprov ger dig en mätbar grad av förtroende för att de mängder av metoder som omfattar din ansökan kommer att fungera korrekt. Det enklaste sättet att objektivt göra denna mätning är ett täckningstest: Vilken procentandel av metoderna i din ansökan har enhetstester skrivna mot dem? Medan denna fråga inte direkt adresserar huruvida en metod ska betraktas som en enhet (diskuteras senare) eller om testen är meningsfull, är det ändå en mätning som du kan när som helst och kan användas som riktmärke för riktigheten av din ansökan.
Enhetstestning är en iterativ process. Det kommer alltid att finnas fel som missas med enhetstestning. Antalet buggar som rapporterats över tiden och antalet olösta versus lösta problem ger dock meningsfull information om din ansökans hälsa. Medan det är omöjligt att säga, "Med enhetsprovning har antalet buggar minskat med 50 procent," det är möjligt att mäta hur många fel din ansökan har på grund av ofullständig test av enhetstest. När du skriver enhetstester för att verifiera problemet och åtgärden kan du också mäta hur många enhetstester du har skrivit mot rapporterade fel jämfört med det totala antalet enhetstester.
Alla dessa riktmärken ger en grad av objektivitet mot din utvecklingsprocess. En av fördelarna med enhetstestning är därför att det ger alla, från utvecklare till chefer, objektiv information som kan matas tillbaka till utvecklingsprocessen för att förbättra den processen.
En annan fördel är repeterbarhet, annars kallad regressionstestning. Som en ansökan mognar vill vi se till att den befintliga, arbetssätt Koden är inte trasig. Genom att skriva enhetstester mot metoder som de skrivs och lägger till enhetstest för fel som de rapporteras kan alla dessa testas om automatiskt när ny kod läggs till eller befintlig kod ändras. Enhetstester blir ett viktigt tidsreduceringsverktyg när det gäller att testa om ett program fortfarande fungerar korrekt efter en mindre eller betydande kodändring. Medan enhetstestning inte ersätter användbarhetstestning, prestandatestning, belastningstestning och så vidare, hjälper det definitivt att eliminera tiden bortkastad på den gemensamma frågan: "Detta fungerade tidigare; varför gör det inte nu? "
Det är lätt att testa att en metod gör rätt när alla processer i metoden exekverar linjärt. Men när du lägger till en om
uttalande eller a växla
uttalande, du skapar cyklomatisk komplexitet, vilket är ett fint sätt att säga att din kod nu har flera olika körbanor. De mest användbara enhetstesterna är de som testar varje enskild kodgren som uppstår i din metod. Skrivning av dessa typer av enhetstester kan vara omtänksamt men det är väl värt ansträngningen, eftersom de garanterar att åtminstone varje kodgren har utförts, vilket inte är något som kan inträffa vid acceptanstest, användbarhetsprovning eller annan testning som kvalitetssäkring avdelningen (om du har en) utför.
Under hela serien kommer vi att ta en titt på ett antal olika strategier och tips för hur du utför effektiv enhetstestning.