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ů.
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
- Přístup: Buďte členem projektu s alespoň základním přístupem.
- Oprávnění: Ve výchozím nastavení mají členové projektu oprávnění k dotazování na Analýzy a vytváření zobrazení.
- 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 si přečtete 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, splňují tyto požadavky, ale požadavky, které propojujete na 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 EntitySet
EntityType
. 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í EntityType
hodnotu .
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.
Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled 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 EntitySet
EntityType
. 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í EntityType
hodnotu .
Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled 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
Zkopírujte a vložte následující dotaz Power BI přímo do okna Získat>prázdné dotazy . Další informace najdete v tématu Přehled 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:
- Na kartě Modelování zvolte Správa relací a propojte tři výsledky dotazu podle
WorkItemId
sloupce. - V části Vizualizace zvolte Tabulka.
- Přidejte sloupce, které vás zajímají, ze tří dotazů Power BI.
- Vyberte Součet jako agregaci pro sčítání sloupců, jako jsou úspěšné testy atd.
Sestava by měla vypadat podobně jako na následujícím obrázku.