Udostępnij przez


Przykładowy raport podsumowujący śledzenie wymagań

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

Raport podsumowania śledzenia wymagań jest oparty na raporcie śledzenia wymagań i pokazuje, jak agregować metryki dla zestawienia na jednym poziomie. Na przykład, jeśli śledzisz wymagania za pomocą historii użytkownika, możesz agregować dane dla funkcjonalności, używając zapytań podanych w tym artykule.

Przykład pokazano na poniższej ilustracji.

Zrzut ekranu przedstawiający raport zbiorczy przeglądu Historii usługi Power BI.

Ten raport zawiera następujące informacje dotyczące każdego wymagania, które zawiera:

  • Procent ukończenia pracy: Pasek postępu przedstawiający procent ukończonej pracy na podstawie zestawienia ukończonych godzin pracy dla wszystkich zadań powiązanych z wymaganiem.
  • Zaliczone testy: liczba przypadków testowych, które zostały zaliczone na podstawie najnowszego przebiegu testu.
  • Nieudane testy: Liczba przypadków testowych, które zakończyły się niepowodzeniem na podstawie najnowszego przebiegu testu.
  • Uruchamianie testów: liczba wykonanych przebiegów testów.
  • Aktywne usterki: liczba usterek połączonych w stanie Aktywnym.
  • Zamknięte usterki: liczba powiązanych usterek w stanie Zamknięty, Gotowy lub Ukończony.

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ń — scenariuszem użytkownika (Agile), elementem listy prac produktu (Scrum), wymaganiem (CMMI) lub problemem (Basic) — a wykonywaniem testów ręcznych tworzy się tylko wtedy, gdy przypadek testowy jest połączony za pośrednictwem pakietu 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 ilość pracy, która pozostaje dla każdego z wymagań, odpowiada Twoim oczekiwaniom?
  • Czy najpierw wdrażane są najwyżej sklasyfikowane wymagania?
  • Ile testów jest zdefiniowanych dla każdego wymagania? Ile testów przechodzi?
  • Jakie wymagania są realizowane 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 wymagania 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 w warstwie podstawowej.
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 zapoznałeś się z przeglądem przykładowych raportów przy użyciu zapytań OData oraz masz podstawową wiedzę na temat usługi Power BI.

Aby raport wygenerował przydatne dane, należy wykonać następujące zadania:

  • Zdefiniowałeś wymagane elementy robocze i przypisałeś je do odpowiednich obszarów i ś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ć procent ukończenia godzin pracy, należy wypełnić pola Ukończona praca i Pozostała praca w zadaniach lub błędach, które są powiązane z wymaganiami za pomocą linku typu 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ą te wymagania wstępne, jednak wymagania powiązane z testami ich nie spełniają. Aby uzyskać więcej informacji, zobacz Tworzenie planów testów i zestawów testów.
  • Aby uzyskać stan usterek, musisz utworzyć i połączyć 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.

Obszar zapytań i ścieżki iteracji

Aby ograniczyć zakres raportu do określonej ścieżki obszaru i iteracji, możesz filtrować zapytanie przy użyciu elementów AreaSK i IterationSK. Aby uzyskać szczegółowe informacje, zobacz Definiowanie podstawowych zapytań przy użyciu usługi OData Analytics.

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 pod EntityType lub NavigationPropertyBinding Path wartości dostępnej przy 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 EntityTypeelementu .

Zapytanie dotyczące procentu ukończenia godzin dla wymagań

Uwaga

Zmień wartość WorkItemType na podstawie używanego procesu. Szablon Scrum obsługuje Funkcję, a szablon Podstawowy obsługuje Epik jako typ elementu roboczego odpowiednio.

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w okno 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/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"

Zapytanie dotyczące stanu wykonania testu wymagań

Uwaga

Aby określić dostępne właściwości do celów filtrowania lub raportowania, zobacz Odniesienie do metadanych dla analiz planów testów. Możesz filtrować zapytania lub zwracać właściwości, używając dowolnej z wartości Property pod EntityType lub NavigationPropertyBinding Path wartości dostępnej przy 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 EntityTypeelementu .

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w okno 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(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"

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

Uwaga

Zmień wartość WorkItemType na podstawie używanego procesu. Szablon Scrum obsługuje Funkcję, a szablon Podstawowy obsługuje Epik jako typ elementu roboczego odpowiednio.

Skopiuj i wklej następujące zapytanie usługi Power BI bezpośrednio w okno 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/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"

Ciągi podstawienia i podział zapytań

Zastąp następujące ciągi wartościami. Nie uwzględniaj nawiasów {} przy podstawianiu. 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 interesującą ścieżką iteracji. Aby wyszukać identyfikator GUID, zobacz [../extend-analytics/wit-analytics.md#iterationsk](Zwracanie IterationSK dla ścieżki iteracji określonej)
  • {areaSK} — Identyfikator GUID skojarzony ze ścieżką obszaru zainteresowania. Aby wyszukać identyfikator GUID, zobacz [../extend-analytics/wit-analytics.md#areask](Zwracanie wartości AreaSK dla określonej ś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} i WorkItemType równa się "Feature" )

Zwraca dane tylko dla funkcji w ramach określonej iteracji i obszaru.

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 elementów wymagań backlogu w ramach określonej iteracji i obszaru.

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

Rozwiń elementy podrzędne funkcji i zwróć dane dotyczące ukończonej pracy oraz pozostałej pracy dla elementów roboczych.

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

Rozwiń podręczne elementy funkcji i filtruj pod kątem usterek, pogrupuj zwracane dane według stanu i zsumuj całkowitą liczbę elementów podręcznych.

/aggregate($count as TotalCount,

Zagreguj dane w przefiltrowanych punktach testowych w oparciu o liczbę 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)

Podczas agregowania zsumuj wartości punktów testowych na podstawie ich najnowszego wyniku wykonania: Passed, Failed, Blocked, NotApplicable i None. Ponadto zsumuj wartości punktów testowych, których najnowszy wynik nie jest równy brakowi , aby uzyskać sumę RunCount.

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

Agreguj dane o wykonanej pracy i pozostałej pracy w filtrowanych elementach roboczych.

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

Oblicz całkowite zestawienie 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

  1. Na karcie Modelowanie wybierz pozycję Zarządzanie relacjami i połącz trzy wyniki zapytania według WorkItemId kolumny.
  2. W obszarze Wizualizacje wybierz pozycję Tabela.
  3. Dodaj interesujące Cię kolumny z trzech zapytań usługi Power BI.
  4. Wybierz pozycję Suma jako agregację dla kolumn addytywnych, takich jak zaliczone testy itp.

    Usługa Power BI wybierz pozycję Suma jako agregacja

Tutaj scenariusze uwierzytelniania to funkcja nadrzędna dwóch historii użytkownika.

Zrzut ekranu przedstawiający przykładowy raport przeglądowy historii w usłudze Power BI.