36
rojeto de Software com Testes Unitários e TD Lucas Nazário dos Santos

Instituto Stela S&T#001, Projeto de software com testes unitários

Embed Size (px)

DESCRIPTION

Show & Tell #1, por Lucas Nazário dos Santos. Hora e local: TER 16/09/08 12 h, sala VC, Instituto Stela

Citation preview

Page 1: Instituto Stela S&T#001, Projeto de software com testes unitários

Projeto de Software com Testes Unitários e TDD

Lucas Nazário dos Santos

Page 2: Instituto Stela S&T#001, Projeto de software com testes unitários

Apesar do seu nome, “test driven”ou “test first” development não é na realidade uma técnica de teste.

TDD força o programador a pensarem vários aspectos da funcionalidadeantes de implementá-la.

Muitas equipes utilizam “customer facing”, ou “story” tests para ajudar no desenvolvimento do código. Esses testes ilustram os requisitos e regras de negócio. Programadores escrevem código para fazer os testes passarem, o que mostra ao cliente que o código entregue endereça suas expectativas.

TDD produz código com muito menos unit-level bugs, menos bugs funcionais e uma probabilidade exponencial de endereçar as expectativas dos stakeholders.

Page 3: Instituto Stela S&T#001, Projeto de software com testes unitários

TDD foca a atenção do programador na interface e no comportamento do software.

Organizações reconhecerão os benefícios do TDD tanto como uma técnica de teste como de projeto de software.

Quando se escreve o teste antes do código, o programador decide não somente sobre a interface do software, mas também sobre o seu comportamento.

TDD foca em como a técnica guia aanálise, projeto e decisões de programação.

Page 4: Instituto Stela S&T#001, Projeto de software com testes unitários

É uma estratégia de desenvolvimento que endereça tanto o projeto quanto o teste.

TDD afeta a qualidade interna do projeto de software.

Page 5: Instituto Stela S&T#001, Projeto de software com testes unitários
Page 6: Instituto Stela S&T#001, Projeto de software com testes unitários

Agenda

1. Teste unitário

2. TDD (Test-driven development)

3. Projetando software com TDD

4. Limitações

5. O que procurar a partir daqui?

Page 7: Instituto Stela S&T#001, Projeto de software com testes unitários

Teste unitário é simples. Qualquer um pode utilizar.

Teste unitário

Page 8: Instituto Stela S&T#001, Projeto de software com testes unitários

Você não precisa de nada sofisticado.

Teste unitário

Page 9: Instituto Stela S&T#001, Projeto de software com testes unitários

Os testes unitários cooperam com a gerência de risco

Teste unitário

Page 10: Instituto Stela S&T#001, Projeto de software com testes unitários

Os testes unitários exercitam o software

Teste unitário

Page 11: Instituto Stela S&T#001, Projeto de software com testes unitários

Os testes unitários documentam as funcionalidades

Teste unitário

Page 12: Instituto Stela S&T#001, Projeto de software com testes unitários

Teste unitário

Page 13: Instituto Stela S&T#001, Projeto de software com testes unitários

Test-driven development

Red

Green

Refactor

Adiciona um teste que falha

Adiciona qualquer código

Refatora o código conforme necessário

Page 14: Instituto Stela S&T#001, Projeto de software com testes unitários

Test-driven development: exemplo

Page 15: Instituto Stela S&T#001, Projeto de software com testes unitários

Test-driven development: exemplo

Page 16: Instituto Stela S&T#001, Projeto de software com testes unitários

Test-driven development: exemplo

Page 17: Instituto Stela S&T#001, Projeto de software com testes unitários

Test-driven development: exemplo

Page 18: Instituto Stela S&T#001, Projeto de software com testes unitários

Test-driven development: exemplo

Page 19: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD Durante os primeiros dias de cadaiteração, nós discutimos as storiescom o cliente.

Nós utilizamos toda a informação capturada através das interações com os clientes para escrever high-level test cases para cada story.

Quando o desenvolvedor inicia a codificação de uma story, ele estudaos test cases para garantir que as funcionalidades básicas foram entendidas.

Assim que a codificação inicia, é escrito um teste executável simples para a story.

O programador escreve código para fazer o teste passar e então mais testes unitários podem ser adicionados para adequar a cobertura.

Page 20: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 1: Análise

Disponibilizar uma opçãopara ordenação dos itensdo carrinho de compras(por ordem de inserção ealfabética).

High-level test cases User stories

Page 21: Instituto Stela S&T#001, Projeto de software com testes unitários

Etapa 2: Projeto

Projetando software com TDD

Disponibilizar uma opçãopara ordenação dos itensdo carrinho de compras(por ordem de inserção ealfabética).

Page 22: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 2: Projeto

Page 23: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 2: Projeto

Page 24: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 2: Projeto - programação pelos pares

Page 25: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 2: Projeto - revisão pelos pares

Page 26: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 3: Codificação – 1º cenário

Projeta

CodificaProjetista/Programador

Page 27: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 3: Codificação – 2º cenário

Projeta

Codifica

ProjetistaProgramador

Page 28: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 4: Teste

Recebe

Testa

Testador

Page 29: Instituto Stela S&T#001, Projeto de software com testes unitários

Projetando software com TDD

Etapa 4: Teste

“Estudos revelaram que programadores utilizando TDD produzem códigoque passam com sucesso entre 18% e 50% mais casos de uso externodo que código produzido por grupos que não utilizam TDD.”

Software Architecture Improvement through Test-Driven Development (ACM Press, 2005)

Page 30: Instituto Stela S&T#001, Projeto de software com testes unitários

Limitações

Projeto de interfaces

Page 31: Instituto Stela S&T#001, Projeto de software com testes unitários

Limitações

Projeto de componentes intimamente relacionados a containers

Page 32: Instituto Stela S&T#001, Projeto de software com testes unitários

Onde procurar a partir daqui?

http://retriever.stela.org.br/

Page 33: Instituto Stela S&T#001, Projeto de software com testes unitários

Onde procurar a partir daqui?

http://www.junit.org/

Page 34: Instituto Stela S&T#001, Projeto de software com testes unitários

Onde procurar a partir daqui?

Page 35: Instituto Stela S&T#001, Projeto de software com testes unitários

Onde procurar a partir daqui?

Referência para os artigos

Page 36: Instituto Stela S&T#001, Projeto de software com testes unitários

MUITO OBRIGADO!Lucas Nazário dos Santos

TDD foca a atenção do programador na interface e no comportamentodo software.

Quando se escreve o teste antes do código, o programador decide nãosomente sobre a interface do software, mas também sobre o seucomportamento.

Conclusão