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 dowiedzieć się więcej 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ń.

Zrzut ekranu przedstawiający raport śledzenia wymagań usługi Power BI.

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

  • Ukończono pracę procentową: pasek postępu przedstawiający procent ukończonej pracy na podstawie zestawienia ukończonych godzin dla wszystkich zadań połączonych z wymaganiem.
  • Testy z powodzeniem: liczba przebiegów przypadków testowych, które są przekazywane na podstawie ostatniego przebiegu testu.
  • Testy zakończonych niepowodzeniem: liczba przebiegów przypadków testowych zakończonych niepowodzeniem w oparciu o najnowszy przebieg testu.
  • Uruchamianie testów: liczba wykonanych przebiegów testów.
  • Aktywne usterki: liczba połączonych usterek w stanie Aktywny.
  • 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ń — scenariuszem użytkownika (Agile), elementem listy prac produktu (Scrum), wymaganiem (CMMI) lub problemem (podstawowe) — a wykonywanie testów ręcznych jest tworzone tylko wtedy, gdy przypadek testowy jest połączony za pośrednictwem zestawu 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 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 przechodzi?
  • Jakie wymagania są implementowane, które nie mają 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.

Wymagania wstępne

  • Aby wyświetlić dane analizy i wykonać zapytanie dotyczące usługi, musisz być członkiem projektu z dostępem podstawowym lub większym. Domyślnie wszyscy członkowie projektu otrzymują uprawnienia do wykonywania zapytań w usłudze Analytics i definiowania widoków analizy.
  • Aby dowiedzieć się więcej o innych wymaganiach 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 znasz artykuł Omówienie przykładowych raportów przy użyciu zapytań OData i masz podstawową wiedzę na temat usługi Power BI.

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

  • Zdefiniowano wymagane elementy robocze i przypisano je do obszaru 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, należy wypełnić pola Ukończona praca i Pozostała praca zadań lub usterek powiązanych z wymaganiami z typem linku 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. Testy wbudowane dodawane za pośrednictwem tablicy Kanban spełniają te wymagania wstępne, jednak wymagania, które nie są linkami do testów. Aby dowiedzieć się więcej, zobacz Tworzenie planów testów i zestawów testów.
  • Aby uzyskać stan usterek, utworzysz i połączysz usterki z wymaganiami z typem 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 WorkItems zestaw jednostek 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 przy użyciu dowolnej z Property wartości dostępnych EntityType w elemecie EntitySetlub NavigationPropertyBinding Path . Każda z nich EntitySet odpowiada elementowi EntityType. Aby dowiedzieć się więcej o typie danych każdej wartości, przejrzyj metadane podane dla odpowiedniego EntityTypeelementu .

Ścieżki iteracji i obszaru zapytania

Aby ograniczyć zakres raportu do określonej ścieżki obszaru i iteracji, możesz filtrować zapytanie przy użyciu warstw 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 Remaining Work on pola i Completed Work w elementach roboczych.

Możesz wkleić zapytanie usługi Power BI wymienione poniżej bezpośrednio w oknie Pobieranie zapytania pustego> danych. 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 metadanych dla analiz planów testów. Możesz filtrować zapytania lub zwracać właściwości przy użyciu dowolnej z Property wartości dostępnych EntityType w elemecie EntitySetlub NavigationPropertyBinding Path . Każda z nich EntitySet odpowiada elementowi EntityType. Aby dowiedzieć się więcej o typie danych każdej wartości, przejrzyj metadane podane dla odpowiedniego EntityTypeelementu .

Możesz wkleić zapytanie usługi Power BI wymienione poniżej bezpośrednio w oknie Pobieranie zapytania pustego> danych. 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 wymaganiach wstępnych.

Zapytanie o stan usterek połączonych z wymaganiami

Możesz wkleić zapytanie usługi Power BI wymienione poniżej bezpośrednio w oknie Pobieranie zapytania pustego> danych. 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 {} do podstawienia. Na przykład jeśli nazwa organizacji to "Fabrikam", zastąp Fabrikamciąg {organization} , a nie {Fabrikam}.

  • {organization} — Nazwa organizacji
  • {project} - Nazwa projektu
  • {iterationSK}- Identyfikator GUID skojarzony ze ścieżką iteracji zainteresowania. Aby wyszukać identyfikator GUID, zobacz [.. /extend-analytics/wit-analytics.md#iterationsk](Zwracanie iteracjiSK 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óć obszarSK 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} )'

Zwraca dane tylko dla wybranych elementów roboczych iteracji, obszaru i listy prac.

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 typu usterki podczas uzyskiwania 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 z liczbą jako TotalCount.

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

Podczas agregowania punkty testowe rzutowania typu mają najnowszy wynik wykonania "Passed" do 1 i sumują je jako metrykę "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

Zagregowane ukończone prace i pozostałe dane pracy w filtrowanych elementach roboczych.

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

Oblicz łączny pakiet zbiorczy 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 wor.

Tworzenie raportu tabeli

Aby utworzyć raport, wykonaj następujące kroki:

  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 agregacja dla kolumn addytywnej, takich jak testy z powodzeniem itp.

    Usługa Power BI wybierz pozycję Suma jako agregacja

Raport powinien wyglądać podobnie do poniższej ilustracji.

Zrzut ekranu przedstawiający raport śledzenia wymagań usługi Power BI