ENGENHARIA DO SOFTWARE I
Manuel Menezes de Sequeira
DCTI, ISCTE-IUL
[email protected], D6.02
As apresentações desta série baseiam-se nas apresentações disponibilizadas por Ian Sommerville, tendo sido alteradas e adaptadas primeiro por Anders Lyhne Christensen e finalmente por Manuel
Menezes de Sequeira.
Engenharia do Software I 2
Na aula anterior
Verificação e validaçãoPlaneamento da verificação e validaçãoInspecções de softwareAnálise estática automáticaDesenvolvimento de software em sala limpa
2009/2010
Engenharia do Software I 3
Testes de software
2009/2010
Engenharia do Software I 4
Sumário
Testes de softwareTeste de sistemasTeste de componentesDesenho de casos de testeAutomatização de testes
2009/2010
Engenharia do Software I 5
Objectivos Discutir diferença entre testes de validação e de
defeitos
Descrever princípios de testes de sistema e de componentes
Descrever estratégias para gerar casos de teste para sistemas
Compreender características essenciais das ferramentas de automatização de testes
2009/2010
Engenharia do Software I 6
Processo de testes Testes de componentes
Teste de componentes individuais do programaUsualmente responsabilidade de desenvolvedor do
componente (excepto por vezes em sistemas críticos)
Testes derivados da experiência do desenvolvedor
Testes de sistemaTeste sistemas ou um subsistemas (compostos de
componentes)Responsabilidade de equipa de testes independenteTestes baseados em especificação do sistema
2009/2010
7Engenharia do Software I
Fases de teste
2009/2010
Testes de componentes
Testes de sistemas
Desenvolvedor do software
Equipa de testes
independente
Engenharia do Software I 8
Testes de defeitos
Objectivo é descobrir defeitos em programas
Teste com sucesso leva programa a comportamento anómalo
Mostram presença e não ausência de defeitos
2009/2010
Engenharia do Software I 9
Objectivos do processo de testes Testes de validação
Demonstra a desenvolvedor e cliente do sistema que software cumpre requisitos
Teste com sucesso mostra que sistema se comporta como pretendido
Testes de defeitosDescobre erros ou defeitos no software levando a
comportamento incorrecto ou que não corresponde à especificação
Teste com sucesso leva sistema a comportar-se incorrectamente, assim expondo um defeito no sistema
2009/2010
Um teste que não descubra erros ou defeitos é inconclusivo.
10Engenharia do Software I
Processo de testes de software
2009/2010
Casos de teste
Dados de teste
Resultados dos testes
Relatórios dos testes
Desenhar casos de
teste
Preparar dados de
teste
Executar programa com dados de teste
Comparar resultado com casos de teste
Engenharia do Software I 11
Políticas de testes Testes exaustivos podem mostrar ausência de
defeitos
Testes exaustivos geralmente impossíveis
Políticas de testes definem abordagem a usar na escolha de testes de sistemaTestar todas funcionalidades acessíveis em menusTestar combinações de funcionalidades acedidas no mesmo
menuQuando for necessário introduzir dados do utilizador, testar
todas funcionalidades com entradas correctas e incorrectas
2009/2010
Engenharia do Software I 12
Testes de sistemas
Envolvem integrar componentes de modo a formarem sistema ou subsistema
Podem envolver testar incremento a fornecer a cliente
2009/2010
Engenharia do Software I 13
Fases dos testes de sistemasTestes de integração A equipa de testes tem acesso ao código
fonte do sistema. O sistema ou subsistema é testado à medida que os componentes são integrados.
Testes de lançamento A equipa de testes testa o sistema completo a fornecer vendo-o como uma caixa preta.
2009/2010
Engenharia do Software I 14
Testes de integração
EnvolveConstruir sistema a partir de componentesIr testando para revelar problemas gerados
por interacção entre componentes
Integração deve ser incremental para simplificar localização de erros
2009/2010
Engenharia do Software I 15
Tipos de integraçãoDescendente Desenvolver esqueleto do sistema e preenchê-lo com
componentes.
Ascendente Integrar componentes infra-estruturais e adicionar componentes funcionais.
2009/2010
16Engenharia do Software I
Testes de integração incrementais
2009/2010
T1
T2
T3
T4
T5
A
B
C
D
T1
T2
T3
T4
A
B
C
T1
T2
T3
A
B
Sequência de testes
3
Sequência de testes
2
Sequência de testes
1
Engenharia do Software I 17
Abordagens aos testes
2009/2010
DescendenteFacilita validação arquitectónica, i.e.,
descoberta de erros na arquitectura do sistemaPermite demonstração limitada do sistema
mesmo em fases iniciais do desenvolvimentoObservação dos testes pode exigir código extra
AscendenteFacilita muitas vezes implementação dos testesObservação dos testes pode exigir código extra
Engenharia do Software I 18
Testes de lançamento Processo de teste do lançamento do sistema a
fornecer a clientes
Objectivo principal: aumentar confiança de fornecedor no cumprimento de requisitos
Normalmente de caixa preta ou funcionais
Baseados só na especificação do sistema
Testadores não conhecem implementação
2009/2010
19Engenharia do Software I
Testes de caixa preta
2009/2010
Dados de entrada do teste
Entradas causadoras de
anomalias
Resultados de saída do teste
Resultados reveladores de
defeitos
Sistema
Engenharia do Software I 20
Linhas de orientação para testes Escolher entradas
Gerando todas as mensagens de erroLevando a transbordamentos de memória
Repetir várias vezes mesma entrada ou sequência de entradas
Forçar geração de saídas inválidas
Forçar cálculo de valores além dos limites
2009/2010
Dicas para equipa escolher testes que revelem defeitos no sistema.
Engenharia do Software I 21
Cenário de testeNa Escócia, uma estudante está a estudar a história americana e foi convidada a escrever um artigo sobre a “mentalidade de fronteira no oeste americano de 1840 a 1880”. Para o fazer, precisa de encontrar fontes bibliográficas numa série de bibliotecas. Assim, autentica-se no sistema LIBSYS e usa o mecanismo de pesquisa para descobrir se pode aceder a documentos originais da época. Descobre fontes bibliográficas em várias bibliotecas universitárias dos EUA e descarrega cópias de algumas dessas fontes. No entanto, para um dos documentos é necessário que a sua universidade confirme que ela é realmente estudante e que a fonte será utilizada para fins não comerciais. A estudante usa o mecanismo do LIBSYS que permite solicitar essa autorização e regista o seu pedido. Se o pedido for concedido, o documento será transferido para o servidor da biblioteca e impresso. Ela receberá então uma mensagem do LIBSYS dizendo que irá receber uma mensagem de correio electrónico assim que o documento impresso estiver disponível para recolha.
2009/2010
Engenharia do Software I 22
Testes de sistema1. Testar mecanismo de autenticação usando credenciais válidas e
inválidas para verificar se utilizadores com credenciais válidas são aceites e se utilizadores com credenciais inválidas são rejeitados.
2. Testar mecanismo de pesquisa usando diferentes interrogações a diferentes fontes de informação para verificar se mecanismo de facto encontra documentos.
3. Testar mecanismo de apresentação para verificar se informação é apresentada correctamente.
4. Testar mecanismo de pedido de autorização para descarregamento.
5. Testar resposta via correio electrónico que indica que documento descarregado está disponível.
2009/2010
Engenharia do Software I 23
Casos de uso Podem ser base para obtenção de testes
de sistema
Ajudam a identificar operações a testar e ajudam a conceber os casos de teste necessários
A partir de diagrama de sequência associado, indentificar entradas e saídas a usar nos testes
2009/2010
24Engenharia do Software I
Diagrama de sequência da recolha de dados meteorológicos
2009/2010
: CommunicationsController
getReport()
: WeatherStation : WeatherData
sd data collection
getSummary()
getReport()
acknowledge()
acknowledge()
Engenharia do Software I 25
Testes de desempenho
Testes de lançamento podem envolver teste a propriedades emergentesTestes de desempenhoTestes de fiabilidade
Planear série de testes com carga crescente até desempenho ficar inaceitável
2009/2010
Engenharia do Software I 26
Testes de estresse Sujeitam sistema a cargas superiores a máximo
previsto tentando revelar defeitos
Aferem comportamento em caso de falhaSistema não pode falhar catastroficamenteFalhas não podem levar a perdas inaceitáveis de
serviço ou dados
Muito relevantes para sistemas distribuídos que podem sofre degradação séria perante rede sobrecarregada
2009/2010
Engenharia do Software I 27
Testes de componentes ou testes unitários Processo de testar isoladamente
componentes individuais
É processo de teste de defeitos
2009/2010
Engenharia do Software I 28
Componentes ou unidades (de modularização)
RotinasFunções e procedimentos isoladosOperações de classes e seus objectos
Classes e respectivas propriedades e operações
Componentes compósitos com interface definida para aceder à sua funcionalidade
2009/2010
Engenharia do Software I 29
Testes de classes (de objectos)
Cobertura completa de classe por testes implicaTestar todas as operaçõesAlterar e inspeccionar todas as propriedadesFazer objectos passar por todos os estados
representativosFazer objectos passar por todos os possíveis
fluxos de controlo
Herança dificulta desenho de testes para classes, pois informação está disseminada
2009/2010
30Engenharia do Software I
Interface de estação meteorológica
2009/2010
WeatherStation
+ reportWeather()+ calibrate(instruments)+ test()+ startup(instruments)+ shutdown(instruments)
Engenharia do Software I 31
Teste da estação meteorológica
Necessário definir casos de teste parareportWeather()calibrate()test()startup()shutdown()
2009/2010
Engenharia do Software I 32
Teste da estação meteorológica
Usando modelo de transição de estadosIdentificar sequências de transição a testarIdentificar sequências de eventos que as
causemExemplo
1. Esperando
2. Calibrando
3. Testando
4. Transmitindo
5. Esperando
2009/2010
Engenharia do Software I 33
Testes de interfaces
Detectar anomalias devidas aErros de interfaceSuposições inválidas acerca das interfaces
Especialmente importantes em desenvolvimento orientado para objectos (classes de objectos definidas pela interface)
2009/2010
34Engenharia do Software I
Testes de interfaces
2009/2010
C
A B
Casos de teste
Engenharia do Software I 35
Tipos de interfacesParâmetros Dados passados de um procedimento para outro.
Memória partilhada
Bloco de memória partilhado entre procedimentos ou funções.
Procedimentais Subsistema encapsula conjunto de procedimentos a invocar a partir de outros subsistemas.
Passagem de mensagens
Subsistemas solicitam serviços a outros subsistemas.
2009/2010
Engenharia do Software I 36
Erros de interfaceDe má utilização Componente invoca outro componente errando na
utilização da sua interface, e.g., passando argumentos pela ordem errada.
Equívocos Componente invocador faz suposições erradas acerca do comportamento do componente invocado.
De temporização Componentes invocador e invocado operam a diferentes velocidades e, por isso, há acessos a informação obsoleta.
2009/2010
Engenharia do Software I 37
Linhas de orientação para testes de interface Invocar rotinas com valores extremos dos argumentos
Invocar rotinas com argumentos nulos onde parâmetros forem ponteiros ou referências
Tentar fazer os componentes falhar
Fazer testes de estresse em sistemas com passagem de mensagens
Variar ordem de activação de componentes em sistemas com memória partilhada
2009/2010
Engenharia do Software I 38
Desenho de casos de teste Desenho de casos de teste (entradas e
saídas) usados para testar sistema
Objectivo: criar conjunto de testes eficazes na validação e nos testes de defeitos
AbordagensTestes baseados em requisitosTestes de partiçãoTestes estruturais
2009/2010
Engenharia do Software I 39
Testes baseados em requisitos
Requisitos têm de ser testáveis
Técnica de testes de validação
Conjunto de testes derivado para cada requisito
2009/2010
Princípio geral da engenharia de requisitos
Engenharia do Software I 40
Requisitos do LIBSYSO utilizador deverá poder pesquisar quer todos o conjunto inicial de bases de dados, quer um seu subconjunto.
O sistema disponibilizará visualizadores apropriados para o utilizador ler os documentos armazenados.
A cada pedido será atribuído um identificador único (ORDER_ID) que o utilizador poderá copias para a zona de armazenamento permanente da sua conta.
2009/2010
Engenharia do Software I 41
Testes do LIBSYSIniciar pesquisas em que o utilizador procura a) itens que se sabe existirem e b) itens que se sabe não existirem. O conjunto a pesquisar inclui uma base de dados.
Iniciar pesquisas em que o utilizador procura a) itens que se sabe existirem e b) itens que se sabe não existirem. O conjunto a pesquisar inclui duas bases de dados.
Iniciar pesquisas em que o utilizador procura a) itens que se sabe existirem e b) itens que se sabe não existirem. O conjunto a pesquisar inclui mais do que duas bases de dados.
Seleccionar uma base de dados do conjunto e iniciar pesquisas em que o utilizador procura a) itens que se sabe existirem e b) itens que se sabe não existirem.
Seleccionar mais do que uma base de dados do conjunto e iniciar pesquisas em que o utilizador procura a) itens que se sabe existirem e b) itens que se sabe não existirem.
2009/2010
Engenharia do Software I 42
Testes de partições Entradas e saídas muitas vezes em
diferentes classes cujos membros estão relacionados
Cada classe é partição ou domínio de equivalência para cujos membros comportamento do programa é equivalente
Devem escolher-se casos de teste em cada partição
2009/2010
43Engenharia do Software I
Partições de equivalência
2009/2010
Sistema
entradas válidasentradas inválidas
saídas
44Engenharia do Software I
Partições de equivalência
2009/2010
Menos de 4 Entre 4 e 10 Mais de 10Número de entradas
34 10
117
Menos de 10 000 Entre 10 000 e 99 999 Mais de 99 999Valores da entrada
9 99910 000 99 999
100 00050 000
Engenharia do Software I 45
Especificação de rotina de pesquisaprocedure Search(element : in Element_T; sequence : in array (Integer range <>) of Element_T; elementFound : in out Boolean; index : in out Integer) is
with Pre => -- the sequence has at least one element
sequence'FIRST <= sequence'LAST,
Post => -- the element is found and is referenced by index (elementFound and sequence(index) = element) or -- the element is not in the sequence
(not elementFound and not (exists i, sequence'FIRST <= i <= sequence'LAST, sequence(i) = element));
2009/2010
Artificial…
Engenharia do Software I 46
Partição das entradas
EntradasQue não cumprem a pré-condiçãoQue cumprem a pré-condição
○ Em que o elemento ocorre na sequência○ Em que o elemento não ocorre na sequência
2009/2010
Engenharia do Software I 47
Linhas de orientação para testes (sequências) Usar sequências vazias
Usar sequências com um único elemento
Usar sequências com diferentes comprimentos em diferentes testes
Forçar acesso a primeiro elemento, último elemento e elemento central
2009/2010
Engenharia do Software I 48
Partição das entradasSequência Elemento
Nenhum elemento Qualquer
Elemento único Existente
Elemento único Não existente
Mais de um valor Existente na primeira posição
Mais de um valor Existente na posição central
Mais de um valor Existente na última posição
Mais de um valor Não existente
2009/2010
Engenharia do Software I 49
Casos de testesequence element elementFound index
() - Falha!
(17) 17 Verdadeiro 1
(17) 0 Falso -
(17, 29, 21, 23) 17 Verdadeiro 1
(17, 18, 21, 23, 29, 41, 38) 23 Verdadeiro 4
(41, 18, 9, 31, 30, 16, 45) 45 Verdadeiro 7
(21, 23, 29, 33, 38) 25 Falso -
2009/2010
Engenharia do Software I 50
Testes estruturais Também conhecidos por testes de caixa branca
Derivação de casos de teste de acordo com estrutura do programa
Conhecimento do programa usado para identificar casos de teste adicionais
Objectivo é exercitar todas instruções do programa e não todos possíveis caminhos
2009/2010
51Engenharia do Software I
Testes estruturais
2009/2010
Dados de teste
Código do componente
Resultados do teste
derivartestar
52
Especificação de rotina de pesquisa bináriaprocedure SearchIncreasing(element : in Element_T; sequence : in array (Integer range <>) of Element_T; elementFound : in out Boolean; index : in out Integer) is
with Pre => -- the sequence is increasing
(forall i, sequence'FIRST <= i < sequence'LAST, sequence(i) <= sequence(i + 1)),
Post => -- the element is found and is referenced by index (elementFound and sequence(index) = element) or -- the element is not in the sequence
(not elementFound and not (exists i, sequence'FIRST <= i <= sequence'LAST, sequence(i) = element));
2009/2010 Engenharia do Software I
Engenharia do Software I 53
Partição das entradas
EntradasQue não cumprem a pré-condiçãoQue cumprem a pré-condição
○ Em que o elemento ocorre na sequência○ Em que o elemento não ocorre na sequência○ Sequência vazia○ Sequência com um único elemento○ Sequência com um número par de elementos○ Sequência com um número ímpar de
elementos
2009/2010
54Engenharia do Software I
Partições de equivalência
2009/2010
Inferiores Superiores
Primeiro ÚltimoCentro + 1
Centro
Centro - 1
Classes de equivalência
Engenharia do Software I 55
Casos de testesequence element elementFound index
(5, 3) - Falha!
() 30 Falso -
(17) 17 Verdadeiro 1
(17) 0 Falso -
(17, 21, 23, 29) 17 Verdadeiro 1
(9, 16, 18, 30, 31, 41, 45) 45 Verdadeiro 7
(17, 18, 21, 23, 29, 38, 41) 23 Verdadeiro 4
(17, 18, 21, 23, 29, 33, 38) 21 Verdadeiro 3
(12, 18, 21, 23, 32) 23 Verdadeiro 4
(21, 23, 29, 33, 38) 25 Falso -
2009/2010
Engenharia do Software I 56
Teste de caminhos Objectivo: assegurar que conjunto de casos de
teste garante que cada caminho é executado pelo menos uma vez
Começar por obter grafo de fluxo do programa mostrando nós representando decisões do programa e arcos representando o fluxo de controlo
Instruções com condições são por isso nós do grafo de fluxo de controlo
2009/2010
Engenharia do Software I 57
Implementação da pesquisa binária public <T extends Comparable<T>> void search(final T element, final List<T> sequence) { 1 indexOfFoundElement = -1; 2 found = false; 3 int left = 0; 4 int right = sequence.size() - 1; 5 while(left <= right) { 6 final int middle = (left + right) / 2; 7 int comparison = sequence.get(middle).compareTo(element); 8 if(comparison == 0) { 9 found = true;10 indexOfFoundElement = middle;11 return;12 } else if(comparison < 0)13 left = middle + 1; else14 right = middle - 1; }15 }
2009/2010
58Engenharia do Software I
Grafo de fluxo da pesquisa binária
2009/2010
1
2
3
4
5
6
7
89
10
11
12
13
14
15
left > right
left <= right
comparison == 0 comparison != 0
comparison < 0
comparison > 0
59Engenharia do Software I
Caminhos independentes
2009/2010
1
2
3
4
5
6
7
89
10
11
12
13
14
15
left > right
left <= right
comparison == 0 comparison != 0
comparison < 0
comparison > 0
1, 2, 3, 4, 5, 151, 2, 3, 4, 5, 6, 7, 8, 9, 10, 111, 2, 3, 4, 5, 6, 7, 8, 12, 13, 5, …1, 2, 3, 4, 5, 6, 7, 8, 12, 14, 5, …
1
2
3
4
5
6
7
89
10
11
12
13
14
15
Engenharia do Software I 60
Caminhos independentes Desenvolver casos de teste que levem a
execução de cada um dos caminhos
Um analisador dinâmico de programas pode ser usado para verificar que todos os caminhos foram executados
2009/2010
Engenharia do Software I 61
Automatização de testes Testar é caro
Bancadas de trabalho para testes ajudam a automatizar o processo
Bancadas de trabalho para testesFerramentas para poupar tempo e custo dos testesSistemas como JUnit suportam execução automática de
testesMaioria são sistemas abertos, assim suportando
especificidades das organizaçõesPor vezes difíceis de integrar com bancadas de trabalho
fechadas para desenho e análise
2009/2010
62Engenharia do Software I
Uma bancada de trabalho para testes
2009/2010
Gerador de dados de teste
Especificação
OráculoDados
de testeGestor
de testes
Programa em teste
Resultados dos testes
Previsões dos testes
Analisador dinâmico
Código fonte
Relatório de execução
SimuladorComparador de ficheiros
Gerador de relatórios
Relatório dos resultados dos testes
Engenharia do Software I 63
Adaptação da bancada de trabalho para testes Scripts para simuladores de interfaces
com o utilizador e padrões para geradores de dados
Preparação manual de saídas dos testes para posterior comparação
Desenvolvimento de comparadores de ficheiros especializados
2009/2010
Engenharia do Software I 64
A reter
TestesRevelam erros em sistemaNão demonstram ausência de errosDe componentes: desenvolvedoresDe sistema: outra equipaDe integração: incrementos a sistemaDe lançamento: sistema a fornecerDesenhados recorrendo a experiência e
linhas de orientação
2009/2010
Engenharia do Software I 65
A reter Testes de interface revelam defeitos em interfaces
de componentes compósitos
Partições de equivalência para descobrir casos de teste – casos em partição têm comportamento equivalente
Análise estrutural analisa programa e deriva casos de teste
Automatização de testes reduz custos através de múltiplas ferramentas software
2009/2010
Engenharia do Software I 66
A ler
Ian Sommerville, Software Engineering, 8.ª edição, Addison-Wesley, 2006
Capítulo 23
2009/2010
Top Related