Visão Geral Parte 1 Jair C Leite DIMAp/UFRN O que é engenharia de software? É uma disciplina da engenharia dedicada a todos os aspectos da produção de software. Engenheiros de software devem adotar uma abordagem sistemática e organizada para o seu trabalho e usar técnicas e ferramentas apropriadas, de acordo com o problema a ser resolvido, e com as restrições e recursos disponíveis. Fonte: Ian Sommerville
Objetivos da ES Aplicação de teoria, modelos, formalismos, técnicas e ferramentas da ciência da computação e áreas afins para o desenvolvimento sistemático de software. Aplicação de métodos, técnicas e ferramentas para o gerenciamento do processo de desenvolvimento. Produção da documentação formal destinada a comunicação entre os membros da equipe de desenvolvimento bem como aos usuários. Definições de Engenharia de Software O estabelecimento e uso de princípios de engenharia para a produção economicamente viável de software de qualidade que funcione em máquinas reais [Bauer, 69] A engenharia de software é a disciplina envolvida com a produção e manutenção sistemática de software que são desenvolvidos com custos e prazos estimados. Disciplina que aborda a construção de software complexo - com muitas partes interconectadas e diferentes versões - por uma equipe de analistas, projetistas, programadores, gerentes, "testadores", etc.
Componentes de Sistemas de Computação Hardware Computadores, periféricos e redes Software Os programas e arquivos de dados Informações Coleção de informações organizadas e sistematizadas necessárias ao desempenho das tarefas e procedimentos Usuários Usuários e operadores que realizam as tarefas e procedimentos. Procedimentos Atividades realizadas pelos usuários e operadores, bem como pelos programas (procedimentos automatizados). Documentação Manuais e formulários que descrevem as operações do sistema. Fonte: Roger Pressman Níveis em Sistemas Computacionais Engenheiro Computador e dispositivos externos Usuário Organização e Sociedade
Qual a diferença entre engenharia de software e engenharia de sistemas? A engenharia de sistemas está interessada em todos os aspectos de um sistema baseado em computador, incluindo hardware software, fatores humanos, informação e o processo. A engenharia de software é parte dela. Análise de Sistema Engenharia de... hardware software fatores humanos informação Instalação e Manutenção Princípios da Engenharia de Software Todo engenheiro de software deve desenvolver com: Rigor e Formalidade Separação de interesses Modularidade Abstração Antecipação de mudanças Generalidade Possibilidades de evolução Ghezzi, C. et al. Fundamentals of Software Engineerig
Conceitos Teorias Princípios Modelos e Formalismos Ferramentas e Ambientes Métodos e Técnicas Metodologias Paradigmas Ciclo de vida Fase de definição Análise e Especificação Estudo de Viabilidade Estimativas e Planejamento Fase de desenvolvimento Design Implementação e integração Verificação e Validação Fase de operação Distribuição, Instalação e Configuração Utilização e administração Manutenção corretiva, evolutiva e adaptativa Fase de retirada Migração, reengenharia, engenharia reversa
Ciclo de vida: fases x atividades Atividades (variam de acordo com o modelo de processo) migração Possível distribuição de tarefas em cada Atividade x Fases evolução manutenção testes Implementação design especificação definição desenvolvimento operação retirada Fases (tempos) O que é um processo de software? Um conjunto de atividades realizadas por pessoas cujo objetivo é desenvolvimento ou evolução de software e sua documentação. Atividades genéricas em todos os processos: Especificação o que o sistema deve fazer (funcionalidade) e quais as restrições Desenvolvimento produção do software Verificação avaliar correção, validação e outros aspectos de qualidade Manutenção mudanças no software Um modelo de processo de software é uma representação abstrata das atividades, papéis e artefatos, cronograma.
Modelo X Processo Um modelo é algo teórico, um conjunto de possíveis ações. O processo deve determinar ações práticas a serem realizadas pela equipe como prazos definidos e métricas para se avaliar como elas estão sendo realizadas. Define quem faz o que, quando e como. Modelo + Planejamento = Processo Atividades, Artefatos, Marcos e Entregas Um processo é organizado em atividades. Atividades são de responsabilidade de um membro da equipe (trabalhador). Atividades devem gerar um artefato de saída, que possa ser verificado, e podem requisitar um artefato de entrada. Um artefato é um modelo, documento ou código produzido por uma atividade. Uma entrega (liberação) é um artefato entregue ao cliente Um processo deve estabelecer uma série de marcos. Um marco é um ponto final de uma atividade de processo.
Planejamento e Gerenciamento Planejamento previsão prazos atividades equipe custos modelos, protótipos e documentos tempo ferramentas Software Planejamento Previsão de atividades, recursos, custos e prazos Estimativas do produto e processo Gerenciamento Controle de acordo com o que foi planejado Verificação da qualidade do produto e do processo controle Gerenciamento Qualidades do processo e produto atividades modelos, protótipos e documentos prazos Métricas do produto equipe Métricas do processo custos temposoftware Avaliação Gerenciamento Qualidade do processo e do produto
Estrutura analítica de tarefas (Work Breakdown Structure) Descrição da rede de tarefas de um projeto, mostrando a dependência entre elas Minimizar dependência e maximizar concorrência entre as atividades Concorrência permite uma utilização melhor da força de trabalho da equipe. Dependência gera atrasos em cascata. Determinar o caminho crítico. Tarefa Duração Dependências Responsável T1 8 Jane T2 15 Anne T3 15 T1(M1) Jane T4 10 Fred T5 10 T2, T4 (M2) Mary T6 5 T1,T2 (M3) Anne T7 20 T1 (M1) Jim T8 25 T4 (M5) Fred T9 15 T3, T6 (M4) Jane T10 15 T5, T7 (M7) Anne T11 7 T9 (M6) Fred T12 10 T11 (M8) Fred Fonte: Ian Sommerville Rede de Atividades 4/7/99 start 8 days T1 15 days T2 14/7/99 15 days M1 T3 5 days 25/7/99 T6 M3 20 days T7 4/8/99 M4 15 days T9 25/8/99 M6 7 days T11 10 days T4 Fonte: Ian Sommerville 25/7/99 M2 18/7/99 M5 Marcos 10 days T5 25 days T8 11/8/99 M7 15 days T10 10 days 5/9/99 M8 T12 Caminho Crítico Finish 19/9/99
Linha de tempo (Diagrama de Gantt) 4/7 11/7 18/7 25/7 1/8 8/8 15/8 22/8 29/8 5/9 12/9 19/9 Start T4 T1 T2 M1 T7 T3 M5 T8 Fonte: Ian Sommerville M3 M2 T6 T5 T9 M4 M7 T10 T1 1 M6 M8 T12 Finish Alocação pessoa-atividade 4/7 11/7 18/7 25/ 1/8 8/8 15/8 22/8 29/8 5/9 12/9 19/9 Fred T4 T8 T11 T12 Jane T1 T3 T9 Anne T2 T6 T10 Jim T7 Mary T5 Fonte: Ian Sommerville
Estimativas de custos e prazos Objetivo: previsão os custos de um projeto de software. Estimativas dos recursos necessários Humanos Tecnológicos Burocráticos Infra-estrutura Questões fundamentais Qual o esforço necessário para completar uma atividade? Quanto dias ou meses é necessário para cada atividade? Qual o custo total? Estimativas e elaboração do cronograma são atividades interdependentes. Estimativas e Métricas Estimativas são baseadas em métricas históricas e empíricas Métricas históricas Obtidas a partir de experiências anteriores da equipe Métricas empíricas Dados estatísticos de diferentes equipes
Métricas Planejamento, Gerenciamento e Avaliação são realizados com base em métricas A medição possibilita Avaliar a qualidade dos produtos Avaliar a produtividade da equipe Avaliar métodos e ferramentas Realizar estimativas no planejamento Métricas do processo Métricas de produtividade Métricas do produto Métricas da qualidade e métricas técnicas Métricas para Planejamento e Gerenciamento Objetivos Dimensão dos produtos Modelos, protótipos, documentos e software Produtividade Quantidade produzida por esforço Esforço de produção Pessoas necessárias num período de tempo Defeitos Número de erros encontrados Custo de produção Valor do esforço de produção e correção de erros Tamanho = 20,7 KLOC Produtividade = 3,6 PM/KLOC (Pessoa-Mês)/(k lines-of-code) Esforço = Produtividade*KLOC (penalidade) = 3,6*20,7 (1,030) = 95 PM
Modelos de Processo Um modelo de processo ou método define um conjunto de atividades específicas. Principais modelos: Cascata (Waterfall) Espiral (Spiral) Evolutivo e Incremental Processo Unificado da Rational (Rational Unified Process RUP) Personal Software Process Team Software Process