engenharia de software ii revisão. estratégias e técnicas de teste de software 1. teste de...

26
Engenharia de Software II Revisão

Upload: internet

Post on 22-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Engenharia de Software II

Revisão

Page 2: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Estratégias e técnicas de teste de software

1. Teste de unidade• Focaliza cada componente individualmente, garantido que funciona.• Faz uso intensivo de técnicas que exercitam caminhos específicosna estrutura de controle.2. Teste de integração• Focaliza o pacote de software completo e trata da verificação doprograma como um todo.• Faz uso de técnicas de projeto de casos de teste que enfocam asentradas e saídas, além de exercitar caminhos específicos.3. Teste de validação• Critérios de avaliação estabelecidos durante a análise de requisitossão avaliados.4. Teste de sistema• Testa a combinação do software com outros elementos do sistema(como hardware, pessoal e bancos de dados).• Verifica se a função/desempenho global do sistema é alcançada.

Page 3: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Procedimentos deTeste de Unidade

• O projeto de teste pode ser realizado:– Antes que o código seja iniciado (abordagemágil)– Depois que o código-fonte tenha sido gerado.• Uma revisão da informação de projetofornece diretrizes para o estabelecimentode casos de teste.• Cada caso de teste deve ser acoplado aum conjunto de resultados esperados.

Page 4: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Integração

• Mesmo que todos os módulos estejamfuncionando individualmente, não se podegarantir que eles funcionarão em conjunto.– Dados podem ser perdidos na interface– Imprecisão aceitável individualmente pode seramplificada– Estruturas de dados globais podem apresentarproblemas• Teste de integração é uma técnica sistemáticapara construir a arquitetura do softwareenquanto se conduz testes para descobrir erros.

Page 5: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Integração Descendente

• Na integração descendente (top-down) osmódulos são integrados movendo-se decima para baixo na hierarquia de controle.– Começa pelo módulo de controle principal.– Os módulos subordinados são incorporados àestrutura de uma de duas maneiras:• Primeiro-em-profundidade (depth-first)• Primeiro-em-largura (breadth-first)

Page 6: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Integração Ascendente

Na integração descendente (bottom-up)os módulos são integrados movendo-sede baixo para cima na hierarquia decontrole.– Inicia a construção e teste pelos módulosatômicos.– Elimina a necessidade de pseudocontroladoscomplexos.

Page 7: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Integração Ascendente vs.Descendente

• Integração Descendente– Desvantagem: necessidade de pseudocontrolados.– Vantagem: testar logo as principais funções de controle.• Integração Ascendente– Desvantagem: o programa como um todo não é testado até ofinal.– Vantagem: ausência de pseudocontrolados e projeto de casosde teste facilitados.• A seleção de uma das abordagens depende dascaracterísticas do software e do projeto.• Uma abordagem combinada pode ser o melhorcompromisso.– Testes descendentes para níveis mais altos.– Testes ascendentes para os níveis subordinados.

Page 8: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de RegressãoToda vez que um novo módulo é adicionado como partedo teste de integração, o software se modifica.– Novos caminhos de fluxos de dados são estabelecidos.– Nova E/S pode ocorrer.– Nova lógica de controle é adicionada• Essas modificações podem ser causadas problemascom funções que previamente funcionavamcorretamente.• O teste de regressão é a re-execução de algum subconjuntode testes que já foi conduzido para garantir queas modificações não introduzam efeitos colateraisindesejáveis.

Page 9: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Regressão

Pode ser conduzido manualmente ou usandoferramentas automatizadas decaptação/reexecução.– Permitem ao engenheiro de software captar casos deteste e resultados para reexecução e comparação.• À medida que o teste de integração prossegue,o número de testes de regressão pode crescersignificativamente.– A suíte de testes de integração deve ser projetadapara incluir apenas testes que cuidam das principaisfunções do programa.

Page 10: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Módulos Críticos

• Um módulo crítico tem uma ou mais dasseguintes características:– Aborda vários requisitos do software.– Está num alto nível da estrutura de controle.– É complexo ou propenso a erro.– Tem requisitos de desempenho bem definidos.• Módulos críticos devem ser testados tão cedoquanto possível.• Testes de regressão devem ser focados nafunção de módulos críticos.

Page 11: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste Fumaça

• É uma estratégia de integração constante.• O software é reconstruído e testadodiariamente para dar aos gerentes edesenvolvedores uma avaliação realísticado progresso.

Page 12: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Validação• Começa no fim do teste de integração.– Componentes individuais já foram exercitados.– O software está completamente montado como umpacote.– Erros de interface já foram descobertos e corrigidos.• A validação é bem-sucedida quando o softwarefunciona do modo esperado pelo cliente.– As expectativas razoáveis são as definidas nodocumento de Especificação de Requisitos doSoftware.– O documento deve conter uma seção de Critérios deValidação.

Page 13: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Sistema

• O software é apenas um elemento de umsistema maior.– Outros elementos do sistema: hardware, pessoal,dados, sistema operacional.• Uma série de testes de integração e validaçãodo sistema devem ser conduzidos.• Tipos de teste de sistema:– Teste de recuperação.– Teste de segurança.– Teste de estresse.– Teste de desempenho.

Page 14: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Recuperação

• É um teste de sistema que força o software afalhar de diversos modos e verifica se arecuperação é adequadamente realizada.• Se a recuperação é automática:– A reinicialização e a recuperação dos dados sãoavaliados.• Se a recuperação requer intervenção humana:– O tempo médio para o reparo é avaliado paradeterminar se está dentro de limites aceitáveis.

