Desenvolvimento em .Net - Testes Unitários

Preview:

Citation preview

Desenvolvimento em .Net

Testes

Objectivos● identificar diferentes tipos de testes● descrever conceito de teste unitário● perceber vantagens de utilização de testes

unitários● conhecer estrutura de testes (test-fixtures ou

test-suites)● conhecer ferramentas disponiveis para .net e

progress

Objectivos● saber criar testes em .net● saber criar testes em progress

Tipos de testes● Teste de Caixa Branca (qualidade do código)● Teste de Caixa Preta (entradas e saídas)● Teste de Interface (funcional e usabilidade)● Teste de Integração (inter-componentes)● Teste de Sistema (inter-sistemas)

A Abordagem Clássica● A forma mais tradicional de teste consiste em

adoptar um revisor (par ou especialista em teste) após cada atividade => Auditoria

RevisorRevisorDesenvolvedorDesenvolvedor

Nono nonono nonoNo nonono nono noNo nono nono no

Nono nono noNono nonono nono

Artefato

Nono nonono nonoNo nonono nono noNo nono nono no

Nono nono noNono nonono nono

Artefato

Nono nonono nonoNo nonono nono noNo nono nono no

Nono nono noNono nonono nono

Log Erros

Nono nonono nonoNo nonono nono noNo nono nono no

Nono nono noNono nonono nono

Log Erros

A Abordagem Clássica● O Revisor normalmente é alguém com maior

experiência e conhecimento do produto, capaz de identificar erros mais complexos

● O Revisor é, normalmente, mais caro para a empresa

● Desenvolvedores menos experientes geram mais erros

● Mais erros exigem mais horas de revisão e setup (além do custo do retrabalho)

● Desenvolvedores Inexperientes => $$$$$$$$$

Nova perspectiva● Testes Unitários

– servem para validar um pedaço de código (tipicamente um modulo caixa preta).

– devem ser possiveis de correr automaticamente– devem ser executados muito rapidamente

● (centenas ou milhares de testes em poucos segundos)– são sempre preparados pelo programador.– garantem que um bocado de codigo criado é válido.

Exemplo: teste que verifica se a execução de um procedimento que soma dois números funciona

Comparação● Testes funcionais / de aceitação / integação /

homologação– preparados por alguém fora da equipa de

desenvolvimento. – garantem que a execução do código produzido

para resolver a tarefa faz sentido, ou seja traduz completamente para software o requisito que foi definido pelo cliente.

Exemplo: na aplicação é necessário existir alguma função que some dois números?

Quando é a fase de testes?● Durante o desenvolvimento e não após o

desenvolvimento!– algumas metodologias advogam até a criação dos

testes antes do desenvolvimento (Test-Driven Development)

● reduz o tempo que se irá gastar com ferramentas de debug

● esforço de correcção de um defeito cresce exponencialmente ao longo do tempo

● cria confiança– sabemos que estamos a construir pedaços de

código em que podemos confiar

Porquê Testar durante o Desenvolvimento?

Desculpas habituais para não criar testes

● Demora muito tempo– é evidente que fazer um teste, ou seja ter mais uma

tarefa, vai gastar mais tempo do que só fizesse o programa

– no entanto se essa tarefa for sendo feita durante o periodo de desenvolvimento a produtividade global será superior

Desculpas habituais para não criar testes

● Não é trabalho do programador criar testes, ou,● o programador é pago para programar e não

para escrever testes– concordamos que:

● o programador deve criar código● mas código que funcione● se não o testou como sabe que funciona?

– será que é mais rentável passar n horas à caça de bugs do que n horas a criar os testes que os evitem?

Desculpas habituais para não criar testes

● Não posso testar porque ainda não tenho os requisitos todos– então também não pode criar o código

correspondente a esse pedido...

Testes Unitários● formalizam os testes● numa linguagem que o programador domina

– porque são feitos na mesma linguagem de programação que o programa a testar

● e auto documentam o código– mostram programaticamente exemplos concretos

da utilização dos módulos a testar

Testes Unitários com .Net● http://www.nunit.org/

– \\vitorsilva\downloads\programas\NUnit-2.2.0.msi ● http://www.testdriven.net/

– \\vitorsilva\downloads\programas\TestDriven.NET-1.0.915d

Testes Unitários com .Net● criar nova solução● criar projecto do tipo class library chamado

testes unitarios● acrescentar classe chamada Helper

Testes Unitários com .Net● criar projecto do tipo class library chamado

testeprojecto● adicionar referencia a nunit.framework.dll● adicionar referencia ao projecto testesunitarios

Testes Unitários com .Net● acrescentar nova classe

Testes Unitários com .Net● correr esse teste

Testes Unitários com .Net● erro na inicialização da variável max

– vamos mudar para max as integer = 0

Testes Unitários com .Net● voltar a correr teste

Testes Unitários com .Net● vamos acrescentar mais uma condição que

sabemos que é verdadeira e testar essa condição

Testes Unitários com .Net● depois de olhar atentamente para o código...

Revisão – Testes Unitários● formalizam os testes● numa linguagem que o

programador domina– porque são feitos na mesma

linguagem de programação que o programa a testar

● e auto documentam o código– mostram programaticamente

exemplos concretos da utilização dos módulos a testar

Testes Unitários com .Net● já agora experimentem inicializar o array com

-1, -2 e -3 e vejam se continua a funcionar...

Testes Unitários em Progress● ProUnit

– \\vitorsilva\downloads\libs\prounit ● Punit

– \\vitorsilva\downloads\libs\punit

Testes Unitários em Progress● desenvolver o mesmo teste com uma das

frameworks indicada

Objectivos● identificar diferentes tipos de testes● descrever conceito de teste unitário● perceber vantagens de utilização de testes

unitários● conhecer estrutura de testes (test-fixtures ou

test-suites)● conhecer ferramentas disponiveis para .net e

progress

Objectivos● saber criar testes em .net● saber criar testes em progress

Recommended