SlideShare uma empresa Scribd logo
1 de 139
Baixar para ler offline
#TDC2010
Código sem testes é
código já quebrado
quando foi planejado
  -- Jacob Kaplan-Moss
  um dos criadores do django
Estamos em 2010
2010 > 1960
2010 > 1999
Alguma buzzword "ágil"
você tem que estar
usando
Buzzwords são
quintessenciais
Buzzwords trazem sinergia viral e o
empowerment das melhores práticas para a
cauda longa
3 anos atrás
equipe: >40 pessoas numa mesma sala
escopo: Webapp em Tomcat
buzzwords: Bodyshop típico: cmms.. (<
1999)
2.5 anos atrás
equipe: 5 pessoas espalhadas pelo mundo
escopo: Modificações no nível de uma distro
buzzwords: Scrum, cultura de testes, sprints,
entregas semanais
5 > 40
Metodologias ágeis:
Extreme Programing(XP)
Scrum
Kanban
Feature Driven Develelopment (FDD)
Práticas ágeis:
Test Driven Development (TDD)
Behavior Driven Development (BDD)
Code refactoring
Continuous Integration
Pair Programming
Planning poker
TDD
Sustentável
Fácil
Não depende da gerência
TDD não é díficil.
Díficil é não fazer
quando voce
acostuma
Então, chega de
desculpas:
Eu não sei nada
sobre testes
O ecossistema de
testes no python
 • Tipos
 • Sabores
 • TestRunners
Tipos de testes
Doctest
def add(a,b):
  """
  testa a soma
  >>> add(1,2)
  3
  """
  return a + b
Unittest
unittest.TestCase
django.test.TestCase
django.test.TestCase
from django.test import TestCase

class SimpleTest(TestCase):
  def test_adicao(self):
    """
    Testa que a adicao de 1 + 1 da 2.
    """
    self.assertEqual(1 + 1, 2)
Sabores de testes
Unitários
Nível de função

 self.assertTrue(add(1,2),3)
Integração
Entre Módulos

 r = self.client.get('/foo')
 self.assertRedirects(r,'/login/')
 self.client.login(user_name='foo'
                       ,password='bar')
 r = self.client.get('/foo')
 self.assertEquals(r.status_code,200)
De Regressão
Correção de erros
TestRunners
Acha e Roda os testes

 • Padrão
 • py.test
 • nose
 • outros
Meu estilo

 • Django.test.TestCase
 • Unitário
    Um TestCase por modelo
    Um ou mais testes por função
• Integração
    Um por TestCase por conjunto de apps
• Regressão
    Um teste por erro
• nose / django-nose
    Acha testes
Eu não preciso de
testes
automatizados
Código evolve
Se o seu código não
tem testes refatorar ele
é um pesadelo
Imagina isso
$ cat   `find . | grep "py$" 
          | grep -v migration` | wc -l
47260
Agora isso:
$ cat   `find . | grep "py$" 
          | grep test` | wc -l
34108
Tranquilidade de
refatorar
Felicidade é um código com boa cobertura
Eu meio que não
sei o que é TDD
Ciência da computação
é tanto sobre
computadores quanto
como a astronomia é
sobre telescópios
  -- E W Dijkstra
Test Driven
Development é tanto
sobre testes assim
quanto a ciência da
computação é sobre
computadores
TDD é sobre
desenvolvimento e
qualidade
Testes são um
subproduto
TDD
TDD
Só escreve código quando testes falham
TDD
Só escreve código quando testes falham
Só escreve testes quando testes passam
Eu nunca fiz
muitos testes no
Django
Como fazer: Instala o
django
$ easy_install pip
$ pip install django
Cria o projeto
$   django-admin.py startproject foobar
$   cd foobar/
$   chmod +x manage.py
$   vi settings.py
settings.py
import os
PROJECT_PATH = os.path.abspath(
                    os.path.split(__file__)[0])
DATABASES = {'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/tmp/foobar.db', } }

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH,'templates'),
)
Hora de testar
./manage.py test

------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database 'default'...
TDD
Só escreve código quando testes falham
Só escreve testes quando testes passam
Passou
Escreve testes
Mais Testes, então
./manage.py startapp forum
cd forum/
Meu estilo (v.2)
rm tests.py
mkdir tests
touch tests/__init__.py
touch tests/test_models.py
vi tests/test_models.py
#coding:utf8
from django.test import TestCase

