O Processo Unified
 Processo de Desenvolvimento de Software
Necessidades
do Usuário
Processo de
Desenvolvimento
 Elementos Participantes
Trabalhadores
Atividades
Recursos Humanos
Artefatos de Software
Sistema de
Software
O Processo Unified
 Ciclo de Vida de um Software
O Processo Unified
O Processo Unified
Modelos
O Começo do Processo
 Pré-Projeto
antes de começar o projeto de um software, (ou seja, antes de
começarmos as iterações) é necessário fazermos um
planejamento prévio de como esse desenvolvimento se dará
 Visão do Problema
Compreensão do Problema - descrição verbal do domínio do
problema - elicitação das necessidades dos investidores
Proposta de Solução de Software - descrição verbal
propondo como se pode visualizar um sistema de software para
resolver o problema
estabelecimento de metas e objetivos
Visão Geral dos Pré-Requisitos
funções do sistema - o que se supõe que o sistema faça
atributos do sistema - o que se supõe que o sistema seja
O Começo do Processo
 Planejamento Logístico
Equipes de Trabalho - pessoas envolvidas no projeto
Grupos Afetados - grupos afetados pelo projeto
Fatos Presumidos - fatos que se presumem verdadeiros antes
de se iniciar o projeto
Riscos - coisas que podem levar ao fracasso ou atrasos no
projeto - potenciais consequências do fracasso ou do atraso
Dependências - outros parceiros, sistemas ou produtos dos
quais o projeto depende para sua implementação
 Glossário (Vocabulário) de Termos
levantamento dos principais termos utilizados para descrever as
características do problema
Modelo Conceitual de Domínio
 Modelo Conceitual
ilustra conceitos significativos de um domínio - aquilo que
devemos estar cientes a respeito do domínio
representa coisas do mundo real, NÃO componentes de
software
obtido a partir da Análise do Domínio
 Conteúdo
conceitos, expressos em um diagrama de classes
associações entre os conceitos
atributos dos conceitos
 Análise Estruturada x Análise Orientada a Objetos
Análise estruturada enfoca em processos ou funções
Análise orientada a objetos enfoca em conceitos
Modelo Conceitual de Domínio
 Lista de Categorias de Conceitos
objetos físicos ou tangíveis
especificações ou descrições de coisas
lugares
transações
ítens sendo transacionados
papéis de pessoas
coisas que contém outras coisas
coisas que são contidas em outras coisas
regras e políticas
eventos
catálogos de coisas
etc...
Modelo Conceitual de Domínio
 Lista de Associações Comuns
A
A
A
A
A
A
A
A
A
A
A
A
é uma parte física de B
é uma parte lógica de B
está fisicamente contido em B
está logicamente contido em B
é uma descrição para B
é um ítem transacionado por B
é armazenado em B
é membro de B
utiliza ou gerencia B
se comunica com B
possui ou é possuído por B
está próximo de B
Modelo Conceitual de Domínio
PagerMessage
get
String
Listener
show
Character
receives
PhoneNumber
has
IncomingCall
opens
uses
dials
Channel
Digit
Ring
has
ConfidentialPhoneNumber
VibraCall
Dialer
feed
search
Catalog
receives
DialingRequest
Password
ConfidentialCatalog
MainCatalog
VoiceRegister
Name
EmergencyCatalog
PreviousDialedMemory
Especificação dos Requisitos
Encontrar Atores e
Casos de Uso
Encontrar Atores e
Casos de Uso
 Objetivo
iniciar o processo de especificação dos requisitos,
desenvolvendo cenários genéricos descrevendo a interação
entre o(s) usuário(s) e o sistema
 Nesta Atividade
Explora-se a descoberta de diferentes possíveis casos de uso
Casos de uso devem envolver todos os tipos de interações
desejadas entre o sistema e os usuários
 Caso de Uso
Narrativa genérica de um caso de interação entre o(s)
usuário(s) e o sistema
 Resultado
diagrama de casos de uso
Diagrama de Casos de Uso
 Exemplo: Casos de Uso para um Telefone Celular
