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
- Identificação dos atores.
- Captura (identificação) dos casos de uso.
- Criação do diagrama de casos de uso.
- Elaboração da descrição detalhada de cada caso de uso.
- 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.