Partager via


Exemple de rapport de suivi des exigences

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Le rapport de cumul de suivi des exigences s’appuie sur le rapport de suivi des exigences et montre comment agréger des métriques pour un cumul à un niveau. Par exemple, si vous effectuez le suivi des exigences avec les récits utilisateur, vous pouvez agréger des données pour les fonctionnalités à l’aide des requêtes fournies dans cet article.

L’image suivante en contient un exemple.

Capture d’écran du rapport cumulatif power BI Stories.

Ce rapport affiche les informations suivantes pour chaque exigence qu’elle répertorie :

  • Pourcentage de travail terminé : barre de progression qui indique le pourcentage de travail terminé en fonction du cumul des heures terminées pour toutes les tâches liées à l’exigence.
  • Tests réussis : nombre de cas de test exécutés en fonction de l’exécution de test la plus récente.
  • Échec des tests : nombre de cas de test qui ont échoué en fonction de la dernière série de tests.
  • Exécuter des tests : nombre d’exécutions de test exécutées.
  • Bogues actifs : nombre de bogues liés dans un état actif.
  • Bogues fermés : nombre de bogues liés dans un état Fermé, Terminé ou Terminé.

Remarque

Le suivi des conditions requises est pris en charge uniquement pour les cas de test liés via une suite de tests basée sur les conditions requises. L’association entre un élément de travail d’exigence ( Utilisateur Story (Agile), Product Backlog Item (Scrum), Requirement (CMMI) ou Issue (De base) – et l’exécution manuelle des tests est formée uniquement lorsque le cas de test est lié via une suite de tests basée sur les conditions requises.

Questions sur les réponses du rapport

Les rapports de suivi des exigences sont utiles pour répondre aux types de questions suivants.

Progression du travail

  • Est-ce que la quantité de travail qui reste pour chaque exigence correspond à vos attentes ?
  • Les exigences les plus classées sont-elles implémentées en premier ?
  • Combien de tests sont définis pour chaque exigence ? Combien de tests passent-ils ?
  • Quelles sont les exigences en cours d’implémentation qui n’ont pas de cas de test définis pour eux ?

Progression de la qualité

  • Combien de cas de test ont été exécutés pour chaque exigence et combien ont réussi ?
  • Combien de bogues actifs ont-ils chaque exigence ?
  • Les bogues sont-ils détectés pour les exigences en cours de test ?
  • Les bogues sont-ils résolus ou sont-ils actifs ?

Évaluation des risques

  • Quelles sont les exigences à risque ?
  • Quelles exigences ne sont pas suffisamment stables pour la mise en production ?
  • Quelles exigences pouvons-nous expédier aujourd’hui ?

Important

L’intégration de Power BI et l’accès au flux OData du service Analytics sont généralement disponibles pour Azure DevOps Services et Azure DevOps Server 2020 et versions ultérieures. Les exemples de requêtes fournis dans cet article sont valides uniquement sur Azure DevOps Server 2020 et versions ultérieures, et dépendent de la version v3.0-preview ou ultérieure. Nous vous encourageons à utiliser ces requêtes et à nous fournir des commentaires.

Prérequis

  • Pour afficher les données Analytics et interroger le service, vous devez être membre d’un projet avec un accès de base ou supérieur. Par défaut, tous les membres du projet sont autorisés à interroger Analytics et à définir des vues Analytics.
  • Pour en savoir plus sur les autres prérequis concernant l’activation des services et des fonctionnalités et les activités générales de suivi des données, consultez Autorisations et prérequis pour accéder à Analytics.

Remarque

Cet article suppose que vous avez lu Vue d’ensemble des exemples de rapports à l’aide de requêtes OData et que vous avez une compréhension de base de Power BI.

Pour que le rapport génère des données utiles, vous devez effectuer les tâches suivantes :

  • Vous avez défini les éléments de travail requis et les avez affectés à la zone et aux chemins d’itération d’intérêt. Pour plus d’informations sur la définition des chemins d’accès de zone et d’itération, consultez Définir des chemins d’accès de zone et définir des chemins d’itération.
  • Pour obtenir le pourcentage d’heures d’achèvement, vous devez renseigner les champs Travail complet et Travail restant des tâches ou bogues liés aux exigences avec le type de lien Enfant .
  • Pour obtenir l’état d’exécution des cas de test, vous aurez créé des suites de tests basées sur des conditions requises dans les plans de test correspondant à ces exigences. Les tests inline que vous ajoutez via le tableau Kanban répondent à cette condition préalable, mais les exigences que vous liez aux tests ne le font pas. Pour plus d’informations, consultez Créer des plans de test et des suites de tests.
  • Pour obtenir l’état des bogues, vous aurez créé et lié des bogues aux exigences avec le type de lien enfant .

Exemples de requêtes

Pour générer le rapport, vous devez ajouter trois requêtes Power BI à Power BI Desktop, puis les lier. Chaque requête exécute l’ensemble d’entités ou le jeu TestPoints d’entitésWorkItems.

Remarque

Les extraits de requête Power BI fournis dans les sections suivantes incluent les transformations de données requises pour développer des colonnes et modifier le type de données.

Chemins de zone de requête et d’itération

Pour étendre votre rapport à un chemin d’accès de zone et d’itération particulier, vous pouvez filtrer la requête à l’aide AreaSK de et IterationSK. Pour plus d’informations, consultez Définir des requêtes de base à l’aide d’OData Analytics.

Remarque

Pour déterminer les propriétés disponibles à des fins de filtre ou de rapport, consultez Informations de référence sur les métadonnées pour Azure Boards. Vous pouvez filtrer vos requêtes ou renvoyer des propriétés à l’aide de l’une Property des valeurs sous ou EntityType des NavigationPropertyBinding Path valeurs disponibles avec un EntitySet. Chaque EntitySet correspond à un EntityType. Pour en savoir plus sur le type de données de chaque valeur, passez en revue les métadonnées fournies pour le .EntityType

Requête pour le pourcentage d’heures d’achèvement pour les exigences

Remarque

Modifiez la WorkItemType base du processus que vous utilisez. Le modèle Scrum prend en charge les fonctionnalités et le modèle De base prend en charge Epic comme type d’élément de travail cumulatif, respectivement.

Vous pouvez coller la requête Power BI répertoriée ci-dessous> directement dans la fenêtre Obtenir une requête vide. Pour plus d’informations, consultez Vue d’ensemble des exemples de rapports utilisant des requêtes 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 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"

Rechercher l’état d’exécution des tests des exigences

Remarque

Pour déterminer les propriétés disponibles à des fins de filtre ou de rapport, consultez la référence des métadonnées pour Test Plans Analytics. Vous pouvez filtrer vos requêtes ou renvoyer des propriétés à l’aide de l’une Property des valeurs sous ou EntityType des NavigationPropertyBinding Path valeurs disponibles avec un EntitySet. Chaque EntitySet correspond à un EntityType. Pour en savoir plus sur le type de données de chaque valeur, passez en revue les métadonnées fournies pour le .EntityType

Vous pouvez coller la requête Power BI répertoriée ci-dessous> directement dans la fenêtre Obtenir une requête vide. Pour plus d’informations, consultez Vue d’ensemble des exemples de rapports utilisant des requêtes 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(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"

Remarque

L’entrée TestSuite/RequirementWorkItem/... indique que l’élément de travail doit être lié à la suite de tests par le biais d’une suite de tests basée sur des conditions requises, comme indiqué dans les conditions préalables.

Rechercher l’état des bogues liés aux exigences

Remarque

Modifiez la WorkItemType base du processus que vous utilisez. Le modèle Scrum prend en charge les fonctionnalités et le modèle De base prend en charge Epic comme type d’élément de travail cumulatif, respectivement.

Vous pouvez coller la requête Power BI répertoriée ci-dessous> directement dans la fenêtre Obtenir une requête vide. Pour plus d’informations, consultez Vue d’ensemble des exemples de rapports utilisant des requêtes 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 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"

Chaînes de substitution et répartition des requêtes

Remplacez les chaînes suivantes par vos valeurs. N’incluez pas de crochets {} avec votre substitution. Par exemple, si le nom de votre organisation est « Fabrikam », remplacez par {organization}Fabrikam, et non {Fabrikam}par .

  • {organization} - Nom de votre organisation
  • {project} - Nom de votre projet
  • {iterationSK} - GUID associé au chemin d’itération d’intérêt. Pour rechercher le GUID, consultez [.. /extend-analytics/wit-analytics.md#itérationsk](Retourner itérationSK pour un chemin d’itération spécifique)
  • {areaSK} - GUID associé au chemin d’accès à la zone d’intérêt. Pour rechercher le GUID, consultez [.. /extend-analytics/wit-analytics.md#areask](Retournez la zoneSK pour un chemin d’accès de zone spécifique).

Répartition des requêtes

Le tableau suivant décrit chaque partie de la requête.

Composant de requête

Description


$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK} et WorkItemType eq 'Feature' )'

Retourne des données uniquement pour les fonctionnalités sous l’itération et la zone spécifiées.

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)))