class ModelTest(TestCase):
Teste de importação
def test_existe(self):
  """ O topico esta la? """
  try:
    from foobar.forum.models import Topico
  except ImportError:
    self.fail('Nao existe topico')
Inclui a app no projeto
INSTALLED_APPS = (
    ...
    'foobar.forum',
)
Testa
./manage.py test

------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database 'default'...
0 testes!
nose
Acha testes para você sem que você tenha
que por eles no __init__.py
Dá pra chamar o pdb no ponto em que falha
( --pdb-failures) (ou ipdb)
django-nose
$ pip install nose
$ pip install django-nose
$ pip install NoseNotify #opcional
settings.py
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

INSTALLED_APPS = (
    ...
    'south', # migracoes
    'django_nose', # depois do south
)
NOSE_ARGS = [ '--with-notify',
    #'--pdb-failures',
]
Testa de novo
F
====================================
FAIL: O topico esta la?
------------------------------------
Traceback (most recent call last):
  File "test_models", line 18, in test_existe
    self.fail('Nao existe topico')
AssertionError: Nao existe topico
------------------------------------
Ran 1 test in 0.003s
TDD
Só escreve código quando testes falham
Só escreve testes quando testes passam
Falhou
Escreve código
vi forum/models.py
class Topico(models.Model):
    """representa um topico"""
    pass
testa
.
------------------------------------
Ran 1 test in 0.014s
Pera!
Voce gastou 8 slides para escrever um
pass?
Mas TDD é muito
lento
e por lento eu
quero dizer chato
A primeira vez é
lento
Entenda o que você
esta testando
try:
  from foobar.forum.models import Topico
except ImportError:
  self.fail('Nao existe topico')
Não teste a framework
Teste a lógica da sua applicação
Facilitadores
Continous testing
Toda vez que você salva um arquivo ele
rerola os testes
django test extensions
Faz isso para você
Ainda é um pouco tosco
django-test-extensions
$ pip install django-test-extensions
settings.py
INSTALLED_APPS = (
    ...
    'south', # migracoes
    'django_nose', # depois do south
    'test_extensions', # depois do south
)
Rodando o servidor
 $ ./manage.py runtester

ou ainda

 $ ./manage.py runtester forum
Automagicamente
nosetests --verbosity 1 --with-notify forum
.....
-------------------------------------------
Ran 5 tests in 0.457s

OK
Destroying test database 'default'...
Creating test database 'default'...
Bonus combo
django-test-extensions com NoseNotify
Mas eu não
conheco todas as
assertions
Bico
Modo mais fácil:
no ./manage shell (com ipython instalado)

 >>> from django.test import TestCase
 >>> In [2]: TestCase.assert<tab><tab>
asserts
TestCase.assert_                 TestCase.assertAlmostEqual
TestCase.assertAlmostEquals      TestCase.assertContains
TestCase.assertEqual             TestCase.assertEquals
TestCase.assertFalse             TestCase.assertFormError
TestCase.assertNotAlmostEquals   TestCase.assertNotContains
TestCase.assertNotEqual          TestCase.assertNotEquals
TestCase.assertRaises            TestCase.assertRedirects
TestCase.assertTemplateNotUsed   TestCase.assertTemplateUsed
TestCase.assertTrue              TestCase.assertNotAlmostEqual
Asserts básicas
Essas você deve usar bastante

 assertTrue(True)
 assertFalse(False)

 assertEqual(1,1)
 assertNotEqual(1,2)
Asserts amigáveis
Essas facilitam a vida para testes funcionais

 assertContains(response,texto,status)
 assertNotContains(response,texto,status)
exemplo
def test_welcome(self):
  resp = self.client.get('/',{})
  self.assertContains(resp,'<h1>Oi</h1>'
                        ,200)
Asserts amigáveis
(cont)
assertRedirects(response,nova_url)
assertTemplateUsed(response,template)
assertTemplateNotUsed(response,template)
assertFormError(response,form,fields,errors)
WTF?
assertAlmostEqual

assertNotAlmostEqual
Não quase iguais?
a = 1.21
b = 1.22
#sao iguais ate a primeira casa
self.assertAlmostEqual(a,b,1)
#diferentes depois da segunda casa
self.assertNotAlmostEqual(a,b,2)
Asserts que eu não uso
assertRaises
Testo assim:
try:
    foobar.bang():
    self.fail('Bang tem que explodir')
