├── .gitignore ├── LICENSE ├── README.md ├── SOFTWARE_REQUIREMENTS.txt ├── img └── scared-bug-clipart-1.jpg ├── provas ├── 2014-1-EE.docx ├── 2014-1-final.docx ├── 2015-1-EE-testes.txt ├── 2015-1-final.txt ├── 2016-2-EE.txt ├── 2016-2-FINAL.txt ├── 2017-2-1EE.txt ├── 2017-2-FINAL.txt ├── 2018-2-EE.txt ├── 2019-2-EE.txt ├── 2019-2-FINAL.txt ├── IF1009-2018-2-FINAL.txt ├── IF1009-2018-2-GABARITO.txt └── If1009-20172-1EE.docx └── testing-minicourse.pptx /.gitignore: -------------------------------------------------------------------------------- 1 | */build 2 | build 3 | *~ 4 | .gradle 5 | .project 6 | .classpath 7 | .settings 8 | bin 9 | .vscode 10 | tutorials.txt -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2015 Marcelo d'Amorim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Teste de Software
[Centro de Informática](http://www.cin.ufpe.br), [UFPE](http://www.ufpe.br) 2 | ### Professor: [Marcelo d'Amorim](http://www.cin.ufpe.br/~damorim/) 3 |
4 | 5 | ![Odeio teste de software!](https://raw.githubusercontent.com/damorim/testing-cin/master/img/scared-bug-clipart-1.jpg) 6 | 7 | 8 | 9 | ### Horário e Local das Aulas 10 | * Terças (8-10h) e Quintas (10-12h) 11 | 12 | ### Recursos 13 | - Nosso Livro Online: [The Practical Testing Book](https://damorimrg.github.io/practical_testing_book/intro.html) 14 | - [Google Classroom](https://classroom.google.com/u/0/c/MTQ4MjEyNzA1OTY2), Código dbfyjpe 15 | - [Demos](https://github.com/damorimRG/practical_testing_book/tree/master/demos) 16 | - [Playlist Youtube](https://www.youtube.com/playlist?list=PLFBNFAddO-xtGVJjiZACr-H3dpPn8zam7) 17 | - [Slides](https://github.com/damorimRG/testing-cin/blob/master/testing-minicourse.pptx) 18 | - [Provas](https://github.com/damorimRG/testing-cin/tree/master/provas) 19 | 20 | 21 | ### Objetivos 22 | 23 | O objetivo da disciplina é apresentar conceitos básicos sobre Testes de Software. A disciplina tem um enfoque prático--o instrutor apresentará os conceitos usando ferramentas populares na indústria. 24 | 25 | 31 | 32 | ### Ementa 33 | 34 | A ementa da parte téorica inclui os seguintes tópicos: 35 | 36 | * conceitos básicos sobre teste e depuração de software 37 | * como escrever um bug report 38 | * o caso de teste 39 | * entrada, asserção, test harness (setup, teardown) 40 | * demosntração com JUnit 41 | * controle de versão e testes 42 | * demonstração git bisect 43 | * demonstração integração contínua com Travis 44 | * critérios de adequação 45 | * estrutural, lógico, baseado em fluxo de dados, e baseado em erros 46 | * teste funcional 47 | * particionamento de domínio 48 | * análise de fronteira 49 | * seleção de amostras (teste combinatorial) 50 | 51 | 52 | ### Bibliografia 53 | - [Generating Software Tests: Breaking Software for Fun and Profit](https://www.fuzzingbook.org/). Andreas Zeller, Rahul Gopinath, Marcel Böhme, Gordon Fraser, and Christian Holler (online) 54 | - Software Testing and Analysis. Mauro Pezze and Michal Young, Wiley, 2008 55 | - Why Programs Fail?. Andreas Zeller, Morgan Kaufmann 2009 (2nd edition) 56 | - Software Testing. Glenford Myers, Wiley, 2004 (2nd edition) 57 | 58 | 59 | 81 | 82 | 86 | -------------------------------------------------------------------------------- /SOFTWARE_REQUIREMENTS.txt: -------------------------------------------------------------------------------- 1 | - Java 1.8 or higher 2 | - Python 3 3 | - ruby 2.5 or higher 4 | - gcc or llvm # for fuzzing 5 | ## hard dependencies for ruby 6 | - sudo gem install bundler ## bundler 7 | - sudo apt-get install ruby-dev ## provides header file to build some gems 8 | - sudo apt-get install libxslt-dev libxml2-dev # required by nokogiri 9 | - sudo gem install nokogiri -v '1.10.7' --source 'https://rubygems.org/' 10 | -------------------------------------------------------------------------------- /img/scared-bug-clipart-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STAR-RG/testing-cin/dc0b678b842fb7c5a681081fdbeeae9acaaa0d0d/img/scared-bug-clipart-1.jpg -------------------------------------------------------------------------------- /provas/2014-1-EE.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STAR-RG/testing-cin/dc0b678b842fb7c5a681081fdbeeae9acaaa0d0d/provas/2014-1-EE.docx -------------------------------------------------------------------------------- /provas/2014-1-final.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STAR-RG/testing-cin/dc0b678b842fb7c5a681081fdbeeae9acaaa0d0d/provas/2014-1-final.docx -------------------------------------------------------------------------------- /provas/2015-1-EE-testes.txt: -------------------------------------------------------------------------------- 1 | 1EE Testes - IF1009 - 3 de Junho de 2015 2 | Prof. Marcelo d'Amorim 3 | 4 | 5 | 1. Qual a diferença entre teste e depuração? 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 2. Explique o que é teste de regressão. 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 3. Para que se faz o teste de carga? 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 4. Cite vantagens e desvantagens do teste de GUI (interface gráfica). 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 5. Cobertura de código e teste de mutação tem o mesmo propósito. Que propósito é este? Explique como estas técnicas ajudam a alcançar tal propósito. 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /provas/2015-1-final.txt: -------------------------------------------------------------------------------- 1 | Prova Final de Testes - IF1009 - 26 de Junho de 2015 2 | Prof. Marcelo d'Amorim 3 | 4 | 5 | 1. Qual o propósito do teste de mutação? Explique seu funcionamento, aspectos positivos e negativos. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 2. Qual o propósito do teste de integração contínua? Explique seu funcionamento, aspectos positivos e negativos. 28 | 29 | 30 | -------------------------------------------------------------------------------- /provas/2016-2-EE.txt: -------------------------------------------------------------------------------- 1 | Primeiro Exercício Escolar, 10 de Outubro de 2016 2 | Teste e Validação de Software - IF1009 3 | Prof. Marcelo d'Amorim 4 | 5 | 1. Cite elementos importantes a se documentar em um "bug report" e 6 | indique boas e más práticas no seu preparo. 7 | 8 | Elementos importantes a se documentar: 9 | - Ambiente (versão do software, bibliotecas, SO, etc.) 10 | - Passos para reproduzir o problema 11 | - Resultado obtido versus resultado esperado 12 | - Telas da interface gráfica ajudando a explicar o problema 13 | Adicionados por um gerente: 14 | - Prioridade 15 | - Responsável 16 | 17 | Boas práticas: 18 | - Escrever de forma breve 19 | > Focar em informações relevantes 20 | > Minimizar passos (remover passos desnecessários) 21 | - Reportar um problema por bug report 22 | - Foco no problema e não na solução 23 | 24 | 2. Na prática de desenvolvimento de sistemas, em que situações bug 25 | reports são mais usados e em que situações bug reports são menos 26 | usados. Explique. 27 | 28 | Bug reports são mais comumente usados em situações onde usuários da 29 | aplicações tem interesse em melhorar a qualidade do sistemas. Nestes 30 | casos, reportam problemas utilizando linguagem natural através de um 31 | sistema de rastreamente de bug como o "Bugzilla". 32 | 33 | Bug reports são menos usados em ambientes onde a maioria dos usuários 34 | tem um perfil técnico. Nestes casos, ao encontrar erros, o 35 | desenvolvedor criar um caso de teste e o adiciona a uma suíte de 36 | regressão que irá apontar o erro até que o mesmo seja corrigido. 37 | 38 | 3. Para que serve o teste de integração contínua *e* como funciona? 39 | 40 | O teste de integração contínua serve para otimizar o teste de 41 | regressão, que serve para detectar a presença de regressões. Uma 42 | regressão é uma situação onde uma determinada "feature" do sistemas 43 | deixou de funcionar. Durante o desenvolvimento erros de integração só 44 | são percebido após commit+push de atualizações. O teste de integração 45 | serve para acelerar a detecção destas falhas de integração na medida 46 | que os teste são reexecutadas continuamente diante de cada atualização 47 | de um repositório de código compartilhado. 48 | 49 | Um servidor de integração contínua "escuta" um servidor git. No 50 | momento de um push, o servidor avisa ao servidor de integração sobre a 51 | atualização. Neste instante, o servidor de integração dá um pull no 52 | servidor git, como se fosse um usuário comum. 53 | 54 | 4. Explique a utilidade de ambientes virtuais de operação para apoiar 55 | o teste de software. Considere o que foi visto na aula passada, na 56 | demonstração da ferramenta Vagrant. 57 | 58 | A principal utilidade está no apoio a reprodução de problemas. Por 59 | exemplo, um usuário que observa o problema poderia construir uma 60 | máquina virtual que ilustra o problema e um segundo usuário poderia 61 | instalar a máquina virtual em seu ambiente para reproduzir o problema. 62 | 63 | 5. Um desenvolvedor precisa testar uma aplicação que depende dos 64 | seguintes parâmetros de configuração: 65 | 66 | Sistema Operacional: Linux, Windows, MacOs 67 | Browser: Chrome, Firefox, Opera 68 | Lingua: Inglês, Português 69 | 70 | Um exemplo de configuração para testar o sistema seria "Linux, 71 | Firefox, Português". Existe um total de 18 (= 3*3*2) configurações a 72 | serem testadas neste caso. Infelizmente, tal teste exaustivo é 73 | custoso. Mostre um conjunto de configurações que satisfaz o critério 74 | de adequação "todos os pares", também conhecido como "pairwise" ou 75 | "t-wise" com t=2. 76 | 77 | S={L,W,M} 78 | B={C,F,O} 79 | L={I,P} 80 | 81 | f(S s, B b, L l) { .... } 82 | 83 | S B L - Pares cobertos - Pares novos 84 | 1. L C I - (L,C) (L,I) (C,I) - 3 85 | 2. L F P - (L,F) (L,P) (F,P) - 3 86 | 3. W C P - (W,C) (W,P) (C,P) - 3 87 | 4. M O P - (M,O) (M,P) (O,P) - 3 88 | 5. W F I - (W,F) (W,I) (F,I) - 3 89 | 6. L O I - (L,O) (L,I) (O,I) - 2 90 | 7. W O I - (W,O) (W,I) (O,I) - 1 91 | 8. M C I - (M,C) (M,I) (C,I) - 2 92 | 9. M F I - (M,F) (M,I) (F,I) - 1 93 | -------------------------------------------------------------------------------- /provas/2016-2-FINAL.txt: -------------------------------------------------------------------------------- 1 | IF1009 - Teste e Validação de Software (PROVA FINAL) 2 | Sistemas de Informação 3 | Universidade Federal de Pernambuco, Julho de 2014 4 | Prof. Marcelo d'Amorim 5 | 6 | 1. Qual a diferença entre teste e depuração? 7 | 8 | 9 | 10 | 2. Explique a importância da simplificação do teste no processo de 11 | depuração. 12 | 13 | 14 | 15 | 3. O que é o teste de integração contínua e qual sua relação com teste 16 | de regressão? 17 | 18 | 19 | 20 | 4. Explique como o uso das tecnologias de virtualização (como Vagrant e 21 | Docker) podem ajudar no teste de software. 22 | 23 | 24 | 25 | 5. O que é MC/DC? 26 | -------------------------------------------------------------------------------- /provas/2017-2-1EE.txt: -------------------------------------------------------------------------------- 1 | IF1009 1EE, 20 de Setembro de 2017 2 | Prof. Marcelo d'Amorim 3 | [[ Cada questão vale 2,5 pontos ]] 4 | 5 | 1. Considerando o teste de mutação, explique o que é um mutante e como 6 | matá-lo. 7 | 8 | Mutante é um variação do programa que se quer testar. A variação está 9 | associada a um defeito, introduzido intencionalmente de maneira a se 10 | avaliar se a suíte de teste será capaz de detectá-lo. 11 | 12 | No teste de mutação, dizemos que um mutante é "morto" quando a 13 | execução da suíte de teste detecta sua presença. Isto ocorre quando 14 | algum teste da suíte falha quando executado na versão mutante do 15 | código. 16 | 17 | 2. O se chefe lhe deu a atividade de testar um equipamento eletrônico 18 | que é crítico para construção de um sistema. Explique como vc. faria 19 | para testar este equipamento. 20 | 21 | Eu, primeiramente, iria analisar o documento de especificação do 22 | equipamento para identificar seus requisitos funcionais. Isto é, 23 | relação entre entrada e saída do equipamento. A partir disto, usaria 24 | alguma técnica de teste funcional, como particionamento de domínio e 25 | teste de fronteira para checar se o equipamente satisfaz os 26 | requisitos. Testes não funcionais poderiam ser testados também. 27 | 28 | 3. Escreva uma suíte de testes adequada a MCDC considerando o 29 | fragmento de código abaixo. 30 | 31 | if (a && (b || c)) { ... } 32 | 33 | a b c R 34 | --------- 35 | 0 1 0 0 36 | 1 1 0 1 37 | --------- duas linhas acima, a variavel "a" eh pivo 38 | 1 0 0 0 39 | 1 1 0 1 40 | --------- duas linhas acima, a variavel "b" eh pivo 41 | 1 0 0 0 42 | 1 0 1 1 43 | --------- duas linhas acima, a variavel "c" eh pivo 44 | 45 | 4. Considere que uma função possui dois parâmetros do mesmo tipo que 46 | admitem valores LO, MED, e HI, e possui um parâmetro de um tipo que 47 | admite valores T e F. Monte uma suíte de testes para tal função 48 | adequada ao critério "Todos os Pares", também conhecida como Pairwise. 49 | 50 | X Y Z pares cobertos 51 | L_ L T L_L, L_T, LT 52 | L_ M F L_M, L_F, MF 53 | L_ H T L_H, HT 54 | M_ L F M_L, M_F, LF 55 | M_ M T M_M, M_T, MT 56 | M_ H F M_H, HF 57 | H_ L T H_L, H_T 58 | H_ M F H_M, H_F 59 | H_ H T H_H 60 | 61 | 21 pares = 3 * 3 + 3 * 2 + 3 * 2 62 | -------------------------------------------------------------------------------- /provas/2017-2-FINAL.txt: -------------------------------------------------------------------------------- 1 | IF1009 - Teste e Validação de Software (PROVA FINAL) 2 | Sistemas de Informação 3 | Universidade Federal de Pernambuco, Dezembro de 2017. 4 | Prof. Marcelo d'Amorim 5 | 6 | 1 [2 pontos]. O que é teste de regressão. 7 | 8 | 9 | 2 [2 pontos]. Qual a relação entre o teste de regressão e o teste de 10 | integração contínua? 11 | 12 | 13 | 3 [2 pontos]. Explique o teste de mutação. 14 | 15 | 16 | 4 [2 pontos]. Construa uma suíte de teste que satisfaça o critério de 17 | cobertura "Todos os Pares" para a função abaixo. 18 | 19 | 20 | void foo(boolean b1, int i1, bool b2); 21 | 22 | Considere que o parâmetro inteiro admite apenas 3 possíveis valores: 23 | A, B, e C. 24 | 25 | 5 [2 pontos]. O número total de pares (isto é, requisitos de teste) no 26 | exemplo acima é 16. Explique este número e explique como 27 | vc. calcularia o número de pares caso um novo parâmetro, admitindo 3 28 | valores, fosse adicionado a função. 29 | 30 | -------------------------------------------------------------------------------- /provas/2018-2-EE.txt: -------------------------------------------------------------------------------- 1 | IF1009 - Teste e Validação de Software 2 | Sistemas de Informação, Universidade Federal de Pernambuco 3 | Prof. Marcelo d'Amorim 4 | 5 | 1 [1 pontos]. Qual a vantagem e desvantagem de se usar teste 6 | caixa-preta versus teste caixa-branca? 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 2 [1 pontos]. Para que serve o teste de integração contínua? 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 3 [1 pontos]. Explique o teste de mutação. 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 4 [2 pontos]. Construa uma suíte de teste adequada a MCDC considerand 31 | o trecho de código abaixo. 32 | 33 | if (a && (b || c) && d) ... 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 5 [3 pontos]. Construa uma suíte de teste adequada a "Pairwise" 45 | ("2-wise") para a função abaixo, considerando os seguintes domínios 46 | A={1_A, 2_A}, B={1_B, 2_B, 3_B}, e C={1_C, 2C}. 47 | 48 | bar(A a, B b, C c) 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 6 [2 pontos]. Como contratos (p. ex., especificações JML) podem ajudar 60 | a detectar bugs prematuramente no processo de desenvolvimento? 61 | 62 | -------------------------------------------------------------------------------- /provas/2019-2-EE.txt: -------------------------------------------------------------------------------- 1 | Prova Final de Testes IF1009 2 | Recife, 11 de Novembro de 2019 3 | 4 | 1. [6 pontos] Defina brevemente: 5 | 6 | - Cobertura de código 7 | - Teste de caixa preta 8 | - Teste de caixa branca 9 | - Teste de mutação 10 | - Teste de regressão 11 | - Teste de integração contínua 12 | - Teste de fronteira 13 | - Teste de carga 14 | - Teste de aceitação 15 | - "Test-Driven Development" (TDD) 16 | 17 | 2. [4 pontos] Explique >através de um exemplo< 18 | 19 | - Teste de "Pairwise" 20 | - MCDC 21 | -------------------------------------------------------------------------------- /provas/2019-2-FINAL.txt: -------------------------------------------------------------------------------- 1 | Prova Final de Testes IF1009 2 | Prof. Marcelo d'Amorim 3 | Recife, 9 de Dezembro de 2019 4 | 5 | 1. [2 pontos] Qual a diferença entre: 6 | 7 | - Teste e depuração? 8 | - BDD e TDD 9 | 10 | 11 | 2. [2 pontos] Explique como funciona teste de integração contínua. 12 | 13 | 14 | 3. [2 pontos] Em que situação vc. poderia aplicar pairwise testing? 15 | Explique como funciona. 16 | 17 | 18 | 4. [2 pontos] Vc. trabalha em uma empresa que está desenvolvendo 19 | software para suportar um volume de acesso de 5 mil usuários 20 | simultâneos. O que vc. usaria para simular acesso de usuários, dentro 21 | do ambiente de desenvolvimento e antes de colocar o sistema em 22 | produção? 23 | 24 | 25 | 5. [2 pontos] Vc. trabalha em uma empresa de desenvolvimento de 26 | software que está recebendo reclamações dos clientes que observaram 27 | que certa funcionalidade do sistema está executando de forma muito 28 | lenta. 29 | 30 | 5.1 O que vc. deve fazer para tentar descobrir a causa do problema? 31 | 32 | 5.2 Como este tipo de problema poderia ter sido evitado durante o 33 | desenvolvimento? 34 | -------------------------------------------------------------------------------- /provas/IF1009-2018-2-FINAL.txt: -------------------------------------------------------------------------------- 1 | Prova Final de Testes IF1009 2 | Prof. Marcelo d'Amorim 3 | Recife, 10 de Dezembro de 2019 4 | 5 | 1. [2 pontos] Qual a diferença entre 6 | 7 | - Falta e falha? 8 | - Teste e depuração? 9 | 10 | 11 | 2. [2.5 pontos] O que é teste de mutação? Demonstre através de exemplo. 12 | 13 | 14 | 15 | 3. [2.5 pontos] Explique pairwise testing. 16 | 17 | 18 | 19 | 4. [3 pontos] Explique o que é JML e como pode ser usado para encontrar bugs. 20 | -------------------------------------------------------------------------------- /provas/IF1009-2018-2-GABARITO.txt: -------------------------------------------------------------------------------- 1 | Prova Final de Testes IF1009 2 | Prof. Marcelo d'Amorim 3 | Recife, 10 de Dezembro de 2019 4 | 5 | 1. [2 pontos] Qual a diferença entre 6 | 7 | - Falta e falha? 8 | 9 | A falta é a manifestação de um bug, que está presente no código, no 10 | estado de um programa em execução. A execução do program exercitou um 11 | comando defeituoso e construiu este estado incorreto. Importante é 12 | compreender que a execução do programa não é necessariamente 13 | interrompida por conta de uma falta. 14 | 15 | A falha é a observação de um estado defeituoso. Por exemplo, a 16 | observação de um exceção, que interrompe a execução normal de um 17 | teste. 18 | 19 | - Teste e depuração? 20 | 21 | Teste é a atividade que identica a presença de bugs em código. Mais 22 | precisamente, a atividade de Teste tem como resposabilidade construir 23 | cenários de execução que revelam falhas, que denunciam a presença de 24 | bugs no código. Teste não diz onde os bugs estão. 25 | 26 | Depuração é a atividade de descobrir, a partir de uma execução que 27 | falha, as possíveis causas da falha no código. 28 | 29 | 2. [2.5 pontos] O que é teste de mutação? Demonstre através de exemplo. 30 | 31 | ** objetivo ** 32 | Teste de mutação é uma técnica que tem como objetivo avaliar a 33 | qualidade de uma suíte de testes. A técnica vai dar uma nota---o score 34 | de mutação---dando um valor estimado para a qualidade de uma 35 | determinada suíte de teste. Assume-se que uma suíte de teste com uma 36 | nota alta é uma suíte mais capacitada para detectar erros reais, que 37 | seriam introduzidos durante o desenvolvimento. 38 | 39 | ** funcionamento ** 40 | O teste de mutação introduz erros artificialmente no código e avalia 41 | se a suíte é capaz de capturar aqueles erros. Ou seja, se a suíte vai 42 | sinalizar a presença ou não daqueles problemas. Estes erros são 43 | caracterizados a partir de pequenas mudanças no código, chamadas de 44 | mutantes. 45 | 46 | Exemplo de funcionamento: 47 | 48 | int foo(int i, int j) 49 | if (i > j) 50 | return i + j 51 | else 52 | return i 53 | 54 | @Test 55 | void testUm() 56 | assertEquals(10, foo(10,10)) 57 | 58 | Mutante 1: Troca > por >= 59 | Mutante 2: Troca + por - 60 | 61 | Neste cenário, há apenas um caso de teste na suíte. Os testes 62 | conseguem matar o mutante 1, mas não conseguem matar o mutante 63 | 2. Ciente que a suíte de testes está deficiente, o desenvolvedor 64 | constrói mais o teste abaixo para matar o mutante 2. 65 | 66 | @Test 67 | void testDois() 68 | assertEquals(30, foo(20,10)) 69 | 70 | 71 | 3. [2.5 pontos] Explique pairwise testing. 72 | 73 | É uma técnica de teste combinatorial (teste funcional) que tem como 74 | objetivo evitar explosão combinatorial ao se considerar todas as 75 | combinações de todos os parâmetros de uma função. Uma suíte de testes 76 | adequada a critério de cobertura pairwise deve cobrir todas as 77 | combinações entre pares de parâmetros. 78 | 79 | Exemplo: 80 | 81 | Parametros da Função a ser testada: 82 | Firefox(URL url, LIN lin, SO so, AFL adobeFlash) 83 | 84 | Domínios dos parâmetros da função: 85 | URL={lh, rh, na} 86 | LIN={po, in} 87 | SO={win, linux, mac} 88 | AFL={sim, nao} 89 | 90 | Pares de parâmetros e requisitos de teste: 91 | URL-LIN 92 | lh-po OK 93 | lh-in OK 94 | rh-po 95 | rh-in 96 | na-po 97 | na-in 98 | URL-SO 99 | lh-win OK 100 | lh-linux OK 101 | lh-mac 102 | rh-win 103 | rh-linux 104 | rh-mac 105 | na-win 106 | na-linux 107 | na-mac 108 | URL-AFL 109 | lh-sim OK 110 | lh-nao OK 111 | rh-sim 112 | rh-nao 113 | na-sim 114 | na-nao 115 | LIN-SO 116 | po-win OK 117 | po-linux 118 | po-mac 119 | in-win 120 | in-linux OK 121 | in-mac 122 | LIN-AFL 123 | po-sim OK 124 | po-nao 125 | in-sim 126 | in-nao OK 127 | SO-AFL 128 | win-sim OK 129 | win-nao 130 | linux-sim 131 | linux-nao OK 132 | mac-sim 133 | mac-nao 134 | 135 | Firefox(URL url, LIN lin, SO so, AFL adobeFlash) 136 | URL, LIN, SO, AFL 137 | lh, po, win, sim 138 | lh, in, linux, nao 139 | 140 | 4. [3 pontos] Explique o que é JML e como pode ser usado para 141 | encontrar bugs. 142 | 143 | JML é uma linguage de especificação de APIs para Java. 144 | -------------------------------------------------------------------------------- /provas/If1009-20172-1EE.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STAR-RG/testing-cin/dc0b678b842fb7c5a681081fdbeeae9acaaa0d0d/provas/If1009-20172-1EE.docx -------------------------------------------------------------------------------- /testing-minicourse.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STAR-RG/testing-cin/dc0b678b842fb7c5a681081fdbeeae9acaaa0d0d/testing-minicourse.pptx --------------------------------------------------------------------------------