Beispielbericht zum Nachverfolgen von Anforderungen für das Rollup
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Der Bericht über die Anforderungsnachverfolgung baut auf dem Bericht zur Überwachung von Anforderungen auf und zeigt, wie Metriken für ein Rollup auf einer Ebene aggregiert werden. Wenn Sie beispielsweise Anforderungen mit User Stories nachverfolgen, können Sie Daten für Features mithilfe der in diesem Artikel bereitgestellten Abfragen aggregieren.
In der folgenden Abbildung ist ein Beispiel angegeben.
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.
Abfragebereichs- und Iterationspfade
Um den Bericht auf einen bestimmten Bereichs- und Iterationspfad zu beschränken, können Sie die Abfrage mithilfe AreaSK
und IterationSK
. Ausführliche Informationen finden Sie unter Definieren grundlegender Abfragen mit OData Analytics.
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.
Abfragen des Prozentsatzes des Stundenabschlusses für Anforderungen
Hinweis
Ändern Sie den WorkItemType
prozessbasierten Vorgang, den Sie verwenden. Die Scrum-Vorlage unterstützt Feature und die Vorlage "Basic" unterstützt Epic als Rollup-Arbeitsaufgabentyp.
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 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"
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(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"
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
Hinweis
Ändern Sie den WorkItemType
prozessbasierten Vorgang, den Sie verwenden. Die Scrum-Vorlage unterstützt Feature und die Vorlage "Basic" unterstützt Epic als Rollup-Arbeitsaufgabentyp.
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 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"
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}
und WorkItemType eq 'Feature' )'
Gibt Daten nur für Features unter der angegebenen Iteration und dem angegebenen Bereich zurück.
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 Backloganforderungselemente unter der angegebenen Iteration und dem angegebenen Bereich zurück.
&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )
Erweitern Sie die untergeordneten Elemente von Features, und geben Sie "Abgeschlossene Arbeit" und "Verbleibende Arbeit" für die Arbeitsaufgaben zurück.
&$expand=Descendants( $apply=filter( WorkItemType eq 'Bug' ) /groupby( (State), aggregate($count as Count) )
Erweitern Sie die untergeordneten Elemente von Features und filtern Sie nach Fehler, gruppieren Sie die Rückgabedaten nach Status, und sonnen Sie die Gesamtanzahl der untergeordneten Elemente.
/aggregate($count as TotalCount,
Aggregiert Daten über die gefilterten Testpunkte mit der Anzahl als 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)
Beim Aggregieren summieren Sie die Werte von Testpunkten basierend auf dem neuesten Ausführungsergebnis von "Bestanden", "Fehlgeschlagen", "Blockiert", "NotApplicable" und "None". Addieren Sie außerdem die Werte der Testpunkte, deren neuestes Ergebnis nicht gleich "None" ist, um die Summe RunCount
zu erhalten.
/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
- 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.
Hierbei handelt es sich bei Authentifizierungsszenarien um ein übergeordnetes Feature von zwei Benutzergeschichten.
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