Capítulo 2: Guia de Engenharia de Software para concursos públicos

Mauricio Lacerda
Engenharia de Software para Concursos
8 min readJul 27, 2019

Processo de software

Um processo de software é um conjunto de atividades, ações e tarefas relacionadas que resultam em um produto de software. Os diversos processos de software existentes podem ser adaptados de acordo com a necessidades de cada projeto porém, em geral, compartilham 4 atividades fundamentais, relacionadas a seguir:

  1. Especificação do software
  2. Projeto e implementação de software
  3. Validação de software
  4. Evolução de software

Neste capítulo veremos os modelos prescritivos mais conhecidos e por consequência mais cobrados em provas de concurso.

Modelo em cascata

O modelo em cascata, também conhecido como modelo clássico de desenvolvimento, foi o primeiro modelo do processo de desenvolvimento a ser publicado. Este modelo apresenta uma visão sequencial e sistemática para o desenvolvimento de software.

O modelo em cascata é assim chamado pelo fato de ocorrer um encadeamento entre uma fase e outra, propondo um fluxo contínuo e sequencial destas fases. Uma fase só pode ser iniciada quando a anterior está finalizada e aprovada (inclusive com a documentação concluída)

Apesar de ser abordado tanto por Pressman e Sommerville, estes autores deram nomes distintos às fases do modelo em cascata. Falaremos inicialmente sobre o modelo em cascata de Pressman e na sequência, apresentaremos o modelo de Sommerville.

Cascata de Pressman

Roger S. Pressmann nos apresenta o modelo em cascata começando com a especificação dos requisitos do cliente, avançando pelas fases de planejamento, modelagem, construção e disponibilização, e finalizando no suporte contínuo do software concluído.

O sequenciamento e encadeamento destas fases é demonstrado no diagrama a seguir bem como uma breve apresentação das principais atividades executadas em cada fase.

Modelo em cascata de Pressman

A listagem abaixo descreve os objetivos de cada uma das 5 fases desta abordagem.

Fases do cascata de Pressman

  1. Comunicação: entender os objetivos dos envolvidos e reunir os requisitos de software.
  2. Planejamento: definir o trabalho de engenharia de software (tarefas, riscos, recursos, produtos a serem produzidos e um cronograma).
  3. Modelagem: criar modelos para facilitar o entendimento das necessidades do software e o projeto que vai atender a essas necessidades
  4. Construção: geração de código e testes
  5. Entrega: o software é entregue ao cliente

Cascata de Sommerville

O diagrama a seguir apresenta as fases do modelo em cascata definidas por Sommerville. Como havíamos destacado anteriormente, estas fases não são idênticas ao modelo de Pressman, apesar de ter muitas semelhanças.

Modelo em cascata de Sommerville

Da mesma forma que fizemos no modelo de Pressman, a listagem abaixo apresenta uma descrição complementar de cada uma das 5 fases.

Fases do cascata de Sommerville

  1. Análise e definição de requisitos — os serviços, as restrições e as metas do sistema são estabelecidos.
  2. Projeto de sistema e software — definição de uma arquitetura geral do sistema (hardware e software)
  3. Implementação e teste unitário — desenvolvimento de um conjunto de programas ou unidades de programa. A execução do teste unitário visa garantir que cada unidade atenda a sua especificação
  4. Integração e teste de sistema — as unidades do programa são integradas e testadas em conjunto.
  5. Operação e manutenção — O sistema é instalado e colocado em uso.

Modelo em V

O modelo em V é uma variação do modelo em cascata. Este modelo descreve a relação entre ações que visam a garantia de qualidade e ações associadas a requisitos, modelagem e codificação.

Perceba que o lado direito do “V” destaca a execução de uma série de testes após a geração do software executável. O modelo em “V” facilita a visualização de como as ações de verificação e validação são aplicadas.

Outras características do cascata

Existem muitos itens de destaque no modelo em cascata. Há vantagens e desvantagens, como em todo e qualquer modelo. Porém, existem algumas características deste modelo que são bastantes marcantes conforme a seguir:

O modelo em cascata …

  • é melhor executado quando os requisitos são bem definidos e pouco mutáveis.
  • em geral, é de fácil gerenciamento.
  • é mais indicado para projetos pequenos.
  • não favorece o tratamento de riscos.
  • só permite que o cliente veja o software em funcionamento perto do término do projeto (atrasa a redução de riscos).

Sobre o último item da nossa lista precisamos dar o seguinte destaque. Em função de apenas viabilizar o contato do cliente com o software após um tempo considerável ter se decorrido, caso o software não atenda às necessidades do cliente, o custo para se corrigir os erros nos requisitos são expressivamente maiores.

Veja esta questão da Cesgranrio:

Cesgranrio - BNDES - 2009 - No ciclo de vida em cascata, o custo de correção
é menor na fase de:
a) testes
b) transição
c) implementação
d) requisitos
e) manutenção

Levando em consideração que, em 1976, um engenheiro de software chamado Barry Boehm, realizou um estudo que concluiu que os custos para se corrigir um defeito aumentam consideravelmente quanto mais tardiamente são identificados. O inverso também é verdadeiro. Quanto antes um defeito for identificado, menor é o custo para corrigi-lo.

Sendo assim, a resposta correta é a opção “D”

Modelos incrementais

O modelo de desenvolvimento incremental prevê que a cada nova versão do software sejam agregadas novas funcionalidades. O modelo incremental tenta minimizar os problemas do modelo cascata principalmente no que se refere a redução de riscos.

