Partilhar via


Relatório de amostra de acompanhamento de requisitos

Serviços de DevOps do Azure | Azure DevOps Server 2022 | Azure DevOps Server 2020

Você pode acompanhar a qualidade dos itens de trabalho que pertencem à categoria Requisitos com o relatório de controle de requisitos. A categoria Requisitos inclui itens de trabalho como User Stories (Agile), Product Backlog Items (Scrum), Issues (Basic) e Requirements (CMMI). Para obter mais informações sobre categorias de itens de trabalho, consulte Rastrear histórias de usuários, problemas, bugs e outros itens de trabalho.

A imagem a seguir mostra um exemplo de um relatório de controle de requisitos.

Captura de ecrã do relatório de controlo de Requisitos do Power BI.

Este relatório exibe as seguintes informações para cada requisito listado:

  • Porcentagem de trabalho concluído: barra de progresso que mostra a porcentagem de trabalho concluído com base no acúmulo de horas concluídas para todas as tarefas vinculadas ao requisito.
  • Testes aprovados: o número de casos de teste executados com base na execução de teste mais recente.
  • Testes com falha: o número de casos de teste executados que falharam com base na execução de teste mais recente.
  • Executar testes: o número de execuções de teste executadas.
  • Bugs ativos: O número de bugs vinculados em um estado Ativo.
  • Bugs fechados: o número de bugs vinculados em um estado Fechado, Concluído ou Concluído.

Nota

O acompanhamento de requisitos é suportado apenas para casos de teste vinculados por meio de um conjunto de testes baseado em requisitos. A associação entre um item de trabalho de requisito — User Story (Agile), Product Backlog Item (Scrum), Requirement (CMMI) ou Issue (Basic) — e a execução manual do teste só é formada quando o caso de teste é vinculado por meio de um conjunto de testes baseado em requisitos.

Perguntas a que o relatório responde

Os relatórios de acompanhamento de requisitos são úteis para responder aos seguintes tipos de perguntas.

Progresso do trabalho

  • A quantidade de trabalho que resta para cada requisito corresponde às suas expectativas?
  • Os requisitos mais bem classificados estão sendo implementados primeiro?
  • Quantos testes são definidos para cada requisito? Quantos testes são aprovados?
  • Que requisitos estão a ser implementados que não têm casos de teste definidos para eles?

Progressos em matéria de qualidade

  • Quantos casos de teste foram executados para cada requisito e quantos passaram?
  • Quantos bugs ativos tem cada requisito?
  • Estão a ser encontrados bugs para requisitos que estão a ser testados?
  • Os bugs estão sendo resolvidos ou permanecem ativos?

Avaliação de riscos

  • Que requisitos estão em risco?
  • Quais requisitos não são suficientemente estáveis para o lançamento?
  • Que requisitos podemos enviar hoje?

Importante

A integração do Power BI e o acesso ao feed OData do Serviço de Análise estão geralmente disponíveis para os Serviços de DevOps do Azure e o Azure DevOps Server 2020 e versões posteriores. As consultas de exemplo fornecidas neste artigo são válidas apenas no Azure DevOps Server 2020 e versões posteriores e dependem da versão v3.0-preview ou posterior. Nós encorajamos você a usar essas consultas e nos fornecer feedback.

Pré-requisitos

  • Acesso: Ser membro de um projeto com pelo menos acesso Básico .
  • Permissões: por predefinição, os membros do projeto têm permissão para consultar o Analytics e criar vistas.
  • Para obter mais informações sobre outros pré-requisitos relacionados com a ativação de serviços e funcionalidades e atividades gerais de monitorização de dados, consulte Permissões e pré-requisitos para aceder ao Analytics.

Nota

Este artigo pressupõe que você leia Visão geral de relatórios de exemplo usando consultas OData e tenha uma compreensão básica do Power BI.

Para que o relatório gere dados úteis, você precisa ter executado as seguintes tarefas:

  • Você definiu itens de trabalho de requisito e os atribuiu à área e aos caminhos de iteração de interesse. Para obter informações sobre como definir caminhos de área e iteração, consulte Definir caminhos de área e Definir caminhos de iteração.
  • Para obter a porcentagem de horas concluídas, você precisa preencher os campos Trabalho Concluído e Trabalho Restante de tarefas ou bugs vinculados aos requisitos com o tipo de link Filho .
  • Para obter o status de execução de casos de teste, você terá criado pacotes de teste baseados em requisitos em Planos de teste correspondentes a esses requisitos. Os testes em linha que você adiciona através da placa satisfazem esse pré-requisito, no entanto, os requisitos que você vincula aos testes não satisfazem. Para obter mais informações, consulte Criar planos de teste e conjuntos de testes.
  • Para obter o status de bugs, você terá criado e vinculado bugs a requisitos com o tipo de link Filho .

Consultas de amostra

Para gerar o relatório, você deve adicionar três consultas do Power BI à área de trabalho do Power BI e vinculá-las. Cada consulta executa o WorkItems conjunto de entidades ou TestPoints .

Nota

Os trechos de consulta do Power BI fornecidos nas seções a seguir incluem as transformações de dados necessárias para expandir colunas e alterar o tipo de dados.

