No texto de hoje, vamos conversar sobre Engenharia de Software. Essa é a área da Computação preocupada com a aplicação de princípios, métodos e teorias que possibilitam planejar, modelar, projetar, implementar, medir e aprimorar softwares. Isso é necessário para que consigamos obter um software com alta produtividade no processo de desenvolvimento e com custos, prazos e qualidade controlados.

A Engenharia de Software surge a partir da “crise do software”, um termo utilizado nos anos 1970 para expressar as dificuldades do desenvolvimento de software frente ao aumento da demanda, a complexidade dos problemas a serem resolvidos e a inexistência de processos que gerassem software de qualidade respeitando os prazos e custos.

Crise do Software

A Engenharia de Software se estrutura em 3 elementos principais: processos, métodos e ferramentas (Pressman).

Elementos da Engenharia de Software

Um processo pode ser definido como uma abordagem adaptável que possibilita equipe de TI selecionar e organizar o conjunto apropriado de tarefas para entregar software, e todos os artefatos relacionados, dentro do prazo e com qualidade. Processos descrevem um conjunto de passos gerais a serem seguidos pela equipe de TI, não existindo uma abordagem única e ideal para a Engenharia de Software devido a diversidade de tipos de sistemas e organizações que usam estes sistemas. É aqui que se enquadram as abordagens tradicionais (como o modelo cascata, iterativo e incremental, espiral, processo unificado) e métodos ágeis (como o XP e Scrum) para desenvolvimento de software.

Os métodos descrevem como realizar um passo específico do processo. Também não existe um método ideal, mas diferentes métodos aplicáveis a diferentes áreas e etapas do desenvolvimento. Dentre os métodos adotados na Engenharia de Software, podemos citar a Análise Estruturada, a Análise Essencial e os Métodos orientados a objetos.

As ferramentas (conhecidas também como ferramentas CASEComputer Aided Software Engineering ou Engenharia de Software Apoiada por Computador) englobam o suporte automatizado para os processos e métodos adotados. Elas complementam as boas práticas de Engenharia de Software, não substituindo-a (aqui é importante lembrar que “Um tolo com ferramentas, ainda é apenas um tolo”). Essas ferramentas apoiam todos os passos do desenvolvimento de software, sendo classificadas em:

  • Upper-CASE: Ferramentas que apoiam as etapas iniciais da criação do software (planejamentos, análise, projeto);
  • Lower-CASE: Ferramentas que apoiam a parte física da criação do software (implementação, testes, manutenção);
  • Integrated-CASE: Ferramentas que cobrem todo o ciclo de vida do software.

Além disso, quando conversamos sobre Engenharia de Software, precisamos desmitificar algumas afirmações:

Afirmação

Realidade

“Uma equipe com padrões e procedimentos definidos encaminha bem o desenvolvimento do software…” “… mas é necessário que esse manual reflita a prática de desenvolvimento e que essa prática seja verificada com frequência.”
“A equipe possui computadores de última geração…” “… porém, mais importante que hardware de última geração é utilizar as ferramentas CASE adequadas.”
“Basta aumentar equipe para honrar os prazos de projetos que estão atrasados…” “… mas não esqueça que novos profissionais devem ser treinados, o que pode gerar mais atrasos.”
“O trabalho termina assim que o software entra em funcionamento…” “… só que o maior esforço do desenvolvimento ocorre após a implantação.”
“É impossível avaliar qualidade enquanto o software não entrar em funcionamento…” “… mas a preocupação com qualidade deve ocorrer durante todo processo de desenvolvimento.”
“O produto final do projeto é o software funcionando…” “… só que o produto final também inclui um conjunto de outros documentos que acompanham o software.”
“Uma descrição breve e geral dos requisitos é suficiente para iniciar projeto…” “… mas o cliente deve definir requisitos precisos para que o projeto alcance sucesso. Sem detalhes, podemos desenvolver algo sem utilidade ou incorreta.”
“Os requisitos mudam durante o desenvolvimento, mas o software suporta alterações…” “… o software realmente é mais flexível que outros produtos, mas não suporta alterações significativas no escopo sem influenciar o custo e o prazo do projeto.”

 

Você já conhecia a área de Engenharia de Software? Ficou com dúvida em alguma coisa? Contribua nos comentários!