User
Delete Number in Memory
Program Number in Memory
<<extends>>
Search Memory
<<extends>>
Dial Confidential Phone Number
Check Password
<<include>>
Validate User
Dial Number in Memory
Dial Phone Number
Voice Validation
Priorização dos Casos de Uso
Priorização dos Casos de Uso
 Objetivo
coletar subsídios para a priorização dos casos de uso,
determinando quais deles devem ser desenvolvidos (i.e.
analisados, desenhados, implementados, etc) nas primeiras
iterações e quais podem ser desenvolvidos nas iterações
posteriores
 Resultados
capturados na visão arquitetural do modelo de casos de uso
esta visão é considerada pelo gerente de projeto e utilizada para
o planejamento do que deve ser desenvolvido na iteração
este planejamento leva em consideração também aspectos nãotécnicos, tais como aspectos políticos ou estratégicos
visão arquitetural deve destacar os casos de uso que descrevem
funcionalidades críticas ou importantes
Detalhamento de Casos de Uso
Detalhamento de Casos de Uso
 Objetivo
descrever de maneira detalhada os caso de uso selecionados na
etapa anterior, referenciando de maneira minuciosa o fluxo de
eventos entre os atores e o sistema, incluindo-se como o caso
de uso começa, termina e quais as atividades realizadas tanto
pelos atores como pelo sistema
 Descrição de Caso de Uso
pode ser realizada por meio de diferentes tipos de artefatos de
software:
texto (sumarizada ou detalhada)
diagrama de estados
diagrama de atividades
a escolha do artefato ideal depende do grau de complexidade
do caso de uso
Exemplo de Descrição
(Sumária) de Caso de Uso
 Caso de Uso
 Atores
 Propósito
DialPhoneNumber
Usuário
Descrever o processo de discagem de
um número
 Fluxo de Eventos O Usuário informa ao dispositivo que
deseja fazer a discagem de um
número, entra com uma sequência de
n dígitos, informa ao sistema que
terminou o número e o sistema inicia
o processo de discagem
 Tipo
Primário e Conceitual
Variações na Descrição de
Casos de Uso
 Descrição de Caso de Uso
pode se tornar bem intrincada
 Estratégia Básica
descrever um fluxo de eventos básico, do começo ao fim, e
acrescentar as excessões que podem aparecer a cada instante
todas as alternativas, desvios ou excessões devem ser
colocadas, para que se possa dizer que o caso de uso está
especificado
 Elementos Essenciais
pré-condições: condições necessárias para que o caso de uso
possa se iniciar
pós-condições: condições que determinam que o caso de uso
tenha realmente se encerrado
Detalhamento de um Caso de Uso
por Diagrama de Atividades
Prototipação da
Interface com o Usuário
Prototipação da
Interface com o Usuário
 Objetivos
construir um protótipo da interface com o usuário
essa interface não será a interface definitiva, mas deve conter
as informações necessárias para a efetivação dos casos de usos
descritos nas etapas anteriores
 Etapas
observação dos casos de uso e abstração das informações
necessárias a serem implementadas pelas interfaces, para cada
ator
criação física de protótipos de interfaces com o usuário que
ilustram como o sistema poderia implementar os casos de uso
 Resultado Final
conjunto de sketches e protótipos de interface com o usuário,
que servirão de inspiração posteriormente na fase de design
Estruturação do Modelo de
Casos de Uso
Estruturação do Modelo de
Casos de Uso
 Objetivo
reestruturar os elementos do modelo de casos de uso
capturados anteriormente (que podem ter sido capturados de
maneira independente entre si) e gerar um modelo que seja
homogêneo, consistente e simples de ser interpretado
 Identificando Descrições Compartilhadas de
Funcionalidade
relação de generalização
 Identificando Descrições Adicionais ou Opcionais de
Funcionalidade
relação de extensão
 Identificando Descrições Repetidas de Funcionalidade
relação de inclusão
Análise
 Análise dos Requisitos: aprofundamento das
