Delen via


Voorbeeldrapport voor het overkoepelend bijhouden van vereisten

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

Het rolluprapport voor het bijhouden van vereisten is gebaseerd op het rapport voor het bijhouden van vereisten en laat zien hoe u metrieken kunt samenvoegen voor een roll-up 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 is geslaagd 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 geslaagd?
  • 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 eisen kunnen we vandaag versturen?

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.

Categorie Vereisten
Toegangsniveaus - een projectlid.
- Ten minste Basis toegang.
Toestemmingen Projectleden zijn standaard gemachtigd om query's uit te voeren op Analytics en weergaven te maken. Zie Machtigingen en vereisten voor toegang tot Analyse 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 leest 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 uren voltooiingspercentage wilt ophalen, moet u de velden voor Voltooid werk en Resterend werk van taken of bugs invullen die zijn gekoppeld aan vereisten met het koppelingstype Kind.
  • 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 via het bord toevoegt, voldoen aan deze voorwaarde, terwijl vereisten die u aan tests koppelt dat niet doen. Zie Testplannen en testsuites maken voor meer informatie.
  • Als u de status van bugs wilt ophalen, heeft u bugs aangemaakt en gekoppeld aan vereisten met het child-koppeltype.

Voorbeelden van queries

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. Raadpleeg voor meer informatie over het gegevenstype van elke waarde 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 Feature en de basissjabloon ondersteunt Epic als respectievelijk het type samengetelde werkitem.

Kopieer en plak de volgende Power BI-query rechtstreeks in het Gegevens ophalen>Lege Query venster. Zie 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. Raadpleeg voor meer informatie over het gegevenstype van elke waarde de metagegevens die voor de bijbehorende EntityTypewaarde zijn opgegeven.

Kopieer en plak de volgende Power BI-query rechtstreeks in het venster Gegevens ophalen>Lege query. Zie 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 de testsuite via een vereisten-gebaseerde testsuite, zoals besproken in de sectie van 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-template ondersteunt Feature en de Basic-template ondersteunt Epic als het respectieve type samengevoegd werkitem.

Kopieer en plak de volgende Power BI-query rechtstreeks in het Gegevens ophalen>Lege query-venster. Zie 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 vervangingsreeksen en queryanalyse

Vervang de volgende tekenreeksen door uw waarden. Gebruik geen haakjes {} 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 waarin je geïnteresseerd bent. Als u de GUID wilt opzoeken, raadpleegt u [.. /extend-analytics/wit-analytics.md#iterationsk](Retourneer de IterationSK voor een specifiek iteratiepad)
  • {areaSK} - GUID die is gekoppeld aan het relevante gebiedspad. Als u de GUID wilt opzoeken, raadpleegt u [../extend-analytics/wit-analytics.md#areask](Retourneer de AreaSK voor een specifieke Area Path).

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

Geeft alleen gegevens voor geselecteerde achterstandsvereisten-items onder de opgegeven iteratie en gebied.

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

Vouw de onderliggende items van Functies uit en retourneer gegevens voor Voltooid Werk en Resterend Werk van de werkitems.

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

Vouw de subitems van Kenmerken uit en filter op bug, groepeer de retourgegevens op staat en som het totale aantal subitems.

/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

Verzamel voltooid werk en resterend werk gegevens 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 werk.

Het tabelrapport maken

  1. Kies op het tabblad Modellering voor Relaties beheren en koppel de drie queryresultaten door middel van 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.

    Power BI selecteert Som als aggregatie

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

Schermopname van overzichtsrapport power BI-voorbeeldverhalen.