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.
A Engenharia de Software se estrutura em 3 elementos principais: processos, métodos e ferramentas (Pressman).
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 CASE – Computer 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!