Ao se desenvolver um software utilizando os modelos incrementais, é natural que as mudanças sejam melhores acomodadas no projeto. Torna-se mais barato e mais fácil realizar estas mudanças no decorrer do projeto de desenvolvimento.

Comparado ao modelo em cascata, desenvolver de forma incremental possui algumas vantagens. A primeira delas, como já falamos, é referente às mudanças. O custo de mudanças é menor comparado ao cascata. Outra vantagem de destaque é quanto ao feedback do cliente. Como o cliente tem contato com o software com uma maior frequência, correções em requisitos podem ser executadas com maior brevidade. A última delas diz respeito ao tempo decorrido para a entrega do software. No modelo em cascata só se tem um produto de software entregue quando o software inteiro foi desenvolvido. Já no modelo incremental, mesmo sem ter o software por completo já é possível haver entregas úteis ao cliente.

Frequentemente o modelo incremental é utilizado em conjunto com o modelo iterativo. Quando falamos de modelo iterativo, nos referimos a pequenos ciclos que ocorrem durante o processo de desenvolvimento (iterações).

Para explicar a pequena diferença que existe entre o modelo incremental e o modelo iterativo, vamos recorrer a uma figura bastante conhecida na engenharia de software. Veja a seguir:

Adaptada de https://www.infoq.com/news/2008/01/iterating-and-incrementing

No modelo incremental o cliente tem uma visão do todo no início do projeto. Pequenas partes do todo são entregues em sequência até a conclusão do produto. Já no modelo iterativo, o cliente tem uma vaga ideia do que deseja. Constrói-se uma primeira versão, o cliente valida e em seguida novos refinamentos são aplicados até que se tenha o produto finalizado.

Modelos evolucionários

A principal característica do modelo evolucionário é ser um modelo de processo concebido para projetar um produto que cresce com o tempo e passa por diversas mudanças a todo instante. Na verdade, modelos evolucionários são iterativos, pois possibilitam desenvolver versões cada vez mais completas do software.

Esse modelo baseia-se na implementação inicial (protótipo) de um produto que é validado e refinado pelo usuário. A seguir veremos os dois modelos mais comuns de modelo evolucionário:

Prototipação

O protótipo é um instrumento muito útil para auxiliar a realização da atividade de definição de requisitos, principalmente quando o usuário ainda não possui uma ideia clara deles. O paradigma de prototipação ajuda usuários, programadores e todos os envolvidos no projeto a compreenderem melhor o que precisa ser desenvolvido.

Sommerville, em seu livro Engenharia de Software — 9ª Edição, afirmou que um “protótipo é uma versão inicial de um sistema de software, usado para demonstrar conceitos, experimentar opções de projeto e descobrir mais sobre o problema e suas possíveis soluções”.

Em linhas gerais, temos duas abordagens para trabalhar com protótipos, conforme a seguir:

  • Prototipação evolucionária: consiste em produzir uma primeira versão que contemple as partes melhores compreendidas do software e que evoluem lentamente até se chegar ao produto final. Utilizar a abordagem evolucionária pode implicar em alguns problemas principalmente quanto a qualidade do produto. Levar em consideração padrões arquiteturais ou de qualidade de código não é tão simples quando se aplica este tipo de prototipação.
  • Prototipação descartável: já na prototipação descartável, o foco do protótipo está em auxiliar na atividade de levantamento de requisitos e não na geração de um produto utilizável. Inicia-se pelas partes mais obscuras e menos compreendidas e ao final o protótipo é descartado e a implementação do software real é realizada.

Espiral de Boehm

Quando falamos em modelo em espiral a primeira coisa que temos que ter em mente é que este é um modelo dirigido a riscos. Foi proposto por Boehm em 1988 que representou o processo de software em forma de espiral ao invés de uma sequência de atividades. Cada volta na espiral representa uma fase do processo.

O espiral é dividido em quatro setores:

  • Definição de objetivos;
  • Avaliação e redução de riscos;
  • Desenvolvimento e validação;
  • Planejamento.

A figura a seguir representa graficamente o modelo espiral de Boehm.

Modelo em espiral de processo de software de Boehm. Fonte: (IEEE 1988)

Resumo

Neste capítulo vimos:

  1. Processo de software é um conjunto de atividades, ações e tarefas relacionadas que resultam em um produto de software.
  2. Em geral um processo de software é composto por 4 atividades básicas: especificação, projeto e implementação, validação e evolução de software.
  3. O modelo em cascata apresenta uma visão sequencial e sistemática.
  4. O modelo em cascata de Pressman é composto por 5 fases: comunicação, planejamento, modelagem, construção e entrega.
  5. O modelo em cascata de Sommerville é composto por 5 fases: análise e definição de requisitos, projeto de sistema e software. implementação e teste unitário, integração e teste de sistema e operação e manutenção.
  6. O modelo em V é uma variação do modelo em cascata com foco em garantia de qualidade.
  7. Modelo incremental prevê que a cada nova versão do software sejam agregadas novas funcionalidades ao software.
  8. Modelo evolucionário é caracterizado por ser um modelo de processo concebido para projetar um produto que cresce com o tempo e passa por diversas mudanças a todo instante.
  9. Existem duas abordagens para prototipação: prototipação evolucionária e prototipação descartável.
  10. O modelo espiral prevê que cada volta no espiral representa uma fase do processo.
  11. A principal característica do modelo espiral é ser um modelo dirigido a riscos.

E por ai vamos. No próximo falaremos sobre Processo Unificado — RUP.

--

--