Ukázková sestava sledování požadavků

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

Pomocí sestavy sledování požadavků můžete sledovat kvalitu pracovních položek, které patří do kategorie Požadavky. Kategorie Požadavky zahrnuje pracovní položky, jako jsou uživatelské scénáře (agilní), položky backlogu produktu (Scrum), problémy (základní) a požadavky (CMMI). Další informace o kategoriích pracovních položek najdete v tématu Sledování uživatelských scénářů, problémů, chyb a dalších pracovních položek.

Následující obrázek ukazuje příklad sestavy sledování požadavků.

Snímek obrazovky se sestavou sledování požadavků Power BI

Tato sestava zobrazí následující informace pro každý požadavek, který obsahuje:

  • Dokončená práce v procentech: Indikátor průběhu, který zobrazuje procento dokončené práce na základě souhrnu dokončených hodin pro všechny úkoly propojené s požadavkem.
  • Úspěšné testy: Počet úspěšných testovacích případů na základě posledního testovacího běhu.
  • Neúspěšné testy: Počet neúspěšných testovacích případů, které selhaly na základě posledního testovacího spuštění.
  • Spuštění testů: Počet spuštěných testovacích běhů.
  • Aktivní chyby: Počet propojených chyb v aktivním stavu.
  • Uzavřené chyby: Počet propojených chyb ve stavu Uzavřeno, Hotovo nebo Dokončeno.

Poznámka:

Sledování požadavků je podporováno pouze pro testovací případy propojené prostřednictvím sady testů založené na požadavcích. Přidružení mezi pracovní položkou požadavku – Uživatelský scénář (Agilní), Položka backlogu produktu (Scrum), Požadavek (CMMI) nebo Problém (Základní) – a ruční spuštění testu se vytvoří pouze v případě, že je testovací případ propojený prostřednictvím sady testů na základě požadavků.

Otázky týkající se odpovědí na sestavu

Sestavy sledování požadavků jsou užitečné pro odpovědi na následující typy otázek.

Průběh práce

  • Odpovídá množství práce, která zůstává pro každý požadavek, vašim očekáváním?
  • Jsou nejprve implementované požadavky s nejvyšším pořadím?
  • Kolik testů se definuje pro každý požadavek? Kolik testů se předává?
  • Jaké požadavky se implementují, které pro ně nejsou definované žádné testovací případy?

Průběh kvality

  • Kolik testovacích případů se spustilo pro každý požadavek a kolik jich uplynulo?
  • Kolik aktivních chyb má každý požadavek?
  • Zjistily se chyby týkající se požadavků, které se testují?
  • Řeší se chyby nebo zůstávají aktivní?

Posouzení rizik

  • Jaké požadavky jsou ohroženy?
  • Které požadavky nejsou dostatečně stabilní pro vydání?
  • Jaké požadavky můžeme dnes dodat?

Důležité

Integrace Power BI a přístup k datovému kanálu OData služby Analytics jsou obecně dostupné pro Azure DevOps Services a Azure DevOps Server 2020 a novější verze. Ukázkové dotazy uvedené v tomto článku jsou platné pouze pro Azure DevOps Server 2020 a novější verze a závisí na verzi v3.0-Preview nebo novější. Doporučujeme, abyste tyto dotazy používali a poskytli nám zpětnou vazbu.

Požadavky

  • Pokud chcete zobrazit data Analýzy a dotazovat se na službu, musíte být členem projektu se základním přístupem nebo novějším. Ve výchozím nastavení mají všichni členové projektu udělená oprávnění k dotazování analýzy a definování zobrazení Analýzy.
  • Další informace o dalších požadavcích týkajících se povolení služeb a funkcí a obecných aktivit sledování dat najdete v tématu Oprávnění a požadavky pro přístup k Analýzám.

Poznámka:

Tento článek předpokládá, že jste si přečetli přehled ukázkových sestav pomocí dotazů OData a máte základní znalosti o Power BI.

Aby sestava vygenerovala užitečná data, musíte provést následující úlohy:

  • Definovali jste pracovní položky požadavku a přiřadili je k oblasti a cestám iterace, které vás zajímají. Informace o tom, jak definovat cesty oblasti a iterace, naleznete v tématu Definování cest oblasti a definování cest iterace.
  • Pokud chcete získat procento dokončení hodin, musíte vyplnit pole Dokončená práce a Zbývající práce úkolů nebo chyb propojených s požadavky typu Podřízené propojení.
  • Pokud chcete získat stav provádění testovacích případů, vytvoříte testovací sady založené na požadavcích v testovacích plánech odpovídajících těmto požadavkům. Vložené testy, které přidáte přes panel Kanban, vyhovují tomuto požadavku, ale požadavky, které propojujete s testy, ne. Další informace najdete v tématu Vytvoření testovacích plánů a sad testů.
  • Pokud chcete získat stav chyb, vytvoříte a propojíte chyby s požadavky s typem podřízeného odkazu.

Vzorové dotazy

Pokud chcete vygenerovat sestavu, musíte do Power BI Desktopu přidat tři dotazy Power BI a pak je propojit. Každý dotaz provede WorkItems buď sadu entit, nebo TestPoints sadu entit.

Poznámka:

Fragmenty dotazů Power BI uvedené v následujících částech zahrnují požadované transformace dat pro rozbalení sloupců a změnu datového typu.

Poznámka:

