Engenharia de software: o que é e quais são seus processos

Conheça o ciclo de vida do software, os principais modelos de desenvolvimento, requisitos, testes, Scrum, DevOps e o que mais cai em concursos de TI

Por
Publicado em
11 min. de leitura

Entenda o que é engenharia de software, o que ela faz, quais são as etapas do ciclo de vida, os principais modelos de processo e como o tema é cobrado em concursos públicos

Olá, querida(o) estudante! Neste artigo, vamos estudar uma das disciplinas mais importantes — e mais cobradas — em concursos de Tecnologia da Informação: a engenharia de software.

Entender o que é engenharia de software vai além de saber programar. A disciplina envolve o ciclo de vida do software, modelos de desenvolvimento, requisitos, testes, qualidade e métodos ágeis, além de temas mais recentes, como DevOps, integração e entrega contínuas (CI/CD), segurança, arquitetura e controle de versão.

Ao longo do texto, você vai entender como essas peças se encaixam, quando cada modelo ou técnica é mais adequado e quais diferenças conceituais as bancas mais exploram.

O que é engenharia de software

Engenharia de software é a disciplina da engenharia que trata de todos os aspectos da produção de software, desde a concepção e a especificação do sistema até a sua manutenção depois que ele entra em uso. A definição, consagrada por Ian Sommerville, é a mais cobrada em provas.

O IEEE complementa essa ideia ao definir a engenharia de software como a aplicação de uma abordagem sistemática, disciplinada e quantificável ao desenvolvimento, à operação e à manutenção do software.

A disciplina surgiu no fim da década de 1960, em resposta à chamada crise do software: projetos que estouravam prazos e orçamentos, sistemas cheios de falhas e difíceis de manter. A proposta era aplicar ao software o mesmo rigor usado em outras engenharias.

O que faz a engenharia de software

Na prática, a engenharia de software organiza o desenvolvimento para que o produto final seja funcional, confiável, fácil de manter e entregue dentro do prazo e do orçamento. Para isso, ela atua em diversas frentes:

  • Processos: define a sequência de atividades do desenvolvimento (os modelos de processo, como cascata e ágil).
  • Requisitos: identifica e documenta o que o sistema deve fazer.
  • Projeto e arquitetura: define como o sistema será estruturado.
  • Qualidade e testes: verifica se o software atende aos requisitos e está livre de defeitos.
  • Gerência: planeja prazos, custos, riscos, equipes e configuração (versões do software).
  • Manutenção e evolução: corrige falhas e adapta o sistema a novas necessidades.

Quais são as etapas do ciclo de vida de um software

O ciclo de vida do software é o conjunto de etapas pelas quais um sistema passa, desde a ideia inicial até a sua desativação. Os nomes variam conforme o autor, mas as atividades fundamentais são:

  1. Levantamento e análise de requisitos: entender o problema e definir o que o sistema deve fazer, junto aos usuários e demais interessados.
  2. Projeto (design): definir a arquitetura, os componentes, as interfaces e o modelo de dados — ou seja, como o sistema atenderá aos requisitos.
  3. Implementação (codificação): transformar o projeto em código-fonte.
  4. Testes (verificação e validação): verificar se o software funciona corretamente e se atende às necessidades do usuário.
  5. Implantação (deploy): colocar o sistema em produção, disponível para os usuários.
  6. Manutenção e evolução: corrigir defeitos, adaptar o sistema a novos ambientes e incluir melhorias.

Sommerville resume essas atividades em quatro grandes grupos, que aparecem com frequência em provas: especificação, projeto e implementação, validação e evolução.

Um ponto importante é que essas etapas não são isoladas. Uma falha nos requisitos se propaga para o projeto, o código e os testes — e, quanto mais tarde um erro é descoberto, mais caro é corrigi-lo. Por isso, cada etapa alimenta a seguinte: os requisitos orientam o projeto e servem de base para os casos de teste, e o feedback da manutenção gera novos requisitos. O que muda de um modelo de processo para outro é a ordem e a frequência com que essas etapas acontecem.

Vale ainda conhecer a distinção entre os tipos de manutenção, tema clássico de prova:

  • Corretiva: corrige defeitos encontrados.
  • Adaptativa: adapta o software a mudanças no ambiente (novo sistema operacional, nova legislação).
  • Perfectiva (evolutiva): inclui melhorias e novas funcionalidades.
  • Preventiva: melhora a manutenibilidade para evitar problemas futuros.

