O documento discute como a técnica de teste de mutação pode ser usada para testar a qualidade dos testes unitários, introduzindo deliberadamente erros no código (mutações) para verificar se os testes unitários identificam esses erros. Ele explica como a ferramenta MuJava implementa mutações em código Java e como analisar os resultados para melhorar a cobertura e eficácia dos testes unitários.
QArentena do dia 22/08/2020
Diante de todas as fases que temos que testar, uma que muitas vezes deixamos de lado é a de Unit Testing. Ela é tão importante quanto as outras que já tem a aplicação integrada. Mas o que diferencia muito com relação as outras fases é que ela tem um feedback muito rápido que ajuda muito durante a fase de desenvolvimento.
Conheça o Junit, Mockito e PowerMock, Frameworks que permitem você criar testes unitários para sistemas de informação. Até menos sistemas não foram pensados para testes.
QArentena do dia 22/08/2020
Diante de todas as fases que temos que testar, uma que muitas vezes deixamos de lado é a de Unit Testing. Ela é tão importante quanto as outras que já tem a aplicação integrada. Mas o que diferencia muito com relação as outras fases é que ela tem um feedback muito rápido que ajuda muito durante a fase de desenvolvimento.
Conheça o Junit, Mockito e PowerMock, Frameworks que permitem você criar testes unitários para sistemas de informação. Até menos sistemas não foram pensados para testes.
Uma experiência de implementação de testes unitários usando JUnit 4. Entendendo como testes unitários podem ajudar na evolução do código, e como podemos construindo testes unitários melhores.
Aqui são apresentados as técnicas do framework JUnit
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Baixe mais arquivos em http://pastadomau.wikidot.com.
Este trabalho tem como objetivo mostrar a importância dos testes no desenvolvimento estruturado de software, passando pelas fases desta etapa e os tipos de teste utilizados em cada fase. Aborda também os métodos para uma correta aplicação dos testes de forma eficiente, visando a produção de um sistema com qualidade.
Material utilizado na primeira parte do evento Viabilidade e Conceitos Básicos de Automação com o QTP, promovido pelo GUTS-RS em 28/abril/2010. Mais em http://guts-rs.blogspot.com
Essa apresentação mostra como fazemos os microserviços na Convenia, aspectos de arquiterura e comunicação entre microservoços, bem como métodos de teste e fluxo de code review.
Apresentação realizada pela Bruna Emerich e Paulo Luiz Fachini no dia 28/05/2019 no #2 Talk Code Like a Tester.
Será que testar é simples?
Venha conhecer um pouco mais sobre técnicas de testes.
Testar não é uma coisa simples. Existem diferentes níveis, tipos e técnicas de testes.
Você sabe quais são elas, quando aplicar e para que servem? Se já sabe, você as utiliza? Sabe os benefícios?
Nessa talk queremos abordar esses questionamentos, mostrando como utilizá-las, para levantar o que pode ser testado de uma forma mais profissional, reduzindo a quantidade de testes e maximizando a sua qualidade.
Abordaremos conceitos amplamente utilizados e consolidados no mercado de desenvolvimento de software, colocando a nossa visão e exemplificando com dados mais próximos da realidade.
Uma experiência de implementação de testes unitários usando JUnit 4. Entendendo como testes unitários podem ajudar na evolução do código, e como podemos construindo testes unitários melhores.
Aqui são apresentados as técnicas do framework JUnit
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Baixe mais arquivos em http://pastadomau.wikidot.com.
Este trabalho tem como objetivo mostrar a importância dos testes no desenvolvimento estruturado de software, passando pelas fases desta etapa e os tipos de teste utilizados em cada fase. Aborda também os métodos para uma correta aplicação dos testes de forma eficiente, visando a produção de um sistema com qualidade.
Material utilizado na primeira parte do evento Viabilidade e Conceitos Básicos de Automação com o QTP, promovido pelo GUTS-RS em 28/abril/2010. Mais em http://guts-rs.blogspot.com
Essa apresentação mostra como fazemos os microserviços na Convenia, aspectos de arquiterura e comunicação entre microservoços, bem como métodos de teste e fluxo de code review.
Apresentação realizada pela Bruna Emerich e Paulo Luiz Fachini no dia 28/05/2019 no #2 Talk Code Like a Tester.
Será que testar é simples?
Venha conhecer um pouco mais sobre técnicas de testes.
Testar não é uma coisa simples. Existem diferentes níveis, tipos e técnicas de testes.
Você sabe quais são elas, quando aplicar e para que servem? Se já sabe, você as utiliza? Sabe os benefícios?
Nessa talk queremos abordar esses questionamentos, mostrando como utilizá-las, para levantar o que pode ser testado de uma forma mais profissional, reduzindo a quantidade de testes e maximizando a sua qualidade.
Abordaremos conceitos amplamente utilizados e consolidados no mercado de desenvolvimento de software, colocando a nossa visão e exemplificando com dados mais próximos da realidade.
Este trabalho apresenta uma breve introdução ao tema Verificação, Validação e Teste de Software Ágil e traz um estudo de caso onde pode-se verificar que a utilização de técnicas de teste de software, tais como o TDD, podem diminuir drasticamente a ocorrência de erros no software.
Mini aula sobre testes de software descrevendo os conceitos básicos sobre as técnicas utilizadas para testes, verificação e validação no desenvolvimento de software.
Esse slide mostra a necessidade do processo de teste de software nos projetos de desenvolvimento de softwares, vamos demostrar as técnicas, tipos, fases, ferramentas, modelos e normas envolvidas na execução dos testes de software com o intuito de obter um ótimo nível de qualidade dos softwares gerados.
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
A importância de testes de software já deveriam ser um consenso entre times de desenvolvimento. Contudo ainda há profissionais que não compreendem o valor deles, um dos motivos é que de fato muitos softwares possuem testes mas continuam a apresentar bugs a cada entrega. Isso ocorre porque é comum os testes garantirem o funcionamento do código, mas não das funcionalidades como um todo. Na apresentação será abordado como equilibrar testes unitários, de componentes e de integração organizando-os através de uma visão mais direcionada ao negócio, features e histórias do que apenas ao código implementado.
Palestra ministrada no evento Javou! #08, realizado pela comunidade JavaCE, dia 12/11/2016 no Auditório Nadir Papi Saboya, Faculdade Farias Brito, em Fortaleza-CE
DevQA - Da zona de conforto ao comprometimento com a qualidade
DevQA: Como testar os testes unitários?
1. DevQA: Como testar os testes unitários? - por Kamilla Queiróz
Já testou os seus testes unitários? Como saber se você escreveu corretamente os testes
unitários? Isso pode ser mais uma tarefa para um DevQA!
Ferramentas de qualidade de código, testes unitários, testes de integração, são vários os
tipos de testes, mas como saber a qualidade deles? Como identificar se os testes unitários
estão sendo efetivos? As ferramentas de cobertura são boas alternativas para saber se os
testes estão utilizando uma certa linha de código, mas caso as variáveis sejam diferentes ou
algumas condições mudem, como manter essa garantia?
Quando é codificado um teste unitário, a preocupação é testar o resultado que está sendo
esperado, mas havendo várias possibilidades de fluxos, como vamos garantir que o teste
passou por todos os caminhos e não somente o happy day, ou seja, o caminho feliz ?
Para esse tipo de abordagem utilizando uma técnica chamada Mutation Testing, onde é
alterado o código original para introduzir falhas simples e verificamos se os testes unitários
irão quebrar.
Um dos métodos mais comuns para isso é o Bebuging, é isso mesmo, a escrita está correta. Ao
invés de 'debugarmos' o código, ou seja, depurarmos procurando bugs, erros ou falhas, iremos
introduzir erros na aplicação para testar a qualidade do teste unitário.
Essas falhas ou erros que introduzimos no código, chamamos de Mutação. Cada linguagem tem
uma estrutura e assim em linguagens orientadas a objeto temos os seguintes tipos de mutação
possíveis:
• Intra-method: dentro de métodos;
• Inter-method: entre métodos;
• Intra-class: entre métodos de uma classe;
• Inter-class: entre métodos de classes diferentes;
Temos uma variedade de operadores de mutação resultantes desses tipos de mutações
possíveis. Abaixo, vamos analisar uma ferramenta que implementa alguns desses operadores.
Para Java temos a ferramenta MuJava. Vejamos como essa ferramenta trabalha com um
exemplo:
2. Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao
erro. Introduzimos uma mutação de operador aritmético.
O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se
executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa
qualidade, os testes unitários quebraram.
Caso isso não ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja,
precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os
testes unitários quebrem, caso o programa original seja alterado.
Em resumo, os testes de mutação tem a capacidade de revelar o quão adequados estão os
testes unitários ou seus dados de teste.
Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita
calcularmos uma média objetiva de confiança dos casos de
o cálculo em mais detalhes no
Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao
tação de operador aritmético.
O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se
executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa
qualidade, os testes unitários quebraram.
ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja,
precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os
testes unitários quebrem, caso o programa original seja alterado.
tação tem a capacidade de revelar o quão adequados estão os
testes unitários ou seus dados de teste.
Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita
calcularmos uma média objetiva de confiança dos casos de testes unitários executados. Veja
o cálculo em mais detalhes no artigo aqui.
Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao
O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se
executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa
ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja,
precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os
tação tem a capacidade de revelar o quão adequados estão os
Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita
testes unitários executados. Veja
3. Tipos de mutações que podemos fazer no código:
• Exclusões de declarações;
• Duplicação ou inserção de declarações;
• Negação de sub-expressões booleanas;
• Substituições:
- operadores aritméticos [+, -, *, / ];
- relações booleanas [==, !=, <, <=, >, >=];
- variáveis do mesmo escopo [tipos devem ser compatíveis];
Problemas
Um dos problemas encontrados com essa abordagem é questão do tempo de execução dos
testes. Pois iremos incluir alterações diversas no código, assim para cada alteração
precisamos rodar todos os testes novamente, e com isso, o tempo de execução dos testes se
eleva bastante.
Uma solução para mitigar esse tempo, é a escolha correta dos operadores e aplicarmos nas
classes de maior interesse.
Em resumo:
• Testar os testes ajuda na criação de suítes efetivas;
• Apresenta um propósito educacional;
• Mostra o quanto pode ser confiável uma suíte de testes;
• Valida se alguma implementação está realmente bem testada.
Links Externos
MuJava
Artigo: MuJava : An Automated Class Mutation System
Publicado originalmente em O Tapioca: http://www.otapioca.com.br/?p=2239