Engenharia de Software: Conceitos e Ciclo de Vida

Classificado em Tecnologia

Escrito em em português com um tamanho de 39,6 KB

O que é Software?

Conjunto de programas, documentação e procedimentos operacionais. São conjuntos de instruções arranjadas de forma que possam ser entendidas e executadas por um computador.

Características do Software

  • Não se desgasta
  • Se deteriora
  • Manutenção complexa
  • Feito sob medida
  • Reúso de componentes

Categorias de Software

Software Básico

  • Caracteriza-se por uma forte interação com o hardware do computador.
  • Executa funções essenciais. Exemplos: sistemas operacionais, drivers, compiladores, etc.

Software de Tempo Real

  • Funções de monitoramento, análise e controle de eventos.
  • Exemplos: controle de tráfego aéreo, relógio digital, etc.

Software Comercial

  • Facilita operações comerciais e tomadas de decisões administrativas.
  • Exemplos: folha de pagamentos, controle de estoque, etc.

Software Científico e de Engenharia

  • Caracteriza-se pelo processamento de dados numéricos.
  • Necessita de grande robustez de hardware.
  • Exemplos: astronomia, vulcanologia, ferramentas CAD, etc.

Software Embutido

  • Controla produtos e sistemas para mercados industriais e de consumo.
  • Exemplos: controle de teclado de fornos de micro-ondas, funções digitais de automóveis, etc.

Software de Computador Pessoal

  • Envolve diversos tipos de software utilizados para diferentes fins.
  • Exemplos: processadores de texto, planilhas eletrônicas, jogos, gerenciamento de dados, etc.

Software de Inteligência Artificial

  • Aborda problemas difíceis de serem modelados computacionalmente por modelos tradicionais.
  • Utiliza sistemas baseados em conhecimento, sistemas especialistas, redes neurais, algoritmos genéticos, etc.
  • Exemplos: jogos, prova de teoremas, robótica, aprendizado de máquina, etc.

Software para Web

  • Sistemas feitos para serem utilizados na internet por meio de um navegador (browser).
  • Exemplos: páginas pessoais, portais, consulta a bases de dados, etc.

Crise do Software

Problemas encontrados no desenvolvimento de software:

  • Não funcionam como esperado.
  • Manutenção complexa de vários softwares.
  • Dificuldade em atender a uma demanda cada vez maior.

Problemas Comuns com Software

  • A insatisfação do cliente é frequente.
  • O software é de difícil manutenção.
  • A qualidade do produto de software não é garantida.

Causas dos Problemas

  • A tecnologia avança rapidamente.
  • O software não evolui na velocidade em que novos requisitos são exigidos.
  • Desenvolvimento muitas vezes artesanal.
  • Resistência a mudanças por parte dos profissionais.

Desafios da Engenharia de Software

  • Satisfazer participantes do projeto:
    • Usuários
    • Executivos
    • Desenvolvedores
  • Garantir a qualidade no processo.
  • Estimar e cumprir prazos e custos.
  • Cumprir padrões de qualidade.
  • Garantir qualidade do produto:
    • Manutenibilidade: facilidade de modificação.
    • Usabilidade: facilidade de entendimento e uso.
    • Eficiência: tempo de resposta adequado.
    • Portabilidade: facilidade de adaptação a diferentes ambientes.
    • Confiabilidade: tolerância a falhas.
    • Funcionalidade: adequação ao problema.

Fatores Relevantes

  • Avanços das Tecnologias da Informação.
  • Aumento do nível de exigência dos usuários.
  • Aumento da competitividade e da demanda por novos serviços.

Mitos do Software

  • "Já temos um manual. Isso fornecerá ao meu pessoal tudo o que eles precisam saber."
  • "Podemos adicionar mais programadores e tirar o atraso..."
  • "Podemos preencher os detalhes mais tarde."
  • "Mudanças podem ser facilmente acomodadas, porque o software é flexível."
  • "Assim que escrevermos o programa e o colocarmos em funcionamento, nosso trabalho estará completo."

Engenharia de Software: Definição

O estabelecimento e uso de princípios sólidos de engenharia para que se possa obter economicamente um software que seja confiável e que funcione eficientemente em máquinas reais.

Uma disciplina da Ciência da Computação que oferece métodos, técnicas e ferramentas para desenvolver e manter softwares com alta qualidade para resolução de problemas.

  • Métodos: como fazer para construir software.
  • Ferramentas: apoio automatizado para os métodos.
  • Procedimentos: sequência em que os métodos serão aplicados.

