Você está na página 1de 1

Fundamentos de Algoritmos - INF05008

Exemplos e Testes

A documentação de um sistema computacional envolve, entre outros componentes, exemplos de uso e testes.
Tanto exemplos quanto testes tem uma estrutura similar, eles são compostos por:

Argumentos de entrada : descrição de uma chamada da função, com valores concretos de entrada (também
chamada de instância do problema);
Saída esperada : valor concreto resultante da aplicação da função aos argumentos de entrada.

Esses dois componentes, apesar de poderem ser similares do ponto de vista de sua definição, tem papéis bastante
diferentes no processo de desenvolvimento de software.

Os exemplos de uso de um sistema/função tem como principal objetivo ser uma forma de comunicação entre
o usuário de um sistema/função e o desenvolvedor, permitindo ao usuário compreender melhor como usar o sis-
tema/função, mas também como será o sistema. Por isso é importante construir exemplos antes de desenvolver o
sistema: através deles se pode validar o sistema (ou seja, avaliar se o comportamento do sistema será o esperado). Mas
a construção de exemplos tem um outro objetivo muito importante relacionado à resolução de problemas. Construir
exemplos faz parte da atividade cognitiva de generalização: através da construção de vários exemplos, fica mais fácil
compreender como resolver um problema e como generalizar essa solução para qualquer instância.

O grande objetivos de teste de software é encontrar erros, e assim aumentar a confiança na qualidade do software
(note que normalmente é impossível garantir correção de software somente com testes, outras técnicas são necessárias).
Para serem efetivos, os testes devem cobrir todos os casos possíveis de um sistema, e portanto normalmente o conjunto
de testes de um software é muito maior que o conjunto de exemplos. Existe uma área da Engenharia de Software
devotada ao teste de software, pois testar adequadamente exige a aplicação de diversas técnicas. Os testes são
executados normalmente sobre o código já desenvolvido, mas a geração dos casos de testes pode ser realizada antes
do próprio código ser escrito: a partir de uma especificação ou modelo do sistema pode-se construir o conjunto de
casos de teste (muitas vezes de forma automática ou semi-automática). Porém, para se exercitar (testar) todos os
caminhos possíveis de um software, muitas vezes são necessários vários conjuntos de testes, alguns deles montados
após a construção do código em si.

Os exemplos fazem parte da documentação do usuário do software, e os testes fazem parte da documentação do
desenvolvedor.

Como a estrutura de testes e exemplos é similar, pode-se usar alguns testes como exemplo do software? A resposta
é: é possível, mas não recomendável. Temos que compreender que, como eles têm funções e públicos-alvo diferentes, a
linguagem também é diferente. Por exemplo, se usarmos a linguagem Racket para desenvolver um software, mostrar
um exemplo de uso de uma função com um comando check-expect na frente não é a melhor forma, pois não podemos
assumir que o usuário tem conhecimento da linguagem na qual o sistema será implementado. A sintaxe dos exemplos é
normalmente muito próxima da linguagem natural e com formato mais livre, enquanto testes têm formatos específicos
(até porque muito são gerados/executados automaticamente ou semi-automaticamente). E os exemplos devem ser
colocados sempre antes do código, para ressaltar tanto seu papel de comunicação entre desenvolvedor e usuário
quanto o papel cognitivo na processo de resolução de problemas.

Como fazer nas soluções das listas de exercícios: Na linguagem Racket, é possível colocar os comandos
check-expect antes ou depois do código de uma função. Todas as funções desenvolvidas devem conter exemplos E
testes. O ideal, até para criar uma cultura correta de desenvolvimento de software, é que exemplos e testes tenham
formatos diferentes (como discutido acima) e sejam colocados em locais apropriados (exemplos antes do código e
testes após). Porém, se alguém quiser utilizar check-expect para os dois papéis, DEVE obrigatoriamente indicar isso
claramente, colocando a linha ;; Exemplos e testes: , e os exemplos/testes devem ser colocados ANTES do código
da função.

Você também pode gostar