except ExplodingException:
    pass
Agora é tarde
demais para TDD,
meu projeto já
existe
Pera! Olha só

 • Testes de Regressão
 • django_test_utils
Seu melhor amigo
Garante que um erro que aconteceu nunca
mais volte a acontecer
Usado por todos os grandes projetos de
software livre
Mesmo você não vai fazer mais nenhuma
forma de teste você tem que fazer esta
Testes de Regressão
Encontrou um erro
[24/Jul/2010 11:14:51] "GET / HTTP/1.1" 404 1946
Escreve um teste que
falha por causa do erro
$ vi forum/test_regression.py
cont
#coding:utf8
from django.test import TestCase

class TestRegression(TestCase):
    """testes de regressao"""
cont+=1
def test_regress_home(self):
  """Home precisa existir"""
  r = self.client.get('/', {})
  self.assertEqual(r.status_code, 200)
Testa e falha
..E
================================================
ERROR: Home precisa existir
------------------------------------------------
Traceback (most recent call last):
  File "foobar/forum/tests/test_regresssion.py",
                 line 10, in test_regress_home
     r = self.client.get('/', {})
    ...
     raise TemplateDoesNotExist(name)
TemplateDoesNotExist: 404.html
Corrige o erro
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
    ...
    (r'^$', direct_to_template, {'template': 'index.html'}),
    ...
)




$ vi templates/index.html
Roda os testes e passa
nosetests --verbosity 1
....
-----------------------
Ran 4 tests in 0.025s

OK
Garantia que erros
antigos não vão
retornar para te
assombrar
Toda vez que eu
começo com TDD
mas acabo
desistindo no meio
2 formas
sustentáveis para
começar e
continuar com
TDD
Primeiro:
TDD:Eu queria ter isso
Você escreve nos testes a API que você
queria ter
Eu queria que fosse
assim:
def test_metodos(self):
  topico = Topico()
  self.assertTrue(hasattr(topico, 'titulo'))
  self.assertTrue(hasattr(topico, 'replies'))
Testa
F.
=================================================
FAIL: test_metodos (test_forum.TestForum)
-------------------------------------------------
Traceback (most recent call last):
    self.assertTrue(hasattr(topico, 'titulo'))
AssertionError

--------------------------------------------------
Ran 2 tests in 0.002s
FAILED (failures=1)
Implementa
class Topico(models.Model):
  """representa um topico"""
  titulo = models.CharField(max_length=64)
class Resposta(models.Model):
  '''Uma resposta no topico'''
  topico = models.ForeignKey(Topico,
                   related_name='replies')
Testa
..
--------------------------------------------------
Ran 2 tests in 0.002s

OK
Prós e Cons

 • Não é exatamente TDD
 • Funciona
 • Mais rápido
 • Você está perdendo cobertura
Segundo: SDT
SDT
Eu não faço TDD eu faco Stupidity-driven
testing. Quando eu faco algo estúpido, eu
escrevo um teste para garantir que eu não
vou repetir isso de novo
  --Titus Brown pycon '07
Em suma
Escreve código para solucinar um problema
Se o código quebrar de alguma forma besta
Escreve um teste para isso nunca vai
acontecer de novo
goto 10
Prós e Cons

 • Não é TDD
 • Funciona mas beira Cowboyismo
 • Cobertura só sobre o código mais frágil
 • Lembra teste de regressão
Por que lembra um
teste de regressão?
Porque é.
São testes de regressão para você mesmo.
Escrever testes é
mais complicado
que o problema
Longo sim, complicado
não
Especialmente longo para testes funcionais
django_test_utils,   o   utlimo   bastião   dos
preguiçosos
django-test-utils
$ pip install django-test-utils
settings.py
INSTALLED_APPS = (
    ...
    'south', # migracoes
    'django_nose', # depois do south
    'test_extensions', # depois do south
    'test_utils', # depois do south
    ...
)
Você começa o servidor
$ ./manage.py testmaker -a forum
Cria testes para você
Handling app 'forum'
Logging tests to foobar/forum/tests/forum_testmaker.py
Appending to current log file
Inserting TestMaker logging server...
Validating models...
0 errors found

Django version 1.2.1, using settings 'foobar.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Quando você termina
$ cd forum/tests
$ ls forum*
forum_testdata.serialized
forum_testmaker.py
Testes gerados
def test_forum_127958317459(self):
  r = self.client.get('/forum/', {})
  self.assertEqual(r.status_code, 200)
  self.assertEqual(
    unicode(r.context["paginator"]), u"None")
  self.assertEqual(
    unicode(r.context["object_list"]),
      u"[<Topico: Topico object>, <Topico: Topico object>]")
  .....
Não, não! Escrever
testes é mais
complicado que o
problema, mesmo!
Mocks e Stubs
Minta
descaradamente
para seu código
Imagina algo assim:
def calcula_queijo(request):
    sanduba = request.session["sanduba"]
    ....
Não perca tempo
Colocar algo no session do request em um
test case é chato
Hora de mockear
Existem muitas ferramentas de mock para
python
Escolha uma e vai fundo.
Não esqueça de RTFM
Eu uso o fudge
Instalar e usar
pip install fudge
Seu teste
import fudge
...
  def teste(self)
    request = fudge.Fake().has_attr(
              session={'sanduba': Sanduba() })
    calcula_queijo(request)
Eu conserto os
testes depois
PFFFFFFFFFF!
TDD não é díficil.
Díficil é não fazer
quando voce
acostuma
Créditos
http://www.flickr.com/photos/blue-moose/3528603529
Dúvidas?
Agradecimentos
http://associacao.python.org.br/
Nos vemos na PythonBrasil[6] em
Curitiba
Outubro 21 a 23
Referências
http://code.google.com/p/python-nose/
http://github.com/jbalogh/django-nose
http://github.com/garethr/django-test-extensions
http://github.com/ericholscher/django-test-utils
http://github.com/ctb/pony-build

Tdd em django sem desculpas
@fractal
petrich@gmail.com
creative commons (by) (sa)

Mais conteúdo relacionado

Mais procurados

Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPPedro Chaves
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]Rael Max
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factoryitalomaia
 
Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoLeonardo Galani
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPJessyka Lage
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Luís Cobucci
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Arthur Furlan
 
Minas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com LocustMinas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com LocustStefan Teixeira
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenterPaulino Michelazzo
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de DjangoLeandro Zanuz
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonPaula Grangeiro
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot frameworkClaudenir Freitas
 

Mais procurados (20)

Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
Python na Web
Python na WebPython na Web
Python na Web
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
 
Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitido
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SP
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.
 
Minas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com LocustMinas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com Locust
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenter
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 

Destaque

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
O que é o ruby on rails?
O que é o ruby on rails?O que é o ruby on rails?
O que é o ruby on rails?Leonardo Costa
 
Responsabilidade na Entrega Contínua por Carlos Villela
Responsabilidade na Entrega Contínua por Carlos VillelaResponsabilidade na Entrega Contínua por Carlos Villela
Responsabilidade na Entrega Contínua por Carlos VillelaThoughtworks
 
Treinamento Six Sigma LG Electronics
Treinamento Six Sigma LG ElectronicsTreinamento Six Sigma LG Electronics
Treinamento Six Sigma LG Electronicsejedelmal
 
Aula questões dissertativas
Aula   questões dissertativasAula   questões dissertativas
Aula questões dissertativasEduardo Lopes
 
Usability Ergebnisse Umfrage
Usability  Ergebnisse UmfrageUsability  Ergebnisse Umfrage
Usability Ergebnisse UmfrageNina Rebele
 
Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...
Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...
Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...Axel Bruns
 
Comment déterminer le critère de jugement et le nombre de sujets nécessaires
Comment déterminer le critère de jugement et le nombre de sujets nécessairesComment déterminer le critère de jugement et le nombre de sujets nécessaires
Comment déterminer le critère de jugement et le nombre de sujets nécessairesHubert Maisonneuve
 
Test de estereopsis
Test de estereopsisTest de estereopsis
Test de estereopsisnikitaht21
 
Evaluación diagnóstico funcional en la práctica ortomolecular.
Evaluación diagnóstico funcional en la práctica ortomolecular.Evaluación diagnóstico funcional en la práctica ortomolecular.
Evaluación diagnóstico funcional en la práctica ortomolecular.4003
 
