Pergunta

O que boas práticas e estratégias estão lá para executar testes de regressão em ambientes embarcados ou em outras situações em que a possibilidade de testes Automatize é muito limitado.

Na minha experiência, um monte de testes tem de ser realizada manualmente ou seja, um testador de necessidades para empurrar uma sequência de botões e verificar se a máquina se comporta corretamente. Como um desenvolvedor, é realmente difícil de assegurar-se que as alterações não quebrar outra coisa.

Sem testes de regressão adequada a situação fica ainda pior durante refatorações grandes e tal.

Alguém reconhecer o problema? Você achou uma solução boa ou processo para lidar com esse tipo de problema?

Foi útil?

Solução

Pessoalmente, eu sou um grande fã de ter minha compilação código incorporado tanto no hardware alvo e meu próprio computador. Por exemplo, quando visando um 8086, eu incluía tanto um ponto de entrada que mapeia para repor a 8086 hardware e um ponto de entrada DOS. O hardware foi projetado para que todos foi memória IO mapeado. então eu condicionalmente compilado em um simulador de hardware e condicionalmente mudou as posições de memória hardware para memória hardware simulado.

Se eu fosse para o trabalho em uma plataforma não-x86, eu provavelmente escrever um emulador vez.

Outra abordagem é criar um equipamento de teste, onde todas as entradas e saídas para o hardware são controlados através de software. Nós usamos muito isso em testes de fábrica.

Uma vez que construiu um simulador para o hardware IO. Dessa forma, o resto do sistema pode ser testado através do envio de alguns comandos pela CAN para colocar o hardware em modo simulado. Da mesma forma, software bem consignado poderia ter um "modo simulado", onde o IO é simulado em resposta a comandos de software.

Outras dicas

Para o teste incorporado, gostaria de sugerir que você projetar seu caminho para sair desta muito cedo no processo de desenvolvimento. Sandboxing seu código incorporado para funcionar em uma plataforma PC ajuda muito, e depois fazer zombando depois :)

Isto irá assegurar integrety para mais do mesmo, mas você ainda precisa fazer sistema e testes de aceitação manualmente mais tarde.

Alguém reconhecer o problema?

A maioria definitivamente.

Você achou uma solução boa ou processo para lidar com este tipo de problema?

A combinação de técnicas:

  • testes automatizados;
  • testes
  • força bruta, isto é, aqueles que não são tão inteligente como testes automatizados, mas que testar repetidamente uma funcionalidade durante um longo período (horas ou dias), e pode ser deixado para ser executado sem intervenção humana;
  • Testes manuais (muitas vezes difíceis de evitar);
  • Teste em um emulador de software em um PC (ou como um último recurso, um emulador de hardware).

No que diz respeito à compilação em um compilador PC:. Que certamente faz sentido para os módulos de alto nível, e para os módulos de baixo nível com um arnês adequado test

Quando se trata de, por exemplo, partes do código que têm de lidar com sinais em tempo real de várias fontes, a emulação é um bom lugar para começar, mas eu não acho que isso é suficiente. Muitas vezes não há substituto para testar o código no hardware real, na medida em um ambiente mais realista possível.

Ao contrário da maioria respondedores até agora, eu trabalho com ambientes incorporados que não se assemelham sistemas desktop em tudo, e, portanto, não pode emular o sistema embarcado no ambiente de trabalho.

Para escrever bons sistemas de teste, você precisa de seu sistema de teste para ter feedforward e feedback. JTAG é a forma de feed-forward comum mais para controlar o dispositivo. Você pode definir o estado completo do dispositivo (talvez até todo o conselho se você tiver sorte) e, em seguida, definir o código de teste para executar. Em que ponto você receber o seu feedback. JTAG também pode servir como um dispositivo de feedback. No entanto, um analisador lógico com uma API de software é o melhor nesta situação. Você pode olhar para certos níveis nos pinos, contar pulsos e até mesmo fluxos de dados de análise de streaming de periféricos.

Fornecer teste arreios / caixas de areia / maquetes para subsistemas individuais, e para todo o projeto, que emular o ambiente de destino.

Esta não remove a necessidade de testes em ambiente real, mas reduz consideravelmente o seu número como a simulação vai pegar a maioria dos problemas assim no momento em que todos passam e você realizar o teste-driven humana caro você está razoavelmente confiantes de que irá passar essa primeira vez.

