Pergunta

Tenho a necessidade de tornar uma grande quantidade de código compatível com MISRA.
Primeira pergunta:Alguém pode dar um estimativa por passar código bem escrito para sistemas embarcados com base na experiência.Entendo que "bem escrito" é mal definido e vago, por isso peço uma estimativa bruta.
Segunda questão:Qualquer recomendação de ferramenta que possa ser personalizável (ou seja, permitindo suprimir avisos específicos) e usada em ambiente de construção automática (ou seja, interface de linha de comando)
Quaisquer outras sugestões úteis que possam ajudar nesta tarefa.
Obrigado Ilya.

Foi útil?

Solução

Eu também recomendo fortemente o PC-Lint.Se acontecer de você estar compilando seu código com o Visual Studio, recomendo um plug-in 'Visual Lint' da Riverblade.Se você não conseguir compilar o código no Visual Studio, ainda poderá executar o PC-Lint na linha de comando com bons resultados.

Alguns compiladores de sistemas embarcados fornecem testes de conformidade MISRA como avisos do compilador.Eu uso o compilador IAR para desenvolvimento Arm7/Arm9.Ele fornece uma lista de verificação de conformidade MISRA fácil de configurar diretamente na configuração do compilador.

É difícil criar uma regra prática para estimar o tempo que levaria para tornar algum código bem escrito compatível com MISRA.Depende muito dos hábitos de codificação existentes dos programadores e de quão rigorosamente eles seguem as regras MISRA em primeiro lugar.

Estimativas aproximadas:
2 a 3 dias para se tornar adepto do uso do PC-Lint.
Passo inicial para tornar o código existente compatível com MISRA:Em primeiro lugar, 10 a 25 por cento do tempo gasto escrevendo o código.
Manter o código compatível com MISRA:5 a 10 por cento adicionados ao desenvolvimento de código.Metade desse custo é mudar os hábitos de seus programadores para seguirem o 'jeito MISRA' de fazer as coisas.A outra metade é o custo extra de teste e inspeção de código para garantir a conformidade com a MISRA.

Outras dicas

Tornar o código compatível com Misra não é uma tarefa muito difícil - se você seguir boas práticas de programação.Você pode achar algumas das regras de ponteiro um pouco complicadas, se o código que você está tentando cumprir tiver alguma aritmética de ponteiro estranha e maravilhosa.

Eu apoiaria a recomendação de Greg para o PC Lint, mas também vale a pena dar uma olhada no Splint de código aberto, embora entre eles (e o sistema de alerta do compilador), eu estime que você ainda será capaz de cobrir apenas 80% das regras do Misra - o restante provavelmente precisará ser revisado manualmente.

Eu uso o PC Lint para análise estática de código C e C++.Ele pode ser configurado para mostrar quais regras MISRA foram violadas e possui uma interface de linha de comando.

Eu usei uma ferramenta comercial chamada Controle de qualidade.A ferramenta é capaz de impor MISRA

Ele possui uma interface de linha de comando, para que você possa configurá-lo para ser executado em um ambiente de construção automatizado.As regras a serem aplicadas são configuráveis, mas espere que alguém gaste algum tempo configurando-as.A aplicação do MISRA é bastante simples e funcionou bem.Disseram-me (e isso é apenas em terceira mão) que esta é uma das ferramentas que algumas agências (como a FDA) usam para avaliar o código.Como a maioria das ferramentas de análise estática, é necessário lidar com ruídos (falsos positivos).A última vez que o usei, ele não tinha um bom meio de marcar/impedir que um falso positivo ocorresse novamente (sem alterar o código do qual estava reclamando).

Suspeito que um engenheiro júnior levará até uma semana (4 a 5 dias) para configurá-lo (supondo que esteja determinado a fazê-lo funcionar como você deseja).

Por outro lado, outras ferramentas comerciais de análise estática provavelmente também têm aplicação de MISRA.Alegadamente (de acordo com seu representante de vendas), Klocwork faz.

Tivemos um problema semelhante de modernização das regras de Misra.Tivemos alguns problemas de qualidade do código em um projeto grande e decidimos usar o MISRA para melhorar a qualidade do código.

Usamos o compilador Green Hills que suporta regras MISRA C.Também há verificadores independentes disponíveis.Dependendo do que você deseja fazer, pode ser um pouco exagerado ativar todas as regras.Ativamos uma regra por vez para dar às pessoas tempo para corrigir um número limitado de problemas semelhantes, caso contrário você ficará totalmente sobrecarregado com a quantidade de erros.

Como nossos avisos foram gerados pelo compilador e não por uma ferramenta independente, você vê os erros à medida que desenvolve e não apenas quando executa o verificador.À medida que continuamos desenvolvendo, tornamos nosso código compatível e não de uma só vez.Isso também evita que velhos hábitos estraguem o novo código, fazendo com que você tenha que retrabalhá-lo novamente mais tarde.

Algumas vezes é difícil obter conformidade com o código antigo, pois ninguém sabe exatamente como o código funciona.Espero que você tenha testes de unidade.

Entendo que esta é uma questão antiga, mas para o benefício de quaisquer outros arqueólogos (ou pesquisadores), é importante lembrar que o MISRA fornece diretrizes que nem sempre deve ser seguido cegamente.

Recomendo escrever um novo código com o MISRA em mente;portanto, será muito mais fácil manter a conformidade.

No entanto, isso nem sempre é possível - e em particular, ao tentar fazer engenharia reversa do código para atender às diretrizes.Neste caso sugiro que você se concentre nas regras Obrigatórias e trate os Avisos como um bônus...custo x benefício vale aqui também!

Além disso, tenha em mente que existe um processo de desvio - é melhor manter um código limpo e sustentável com um desvio, do que inventar um espaguete compatível, mas ilegível.

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