Voorbeeldrapport voor het bijhouden van vereisten

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

U kunt de kwaliteit van werkitems bijhouden die deel uitmaken van de categorie Vereisten met het rapport Voor het bijhouden van vereisten. De categorie Vereisten omvat werkitems zoals User Stories (Agile), Product Backlog Items (Scrum), Issues (Basic) en Requirements (CMMI). Zie Gebruikersverhalen, problemen, bugs en andere werkitems bijhouden voor meer informatie over categorieën werkitems.

In de volgende afbeelding ziet u een voorbeeld van een rapport voor het bijhouden van vereisten.

Schermopname van het rapport Voor het bijhouden van Power BI-vereisten.

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.

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.

Querygebied en iteratiepaden

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

Query uitvoeren op voltooiingspercentage van uren voor vereisten

Notitie

De volgende query werkt voor het Agile-proces, omdat deze velden in werkitems definieert Remaining Work en Completed Work opgeeft.

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

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(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"

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

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

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

Retourneert alleen gegevens voor geselecteerde iteratie-, gebied- en achterstandsitems.

Processes/any(p:p/BacklogType eq 'RequirementBacklog')

Filter de werkitems zodanig dat ze in de categorie Vereisten moeten vallen voor ten minste één proces dat eraan is gekoppeld.

Processes/all(p:p/IsBugType eq false)

Laat de fouttype werkitems weg tijdens het verkrijgen van vereisten. In de basisprocessjabloon zijn werkitems van probleem ook van het type bug, dus voor het Basic-proces wordt deze component uit uw query verwijderd.

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

Gegevens retourneren voor alleen geselecteerde vereisten op basis van iteratie en gebied.

/aggregate($count as TotalCount,

Geaggregeerde gegevens over de gefilterde testpunten met het aantal als TotalCount.

cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as Passed

Tijdens het aggregeren worden testpunten met typecast-testpunten met het meest recente uitvoeringsresultaat 'Doorgegeven' aan 1 en opgeteld als 'Passed' metrische gegevens.

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

Hiermee worden voltooide werk- en resterende werkgegevens geretourneerd voor onderliggende werkitems van gefilterde bovenliggende items.

/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

Voer de volgende stappen uit om het rapport te 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

Uw rapport moet er ongeveer uitzien als in de volgende afbeelding.

Schermopname van het rapport Voor het bijhouden van Power BI-vereisten