Além das sugestões até agora sobre como garantir a sua aplicação pode construir e, pelo menos, parcialmente testar no PC do normal (que também é útil para usando ferramentas como Valgrind) Gostaria de pensar sobre o seu projeto de software.

Um projeto em que trabalhei tinha um componente para a condução do hardware, um para lidar com tarefas de gestão e outro de gerenciamento de rede. O gerenciamento de rede foi feita por SNMP por isso foi fácil para escrever scripts que corriam remotamente para conduzir o hardware para fazer algo.

Para executar os testes de hardware de baixo nível I escreveu um leitor script simples que scripts de teste analisados ??e comandos injetado no IPC da minha motorista. Como a saída foi baseado em vídeo era difícil para automatizar o verificação da manipulação que exceda a olho, mas certamente salvou me RSI. Ele também foi muito útil em scripts de geração de que o estresse testado ou simuladas condições de falha conhecidos para garantir erros não re-ocorrer.

Se eu onde fazer tudo de novo eu provavelmente implementar um compartilhada biblioteca usada pelo equipamento de teste eo código real para enviar o núcleo mensagens. Eu, então, encerrar a lib em python (ou algo similar) para que meu teste poderia ser um pouco mais "scripts".

Concordo com todos os que dizem hardware automatizado é uma obrigação - estamos usando essa abordagem para software embarcado teste com algumas de nossas unidades. Nós construímos estações de teste de dois rack de grandes cheias de simuladores de hardware e usamos NI TestStand com uma mistura de VIs do LabVIEW, C # código, DLLs fornecedores, etc para gerenciar tudo isso. Temos que testar um monte de hardware - que é por isso que temos tudo isso porcaria. Se você está apenas testando software, então você pode escalá-lo de volta para o essencial. Testando uma interface serial? Basta construir um dispositivo para simular o tráfego de série e exercer todas as mensagens (e algumas mensagens não-válidos) para garantir as responde de software corretamente. Teste DIO? Isso é fácil de há uma abundância de periféricos USB ou dispositivos embarcados para DIO simulação. Se o timing é importante que você terá que usar outro dispositivo embutido para obter as tolerâncias apertadas que você está procurando, caso contrário, um PC vai fazer muito bem.

A parte importante é sempre saber o que você está testando e não para teste de qualquer coisa diferente do que isso. Se for software, certifique-se o teste é independente do hardware com o maior grau possível. Se você é geração de testes de forma de onda ou algo com um D / A, separar as tarefas - teste do D / A de hardware com uma compilação especial de software no dispositivo embutido que não faz nada extravagante, exceto cuspir uma sequência previamente combinado de níveis de tensão. Então você pode ver se suas referências estão fora, se os seus filtros estão definidas para a frequência errada, etc., então você deve ser capaz de testar o independente do hardware software - use uma placa de desenvolvimento para testar o software e verificar o comportamento no processador pins está correto.

Uma solução em uso onde eu trabalho é automatizado processo de construção e teste noturno.

  1. Confira código cabeça tronco do controle de origem.
  2. projeto Construir e carga para alvo.
  3. Executar PC controlado automatizado scripts de teste.

Os scripts de teste são fáceis de executar se você estiver usando algum tipo de protocolo de comunicação. Isso é bom para testes de unidade interna. O que torna a situação mais interessante (e completo) é fazer com que um feixe de cabos que se conecta à placa para simular IO externo.

Emulando é bom para o desenvolvimento e teste inicial básico, mas o tempo operacional físico real é o único método confiável para validação do sistema. operação física pode tona questões não-código (causada por métodos de codificação), tais como afundamentos de tensão, ruído, falhas, problemas de debounce, condições de corrida, etc.

teste do sistema prolongada é importante também. A criação de um teste automatizado para abusar um sistema continuamente por dias / semanas reta é uma boa maneira de forçar as questões que podem não surgir até vários meses depois no campo. Dizer a um cliente para poder ciclo apenas quando as coisas começam a agir engraçado não é um luxo que todas as indústrias podem entreter.

Na minha experiência, testes de hardware automatizado tem sido fundamental. - Investir na dupla compilação tanto em PC e alvo é um "bom ter" recurso, mas dada a escolha, eu prefiro investir em testes de hardware automatizado. Vai ser uma solução mais rentável no final uma vez que as armas de fabricação vai quiser / precisar a capacidade de qualquer maneira para análise de falhas.

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