Qual o nível de maturidade do seu software embarcado?

Olá, visitante!

Como primeiro post de conteúdo deste site, eu gostaria de falar um pouco sobre a maturidade do software embarcado….

Maturidade de Software? O que é isso?

Para colocar o produto da sua empresa em funcionamento será preciso programar ele, lógico. O seu código pode ser feito de diversas formas, usando diversos métodos e estratégias diferentes. Temos uma liberdade gigantesca para isso e geralmente, muitos desses caminhos chegam no ‘mesmo’ resultado, que seria do seu produto funcionando. Mas será que chega mesmo em um resultado ‘igual’?

A sua empresa começa a ganhar maturidade no seu software quando ela reconhece que não basta só que o código faça o produto funcionar. A maturidade traz a consciência que código bom é aquele que é robusto, reaproveitável e escalável. Um software maduro permite que a sua empresa tenha cada vez mais velocidade para lançar novos produtos, porque cada novo produto feito significa novos códigos para serem integrados, com mínimo esforço, para os futuros projetos.

Certo… Quais são os níveis?

Vamos para uma breve descrição de cada um:

Nível C: Big Blob of Code

O grande primeiro nível de maturação, geralmente é o utilizado pelos desenvolvedores em seus primeiros anos de trabalho. É possível ainda encontrar muitas empresas nesta etapa.

Neste nível os projetos de software embarcado são feitos com um ou poucos arquivos de código fonte, sem nenhuma estruturação bem definida e sem a separação de responsabilidades. Muitos produtos incríveis podem ser feitos – e são – assim, mas o reaproveitamento de suas lógicas em outros projetos é muito baixo. Isso sem falar da dificuldade em dar manutenção ou de adicionar funções.

Em geral, softwares neste nível apresentam:

  • Pouca ou nenhuma modularização, estruturação ou abstração.
  • Não são reaproveitáveis, novos produtos são feitos praticamente do zero.
  • Alterações e correções são difíceis de serem feitas.

Nível B: Modularizado

No nível modularizado a sua empresa entendeu que o software não precisa ser um amontoado de código, ele pode ser melhor organizado. Esse despertar geralmente acontece quando ela descobre os sistemas operacionais para seus sistemas embarcados, aprende o conceito de tasks e da independência entre as suas partes.

Neste nível os projetos de software embarcado são feitos com grandes blocos. Esses blocos são relativamente independentes um do outro mas ainda se vê interferência entre eles. Também, os projetos ainda são bem amarrados aos microcontroladores e aos sistemas operacionais que estão sendo feitos. Porém, já é mais fácil portar seus códigos para outros produtos e adicionar novas funções. A maturidade está começando…

Em geral, softwares neste nível apresentam:

  • Uma modularização de grandes blocos de código.
  • Pouca ou nenhuma estruturação do código ou abstração.
  • Existe algum reaproveitamento mas aparecem dificuldades e surpresas no caminho.

Nível A: Estruturado

No nível estruturado a empresa já tem a maturidade de entender que o software pode ser estruturado em camadas. Cada camada tem a sua responsabilidade e cada uma tem o seu conjunto de módulos. A grande vantagem da estruturação é que as camadas são dependentes de abstrações e não de implementações específicas. Assim, por exemplo, se for necessário trocar o microcontrolador, basta trocar a camada de driver e todas as outras camadas continuam iguais, sem serem tocadas.

Também existem outras propriedades vantajosas, este já é um excelente nível de maturidade e poucas empresas chegam aqui. Mas será que pode ser ainda melhor?

Em geral, softwares neste nível apresentam:

  • Boa modularização, muitos pequenos módulos.
  • Código estruturado, separado por camadas, com abstrações.
  • Surge velocidade e flexibilidade em trabalhar em novos projetos ou em modificações.

Nível S: Independência

Neste último nível, além de todas as qualidades do nível estruturado, o desenvolvimento é feito em sua maioria independente da plataforma, feito usando apenas os computadores dos desenvolvedores.

Os códigos não são apenas compilados nos PCs mas também são testados neles. Testes de integração nas placas dos produtos são minimizados e podem ser postergados para etapas mais avançadas dos projetos, permitindo que as equipes de desenvolvimento de hardware e software trabalhem em paralelo., se tornando praticamente independentes.

A característica principal deste estado é a alta velocidade e segurança. É rápido trocar de plataforma, modificar funções e criar novos produtos baseados nos atuais. O seu software está maduro!

Em geral, softwares neste nível apresentam:

  • Excelente modularização, estruturação e abstração.
  • Robustez contra aparecimento de novos bugs e de regressões.
  • Alta velocidade na criação de novos produtos e de customizações dos produtos atuais.

Mas eu já tenho tanto software feito, eu consigo subir de nível?

Claro que sim! Independente da situação do seu software embarcado, certamente é possível trabalhar nele para crescer seu nível. Para isso, algumas mudanças precisarão ser feitas, começando por entender melhor como que a sua estrutura pode ser e quais as primeiras ações que são necessários.

A maturação do software embarcado não é apenas uma evolução do código, mas é também uma mudança cultural de como deve ser o desenvolvimento de produtos.

Assim, eu gostaria de convidar você para participar do Seminário de Sistemas Embarcados e IoT 2020, que acontecerá agora, nos próximos dias 27 e 28 de Julho e que é organizado pela equipe do Embarcados. Eu estarei lá discutindo um pouco sobre este assunto na minha palestra, no dia 28, às 15 horas, e estarei à disposição para conversar, tirar dúvidas e dar mais informações.

Inscreva-se e vamos trabalhar juntos para evoluirmos os nossos softwares embarcados!

Update: O Seminário já aconteceu!

Aqui embaixo compartilho a minha palestra no seminário e aqui comento sobre algumas perguntas feitas dela!