Informace o dostupných vlastnostech pro účely filtru nebo sestavy najdete v referenčních informacích k metadatům pro Azure Boards. Dotazy můžete filtrovat nebo vracet vlastnosti pomocí libovolné hodnoty Property pod hodnotami nebo NavigationPropertyBinding Path hodnotami dostupnými v objektu EntitySetEntityType . Každý EntitySet odpovídá hodnotě EntityType. Další informace o datovém typu každé hodnoty najdete v metadatech zadaných pro odpovídající EntityTypehodnotu .

Oblasti dotazů a cesty iterace

Pokud chcete nastavit rozsah sestavy na konkrétní oblast a cestu iterace, můžete dotaz filtrovat pomocí AreaSK a IterationSK. Podrobnosti najdete v tématu Definování základních dotazů pomocí OData Analytics.

Dotaz na procento dokončení hodin pro požadavky

Poznámka:

Následující dotaz funguje pro agilní proces, protože definuje Remaining Work a Completed Work pole v pracovních položkách.

Dotaz Power BI uvedený níže můžete vložit přímo do okna Získat prázdný dotaz dat>. Další informace najdete v přehledu ukázkových sestav pomocí dotazů OData.

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"

Dotaz na stav spuštění testu požadavků

Poznámka:

Informace o určení dostupných vlastností pro účely filtru nebo sestavy najdete v referenčních informacích k metadatům pro analýzu testovacích plánů. Dotazy můžete filtrovat nebo vracet vlastnosti pomocí libovolné hodnoty Property pod hodnotami nebo NavigationPropertyBinding Path hodnotami dostupnými v objektu EntitySetEntityType . Každý EntitySet odpovídá hodnotě EntityType. Další informace o datovém typu každé hodnoty najdete v metadatech zadaných pro odpovídající EntityTypehodnotu .

Dotaz Power BI uvedený níže můžete vložit přímo do okna Získat prázdný dotaz dat>. Další informace najdete v přehledu ukázkových sestav pomocí dotazů OData.

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"

Poznámka:

Položka TestSuite/RequirementWorkItem/... označuje, že pracovní položka musí být propojena s testovací sadou prostřednictvím testovacích sad založených na požadavcích, jak je popsáno v požadavcích.

Dotaz na stav chyb propojených s požadavky

Dotaz Power BI uvedený níže můžete vložit přímo do okna Získat prázdný dotaz dat>. Další informace najdete v přehledu ukázkových sestav pomocí dotazů OData.

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"

Náhradní řetězce a rozpis dotazů

Nahraďte následující řetězce hodnotami. Nezahrnujte do náhradních závorek {} . Pokud je například název vaší organizace "Fabrikam", nahraďte {organization} ho Fabrikam, nikoli {Fabrikam}.

  • {organization} – Název vaší organizace
  • {project} - Název projektu
  • {iterationSK}– IDENTIFIKÁTOR GUID přidružený k cestě iterace zájmu. Pokud chcete vyhledat identifikátor GUID, podívejte se na [.. /extend-analytics/wit-analytics.md#iterationsk](Vrátí iteraciSK pro konkrétní cestu iterace).
  • {areaSK} - IDENTIFIKÁTOR GUID přidružený k cestě oblasti zájmu. Pokud chcete vyhledat identifikátor GUID, podívejte se na [.. /extend-analytics/wit-analytics.md#areask](Vrátí oblastSK pro konkrétní cestu k oblasti).

Rozpis dotazů

Následující tabulka popisuje jednotlivé části dotazu.

Část dotazování

Popis


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

Vrátí data pouze pro vybrané pracovní položky iterace, oblasti a backlogu.

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

Vyfiltrujte pracovní položky takovým způsobem, aby měly spadat do kategorie "požadavky" pro alespoň jeden proces, který je k nim přidružený.

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

Při získávání požadavků vynecháte pracovní položky typu chyby. V šabloně základního procesu jsou pracovní položky problému také typu chyby, takže pro základní proces odeberte tuto klauzuli z dotazu.

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

Vrátí data pouze pro vybrané požadavky na základě iterace a oblasti.

/aggregate($count as TotalCount,

Agregujte data napříč filtrovanými testovacími body s počtem jako TotalCount.

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

Při agregaci mají testovací body přetypování typu nejnovější výsledek provedení "Předáno" na 1 a sečtou je jako metriku 'Passed'.

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

Vrátí dokončená práce a zbývající pracovní data pro podřízené pracovní položky filtrovaných nadřazených položek.

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

Agregace dokončené práce a zbývajících dat práce napříč filtrovanými pracovními položkami

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

Vypočítá celkový souhrn dokončené práce a zbývající práce.

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

Vypočítejte procento dokončeného woru.

Vytvoření sestavy tabulky

Pokud chcete vytvořit sestavu, proveďte následující kroky:

  1. Na kartě Modelování zvolte Správa relací a propojte tři výsledky dotazu podle WorkItemId sloupce.
  2. V části Vizualizace zvolte Tabulka.
  3. Přidejte sloupce, které vás zajímají, ze tří dotazů Power BI.
  4. Vyberte Součet jako agregaci pro sčítání sloupců, jako jsou úspěšné testy atd.

    Power BI vyberte Součet jako agregaci.

Sestava by měla vypadat podobně jako na následujícím obrázku.

Snímek obrazovky se sestavou sledování požadavků Power BI