SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
HACIENDO DE LAS
PRUEBAS
Tus mejores aliadas
Johanna Mantilla Duque
@senekis
¿Y QUÉ SE ENTIENDE POR PRUEBAS?

Mecanismo de detección de:




       Errores               Regresiones
¿Y QUÉ SE ENTIENDE POR PRUEBAS?




 Partes del código      Facilita la
 que no se utiliza   refactorización
¿POR QUÉ UTILIZAR PRUEBAS?



Arreglar problemas pequeños cada pocas horas
   toma menos tiempo que arreglar problemas
       enormes justo antes de la fecha limite.
¿POR QUÉ UTILIZAR PRUEBAS?



    Permiten descubrir errores cometidos sin
  darse cuenta tanto en el diseño como en la
                  construcción del software.
¿POR QUÉ UTILIZAR PRUEBAS?


Verificación: ¿Estamos construyendo el
producto correctamente?




    Validación: ¿Estamos construyendo el
                      producto correcto?
¿CÓMO UTILIZAR
 LAS PRUEBAS?
AGRUPACIÓN DE PRUEBAS

1. Pruebas unitarias
   ○ Unidades de software: Clases, Modelos,
      Helpers

2. Pruebas de integración
   ○ Módulos del sistema

3. Pruebas del sistema
   ○ El sistema en su integridad, interacción del
      usuario
TECNOLOGÍA




                                                       Te
            ec                  Selenium




                                                          stu
        Rsp




                                                              ni
                                                                t
                            s
                     o nj
                   nt
            P    ha                Fabricator
                                                              b kit
                                                        a- we
                                                       r
                                                y ba
Faker                                      C ap

                            Cucumber
PRUEBAS UNITARIAS
Ej. Guardar la dirección a partir de georefenciación

class Report
  field :address, :type => String
  ...
  def localize(lat, long)
    self.address = GeoDataService.address(lat, long)
    self.save
  end
end
PRUEBAS UNITARIAS

describe "Report Model" do
 let(:report) { Report.new }

  class GeoDataService
    def address(lat, long)
     Faker::Address.street_address
    end
  end
...
end
Pruebas unitarias UNITARIAS
        PRUEBAS


it "Should save the address field" do
    GeoDataService.should_receive(:address).
      with('4.630024', '-74.094973').
      and_return('Carrera 42 # 22BIS-2')
   report.localize('4.630024', '-74.094973')
   report.address.should == "Carrera 42 # 22BIS-2"
 end
Pruebas unitarias UNITARIAS
         PRUEBAS

Test Unit

 class TestDeMates < Test::Unit::TestCcase
  def test_suma
   assert_equal 4, Mates.run("2+2")
   assert_equal 4, Mates.run("1+3")
   assert_equal 5, Mates.run("5+0")
   assert_equal 0, Mates.run("-5 + 5")
  end
end
PRUEBAS DE INTEGRACIÓN

describe ReportsController do
 let(:report) { Fabricate(:report) }

 describe "GET index" do
  it "Should render the reports index" do
    get :index
    assigns[:reports].should == [report]
    response.should render_template('index')
  end
 end
