Sestava souhrnu sledování požadavků

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

Sestava Sledování požadavků vychází ze sestavy Sledování požadavků a ukazuje, jak agregovat metriky pro jednoúrovňové zavedení. Pokud například sledujete požadavky na uživatelské scénáře, můžete agregovat data pro funkce pomocí dotazů uvedených v tomto článku.

Příklad je znázorněn na následujícím obrázku.

Snímek obrazovky souhrnné sestavy s přehledem scénářů 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.

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.

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 .

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

Poznámka:

WorkItemType Změňte na základě procesu, který používáte. Šablona Scrum podporuje funkci a základní šablona podporuje Námět jako typ pracovní položky, v uvedeném pořadí.

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

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

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

Poznámka:

WorkItemType Změňte na základě procesu, který používáte. Šablona Scrum podporuje funkci a základní šablona podporuje Námět jako typ pracovní položky, v uvedeném pořadí.

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

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} a WorkItemType eq 'Feature' )'

Vrátí data pouze pro funkce v zadané iteraci a oblasti.

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é položky požadavků backlogu v zadané iteraci a oblasti.

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

Rozbalte podřízené položky funkcí a vraťte dokončenou práci a zbývající pracovní data pro pracovní položky.

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

Rozbalte podřízené položky funkcí a vyfiltrujte chyby, seskupte vrácená data podle státu a seskupte celkový počet podřízených položek.

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

Agregace sečte hodnoty testovacích bodů na základě jejich nejnovějšího výsledku spuštění předaného, neúspěšného, blokovaného, notapplicable a žádného. Součet hodnot testovacích bodů, jejichž nejnovější výsledek není roven Žádné získat celkový součet RunCount.

/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

  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.

Scénáře ověřování jsou nadřazenou funkcí dvou uživatelských scénářů.

Snímek obrazovky ukázkové sestavy s přehledem scénářů Power BI