Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e...

61
Workshop Engenharia de Software e Sistemas

Transcript of Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e...

Page 1: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Workshop

Engenharia deSoftware e Sistemas

Page 2: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Engenharia de Software(Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática de produtos de software desenvolvidos dentro de estimativas de custo e tempoDeve-se entender por engenharia a ciência relacionada com o uso prático de conhecimentos científicos

Page 3: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

O que é software? Programas de computador e

documentação associada Produtos de software podem ser

desenvolvidos para um cliente particular ou podem ser desenvolvidos para um mercado geral

Page 4: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Objetivos de Engenharia de Software Obter software de qualidade Com produtividade no seu

desenvolvimento, operação e manutenção Empregando profissionais que

desenvolvam o software dentro de custos, prazos e níveis de qualidade controlados

E, além disso, que obtenham o melhor custo-benefício possível entre Qualidade Produtividade

Page 5: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Motivação Desenvolver sistemas de acordo

com a intenção do cliente/usuário Estabelecer noção sobre tempo e

custo de desenvolvimento Elaborar artefatos além do código Analisar artefatos para estabelecer

a qualidade do produto

Page 6: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Ciclo de Vida e Processo de Desenvolvimento de

Software

Page 7: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

O que é um modelo de ciclo de vida de processo de software? Uma representação abstrata e

simplificada do processo de desenvolvimento software, tipicamente mostrando as principais atividades e dados usados na produção e manutenção de software

Page 8: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Principais Modelos do Ciclo de Vida de Software Cascata Modelo de Desenvolvimento

Evolucionário Programação Exploratória Prototipagem descartável

Modelos Iterativos Espiral Incremental

Page 9: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Modelo Cascata(ou clássico) Derivado de modelos existentes em

outras engenharias Sua estrutura é composta por várias

etapas que são executadas de forma sistemática e seqüencial

Na prática, existe uma interação entre as etapas e cada etapa pode levar a modificações nas etapas anteriores

Page 10: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Modelo CascataDefinição de Requisitos

Projeto do Sistema e do

Software

Implementação e Testes Unitários

Integração e Teste do Sistema

Operação e Manutenção

Page 11: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Modelo Cascata na PráticaDefinição de Requisitos

Projeto do Sistema e do

Software

Implementação e Testes Unitários

Integração e Teste do Sistema

Operação e Manutenção

          

 

Page 12: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Modelo de Desenvolvimento Evolucionário Programação Exploratória Prototipagem Descartável

Atividades Concorrentes

Especificação

Desenvolvimento

Validação

Esboço de Descrição

Versão Inicial

Versões Intermediárias

Versão Final

Page 13: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Programação Exploratória Idéia geral:

Desenvolvimento da primeira versão do sistema o mais rápido possível

Modificações sucessivas até que o sistema seja considerado adequado

Após o desenvolvimento de cada uma das versões do sistema ele é mostrado aos usuários para comentários

Adequado para o desenvolvimento de sistemas onde é difícil ou impossível se fazer uma especificação detalhada do sistema

Principal diferença para os outros modelos é a ausência da noção de programa correto

Page 14: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Prototipagem Descartável Como na programação exploratória, a primeira fase

prevê o desenvolvimento de um programa para o usuário experimentar

No entanto, o objetivo aqui é estabelecer os requisitos do sistema

O software deve ser reimplementado na fase seguinte A construção de protótipos com os quais os usuários

possam brincar é uma idéia bastante atrativa: Para sistemas grandes e complicados Quando não existe um sistema anterior ou um

sistema manual que ajude a especificar os requisitos

Page 15: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Prototipagem Descartável Os objetivos do protótipo devem estar bem claros

antes do início da codificação. Possíveis objetivos: Entender os requisitos dos usuários Definir a interface com os usuários Demonstrar a viabilidade do sistemas para os

gerentes. Uma decisão importante a ser tomada é escolher

o que será e o que não será parte do protótipo Não é economicamente viável implementar

todo o sistema! Os objetivos do protótipo são o ponto de partida

Page 16: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Modelos Iterativos Requisitos de sistema SEMPRE evoluem

durante curso de um projeto. Assim a iteração do processo sempre faz parte do desenvolvimento de grandes sistemas

Iterações podem ser aplicadas a quaisquer dos modelos de ciclo de vida

Duas abordagens (relacionadas) Desenvolvimento espiral Desenvolvimento incremental

Page 17: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Desenvolvimento Espiral Acrescenta aspectos gerenciais ao processo de

desenvolvimento de software. análise de riscos em intervalos regulares do processo de

desenvolvimento de software planejamento controle tomada de decisão

O processo é representado como uma espiral em vez de uma seqüência de atividades

Cada volta na espiral representa uma fase no processo Não há fases fixas como especificação ou projeto - voltas

na espiral são escolhidas dependendo do que é requerido Riscos são avaliados explicitamente e resolvidos ao longo

do processo

Page 18: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Desenvolvimento Espiral

Determinação dos objetivos, alternativas e restrições

Análise de Riscos

  Análise das alternativas e identificação e/ou resolução de riscos

Desenvolvimento e validação da versão corrente do produto

Simulações,modelos e benchmarks

 Planejamento

Page 19: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Desenvolvimento Incremental Em vez de entregar o sistema como um todo, o

desenvolvimento e a entrega são divididos em incrementos, com cada incremento entregando parte da funcionalidade requerida

Requisitos dos usuários são priorizados e os requisitos de mais alta prioridade são incluídos nas iterações iniciais

Uma vez que o desenvolvimento de um incremento é iniciado, os requisitos são "congelados". Embora os requisitos possam continuar a evoluir para incrementos posteriores

Em certos aspectos é similar à programação exploratória. No entanto, o escopo do sistema deve ser claramente entendido antes de se iniciar o desenvolvimento

Page 20: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Definiresboço dosrequisitos

Associarrequisitos aincrementos

Projetar aarquitetura dosistema

Desenvolverumincremento

Validar oincremento

Integrar oincremento

Validar osistema

SistemaFinal

Desenvolvimento Incremental

Page 21: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Processo Conjunto de atividades

bem definidas com responsáveis com artefatos de entrada e saída com dependências entre as mesmas

e ordem de execução com modelo de ciclo de vida

Page 22: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Processo é uma ação regular e contínua (ou

sucessão de ações) realizada de forma bem definida, levando a um resultado

é um conjunto parcialmente ordenado de atividades (ou passos) para se atingir um objetivo

define quem está fazendo o que, quando e como para atingir um certo objetivo

Page 23: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Modelo de Processo é uma representação de um

processo, usualmente envolvendo atividades a serem realizadas agentes que realizam as atividades artefatos (produtos) gerados recursos necessários (consumidos)

Page 24: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Exemplos de processos Processos tradicionais (pesados)

RUP, OPEN, Catalysis Processos ágeis (leves)

XP, Agile modeling, Crystal, pragmatic programming, Internet Speed, Scrum, ...

Page 25: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Exemplos de processos Consenso em torno de

Iteratividade Participação de usuários Flexibilidade de configuração para

projetos específicos Comunicação entre membros da

equipe

Page 26: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Exemplos de processos Divergências em torno de

Detalhamento de atividades a serem seguidas Critério de conclusão da execução das

atividades Arquitetura robusta (RUP) Arquitetura para o contexto da iteração atual (agile

modeling) Rigor na atribuição de tarefas a responsáveis

workers (RUP) alocação sob demanda e interesse (XP)

Artefatos (documentação) gerados

Page 27: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Ciclo de Vida O ciclo de vida de um sistema consiste

de quatro fases:

Concepção (define o escopo do projeto) Elaboração (detalha os requisitos e a

arquitetura) Construção (desenvolve o sistema) Transição (implanta o sistema)

tempo

concepção elaboração construção transição

Page 28: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Cada fase é dividida em iterações:

Minor Milestones: Releases

Inception Elaboration Construction Transition

Transitioniteration

Preliminaryiteration

Architect.iteration

Architect.iteration

Devel..iteration

Devel..iteration

Devel..iteration

Transitioniteration

Page 29: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Cada iteração é planejada realiza uma seqüência de atividades

(de elicitação de requisitos, análise e projeto, implementação, etc.) distintas

geralmente resulta em uma versão executável do sistema

é avaliada segundo critérios de sucesso previamente definidos

Page 30: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.
Page 31: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Planejamento/Gerenciamento

Page 32: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Conteúdo Erros clássicos de planejamento e

gerenciamento O que é projeto? Ciclo de vida de projetos Elementos essenciais Objetivos gerais do planejamento e

gerenciamento do projeto de software

Page 33: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Erros Clássicos

Desenvolvimento de Software é uma atividade complicada, então

evite erros tais como ...

Page 34: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Pessoas Motivação incoerente

Esforço do pessoal e chefe de férias … Pessoal problemático

Uma pessoa pode desconcentrar uma equipe …

Heroísmo Posso fazer tudo, não preciso da equipe …

Page 35: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Pessoas Mais pessoas no final do projeto

Em pequeno incêndio, jogue gasolina … Atrito entre desenvolvedores e

clientes Se você não adicionar isso, não quero

mais … Falha de contratos

Com o módulo M, a ser criado pela empresa E, vamos melhorar nosso cronograma …

Page 36: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Pessoas Expectativas irreais

Vamos terminar o projeto em 6 meses … Falta de interação com o usuário

Isso é ambíguo …, então vamos decidir sozinhos.

Crença cega Essa parte do sistema é muito simples, em

1 ou 2 dias removemos todos os erros …

Page 37: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Processo Planejamento insuficiente

Esse sistema é simples, não há o que planejar …

Abandono de plano sob pressão Devido ao cronograma apertado,

vamos codificar logo depois da especificação de requisitos e não vamos testar …

Page 38: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Processo Garantia de qualidade prejudicada

Só precisamos fazer os testes a partir da GUI Controle de gerenciamento insuficiente

O que já fizemos? Não sei, mas sem problema …

Sem estimativas para tarefas necessárias Não precisamos registrar o tempo para tarefa

T

Page 39: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Processo Planejamento para controlar

depois Fizemos em 3 meses, o que

planejamos fazer em 2, mas depois nós ganhamos tempo …

Programação sem padronização Vou codificar de qualquer jeito; ganho

tempo …

Page 40: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Produto Requisitos demais

Sei que o usuário não pediu, mas vamos melhorar a performance do sistema …

Desenvolvedor exagerado Sei que o sistema não precisa e que não

domino a tecnologia, mas vou usar o recurso R …

Desenvolvimento orientado a pesquisa Sei que vou desenvolver funcionalidade F, que

é estado-da-arte, mas minha estimativa é razoável …

Page 41: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Tecnologia Síndrome da bala de prata

Vou usar o gerador de GUIs e não terei problemas quanto ao desenvolvimento das GUIs …

Estimativa otimista com novas ferramentas ou métodos Vou usar ferramenta F, no lugar de G,

daí vou ganhar tempo …

Page 42: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Tecnologia Troca de ferramentas no meio do

projeto Vou usar a nova versão de F, pois tem

mais recursos … Falta de controle sobre o código-

fonte Vamos trabalhar em paralelo no

módulo M (único arquivo) para ganharmos tempo …

Page 43: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Projeto: Definição PMI Um empreendimento temporário

realizado para criar um produto ou serviço único

Page 44: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Por que Gerenciar? Para atingir objetivos e produzir

resultados Concentrar responsabilidade e

autoridade para atingir objetivos Coordenar e integrar todas as

atividades para chegar aos resultados

Page 45: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Objetivos do Gerenciamento

Custo

Desempenho

Tempo

Objetivo:• Limite de orçamento• Prazo de entrega• Desempenho Almejado

Page 46: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Qualidades de Gerente Liderança Comunicação Resolver problemas Negociação Influenciar a organização Mentor Especialista técnico e em processo

Page 47: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Gerenciamento das Tarefas Milestones

Ponto final de uma atividade do processo de software (um marco no cronograma)

Deliverables Resultado do projeto a ser entregue

ao cliente. Usualmente entregue ao final de uma fase.

Page 48: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

48/57

Por que Planejar? Criar propostas que sejam

Econômicamente viáveis e Realizadas com recursos financeiros

pré-estabelecidos E que estejam de acordo com as

necessidades requisitadas Representar precisamente o que

se pode fazer

Page 49: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

49/57

Planejamento e Estimativa Registre suas estimativas para

comparar com os resultados reais no final do projeto

Planejamento continua durante desenvolvimento e manutenção Planejamento inicial não é suficiente Planejamento detalhado só ocorre

após a especificação de requisitos

Page 50: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

50/57

Planejamento e o Processo de Software

Page 51: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

51/57

O que é um plano? Documento que define o trabalho que e

como deve ser feito Com uma estimativa de tempo e recursos

exigidos, e um contexto para gerenciamento de controle e revisão, para cada marco

Servir de benchmark para comparar com projetos anteriores, quando documentado apropriadamente

Melhorando erros em estimativas e sua precisão

Page 52: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

52/57

Estrutura Básica de um Plano Introdução Organização do Projeto Requisitos com Recursos (Pessoas, SW,

HW) Detalhamento das Tarefas Análise de Riscos Cronograma do Projeto

Milestones/Deliverables Atribuição de tarefas a pessoas Estimativa de tempo

Custo do Projeto

Page 53: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Introdução Do que se trata o documento? Tópicos do documento Visão geral do sistema

Page 54: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Organização do Projeto Estrutura Organizacional

Membros / Cargos Papéis e Responsabilidades

Membros / Lista de Atividades

Page 55: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Recursos do Projeto Pessoas Hardware Software

Page 56: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Detalhamento das tarefas Descrição sucinta de cada tarefa a

ser realizada. Resultado esperado após a tarefa

Page 57: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Análise de Riscos Lista de Riscos

Descrição Classificação (Alta/Média/Baixa) Plano de Mitigação Plano de Contigência

Page 58: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Cronograma Atribuição de tarefas a pessoas Estimativa de tempo

Page 59: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Custo Custo dos funcionários

Salário (semanal / mensal) Vale Transporte / Alimentação

Despesas Adicionais Aluguel Luz Água Energia Internet

Page 60: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Exercício Desenvolver o Plano de Projeto a

ser desenvolvido pela empresa.

Page 61: Workshop Engenharia de Software e Sistemas. Engenharia de Software (Def.) Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática.

Referência http://www.cin.ufpe.br/~if682/