Escolar Documentos
Profissional Documentos
Cultura Documentos
Sílvio Bacalá Jr
www.facom.ufu.br/~bacala/ESOF
sbacala@gmail.com
1
Apresentação
Sílvio Bacalá Jr.
Engenharia Elétrica – UFU
Pós em Tecnologia da Informação – UFPE
Mestrado em Computação - UFU
Engenharia de Software
2
3
4
Objetivo (1/1)
5
Estrutura (1/1)
1. Introdução
Software
Engenharia de Software
2. Processo de Desenvolvimento de Software
3. CICLO DE VIDA de Desenvolvimento de Software
4. Controle da qualidade do processo
CMMI e MPS.BR.
5. Conclusão
6
1. Introdução (1/3)
Software [1]
+ +
Como Construir?
ENGENHARIA
Simplesmente DE SOFTWARE
“FAZER” OU www.sei.cmu.edu/
www.rspa.com/spi/
www.swebok.org
7
1. Introdução (2/3)
8
1. Introdução (3/3)
Engenharia de Software
Processo de Desenvolvimento de Software
Análise de Implemen- Implan-
Projeto Teste
Requisitos tação tação
Motivação
10
2. Processo de Software (2/2)
11
3. Ciclo de Vida (1/13)
12
3. Ciclo de Vida (2/13)
13
3. Ciclo de Vida (3/13)
Planejamento
Fornece uma estrutura que possibilita ao gerente
fazer estimativas iniciais de recursos, custos e
prazos;
O escopo do software é estabelecido;
Um plano de projeto deve ser elaborado
configurando o processo a ser utilizado;
Esta atividade faz parte da gerência de projeto.
Modelagem de Negócio
Descrever o funcionamento da organização
14
3. Ciclo de Vida (4/13)
15
3. Ciclo de Vida (5/13)
Implementação
O projeto é traduzido para uma para uma forma
passível de execução pela máquina.
Testes
Testes de unidade e documentação dos resultados;
Integração dos componentes e teste do software
como um todo;
Alguns modelos de processo prevêem a realização de
testes já nas primeiras etapas.
16
3. Ciclo de Vida (6/13)
Entrega e Implantação
O software deve ser instalado em ambiente
produção.
Envolve
Treinamento de usuários;
Configuração do ambiente de produção;
Conversão bases de dados (se necessário).
Principal propósito desta fase:
Realizase os Testes de Aceitação (estabelecer que o
software satisfaz os requisitos dos usuários).
17
3. Ciclo de Vida (7/13)
Operação
Após o teste de aceitãção, o software passa a ser
utilizado de fato em ambiente de produção.
Manutenção
Adaptativas
Corretivas
Evolutivas
18
3. Ciclo de Vida (8/13)
3
abordagens
principais
19
3. Ciclo de Vida (9/13)
Modelos Seqüenciais
Organizam o processo em uma seqüência linear de
fases.
Exemplo
Waterfall (Cascata)
Quando empregar
Problema cujos requisitos
são muito bem definidos
Apresenta alguns problemas
20
3. Ciclo de Vida (10/13)
Modelos Incrementais
Software produzido por incrementos (módulos);
Incrementos
Seu desenvolvimento segue o modelo sequencial;
Exigem revisão do cliente;
Vantagens Problemas
Menor custo e tempo para Requisitos instáveis ou
entrega da 1ª versão; imcompletos geram muitas
Menor risco e nº de mudanças nos incrementos;
mudanças nos req. (pelo fato Gerência do projeto é mais
dos inc. serem menores que o complexa.
sw todo). 21
3. Ciclo de Vida (11/13)
Modelos Incrementais
Exemplo
RAD (Rapid Application Development)
Prima por um ciclo de desenvolvimento curto.
22
3. Ciclo de Vida (12/13)
Modelos Iterativos
Não se preocupa em entregar de versões
operacionais desde o primeiro ciclo;
Geralmente produzem protótipos ou modelos.
Versões operacionais são produzidas à medida em
que os requisitos vão ficando mais claros e
estáveis;
Quando empregar
Problemas muito complexos
Requisitos são muito voláteis ou que não podem ser
totalmente especificados no início do desenvolvimento.
23
3. Ciclo de Vida (13/13)
24
5. Conclusão (1/1)
25
Referências (1/1)
26
27
Análise
Modelagem
Elicitação
Mundo Real
Soluções
Problemas
Gap Semântico
Mundo Computacional
29
Projeto de software
Perspectiva de resultado
Descreve como um sistema é decomposto organizado
em componentes e descreve as interfaces entre esses
componentes
Refina a descrição dos componentes até um nível de
detalhamento que permita a sua construção.
arquitetura do software
(componentes e interfaces entre componentes)
30
Importância de Projeto de
Software
Detecção de problemas
podem comprometer seu uso e até mesmo a
conclusão do mesmo.
Se forem detectados apenas na construção
do software,
correções podem ser custosas e parte do
trabalho pode ser perdida
31
Fundamentos
Conceitos, noções e terminologia que formam a base
para compreensão o papel e o escopo do projeto de
software.
Conceitos
Contexto do projeto de software
Processo do projeto de software
Princípios do projeto de software
32
Conceitos
Projeto como um problema “wicked”
Software não é apenas um campo no qual projeto está
inserido
De maneira geral, projeto é visto como uma forma de
resolver problemas.
Conceito de “wicked problem”
Um problema sem solução definitiva
Importante para estabelecer os limites do projeto.
33
O contexto do projeto de
software
Projeto de software agrega atividades que se encaixam
entre:
análise de requisitos de software e
construção de software
34
O processo do projeto de
software
Feito em dois passos:
Projeto arquitetural (“top-level design”) :
descrição da estrutura e organização do software e
identificação de componentes e suas interfaces
Entrada:
documento(s) de especificação de requisitos
Saída:
um conjunto de modelos e artefatos que documentam as
principais decisões tomadas.
35
Resumindo...
É a transformação de requisitos (de
software),
estabelecidos em termos relevantes ao
domínio do problema,
em uma descrição
que explica como solucionar os aspectos do
problema relacionados com software.
36
Preâmbulo
37
Objetivos deste preâmbulo
38
SWEBOK
Introdução
O SWEBOK (Guide to the Software Engineering Body
of Knowledge) é um documento criado com a
finalidade de servir de referência em assuntos
considerados como essenciais na área de Engenharia
de Software e foi conduzido pelo IEEE (Institute of
Electrical and Electronics Engineers).
39
SWEBOK
Introdução
O porquê do guia?
Necessidade da comissão de especialistas da área
de Engenharia de Software, visando uma
definição das fronteiras que a delimitam.
[SWEBOK, 2004].
Subsídios para o reconhecimento da profissão de
Engenheiro de Software.
40
SWEBOK
Introdução
Onde surgiu o guia?
O projeto SWEBOK foi iniciado em 1998 pela
SWECC (Software Engineering Coordinating
Committee).
SWECC surgiu com a colaboração do IEEE
Computer Society e a Association for
Computing Machinery (ACM) com o intuito de
promover a profissionalização da engenharia de
software.
41
SWEBOK
Objetivos do SWEBOK
Caracterizar o conteúdo da disciplina de engenharia de
software;
• Estabelecer um conjunto apropriado de critérios e
normas para a prática profissional da Engenharia de
Software;
Marcar as fronteiras entre a Engenharia de Software e
as demais disciplinas relacionadas;
Prover uma fundação para certificação individual e
para licenciamento de profissionais.
42
SWEBOK
SWEBOK 2004
43
SWEBOK
SWEBOK 2004
44
SWEBOK
SWEBOK 2010
Adicionado material sobre Interfaces Humano-
Computador no design de software e Teste de
Software;
Remoção da seção Ferramentas e métodos de
Engenharia de Software (distribuídos para outras áreas
de conhecimento);
Redistribuição de matérias entre as áreas de
conhecimento.
45
SWEBOK
Áreas de Conhecimento
46
SWEBOK
Requisitos de Software
Elicitação,
Análise,
Especificação e
Validação de Requisitos;
Sub-áreas:
Fundamentos dos Requisitos;
Processo de Requisitos;
Elicitação de Requisitos;
Análise de Requisitos;
Especificação de Requisitos;
Validação de Requisitos;
Considerações Práticas.
47
SWEBOK
Software Requirements
48
SWEBOK
Software Requirements
Fundamentos de requisitos de
software
Definições Básicas
Requisitos de Software
Requisitos de Produto e Software
Requisitos Funcionais e não Funcionais
Propriedades Emergentes
Requesitos quantificáveis
Requisitos de Sistema e de Software
49
SWEBOK
Software Requirements
Requirements Process
Apresenta os processos de requisitos de
software
Orientando as outras cinco subáreas
Mostra como o planejamento de requisitos se
encaixa com o processo completo de
planejamento de software
Se preocupa com modelos de processo, atores,
suporte, gerenciamento de requisitos, melhoria
e qualidade do processo.
50
SWEBOK
Software Requirements
Requirements Elicitation
Se preocupa com a origem dos requisitos
e como os engenheiros de software
podem coletar eles
Primeiro estágio para o entendimento de
como o problema poderá ser resolvido.
Identificar Fontes e definir as técnicas
para extrair requisitos dos stakeholders
51
SWEBOK
Software Requirements
Requirements Analysis
Detectar e resolver conflitos entre
requisitos
Descobrir os limites do sistema e como ele
deve interagir com o ambiente de
operação
Aprimorar requisitos do sistema para
requisitos de software.
Classificação dos requisitos
52
SWEBOK
Software Requirements
Requirements Specification
Produção do documento de definição do
sistema
Especificação dos requisitos do sistema e
derivação dos requisitos de software a partir
dos do sistema
Especificação dos componentes de software
53
SWEBOK
Software Requirements
Requirements Validation
Garantir o entendimento dos requisitos pelos
engenheiros de software
Verificar se o documento de requisitos está
conforme com os padrões da organização,
estão consistentes e completos:
Revisões
Prototipação
Testes de aceitação
54
SWEBOK
Software Requirements
Pratical Considerations
Gerenciamento de mudança e manutenção
dos requisitos
Atributos dos requisitos
Acompanhamento dos Requisitos
Avaliar o tamanho das mudanças em
requisitos,e estimar o custo do
desenvolvimento e manutenção da tarefa.
55
SWEBOK
Projeto de Software
Atividade do ciclo de vida da Engenharia de
Software em que os requisitos são analisados
a fim de produzir uma descrição da
estrutura interna do software. [Swebok,
2004].
56
SWEBOK
Projeto de software
Subáreas
fundamentos de projeto de software
pontos chaves no projeto de software
estrutura e arquitetura do projeto de
software
análise e avaliação do projeto de software
notações do projeto de software e
estratégias e métodos para projeto de
software.
57
SWEBOK
Software Design
58
SWEBOK
59
SWEBOK
Modularização Coesão e
Encapsulamento Acoplamento
Separação de Interface e implementação
Suficiência e completeza
60
SWEBOK
61
SWEBOK
62
SWEBOK
64
SWEBOK
65
SWEBOK
67
SWEBOK
69
SWEBOK
70
SWEBOK
71
SWEBOK
72
SWEBOK
73
SWEBOK
74
SWEBOK
75
SWEBOK
76
SWEBOK
78
SWEBOK
79
SWEBOK
80
SWEBOK
81
Engenharia de Software
82
SWEBOK
Projeto de software
[IEEE 610.12-90]
“o processo de definir a arquitetura, os
componentes, as interfaces e outras
características de um sistema ou
componente”,
e
“o resultado de tal processo”.
83
SWEBOK
Projeto de software
Perspectiva de processo
Atividade que transforma uma descrição sobre o que se
quer resolver (usando termos relevantes ao domínio do
problema)
em uma descrição que explica como resolver o
problema
O quê Como
Projeto de software
Um modelo genérico de processo
Especificação Atividades de
de requisitos
projeto
Especificação Especificação
Arquitetura Especificação Especificação Especificação
de componentes de estruturas
do sistema de software de interface de algoritmos
de dados
Artefatos de
projeto
[Sommerville 2001]
85
Início
Entrega do
Produto
Fim
86
Início
Início do Projeto
Projeto
Detalhado
Arquitetural
Entrega do
Produto
Fim
87
Início
Fim
88
Início
Projeto
Detalhado Construção dos Diagramas de
Classes (Nível de Projeto)
Implementação
Construção dos Diagramas de
Seqüência (Ator e Objetos)
Testes
Fim
89
SWEBOK
Projeto de software
Perspectiva de resultado
Projeto arquitetural
descrição da estrutura e
organização de nível mais
alto do software, e
identificação de componentes
e relacionamentos
Projeto detalhado
descrição de cada
componente em nível de
detalhe suficiente para
permitir a sua construção
estrutura e comportamento
90
SWEBOK
Projeto de software
Tópicos da Área de Conhecimento (KA)
91
Fundamentos de Projeto de SW
Conceitos, noções e terminologia
que formam a base para
compreensão do papel e do escopo
do projeto de software.
Conceitos
Contexto do projeto de software
Processo do projeto de software
Princípios de projeto de software
Enabling techniques [Buschman96]
92
Princípios de Projeto de Software
93
SWEBOK
Princípios de projeto de
software
Principle
“a basic truth or a general law … that is used as a basis of
reasoning or a guide to action.”
Oxford English Dictionary
Princípios de projeto
Noções consideradas fundamentais para diversas
abordagens de projeto de software
94
SWEBOK
95
Fundamentos de Projeto de SW
96
97
Conceitos de Projetos
Abstração
Ocultamento da informação
Refinamento
Modularidade
Hierarquia de Controle
Particionamento estrutural
Estrutura de dados
Procedimento de Software
Independência Funcional
Coesão e Acoplamento
98
Abstração
Quando consideramos uma solução modular para
qualquer problema, muitos níveis de abstração pode
ser levantados. No nível mais alto de abstração, uma
solução é enunciada em termos amplos usando a
linguagem de ambiente do problema. Nos níveis mais
baixos de abstração, uma orientação procedimental é
adotada.
99
Abstração
Princípio básico para lidar com a complexidade.
[Booch 91]
100
Refinamento
Um programa é desenvolvimento pelo refinamento
sucessivo de níveis de detalhes procedimentais.
Refinamento é na verdade um processo de elaboração.
Começamos com um enunciado da função(ou descrição da
informação) que é definida em alto nível de abstração. Isto
é, o enunciado descreve a função ou informação
conceitualmente, mas não fornece qualquer informação
sobre o funcionamento interno da função ou a estrutura
interna da informação. O refinamento leva o projetista a
elaborar o enunciado original, fornecendo mais e mais
detalhes à medida que cada refinamento(elaboração)
ocorre.
101
Abstração e Refinamento
Abstração e refinamento são conceitos
complementares. A abstração permite ao projetista
especificar procedimentos e dados e ainda suprimir
detalhes de baixo nível. O refinamento ajuda o
projetista a revelar detalhes de baixo nível à proporção
que o projeto progride. Ambos os conceitos ajudam o
projetista a criar um modelo completo de projeto à
medida que o projeto evolui.
102
Modularidade
O software é dividido em partes chamadas de
módulos
nomeados separadamente e
endereçaveis,
integrados para satisfazer os requisitos do
problema.
103
Ocultamento da Informação
Ocultação dos detalhes internos da implementação de um
módulo (ou componente) dos seus clientes.
Implica que a efetiva modularidade pode ser conseguida
pela definição de um conjunto de módulos independentes
que informam uns aos outros apenas o necessário para
realizar uma função do software.
Para evitar acoplamento entre componentes, o cliente deve
conhecer somente a Interface de seus fornecedores, ou seja,
a assinatura de suas operações.
104
Encapsulamento / Information
Hiding
[Booch 91]
105
Abstração X Ocultamento
Abstração ajuda a definir as entidades
procedimentais(ou informacionais) que constituem o
software.
Ocultamento define e impõe restrições de acesso,
tanto a detalhes de processamento dentro de um
módulo quanto a qualquer estrutura de dados local
usada pelo módulo.
106
Hierarquia de Controle
Hierarquia de controle, também chamada estrutura de
programa, representa a organização dos componentes
de programa(módulos) e implica uma hierarquia de
controle.
107
Particionamento estrutural
Se o estilo arquitetural de um sistema hierárquico, as
estruturas do programas podem ser particionadas tanto
horizontalmente quanto verticalmente.
Particionamento horizontal, define ramos separados da
hierarquia modular para cada função principal do
programa
Particionamento vertical, sugere que o controle(tomada de
decisão) e o trabalho sejam distribuídos de maneira
descendente na estrutura do programa. Os módulos de
nível alto devem desempenhar funções de controle e fazer
pouco trabalho de processamento real. Módulos que se
situam abaixo na estrutura devem ser os trabalhadores,
realizando todas as tarefas de entrada, de computação e de
saída.
108
Estrutura de Dados
Estrutura de Dados é uma representação do
relacionamento lógico entre elementos de dados
individuais. Como a estrutura da informação vai
invariavelmente afetar o projeto procedimental
final, a estrutura de dados é tão importante quanto
a estrutura do programa para a representação da
arquitetura de software.
A estrutura de dados determina a organização, os
métodos de acesso, o grau de associatividade e as
alternativas de processamento da informação.
109
Procedimento de Software
O procedimento de software focaliza os detalhes de
processamento de cada módulo individualmente. O
procedimento deve fornecer uma especificação precisa
do processamento, incluindo sequencia de eventos,
pontos exatos de decisão, operações repetitivas e até
organização e estrutura de dados.
110
Independência funcional
Decorrência direta da modularidade dos conceitos de
abstração e ocultamento funcional
Conseguida pelo desenvolvimento de módulos com
função de “finalidade única” e uma “aversão” a
interação excessiva com outros módulos.
De outro modo:
projetar software de maneira que cada módulo cuide de uma
subfunção específica dos requisitos e tenha uma interface
simples quando visto de outras partes da estrutura do
programa.
111
Independência funcional
Módulos independentes são mais fáceis de manter
(e testar) :
efeitos secundários causados por modificação de projeto
ou código são limitados,
a propagação de erros é reduzida e
os módulos reusáveis são possíveis.
Para resumir,
independência funcional é a chave para um bom
projeto, e o projeto é a chave da qualidade de software.
Independência é medida usando dois critérios
qualitativos: coesão e acoplamento
112
Modularização – Coesão e
Acoplamento
Princípios introduzidos como parte do projeto
estruturado.
113
Coesão
Um modulo coeso realiza uma única tarefa
dentro de um procedimento de software,
requerendo pouca interação com procedimentos
que estão sendo realizados em outras partes de um
programa. Um módulo coeso deveria (idealmente)
fazer apenas uma coisa.
114
Tipos de Coesão (em ordem
decrescente) – 1/3
Coesão Funcional: um módulo com coesão funcional
contém elementos que contribuem para a execução de
uma e apenas uma tarefa relacionada ao problema.
Coesão Sequencial: um módulo sequencialmente
coeso é aquele cujos elementos estão envolvidos em
atividades tais que os dados de saída de uma atividade
servem como dados de entrada para a próxima.
Coesão Comunicacional: um módulo com coesão
comunicacional é aquele cujos elementos contribuem
para atividades que usem a mesma entrada ou a
mesma saída.
115
Tipos de Coesão (em ordem
decrescente) – 2/3
Coesão Procedural: módulo cujos elementos estão
envolvidos em atividades diferentes e possivelmente
não relacionadas, mas nas quais o controle flui de uma
atividade para a outra.
Coesão Temporal: módulo cujos elementos estão
envolvidos em atividades que estão relacionadas no
tempo.
Coesão Lógica: módulo cujos elementos contribuem
para atividades da mesma categoria geral, onde a
atividade ou as atividades a serem executadas são
selecionadas fora do módulo.
116
Tipos de Coesão (em ordem
decrescente) – 3/3
Coesão Coincidental: um módulo coincidentemente
coeso é aquele cujos elementos contribuem para
atividade sem relação significativa entre si.
117
Acoplamento
Medida da interconexão entre módulos numa estrutura de
software.
Depende da complexidade da interface entre módulos, do
ponto em que é feita entrada ou referência a um módulo e
que dados passam através da interface.
Lutamos por acoplamento mais baixo possível.
Conectividade simples entre módulos resulta em
software bem mais fácil de entender e menos propenso
a “efeito de propagação”
erros que ocorrem em um lugar se propagam por todo o
sistema.
118
Tipos de Acoplamento (em
ordem crescente) – 1/2
Acoplamento de Dados: módulos que se comunicam
por parâmetros.
120
Separação de Objetivos
(Separation of Concerns)
Permite a análise de diferentes aspectos de um
problema,
analistas se concentram em um aspecto de cada vez.
Fundamental para o entendimento de sistemas de
software complexos.
Responsabilidades diferentes ou não-relacionadas
devem ser separadas em um sistema de software
Ex: atribuir a diferentes componentes.
Componentes que colaboram para a solução de uma
tarefa específica devem ser separados daqueles
envolvidos em outras tarefas. 121
Sugestões para Leitura
Ian Sommerville, Software Engineering, Cap. 10, 2001
Shari Pfleeger, Engenharia de Software, Cap. 5, 2003
Grady Booch, Análise e Projeto OO,1991
UML User Guide, 1999
122