Renvoyer des données pour les éléments requis de backlog sélectionnés uniquement sous l’itération et la zone spécifiées.

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

Développez les éléments enfants des fonctionnalités et retournez les données Travail terminé et Travail restant pour les éléments de travail.

&$expand=Descendants( $apply=filter( WorkItemType eq 'Bug' ) /groupby( (State), aggregate($count as Count) )

Développez les éléments enfants des fonctionnalités et filtrez pour le bogue, regroupez les données renvoyées par État et soleilz le nombre total d’éléments enfants.

/aggregate($count as TotalCount,

Agréger des données sur les points de test filtrés avec un nombre égal 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)

Lors de l’agrégation, additionnez les valeurs des points de test en fonction de leur dernier résultat d’exécution passé, Failed, Blocked, NotApplicable et None. En outre, additionnez les valeurs des points de test dont le résultat le plus récent n’est pas égal à Aucun pour obtenir le total RunCount.

/aggregate( iif(CompletedWork ne null, CompletedWork, 0) with sum as SumCompletedWork, iif(RemainingWork ne null, RemainingWork, 0) with sum as SumRemainingWork

Agréger les données Travail terminé et Travail restant sur les éléments de travail filtrés.

)/compute( (SumCompletedWork add SumRemainingWork) as TotalWork, SumCompletedWork as SumCompleted

Calculez le cumul total du travail terminé et du travail restant.

)/compute( iif(TotalWork gt 0,(SumCompleted div cast(TotalWork, Edm.Double) mul 100), 0) as PercCompletedWork )

Calculez le pourcentage de wor terminé.

Créer le rapport de table

  1. Sous l’onglet Modélisation , choisissez Gérer les relations et liez les trois résultats de la requête par WorkItemId colonne.
  2. Sous Visualisations, choisissez Table.
  3. Ajoutez les colonnes qui vous intéressent à partir des trois requêtes Power BI.
  4. Sélectionnez Sum en tant qu’agrégation pour les colonnes additives comme Les tests réussis, etc.

    Power BI sélectionne Somme en tant qu’agrégation

Ici, les scénarios d’authentification sont une fonctionnalité parente de deux récits utilisateur.

Capture d’écran du rapport cumulatif d’exemples de récits Power BI.