O que é o Cantata AutoTest?

O Cantata AutoTest cria scripts de testes unitários ou adiciona casos de teste a scritps Cantata pré-existentes. Efetua uma análise do código para determinar todos os caminhos possíveis, tal como requerido por métricas de cobertura estrutural:

  • 100% de pontos de entrada em funções
  • 100% de declarações
  • 100% de decisões
  • 100% de causa única MC/DC

Um algorítmo cria os vetores de teste que exercitam todos os caminhos no código, utilizado as poderosas capacidades “white-box” do Cantata para definir dados, parâmetros e chamadas a interfaces e funções de controlo.

Os vetores de teste guiam o código e verificam os parâmetros passados entre as funções, valores acessíveis globalmente, ordem de chamadas e os valores de retorno.

Casos de teste gerados por AutoTest são editáveis da mesma maneira que os criados pelo utilizador, e cada caso de teste contém uma descrição sobre que elementos e caminhos do código que foi criado para exercitar, facilitando a sua manutenção.

O que me ajuda o AutoTest a fazer?

CONFIGURAÇÃO DA GESTÃO DE TESTES AUTOMÁTICA

As opções de geração AutoTest podem ser configuradas facilmente através da interface gráfica ou linha de comandos:

  • Cobertura de Código requerida (conjunto de regras)

  • Como deverão ser simuladas ou intercetadas as chamadas a funções

  • Se deverá aceder a variáveis estáticas globais

  • Testes unitários isolados ou agregação e integração de funções estáticas de teste

  • Que dados a verificar (i.e. dados globais, argumentos a chamadas de funções, valores de retorno)

  • Se dados globais deverão ser modificados durante a chamada a funções para forçar caminhos a testar;

  • Geração de limites máximos sobre tempo, caminhos, matrizes, etc.

Seleccionando o conjunto de regras (Rule Set) de cobertura de código, determinará a profundidade (i.e. número de testes necessário para atingir os objetivos). O estilo é determinado pela utilização específica do AutoTest e opções do standard de geração de código do Cantata Workspace.

Isolamento dos testes unitários ou conjunto de testes de integração, utilizando estratégias de teste em “black-box” ou “white-box”, oferecem flexibilidade para inclusão de quaisquer regras iniciais estabelecidas para cuidado e manutenção dos testes, requeridas para reutilização de código.

IDENTIFICAÇÃO DE CÓDIGO COM PROBLEMAS DE TESTABILIDADE

Nas áreas de código onde o AutoTest não consegue gerar testes ou estes estão incompletos, a relatório da geração AutoTest fornece informação útil e assertiva sobre problemas com testabilidade do código fonte.

Mensagens de aviso são escritas no relatório de geração do AutoTest, mostrando onde e porquê não ter sido possível gerar casos de teste, indicado potenciais problemas com o código  fonte ou com a capacidade de o testar dinamicamente. Pode por isso ser um suplemento valioso para a revisão de código, mesmo que os testes gerados pelo AutoTest não sejam executados.

GERE TESTES COM COBERTURA TOTAL DO CÓDIGO

O relatório de geração do AutoTest identifica a cobertura de código esperada que será atingida com a execução dos testes gerados. Como os casos de teste inicialemente gerados pelo AutoTest estão programados para “passar”, a única falha que será verificada será relativa ao objetivo de cobertura a atingir definido nas regras de cobertura (Coverage Rule Set).

Atingir cobertura total do código é apenas parte dos objetivos de teste. Os casos de teste gerados pelo AutoTest podem ser revistos e, onde conveniente, mapeados a requisitos (ver Rastreamento de Requisitos em Cantata para mais detalhes). Neste caso, o AutoTest reduz drasticamente o esforço do programador para selecionar os vetores de teste para verificar os requisitos.

ACRESCENTAR CONDIÇÕES FRONTEIRA NA COBERTURA

Onde o código sob teste é complexo, até requisitos detalhados e testes de robustez exaustivos podem deixar caminhos de execução não testados no código, porque as diferentes combinações de vetores de entrada necessárias para a cobertura total são difíceis de identificar. Para esses “casos fronteira”, o AutoTest pode gerar casos de teste para preencher eventuais lacunas na cobertura de código, se o código não for redundante.

O AutoTest pode ser usado apenas em funções selecionadas para gerar um conjunto focado de casos de teste que alcancem 100% de cobertura. A otimização automática de cobertura de código do Cantata pode, com um único clique, apagar/desativar quaisquer casos de teste que não adicionem à cobertura geral de código obtida.

CRIAR UMA REDE DE SEGURANÇA DE TESTES DE REGRESSÃO COMO BASE

O código legado que depende de testes de sistema é muito caro e ineficiente a ser modificado, mas escrever um conjunto abrangente de testes unitários a partir do zero simplesmente não é comercialmente viável. O AutoTest do Cantata gera automaticamente um conjunto de testes unitários para todo o código selecionado. Esses testes podem atuar como uma rede de segurança de base contra futuros erros de regressão à medida que o código é modificado. Isso reduz a dependência de testes de sistema caros e demorados, além de tornar os testes mais exaustivos e precisos na deteção de erros.

O Cantata AutoTest gera um conjunto de “Makefiles” Cantata, que podem ser facilmente integrados com qualquer ferramenta de código aberto ou comercial para permitir testes totalmente automatizados durante o desenvolvimento, a cada integração.

ATUALIZAÇÃO DO LEGADO DAS FERRAMENTAS DE TESTE

Mesmo onde outras ferramentas de testes unitários já estão em uso, poderão existir vantagens reais na atualização para as modernas e poderosas ferramentas de teste disponíveis no Cantata. Especialmente quando as ferramentas legadas não são bem suportadas ou não são qualificadas para as necessidades de certificação de ferramentas com padrões de segurança.

O Cantata AutoTest oferece duas opções, altamente automatizadas, para atualizar as ferramentas de teste de unitário:

Para uma base de código com um nível de qualidade aceitável, os testes existentes podem ser simplesmente substituídos por um conjunto de testes unitários gerados pelo Cantata AutoTest.

Para testes unitários legados escritos em C (e.g. ferramentas xUnit), os testes existentes podem ser incorporados nos scripts de teste Cantata, retendo o investimento em casos de teste legados e aprimorados com recursos adicionais do Cantata, incluindo o AutoTest.

Como Funciona o AutoTest?

O AutoTest pode ser chamado usando um “Test Script Wizard” ou pode gerar casos de teste adicionais com um script de teste existente na vista “Test Script Manager”. Para bases de código maiores, pode ser mais conveniente executar o AutoTest a partir da linha de comando.

O AutoTest analisa o código-fonte e usa as opções do Cantata para gerar:

  • “AutoTest Generation Report”, que fornece informações resumidas e detalhadas sobre os testes que foram gerados.
  • Scripts de teste Cantata (ou casos de teste adicionais para scripts existentes)
  • “Makefiles” Cantata para construir o executável de teste

Os testes gerados são então construídos e executados, produzindo o conjunto padrão de resultados e relatórios Cantata.

ALGORITMO DE GERAÇÃO AUTOTEST

O Cantata AutoTest cria scripts de testes unitários Cantata completos a partir do código-fonte usando um algoritmo que gera automaticamente vetores de teste que exercitam caminhos de código, verificam dados, verificam parâmetros e registram chamadas a funções. Os caminhos de código usados para gerar os casos de teste são determinados selecionando os tipos de métrica (Ponto de Entrada, Declaração, Decisão ou causa exclusiva MC / DC) no Conjunto de Regras (“Rule Set”) de cobertura de código.

Opões estão disponíveis para influenciar o algoritmo de geração do AutoTest, incluindo o nível necessário de cobertura de código, o método de controlo de chamadas, que tipos de dados verificar, como os dados podem ser modificados para forçar caminhos de execução, limites de tempo e muitas outras. Essas opções afetam o estilo dos testes da Cantata e limitam o âmbito de geração de testes.

Os testes podem ser mais ou menos exaustivos e podem usar abordagens “white-box” ou “black-box”. A decisão sobre qual estilo de testes unitários gerar com o Cantata AutoTest dependerá dos objetivos do plano de regressão e de como o código muda. Por exemplo, permitindo flexibilidade para modificações de código de funções estáticas sem quebrar testes de caixa preta.

MENSAGENS DE AVISO E ERRO DO AUTOTEST

Quando a geração do Cantata AutoTest resulta em testes incompletos ou encontra uma qualidade de código suspeita, mensagens de aviso são gravadas no relatório de geração do AutoTest. Essas mensagens de aviso indicam possíveis problemas no código-fonte ou em sua testabilidade dinâmica, portanto, podem ter um valor significativo.

A Cantata AutoTest reportará:

  • código inacessível, onde não é possível gerar casos de teste para exercitar todas as partes do software sob teste
  • possíveis cenários de falhacomo ponteiros nulos, um índice de matriz fora dos limites, decisões usando variáveis não inicializadas e divisão por zero
  • truncamento de tipo, onde conversão de tipos pode resultar em perda de dados
  • uso de dados não inicializados, como um campo dentro de uma estrutura grande
  • dados estáticos não constantes dentro de uma função, pois seu valor será desconhecido no início de um caso de teste
  • funções que não retornam, em que uma função não retorna controlo ao chamador – embora o Cantata tenha a capacidade de contornar isso para fins de teste.
  • declarações de função implícita, em que uma função é chamada antes de ser declarada
Mais informações sobre o Cantata AutoTest

Para informações mais detalhadas sobre o Cantata AutoTest, consulte: