Beispielbericht zur Anforderungsnachverfolgung
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Mit dem Bericht zur Nachverfolgung von Anforderungen können Sie die Qualität der Arbeitsaufgaben nachverfolgen, die zur Kategorie "Anforderungen" gehören. Die Kategorie "Anforderungen" enthält Arbeitsaufgaben wie User Stories (Agile), Product Backlog Items (Scrum), Issues (Basic) und Requirements (CMMI). Weitere Informationen zu Arbeitsaufgabenkategorien finden Sie unter Nachverfolgen von Benutzergeschichten, Problemen, Fehlern und anderen Arbeitsaufgaben.
Die folgende Abbildung zeigt ein Beispiel für einen Bericht zur Nachverfolgung von Anforderungen.
In diesem Bericht werden die folgenden Informationen für jede Anforderung angezeigt, die sie auflistet:
- Prozentsatz abgeschlossener Arbeit: Statusanzeige, die den Prozentsatz der abgeschlossenen Arbeit basierend auf dem Rollup der abgeschlossenen Stunden für alle Vorgänge anzeigt, die mit der Anforderung verknüpft sind.
- Bestandene Tests: Die Anzahl der Testfälle, die basierend auf der letzten Testausführung bestanden werden.
- Fehlgeschlagene Tests: Die Anzahl der Testfälle, die basierend auf der letzten Testausführung fehlgeschlagen sind.
- Ausführen von Tests: Die Anzahl der ausgeführten Testläufe.
- Aktive Fehler: Die Anzahl der verknüpften Fehler in einem aktiven Zustand.
- Geschlossene Fehler: Die Anzahl der verknüpften Fehler in einem Zustand "Geschlossen", "Fertig" oder "Abgeschlossen".
Hinweis
Die Anforderungsnachverfolgung wird nur für Testfälle unterstützt, die über eine anforderungsbasierte Testsuite verknüpft sind. Die Zuordnung zwischen einer Anforderungsarbeitsaufgabe – User Story (Agile), Product Backlog Item (Scrum), Requirement (CMMI) oder Issue (Basic) – und der manuellen Testausführung wird nur gebildet, wenn der Testfall über eine anforderungsbasierte Testsuite verknüpft ist.
Fragen der Antworten auf den Bericht
Anforderungsnachverfolgungsberichte sind nützlich, um die folgenden Arten von Fragen zu beantworten.
Arbeitsfortschritt
- Entspricht die Arbeitsmenge, die für jede Anforderung verbleibt, Ihren Erwartungen?
- Werden die höchsten Anforderungen zuerst implementiert?
- Wie viele Tests sind für jede Anforderung definiert? Wie viele Tests bestehen?
- Welche Anforderungen werden implementiert, für die keine Testfälle definiert sind?
Qualitätsfortschritt
- Wie viele Testfälle wurden für jede Anforderung ausgeführt, und wie viele wurden bestanden?
- Wie viele aktive Fehler hat jede Anforderung?
- Werden Fehler für Anforderungen gefunden, die getestet werden?
- Werden Fehler behoben oder bleiben sie aktiv?
Risikobewertung
- Welche Anforderungen sind gefährdet?
- Welche Anforderungen sind für die Veröffentlichung nicht ausreichend stabil?
- Welche Anforderungen können wir heute versenden?
Wichtig
Power BI-Integration und Zugriff auf den OData-Feed des Analytics-Diensts sind in der Regel für Azure DevOps Services und Azure DevOps Server 2020 und höhere Versionen verfügbar. Die in diesem Artikel bereitgestellten Beispielabfragen gelten nur für Azure DevOps Server 2020 und höhere Versionen und hängen von version 3.0-preview oder höher ab. Wir empfehlen Ihnen, diese Abfragen zu verwenden und uns Feedback zu geben.
Voraussetzungen
- Access: Mitglied eines Projekts mit mindestens standardem Zugriff sein.
- Berechtigungen: Standardmäßig verfügen Projektmitglieder über die Berechtigung zum Abfragen von Analysen und Erstellen von Ansichten.
- Weitere Informationen zu anderen Voraussetzungen für die Dienst- und Featureaktivierung sowie allgemeine Datenverfolgungsaktivitäten finden Sie unter Berechtigungen und Voraussetzungen für den Zugriff auf Analytics.
Hinweis
In diesem Artikel wird davon ausgegangen, dass Sie eine Übersicht über Beispielberichte mit OData-Abfragen lesen und ein grundlegendes Verständnis von Power BI haben.
Damit der Bericht nützliche Daten generiert, müssen Sie die folgenden Aufgaben ausführen:
- Sie haben Anforderungsarbeitselemente definiert und diesen den Bereichen und Iterationspfaden von Interesse zugewiesen. Informationen zum Definieren von Bereichs- und Iterationspfaden finden Sie unter Definieren von Bereichspfaden und Definieren von Iterationspfaden.
- Um den Prozentsatz der Fertigstellung von Stunden zu erhalten, müssen Sie die Felder "Abgeschlossene Arbeit " und "Verbleibende Arbeit " von Vorgängen oder Fehlern ausfüllen, die mit den Anforderungen mit dem Typ "Untergeordneter Link" verknüpft sind.
- Um den Ausführungsstatus von Testfällen zu erhalten, haben Sie anforderungsbasierte Testsuiten in Testplänen erstellt, die diesen Anforderungen entsprechen. Inlinetests, die Sie über das Board hinzufügen, erfüllen diese Voraussetzung, jedoch die Anforderungen, die Sie mit Tests verknüpfen, nicht. Weitere Informationen finden Sie unter Erstellen von Testplänen und Testsuiten.
- Um den Status von Fehlern zu erhalten, haben Sie Fehler erstellt und mit den Anforderungen mit dem Typ " Untergeordneter Link" verknüpft.
Beispielabfragen
Um den Bericht zu generieren, müssen Sie drei Power BI-Abfragen zum Power BI-Desktop hinzufügen und diese dann verknüpfen. Jede Abfrage führt entweder den Satz oder TestPoints
den WorkItems
Entitätssatz aus.
Hinweis
Die in den folgenden Abschnitten bereitgestellten Power BI-Abfrageausschnitte umfassen die erforderlichen Datentransformationen zum Erweitern von Spalten und Ändern des Datentyps.
Hinweis
Informationen zum Ermitteln verfügbarer Eigenschaften für Filter- oder Berichtszwecke finden Sie unter Metadatenreferenz für Azure Boards. Sie können Ihre Abfragen filtern oder Eigenschaften zurückgeben, indem Sie einen der Werte unter oder NavigationPropertyBinding Path
EntityType
verwenden, die Property
mit einem EntitySet
verfügbar sind. Jede EntitySet
entspricht einem EntityType
. Weitere Informationen zum Datentyp der einzelnen Werte erhalten Sie in den Metadaten, die für den entsprechenden Wert EntityType
bereitgestellt werden.
Abfragebereichs- und Iterationspfade
Um den Bericht auf einen bestimmten Bereichs- und Iterationspfad zu beschränken, können Sie die Abfrage mithilfe von AreaSK und IterationSK filtern. Ausführliche Informationen finden Sie unter Definieren grundlegender Abfragen mit OData Analytics.
Abfragen des Prozentsatzes des Stundenabschlusses für Anforderungen
Hinweis
Die folgende Abfrage funktioniert für den Agile-Prozess, da er definiert und Completed Work
Felder in Arbeitsaufgaben definiertRemaining Work
.
Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.
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"
Abfrage zum Testausführungsstatus der Anforderungen
Hinweis
Informationen zum Ermitteln verfügbarer Eigenschaften für Filter- oder Berichtszwecke finden Sie in der Metadatenreferenz für Testpläne Analytics. Sie können Ihre Abfragen filtern oder Eigenschaften zurückgeben, indem Sie einen der Werte unter oder NavigationPropertyBinding Path
EntityType
verwenden, die Property
mit einem EntitySet
verfügbar sind. Jede EntitySet
entspricht einem EntityType
. Weitere Informationen zum Datentyp der einzelnen Werte erhalten Sie in den Metadaten, die für den entsprechenden Wert EntityType
bereitgestellt werden.
Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.
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"
Hinweis
Der TestSuite/RequirementWorkItem/...
Eintrag gibt an, dass die Arbeitsaufgabe über eine anforderungsbasierte Testsuite mit der Testsuite verknüpft werden muss, wie in den Voraussetzungen beschrieben.
Abfragen des Status von Fehlern, die mit den Anforderungen verknüpft sind
Kopieren Sie die folgende Power BI-Abfrage, und fügen Sie sie direkt in das Fenster "Leere Datenabfrage> abrufen" ein. Weitere Informationen finden Sie unter Übersicht über Beispielberichte mit OData-Abfragen.
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"
Ersetzungszeichenfolgen und Abfrageaufschlüsselung
Ersetzen Sie die folgenden Zeichenfolgen durch Ihre Werte. Schließen Sie keine Klammern {} in Ihre Ersetzung ein. Wenn Ihr Organisationsname beispielsweise "Fabrikam" lautet, ersetzen Sie {organization}
durch Fabrikam
, nicht {Fabrikam}
.
{organization}
- Name Ihrer Organisation{project}
- Der Name Ihres Projekts{iterationSK}
- Die GUID, die dem Iterationspfad von Interesse zugeordnet ist. Informationen zum Nachschlagen der GUID finden Sie unter [.. /extend-analytics/wit-analytics.md#iterationsk](IterationSK für einen bestimmten Iterationspfad zurückgeben){areaSK}
- Die GUID, die dem Bereichspfad von Interesse zugeordnet ist. Informationen zum Nachschlagen der GUID finden Sie unter [.. /extend-analytics/wit-analytics.md#areask](Return the AreaSK for a specific Area Path).
Abfrageaufschlüsselung
In der folgenden Tabelle werden die einzelnen Teile der Abfrage beschrieben.
Abfrageteil
Beschreibung
$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK}
)`
Gibt Daten nur für ausgewählte Iterations-, Flächen- und Backlogarbeitselemente zurück.
Processes/any(p:p/BacklogType eq 'RequirementBacklog')
Filtern Sie die Arbeitsaufgaben so, dass sie in die Kategorie "Anforderungen" fallen sollten, für mindestens einen Prozess, der ihnen zugeordnet ist.
Processes/all(p:p/IsBugType eq false)
Lassen Sie die Arbeitsaufgaben des Fehlertyps aus, während Sie Anforderungen erhalten. In der Standardprozessvorlage sind Problemarbeitselemente ebenfalls fehlertyp, daher entfernen Sie diese Klausel für den einfachen Prozess aus Ihrer Abfrage.
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) ) )
Gibt Daten nur für ausgewählte Anforderungen basierend auf Iteration und Bereich zurück.
/aggregate($count as TotalCount,
Aggregiert Daten über die gefilterten Testpunkte mit der Anzahl als TotalCount
.
cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as Passed
Beim Aggregieren werden Typ-Cast-Testpunkte mit dem neuesten Ausführungsergebnis "Passed" auf 1 und summieren sie als "Passed
" Metrik.
&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )
Gibt die Daten "Abgeschlossene Arbeit " und "Verbleibende Arbeit " für untergeordnete Arbeitselemente gefilterter übergeordneter Elemente zurück.
/aggregate( iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork, iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork
Aggregierte Arbeits- und Restarbeitsdaten für die gefilterten Arbeitsaufgaben.
)/compute( (SumCompletedWork add SumRemainingWork) as TotalWork, SumCompletedWork as SumCompleted
Berechnen des Gesamtrollups abgeschlossener Arbeit und verbleibender Arbeit.
)/compute( iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork )
Berechnen Sie den Prozentsatz der abgeschlossenen Wor.
Erstellen des Tabellenberichts
Führen Sie zum Erstellen des Berichts die folgenden Schritte aus:
- Wählen Sie auf der Registerkarte "Modellieren" Beziehungen verwalten aus, und verknüpfen Sie die drei Abfrageergebnisse nach
WorkItemId
Spalte. - Wählen Sie unter "Visualisierungen" die Option "Tabelle" aus.
- Fügen Sie die Spalten hinzu, an der Sie interessiert sind, aus den drei Power BI-Abfragen.
- Wählen Sie "Summe " als Aggregation für additive Spalten wie bestandene Tests usw. aus.
Ihr Bericht sollte ähnlich wie in der folgenden Abbildung aussehen.
Verwandte Artikel
- Erkunden von Beispielberichten mithilfe von OData-Abfragen
- Erstellen von OData-Abfragen für Analytics
- Herstellen einer Verbindung mit Power BI mithilfe von OData-Abfragen
- Informationen zu Metadaten für Azure Boards Analytics
- Access-Beispielberichte und Kurzübersichtsindex
- Hinzufügen eines Teamdatenschnitts zu einem vorhandenen Bericht