PRUEBAS DEL SISTEMA
describe "the signup process", :type => :request do
 let(:user) { Fabricate(:user, :email => 'user@example.
com', :password => 'caplin')}

 it "signs me in" do
   within("#session") do
     fill_in 'Login', :with => 'user@example.com'
     fill_in 'Password', :with => 'password'
   end
   click_link 'Sign in'
 end
end
¿QUÉ SE DEBE TENER EN CUENTA?

Eliminar comportamientos aleatorios
¿QUÉ SE DEBE TENER EN CUENTA?


No depender de la anterior ni de la siguiente
¿QUÉ SE DEBE TENER EN CUENTA?

Funcionar sin conexión a red
¿QUÉ SE DEBE TENER EN CUENTA?

Deben ser independientes del momento en que
se ejecutan
¿QUÉ SE DEBE TENER EN CUENTA?
No detallar cada uno de los pasos de tu
metodo


                 no decir cómo, sino qué hace
FILOSOFÍAS DE DESARROLLO
Test Driven Development (TDD)



Escribir las pruebas primero, luego
implementación y refactorización.
Test Driven Development (TDD)
"El propósito del desarrollo guiado por pruebas es
lograr un código limpio que funcione. La idea es que
los requisitos sean traducidos a pruebas, de este
modo, cuando las pruebas pasen se garantizará el
software cumple con los requisitos que se han
establecido."

                                           Wikipedia
VENTAJAS TDD
● Evita escribir código innecesario

● Aplicación de mejor calidad en menos tiempo

● Permite al programador centrarse en la tarea
  actual
BEHAVIOR DRIVEN DEVELOPMENT
            (BDD)
Versión mejorada de TDD que responde las
inquietudes, tales como:
 ● Cuando iniciar el proceso
 ● Que probar y qué no probar
BDD                   BDD


Scenario: Create a post under a category
 Given a category exists
 And I am signed in as an admin
 When I go to create a new post
 And I select "Category 1" from "Categories"
 And I press "Create"
 And I go to view all posts
 Then I should see a post with the category
"Category 1"
COVERAGE



Rcov
Simplecov
Coverage




                  Imagen: https://github.com/colszowka/simplecov
Gracias
@senekis




           @nounproject

Contenu connexe

Similaire à Haciendo de las pruebas tus mejores aliadas

Clase 02 ciclo de vida
Clase 02 ciclo de vidaClase 02 ciclo de vida
Clase 02 ciclo de vidamaticainfor
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Circuitmaker 130215084951-phpapp02
Circuitmaker 130215084951-phpapp02Circuitmaker 130215084951-phpapp02
Circuitmaker 130215084951-phpapp02maria_amanta
 
CURSO DE PROGRAMACION BASICA - Cap 1
CURSO DE PROGRAMACION BASICA - Cap 1CURSO DE PROGRAMACION BASICA - Cap 1
CURSO DE PROGRAMACION BASICA - Cap 1Daniel Irene
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy codeBiko
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Perl nagios
Perl nagiosPerl nagios
Perl nagiosgabalesa
 
Artesanía de software y desarrollo dirigido por pruebas (tdd)
Artesanía de software y desarrollo dirigido por pruebas (tdd)Artesanía de software y desarrollo dirigido por pruebas (tdd)
Artesanía de software y desarrollo dirigido por pruebas (tdd)Software Guru
 
Funciones y procedimientos
Funciones y procedimientosFunciones y procedimientos
Funciones y procedimientosRichard Robalino
 
Examen ISC
Examen ISCExamen ISC
Examen ISCivan mtz
 
Ejemplos de pseudocódigo
Ejemplos de pseudocódigoEjemplos de pseudocódigo
Ejemplos de pseudocódigoLiliana Nieto
 

Similaire à Haciendo de las pruebas tus mejores aliadas (20)

Clase 02 ciclo de vida
Clase 02 ciclo de vidaClase 02 ciclo de vida
Clase 02 ciclo de vida
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Circuitmaker 130215084951-phpapp02
Circuitmaker 130215084951-phpapp02Circuitmaker 130215084951-phpapp02
Circuitmaker 130215084951-phpapp02
 
Circuit maker
Circuit makerCircuit maker
Circuit maker
 
CURSO DE PROGRAMACION BASICA - Cap 1
CURSO DE PROGRAMACION BASICA - Cap 1CURSO DE PROGRAMACION BASICA - Cap 1
CURSO DE PROGRAMACION BASICA - Cap 1
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy code
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
nagios
 nagios nagios
nagios
 
Perl nagios
Perl nagiosPerl nagios
Perl nagios
 
T-ESPE-047677-D.pptx
T-ESPE-047677-D.pptxT-ESPE-047677-D.pptx
T-ESPE-047677-D.pptx
 
Artesanía de software y desarrollo dirigido por pruebas (tdd)
Artesanía de software y desarrollo dirigido por pruebas (tdd)Artesanía de software y desarrollo dirigido por pruebas (tdd)
Artesanía de software y desarrollo dirigido por pruebas (tdd)
 
Funciones y procedimientos
Funciones y procedimientosFunciones y procedimientos
Funciones y procedimientos
 
Tdd
TddTdd
Tdd
 
Examen ISC
Examen ISCExamen ISC
Examen ISC
 
Modulo 1
Modulo 1Modulo 1
Modulo 1
 
Ejemplos de pseudocódigo
Ejemplos de pseudocódigoEjemplos de pseudocódigo
Ejemplos de pseudocódigo
 

Dernier

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Dernier (11)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Haciendo de las pruebas tus mejores aliadas

  • 1. HACIENDO DE LAS PRUEBAS Tus mejores aliadas Johanna Mantilla Duque @senekis
  • 2. ¿Y QUÉ SE ENTIENDE POR PRUEBAS? Mecanismo de detección de: Errores Regresiones
  • 3. ¿Y QUÉ SE ENTIENDE POR PRUEBAS? Partes del código Facilita la que no se utiliza refactorización
  • 4. ¿POR QUÉ UTILIZAR PRUEBAS? Arreglar problemas pequeños cada pocas horas toma menos tiempo que arreglar problemas enormes justo antes de la fecha limite.
  • 5. ¿POR QUÉ UTILIZAR PRUEBAS? Permiten descubrir errores cometidos sin darse cuenta tanto en el diseño como en la construcción del software.
  • 6. ¿POR QUÉ UTILIZAR PRUEBAS? Verificación: ¿Estamos construyendo el producto correctamente? Validación: ¿Estamos construyendo el producto correcto?
  • 8. AGRUPACIÓN DE PRUEBAS 1. Pruebas unitarias ○ Unidades de software: Clases, Modelos, Helpers 2. Pruebas de integración ○ Módulos del sistema 3. Pruebas del sistema ○ El sistema en su integridad, interacción del usuario
  • 9. TECNOLOGÍA Te ec Selenium stu Rsp ni t s o nj nt P ha Fabricator b kit a- we r y ba Faker C ap Cucumber
  • 10. PRUEBAS UNITARIAS Ej. Guardar la dirección a partir de georefenciación class Report field :address, :type => String ... def localize(lat, long) self.address = GeoDataService.address(lat, long) self.save end end
  • 11. PRUEBAS UNITARIAS describe "Report Model" do let(:report) { Report.new } class GeoDataService def address(lat, long) Faker::Address.street_address end end ... end
  • 12. Pruebas unitarias UNITARIAS PRUEBAS it "Should save the address field" do GeoDataService.should_receive(:address). with('4.630024', '-74.094973'). and_return('Carrera 42 # 22BIS-2') report.localize('4.630024', '-74.094973') report.address.should == "Carrera 42 # 22BIS-2" end
  • 13. Pruebas unitarias UNITARIAS PRUEBAS Test Unit class TestDeMates < Test::Unit::TestCcase def test_suma assert_equal 4, Mates.run("2+2") assert_equal 4, Mates.run("1+3") assert_equal 5, Mates.run("5+0") assert_equal 0, Mates.run("-5 + 5") end end
  • 14. PRUEBAS DE INTEGRACIÓN describe ReportsController do let(:report) { Fabricate(:report) } describe "GET index" do it "Should render the reports index" do get :index assigns[:reports].should == [report] response.should render_template('index') end end
  • 15. PRUEBAS DEL SISTEMA describe "the signup process", :type => :request do let(:user) { Fabricate(:user, :email => 'user@example. com', :password => 'caplin')} it "signs me in" do within("#session") do fill_in 'Login', :with => 'user@example.com' fill_in 'Password', :with => 'password' end click_link 'Sign in' end end
  • 16. ¿QUÉ SE DEBE TENER EN CUENTA? Eliminar comportamientos aleatorios
  • 17. ¿QUÉ SE DEBE TENER EN CUENTA? No depender de la anterior ni de la siguiente
  • 18. ¿QUÉ SE DEBE TENER EN CUENTA? Funcionar sin conexión a red
  • 19. ¿QUÉ SE DEBE TENER EN CUENTA? Deben ser independientes del momento en que se ejecutan
  • 20. ¿QUÉ SE DEBE TENER EN CUENTA? No detallar cada uno de los pasos de tu metodo no decir cómo, sino qué hace
  • 22. Test Driven Development (TDD) Escribir las pruebas primero, luego implementación y refactorización.
  • 23. Test Driven Development (TDD) "El propósito del desarrollo guiado por pruebas es lograr un código limpio que funcione. La idea es que los requisitos sean traducidos a pruebas, de este modo, cuando las pruebas pasen se garantizará el software cumple con los requisitos que se han establecido." Wikipedia
  • 24. VENTAJAS TDD ● Evita escribir código innecesario ● Aplicación de mejor calidad en menos tiempo ● Permite al programador centrarse en la tarea actual
  • 25. BEHAVIOR DRIVEN DEVELOPMENT (BDD) Versión mejorada de TDD que responde las inquietudes, tales como: ● Cuando iniciar el proceso ● Que probar y qué no probar
  • 26. BDD BDD Scenario: Create a post under a category Given a category exists And I am signed in as an admin When I go to create a new post And I select "Category 1" from "Categories" And I press "Create" And I go to view all posts Then I should see a post with the category "Category 1"
  • 27. COVERAGE Rcov Simplecov Coverage Imagen: https://github.com/colszowka/simplecov
  • 28. Gracias @senekis @nounproject