Métodos, Ferramentas e Procedimentos

  • Permitem que o gerente controle todo o processo de desenvolvimento do software.
  • São a base para a construção de software de alta qualidade.
  • Ajudam a atender aos requisitos e expectativas do cliente.

Métodos

  • Definem diversos tipos de tarefas a serem realizadas.
  • Incluem critérios para medir a qualidade do software e medidas de levantamento de requisitos.

Ferramentas

  • Podem auxiliar o desenvolvimento de software em diversos níveis.
  • Incluem ambientes de apoio ao desenvolvimento de software.
  • Exemplo: ambiente que gera código com base na modelagem.

Procedimentos

  • Indicam como executar, na prática, as tarefas definidas pelos métodos.

Objetivo da Engenharia de Software

O objetivo fundamental de qualquer engenheiro é entregar o projeto da forma mais econômica possível, minimizando tempo e esforço.

Paradigmas da Engenharia de Software

Estas atividades podem ser executadas em diferentes sequências e agrupadas em diferentes etapas. Os conjuntos de regras que definem essas etapas e sequências são chamados de paradigmas da engenharia de software.

Tipos de Paradigmas

  • Ciclo de vida clássico (cascata)
  • Modelo de prototipação
  • Modelo Espiral
  • Modelo Incremental
  • Modelo RAD (Rapid Application Development)
  • Modelo XP (eXtreme Programming)
  • Modelo de montagem de componentes
  • Modelo de métodos formais
  • Combinação de paradigmas

Escolha do Paradigma

Considerar:

  • Expectativas do cliente.
  • Tipo de aplicação a ser desenvolvida.
  • Métodos e ferramentas a serem utilizados.

Ciclo de Vida do Software

É a definição dos passos que transformam uma ideia no produto acabado.

Partes do Ciclo de Vida

  • Fases: passos que indicam o progresso do projeto.
  • Atividades: ações requeridas para criar e entregar o projeto.
  • Artefatos/Subprodutos: produtos tangíveis criados durante o projeto.
  • Marcos (Milestones): eventos importantes no projeto (momentos de decisão).

Objetivos do Ciclo de Vida

  • Definição de pontos de controle.
  • Planejamento e acompanhamento do progresso e do orçamento.
  • Estimativas e Gerência de risco.

Ciclo de Vida Clássico (Cascata)

Também conhecido como modelo cascata ou modelo waterfall.

  • Foi desenvolvido com base no ciclo da engenharia civil.
  • É caracterizado por uma abordagem sequencial.
  • Cada atividade é uma fase distinta.

Fase 1: Engenharia de Sistemas

  • Definição dos objetivos a serem alcançados.
  • Análise em alto nível - Pouco detalhe de projeto.
  • Visão global do sistema: tarefas, interface com o usuário, interface com hardware, integração com outros sistemas.
  • Análise dos Recursos Disponíveis: Hardware, Software, Pessoas (Peopleware), financeiro, tempo, condições de trabalho.

Fase 2: Análise de Requisitos

  • Identificar as necessidades dos usuários.
  • Realizar a análise dos recursos necessários (ferramentas e pessoal).
  • Realizar um projeto inicial e global do sistema, incluindo sua divisão em módulos.

Fase 3: Projeto (Design)

  • Refinar a especificação global do sistema gerada na fase de análise.
  • O objetivo é realizar uma especificação mais detalhada do sistema.

Fase 4: Codificação

  • Consiste em implementar o que foi definido no projeto.

Fase 5: Testes

  • Não existe sistema sem bugs.
  • Existem diversos modelos de teste (Ex: Modelo V, Modelo W).
  • Consertar um defeito durante o desenvolvimento é significativamente mais barato do que após a entrega.

Fase 6: Manutenção

  • Muito provavelmente, o software deverá sofrer mudanças depois de entregue ao cliente.
  • Mudanças podem ser devidas a novas funcionalidades requeridas ou correção de erros.

Tipos de Manutenção

  • Corretiva: Correção de erros descobertos após a entrega.
  • Adaptativa: Modificação do software para acomodar mudanças no ambiente (hardware, S.O., etc.).
  • Evolutiva/Perfectiva: Adição de novas funcionalidades ou melhorias solicitadas pelo cliente.