investigações, detalhamento e refinamento das
especificações dos requisitos
 Objetivos
obter uma melhor compreensão dos requisitos, mantendo uma
descrição dos requisitos que seja compreensível e auxilie no
posterior design do sistema
transladar as especificações dos requisitos que se encontram na
“linguagem do cliente” para uma representação que use uma
“linguagem do desenvolvedor”
passar de um modelo de casos de usos para um modelo de
análise
 Principal Desafio: manter um nível abstrato de
investigação, sem entrar em questões de design
Classes Estereotipadas
 Classes Boundary
utilizada para modelar a interação
entre o sistema e os atores
interação envolve o recebimento e
apresentação de informações
 Classes Control
representam a coordenação,
sequenciamento, transações e
controle de outros objetos
derivações e cálculos
 Classes Entity
modela informações (dados) de
longa duração, frequentemente
persistentes
Análise
Análise Arquitetural
Análise Arquitetural
 Objetivo
gerar um outline do modelo de análise e da arquitetura por
meio da identificação dos pacotes de análise, das classes de
análise e de requisitos especiais necessários
 Sub-Tarefas
Identificação dos Pacotes de Análise
Identificação de Classes Óbvias do tipo “Entity”
Identificação de Requisitos Especiais
persistência, distribuição ou concorrência, restrições de segurança,
tolerância a falhas e gerenciamento de transações
Análise dos Casos de Uso
Análise dos Casos de Uso
 Objetivos
identificação das classes de análise cujos objetos são
necessários para implementar o fluxo de eventos de um caso de
uso em particular – diagrama de classes estereotipadas
distribuição do comportamento em um caso de uso por um
conjunto de objetos interagindo entre si – diagrama de
colaboração ou sequência
captura dos requisitos especiais relativos à realização de um
caso de uso em particular
Análise de Casos de Uso
 Exemplo de Diagrama de Classes de Análise
Análise de Casos de Uso
 Exemplo de Diagrama de Colaboração da Análise
Análise de uma Classe
Análise de uma Classe
 Objetivos
identificação e formalização das responsabilidades de uma
classe de análise – contrato
identificação e formalização dos atributos e relacionamentos
de uma classe de análise – enriquecimento do diagrama de
classes
captura de requisitos especiais
 Identificação de Responsabilidades
Responsabilidades: papéis que objetos da classe assumem
em diferentes realizações de casos de uso
Associadas às mensagens que uma classe pode receber
Análise de uma Classe
 Descrição de Responsabilidades por meio de Contratos
Contratos: descrevem as responsabilidades de uma determinada
classe, em termos de quais mudanças no estado do objeto são
realizadas quando este recebe mensagens (ou invocações)
descrevem O QUE o objeto deve fazer, sem explicar COMO ele o
faz
 Para cada mensagem aparecendo em um diagrama de
colaboração, deve haver um contrato correspondente
 Seções de um Contrato
Um contrato está dividido em seções
Cada seção provê informações sobre uma parte específica do
contrato
Nem todas as seções são obrigatórias, devendo aparecer
quando necessário
Análise de uma Classe
 Seções de um Contrato
Nome: nome da operação e eventualmente seus parâmetros
Responsabilidades: uma descrição informal das
responsabilidades que a operação deve implementar
Tipo:conceitual, classe de software ou interface
Referências Cruzadas: outras classes que utilizam o mesmo
contrato, etc.
Notas: informações adicionais, algoritmos, etc.
Exceções: casos excepcionais
Saídas Secundárias: saídas não relacionadas à interface com
o usuário, e.g. mensagens de erros, logs, etc.
Pré-Condições: condições referentes ao estado do sistema
antes da execução da operação
Pós-Condições: estado do sistema após a conclusão da
operação
Analisando Pacotes
Analisando Pacotes
 Objetivos
garantir a independência entre diferentes pacotes
garantir que um pacote de análise implementa seu propósito de
realizar classes de domínio ou casos de uso
descrever dependências entre pacotes, de tal forma que o efeito
de mudanças futuras possa ser estimado
 Guidelines para a Análise de Pacotes
definir e formalizar as dependências entre pacotes, dependendo
das classes que estes contiverem
garantir que os pacotes contenham as classes corretas. Deve-se
tentar manter os pacotes coesos, por meio da inclusão somente
de objetos que estejam funcionalmente correlacionados
tentar limitar as dependências entre pacotes - deve-se
considerar a relocação de classes que criem muitas
dependências entre pacotes
Design
 Objetivos do Design
Requisitos não-funcionais e restrições relacionadas a:
linguagens de programação, reuso de componentes, sistemas
operacionais, tecnologias de distribuição e concorrência,
tecnologias de bancos de dados, tecnologias de interface com o
usuário, tecnologias de gerenciamento de transações, etc ...
Definição de subsistemas, interfaces e classes
Decomposição do trabalho entre equipes de trabalho
Interfaces entre subsistemas
arquitetura do software, para a sincronização entre diferentes
equipes de trabalho
Especificação de elementos lógicos
Abstração objetiva da implementação do sistema
implementação seja um mero refinamento para o design
geração automática de código
Patterns e Design Patterns
 Patterns
desenvolvedores de software orientado a objetos experientes
acumularam um repertório de princípios gerais e soluções que
os guiam frequentemente em suas decisões no desenvolvimento
de novos softwares
esses princípios são formalizados/compilados, dando origem aos
chamados Patterns (padrões)
patterns codificam um conhecimento comum sobre princípios
de como resolver problemas que aparecem repetidamente
 Formato
par problema/solução que pode ser aplicado em novos
contextos, acompanhados de conselhos sobre como devem ser
aplicados
nomes sugestivos: enraízam o conceito do pattern em nossa
memória e promovem seu uso, sempre que possível
Patterns e Design Patterns
 Origem dos Patterns
“Design Patterns: Elements of Reusable Object-Oriented
Software” de Erich Gamma, Richard Helm, Ralph Johnson e
John Vlissides (Gang of Four - GoF)
Vários diferentes domínios:
organizações, processos, ensino, arquitetura, etc….
Atualmente: arquitetura e design de software, outras fases do
desenvolvimento de software (análise, etc…)
Outros livros:
Pattern-Oriented Software Architecture: A System of Patterns”
(POSA book), de Frank Buschmann, Regine Meunier, Hans Rohnert,
Peter Somerlad e Michael Stal (Siemens Gang of Five - GoV)
Pattern Languages of Program Design and PLPD 2 - selected
papers from 1st and 2nd conferences on Patterns Languages of
Program Design
Frameworks
 Frameworks de Software
são mini-arquiteturas reutilizáveis que provêm a estrutura
genérica e comportamento para famílias de abstrações de
software, junto com um contexto de metáforas que especificam
sua aplicação e uso dentro de um dado domínio
correspondem a um conjunto de classes cooperantes que
permitem uma reutilização de design para uma classe de
software específica. Um framework provê uma orientação
arquitetural, definindo quais as responsabilidade e colaborações
entre objetos. Um designer customiza um framework para uma
aplicação em particular, normalmente por meio do subclasseamento e geração de instâncias de classes derivadas das
classes do framework
reutilização do design por meio da reutilização do código
implementação de um sistema de design patterns
Design
Design Arquitetural
Design Arquitetural
 Objetivo
desenvolver um outline dos modelos de design e de distribuição,
bem como sua arquitetura, identificando-se os seguintes:
nós computacionais envolvidos e arquitetura de rede
subsistemas e suas interfaces
classes de design arquiteturalmente significativas, tais como
classes ativas
mecanismos genéricos de design que garantam a implementação
dos requisitos especiais sobre persistência, distribuição,
desempenho, etc.
 Reuso
nesta atividade, considera-se as diferentes possibilidade de
reuso, tais como o reuso de partes, componentes, subsistemas,
etc...
Design Arquitetural
 Sistemas de Software