Nota

Para determinar as propriedades disponíveis para fins de filtro ou relatório, consulte Referência de metadados para painéis do Azure. Você pode filtrar suas consultas ou retornar propriedades usando qualquer um dos Property valores em um EntityType ou NavigationPropertyBinding Path valores disponíveis com um EntitySet. Cada EntitySet um corresponde a um EntityTypearquivo . Para obter mais informações sobre o tipo de dados de cada valor, revise os metadados fornecidos para o .EntityType

Área de consulta e caminhos de iteração

Para definir o escopo do relatório para uma Área específica e um caminho de Iteração, você pode filtrar a consulta usando AreaSK e IterationSK. Para obter detalhes, consulte Definir consultas básicas usando o OData Analytics.

Consulta de porcentagem de horas de conclusão para requisitos

Nota

A consulta a seguir funciona para o processo Agile, uma vez que define Remaining Work e Completed Work campos em itens de trabalho.

Copie e cole a seguinte consulta do Power BI diretamente na janela Obter Consulta em Branco de Dados>. Para obter mais informações, consulte Visão geral de relatórios de exemplo usando consultas 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"

Consulta do status de execução de teste dos requisitos

Nota

Para determinar as propriedades disponíveis para fins de filtro ou relatório, consulte Referência de metadados para Análise de Planos de Teste. Você pode filtrar suas consultas ou retornar propriedades usando qualquer um dos Property valores em um EntityType ou NavigationPropertyBinding Path valores disponíveis com um EntitySet. Cada EntitySet um corresponde a um EntityTypearquivo . Para obter mais informações sobre o tipo de dados de cada valor, revise os metadados fornecidos para o .EntityType

Copie e cole a seguinte consulta do Power BI diretamente na janela Obter Consulta em Branco de Dados>. Para obter mais informações, consulte Visão geral de relatórios de exemplo usando consultas 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

A TestSuite/RequirementWorkItem/... entrada indica que o item de trabalho deve ser vinculado ao conjunto de testes por meio de um conjunto de testes baseado em requisitos, conforme discutido nos pré-requisitos.

Consulta de status de bugs vinculados aos requisitos

Copie e cole a seguinte consulta do Power BI diretamente na janela Obter Consulta em Branco de Dados>. Para obter mais informações, consulte Visão geral de relatórios de exemplo usando consultas 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"

Cadeias de caracteres de substituição e detalhamento de consulta

Substitua as seguintes cadeias de caracteres por seus valores. Não inclua parênteses com a {} sua substituição. Por exemplo, se o nome da sua organização for "Fabrikam", substitua {organization} por Fabrikam, não {Fabrikam}.

  • {organization} - Nome da sua organização
  • {project} - O nome do seu projeto
  • {iterationSK} - O GUID associado ao Caminho de Iteração de interesse. Para procurar o GUID, consulte [.. /extend-analytics/wit-analytics.md#iterationsk](Retorne o IterationSK para um caminho de iteração específico)
  • {areaSK} - O GUID associado ao Caminho da Área de interesse. Para procurar o GUID, consulte [.. /extend-analytics/wit-analytics.md#areask](Retorne o AreaSK para um caminho de área específico).

Detalhamento da consulta

A tabela a seguir descreve cada parte da consulta.

Parte da consulta

Descrição


$filter=( IterationSK eq {iterationSK} and AreaSK eq {areaSK} )`

Retorna dados apenas para itens de trabalho Iteração, Área e lista de pendências selecionados.

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

Filtre os itens de trabalho de tal forma que eles devem se enquadrar na categoria "requisitos" para pelo menos um processo associado a eles.

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

Omita os itens de trabalho do tipo bug ao obter requisitos. No modelo de processo Básico, os itens de trabalho Problema também são do tipo bug, portanto, para Processo básico, remova essa cláusula da consulta.

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

Retornar dados apenas para requisitos selecionados com base em Iteração e Área.

/aggregate($count as TotalCount,

Agregar dados nos pontos de teste filtrados com a contagem como TotalCount.

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

Ao agregar, os pontos de teste type-cast com o resultado de execução mais recente 'Passado' para 1 e resumem-nos como métrica 'Passed'.

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

Retorna dados de Trabalho Concluído e Trabalho Restante para itens de trabalho filho de itens pai filtrados.

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

Agregar dados de Trabalho Concluído e Trabalho Restante nos itens de trabalho filtrados.

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

Calcule o pacote cumulativo total de Trabalho Concluído e Trabalho Restante.

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

Calcule a porcentagem de wor concluído.

Criar o relatório Tabela

Para criar o relatório, execute as seguintes etapas:

  1. Na guia Modelagem, escolha Gerenciar Relações e vincule os três resultados da consulta por WorkItemId coluna.
  2. Em Visualizações, escolha Tabela.
  3. Adicione as colunas em que está interessado a partir das três consultas do Power BI.
  4. Selecione Soma como agregação para colunas aditivas como Testes aprovados , etc.

    Power BI selecionar Soma como agregação

Seu relatório deve ser semelhante à imagem a seguir.

Captura de ecrã do relatório de controlo de Requisitos do Power BI