Problemas no Modelo Cascata

  • Projetos reais raramente seguem um fluxo estritamente sequencial.
  • Nem sempre é possível estabelecer, inicialmente, todos os requisitos necessários de forma completa e imutável.
  • O cliente deve esperar até o final de todas as etapas para ver e interagir com o produto.

Casos de Uso (Use Cases)

Objetivos dos Casos de Uso

Devem responder:

  • Quem são os atores?
  • Quais são os seus objetivos ao usar o sistema?
  • Que pré-condições existem para o caso de uso?
  • Quais as tarefas principais realizadas pelo sistema?
  • Que exceções (erros, fluxos alternativos) devem ser consideradas?

Passos para Definição

  1. Identificação dos atores.
  2. Captura (identificação) dos casos de uso.
  3. Criação do diagrama de casos de uso.
  4. Elaboração da descrição detalhada de cada caso de uso.
  5. Análise de possíveis relacionamentos entre casos de uso.

Identificação dos Atores

  • Um ator é um papel específico que um usuário ou sistema externo pode desempenhar ao interagir com o sistema.
  • Define qualquer coisa externa que possa interagir com o sistema: Usuários, outros sistemas, dispositivos de hardware, etc.

Como Identificar Atores?

  • Quem utiliza o sistema?
  • Quem mantém o sistema?
  • Quais sistemas utilizam este sistema ou são utilizados por ele?
  • Quem obtém informação do sistema?
  • Quem fornece informação ao sistema?

Identificação dos Casos de Uso

  • Que funções o ator desejará do sistema?
  • O sistema precisa armazenar informações?
  • Quais atores irão criar, ler, atualizar ou apagar estas informações?
  • O sistema precisa notificar algum ator sobre alguma mudança de estado ou evento?
  • Existem eventos externos que o sistema precisa estar ciente?
  • Quais atores informam o sistema sobre esses eventos?

Diagrama de Casos de Uso

  • Descreve uma visão funcional do sistema (o que ele faz), de uma perspectiva externa.
  • Separa os elementos externos (atores) dos elementos internos (casos de uso).

Casos de Uso

  • Representam um conjunto de atividades que o sistema desempenha para atingir um objetivo de um ator (visão externa).
  • Possuem uma descrição textual adicional detalhando os passos.

Ator

  • Representa os elementos externos ao sistema que interagem com ele.

O que Deve Haver na Descrição de um Caso de Uso

  • Nome do caso de uso (verbo + objeto, ex: Cadastrar Cliente)
  • Descrição breve / Objetivos
  • Pré-condições (o que deve ser verdade para iniciar)
  • Pós-condições (o que será verdade após a execução com sucesso)
  • Fluxo normal (passos para o cenário de sucesso)
  • Fluxos alternativos e de exceção (outros cenários, erros)
  • Atores envolvidos
  • Restrições ou Regras de Negócio
  • Observações (se houver)

Fluxo Normal e Alternativo

  • Fluxo Normal: descreve o caminho feliz, onde tudo ocorre como planejado, sem erros.
  • Fluxo Alternativo/Exceção: descreve caminhos alternativos, tratamento de erros, ou condições especiais.

Relacionamentos entre Casos de Uso

Associação

  • Demonstra a comunicação entre um ator e um caso de uso. Indica que o ator utiliza a funcionalidade representada pelo caso de uso.

Generalização / Especialização

  • Aplicável tanto a atores quanto a casos de uso.
  • Indica que um elemento (ator ou caso de uso filho/especializado) herda características e relacionamentos de outro elemento (ator ou caso de uso pai/generalizado), mas adiciona ou modifica comportamentos específicos.

Inclusão (<>)

  • Quando vários casos de uso compartilham uma subsequência de passos comum, essa parte comum pode ser extraída para um novo caso de uso (incluído).
  • Uma instância do caso de uso base (que inclui) obrigatoriamente executa o comportamento especificado pelo caso de uso incluído.
  • Evita a repetição da mesma sequência de passos em múltiplos casos de uso.
  • Indica que o comportamento do caso de uso A reutiliza o comportamento do caso de uso B.

Extensão (<>)

  • Descreve um comportamento opcional ou adicional que só ocorre sob certas condições dentro de um caso de uso base (estendido).
  • Quando um caso de uso B estende um caso de uso A, indica que o comportamento de A pode ser estendido pelo comportamento de B em pontos específicos (pontos de extensão).
  • É frequentemente usado para modelar fluxos alternativos ou de exceção complexos, separando-os do fluxo principal para maior clareza.

Sem título

Entradas relacionadas: