Ao escrever seus testes nós podemos saber se a execução das funcionalidades nos códigos testados estão realizando o que deveriam fazer corretamente.
Porém, como saberemos que nossos testes estão percorrendo todas as linhas com código de nossos projetos?
Os testes passam por todos os caminhos?
- Caminhos felizes;
- Caminhos infelizes;
- Caminhos alternativos.
Como saberemos se em nosso código possuem códigos sem utilidade e/ou que são inalcançáveis?
Todos os questionamentos acima são difíceis de saber sem que haja uma métrica clara e uma ferramenta visual para olhar para seu código e observar de forma simples quais linhas foram executadas e quais linhas deixaram de ser testadas.
Para responder todas as perguntas acima foi desenvolvido a Cobertura de Código do PROBAT, portanto ao ligar esse recurso ao final dos testes os resultados de cobertura estarão gravados no SQLite, além de no processo de exportação os valores serão gravados em um arquivo XML.
Há também a possibilidade de quebrar seus testes se determinados fontes não atingirem o percentual mínimo configurado de cobertura de código.
Para ativar esse recurso, basta na INI modificar as seguintes chaves:
[PROBAT] CODECOVERAGE=1
O valor da chave [CODECOVERAGE] deve ser numérico, sendo (0=desligado) e (1=ligado)
Essa chave irá informar ao PROBAT que agora ele deverá ativar e registrar a cobertura de código de cada Teste executado.
Vale lembrar que a captação da informação de cobertura de código em tempo de execução é responsabilidade do appserver e ao PROBAT cabe avisar o appserver para captar esses valores e após isso, quantificar os valores, registrar os dados, validar os testes e gerar as exportações conforme configurações da Cobertura.
Nota: a chave acima somente liga a Captação e registro dos resultados nas tabelas do SQLite
Validação
Além de se obter as linhas de códigos cobertas pelos testes e seus respectivos percentuais de cobertura, podemos validar se atingimos um percentual mínimo de cobertura, caso contrário, será gerado erro e o resultado dos testes invalidado.
Para ligar a validação, basta na INI modificar as seguintes chaves:
[PROBAT] CODECOVERAGE=1 CODECOVERAGE_PERCENT=80
O valor da chave [CODECOVERAGE_PERCENT] deve ser numérico e entre 0 e 100
O valor 0 [zero] significa que
No exemplo acima, definimos que o percentual mínimo de cobertura a ser atingido é de 80%.
Importante saber que esse percentual será usado para validar todos os fontes de seu projeto, porém existem recursos para que possam tanto modificar o percentual por fonte ou indicar ao PROBAT quais módulos (folders) serão validados pelo % informado.
Modificando % por fonte
Podem existir casos em que o percentual aplicados para todos os fontes não faça sentido um ou outro fonte em específico.
Para isso o PROBAT tem um recurso específico para que possa ser alterado esse percentual por fonte, e iremos novamente recorrer ao arquivo-fonte de configuração com comando específico, sendo:
COVERAGE PERCENTAGE {%} NAMESPACE {"nome_namespace"} SOURCE {nome_fonte} TYPE {extensao_fonte} COVERAGE PERCENTAGE {%} SOURCE {nome_fonte} TYPE {extensao_fonte}
O valor passado para o namespace deve estar obrigatoriamente entre aspas.
Exemplo
#include 'tlpp-probat.th' // Aplica o Percentual em: // 60% // para o fonte: // calculos.tlpp // Que utiliza o namespace: // prj.lib COVERAGE PERCENTAGE 50 NAMESPACE "prj.lib" SOURCE calculos TYPE tlpp // Aplica o Percentual em: // 20% // para o fonte: // formulas.prw COVERAGE PERCENTAGE 20 SOURCE formulas TYPE prw
Ao final basta compilar o fonte em seu RPO!
Filtro de módulos
É possível indicar ao PROBAT quais módulos (folder e sub-folders) devem ser validados pelo percentual indicado, caso não seja informado esse filtro a validação será aplicada a todos os fontes.
Bom, pode parecer um recurso inútil à primeira vista mas imagine um projeto grande de desenvolvimento onde já existam módulos maduros e que podem ir para a produção ou serem publicados, e ao contrário, módulos ainda em desenvolvimento e que ainda não estejam alinhados com a qualidade exigida e portanto não faz sentido quebrar toda uma expedição por módulos ainda em processo de amadurecimento.
Para informar quais módulos devem ser validados, é simples, basta seguir a configuração no INI abaixo:
[PROBAT] CODECOVERAGE=1 CODECOVERAGE_FILTER_SRC=pasta_1,pasta_2,pasta_3
Os nomes das pastas (módulos) devem ser separadas por vírgula.
No exemplo acima, a validação de cobertura de código somente será aplicada aos fontes que pertençam hierarquicamente aos diretórios [pasta_1], [,pasta_2] e [pasta_3].
Exportação resultado Cobertura
Os resultados de cobertura de código apurada podem ser exportadas de duas maneiras:
- XML no formato COBERTURA;
- JSON para uso pela extensão do VsCode.
XML
O XML pode ser usado por qualquer ferramenta de mercado que entenda o formato padronizado pelo projeto COBERTURA.
Veja mais em (https://cobertura.github.io/cobertura/).
Para solicitar a exportação no formato COBERTURA, é simples, basta seguir a configuração no INI abaixo:
[PROBAT] CODECOVERAGE=1 CODECOVERAGE_EXPORT_TFS=1
O valor da chave [CODECOVERAGE_EXPORT_TFS] devem ser (0=não exporta) ou (1=exporta)
JSON
Essa exportação será usada para a extensão do VsCode, pois com base nela o VsCode irá mostrar visualmente a cobertura no fonte aberto.
Nota: A extensão está em desenvolvimento e em breve disponibilizaremos para uso.
Porém, esse formato pode ser usado além do VsCode, pois json é um formato amplamente conhecido e de fácil utilização por qualquer ferramenta de mercado.
Para solicitar a exportação no formato COBERTURA, é simples, basta seguir a configuração no INI abaixo:
[PROBAT] CODECOVERAGE=1 CODECOVERAGE_EXPORT_JSON=1
O valor da chave [CODECOVERAGE_EXPORT_JSON] devem ser (0=não exporta) ou (1=exporta)
Tabelas no SQLite
Nome tabela | Descrição |
---|---|
PROBAT_CODECOVERAGE_TOTAL | Percentual Total de cobertura sumarizado por todos os fontes |
PROBAT_CODECOVERAGE_SOURCES | Percentual Total de cobertura por fonte |
PROBAT_CODECOVERAGE_LINES | Informação linha a linha por fonte sobre a cobertura |