Engenharia de Software: Conceitos, Processos e Modelos
Classificado em Computação
Escrito em em português com um tamanho de 9,98 KB
O que é Software?
É um produto que profissionais de software desenvolvem e ao qual dão suporte ao **longo** do prazo.
Definição de Software
Software consiste em:
- Instruções que, quando executadas, fornecem características, funções e desempenho desejados;
- Estruturas de dados que possibilitam aos programas manipular informações adequadamente;
- Informações descritivas, tanto na forma impressa como na virtual, descrevendo a operação e o uso dos programas.
3 Princípios Básicos do Software
- Software desenvolvido sempre passa por um processo de engenharia;
- Software não se desgasta;
- Embora os softwares sejam construídos com base em componentes, a maioria continua sendo construída de forma personalizada (sob encomenda).
O que é Engenharia de Software (ES)?
A Engenharia de Software abrange um processo e um conjunto de ferramentas que possibilitam aos profissionais desenvolverem software de altíssima qualidade.
Definição Formal de Engenharia de Software
É a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, na operação e na manutenção de software, isto é, a aplicação de engenharia ao software.
Tecnologia em Camadas da Engenharia de Software
- Foco na Qualidade
- Pedra fundamental que sustenta a engenharia de software. A gestão da qualidade ajuda a promover uma cultura de aperfeiçoamento contínuo de processos, que leva ao desenvolvimento de abordagens cada vez mais efetivas na engenharia de software.
- Processo
- É a base da engenharia de software. O processo da engenharia de software é o que mantém as camadas de tecnologia coesas e possibilita o desenvolvimento de software de forma racional e dentro do prazo.
- Métodos
- Fornecem as informações técnicas para desenvolver software.
- Ferramentas
- Fornecem suporte automatizado ou semiautomatizado para o processo e para os métodos.
Processo de Software
Define quem está fazendo o quê, quando e como para atingir um determinado objetivo.
Elementos de um Processo de Software
- Processo
- É um conjunto de atividades, ações e tarefas realizadas na criação de algum produto de trabalho.
- Atividade
- Esforça-se para atingir um objetivo amplo (ex.: comunicar-se com os interessados) e é utilizada independentemente do campo de aplicação, do tamanho do projeto, da complexidade de esforços ou do grau de rigor com que a engenharia de software será aplicada.
- Ação
- (Ex.: projeto de arquitetura) Envolve um conjunto de tarefas que resultam em um artefato de software fundamental (ex.: um modelo de projeto de arquitetura).
- Tarefa
- Concentra-se em um objetivo pequeno, porém, bem definido (ex.: realizar um teste de unidades) e produz um resultado tangível.
Metodologia (Framework)
Estabelece o alicerce para um processo de ES completo, independente do tamanho ou **complexidade** do software a ser desenvolvido.
Atividades de Framework (Metodologia de Processo)
- Comunicação
- Entrar em contato com o cliente e demais interessados a fim de identificar as necessidades e compreender os objetivos.
- Planejamento
- Descrever as tarefas técnicas, riscos prováveis, os recursos que serão necessários, os produtos resultantes a serem produzidos e um cronograma de trabalho.
- Modelagem
- Criar modelos para entender as necessidades do software e o projeto que irá atender essas necessidades.
- Construção
- Combinar a geração de código (manual ou automatizado) e testes necessários para revelar erros na codificação.
- Emprego (Implantação)
- Tem-se uma versão completa ou parcial (incremento) do software construído.
Atividades de Apoio (Guarda-chuva)
- Controle e Acompanhamento de Projeto
- Permite que a equipe avalie o progresso em relação ao plano estabelecido.
- Administração de Riscos
- Avalia os riscos que podem afetar o resultado ou a qualidade do projeto/produto.
- Garantia da Qualidade de Software (GQS)
- Define e conduz as atividades que garantem a qualidade do software.
- Revisões Técnicas
- Identifica e elimina erros antes que se propaguem para a atividade seguinte.
- Medição
- Auxilia na entrega do software de acordo com os requisitos.
- Gerenciamento da Configuração de Software (GCS)
- Gerencia os efeitos das mudanças ao longo do processo.
- Gerenciamento da Reusabilidade
- Define critérios para o reuso de artefatos.
- Preparo e Produção de Artefatos de Software
- Engloba as atividades necessárias para criar artefatos (modelos, documentos, logs, formulários e listas).
Como os Modelos de Processo se Diferenciam?
- Fluxo geral de atividades, ações e tarefas;
- Grau pelo qual artefatos de software são identificados e exigidos;
- Modo de aplicar as atividades de garantia de qualidade;
- Grau de detalhamento e rigor da descrição do processo.
Práticas e Princípios da Engenharia de Software
Comunicação, planejamento, modelagem, análise, projeto, construção, codificação, teste, implantação.
Fluxo de Processo
Descreve como são organizadas as atividades metodológicas, bem como as ações e tarefas que ocorrem dentro de cada atividade em relação à sequência e ao tempo.
Exemplo: Fluxo de Processo Linear
Comunicação → Planejamento → Modelagem → Construção → Entrega
Padrões de Garantia de Qualidade
- CMMI
- SPICE (ISO/IEC 15504)
- ISO 9001:2000
Modelos de Processo Prescritivos
São modelos que prescrevem um conjunto de elementos de processo para cada projeto (atividades de *framework*, ações, tarefas e produtos de trabalho). Além disso, cada modelo de processo também prescreve um fluxo de trabalho (*workflow*), que é a maneira como os elementos do processo são inter-relacionados.
Modelo Cascata (Sequencial Linear)
Apropriado quando os requisitos estão claros e bem compreendidos.
Modelos de Processos Evolucionários
São modelos de processo iterativos, caracterizados por permitir o desenvolvimento de visões de software cada vez mais completas.
Modelo de Prototipação
Útil quando o cliente define os objetivos gerais do software, mas não identifica detalhes dos requisitos. Idealmente, a prototipação é um mecanismo para a aceitação de requisitos. Para produzir um protótipo rapidamente, são usadas partes de programas existentes, algoritmos ineficientes e ferramentas automáticas.
Modelo Espiral
É um modelo de processo evolutivo que combina a natureza iterativa do modelo de Prototipação com os aspectos sistemáticos do modelo Cascata. Trata-se de um modelo cíclico e orientado a riscos.
Processo Unificado (PU)
Iterativo, baseado em casos de uso e centrado na arquitetura. Nesse modelo, são combinadas as características dos melhores modelos de processo, cobrindo também características de processos ágeis. O ciclo de vida é dividido em 4 fases:
- Concepção
- Estabelece o escopo do sistema, incluindo uma compreensão suficientemente clara do que deve ser construído.
- Elaboração
- Mitigação de riscos técnicos, por meio da abordagem de tarefas técnicas complexas. É feito o desenho e a implementação da arquitetura (ex.: ORM, SQL, Threads).
- Construção
- Nessa fase é feita a maior parte da implementação. O **objetivo** é produzir a primeira visão funcional do sistema por meio da geração de sucessivas visões alfa.
- Transição
- O **objetivo** é garantir que o software atenda às necessidades dos usuários. São realizadas apenas tarefas relacionadas a ajuste fino, instalação e estabilidade.
PSP (Processo de Software Pessoal)
Todo desenvolvedor segue um processo para desenvolver software; o processo pode ser formal ou desorganizado, baseado em imprevistos, mas o fato é que há um processo. O PSP representa uma abordagem disciplinada, baseada em métricas, para o desenvolvimento de software.
UML (Linguagem Unificada de Modelagem)
Permite que desenvolvedores visualizem os produtos de seu trabalho em diagramas padronizados, sendo muito utilizada para criação de modelos de sistemas de software.
Tipos de Diagrama de Classe
Conceitual, especificação e implementação.
Qualidade de Software
É a satisfação de requisitos funcionais e de desempenho explicitamente declarados, normas de desenvolvimento documentadas e características implícitas esperadas em todo o software.
Fatores de Qualidade ISO 9126
- Funcionalidade
- Confiabilidade
- Usabilidade
- Eficiência
- Manutenibilidade
- Portabilidade
Métricas de Software
GQM (*Goal, Question, Metric*)
Utilizada para identificação de métricas significativas para qualquer parte do processo de software.
Métricas Baseadas em Função
Técnica proposta por Albrecht que pode ser utilizada para medir a funcionalidade entregue por um sistema.
Produtividade
Produtividade = (Medida do produto do trabalho) / (Esforço para **produzi-lo**)
Utiliza uma relação empírica baseada em medidas de contagem (direta) do domínio de informação de software e avaliação de complexidade.