Relatório de exemplo de pacote cumulativo de controle de requisitos
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
O relatório Pacote cumulativo de acompanhamento de requisitos baseia-se no relatório de acompanhamento de requisitos e mostra como agregar métricas para um roll-up de um nível. Por exemplo, se você estiver acompanhando requisitos com Histórias de Usuário, poderá agregar dados para Recursos usando as consultas fornecidas neste artigo.
Um exemplo é mostrado na imagem a seguir.
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 que foram aprovados 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.
Observação
O controle 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 de testes só é formada quando o caso de teste é vinculado por meio de um conjunto de testes baseado em requisitos.
Perguntas que o relatório responde
Os relatórios de controle de requisitos são úteis para responder aos seguintes tipos de perguntas.
Andamento dos trabalhos
- 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 estão passando?
- Quais requisitos estão sendo implementados que não têm casos de teste definidos para eles?
Progresso da qualidade
- Quantos casos de teste foram executados para cada requisito e quantos foram aprovados?
- Quantos bugs ativos cada requisito tem?
- Estão sendo encontrados bugs para requisitos que estão sendo testados?
- Os bugs estão sendo resolvidos ou permanecem ativos?
Avaliação de risco
- Quais requisitos estão em risco?
- Quais requisitos não são suficientemente estáveis para o lançamento?
- Quais 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 Servidor de DevOps do Azure 2020 e versões posteriores. As consultas de exemplo fornecidas neste artigo são válidas somente em relação ao Azure DevOps Server 2020 e versões posteriores e dependem da versão v3.0-preview ou posterior. Encorajamos você a usar essas consultas e nos fornecer comentários.
Pré-requisitos
- Para exibir dados do Analytics e consultar o serviço, você precisa ser membro de um projeto com acesso básico ou superior. Por padrão, todos os membros do projeto recebem permissões para consultar Análise e definir exibições do Analytics.
- Para saber mais sobre outros pré-requisitos relacionados à habilitação de serviço e recursos e atividades gerais de acompanhamento de dados, consulte Permissões e pré-requisitos para acessar o Analytics.
Observação
Este artigo pressupõe que você tenha lido 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 Completo e Trabalho Restante de tarefas ou bugs vinculados a requisitos com o tipo de link Filho .
- Para obter o status de execução dos casos de teste, você terá criado conjuntos de testes baseados em requisitos em Planos de Teste correspondentes a esses requisitos. Os testes embutidos que você adiciona por meio do quadro Kanban satisfazem esse pré-requisito, no entanto, os requisitos que você vincula aos testes não satisfazem. Para saber mais, 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 exemplo
Para gerar o relatório, você deve adicionar três consultas do Power BI ao Power BI desktop e vinculá-las. Cada consulta executa o WorkItems
conjunto de entidades ou TestPoints
.
Observação
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.
Área de consulta e caminhos de iteração
Para definir o escopo do relatório para uma área específica e 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.
Observação
Para determinar as propriedades disponíveis para fins de filtro ou relatório, consulte Referência de metadados para Azure Boards. 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
corresponde a um EntityType
. Para saber mais sobre o tipo de dados de cada valor, examine os metadados fornecidos para o correspondente EntityType
.
Consulta para porcentagem de horas de conclusão para requisitos
Observação
Altere o WorkItemType
com base no processo que você está usando. O modelo Scrum suporta Feature e o modelo Basic suporta Epic como o tipo de item de trabalho roll-up, respectivamente.
Você pode colar a consulta do Power BI listada abaixo diretamente na janela Obter Consulta em Branco de> Dados . Para obter mais informações, examine 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 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"
Consulta para status de execução de teste de requisitos
Observação
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
corresponde a um EntityType
. Para saber mais sobre o tipo de dados de cada valor, examine os metadados fornecidos para o correspondente EntityType
.
Você pode colar a consulta do Power BI listada abaixo diretamente na janela Obter Consulta em Branco de> Dados . Para obter mais informações, examine 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(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"
Observação
A TestSuite/RequirementWorkItem/...
entrada indica que o item de trabalho deve ser vinculado ao conjunto de testes por meio de conjuntos de testes baseados em requisitos, conforme discutido nos pré-requisitos.
Consulta de status de bugs vinculados aos requisitos
Observação
Altere o WorkItemType
com base no processo que você está usando. O modelo Scrum suporta Feature e o modelo Basic suporta Epic como o tipo de item de trabalho roll-up, respectivamente.
Você pode colar a consulta do Power BI listada abaixo diretamente na janela Obter Consulta em Branco de> Dados . Para obter mais informações, examine 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 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"
Cadeias de caracteres de substituição e detalhamento de consulta
Substitua as cadeias de caracteres a seguir pelos valores. Não inclua colchetes {} com sua substituição. Por exemplo, se o nome da sua organização for "Fabrikam", substitua por {organization}
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](Retornar 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](Retorna 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}
e WorkItemType eq 'Feature' )'
Retorna dados somente para Recursos na Iteração e Área especificadas.
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)))
Retorne dados somente para itens de requisito de lista de pendências selecionados na Iteração e Área especificadas.
&$expand=Descendants( $apply=filter( CompletedWork ne null or RemainingWork ne null )
Expanda os itens filho de Recursos e retorne os dados Trabalho Concluído e Trabalho Restante para os itens de trabalho.
&$expand=Descendants( $apply=filter( WorkItemType eq 'Bug' ) /groupby( (State), aggregate($count as Count) )
Expanda os itens filho de Recursos e filtre por bug, agrupe os dados de retorno por Estado e use a contagem total de itens filho.
/aggregate($count as TotalCount,
Agregar dados nos pontos de teste filtrados com contagem como 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)
Ao agregar, soma os valores dos pontos de teste com base no resultado de execução mais recente de Aprovado, Reprovado, Bloqueado, Não Aplicável e Nenhum. Além disso, some os valores dos pontos de teste cujo resultado mais recente não é igual a Nenhum para obter o total RunCount
.
/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 acúmulo 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
- Na guia Modelagem , escolha Gerenciar Relações e vincule os três resultados da consulta por
WorkItemId
coluna. - Em Visualizações, escolha Tabela.
- Adicione as colunas de seu interesse a partir das três consultas do Power BI.
- Selecione Soma como agregação para colunas de aditivos, como Testes aprovados, etc.
Aqui, Cenários de autenticação é um recurso pai de duas Histórias de Usuário.
Artigos relacionados
- Visão geral de relatórios de exemplo usando consultas OData
- Construir consultas OData para Análise
- Conectar-se usando consultas do Power BI e OData
- Referência de metadados para o Azure Boards Analytics
- Relatórios de exemplo e índice de referência rápida
- Adicionar uma segmentação de equipe a um relatório existente
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de