Qual é a diferença entre engenharia de software e programação

Programação é a atividade de escrever código-fonte em uma linguagem de programação para resolver um problema. Engenharia de software é muito mais ampla: envolve todo o processo de produção do software, do qual a programação é apenas uma das etapas (a implementação).

Enquanto a programação responde à pergunta “como escrever este código?”, a engenharia de software se preocupa com questões como: o que exatamente o cliente precisa? Como o sistema será estruturado? Como garantir a qualidade? Quanto vai custar e quanto tempo vai levar? Como manter e evoluir o sistema por anos?

Uma boa analogia é a construção civil: saber assentar tijolos (programar) é essencial, mas construir um prédio exige projeto arquitetônico, cálculos estruturais, cronograma, orçamento e fiscalização (engenharia). Um programa pequeno, feito por uma pessoa para uso próprio, pode dispensar boa parte desse rigor; um sistema bancário ou governamental, usado por milhões de pessoas e mantido por diversas equipes, não.

Quais são os principais processos e modelos de desenvolvimento de software

Um modelo de processo de software é uma representação simplificada de como as etapas do ciclo de vida são organizadas. Os mais cobrados são:

  • Cascata (waterfall ou ciclo de vida clássico): as etapas acontecem em sequência linear — requisitos, projeto, implementação, testes e implantação —, e cada fase só começa quando a anterior termina. É fortemente baseado em documentação.
  • Incremental: o sistema é entregue em partes (incrementos), cada uma com uma parcela das funcionalidades. O cliente começa a usar o software mais cedo.
  • Prototipação: constrói-se um protótipo rápido para ajudar o cliente a esclarecer requisitos que ainda não estão claros.
  • Espiral (Barry Boehm): combina iterações com uma forte ênfase na análise de riscos a cada volta da espiral.
  • Processo Unificado (RUP): iterativo e incremental, organizado em quatro fases — concepção, elaboração, construção e transição — e guiado por casos de uso e centrado na arquitetura.
  • Métodos ágeis (Scrum, XP, Kanban): desenvolvimento em ciclos curtos e iterativos, com entregas frequentes, colaboração constante com o cliente e abertura a mudanças.

Qual é a diferença entre o modelo cascata e as metodologias ágeis

Essa é a comparação mais clássica do tema:

CaracterísticaCascataÁgil
FluxoSequencial e linearIterativo e incremental
RequisitosDefinidos no início, estáveisEvoluem ao longo do projeto
EntregasUma entrega no finalEntregas frequentes e funcionais
MudançasCaras e difíceisBem-vindas, mesmo tardiamente
DocumentaçãoExtensa e formalSuficiente, sem excessos
Participação do clienteConcentrada no início e no fimContínua

O Manifesto Ágil (2001) resume a filosofia dos métodos ágeis em quatro valores: indivíduos e interações mais que processos e ferramentas; software em funcionamento mais que documentação abrangente; colaboração com o cliente mais que negociação de contratos; e responder a mudanças mais que seguir um plano. Atenção: o manifesto não diz que os itens da direita não têm valor — apenas que os da esquerda são mais valorizados. Essa é uma pegadinha frequente.

Quando usar cada modelo

Não existe um modelo melhor em qualquer situação. A escolha depende das características do projeto:

  • Cascata: requisitos estáveis e bem compreendidos, contratos de escopo fechado e sistemas críticos ou fortemente regulados, que exigem documentação formal.
  • Incremental: quando o cliente precisa usar parte do sistema logo, ou há restrição de equipe ou orçamento.
  • Prototipação: quando os requisitos estão vagos e o cliente precisa “ver” para decidir.
  • Espiral: projetos grandes, complexos e de alto risco.
  • Ágeis: requisitos incertos ou que mudam com frequência, necessidade de entregar valor rapidamente e equipes pequenas, com cliente disponível para participar.

O que são requisitos funcionais e não funcionais

Requisitos são as descrições do que o sistema deve fazer e das restrições sob as quais ele deve operar. Eles são a base de todo o desenvolvimento — e uma das principais causas de fracasso de projetos quando mal definidos. Dividem-se em dois tipos:

  • Requisitos funcionais (RF): descrevem o que o sistema deve fazer — as funções e serviços oferecidos e como ele deve reagir a determinadas entradas. Exemplos: “o sistema deve permitir o cadastro de usuários”; “o sistema deve emitir relatório mensal de vendas”.
  • Requisitos não funcionais (RNF): descrevem como o sistema deve ser — restrições e atributos de qualidade, como desempenho, segurança, usabilidade, disponibilidade, confiabilidade e portabilidade. Exemplos: “o sistema deve responder às consultas em até 2 segundos”; “o sistema deve estar disponível 99,9% do tempo”; “as senhas devem ser armazenadas criptografadas”.