Page 15: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Segurança• Verifica se os mecanismos de proteção incorporados aum sistema vão de fato protegê-lo de:– Hackers que tentam invadí-lo por esporte.– Ex-empregados que tentam invadí-lo por vingança.– Indivíduos que tentam invadí-lo em busca de ganhos pessoaisilícitos.• O testador deve desempenhar o papel do indivíduo quedeseja invadir o sistema.– Deve tentar obter senhas de funcionários externos.– Deve tentar tomar o sistema negando serviço a outros.– Deve tentar causar erros no sistema para invadí-lo durante arecuperação.• Com tempo e recursos suficientes, o bom teste desegurança vai acabar invadindo o sistema.

Page 16: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Estresse

• São projetados para submeter programas asituações anormais e verificar se eles aindafuncionam.• Executa o programa de tal forma que demanderecursos em quantidade ou freqüênciaanormais:– A velocidade de entrada de dados pode ser muitoaumentada ou diminuída.– A memória do sistema pode ser diminuída.– Casos de teste que podem causar busca excessivade dados residentes em disco são criados.

Page 17: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Desempenho

• É projetado para testar o desempenho dosoftware durante a execução, no contexto de umsistema integrado.• Requerem instrumentação de hardware esoftware.– É necessário medir de modo preciso a utilização derecursos (memória, processamento).• Importante para sistemas de tempo real eembutidos.

Page 18: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Técnicas de Teste de Software

• Fornecem diretrizes sistemáticas paraprojetar casos de testes que:– Exercitam a lógica interna e as interfaces decada componente de software.– Exercitam os domínios de entrada e saída doprograma para descobrir erros na função, nocomportamento e no desempenho doprograma.

Page 19: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Características de Testabilidade• As seguintes características levam a um software testávele devem ser levadas em conta quando ele é construído:– Operabilidade: o software deve ser projetado e implementadocom qualidade.– Observabilidade: variáveis devem ser visíveis ou consultáveisdurante a execução.– Controlabilidade: variáveis devem poder ser controladasdiretamente pelo engenheiro de teste.– Decomponibilidade: módulos independentes podem ser testadosindependentemente.– Simplicidade: o conjunto de características deve ser o mínimonecessário para atender os requisitos.– Estabilidade: o software se recupera bem de falhas.– Compreensibilidade: a documentação técnica é acessívelinstantaneamente, bem organizada, específica, detalhada eprecisa.

Page 20: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Características do Teste

• Um bom teste deve ter os seguintes atributos:1. Alta probabilidade de encontrar um erro.• O testador deve entender o software.• As diferentes classes de falha devem ser investigadas.2. Não deve ser redundante.• Tempo e recursos para testes são limitados.• Ex.: testar várias senhas inválidas diferentes é redundante.3. Não deve ser muito simples nem muito complexo.• Cada teste deve buscar encontrar um tipo de erro.

Page 21: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Testes Caixa-Preta eCaixa-Branca

• Testes Caixa-Preta– São conduzidos na interface dosoftware, sem preocupação coma estrutura lógica interna dosoftware.• Testes Caixa-Branca– São baseados em um examerigoroso do detalheprocedimental.– Caminhos lógicos ecolaborações entre componentessão testadas.

Page 22: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste Exaustivo (impraticável!)

• À primeira vista pode parecer que um testecaixa-branca bastante rigoroso levaria aprogramas 100% corretos.– “Apenas” seria necessário gerar casos de teste paraexercitar toda a lógica do programa.– Exemplo: programa de 100 linhas de código C comdois loops aninhados (de tamanho variável), comquatro if-then-else dentro do loop interno.• 1014 caminhos de execução possíveis.• 3.170 anos para testar todos os caminhos em umcomputador atual.

Page 23: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Técnicas de Teste Caixa-Branca• Usando métodos de teste caixa-branca,podemos derivar casos de teste que:1. Garantam que todos os caminhos independentes deum módulo sejam executados pelo menos uma vez.2. Exercitem todas as decisões lógicas de seu ladoverdadeiro e falso.3. Executem todos os ciclos (loops) nos seus limites edentro de seus intervalos operacionais.4. Exercitem as estruturas de dados internas.• Tipos de teste caixa-branca:– Teste de Caminho Básico– Teste de Estrutura de Controle

Page 24: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Caminho Básico

• Permite ao projetista de caso de testemedir a complexidade lógica de umprojeto procedimental.– Essa medida é usada como guia para definirum conjunto básico de caminhos deexecução.– Casos de teste derivados para exercitar oconjunto básico executam garantidamentecada comando pelo menos uma vez.

Page 25: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Estrutura de Controle

• O teste de caminho básico é simples ealtamente eficaz, mas não é suficiente porsi só.• Existem outros tipos de testes que focamnas estruturas de controle:– Teste de Condição– Teste de Fluxo de Dados– Teste de Ciclo

Page 26: Engenharia de Software II Revisão. Estratégias e técnicas de teste de software 1. Teste de unidade Focaliza cada componente individualmente, garantido

Teste de Condição

• Exercita todas as condições lógicascontidas em um módulo de programa paragarantir que elas não contém erros.– Condição simples: é uma variável booleanaou uma expressão relacional, possivelmenteprecedida por um NÃO.– Condição composta: duas ou mais condiçõessimples ligadas por um operador OU, E ouNÃO.