essencia-da-engenharia-de-software

Essência da Engenharia de Software

Quem trabalha com tecnologia sabe que no nosso dia a dia nos deparamos com os mais diversos problemas no desenvolvimento / manutenção de um software e que acabamos por vezes tendo ações precipitadas que poderiam ser evitadas se lembrássemos de algumas questões básicas, mas essências da Engenharia de Software.

Claro que dificilmente recorremos a tais princípios, até porque a pressão existente pela resolução do problema nem sempre permite uma melhor abordagem para a sua resolução.

Além de que em um primeiro momento os problemas que nos são apresentados se parecem com obstáculos totalmente novos dos que já tínhamos nos deparado antes.

Pode ser que esta afirmação tenha sim um pouco de verdade em algumas situações, mas dificilmente esta afirmação estará 100% correta.

Até porque muitos dos problemas a qual nos deparamos no dia a dia possuem sim a sua semelhança, mesmo que não venhamos a dar conta disso em um primeiro momento.

E se muitos dos problemas que tratamos possuem alguma semelhança, porque não tentar abordar soluções de acordo com algumas instruções essências da Engenharia de Software?

A partir de um clássico livro intitulado, “How to Solve it”, o autor esboçou um procedimento genérico para solucionar quaisquer tipos de problema, e que de acordo com Roger S. Pressman estes acabam por ser a essência da Engenharia de Software, seriam eles:

Entender o problema (comunicação e análise)

  • Quem são os interessados na resolução do problema?
  • Quais são as variáveis? Que dados, funções, características e comportamento são necessário para resolver adequadamente o problema?
  • O problema pode ser dividido em partes menores?
  • O problema pode ser representado graficamente? Um modelo de análise pode ser criado?

Planejar a solução (modelagem e projeto de software)

  • Você já viu problemas semelhantes? Existe algum padrão que são reconhecíveis em uma solução potencial?
  • Um problema semelhante foi resolvido? Há elementos da solução a qual podem ser reutilizados?
  • Podem ser definidos subproblemas? Se sim, há soluções prontamente aparentes para os subproblemas?
  • Você pode representar uma solução de modo que leve a implementação efetiva? Um modelo de projeto pode ser criado?

Executar um plano (geração do código)

  • A solução está de acordo com o plano? O código fonte pode ser rastreado até o modelo de projeto?
  • Cada componente parte da solução está provavelmente correto? O projeto e o código foram revisados, ou melhor, foram aplicadas provas de correção de algum algoritmo?

Examinar o resultado quanto a precisão (teste e garantia da qualidade)

  • É possível testar cada componente que faz parte da solução? Foi implementado uma estratégia de teste razoável?
  • A solução produz resultados que estão de acordo com os dados, funções, características e comportamento que são necessários? O software foi validado com base em todos os requisitos dos interessados?