Uma dica para não errar: se o requisito descreve uma ação ou serviço do sistema, é funcional; se descreve uma qualidade ou restrição, é não funcional. Sommerville ainda menciona os requisitos de domínio, derivados do contexto de aplicação do sistema, como regras de uma legislação específica.

O processo de trabalhar com requisitos é chamado de engenharia de requisitos e inclui atividades como elicitação (levantamento, por meio de entrevistas, questionários, workshops e observação), análise e negociação, especificação, validação e gerenciamento de mudanças.

Quais são os principais tipos de testes de software

Os testes são a principal forma de encontrar defeitos antes que o software chegue ao usuário. Eles podem ser classificados de diferentes formas.

Quanto ao nível (ou estágio) em que são aplicados:

  • Teste de unidade: verifica pequenas partes isoladas do código, como funções e métodos.
  • Teste de integração: verifica se os componentes funcionam corretamente em conjunto.
  • Teste de sistema: avalia o sistema completo, em um ambiente semelhante ao de produção.
  • Teste de aceitação: realizado com o cliente ou usuário para confirmar se o software atende às suas necessidades. Inclui os testes alfa (no ambiente do desenvolvedor) e beta (no ambiente do usuário).

Quanto à técnica:

  • Caixa-preta (funcional): testa as entradas e saídas com base nos requisitos, sem olhar o código interno. Técnicas comuns: partição de equivalência e análise de valor-limite.
  • Caixa-branca (estrutural): testa a lógica interna, com acesso ao código, buscando cobrir caminhos, decisões e laços.

Outros tipos frequentes em provas são o teste de regressão (garante que alterações não quebraram o que já funcionava), o teste de desempenho, incluindo os de carga e estresse, e o teste de segurança.

Também vale diferenciar verificação de validação, distinção atribuída a Boehm: a verificação pergunta “estamos construindo o produto corretamente?” (conformidade com a especificação); a validação pergunta “estamos construindo o produto certo?” (atendimento às necessidades do usuário).

Qualidade de software

A qualidade de software vai além dos testes e envolve todo o processo. A norma ISO/IEC 25010 (família SQuaRE) define as características de qualidade de um produto de software. Na versão de 2011, ainda a mais cobrada em provas, elas são: adequação funcional, eficiência de desempenho, compatibilidade, usabilidade, confiabilidade, segurança, manutenibilidade e portabilidade (a revisão de 2023 renomeou e acrescentou algumas características). Em provas, a norma costuma aparecer ao lado de modelos de maturidade de processo, como o CMMI e o MPS.BR.

O que é Scrum e qual é sua relação com a engenharia de software

O Scrum é um framework ágil para desenvolver e manter produtos complexos. Ele organiza o trabalho em ciclos curtos chamados sprints, com duração fixa de até um mês, ao fim dos quais a equipe entrega um incremento utilizável do produto.

Na engenharia de software, o Scrum é uma das formas de organizar o processo de desenvolvimento: em vez de seguir as etapas do ciclo de vida uma única vez, de forma sequencial, a equipe percorre requisitos, projeto, implementação e testes a cada sprint. Vale notar que o Scrum se concentra na gestão do trabalho e não prescreve práticas técnicas de programação — por isso, é comum combiná-lo com práticas do XP, como programação em pares, TDD e integração contínua.

Segundo o Guia do Scrum (versão de 2020), o framework é formado por:

  • Responsabilidades (accountabilities): o Product Owner, que maximiza o valor do produto e gerencia o Product Backlog; o Scrum Master, que garante que o Scrum seja compreendido e aplicado; e os Developers, que constroem o incremento. Juntos, formam o Scrum Team.
  • Eventos: a Sprint (que contém todos os demais), a Sprint Planning, a Daily Scrum (reunião diária de até 15 minutos), a Sprint Review e a Sprint Retrospective.
  • Artefatos: o Product Backlog (lista ordenada do que é necessário no produto), o Sprint Backlog e o Incremento. Cada artefato tem um compromisso associado: a Meta do Produto, a Meta da Sprint e a Definição de Pronto, respectivamente.

