Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Rafael Targino rtargino@unicarioca.edu.br @rafatargino QUALIDADE DE SOFTWARE Unidade III - Testes Unitários e de Integração 2 Fases do Teste • Teste de Unidade • Teste de Integração • Teste de Sistema • Teste de Aceitação Fases do Teste • Inicialmente, os testes focalizam cada componente do produto individualmente, garantindo que ele funciona como unidade. Testes de Unidade 3 Fases do Teste • Em seguida, componentes são montados ou integrados para formar o pacote de software completo. Testes de Integração Fases do Teste • O Software, uma vez integrado, deve ser combinado com outros elementos do sistema (Hardware, BD, Equipe, etc.), ou seja, o sistema. Testes de Sistema 4 Fases do Teste • Depois dos testes de sistema, testes de alto nível. • Critérios de validação devem ser avaliados. • Estes testes garantem que o produto satisfaz os requisitos estabelecidos. Testes de Validação Princípios dos testes • Evite testar seus próprios programas, a menos que seja com auxílio de uma ferramenta • Determine se o SW faz o que é esperado, mas também se não faz algo indesejável • Nunca planeje testes assumindo que falhas não serão encontradas • A probabilidade de detectar falhas em uma parte do SW é proporcional ao nº de falhas já detectadas. • Um teste bem sucedido é aquele que revela um erro ainda não descoberto • A atividade de testes não pode mostrar a ausência de bugs. Ela só pode mostrar se defeitos de software estão presentes 5 Fases do Teste • Teste de Unidade • Teste de Integração • Teste de Sistema • Teste de Aceitação Quando começam os testes? • As atividades de testes devem ser integradas às atividades de desenvolvimento. • As atividades de teste devem ser iniciadas cedo. • Procedimentos de teste podem ser descritos desde a fase de especificação. 6 Quando começam os testes? • Conduzir revisões técnicas formais antes da realização de testes de software • “Não se pode testar a qualidade de um software se ela não estiver lá antes de começar os testes” (Pressman) • Testes começam ao nível do componente e prosseguem “para fora”, em direção à integração do todo o sistema. Modelo em V 7 Métodos Ágeis: TDD • Test Driven Development – Modelo de Desenvolvimento Orientado a Testes • É uma das principais técnicas associadas a métodos ágeis de desenvolvimento • A idéia é que os testes sejam desenvolvidos antes do código • O passos para usar TDD são: – Escreve um caso de teste e executa um caso de teste – Falhando, implementa o código para passar no teste – Passando, continua o desenvolvimento e escreve um novo caso de testes • TODA a fase de implementação de um método ágil pode ser feita com TDD Teste de Unidades • Visam exercitar detalhadamente uma unidade do sistema: – módulo ou função; classe ou pequenos “clusters” • Principais aspectos a serem considerados : – Estruturas de dados: verificar integridade dos dados armazenados. – Condições de limite: verificar se a unidade opera adequadamente nos limites estabelecidos (ex: enésima posição de um vetor, etc.). – Tratamento de erros: todos os caminhos de manipulação de erros são testados. 8 Organização das Classes de Testes Unitários Dinâmica de Como Fazer o Teste Unitário • Durante o Desenvolvimento – Primeiro projetar e escrever as classes de testes – Depois, desenvolver as classes com regra de negócios – A principal regra para saber o que testar é: “Tenha criatividade para imaginar as possibilidades de testes”. – Comece pelas mais simples e deixe os testes “complexos“ para o final. – Use apenas dados suficientes (não teste 10 condições se três forem suficientes) • Diariamente – É SUGERIDO que seja rodado os testes várias vezes ao dia (é fácil corrigir pequenos problemas do que corrigir um “problemão” somente no final do projeto). – Achou um bug? Não conserte sem antes escrever um teste que o pegue. Se você não o fizer, ele volta! 9 Ache as Possibilidades de Teste nesta Classe Drivers e Stubs • Necessários quando se testam unidades isoladamente. Podem ser: – Driver (pseudo controlador): chama a unidade em teste – Stub (pseudo controlado): substitui uma unidade que é chamada pelo unidade em teste. 10 Drivers e Stubs • Devem ser mais simples e mais rápidos de desenvolver do que as unidades substituídas – Custam recursos do projeto ($$$) • Grau de facilidade ou dificuldade de construí-los depende da qualidade do projeto: – Acoplamento – Coesão Exemplo de Stub 11 Exemplo de Driver JUnit – O que é? • Um framework que facilita o desenvolvimento e execução de testes de unidade em código Java • Fornece Uma API para construir os testes e Aplicações para executar testes 1. Defina uma lista de tarefas a implementar( o que testar) 2. Escreva uma classe (test case) e implemente um método de teste para uma tarefa da lista. 3. Rode o JUnit e certifique-se que o teste falha 4. Implemente o código mais simples que rode o teste 5. Refatore o código para remover a duplicação de dados 6. Caso necessário, escreva mais um teste ou refine o existente 7. Faça esses passos para toda a lista de tarefas. 12 Ferramentas de Testes • Automatização de Testes Unitários - JUnit JUnit – Como implementar 1. Crie uma classe que estenda junit.framework.TestCase para cada classe a ser testada import junit.framework.*; class SuaClasseTest extends TestCase {... } 2. Para cada método a ser testado defina um método public void test???() no test case SuaClasse: public int Soma(Object o ...) { ... } SuaClasseTest: public void testSoma() 13 1. Criando a Classe de Teste 2. Criando a Classe (de Negócio) que será Testada 14 Rodando o Teste no Modo Gráfico Resultado de Sucesso 15 Resultado de Falha Outros Exemplos de Testes Métodos NomeValido e MultiplicaValores 16 Outros Exemplos de Testes Métodos NomeValido e MultiplicaValores JUnit - Outros Métodos de Testes • assertEquals( ) – Testa igualdade entre dois objetos(esperado x retornado) • assertFalse( ) – Testa Retorno booleano FALSO • assertTrue( ) – Testa Retorno booleano VERDADEIRO • assertNotNull( ) – Testa se um valor de um objeto NÃO está NULO • assertNull( ) – Testa se um valor de um objeto está NULO 17 Fases do Teste • Teste de Unidade • Teste de Integração • Teste de Sistema • Teste de Aceitação Teste de Integração • O objetivo é encontrar falhas quando pedaços de código são integrados – Falhas de interface • Podem ser aplicados de acordo com quatro estratégias: – Bottom-Up – Top-Down – Mista – Colaborações • Estratégias diferentes são necessárias para que os testes possam ocorrer sem a necessidade de TODOS os módulos finalizados. 18 Falhas na Integração • Porque ocorrem falhas de integração? – Interfaces incorretas – Falta, sobreposição ou conflito de funcionalidades – Violação da integridade de arquivos e estruturas de dados globais – Sequencia incorreta de unidades integradas – Tratamento de erros (exceções) incorreto – Problema de configuração / versões – Falta de recursos para atender a demanda das unidades (stubs e drivers) – Objeto incorreto é associado a mensagem (polimorfismo) Abordagens para Integração • Não incremental (“big-bang”): – Todas as unidades são integradas de uma só vez – Esforço de preparação menor – Esforço para diagnóstico e correção de falhas é maior • Incremental – As unidades são integradas gradualmente • Descendente (“top-down”) • Ascendente (“bottom-up”) • Mista • Colaborações 19 Integração Top-down • Começa com a unidade principale vai aos poucos integrando as unidades subordinadas • Em OO: classes de controle primeiro • Utiliza stubs em lugar das unidades subordinadas Integração Bottom-up • Começa a integração pelas unidades subordinadas • Em OO: começar pelas classes independentes ou que usam poucas servidoras • Utiliza drivers em lugar das unidades de controle • Algoritmos de mais baixo nível são testados antes de serem integrados ao resto do sistema 20 Integração por Colaborações • Identifica colaborações: grupos de unidades que interagem para realizar uma ação do sistema. • Escolhe uma colaboração integrando as unidades que a compõem. • Critério: integrar todas as colaborações identificadas. • Testes enfocam funcionalidades e podem ser reutilizados nos testes de sistema. Integração por Colaborações 21 Ferramentas de Testes • Integração Contínua - Jenkis Criando Test Suite para rodar Vários Test Cases 22 Criando Test Suite para rodar Vários Test Cases Criando Test Suite para rodar Vários Test Cases 23 Criando Test Suite para rodar Vários Test Cases https://www.youtube.com/watch?v=BFfxcOHnowQ 16:40 até 29:29 Referências Bibliográficas • KOSCIANSKI, A. e SOARES, M. S. Qualidade de Software. NOVATEC. • PRESSMAN, R. S. Engenharia de Software. McGraw Hill, • Notas de Aula do Prof. David Zanetti, Qualidade de Software - Unicarioca
Compartilhar