Condividi tramite


Esempio di report sul tracciamento 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 degli Utenti (Agile), Elementi del Backlog di 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.

Screenshot del report di monitoraggio dei requisiti di Power BI.

Questo report visualizza le informazioni seguenti per ogni requisito elencato:

  • Percentuale di lavoro completata: Barra di avanzamento 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, Fatto o Completo.

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 richiesto (User Story (Agile), Product Backlog Item (Scrum), Requirement (CMMI); Issue (Basic)) e l'esecuzione manuale del test viene formata solo quando il test case è collegato tramite una suite di test basata 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 richieste possiamo soddisfare 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.

Categoria Requisiti
Livelli di accesso - membro del progetto.
- Accesso almeno di livello di base.
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 abbiate letto Panoramica dei report di esempio usando le query OData e abbiate una conoscenza di base di Power BI.

Affinché il report generi dati utili, è necessario eseguire le attività seguenti:

  • Hai definito gli elementi di lavoro dei requisiti e li hai 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, avrai creato e collegato i bug ai requisiti utilizzando il tipo di collegamento Figlio.

Esempi di query

Per generare il report, è necessario aggiungere tre query di Power BI a Power BI Desktop e quindi collegarle. Ogni query esegue il set di entità WorkItems oppure 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à utilizzando qualsiasi dei valori Property sotto un EntityType o i valori NavigationPropertyBinding Path disponibili con un 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 interrogazione

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 ore completate rispetto ai requisiti

Nota

La query seguente funziona per il processo Agile poiché definisce i campi Remaining Work e Completed Work negli elementi di lavoro.

Copiare e incollare la seguente query di Power BI 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 l'analisi dei piani di test. È possibile filtrare le query o restituire le proprietà utilizzando uno dei valori Property in un oggetto EntityType o i valori NavigationPropertyBinding Path disponibili in 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.

Copia e incolla la seguente query di Power BI direttamente nella finestra Recupera datiquery 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 voce TestSuite/RequirementWorkItem/... indica che l'elemento di lavoro deve essere collegato al gruppo di test tramite un gruppo di test basato sui requisiti come descritto nella sezione prerequisiti.

Eseguire una query sullo stato dei bug collegati ai requisiti

Copiare e incollare la seguente query di Power BI 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 analisi delle query

Sostituire le stringhe seguenti con i valori. Non includere parentesi {} 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 interessato. Per cercare il GUID, vedere [.. /extend-analytics/wit-analytics.md#iterationsk](Restituire IterationSK per un percorso di iterazione specifico)
  • {areaSK} - GUID associato al percorso dell'area di interesse. Per cercare il GUID, vedere [../extend-analytics/wit-analytics.md#areask](Restituire l'AreaSK per un percorso specifico dell'area).

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 di tipo '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 attraverso i punti di test filtrati che hanno conteggio pari a TotalCount.

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

Durante l'aggregazione, i punti di test con esito di esecuzione più recente 'Passato' vengono convertiti in '1' e sommati come metrica 'Passed'.

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

Restituisce i dati di Lavoro Completato e Lavoro Rimanente per gli elementi di lavoro figli di elementi genitori 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 sul lavoro completato e i dati sul 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 lavoro completato.

Creare il report Tabella

Per creare il report, seguire questa procedura:

  1. Nella scheda Modellazione scegliere Gestisci relazioni e collegare i tre risultati della query tramite la colonna.
  2. In Visualizzazioni scegliere Tabella.
  3. Aggiungi le colonne di tuo interesse dalle tre query di Power BI.
  4. Selezionare Somma come aggregazione per colonne additivi, ad esempio Test superati e così via.

    Selezionare Somma come aggregazione in Power BI

Il report dovrebbe essere simile all'immagine seguente.

Screenshot del report di rilevamento dei requisiti di Power BI