Atenção às pegadinhas: desde 2020, o Guia do Scrum fala em Developers, e não mais em “Development Team”; e o Scrum não é uma metodologia completa, e sim um framework leve, que deixa propositalmente em aberto como o trabalho técnico deve ser feito.

Temas modernos: DevOps, CI/CD, segurança, arquitetura e controle de versão

A engenharia de software evoluiu, e os editais acompanharam essa mudança. Hoje, é comum encontrar os seguintes temas:

  • DevOps: cultura e conjunto de práticas que aproxima as equipes de desenvolvimento (Dev) e de operações (Ops), com foco em colaboração, automação, monitoramento e entregas rápidas e confiáveis. Pode ser visto como uma extensão dos princípios ágeis até a implantação e a operação do software.
  • CI/CD: a integração contínua (CI) consiste em integrar o código dos desenvolvedores ao repositório principal com frequência, executando build e testes automatizados a cada integração. A entrega contínua mantém o software sempre pronto para ser implantado (com uma aprovação manual antes da produção), enquanto a implantação contínua leva cada mudança aprovada nos testes automaticamente para produção.
  • Segurança (DevSecOps): integra práticas de segurança em todo o ciclo de vida, desde os requisitos — e não apenas no final. É a ideia de shift left: antecipar a segurança e os testes para as fases iniciais.
  • Arquitetura de software: define a estrutura de alto nível do sistema. Estilos frequentes em provas incluem a arquitetura em camadas, o padrão MVC, a arquitetura monolítica e os microsserviços (serviços pequenos, independentes e implantados separadamente).
  • Controle de versão: registra o histórico de alterações do código e permite o trabalho simultâneo de várias pessoas. O Git é a ferramenta dominante; é um sistema distribuído, em que cada desenvolvedor tem uma cópia completa do repositório. Comandos como commit, branch, merge, push e pull aparecem com frequência em questões. Em provas, o tema costuma aparecer dentro da gerência de configuração de software.

Repare como esses temas se conectam ao ciclo de vida: o controle de versão sustenta a implementação; a CI automatiza os testes; a CD automatiza a implantação; e o DevOps integra tudo isso à operação e à manutenção.

Questões de concurso comentadas

Vamos ver como a engenharia de software costuma aparecer em provas!

1) Ano: 2025 Banca: CESPE/CEBRASPE

Julgue o próximo item, a respeito de metodologias de gerenciamento de projetos.

A metodologia cascata é altamente iterativa, permitindo revisões e alterações frequentes durante todas as fases do projeto.

Gabarito: Errado

Comentário: o item descreve características dos métodos ágeis, e não do cascata. O modelo cascata é sequencial e linear: cada fase só começa quando a anterior termina, e mudanças nos requisitos após o início do projeto são difíceis e caras. Trocar as características dos dois modelos é uma das estratégias mais comuns das bancas.

2) Ano: 2025 Banca: CESPE/CEBRASPE

A respeito de engenharia de software, julgue o item que se segue.

Em um software, os requisitos não funcionais incluem desempenho, usabilidade, confiabilidade, segurança, disponibilidade e manutenibilidade.

Gabarito: Certo

Comentário: todos os itens listados são atributos de qualidade e restrições do sistema, e não funções que ele executa — portanto, são requisitos não funcionais. Lembre-se da regra: requisito funcional descreve o que o sistema faz; requisito não funcional descreve como o sistema deve ser.

3) Ano: 2025 Banca: CESPE/CEBRASPE

Julgue o próximo item, a respeito de metodologias de gerenciamento de projetos.

No Scrum, product owner é o responsável por maximizar o valor do produto resultante do trabalho do time scrum.

Gabarito: Certo

Comentário: o item reproduz a definição do Guia do Scrum. O Product Owner é responsável por maximizar o valor do produto e por gerenciar o Product Backlog. Cuidado para não confundir com o Scrum Master, responsável pela eficácia do Scrum Team e pela correta aplicação do framework, nem com os Developers, que constroem o incremento.

O que estudar de engenharia de software para concursos públicos