Aplicações Monolíticas
Aplicações Multi-Thread
Sistemas Cliente-Servidor
Sistemas Baseados em Componentes
Design Arquitetural
 Identificação de Nós e Configuração de Rede
configuração de rede pode ser fundamental para a aplicação em
desenvolvimento
configurações de rede normalmente utilizam uma arquitetura
em três camadas
aspectos da configuração de rede incluem:
quais nós estão envolvidos e quais suas capacidades
que tipo de conexões há entre os nós e quais protocolos utilizam
quais as características das conexões (capacidade, qualidade, etc)
existe necessidade de processamento redundante, etc..
Conhecendo os limites e possibilidades dos nós e suas
conexões, o arquiteto pode incorporar tecnologias tais como
ORBs (Object Request Brokers), serviços de replicação de
dados, etc ...
Design Arquitetural
 Exemplo de Identificação de Nós e Configuração de
Rede
cada configuração de rede, incluindo configurações especiais
para teste e simulações, deve ser descrita em um diagrama de
distribuição em separado
Design Arquitetural
 Identificando Subsistemas e suas Dependências
Design Arquitetural
 Identificando Interfaces de Subsistemas
interfaces de subsistemas definem operações que são acessíveis
“de fora” do subsistema
essas interfaces são providas por classes ou outros subsistemas
(recursivamente) dentro do subsistema
inicialmente, antes que o conteúdo de um subsistema seja
conhecido
começa-se considerando as dependências entre subsistemas
em seguida, analisa-se as classes dentro dos pacotes de análise
interfaces para os subsistemas de middleware e software de
sistema
interfaces pré-definidas pelo produto utilizado
não basta identificar somente quais são as interfaces
identificar as operações disponibilizadas por cada interface
Design Arquitetural
 Identificando Classes de Design Arquiteturalmente
Significativas
classes de design derivadas de classes de análise
identificação de classes ativas: considerações sobre os requisitos
de concorrência do sistema
requisitos sobre desempenho, throughput, disponibilidade e tempo
de resposta necessários pelos diferentes atores interagindo com o
sistema (e.g. caso o ator demande certo tempo de resposta, devese disponibilizar um objeto ativo somente para a interação)
distribuição do sistema pelos nós (e.g. caso seja necessário
suportar distribuição por diversos nós, cada nó demandará pelo
menos um objeto ativo para gerenciar a comunicação)
outros requisitos, tais como requisitos de inicialização e shutdown,
sobrevivência, evitação de deadlocks, capacidade de
reconfiguração de nós, etc ...
Design Arquitetural
 Identificação de Mecanismos Genéricos de Design
neste passo, estudam-se os requisitos comuns, tais como os
requisitos especiais identificados durante a análise, decidindo-se
como implementá-los, dadas as tecnologias de implementação
disponíveis
resultado é um conjunto de mecanismos genéricos de design,
instanciados em classes de design
tipos de requisitos instanciados
persistência
distribuição de objetos transparente (objetos distribuídos)
requisitos de segurança
detecção e recuperação de erros
gerenciamento de transações
Design de Casos de Uso
Design de Casos de Uso
 Objetivos
identificação das classes de design e subsistemas cujas
instâncias são necessárias para realizar o fluxo de eventos de
um caso de uso
distribuição do comportamento do caso de uso entre objetos de
design interagindo entre si ou com outros subsistemas
definição dos requisitos sobre as operações disponíveis nas
classes de design e/ou subsistemas com interfaces
 Sub-Atividades
identificação das classes de design participantes
descrição das interações entre objetos de design
identificação de subsistemas participantes e suas interfaces
descrição das interações entre subsistemas
captura dos requisitos de implementação para o caso de uso
Design de Casos de Uso
 Identificação das Classes de
Design Participantes
estudo das classes de análise
estudo dos requisitos especiais
diagrama de classes de design
 Descrição das Interações
diagramas de sequência ou de
colaboração
Design de Casos de Uso
 Identificação de Subsistemas e Interfaces
estudo das classes de análise
estudo dos requisitos especiais
diagrama de classes
 Descrição das Interações entre Subsistemas
diagramas de sequência
lifelines denotam subsistemas e não objetos
cada subsistema deve ter sua própria lifeline
mensagens dizem respeito a operações da interface do subsistema
 Captura de Requisitos de Implementação
captura de requisitos (não funcionais) que afetam diretamente a
implementação
Design de Classes
Design de Classes
 Objetivos
criação de classes de design que exercem seu papel na
realização do caso de uso, obedecendo os requisitos nãofuncionais que se aplicam
aspectos sendo detalhados:
operações
atributos
relacionamentos dos quais participa
métodos (como realizar as operações)
estados válidos
dependências para com mecanismos genéricos de design
requisitos importantes para a implementação
realização correta das interfaces com as quais está envolvida
Design de Classes
 Sub-Etapas
criando um outline da classe de design
identificando operações e atributos
identificando associações, agregações e generalizações
descrevendo métodos
descrevendo estados
gerenciando requisitos especiais
Design de Subsistemas
Design de Subsistemas
 Objetivos
garantir que os subsistemas sejam tão independentes quanto
possível de outros subsistemas e suas interfaces
garantir que os subsistemas provêm uma interface adequada
garantir que os subsistemas realizam seu propósito, ou seja,
oferecem uma realização adequada das operações definidas por
suas interfaces
 Sub-Etapas
Gerenciamento das Dependências entre Subsistemas
Gerenciamento das Interfaces providas pelo susbsistema
Gerenciamento do Conteúdo dos subsistemas
para cada interface, associa com as classes de design do
subsistema que provê a funcionalidade
Implementação
 Implementação
utiliza-se os artefatos desenvolvidos no design para implementar
o sistema em termos de seus componentes, ou seja, código
fonte, scripts, binários, executáveis, etc ...
 Objetivos
planejar a integração do sistema necessária na iteração corrente
distribuir o sistema entre componentes executáveis localizados
nos nós do modelo de distribuição
implementação das classes de design e dos subsistemas
especificados no design (geração de código)
teste individual dos componentes e posterior integração em
módulos executáveis
Implementação
 Componentes
possuem diversos estereótipos
«executable», «file», «library», «table», «document»
possuem relacionamentos do tipo «trace» com os elementos do
modelo que implementam
podem implementar individualmente diversos modelos
diferentes
Implementação
Implementação
 Subsistemas de Implementação
package em Java
project em VisualBasic
diretório de arquivos em um projeto C++
subsistema em IDEs tais como o Rational Apex
component view package, em ferramentas de modelagem visual
tais como o Rational Rose
Implementação
Implementação Arquitetural
Implementação Arquitetural
 Objetivo
criar um outline do modelo de implementação
identificação de componentes arquiteturalmente significativos, tais
como componentes executáveis
mapeamento desses componentes em nós da configuração de rede
 Identificação de Componentes arquiteturalmente
significativos
diagrama de componentes
 Identificação dos Componentes Executáveis e seu
Mapeamento nos Nós
diagrama de distribuição, mostrando onde se localizam
componentes
objetos ativos (aqueles com Thread de controle individual)
Integração do Sistema
Integração do Sistema
 Objetivos
criação da um plano de construção integrado, descrevendo as
construções necessárias na iteração corrente e quais os
requisitos que essa construção implementa
definição efetiva de quais componentes serão integrados e
criação de scripts de compilação e linkagem
 Planejamento da Construção
verificação de implementações de iterações anteriores e
eventual reuso de partes já consolidadas
adição de funcionalidades para a construção corrente, por meio
da adição de novos casos de uso
 Integrando a Construção
criação de scripts de compilação e linkagem das versões
corretas dos diferentes componentes sendo integrados
Implementação de Subsistemas
Implementação de Subsistemas
 Objetivos
garantir que a implementação de um subsistema cumpra seu
papel, a cada construção, como estipulado pelo plano de
construção integrada
garantir que os casos de uso e cenários estejam corretos e que as
interfaces estejam corretas
 Gerenciamento do Conteúdo de Subsistemas
mesmo que o conteúdo de um subsistema já esteja
determinado pelo arquiteto, ele pode requerer pequenos
refinamentos implementados pelo engenheiro de componentes,
a medida que a implementação se desenvolve
à medida que subsistemas contenham outros subsistemas
recursivamente, a metodologia de mapeamento entre
componentes e classes de design é análoga em cada nível
Implementando Classes
Implementando Classes
 Objetivos
implementação de classes de design na forma de componentes
distribuição do código fonte em um ou diversos arquivos
• componentes do tipo «file»
geração do código fonte a partir das classes de design e dos
relacionamentos em que participa
• esqueletos de código podem ser gerados automaticamente
implementação das operações das classes de design em termos de
métodos
• alguns tipos de operações podem também ser geradas
automaticamente, sendo complementadas com edição posterior
verificação de que o componente provê a mesma interface que a
classe de design que implementa
eventualmente, conserto de defeitos, quando a classe já havia sido
implementada em outras iterações
Teste de Unidade
Teste de Unidade
 Objetivos
realização de um teste individual do componente implementado,
sem considerar sua posterior integração
 Tipos de Testes
Teste de Especificação
verifica o comportamento observável externo da unidade, sem
entrar no mérito de como esse comportamento é implementado
focaliza nas entradas e saídas da unidade
Teste Estrutural
verifica a implementação interna da unidade, fazendo com que
cada trecho do código seja executado
Outros Testes
testes de desempenho, uso de memória, escalabilidade e
capacidade
Testes
 Fase de Testes
verificação dos resultados da implementação por meio do teste
de cada módulo do sistema e sua integração
 Objetivos
planejamento dos testes a serem executados em cada iteração
design e implementação dos testes por meio de casos de teste
que especificam o que testar e quais os procedimentos a serem
utilizados para os testes
criação de componentes de teste executáveis para a automação
de testes, quando possível
avaliar sistematicamente os resultados de cada teste e
encaminhar os módulos defectivos para que estes possam ser
retrabalhados
Testes
 Modelos de Teste
descreve como componentes executáveis do modelo de
implementação são testados por meio de testes de integração e
testes de sistema
descreve os aspectos específicos do sistema que serão testados
coleção de casos de teste, procedimentos de teste e
componentes de teste
 Caso de Teste
corresponde a um caso de uso, só que com finalidades de teste
especifica um cenário de teste, incluindo o que testar, com que
entradas e com quais resultados esperados
caso de teste pode estar associado a um caso de uso ou à
realização do caso de uso no design
Testes
 Procedimentos de Teste
especifica como realizar
um ou mais casos de
teste
 Componente de Teste
automatizam um ou mais
procedimentos de teste
linguagens de script ou
linguagens de
programação
Testes
 Tipos de Teste
Testes de Instalação
verificam que o sistema pode ser instalado na plataforma do cliente
e que o sistema opera corretamente após instalado
Testes de Configuração
verificam que o sistema opera corretamente sob diferentes
configurações
Testes Negativos
tentam ocasionar falhas no sistema para revelar suas fraquezas
tenta-se utilizar o sistema de maneiras para as quais ele não foi
projetado, e.g. testando-se configurações de rede defeituosas,
hardware insuficiente ou demanda de uso (carga) intensiva
Testes de Stress
tentam verificar como o sistema se comporta quando os recursos
disponíveis são insuficientes ou estão indisponíveis
Testes
Planejamento de Testes
Planejamento de Testes
 Objetivos
planejar os esforços de teste dentro de uma iteração
descrevendo uma estratégia de testes
estimando os requisitos para o esforço de teste, tais como recursos
humanos e do sistema
criando uma escala de testes a ser executada
 Plano de Testes
são construídos com base nos diversos modelos utilizados nas
fases de especificação, análise, design e implementação
 Estratégia Geral de Testes
que tipos de testes serão executados, como executá-los, quando
executá-los e como avaliar os resultados dos testes
testes custam recursos e tempo, portanto deve-se efetuar uma
solução de testes que tenha uma boa relação custo/benefício
Projeto de Testes
Projeto de Testes
 Objetivos
identificar e descrever casos de teste para cada módulo
identificar e estruturar procedimentos de teste especificando
como realizar os casos de teste
 Sub-Etapas
Projetando casos de teste de integração
Projetando casos de teste de sistema
Projetando casos de teste regressivos
aproveitam casos de teste de iterações anteriores
Identificando e Estruturando Procedimentos de Teste
 Regra Geral
deve-se utilizar um conjunto de testes que requeiram um
mínimo esforço, dado um plano de testes
mínimo “overlap” entre casos de teste
Implementação de Testes
Implementação de Testes
 Objetivos
automatizar procedimentos de teste por meio da criação de
componentes de teste, se possível (nem todos os procedimentos
de teste podem ser automatizados)
 Componentes de Teste
criados utilizando os procedimentos de teste como entrada
quando se utiliza uma ferramenta de automação, um conjunto
de ações são previamente criadas para que o módulo em
questão seja testado. A própria ferramenta se encarrega de
criar os componentes de teste
quando programando os componentes de teste explicitamente,
utiliza-se os procedimentos de teste como uma forma de
especificação para que os componentes de teste sejam
desenvolvidos
Teste de Integração
Teste de Integração
 Objetivos
realizar os testes de integração especificados para cada módulo
do sistema
 Sequência de Testes de Integração
realizar os testes de integração relevantes por meio da execução
manual dos procedimentos de teste para cada caso de teste ou
por meio de algum componente de teste disponível para o
procedimento de teste em questão
comparação dos resultados com os resultados esperados e a
discriminação dos casos que apresentaram resultados
inesperados
relatar os defeitos encontrados ao engenheiro de componentes,
para que estes possam corrigir os componentes defeituosos
relatar os defeitos ao engenheiro de testes, para que este possa
estimar os resultados finais da sequência de testes
Teste de Sistema
Teste de Sistema
 Objetivos
realizar os testes de sistema especificados a cada iteração,
capturando os resultados do teste
 Teste de Sistema
se inicia quando os testes de integração indicam que o sistema
atende as metas de qualidade quanto a integração de seus
componentes para a iteração corrente (e.g. 95 % dos testes de
integração executam com resultado esperado)
são realizados de maneira análoga aos testes de integração (i.e.
seguindo uma sequência de testes análoga ao dos testes de
integração
avaliam o comportamento do funcionamento do sistema como
um todo, e não somente com relação à integração individual
entre alguns de seus componentes
Avaliação de Testes
Avaliação de Testes
 Objetivo
avaliação dos esforços de teste para a iteração corrente
comparação dos resultados com as metas especificadas no
planejamento de testes
criação de métricas que determinem o nível de qualidade do
software, especificando maiores testes que necessitem ser
realizados
 Exemplos de Métricas
Métricas de Completude
derivadas da cobertura dos casos de teste e dos componentes de
teste. Indicam qual a porcentagem de casos de teste que foram
executados e qual a porcentagem de código que foi testada
Métricas de Confiabilidade
baseadas na análise dos defeitos descobertos com relação aos
casos que tiveram um resultado como esperado
Referências Complementares
 The Unified Software Development Process
Ivar Jacobson, Grady Booch, James Rumbaugh
Addison-Wesley, 1999 - ISBN 0-201-57169-2
 UML Distilled, Second Edition: A Brief Guide to the
Standard Object Modeling Language
Martin Fowler, Kendall Scott, Grady Booch
2nd edition, Addison-Wesley, 1999 - ISBN 0-201-65783-X
 Applying UML and Patterns
Craig Larman
Prentice Hall, 1998 - ISBN 0-137-48880-7
 Unified Modeling Language (UML), version 1.5
Norma Técnica da OMG
ftp://ftp.omg.org/pub/docs/formal/03-03-01.pdf
Download

O Processo "Unified"