Report di esempio di rilevamento dei requisiti
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
È possibile tenere traccia della qualità degli elementi di lavoro appartenenti alla categoria Requisiti con il report di rilevamento dei requisiti. La categoria Requisiti include elementi di lavoro come Storie utente (Agile), Elementi backlog prodotto (Scrum), Problemi (Base) e Requisiti (CMMI). Per altre informazioni sulle categorie di elementi di lavoro, vedere Tenere traccia di storie utente, problemi, bug e altri elementi di lavoro.
L'immagine seguente mostra un esempio di report di rilevamento dei requisiti.
Questo report visualizza le informazioni seguenti per ogni requisito elencato:
- Percentuale di lavoro completata: indicatore di stato che mostra la percentuale di lavoro completato in base al rollup delle ore completate per tutte le attività collegate al requisito.
- Test superati: numero di test case eseguiti che vengono superati in base all'esecuzione del test più recente.
- Test non superati: numero di test case eseguiti non riusciti in base all'esecuzione del test più recente.
- Eseguire test: numero di esecuzioni di test eseguite.
- Bug attivi: numero di bug collegati in uno stato Attivo.
- Bug chiusi: numero di bug collegati in uno stato Chiuso, Completato o Completato.
Nota
Il rilevamento dei requisiti è supportato solo per i test case collegati tramite un gruppo di test basato su requisiti. L'associazione tra un elemento di lavoro requisito( User Story (Agile), Product Backlog Item (Scrum), Requirement (CMMI) o Issue (Basic) e l'esecuzione manuale del test viene formata solo quando il test case viene collegato tramite un gruppo di test basato su requisiti.
Domande sulle risposte al report
I report di rilevamento dei requisiti sono utili per rispondere ai tipi di domande seguenti.
Avanzamento del lavoro
- La quantità di lavoro che rimane per ogni requisito corrisponde alle aspettative?
- I requisiti di primo livello vengono implementati per primi?
- Quanti test vengono definiti per ogni requisito? Quanti test vengono superati?
- Quali requisiti vengono implementati senza test case definiti per loro?
Stato di avanzamento della qualità
- Quanti test case sono stati eseguiti per ogni requisito e quanti sono stati superati?
- Quanti bug attivi hanno ogni requisito?
- Vengono rilevati bug per i requisiti da testare?
- I bug vengono risolti o rimangono attivi?
Valutazione dei rischi
- Quali requisiti sono a rischio?
- Quali requisiti non sono sufficientemente stabili per il rilascio?
- Quali requisiti possiamo spedire oggi?
Importante
L'integrazione di Power BI e l'accesso al feed OData del servizio di analisi sono disponibili a livello generale per Azure DevOps Services e Azure DevOps Server 2020 e versioni successive. Le query di esempio fornite in questo articolo sono valide solo per Azure DevOps Server 2020 e versioni successive e dipendono dalla versione v3.0-preview o successiva. È consigliabile usare queste query e fornire commenti e suggerimenti.
Prerequisiti
- Accesso: essere un membro di un progetto con almeno l'accesso Basic .
- Autorizzazioni: per impostazione predefinita, i membri del progetto dispongono dell'autorizzazione per eseguire query su Analisi e creare viste.
- Per altre informazioni sugli altri prerequisiti relativi all'abilitazione di servizi e funzionalità e alle attività generali di rilevamento dei dati, vedere Autorizzazioni e prerequisiti per l'accesso ad Analytics.
Nota
Questo articolo presuppone che sia possibile leggere Panoramica dei report di esempio usando query OData e avere una conoscenza di base di Power BI.
Affinché il report generi dati utili, è necessario eseguire le attività seguenti:
- Sono stati definiti gli elementi di lavoro dei requisiti e sono stati assegnati ai percorsi di area e iterazione di interesse. Per informazioni su come definire percorsi di area e iterazione, vedere Definire percorsi di area e Definire percorsi di iterazione.
- Per ottenere la percentuale di completamento delle ore, è necessario compilare i campi Completamento lavoro e Lavoro rimanente di attività o bug collegati ai requisiti con il tipo di collegamento Figlio .
- Per ottenere lo stato di esecuzione dei test case, sono stati creati gruppi di test basati sui requisiti in Piani di test corrispondenti a tali requisiti. I test inline aggiunti tramite la scheda soddisfano questo prerequisito, ma i requisiti che si collegano ai test non sono soddisfatti. Per altre informazioni, vedere Creare piani di test e gruppi di test.
- Per ottenere lo stato dei bug, sono stati creati e collegati bug ai requisiti con il tipo di collegamento Figlio .
Query di esempio
Per generare il report, è necessario aggiungere tre query di Power BI a Power BI Desktop e quindi collegarle. Ogni query esegue il WorkItems
set di entità o TestPoints
.
Nota
I frammenti di query di Power BI forniti nelle sezioni seguenti includono le trasformazioni dei dati necessarie per espandere le colonne e modificare il tipo di dati.
Nota
Per determinare le proprietà disponibili a scopo di filtro o report, vedere Informazioni di riferimento sui metadati per Azure Boards. È possibile filtrare le query o restituire proprietà usando uno qualsiasi dei Property
valori in un EntityType
oggetto o NavigationPropertyBinding Path
i valori disponibili con un oggetto EntitySet
. Ognuno EntitySet
corrisponde a un oggetto EntityType
. Per altre informazioni sul tipo di dati di ogni valore, esaminare i metadati forniti per l'oggetto corrispondente EntityType
.
Percorsi di iterazione e area di query
Per definire l'ambito del report in un percorso di area e iterazione specifico, è possibile filtrare la query usando AreaSK e IterationSK. Per informazioni dettagliate, vedere Definire query di base con OData Analytics.
Query per la percentuale di completamento delle ore per i requisiti
Nota
La query seguente funziona per il processo Agile perché definisce Remaining Work
i campi e Completed Work
negli elementi di lavoro.
Copiare e incollare la query di Power BI seguente direttamente nella finestra Recupera dati>query vuota. Per altre informazioni, vedere Panoramica dei report di esempio che usano query 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"
Eseguire una query per verificare lo stato di esecuzione dei requisiti
Nota
Per determinare le proprietà disponibili a scopo di filtro o report, vedere Informazioni di riferimento sui metadati per Analisi dei piani di test. È possibile filtrare le query o restituire proprietà usando uno qualsiasi dei Property
valori in un EntityType
oggetto o NavigationPropertyBinding Path
i valori disponibili con un oggetto EntitySet
. Ognuno EntitySet
corrisponde a un oggetto EntityType
. Per altre informazioni sul tipo di dati di ogni valore, esaminare i metadati forniti per l'oggetto corrispondente EntityType
.
Copiare e incollare la query di Power BI seguente direttamente nella finestra Recupera dati>query vuota. Per altre informazioni, vedere Panoramica dei report di esempio che usano query 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"
Nota
La TestSuite/RequirementWorkItem/...
voce indica che l'elemento di lavoro deve essere collegato al gruppo di test tramite gruppi di test basati sui requisiti, come descritto nei prerequisiti.
Eseguire una query sullo stato dei bug collegati ai requisiti
Copiare e incollare la query di Power BI seguente direttamente nella finestra Recupera dati>query vuota. Per altre informazioni, vedere Panoramica dei report di esempio che usano query 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"
Stringhe di sostituzione e scomposizione delle query
Sostituire le stringhe seguenti con i valori. Non includere parentesi quadre {} con la sostituzione. Ad esempio, se il nome dell'organizzazione è "Fabrikam", sostituire {organization}
con Fabrikam
, non {Fabrikam}
.
{organization}
- Nome dell'organizzazione{project}
- Nome del progetto{iterationSK}
- GUID associato al percorso di iterazione di interesse. Per cercare il GUID, vedere [.. /extend-analytics/wit-analytics.md#iterationsk](Restituire IterationSK per un percorso di iterazione specifico){areaSK}
- GUID associato al percorso di area di interesse. Per cercare il GUID, vedere [.. /extend-analytics/wit-analytics.md#areask](Restituisce AreaSK per un percorso area specifico).
Suddivisione delle query
La tabella seguente descrive ogni parte della query.
Parte della query
Descrizione
$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK}
)`
Restituisce i dati solo per gli elementi di lavoro iterazione, area e backlog selezionati.
Processes/any(p:p/BacklogType eq 'RequirementBacklog')
Filtrare gli elementi di lavoro in modo che debbano rientrare nella categoria "requisiti" per almeno un processo associato.
Processes/all(p:p/IsBugType eq false)
Omettere gli elementi di lavoro del tipo di bug durante il recupero dei requisiti. Nel modello di processo Basic gli elementi di lavoro problema sono anche di tipo bug, quindi per il processo basic rimuovere questa clausola dalla query.
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) ) )
Restituisce i dati solo per i requisiti selezionati in base all'iterazione e all'area.
/aggregate($count as TotalCount,
Aggregare i dati nei punti di test filtrati con conteggio come TotalCount
.
cast(LastResultOutcome eq 'Passed', Edm.Int32) with sum as Passed
Durante l'aggregazione, i punti di test di cast di tipo hanno il risultato di esecuzione più recente 'Passato' a 1 e li sommano come metrica 'Passed
'.
&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )
Restituisce i dati Lavoro completato e Lavoro rimanente per gli elementi di lavoro figlio di elementi padre filtrati.
/aggregate( iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork, iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork
Aggregare i dati lavoro completato e lavoro rimanente negli elementi di lavoro filtrati.
)/compute( (SumCompletedWork add SumRemainingWork) as TotalWork, SumCompletedWork as SumCompleted
Calcolare il rollup totale del lavoro completato e del lavoro rimanente.
)/compute( iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork )
Calcolare la percentuale di dati completati.
Creare il report Tabella
Per creare il report, seguire questa procedura:
- Nella scheda Modellazione scegliere Gestisci relazioni e collegare i tre risultati della query in
WorkItemId
base alla colonna. - In Visualizzazioni scegliere Tabella.
- Aggiungere le colonne a cui si è interessati dalle tre query di Power BI.
- Selezionare Somma come aggregazione per colonne additivi, ad esempio Test superati e così via.
Il report dovrebbe essere simile all'immagine seguente.
Articoli correlati
- Esplorare i report di esempio usando query OData
- Costruire query OData per Analytics
- Connettersi a Power BI usando query OData
- Fare riferimento ai metadati per Analisi di Azure Boards
- Accedere ai report di esempio e all'indice di riferimento rapido
- Aggiungere un filtro dei dati team a un report esistente