Engenharia de Software
Processos de Software
Universidade Federal da Paraíba – Campus IV Centro de Ciências Aplicadas e Educação
Departamento de Ciências Exatas
Prof. Jorge Dias
www.jorgediasjr.com
Alguns Problemas no Desenvolvimento de
Software...
Alguns projetos são cancelados mesmo antes de começar; O tempo de desenvolvimento e o custo são bem maiores do
que o estimado;
Os sistemas não funcionam como planejado; A qualidade é baixa;
A manutenção e a reutilização são difíceis e custosas; Os problemas são proporcionais à complexidade dos
Custo da Mudança ...
Mas... Como obter qualidade?
“A qualidade de um sistema é fortemente influenciada pela qualidade do processo utilizado para adquiri-lo,
Processos
Para criar um produto, seguimos uma sequencia de etapas para
completar um conjunto de tarefas.
Processo:
Conjunto de tarefas ordenadas
Série de etapas que envolvem atividades, restrições e recursos para
alcançar a saída desejada
Geralmente envolve um conjunto de ferramentas e técnicas
Ativ 1 Ativ 2 Ativ 3
Processo Saída
Processo de Software
Conjunto de atividades para se desenvolver um software. Permitem capturar experiências e passá-las adiante.
Processo de Software
“Conjunto de práticas realizadas para atingir um determinado
propósito; pode incluir ferramentas, métodos, materiais
e/ou pessoas” SEI
“Um processo define quem está fazendo o quê, quando e como
Ciclo de Vida
Quando o processo envolve a elaboração de um produto, pode
ser chamado de ciclo de vida.
Ciclo de vida do software
Descreve a vida do software desde a concepção até a implementação,
Processo de Software
Existem quatro atividades fundamentais em qualquer processo de software:
Especificação: Definição das funcionalidades e
restrições.
Desenvolvimento: Produção do software.
Validação: Validação do software para verificar se é o que
o cliente precisa.
Evolução: Evolução do software para atender mudanças
Processo de Desenvolvimento de Software
Características das 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”.
Processo de Desenvolvimento de Software
Processo de software pode ser composto por:
Fases/atividades (entradas e saídas)
procedimentos/métodos
ferramentas, utilizados para construir um produto de software. Paradigmas de desenvolvimento
Orientado a Objetos
Orientado a componentes Orientado a Serviços
Processo de Desenvolvimento de Software
Processo de software padrão pode ser dividido nos seguintes
sub-processos:
Processos Fundamentais (Análise de Negócio, Requisitos,
Análise e Projeto, Implementação,Testes e Implantação);
Processos de Apoio (Gerência de Projetos, Garantia da
Qualidade, Gerência de Configuração e Mudança, Medição e Análise);
Processos Organizacionais (Infra-estrutura, Treinamento,
Modelos de Processos de Software ou
Modelos de Ciclo de Vida do Software
Modelos de Processos de Software
Cada modelo representa um processo sob determinada
perspectiva
São bem genéricos
Podemos ver como paradigmas de processo Podem ser ampliadas e adaptadas
Modelo Cascata (Royce, 1970)
Foi o primeiro a ser adotado pelos desenvolvedores
Possui um conjunto de fases bem definidas que correspondem às
etapas do ciclo de vida do software
Não há mistura de fases: uma fase só começa quando a anterior
termina
Ao final de cada fase, um ou mais documentos devem ser
Modelo Cascata – Principais características
19
Atividades:
Análise e Engenharia de Sistemas:
Envolve a coleta dos requisitos em nível de sistema;
Busca a compreensão do sistema como um todo, incluindo hardware,
software, bancos de dados e pessoas envolvidas;
Análise de Requisitos e Software:
Intensifica e concentra a definição dos requisitos do software; O resultado será utilizado nas etapas posteriores de Projeto,
Modelo Cascata – Principais características
Atividades:
Projeto:
Transforma os requisitos da análise, o modelo lógico, em modelo
físico;
Define a arquitetura do software, detalhes procedimentais e de
interface, dentre outros;
Codificação:
Modelo Cascata – Principais características
21
Atividades:
Testes:
Realiza os testes do sistema (aspectos lógicos internos e aspectos
funcionais externos);
Manutenção:
Constrói alterações no software que visem a solução de erros,
Modelo em V
Criado pelo Ministério de Defesa da Alemanha, em 1992. É uma variação do modelo cascata
Demonstra que as atividades de teste estão relacionadas com a
Desenvolvimento Evolucionário
(Prototipação)
23
Capacita o desenvolvedor a criar um modelo do software que
será implementado;
Tem o objetivo de resolver problemas ou limitações existentes
na análise de requisitos, antes do início da implementação do software;
O protótipo pode ser apresentado ao cliente na forma de papel
ou modelo executável no computador, retratando a interface do software;
Com o protótipo, o cliente poderá verificar se os requisitos
especificados são os desejados ou reformulá-los se houver necessidade.
Desenvolvimento Evolucionário
(Prototipação)
Desenvolvimento Evolucionário
Há duas abordagens
Desenvolvimento exploratório
O protótipo evolui junto com os requisitos do
sistema e se transforma no próprio sistema final
Desenvolvimento de protótipos descartáveis
O protótipo é usado apenas para ajudar na definição
Desenvolvimento Evolucionário
Desenvolvimento exploratório
Um sistema inicial é feito a partir dos requisitos
que foram bem entendidos e que são prioritários
para a aplicação
A implementação é exposta a comentários dos
usuários para ser aperfeiçoada ao longo de vários
estágios
Desenvolvimento Evolucionário
Desenvolvimento exploratório
À medida que vão surgindo novos requisitos para o
sistema, o protótipo vai sendo modificado (desenvolvimento sob demanda)
Os padrões de qualidade (segurança, confiabilidade,
usabilidade) devem ser levados em consideração desde o começo pois devem estar presentes na versão final
Desenvolvimento Evolucionário
Desenvolvimento exploratório
Vantagens
Sistemas que atendem à necessidade imediata dos
clientes
Resultados concretos rapidamente
Envolvimento dos usuários ao longo de todo o
projeto (contribuições)
Desenvolvimento Evolucionário
Desenvolvimento exploratório
Desvantagens
A rápida evolução dos protótipos dificulta a
produção de documentação
Excesso de mudanças no código pode comprometer a
estrutura do sistema; a longo prazo, o sistema pode precisar ser substituído ou completamente reescrito
Desenvolvimento Evolucionário
Desenvolvimento exploratório
Desvantagens
A mudança de membros da equipe pode tornar a
compreensão do sistema difícil (falta de documentação)
Dificuldade para estipular valores de contrato, uma
vez que a especificação não é formalizada
Desenvolvimento Evolucionário
Desenvolvimento de protótipos descartáveis
O objetivo é compreender melhor os requisitos do cliente através
de protótipos experimentais
Apenas os requisitos que não estão claros são prototipados
Desenvolvimento Orientado a Reuso
Também conhecido como Desenvolvimento Baseado
em Componentes ou CBSE (Component-Based Software
Engineering)
Uma base de componentes de software obtidos de
terceiros ou produzidos internamente é utilizada
pelos desenvolvedores na produção da aplicação
Os componentes têm diferentes níveis de abstração
Desenvolvimento Orientado a Reuso
Especificação de Requisitos Análise de Componentes Modificação de RequisitosProjeto de Sistema com Reuso
Desenvolvimento e Integração
Validação de Sistema
Desenvolvimento Orientado a Reuso
Vantagens
Reduzir riscos e custos (menos código) Redução de prazos de entrega
Desvantagens
Adequação dos requisitos aos componentes pode resultar em
sistemas que não satisfaçam os clientes
A organização não tem controle sobre os componentes de terceiros
(o código muitas vezes não está disponível e não se conhece sua qualidade)
Desenvolvimento Orientado a Reuso
Computação Orientada a Serviços
Evolução do CBSE
Desenvolvimento Iterativo
Mudanças são inevitáveis em qualquer software
As atividades do processo precisam ser repetidas
Entrega incremental
Desenvolvimento Incremental
Modelo Cascata + Modelo Evolucionário
As funcionalidades gerais do sistema são definidas e são
planejados vários estágios de entrega de versões de acordo com a prioridade das funcionalidades para o negócio
Desenvolvimento Incremental
Definir esboço dos requisitos Atribuir requisitos aos incrementos Projetar arquitetura do sistema Desenvolver incremento do sistema Integrar incrementoDesenvolvimento iterativo e incremental
Requisitos Projeto Codificação Implantação 1 Requisitos Projeto Codificação Implantação 1 2 Requisitos Projeto Codificação Implantação 1 2 3 Versão 1 Funcionalidade 1 Versão 1 + Funcionalidade 2 Versão 3 + Funcionalidade 3Desenvolvimento Iterativo e Incremental
Vantagens
O cliente recebe resultados rapidamente (vantagem para o negócio) Risco menor de fracasso do sistema (problemas isolados, não gerais) Funcionalidades mais importantes são entregues primeiro (testadas
Desenvolvimento Iterativo e Incremental
Desvantagens
Dificuldade para mapear requisitos em incrementos
Incrementos devem ser pequenos e devem produzir
funcionalidades completas
Incrementos devem ter aproximadamente o mesmo tamanho e o
Modelo Espiral (Boehm, 1988)
Desenvolvido para abranger as melhores características do ciclo de vida clássico e da prototipação;
Acrescenta um novo elemento: a análise de riscos;
O processo é representado como uma espiral em vez de uma seqüência de atividades;
Modelo Espiral
Modelo Iterativo: Espiral
Definição dos objetivos, alternativas e restrições: Objetivos
específicos para a fase são identificados, alternativas para realizar os objetivos e restrições são encontradas
Avaliação e redução de risco: Os riscos principais são
identificados, analisados e buscam-se meios para reduzir estes riscos
Desenvolvimento e validação: Um modelo apropriado para o
desenvolvimento é escolhido, que pode ser qualquer um dos modelos de ciclo de vida
Qual o melhor processo de software?
A escolha do Processo de Software que será adotado em um
projeto dependerá de vários fatores
cultura e características do cliente e da empresa desenvolvedora de
software
tipo de aplicação
experiência dos desenvolvedores
Um processo na prática envolve características de vários dos
Exemplo de Processos
RUP (Rational Unified Process) Metodologias ágeis
Scrum, XP, etc…
Processos focados em paradigmas UML Components, Catalysis… SOMA (IBM)
Fábricas de Software
“Um processo estruturado, controlado e melhorado de forma
contínua, considerando abordagens de engenharia industrial, orientado para o atendimento a múltiplas demandas de natureza e
escopo distintas, visando à geração de produtos de software,
conforme os requisitos documentados dos usuários e/ou clientes, da forma mais produtiva e econômica possível”
Introdução – Aula 01 [47/23]
Fábricas de Software
O termo Fábrica de Software foi empregado pela primeira vez em
1969, pela japonesa Hitachi, mas só começou a ficar popular no início dos anos 90
Características:
Ter processos claros e depender mais deles do que das pessoas, de
forma a ter resultados mais previsíveis
Aplicar conceitos da indústria em geral em ambientes de
desenvolvimento de software, de forma a aumentar a produtividade
e diminuir prazos e custos.
Fábricas de Software
Existem fábricas especializadas somente na codificação ... Os requisitos devem ser entregues
de forma padronizada
... Assim como existem fábricas que englobam as várias fases de
um processo de desenvolvimento
Necessidade de utilização de melhores práticas de frameworks como
CMMI, PMP, MPS.BR, UML/UP, dentre outros
Introdução – Aula 01 [49/23]