Taller de evaluación de la agudeza visual y la visión binocular en el infante...
Taller de evaluación de la agudeza visual y la visión binocular en el infante...Taller de evaluación de la agudeza visual y la visión binocular en el infante...
Taller de evaluación de la agudeza visual y la visión binocular en el infante...Mónica Márquez
 
Nuove norme sul segreto di stato e sulle informazioni classificate
Nuove norme sul segreto di stato e sulle informazioni classificateNuove norme sul segreto di stato e sulle informazioni classificate
Nuove norme sul segreto di stato e sulle informazioni classificateDirectio
 

Destaque (20)

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Testes Funcionais
Testes FuncionaisTestes Funcionais
Testes Funcionais
 
Test First, TDD e outros Bichos
Test First, TDD e outros BichosTest First, TDD e outros Bichos
Test First, TDD e outros Bichos
 
O que é o ruby on rails?
O que é o ruby on rails?O que é o ruby on rails?
O que é o ruby on rails?
 
Test link
Test linkTest link
Test link
 
Responsabilidade na Entrega Contínua por Carlos Villela
Responsabilidade na Entrega Contínua por Carlos VillelaResponsabilidade na Entrega Contínua por Carlos Villela
Responsabilidade na Entrega Contínua por Carlos Villela
 
Treinamento Six Sigma LG Electronics
Treinamento Six Sigma LG ElectronicsTreinamento Six Sigma LG Electronics
Treinamento Six Sigma LG Electronics
 
Aula questões dissertativas
Aula   questões dissertativasAula   questões dissertativas
Aula questões dissertativas
 
Usability Ergebnisse Umfrage
Usability  Ergebnisse UmfrageUsability  Ergebnisse Umfrage
Usability Ergebnisse Umfrage
 
09 IBH E Assessment
09 IBH E Assessment09 IBH E Assessment
09 IBH E Assessment
 
Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...
Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...
Anatomie eines Trending Topics: Retweet-Ketten als Verbreitungsmechanismus fü...
 
Comment déterminer le critère de jugement et le nombre de sujets nécessaires
Comment déterminer le critère de jugement et le nombre de sujets nécessairesComment déterminer le critère de jugement et le nombre de sujets nécessaires
Comment déterminer le critère de jugement et le nombre de sujets nécessaires
 
Test de estereopsis
Test de estereopsisTest de estereopsis
Test de estereopsis
 
Evaluación diagnóstico funcional en la práctica ortomolecular.
Evaluación diagnóstico funcional en la práctica ortomolecular.Evaluación diagnóstico funcional en la práctica ortomolecular.
Evaluación diagnóstico funcional en la práctica ortomolecular.
 
Taller de evaluación de la agudeza visual y la visión binocular en el infante...
Taller de evaluación de la agudeza visual y la visión binocular en el infante...Taller de evaluación de la agudeza visual y la visión binocular en el infante...
Taller de evaluación de la agudeza visual y la visión binocular en el infante...
 
Nuove norme sul segreto di stato e sulle informazioni classificate
Nuove norme sul segreto di stato e sulle informazioni classificateNuove norme sul segreto di stato e sulle informazioni classificate
Nuove norme sul segreto di stato e sulle informazioni classificate
 
ALGA
ALGAALGA
ALGA
 
2014 ncae nvb presentation
2014 ncae  nvb presentation2014 ncae  nvb presentation
2014 ncae nvb presentation
 
3e jaars
3e jaars3e jaars
3e jaars
 
Advertising Quiz
Advertising QuizAdvertising Quiz
Advertising Quiz
 

Semelhante a TDD para Projetos Existentes: Como Adicionar Testes de Regressão e Melhorar Gradativamente

Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosDionatan default
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developingRenato Oliveira
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de djangoFilipe Ximenes
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverStefan Teixeira
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMAdriano Bertucci
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilBruno Eustáquio
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoRenan Carvalho
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 

Semelhante a TDD para Projetos Existentes: Como Adicionar Testes de Regressão e Melhorar Gradativamente (20)

Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
TDD do seu jeito
TDD do seu jeitoTDD do seu jeito
TDD do seu jeito
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriver
 
TDD em 220V
TDD em 220VTDD em 220V
TDD em 220V
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu código
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 
Debugging node
Debugging nodeDebugging node
Debugging node
 

TDD para Projetos Existentes: Como Adicionar Testes de Regressão e Melhorar Gradativamente