Pergunta

Eu comecei recentemente a trabalhar em um projeto muito grande C ++ que, depois de completar 90% da execução, determinou que eles precisam para demonstrar a cobertura filial 100% durante os testes. O projeto está hospedado em uma plataforma incorporado (Green Hills Integridade). Estou à procura de sugestões e experiências de outras pessoas sobre StackOverflow que têm produtos de cobertura de código utilizado em ambientes similares. Estou interessado em ambos os comentários positivos e negativos em relação a esses tipos de ferramentas.

Foi útil?

Solução

100 cobertura ramo%? Isso é o requisito, especialmente porque alguns ramos (Padrões em caso declarações para máquinas de estado, por exemplo) não deve ser possível executar. Espero que existem alguns exceções, e se não há que você pode precisa entender o que o teste de cobertura pode e não pode fazer antes de começar - caso contrário você vai acabar puxando seu cabelo para fora, ou pior - dando dados incorretos.

A maioria dos testes de cobertura para sistemas embarcados é realmente executado em PCs. O código é portado, certos aspectos do microcontrolador são emulados em software, e Bullseye ou outra cobertura de código PC semelhante utilitário é executado. A razão isto é feito é que existem muitos microcontroladores e compiladores / depuradores / ambientes de teste para desenvolver ferramentas de cobertura de código para cada um.

Quando as ferramentas de cobertura de código que existem para uma plataforma específica incorporado eles não são tão poderoso e configurável, fácil de usar e livre de erros como os desenvolvidos para a plataforma PC. Os processadores muitas vezes não têm a capacidade trace (sem hardware emulação high end) necessários para realizar uma boa cobertura de código sem a inserção de código de depuração adicional em seu firmware, que então tem consequências e efeitos secundários que são difíceis de controlar, especialmente com problemas de tempo em sistemas de tempo real.

Portando código sobre não é terrivelmente difícil, desde que você pode abstrair o código específico de hardware (e desde que você está usando C ++ corretamente, que deve ser fácil, certo? ;-D). O maior problema que você vai correr em é tipos, que enquanto melhor especificados no C ++ do que eram em C ainda representam alguns problemas. Certifique-se de que você está usando um types.h ou configuração similar ao dizer especificamente o compilador exatamente o que cada tipo que você usa é e como deve ser interpretado.

Depois disso, você pode ir para a cidade testar a lógica do núcleo no PC. Você pode até mesmo testar os drivers de hardware de baixo nível, se você estiver interessado em desenvolver a emulação de software necessário para isso, embora problemas de tempo pode ser um pouco problemático.

Software testando ferramentas como MxVDev executar um monte da emulação microcontrolador para você e ajuda com problemas de tempo como bem, mas você ainda tem um pouco de trabalho, mesmo com essa ajuda.

Se você deve fazer isso no próprio sistema, você vai precisar comprar um emulador para o processador com capacidade de cobertura - não é uma proposição barato (muitos emuladores custar mais de US $ 30 mil para o conjunto completo de ferramentas e hardware emulação) , mas é uma das muitas ferramentas utilizadas em ambientes de alta confiabilidade, como as indústrias automotiva e aeroespacial.

-Adam

Disclaimer:. Trabalho que para a empresa que produz MxVDev

Outras dicas

Temos usado Cantata e vectorcast no passado para testes de unidade e de cobertura de código. Nós também usamos as ferramentas Greenhills e essas duas ferramentas trabalhar com as ferramentas de desenvolvimento greenhills. Corremos mais do nosso teste no simulador PPC e teste apenas correr que dependem de hardware no hardware de destino através de um pod JTAG. Canatata e Vector elenco são muito semelhantes com Catata apenas um pouco mais fácil de usar e tem um pouco mais recursos, mas os pequenos extras fazer uma grande diferença na experiência do usuário.

Geralmente, se você quer alcançar um alto nível de cobertura ramo que você precisa para projetar seu código para testabilidade. Quanto mais você testar quanto mais você aprende sobre como escrever código testável.

Nós também testes PC tentou contra testes incorporado nos deu problemas por causa da endianess mas este é apenas um problema na camada de hardware.

Além disso, essas ferramentas são certificadas com a norma RTCA / DO-178B.

Tal como acontece com Adam, que porta o nosso código incorporado em um arnês baseado em PC e fazer a maior parte fora cobertura e profiling lá. Eu tenho usado AutomatedQA AQTime e Compuwares DevPartner, sendo que ambos são bons produtos,

Se você tinha que fazer a cobertura ob-board, você precisa usar um profiler cobertura que criou uma versão instrumentada da fonte. Há duas ferramentas comerciais e de código aberto disponíveis para fazer isso, mas IMO, ele adiciona um monte de trabalho para não muito ganho.

100% de cobertura é ambicioso, como você vai precisar de um monte de injeção de falhas para entrar em todos os seus manipuladores de erro e manipuladores de exceção. IMO, isso também seria mais fácil de fazer em um arnês de bordo.

Também é importante ressaltar a quem pediu para cobertura de código 100% que 100% de cobertura de código de modo algum equivale a 100% de cobertura de teste . Considere, por exemplo, a seguinte função;

int div(int a, int b)
{
return (a/b);
}
cobertura

100% código só nos obriga a chamar esta função uma vez, a cobertura do teste 100% exigiria muitos mais chamadas. Minha própria strategey teste envolve o desenvolvimento de casos de teste automatizados para me dar um nível aceitável de cobertura test e usando uma ferramenta de cobertura de código puramente como uma ajuda para olhar para áreas não testados. Até certo ponto, isso depende do seu orçamento de testes; para mim a cobertura de código 100% é muito caro para o que oferece.

SD C ++ Cobertura de Teste . Esta é uma família de (sucursal), instrumentos de cobertura de teste para uma variedade de dialetos do C ++ (ANSI, GNU, MS ...) que funciona muito bem mesmo em hardware sistemas embarcados real em virtude de ter uma pegada muito pequena, e com um fácil maneira de dados de cobertura de teste de exportação coletado. Há uma tela de cobertura GUI que não é dependente de seu hardware real incorporado, que também irá produzir um resumo completo relatório de cobertura.

[Eu sou um principal na empresa que fornece essas ferramentas.]

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top