A engenharia de software está presente em praticamente todos os editais de TI, especialmente para cargos de analista e técnico em desenvolvimento de sistemas. Para organizar os estudos, vale dividir o conteúdo pelos tópicos que mais se repetem:

  • Conceitos fundamentais: definição de engenharia de software, crise do software e ciclo de vida.
  • Modelos de processo: cascata, incremental, prototipação, espiral, modelo em V e Processo Unificado (RUP), com suas vantagens, desvantagens e indicações de uso.
  • Métodos ágeis: Manifesto Ágil, Scrum (papéis, eventos e artefatos), XP e Kanban.
  • Engenharia de requisitos: requisitos funcionais e não funcionais, técnicas de elicitação, casos de uso e histórias de usuário.
  • Testes: níveis, caixa-preta e caixa-branca, regressão, TDD, verificação e validação.
  • Qualidade: ISO/IEC 25010, CMMI e MPS.BR.
  • Projeto e arquitetura: padrões de projeto, MVC, camadas, microsserviços, coesão e acoplamento.
  • Modelagem: UML, com destaque para os diagramas de casos de uso, classes e sequência.
  • Práticas modernas: DevOps, CI/CD, gerência de configuração e Git.

Para estudar com eficiência, foque nas diferenças conceituais, que são o principal alvo das bancas: cascata × ágil, requisito funcional × não funcional, verificação × validação, caixa-preta × caixa-branca, entrega contínua × implantação contínua, Product Owner × Scrum Master. Use as obras de Sommerville e Pressman como referência teórica, leia o Guia do Scrum na íntegra (é curto) e resolva muitas questões da banca do seu concurso.

Conclusão

A engenharia de software é a disciplina que organiza todo o processo de produção de software, da especificação à manutenção. Entender o ciclo de vida, saber quando usar cada modelo de processo, distinguir requisitos funcionais de não funcionais, conhecer os tipos de testes, o Scrum e as práticas modernas, como DevOps e CI/CD, é fundamental tanto para a prática profissional quanto para concursos de TI, em que o tema aparece com frequência e quase sempre explorando as diferenças entre conceitos.

Perguntas frequentes sobre engenharia de software

1. O que é engenharia de software? É a disciplina da engenharia que trata de todos os aspectos da produção de software, da especificação à manutenção, aplicando uma abordagem sistemática, disciplinada e quantificável ao desenvolvimento.

2. Quais são as etapas do ciclo de vida de um software? Levantamento e análise de requisitos, projeto, implementação, testes, implantação e manutenção. Sommerville as agrupa em especificação, projeto e implementação, validação e evolução.

3. Qual é a diferença entre engenharia de software e programação? Programação é a atividade de escrever código. Engenharia de software é mais ampla e envolve todo o processo de produção — requisitos, projeto, testes, qualidade, gerência e manutenção —, do qual a programação é apenas uma etapa.

4. Qual é a diferença entre o modelo cascata e as metodologias ágeis? O cascata é sequencial, com requisitos definidos no início e uma entrega no final. As metodologias ágeis são iterativas e incrementais, com entregas frequentes, participação contínua do cliente e abertura a mudanças.

5. O que são requisitos funcionais e não funcionais? Requisitos funcionais descrevem o que o sistema deve fazer, como cadastrar usuários ou emitir relatórios. Requisitos não funcionais descrevem como o sistema deve ser, como desempenho, segurança, usabilidade e disponibilidade.

6. Quais são os principais tipos de testes de software? Quanto ao nível: unidade, integração, sistema e aceitação. Quanto à técnica: caixa-preta e caixa-branca. Também se destacam os testes de regressão, desempenho e segurança.

7. O que é Scrum e qual é sua relação com a engenharia de software? O Scrum é um framework ágil que organiza o trabalho em sprints de até um mês, com papéis, eventos e artefatos definidos. Na engenharia de software, é uma forma de organizar o processo de desenvolvimento de maneira iterativa e incremental.

8. O que estudar de engenharia de software para concursos públicos? Ciclo de vida, modelos de processo, métodos ágeis (especialmente Scrum), engenharia de requisitos, testes, qualidade (ISO/IEC 25010, CMMI e MPS.BR), arquitetura, UML e práticas como DevOps, CI/CD e controle de versão.

Referências

  • SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson, 2018.
  • PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem profissional. 9. ed. Porto Alegre: AMGH, 2021.
  • SCHWABER, K.; SUTHERLAND, J. O Guia do Scrum. 2020.
  • BECK, K. et al. Manifesto para Desenvolvimento Ágil de Software. 2001.
  • ISO/IEC 25010 – Systems and software Quality Requirements and Evaluation (SQuaRE).

Quer mais conteúdos de TI para concursos, com dicas e resumos rápidos? Me acompanhe no Instagram: @dev.anajbsouza 💜

Por
Publicado em
11 min. de leitura

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *