Voorbeeldrapport voor het bijhouden van vereisten

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Het rolluprapport Vereisten bijhouden is gebaseerd op het rapport Vereisten bijhouden en laat zien hoe u metrische gegevens samenvoegt voor een samenvouwen op één niveau. Als u bijvoorbeeld vereisten bijhoudt met Gebruikersverhalen, kunt u gegevens voor functies aggregeren met behulp van de query's in dit artikel.

In de volgende afbeelding ziet u een voorbeeld.

Schermopname van power BI Stories Overview Rollup Report.

Dit rapport bevat de volgende informatie voor elke vereiste die wordt vermeld:

  • Percentage voltooid werk: voortgangsbalk met het percentage voltooid werk op basis van het samenvouwen van voltooide uren voor alle taken die aan de vereiste zijn gekoppeld.
  • Geslaagde tests: het aantal testcases dat wordt uitgevoerd op basis van de meest recente testuitvoering.
  • Mislukte tests: het aantal testcases dat is mislukt op basis van de meest recente testuitvoering.
  • Tests uitvoeren: het aantal testuitvoeringen dat wordt uitgevoerd.
  • Actieve bugs: het aantal gekoppelde bugs in een actieve status.
  • Gesloten bugs: het aantal gekoppelde bugs in de status Gesloten, Gereed of Voltooid.

Notitie

Het bijhouden van vereisten wordt alleen ondersteund voor testcases die zijn gekoppeld via een testpakket op basis van vereisten. De koppeling tussen een werkitem voor vereisten: User Story (Agile), Product Backlog Item (Scrum), Vereiste (CMMI) of Probleem (Basic) en handmatige testuitvoering wordt alleen gevormd wanneer de testcase wordt gekoppeld via een testpakket op basis van vereisten.

Vragen over de antwoorden van het rapport

Rapporten voor het bijhouden van vereisten zijn handig voor het beantwoorden van de volgende typen vragen.

Werkvoortgang

  • Komt de hoeveelheid werk die overblijft voor elke vereiste overeen met uw verwachtingen?
  • Worden de hoogste vereisten als eerste geïmplementeerd?
  • Hoeveel tests zijn gedefinieerd voor elke vereiste? Hoeveel tests worden doorgegeven?
  • Welke vereisten worden geïmplementeerd waarvoor geen testcases zijn gedefinieerd?

Kwaliteitsvoortgang

  • Hoeveel testcases zijn uitgevoerd voor elke vereiste en hoeveel zijn er verstreken?
  • Hoeveel actieve bugs heeft elke vereiste?
  • Worden er bugs gevonden voor vereisten die worden getest?
  • Worden fouten opgelost of blijven ze actief?

Risico-evaluatie

  • Welke vereisten lopen het risico?
  • Welke vereisten zijn niet voldoende stabiel voor de release?
  • Welke vereisten kunnen we vandaag verzenden?

Belangrijk

Power BI-integratie en -toegang tot de OData-feed van de Analytics-service zijn algemeen beschikbaar voor Azure DevOps Services en Azure DevOps Server 2020 en latere versies. De voorbeeldquery's in dit artikel zijn alleen geldig voor Azure DevOps Server 2020 en latere versies en zijn afhankelijk van versie v3.0 of hoger. We raden u aan deze query's te gebruiken en ons feedback te geven.

Vereisten

  • Als u analysegegevens wilt bekijken en een query wilt uitvoeren op de service, moet u lid zijn van een project met basic-toegang of hoger. Standaard krijgen alle projectleden machtigingen om query's uit te voeren op Analytics en analyseweergaven te definiëren.
  • Zie Machtigingen en vereisten voor toegang tot Analytics voor meer informatie over andere vereisten met betrekking tot het inschakelen van services en functies en algemene activiteiten voor het bijhouden van gegevens.

Notitie

In dit artikel wordt ervan uitgegaan dat u overzicht van voorbeeldrapporten hebt gelezen met behulp van OData-query's en basiskennis hebt van Power BI.

Voor het genereren van nuttige gegevens moet u de volgende taken hebben uitgevoerd:

  • U hebt vereiste werkitems gedefinieerd en deze toegewezen aan het gebied en iteratiepaden van belang. Zie Gebiedspaden definiëren en Iteratiepaden definiëren voor meer informatie over het definiëren van gebieds- en iteratiepaden.
  • Als u het voltooiingspercentage van uren wilt ophalen, moet u de velden Voltooid werk en Resterende hoeveelheid werk van taken of bugs invullen die zijn gekoppeld aan vereisten met het koppelingstype Onderliggend item.
  • Als u de uitvoeringsstatus van testcases wilt ophalen, hebt u testsuites op basis van vereisten gemaakt in Testplannen die overeenkomen met die vereisten. Inlinetests die u toevoegt via het Kanban-bord voldoen aan deze vereiste, maar vereisten die u koppelt aan tests niet. Zie Testplannen en testsuites maken voor meer informatie.
  • Als u de status van bugs wilt ophalen, hebt u bugs gemaakt en gekoppeld aan vereisten met het type onderliggende koppeling.

Voorbeeldquery's

Als u het rapport wilt genereren, moet u drie Power BI-query's toevoegen aan Power BI Desktop en deze vervolgens koppelen. Elke query voert de WorkItems of TestPoints entiteitsset uit.

Notitie

De Power BI-queryfragmenten in de volgende secties bevatten de vereiste gegevenstransformaties om kolommen uit te vouwen en het gegevenstype te wijzigen.

Querygebied en iteratiepaden

Als u het bereik van uw rapport wilt instellen op een bepaald gebied en iteratiepad, kunt u de query filteren met en AreaSKIterationSK. Zie Basisquery's definiëren met behulp van OData Analytics voor meer informatie.

Notitie

Als u de beschikbare eigenschappen voor filter- of rapportdoeleinden wilt bepalen, raadpleegt u de naslaginformatie over metagegevens voor Azure Boards. U kunt uw query's filteren of eigenschappen retourneren met behulp van een van de Property waarden onder een EntityType of NavigationPropertyBinding Path waarden die beschikbaar zijn met een EntitySet. Elk EntitySet komt overeen met een EntityType. Voor meer informatie over het gegevenstype van elke waarde, bekijkt u de metagegevens die voor de bijbehorende EntityTypewaarde zijn opgegeven.

Query uitvoeren op voltooiingspercentage van uren voor vereisten

Notitie

Wijzig het WorkItemType op basis van het proces dat u gebruikt. De Scrum-sjabloon ondersteunt functie en de basissjabloon ondersteunt Epic als respectievelijk het type samengetelde werkitem.

U kunt de onderstaande Power BI-query> rechtstreeks in het venster Gegevens leeg ophalen plakken. Raadpleeg overzicht van voorbeeldrapporten met behulp van OData-query's voor meer informatie.

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 WorkItemType eq 'Feature'
)
&$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"

Query voor testuitvoeringsstatus van vereisten

Notitie

Als u de beschikbare eigenschappen voor filter- of rapportdoeleinden wilt bepalen, raadpleegt u de metagegevensreferentie voor Analyse van testplannen. U kunt uw query's filteren of eigenschappen retourneren met behulp van een van de Property waarden onder een EntityType of NavigationPropertyBinding Path waarden die beschikbaar zijn met een EntitySet. Elk EntitySet komt overeen met een EntityType. Voor meer informatie over het gegevenstype van elke waarde, bekijkt u de metagegevens die voor de bijbehorende EntityTypewaarde zijn opgegeven.

U kunt de onderstaande Power BI-query> rechtstreeks in het venster Gegevens leeg ophalen plakken. Raadpleeg overzicht van voorbeeldrapporten met behulp van OData-query's voor meer informatie.

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(iif(TestSuite/RequirementWorkItem/Parent ne null, TestSuite/RequirementWorkItem/Parent/WorkItemId, 0) as ParentWorkItemId, 
	iif(TestSuite/RequirementWorkItem/Parent ne null, TestSuite/RequirementWorkItem/Parent/Title, 'Unparented') as ParentWorkItemTitle
	)/groupby(
	    (ParentWorkItemId, ParentWorkItemTitle), 
	    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"

Notitie

De TestSuite/RequirementWorkItem/... vermelding geeft aan dat het werkitem moet worden gekoppeld aan het testpakket via een op vereisten gebaseerde testsuites, zoals besproken in de vereisten.

Query uitvoeren op de status van bugs die zijn gekoppeld aan de vereisten

Notitie

Wijzig het WorkItemType op basis van het proces dat u gebruikt. De Scrum-sjabloon ondersteunt functie en de basissjabloon ondersteunt Epic als respectievelijk het type samengetelde werkitem.

U kunt de onderstaande Power BI-query> rechtstreeks in het venster Gegevens leeg ophalen plakken. Raadpleeg overzicht van voorbeeldrapporten met behulp van OData-query's voor meer informatie.

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 WorkItemType eq 'Feature'
    )
&$expand=Descendants(
    $apply=filter(
        WorkItemType eq 'Bug'
    )
    /groupby(
        (State),
        aggregate($count as Count)
    )
)
&$select=WorkItemId,Title", null, [Implementation="2.0"]),
    #"Expanded Descendants" = Table.ExpandTableColumn(Source, "Descendants", {"State", "Count"}, {"Descendants.State", "Descendants.Count"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Descendants", each [Descendants.Count] <> null and [Descendants.Count] <> ""),
    #"Pivoted Column" = Table.Pivot(#"Filtered Rows", List.Distinct(#"Filtered Rows"[Descendants.State]), "Descendants.State", "Descendants.Count", List.Sum),
    #"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Active", type number}, {"Closed", type number}})
in
    #"Changed Type"

Uitsplitsing van tekenreeksen en query's vervangen

Vervang de volgende tekenreeksen door uw waarden. Neem geen vierkante haken {} op bij uw vervanging. Als de naam van uw organisatie bijvoorbeeld Fabrikam is, vervangt u door {organization}Fabrikam, niet {Fabrikam}.

  • {organization} - Naam van uw organisatie
  • {project} - De naam van uw project
  • {iterationSK} - De GUID die is gekoppeld aan het iteratiepad van belang. Als u de GUID wilt opzoeken, raadpleegt u [.. /extend-analytics/wit-analytics.md#iterationsk](Retourneer de IterationSK voor een specifiek iteratiepad)
  • {areaSK} - De GUID die is gekoppeld aan het gebiedspad van belang. Als u de GUID wilt opzoeken, raadpleegt u [.. /extend-analytics/wit-analytics.md#areask](Retourneer de AreaSK voor een specifiek gebiedspad).

Uitsplitsing van query's

In de volgende tabel wordt elk deel van de query beschreven.

Queryonderdeel

Beschrijving


$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK} en WorkItemType eq 'Feature' )'

Retourneert alleen gegevens voor functies onder de opgegeven iteratie en het opgegeven gebied.

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)))

Retourneert alleen gegevens voor geselecteerde items voor achterstandsvereisten onder de opgegeven iteratie en het opgegeven gebied.

&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )

Vouw de onderliggende items van Functies uit en retourneer voltooide werk - en resterende werkgegevens voor de werkitems.

&$expand=Descendants( $apply=filter( WorkItemType eq 'Bug' ) /groupby( (State), aggregate($count as Count) )

Vouw de onderliggende items van Functies uit en filter op fout, groepeer de retourgegevens op staat en zon het totale aantal onderliggende items.

/aggregate($count as TotalCount,

Geaggregeerde gegevens over de gefilterde testpunten met het aantal als 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)

Som tijdens het samenvoegen de waarden van testpunten op op basis van het laatste uitvoeringsresultaat van Geslaagd, Mislukt, Geblokkeerd, NotApplicable en Geen. Tel ook de waarden van testpunten op waarvan het laatste resultaat niet gelijk is aan None om het totaal RunCountop te halen.

/aggregate( iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork, iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork

Samengevoegde voltooide werk- en resterende hoeveelheid werk voor de gefilterde werkitems.

)/compute( (SumCompletedWork add SumRemainingWork) as TotalWork, SumCompletedWork as SumCompleted

Bereken het totale aantal voltooide werk en resterende hoeveelheid werk.

)/compute( iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork )

Bereken het percentage voltooide wor.

Het tabelrapport maken

  1. Kies op het tabblad Modellering Relaties beheren en koppel de drie queryresultaten per WorkItemId kolom.
  2. Kies Onder Visualisaties de optie Tabel.
  3. Voeg de kolommen toe waarin u geïnteresseerd bent vanuit de drie Power BI-query's.
  4. Selecteer Sum als aggregatie voor additieve kolommen, zoals Geslaagde tests , enzovoort.

    Som selecteren als aggregatie in Power BI

Hier is verificatiescenario's een bovenliggende functie van twee gebruikersverhalen.

Schermopname van overzichtsrapport power BI-voorbeeldverhalen.