Exemple de rapport de suivi des exigences

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

Vous pouvez suivre la qualité des éléments de travail appartenant à la catégorie Exigences avec le rapport de suivi des exigences. La catégorie Conditions requises inclut des éléments de travail tels que les récits utilisateur (Agile), les éléments du backlog de produit (Scrum), les problèmes (de base) et les exigences (CMMI). Pour en savoir plus sur les catégories d’éléments de travail, consultez Suivre les récits utilisateur, les problèmes, les bogues et d’autres éléments de travail.

L’image suivante montre un exemple de rapport de suivi des exigences.

Capture d’écran du rapport de suivi power BI Requirements.

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.

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

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

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

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

Remarque

La requête suivante fonctionne pour le processus Agile, car elle définit Remaining Work et Completed Work champs dans les éléments de travail.

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

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(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"

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

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

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

Retourne des données pour les éléments de travail d’itération, de zone et de backlog sélectionnés uniquement.

Processes/any(p:p/BacklogType eq 'RequirementBacklog')

Filtrez les éléments de travail de telle sorte qu’ils doivent tomber dans la catégorie « exigences » pour au moins un processus associé à ces éléments.

Processes/all(p:p/IsBugType eq false)

Omettez les éléments de travail de type de bogue lors de l’obtention des exigences. Dans le modèle de processus de base, les éléments de travail de problème sont également de type bogue. Par conséquent, pour le processus de base, supprimez cette clause de votre requête.

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 exigences sélectionnées uniquement en fonction de l’itération et de la zone.

/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 Passed

Lors de l’agrégation, les points de test de cast de type ont le résultat d’exécution le plus récent « Passé » à 1 et les additionnez en tant que métrique «Passed ».

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

Retourne les données Travail terminé et Travail restant pour les éléments de travail enfants des éléments parents filtrés.

/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

Pour créer le rapport, procédez comme suit :

  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

Votre rapport doit ressembler à l’image suivante.

Capture d’écran du rapport de suivi des exigences Power BI