Przykładowy raport dotyczący śledzenia wymagań
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Jakość elementów roboczych należących do kategorii Wymagania można śledzić za pomocą raportu śledzenia wymagań. Kategoria Wymagania zawiera elementy robocze, takie jak Scenariusze użytkownika (Agile), Elementy listy prac produktu (Scrum), Problemy (Podstawowe) i Wymagania (CMMI). Aby uzyskać więcej informacji na temat kategorii elementów roboczych, zobacz Śledzenie historii użytkowników, problemów, usterek i innych elementów roboczych.
Na poniższej ilustracji przedstawiono przykład raportu śledzenia wymagań.
Ten raport zawiera następujące informacje dotyczące każdego wymagania, które zawiera:
- Procent ukończonej pracy: pasek postępu pokazujący procent ukończenia pracy na podstawie sumowania ukończonych godzin dla wszystkich zadań połączonych z wymaganiem.
- Zaliczone testy: liczba przypadków testowych, które zostały zdane na podstawie ostatniego przebiegu testu.
- Nieudane testy: liczba przypadków testowych, które nie powiodły się w oparciu o najnowszy przebieg testu.
- Uruchamianie testów: liczba wykonanych przebiegów testów.
- Aktywne usterki: liczba połączonych usterek w aktywnym stanie.
- Zamknięte usterki: liczba połączonych usterek w stanie Zamknięte, Gotowe lub Ukończono.
Uwaga
Śledzenie wymagań jest obsługiwane tylko w przypadku przypadków testowych połączonych za pomocą zestawu testów opartego na wymaganiach. Skojarzenie między elementem roboczym wymagań — Historią użytkownika (Agile), Elementem backlogu produktu (Scrum), wymaganiem (CMMI) lub problemem (Podstawowe) — a wykonaniem testów ręcznych jest tworzone tylko wtedy, gdy przypadek testowy jest połączony poprzez zestaw testów opartych na wymaganiach.
Pytania dotyczące odpowiedzi na raport
Raporty śledzenia wymagań są przydatne do odpowiadania na następujące typy pytań.
Postęp pracy
- Czy pozostała ilość pracy dla każdego wymagania odpowiada Twoim oczekiwaniom?
- Czy najpierw wdrażane są najwyżej sklasyfikowane wymagania?
- Ile testów jest zdefiniowanych dla każdego wymagania? Ile testów zdaje?
- Jakie wymagania są wdrażane bez zdefiniowanych przypadków testowych?
Postęp jakości
- Ile przypadków testowych zostało uruchomionych dla każdego wymagania i ile przebiegło?
- Ile aktywnych usterek ma każde wymaganie?
- Czy znaleziono usterki pod kątem wymagań, które są testowane?
- Czy usterki są rozwiązywane, czy pozostają aktywne?
Ocena ryzyka
- Jakie wymagania są zagrożone?
- Które wymagania nie są wystarczająco stabilne dla wydania?
- Które zamówienia możemy wysłać dzisiaj?
Ważne
Integracja usługi Power BI i dostęp do źródła danych OData usługi Analytics są ogólnie dostępne dla usług Azure DevOps Services i Azure DevOps Server 2020 i nowszych wersji. Przykładowe zapytania podane w tym artykule są prawidłowe tylko w przypadku usługi Azure DevOps Server 2020 i nowszych wersji oraz zależą od wersji 3.0 w wersji zapoznawczej lub nowszej. Zachęcamy do korzystania z tych zapytań i przekazywania opinii.
Kategoria | Wymagania |
---|---|
poziomy dostępu |
-
Członek projektu. — Co najmniej dostęp poziomu Podstawowego. |
Uprawnienia użytkownika | Domyślnie członkowie projektu mają uprawnienia do wykonywania zapytań w usłudze Analytics i tworzenia widoków. Aby uzyskać więcej informacji na temat innych wymagań wstępnych dotyczących włączania usługi i funkcji oraz ogólnych działań śledzenia danych, zobacz Uprawnienia i wymagania wstępne dotyczące dostępu do analizy. |
Uwaga
W tym artykule założono, że zapoznasz się z Omówieniem przykładowych raportów z użyciem zapytań OData i masz podstawową wiedzę na temat usługi Power BI.
Aby raport wygenerował przydatne dane, należy wykonać następujące zadania:
- Przez Ciebie zostały zdefiniowane wymagane elementy robocze i przypisane do odpowiednich obszarów oraz interesujących ścieżek iteracji. Aby uzyskać informacje o sposobie definiowania ścieżek obszaru i iteracji, zobacz Definiowanie ścieżek obszaru i Definiowanie ścieżek iteracji.
- Aby uzyskać procentowe ukończenie godzin, należy wypełnić pola Ukończona praca i Pozostała praca dla zadań lub usterek powiązanych z wymaganiami z typem łącza Podrzędne.
- Aby uzyskać stan wykonywania przypadków testowych, należy utworzyć zestawy testów oparte na wymaganiach w planach testów odpowiadających tym wymaganiom. Wbudowane testy dodawane za pośrednictwem tablicy spełniają ten warunek wstępny, jednak wymagania, które łączysz z testami, nie spełniają tego. Aby uzyskać więcej informacji, zobacz Tworzenie planów testów i zestawów testów.
- Aby uzyskać status usterek, musisz mieć utworzone i połączone usterki z wymaganiami za pomocą typu linku Podrzędne.
Przykładowe zapytania
Aby wygenerować raport, musisz dodać trzy zapytania usługi Power BI do programu Power BI Desktop, a następnie połączyć je. Każde zapytanie wykonuje zestaw jednostek WorkItems
lub TestPoints
.
Uwaga
Fragmenty zapytań usługi Power BI podane w poniższych sekcjach zawierają wymagane przekształcenia danych w celu rozwinięcia kolumn i zmiany typu danych.
Uwaga
Aby określić dostępne właściwości dla celów filtru lub raportu, zobacz Dokumentacja metadanych dla usługi Azure Boards. Możesz filtrować zapytania lub zwracać właściwości, używając dowolnej z wartości Property
dostępnych w ramach EntityType
lub NavigationPropertyBinding Path
, dostępnych wraz z EntitySet
. Każda z nich EntitySet
odpowiada elementowi EntityType
. Aby uzyskać więcej informacji na temat typu danych każdej wartości, zapoznaj się z metadanymi podanymi dla odpowiedniego EntityType
elementu .
Obszar zapytań i ścieżki iteracji
Aby ograniczyć zakres raportu do określonego Obszaru i ścieżki Iteracji, możesz filtrować zapytanie przy użyciu filtrów AreaSK i IterationSK. Aby uzyskać szczegółowe informacje, zobacz Definiowanie podstawowych zapytań przy użyciu usługi OData Analytics.
Zapytanie dotyczące procentu ukończenia godzin dla wymagań
Uwaga
Poniższe zapytanie działa dla procesu Agile, ponieważ definiuje pola Remaining Work
i Completed Work
w elementach roboczych.
Skopiuj i wklej następujące zapytanie Power BI bezpośrednio w oknie Pobierz dane w sekcji Puste zapytanie. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań 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"
Zapytanie dotyczące stanu wykonania testu wymagań
Uwaga
Aby określić dostępne właściwości dla celów filtru lub raportu, zobacz Dokumentacja referencyjna metadanych dotycząca analiz planów testowych. Możesz filtrować swoje zapytania lub zwracać właściwości, używając dowolnych wartości z Property
, które znajdują się pod EntityType
lub NavigationPropertyBinding Path
, albo są dostępne w elemencie EntitySet
. Każda z nich EntitySet
odpowiada elementowi EntityType
. Aby uzyskać więcej informacji na temat typu danych każdej wartości, zapoznaj się z metadanymi podanymi dla odpowiedniego EntityType
elementu .
Skopiuj i wklej następujące zapytanie Power BI bezpośrednio do okna Pobierz dane>Puste zapytanie. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań 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"
Uwaga
Wpis TestSuite/RequirementWorkItem/...
wskazuje, że element roboczy musi być połączony z zestawem testów za pośrednictwem zestawów testów opartych na wymaganiach zgodnie z opisem w sekcji wymagań wstępnych.
Zapytanie o stan usterek połączonych z wymaganiami
Skopiuj i wklej następujące zapytanie Power BI bezpośrednio do okna Pobierz dane>Pustego zapytania. Aby uzyskać więcej informacji, zobacz Omówienie przykładowych raportów przy użyciu zapytań 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"
Ciągi podstawienia i podział zapytań
Zastąp następujące ciągi wartościami. Nie dołączaj nawiasów {} przy zamianie. Na przykład jeśli nazwa organizacji to "Fabrikam", zastąp {organization}
ciąg Fabrikam
, a nie {Fabrikam}
.
-
{organization}
— Nazwa organizacji -
{project}
- Nazwa projektu -
{iterationSK}
- Identyfikator GUID skojarzony z Ścieżką Iteracji, która nas interesuje. Aby wyszukać identyfikator GUID, zobacz [../extend-analytics/wit-analytics.md#iterationsk](Zwróć IterationSK dla określonej ścieżki iteracji) -
{areaSK}
— Identyfikator GUID skojarzony ze ścieżką obszaru zainteresowania. Aby wyszukać identyfikator GUID, zobacz [../extend-analytics/wit-analytics.md#areask](Zwróć AreaSK dla danej ścieżki obszaru).
Podział zapytań
W poniższej tabeli opisano każdą część zapytania.
Część kwerendy
Opis
$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK}
)`
Zwraca dane tylko dla wybranych elementów roboczych iteracji, obszaru i backlogu.
Processes/any(p:p/BacklogType eq 'RequirementBacklog')
Przefiltruj elementy robocze w taki sposób, aby mieściły się w kategorii "wymagania" dla co najmniej jednego skojarzonego z nimi procesu.
Processes/all(p:p/IsBugType eq false)
Pomiń elementy robocze związane z usterkami przy zbieraniu wymagań. W szablonie podstawowego procesu elementy robocze problemu są również typu usterki, więc w przypadku procesu podstawowego usuń tę klauzulę z zapytania.
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) ) )
Zwraca dane tylko dla wybranych wymagań na podstawie iteracji i obszaru.
/aggregate($count as TotalCount,
Agregowanie danych w przefiltrowanych punktach testowych, gdzie liczba wynosi TotalCount
.
cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as Passed
Podczas agregowania, punkty testowe, których najnowszy wynik wykonania to "Passed", są rzutowane do wartości 1 i sumowane jako metryka "Passed
".
&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )
Zwraca dane ukończonej pracy i pozostałej pracy dla podrzędnych elementów roboczych filtrowanych elementów nadrzędnych.
/aggregate( iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork, iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork
Zagreguj dane zrealizowanych prac i pozostałych prac w filtrowanych elementach roboczych.
)/compute( (SumCompletedWork add SumRemainingWork) as TotalWork, SumCompletedWork as SumCompleted
Oblicz całkowite zsumowanie ukończonej pracy i pozostałej pracy.
)/compute( iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork )
Oblicz procent ukończonej pracy.
Utwórz raport tabeli
Aby utworzyć raport, wykonaj następujące kroki:
-
Na karcie Modelowanie wybierz pozycję Zarządzanie relacjami i połącz trzy wyniki zapytania według
WorkItemId
kolumny. - W obszarze Wizualizacje wybierz pozycję Tabela.
- Dodaj interesujące Cię kolumny z trzech zapytań usługi Power BI.
- Wybierz Sumę jako agregację dla kolumn addytywnych, takich jak zaliczone testy itp.
Raport powinien wyglądać podobnie do poniższej ilustracji.
Powiązane artykuły
- Eksplorowanie przykładowych raportów przy użyciu zapytań OData
- Konstruowanie zapytań OData na potrzeby analizy
- Nawiązywanie połączenia z usługą Power BI przy użyciu zapytań OData
- Zapoznaj się z metadanymi usługi Azure Boards Analytics
- Uzyskiwanie dostępu do przykładowych raportów i szybkiego indeksu referencyjnego
- Dodaj segmentator zespołu do istniejącego raportu