Características do Código para Aplicações Militares e Aeroespaciais

Software desenvolvido para setores críticos como defesa, transporte, saúde e finanças, além da indústria aeroespacial, compartilha um requisito fundamental: alta confiabilidade. Para atingir esse patamar, diversos pontos-chave devem ser rigorosamente implementados:

  • Aderência estrita a normas de desenvolvimento estabelecidas.
  • Conformidade rigorosa com processos de revisão de código.
  • Elevada cobertura de testes, incluindo testes de unidade e integração.
  • Alta correspondência entre os requisitos definidos e a implementação.
  • Avaliação quantitativa de todos os critérios mencionados.

As exigências de cobertura e correspondência frequentemente chegam a 100%. Uma característica comum nesses softwares é que o volume de código dedicado a testes automatizados e de unidade supera o código do produto em si. Adicionalmente, a documentação associada é completa e detalhada.

No que diz respeito à auditoria de código, a utilização de ferramentas de análise de nível industrial é essencial para quantificar métricas de segurança. Essas ferramentas, operando sob um princípio de máxima cautela, podem gerar um grande volume de alertas, muitos dos quais podem ser falsos positivos. A investigação e resolução desses alertas demandam recursos humanos e materiais significativos. Recomenda-se a consulta à norma nacional GB/T39412: Especificação de Segurança de Tecnologia da Informação — Norma para Auditoria de Segurança de Código.

Para diretrizes de codificação, documentos como GJB 5369: Subconjunto Seguro de Linguagem C para Software de Modelos Aeroespaciais (com restrições de direitos autorais) são referências. Tais especificações geralmente restringem o desenvolvimento a um subconjunto restrito da linguagem de programação. Funcionalidades que não são diretamente controláveis pelo desenvolvedor ou que não passaram por validação extensiva são proibidas. A utilização de bibliotecas de terceiros não certificadas ou não confiáveis é terminantemente vedada, e até mesmo a biblioteca padrão pode não atender aos requisitos de alta confiabilidade.

A título de exemplo, o padrão MISRA, criado pela Motor Industry Software Reliability Association (MISRA) do Reino Unido, oferece diretrizes para desenvolvimento em C/C++ amplamente adotadas no setor embarcado. Embora também protegido por direitos autorais, seus princípios são conhecidos. As normas para aplicações militares e aeroespaciais são ainda mais rigorosas que as do MISRA.

Considere o seguinte trecho de código:


if (condicao_inicial) {
   executar_acao_um();
} else if (condicao_secundaria) {
   executar_acao_dois();
} // Não conforme
   

Este código, aparentemente inofensivo, viola as diretrizes MISRA. A norma exige que todas as estruturas if...else if terminem com um ramo else, mesmo que este fique vazio e seja acompanhado de um comentário explicando a ausência de ações e potenciais futuras alterações.

Outro exemplo envolve o uso de funções da biblioteca padrão:


#include <stdlib.h>

int32_t* alocar_memoria(uint32_t tamanho) {
   return (int32_t*)malloc(tamanho * sizeof(int32_t)); // Não conforme
}
   

Funções relacionadas à gestão de recursos, interrupções, sinais ou escalonamento de threads na biblioteca padrão são frequentemente proibidas. Isso ocorre porque os algoritmos e estratégias subjacentes a essas funções não estão sob o controle do usuário. Muitos detalhes são definidos pela implementação específicca da linguagem ou não são totalmente cobertos pela norma. Sistemas embarcados com requisitos de alta confiabilidade devem evitar o uso de tais funções.

Um terceiro exemplo ilustra restrições adicionais:


int32_t* obter_referencia(int32_t& valor) {
   return &valor; // Não conforme
}
   

Este código retorna o endereço de um parâmetro de referência. Embora semanticamente válido em C++, ele desobedece às normas. A obediência estrita às especificações é um princípio fundamental para o desenvolvimento de software de alta confiabilidade.

Devido às restrições de direitos autorais e aos custos associados à aquisição de documentação oficial de diversas normas, o departamento de Engenharia de Qualidade da Qihoo 360 compilou um conjunto de regras, conhecido como 360 Safe Rules Collection. Este conjunto, aplicável a software de desktop, servidor e embarcado, está disponível publicamente no GitHub e pode ser baixado gratuitamente.

As normas para software de alta confiabilidade são, por natureza, extremamente rigorosas. No entanto, essas restrições são baseadas em razões técnicas sólidas e lições aprendidas de falhas passadas. Compreender e aplicar essas normas é um aspecto crucial para o desenvolvimento e a prática em angenharia de software avançada.

Tags: MISRA C segurança de software Desenvolvimento Embarcado Normas de Codificação Confiabilidade de Software

Publicado em 7-24 13:18