Teste unitário
Origem: Wikipédia, a enciclopédia livre.
'Teste unitário é toda a aplicação de teste nas assinaturas de entradas e saídas de um sistema, consiste de validar dados validos e inválidos via I/O (entrada/saída) sendo aplicado por desenvolvedores ou analistas de teste.
Relação de conceitos de testes unitários: I/O Input Output (Entrada e Saída).
São todas as entradas e saídas existentes na programação.
[editar] Validos
São entradas e saídas de dados comuns ao sistema e pertencem ao processo normal. Não apresentam tratamento alem do normal já programado. No caso de retorno devera seguir os padrões estabelecidos e não permitir retornos fora das regras especificadas.
[editar] Domínio
Pode ser um campo, uma assinatura, um I/O pode ser qualquer tipo de local que receba valores externos ao sistema. Todo domínio deve realizar consistências de dados validos e inválidos. Um domínio só permite dados com o formato igual ao que será armazenado.
- Ex.: Campo DDD devera permitir números ate quatro casas não negativas sendo recomendado quando for possível ate a base de dados deve impedir a entrada de valores inválidos.
Receber e guardar o mesmo tipo de dado o tamanho do campo que recebe os dados deve ser menor ou igual ao campo que irá armazenar os dados (em raros casos os campos de armazenamento são menores que os de exibição).
[editar] Inválidos
São entradas e saídas de dados não comuns ao sistema . Apresentam tratamento para validar o tipo de dado invalido ou situação. Pode possuir ate dois retornos, uma mensagem para um log no sistema e uma mensagem em uma formatação e escrita adequada ao usuário.
- Ex.: Dividir (x int,y int )=z int .
Caso tenhamos x=1,y=0 z será um valor com erro e devera retorna uma mensagem avisando que a operação é invalida para o usuário. Caso a expressão seja um dado comum do sistema a autorização para tal validação dever ser do usuário pois faz parte da regra de negocio. Não existe retorno invalido sem um tratamento. Tratamento genérico deve ser apenas para condições não visíveis na regra e uso do sistema.
[editar] Domínio
Pode ser um campo, uma assinatura, um I/O pode ser qualquer tipo de local que receba valores externos ao sistema. Todo domínio deve realizar consistências de dados validos e inválidos. Um domínio só permite dados com o formata igual ao que será armazenado.
- Ex.: Campo DDD devera permitir números ate quatro casas não negativas sendo recomendado quando for possível ate a base de dados deve impedir a entrada de valores inválidos.
Receber e guarda o mesmo tipo de dado o tamanho do campo que recebe os dados deve ser menor ou igual ao campo que ira armazenar os dados (em raros casos os campos de armazenamento são menores que os de exibição).
Em suma, dominio é o tipo de valor valido para cada campo. Como exemplo podemos citar: Campo nome: Dominio = tipo: string;tamanho:50. Ao aplicamos o particionamento por equivalencia e a analise por valor limite poderemos criar as seguintes classes de testes.
Particionamento por Equivalencia: campo nome:
- valor em branco; Cenário Negativo
- valor > 50; Cenário Negativo
- qualquer valor de 1 a 50; Cenário Positivo
Analise por Valor Limite:
campo nome: valor em branco; valores 49,50,51; Usamos um valor exatamente inferior e extamente posterior ao valor do campo, devido ao fato dos erros aparecerem nas fronteiras da aplicação.
[editar] Tipos de valores
Existem diversos formatos de valores e cada um possui uma regra própria alem da regras da região em que será usado.
- Ex.:. Cálculo do Dia da Páscoa.
- Para calcular o dia da Páscoa (Domingo), usa-se a fórmula abaixo, onde o ANO deve ser introduzido com 4 dígitos. O Operador MOD é o resto da divisão. A fórmula vale para anos entre 1901 e 2099. A fórmula pode ser estendida para outros anos, alterando X e Y conforme a tabela a seguir:
- anos de 1582 à 1599 X=22 e Y=2
- anos de 1600 à 1699 X=22 e Y=2
- anos de 1700 à 1799 X=23 e Y=3
- anos de 1800 à 1899 X=24 e Y=4
- anos de 1900 à 1999 X=24 e Y=5
- anos de 2000 à 2099 X=24 e Y=5
- anos de 2100 à 2199 X=24 e Y=6
- anos de 2200 à 2299 X=25 e Y=7
- Para anos entre 1901 e 2099: X=24 e Y=5
- a = ANO MOD 19
- b= ANO MOD 4
- c = ANO MOD 7
- d = (19 * a + X) MOD 30
- e = (2 * b + 4 * c + 6 * d + Y) MOD 7
- Se (d + e) > 9 então DIA = (d + e - 9) e MES = Abril
- senão DIA = (d + e + 22) e MES = Março
- Há dois casos particulares que ocorrem duas vezes por século:
- Quando o domingo de Páscoa cair em Abril e o dia for 26, corrige-se para uma semana antes, ou seja, vai para dia 19;
- Quando o domingo de Páscoa cair em Abril e o dia for 25 e o termo "d" for igual a 28, simultaneamente com "a" maior que 10, então o dia é corrigido para 18.
- Neste século estes dois casos particulares só acontecerão em 2049 e 2076.
- Para calcular a Terça-feira de Carnaval, basta subtrair 47 dias do Domingo de Páscoa.
- Para calcular a Quinta-feira de Corpus Christi, soma-se 60 dias ao Domingo de Páscoa.
- exemplos:
- Para o ano de 1997:
- a=1997 MOD 19 = 2
- b=1997 MOD 4 = 1
- c=1997 MOD 7 = 2
- d=(19 * 2 + 24) MOD 30 = 2
- e=(2 * 1 + 4 * 2 + 6 * 2 + 5) MOD 7 = 6
- (d + e) = 2 + 6 = 8
- Logo o Domingo de Páscoa é 30/3/1997
- Carnaval: 11/2/1997
- Corpus Christi: 29/5/1997
[editar] Data
Deve validar anos iguais a faixa de datas existente na base. Deve ser feita conforme o padrão da região de uso. Validar o maior e o menor dia de todos os meses. Deve estar preparado para anos bissextos. Em caso de calculo de feriados deve apresentar todos eles corretamente conforme as regiões definidas pelo o usuário. Não devera. Validar meses e dias invalidados conforme regra (X,X-1,X+1, (X+Y)/2,Y,Y-1,Y+1 ) sendo x o maior numero e y o menor Verificar quantos anos o sistema devera tratar anteriores e posteriores.
[editar] Números
Devem ser tratados no formato correto e com as regras para a região especificadas pelo usuário. Validar valores negativos ou sinais. Testar sempre o valor (um acima do maior, o maior, um abaixo do maior, alguns intermediários, um acima do menor, o menor, um abaixo do menor, e alguns valores inválidos) (X,X-1,X+1, (X+Y)/2,Y,Y-1,Y+1 ) sendo x o maior numero e y o menor numero. Tratar valores fracionados conforme a quantidade de casas validadas pela empresa. E-mail. Todo e-mail valido possui um @ e um . sendo que o @ nunca esta no começo ou no fim e o ponto sem esta entre o @ e o fim sendo que ele não pode estar junto com o @. Um e-mail dever ter no mínimo 5 caracteres contando o @ e o ponto.
[editar] Senha
Deve atender as normas da empresa. Não deve ser exibida durante a digitação somente com caractere representativo. Deve ser confirmada a digitação. Não deve permitir ser copiada ou colada. Domínio. Existem diversas formas para validar domínio e e-mail valido porem devem ser aprovadas pela empresa pois consomem comunicação com outros sites.
[editar] Campos especiais CPF, CGC, CEP, CNS e etc.
- Validar a formatação na entrada dos dados e na armazenagem.
- Devem atender as regras de calculo existentes.
- Não podem ser dados viciados.
- Campos dependentes DDI-DDD-TEL e similares.
- Validar o preenchimento de ambos em validação única.
- Validar a formatação.
- Campos pré-preenchidos.
- Validar a formatação.
- Testar todas as regras de preenchimento.
- Força dados inválidos ou repetir o preenchimento .
[editar] Valores para teste
Existem diversos tipos de dados validos que se tornam inválidos conforme a linguagem usada.
[editar] Sintaxes da linguagem
Muitas linguagem podem ter problemas ao tratar valores do tipo objeto, string e outros. Tais linguagem tem tratamentos especiais para estes valores para assim evitar erros ou em alguns casos não tem tratamento pois o erro é na codificação.
[editar] Erro na linguagem
Um exemplo claro de erro na linguagem são sistemas feitos na própria base de dados que não permitem pesquisas usando termos como else,while,for por serem palavras reservadas da linguagem atualmente a maior parte dos sistema não apresenta erros com termos reservados.
[editar] Alteração de valores
Algumas linguagens ao receberem determinados valores alteram seus dados internos com tratamentos automáticos no geral elas possuem travas para estes tratamentos. Exemplo de valores 0x00, 00FF, 1.1, 1,1, 1^2 e etc.
[editar] Interpretação de valores
Algumas linguagens interpretam diretamente valores sem tratar passando eles para outra aplicação em uso. Este erro ocorre geralmente quando uma outra linguagem é usada como intermediário. Exemplo em HTML(ASP,JSP,CGI,PHP e outras) quando passamos uma estrutura HTML(TAGs) para a pagina e esta estrutura é apresentada novamente porem no corpo do html podemos ter dados incorporados que mudam o resultado apresentado. Este tipo de erro é chamado de inject . Outro exemplo de inject é o SQL em junção com outras linguagens, recebendo diretamente linhas de comando podendo alterar pesquisas ou apagar tabelas de dados inteiras.
- Ex.: HTLM(<TAGs>,javascript) SQL(términos de linhas seguidas de comandos (1;’ while 1=1 print 1)).
Estes erros ocorrem pois temos uma segunda linguagem que faz o intermédio entre os comandos, para tratar estes tipos de erros devemos sempre conhecer bem as linguagens usadas evitando transferir diretos dados do usuário que acabem por virar comandos.
[editar] Cálculos mesclados
Ficar atentos aos valores que são permitimos pois o usuário pode acabar por inserir dados inválidos. Excreções como (-,(),{},[],’,^,x,*,/,. e outras) podem mudar totalmente o valor que era esperado podendo ate colocar valores alem dos permitidos pela especificação do sistema. Ponto flutuando ou Estouros. Erros de ponto flutuando dificilmente são identificados durante a especificação de um sistema ou acabam por ocorrer com a maturidade da empresa e seus dados. O que acarreta tais erros é:. Não validar os dados corretamente. Não planejar bem o crescimento dos dados. Não ter uma área de armazenamento maior que a área de entrada de dados. Na época da inflação era comum sistema terem um capo valor de 9 casas e uma área de armazenamento com 12 casas. Outro erro comum que permite ocorrer estouro é uso de objeto e matrizes sem estudo, qualquer laço entre eles ou o próprio crescimento descontrolado.
[editar] Formatações de região ou não
Onde estou quem sou eu ? E bom sempre força o sistema a usar uma região única caso não se trate todos os valores que ele pode trabalhar. O não tratamento da região pode tanto mudar o valor de um pagamento como alterar a data de uma cobrança. Caso o cliente não defina uma região devemos cobrar ele de tal definição e devemos sempre estar atento para os padrões já existentes evitando misturar dados como (DD/MM com MM/DD e 1.100 com 1,1).
[editar] Medidas
Um dado extremamente importante são as medidas. Elas devem ser sempre iguais no sistema inteiro ou serem tratadas para isso. É extremamente recomendado usar uma medida única no sistema evitando assim erros como mandar um foguete para um planeta e errarmos ele por 65.000km (caso da nasa de um sistema que misturava dados em polegadas e dados em metros). Os erros de medidas não se aplicam somente à formulas diferentes e sim a tamanhos ex.: 100cm=1m=0.001km.
[editar] Data
A formatação de data é o erro mais comum da maioria dos sistemas muitas vezes o sistema foi todo desenvolvido para dd/mm/yyyy porém ao ser implantado se descobre que a data da base é mm/dd/yyyy. Para evitar este tipo de erro deve ser sempre requisitado do usuário. 1° qual a configuração do servidor que será usado o sistema e seu idioma. 2° qual a configuração dos clientes que usuram o sistema e idiomas. Com estas informações é possível validar para qual data devemos converter os dados ou qual data devemos desenvolver.
[editar] Navegação
Pode ser tanto a navegação sobre o sistema ou a navegação entre sistemas. Sendo que somente a navegação dentro do bloco validada como teste unitário. Os itens Interna ao Sistema e Entre Sistema são testes de integração.
[editar] Local
Navegação entre os campos ou funcionalidades ta tela. Deve sempre atender a ordem esquerda para direita de cima para baixo. Caso o usuário use outro padrão ele deve ter especificado previamente pois esta fora dos padrões de mercado. A navegação local deve também validar os valores entre campos e seus resultados. Atentar para alteração de valores em campos diferentes do usado, algumas regras pode força as alterações de campos secundários devem validar todas as interações que geram estas alterações com dados validos e inválidos.
[editar] Interna ao sistema. Teste Integrado
Consiste da navegação entre as telas do sistema ou suas estruturas internas. Deve seguir o padrão definido pelo usuário. Devemos atentar para alterações entre telas e todas as suas iterações (validas e invalidas). Devemos sempre listar as funcionalidades de navegação em um objeto único ex.: Apontar o objeto que controla o botão (x) o objeto do (ctrl+f4) para o mesmo objeto que controla o fechar do menu. A navegação interna deve ser sempre bem mapeada e deve ser tratada por quem libera uma funcionalidade ou um responsável por integrar ela ao sistema. Muitos sistemas travam pois suas funções ficam congestionadas entre elas por não serem tratadas com sinalização e eventos de integração como (funções de fechar, funções de novo, funções de próxima e anterior).
[editar] Entre sistemas. Teste Integrado
Quando temos a integração entre sistemas deve ser programada sempre a prioridade entre eles, quem tem prioridade de gravar ou apagar um dado. Deve ser validada a chamada entre eles para se evitar congestionamento Atualização de dados. Retorno e saída de dados. Formatações de entrada e saída.
[editar] Dicas para teste unitário
Existem seis regras básicas para testes unitários.
- 1º Revisão de código.
- 2º Existe erro sem tratamento ou log para seu registro.
- 3º Existe erro na tela do usuário .
- 4º O usuário esta recebendo somente mensagens claras e sem vínculos técnicos conforme os padrões da empresa. .
- 5º Todo processo lento tem apresentação de status de progresso conforme os padrões da empresa.
- 6º Os padrões de formatação estão atendendo a região que o usuário especifico BR,EUA e etc.