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.

Screenshot del report di rilevamento dei requisiti di Power BI.

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

  • Per visualizzare i dati di Analisi ed eseguire query sul servizio, è necessario essere membri di un progetto con accesso basic o superiore. Per impostazione predefinita, a tutti i membri del progetto vengono concesse le autorizzazioni per eseguire query su Analisi e definire le visualizzazioni di Analisi.
  • 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 di avere letto 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 Kanban soddisfano questo prerequisito, ma i requisiti collegati 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.

È possibile incollare la query di Power BI elencata di seguito direttamente nella finestra Recupera query vuota dati>. 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.

È possibile incollare la query di Power BI elencata di seguito direttamente nella finestra Recupera query vuota dati>. 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

È possibile incollare la query di Power BI elencata di seguito direttamente nella finestra Recupera query vuota dati>. 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:

  1. Nella scheda Modellazione scegliere Gestisci relazioni e collegare i tre risultati della query in WorkItemId base alla colonna.
  2. In Visualizzazioni scegliere Tabella.
  3. Aggiungere le colonne a cui si è interessati 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