haciendo de las pruebas tus mejores aliadas

Post on 13-Jul-2015

1.019 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Johanna Mantilla Duque@senekis

Tus mejores aliadas

HACIENDO DE LAS PRUEBAS

¿Y QUÉ SE ENTIENDE POR PRUEBAS?

Mecanismo de detección de:

Errores Regresiones

¿Y QUÉ SE ENTIENDE POR PRUEBAS?

Partes del códigoque no se utiliza

Facilita la 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?

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

AGRUPACIÓN DE PRUEBAS

TECNOLOGÍA

Rspec

Test unit

Phan

tonjs

Cucumber

Capybara-webkit

Selenium

Faker

Fabricator

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 endend

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

Pruebas unitarias

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

Pruebas unitarias

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") endend

PRUEBAS UNITARIAS

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' endend

¿QUÉ SE DEBE TENER EN CUENTA?

Eliminar comportamientos aleatorios

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

¿QUÉ SE DEBE TENER EN CUENTA?¿QUÉ SE DEBE TENER EN CUENTA?

FILOSOFÍAS DE DESARROLLO

Test Driven Development (TDD)

Escribir las pruebas primero, luego implementación y refactorización.

"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

Test Driven Development (TDD)

● Evita escribir código innecesario

● Aplicación de mejor calidad en menos tiempo

● Permite al programador centrarse en la tarea actual

VENTAJAS TDD

Versión mejorada de TDD que responde las inquietudes, tales como:● Cuando iniciar el proceso● Que probar y qué no probar

BEHAVIOR DRIVEN DEVELOPMENT (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"

BDD

RcovSimplecovCoverage

Imagen: https://github.com/colszowka/simplecov

COVERAGE

Gracias

@senekis

@nounproject

top related