Exempelrapport för kravspårning
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Du kan spåra kvaliteten på arbetsobjekt som tillhör kategorin Krav med kravspårningsrapporten. Kategorin Krav innehåller arbetsobjekt som User Stories (Agile), Product Backlog Items (Scrum), Issues (Basic) och Requirements (CMMI). Mer information om arbetsobjektskategorier finns i Spåra användarberättelser, problem, buggar och andra arbetsobjekt.
Följande bild visar ett exempel på en kravspårningsrapport.
Den här rapporten visar följande information för varje krav som den visar:
- Procent färdigt arbete: Förloppsindikator som visar procentandelen slutfört arbete baserat på sammanslagning av slutförda timmar för alla aktiviteter som är länkade till kravet.
- Klarade tester: Antalet testfall som körs baserat på den senaste testkörningen.
- Misslyckade tester: Antalet testfall som körs som misslyckats baserat på den senaste testkörningen.
- Körningstester: Antalet testkörningar som körs.
- Aktiva buggar: Antalet länkade buggar i ett aktivt tillstånd.
- Stängda buggar: Antalet länkade buggar i tillståndet Stängd, Klar eller Slutförd.
Kommentar
Kravspårning stöds endast för testfall som är länkade via en kravbaserad testsvit. Associationen mellan ett kravarbetsobjekt – Användarberättelse (Agile), Produktpost för kvarvarande uppgifter (Scrum), Krav (CMMI) eller Problem (Basic) – och manuell testkörning skapas endast när testfallet länkas via en kravbaserad testsvit.
Frågor om rapportens svar
Kravspårningsrapporter är användbara för att besvara följande typer av frågor.
Förlopp för arbetet
- Motsvarar mängden arbete som återstår för varje krav dina förväntningar?
- Implementeras de högst rankade kraven först?
- Hur många tester definieras för varje krav? Hur många tester skickas?
- Vilka krav implementeras som inte har några testfall definierade för dem?
Kvalitetsframstatus
- Hur många testfall har körts för varje krav och hur många har klarats?
- Hur många aktiva buggar har varje krav?
- Hittas buggar för krav som testas?
- Löses buggar eller är de aktiva?
Riskbedömning
- Vilka krav är i riskzonen?
- Vilka krav är inte tillräckligt stabila för lansering?
- Vilka krav kan vi skicka idag?
Viktigt!
Power BI-integrering och åtkomst till OData-flödet i Analytics Service är allmänt tillgängliga för Azure DevOps Services och Azure DevOps Server 2020 och senare versioner. Exempelfrågorna i den här artikeln är endast giltiga mot Azure DevOps Server 2020 och senare versioner och är beroende av v3.0-förhandsversion eller senare version. Vi rekommenderar att du använder dessa frågor och ger oss feedback.
Förutsättningar
- Åtkomst: Vara medlem i ett projekt med minst grundläggande åtkomst.
- Behörigheter: Som standard har projektmedlemmar behörighet att fråga Analytics och skapa vyer.
- Mer information om andra förutsättningar för tjänst- och funktionsaktivering och allmänna dataspårningsaktiviteter finns i Behörigheter och krav för åtkomst till analys.
Kommentar
Den här artikeln förutsätter att du läser Översikt över exempelrapporter med OData-frågor och har en grundläggande förståelse för Power BI.
För att rapporten ska generera användbara data måste du ha utfört följande uppgifter:
- Du har definierat kravarbetsobjekt och tilldelat dem till området och iterationssökvägar av intresse. Information om hur du definierar sökvägar för område och iteration finns i Definiera områdessökvägar och Definiera iterationssökvägar.
- För att få procentandelen timmar slutförda måste du fylla i fälten Fullständigt arbete och Återstående arbete med uppgifter eller buggar som är länkade till krav med länktypen Underordnad.
- För att få körningsstatus för testfall har du skapat kravbaserade testpaket i testplaner som motsvarar dessa krav. Infogade tester som du lägger till via tavlan uppfyller den här förutsättningen, men krav som du länkar till tester gör inte det. Mer information finns i Skapa testplaner och testpaket.
- För att få status för buggar har du skapat och länkat buggar till krav med länktypen Underordnad.
Exempelfrågor
För att generera rapporten måste du lägga till tre Power BI-frågor i Power BI Desktop och sedan länka dem. Varje fråga kör antingen entitetsuppsättningen WorkItems
eller TestPoints
.
Kommentar
Power BI-frågefragmenten som anges i följande avsnitt innehåller nödvändiga datatransformeringar för att expandera kolumner och ändra datatyp.
Kommentar
Information om hur du fastställer tillgängliga egenskaper för filter- eller rapportändamål finns i Metadatareferens för Azure Boards. Du kan filtrera dina frågor eller returnera egenskaper med något av värdena Property
under ett EntityType
eller NavigationPropertyBinding Path
flera värden som är tillgängliga med en EntitySet
. Var och EntitySet
en motsvarar en EntityType
. Mer information om datatypen för varje värde finns i metadata för motsvarande EntityType
.
Sökvägar för frågeområde och iteration
För att begränsa rapporten till ett visst område och en viss iterationssökväg kan du filtrera frågan med hjälp av AreaSK och IterationSK. Mer information finns i Definiera grundläggande frågor med OData Analytics.
Fråga efter procentuellt antal timmar som slutförts för krav
Kommentar
Följande fråga fungerar för agil process eftersom den definierar Remaining Work
och Completed Work
fält i arbetsobjekt.
Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.
let
Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?
$filter=(
IterationSK eq {iterationSK}
and AreaSK eq {areaSK}
and Processes/any(p:p/BacklogType eq 'RequirementBacklog')
and Processes/all(p:p/IsBugType eq false)
)
&$expand=Descendants(
$apply=filter(
CompletedWork ne null
or RemainingWork ne null
)
/aggregate(
iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork,
iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork
)/compute(
(SumCompletedWork add SumRemainingWork) as TotalWork,
SumCompletedWork as SumCompleted
)/compute(
iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork
)
)&$select=WorkItemId, Title", null, [Implementation="2.0"]),
#"Expanded Descendants" = Table.ExpandTableColumn(Source, "Descendants", {"SumCompletedWork", "SumRemainingWork", "TotalWork", "SumCompleted", "PercCompletedWork"}, {"Descendants.SumCompletedWork", "Descendants.SumRemainingWork", "Descendants.TotalWork", "Descendants.SumCompleted", "Descendants.PercCompletedWork"}),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Descendants",{{"Descendants.SumCompletedWork", type number}, {"Descendants.SumRemainingWork", type number}, {"Descendants.TotalWork", type number}, {"Descendants.SumCompleted", type number}, {"Descendants.PercCompletedWork", type number}})
in
#"Changed Type"
Fråga efter krav för testkörningsstatus
Kommentar
Information om hur du fastställer tillgängliga egenskaper för filter- eller rapportändamål finns i Metadatareferens för Analys av testplaner. Du kan filtrera dina frågor eller returnera egenskaper med något av värdena Property
under ett EntityType
eller NavigationPropertyBinding Path
flera värden som är tillgängliga med en EntitySet
. Var och EntitySet
en motsvarar en EntityType
. Mer information om datatypen för varje värde finns i metadata för motsvarande EntityType
.
Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/TestPoints?
$apply=filter(
(TestSuite/RequirementWorkItem/IterationSK eq {iterationSK}
and TestSuite/RequirementWorkItem/AreaSK eq {areaSK}
and TestSuite/RequirementWorkItem/Processes/any(p:p/BacklogType eq 'RequirementBacklog')
and TestSuite/RequirementWorkItem/Processes/all(p:p/IsBugType eq false)
)
)
/compute(TestSuite/RequirementWorkItem/WorkItemId as WorkItemId, TestSuite/RequirementWorkItem/Title as WorkItemTitle)
/groupby(
(WorkItemId, WorkItemTitle),
aggregate(
$count as TotalCount,
cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as PassedCount,
cast(LastResultOutcome eq 'Failed', Edm.Int32) with sum as FailedCount,
cast(LastResultOutcome eq 'Blocked', Edm.Int32) with sum as BlockedCount,
cast(LastResultOutcome eq 'NotApplicable', Edm.Int32) with sum as NotApplicableCount,
cast(LastResultOutcome eq 'None', Edm.Int32) with sum as NotRunCount,
cast(LastResultOutcome ne 'None', Edm.Int32) with sum as RunCount)
)", null, [Implementation="2.0"]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"TotalCount", type number}, {"PassedCount", type number}, {"FailedCount", type number}, {"BlockedCount",type number}, {"NotApplicableCount", type number}, {"NotRunCount", type number}, {"RunCount", type number}})
in
#"Changed Type"
Kommentar
Posten TestSuite/RequirementWorkItem/...
anger att arbetsobjektet måste länkas till testpaketet via ett kravbaserat testpaket enligt beskrivningen i förhandskraven.
Fråga efter status för buggar som är länkade till kraven
Kopiera och klistra in följande Power BI-fråga direkt i fönstret Hämta data>tom fråga. Mer information finns i Översikt över exempelrapporter med OData-frågor.
let
Source = OData.Feed("https://analytics.dev.azure.com/{organization}/{project}/_odata/v3.0-preview/WorkItems?
$filter=(
IterationSK eq {iterationSK}
and AreaSK eq {areaSK}
and Processes/any(p:p/BacklogType eq 'RequirementBacklog')
and Processes/all(p:p/IsBugType eq false)
)
&$expand=Links(
$apply=filter(
(LinkTypeName eq 'Child' or LinkTypeName eq 'Related')
and TargetWorkItem/WorkItemType eq 'Bug'
)
/groupby(
(TargetWorkItem/State),
aggregate($count as Count)
)
)&$select=WorkItemId,Title", null, [Implementation="2.0"]),
#"Expanded Links" = Table.ExpandTableColumn(Source, "Links", {"TargetWorkItem", "Count"}, {"Links.TargetWorkItem", "Links.Count"}),
#"Expanded Links.TargetWorkItem" = Table.ExpandRecordColumn(#"Expanded Links", "Links.TargetWorkItem", {"State"}, {"Links.TargetWorkItem.State"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded Links.TargetWorkItem", each [Links.Count] <> null and [Links.Count] <> ""),
#"Pivoted Column" = Table.Pivot(#"Filtered Rows", List.Distinct(#"Filtered Rows"[Links.TargetWorkItem.State]), "Links.TargetWorkItem.State", "Links.Count", List.Sum),
#"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Active", type number}, {"Closed", type number}})
in
#"Changed Type"
Ersättningssträngar och frågeuppdelning
Ersätt följande strängar med dina värden. Ta inte med hakparenteser {} med din ersättning. Om ditt organisationsnamn till exempel är "Fabrikam" ersätter du {organization}
med Fabrikam
, inte {Fabrikam}
.
{organization}
– Organisationens namn{project}
– Namnet på projektet{iterationSK}
– GUID:et som är associerat med iterationssökvägen av intresse. Information om hur du söker efter GUID finns i [.. /extend-analytics/wit-analytics.md#iterationsk](Returnera IterationSK för en specifik iterationssökväg){areaSK}
– GUID:et som är associerat med områdessökvägen av intresse. Information om hur du söker efter GUID finns i [.. /extend-analytics/wit-analytics.md#areask](Returnera AreaSK för en specifik områdessökväg).
Frågeuppdelning
I följande tabell beskrivs varje del av frågan.
Frågedel
Beskrivning
$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK}
)`
Returnerar data för endast markerade Iteration-, Area- och kvarvarande arbetsobjekt.
Processes/any(p:p/BacklogType eq 'RequirementBacklog')
Filtrera arbetsobjekten på ett sådant sätt att de ska hamna i kategorin "krav" för minst en process som är associerad med dem.
Processes/all(p:p/IsBugType eq false)
Utelämna feltypens arbetsobjekt när du hämtar krav. I mallen Grundläggande process är problemarbetsobjekt också av feltyp, så för Grundläggande process tar du bort den här satsen från din fråga.
filter( (TestSuite/RequirementWorkItem/IterationSK eq {iterationSK} and TestSuite/RequirementWorkItem/AreaSK eq {areaSK} and TestSuite/RequirementWorkItem/Processes/any(p:p/BacklogType eq 'RequirementBacklog') and TestSuite/RequirementWorkItem/Processes/all(p:p/IsBugType eq false) ) )
Returnera data för endast valda krav baserat på iteration och område.
/aggregate($count as TotalCount,
Aggregera data över de filtrerade testpunkterna med antalet som TotalCount
.
cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as Passed
Vid aggregering av typgjutna testpunkter med det senaste körningsresultatet "Godkänd" till 1 och summera dem som måttPassed
.
&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )
Returnerar data för slutfört arbete och återstående arbete för underordnade arbetsobjekt i filtrerade överordnade objekt.
/aggregate( iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork, iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork
Aggregera slutförda arbets - och återstående arbetsdata över de filtrerade arbetsobjekten.
)/compute( (SumCompletedWork add SumRemainingWork) as TotalWork, SumCompletedWork as SumCompleted
Beräkna den totala sammanslagningen av slutfört arbete och återstående arbete.
)/compute( iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork )
Beräkna procent av slutförd wor.
Skapa tabellrapporten
Utför följande steg för att skapa rapporten:
- På fliken Modellering väljer du Hantera relationer och länkar de tre frågeresultaten
WorkItemId
efter kolumn. - Under Visualiseringar väljer du Tabell.
- Lägg till de kolumner som du är intresserad av från de tre Power BI-frågorna.
- Välj Summa som aggregering för additiva kolumner som Godkänd test osv.
Rapporten bör se ut ungefär som i följande bild.