• No se han encontrado resultados

2 TallerAbril 17 2015 VFinal1a

N/A
N/A
Protected

Academic year: 2020

Share "2 TallerAbril 17 2015 VFinal1a"

Copied!
89
0
0

Texto completo

(1)

CI3715 Abril. – Julio. 2014

Taller 2

Profesores:

• Alejandro Teruel [email protected]

• Ascander Suarez [email protected]

• Alfonso Reinoza: [email protected]

• Jean Carlos Guzmán [email protected]

• Armando Ruperez [email protected]

(2)

Verificación:

- PyUnit

• Gestión de Configuraciones y Versiones de software:

- Introducción a Git básico

• Equipo:

- Ejercicio sobre CVs y entrevistas

• Tarea 2

(3)

3

+ Sistema

Incremento

Dar prioridad a funcionalidades Escriba pruebas de aceptación Ejecute pruebas de aceptación Escriba y Ejecute pruebas Unitarias

(4)

Web UI

HttpUnit/Canoo/Selenium

PyUnit /JUnit (Bajo Nivel) FIT/Fitnesse (Alto Nivel)

Lógica del Negocio Cactus Pruebas de Rendimiento y carga JMeter/JUnitPerf GUI Jemmy/Abbot/JFCUnit/…

(5)

5 5

 PyUnit es un ambiente de pruebas unitarias para

programas en Python creado por Steve Purcell, basándose en el JUnit desarrollado por Erich Gamma y Kent Beck.

Escribir casos de prueba

Ejecución de casos de prueba

Pasa/ Falla? (Resultado esperado = resultado obtenido?)

 Consiste en un marco que proporciona todas las

herramientas para el análisis.

marco: conjunto de clases y convenciones para usarlas.

 Está integrado en Eclipse a través de un plug-in

gráfico.

(6)

Production code

def doubleOf2()

#…

Test code

def

testDouble2F(

):

Casos de prueba en código Python

Marco de pruebas

Caso de prueba = “

secuencia de operaciones +

entradas + valores esperados "

(7)

 "Sustituye el programa en ejecución para comprobar el

comportamiento del programa"

 Todo lo que tenemos que hacer es:

Importar unittest

escribir una subclase de unittest.TestCase

añadir a la misma uno o más métodos de pruebaif __ name__ == "__main__":

unittest.main ()

(8)

TestCase

Clase base para las clases que contienen pruebas

assert * ()

Familia Método para comprobar condiciones

TestSuite

Permite agrupar varios casos de prueba

Testsuite Caso 2 Caso 1

(9)

9

import unittest

from stack import *

class StackTester(unittest.TestCase):

def testStack(self): aStack = Stack()

if not aStack.isEmpty():

print(“Stack should be empty!”)

def testStackPush(self): aStackPush(10) (-4)

print(“First element: “ +aStack.pop())

Debe comenzar con “test” class Stack def isEmpty() // ... //

def push(int i) def pop() class Stack def isEmpty() // ... //

def push(int i) def pop()

(10)

 Son métodos públicos definidos en la clase base

TestCase

 Sus nombres comienzan con “assert" y se utilizan en los

métodos de prueba

es. assertTrue (aStack.empty (), “stack should be empty”);

 Si la condición es falsa:

La prueba falla

La ejecución salta el resto del método de prueba

El mensaje (si lo hay) se imprime como explicación de por qué

falla

 Si la condición es verdadera:

(11)

11

 Para una condicion booleana

assertTrue(condition, “message for fail”);assertFalse(condition, “message for fail”);

 Para objeto, int, long, and valores byte

assertEquals(expected_value, expression);

 Para flotante y valores dobles

assertEquals(expected, expression, error);

 Para referencias a objetos

assertNull(reference)

assertNotNull(reference)

obtenido

(12)

def testStack(self): aStack = Stack()

assertTrue(aStack.isEmpty(), “Stack should be empty!”)

(13)

13

class StackTester(unittest.TestCase): def testStackEmpty(self):

aStack = Stack()

assertTrue(aStack.isEmpty(), “Stack should be empty!”)

def testStackNotEmpty(self): aStack = Stack()

aStack.push(10)

assertTrue(not aStack.isEmpty(), “Stack should not be empty!”)

def testStackOperations(self): aStack = Stack()

aStack.push(-4)

assertEquals(-4, aStack.pop())

Code Modularization …

(14)

 Para cada clase de caso de prueba, PyUnit

ejecuta la totalidad de sus métodos de prueba públicos

 es decir, aquellos cuyo nombre comienza con "test"

hace caso omiso de todo lo demás ...

 Las clases de prueba pueden contener "métodos de

ayuda" a condición de que sean:

no públicas, o

cuyo nombre no comienza con "test"

(15)

15

 Hay dos casos:

1. Esperamos un comportamiento normal y no hay

excepciones.

2. Esperamos un comportamiento anómalo y luego

una excepción.

(16)

try

# Llamamos al método con los parámetros correctos

object.method("Parameter") assertTrue(true) // OK

catch(PossibleException e)

fail(“method should not fail !!!“)

class TheClass

def method(String p)

class TheClass

def method(String p)

(17)

17 try:

# llamamos al método con parámetros erróneos

object.method(None)

fail(“method should fail!!”)

catch(PossibleException as e): assertTrue(true) # OK

class TheClass: def method(p):

#can raise PossibleException

class TheClass: def method(p):

(18)

ShoppingCart cart; Book book;

def setUp():

self.cart = ShoppingCart()

self.book = Book(“PyUnit", 29.95)

ShoppingCart cart; Book book;

def setUp():

self.cart = ShoppingCart()

self.book = Book(“PyUnit", 29.95)setUp() el método inicializa objeto(s) bajo prueba.

se llama antes de cada método de prueba

tearDown() el método libera objeto(s) bajo prueba

Se llama después de cada método de casos de prueba.

(19)

En Eclipse

Crear un nuevo proyecto Bowling

Configurar

19

(20)

PyUnit en eclipse

En Bowling

 Crear classGame

(21)

En Eclipse

Crea un nuevo proyecto

Bowling

 Configurar

21

PyUnit en eclipse

(22)

En Eclipse

Crea un nuevo proyecto Bowling

Configurar

PyUnit en eclipse

 Programar Bowling

 Crear testBowling

(23)

En Eclipse

Crea un nuevo proyecto Bowling

Configurar

23

PyUnit en eclipse

 Programar Bowling

 Crear testBowling

Programar casos de prueba

(24)

En Eclipse

Crea un nuevo proyecto Bowling

Configurar

PyUnit en eclipse

 Programar Bowling

 Crear testBowling

Programar casos de prueba

 Crear testBowling

 Ejecutar como Python unit-test

(25)

25

Análisis de dominio de datos

Basado en el clásico juego de la vieja…

 Requerimos crear una función que dado un juego de la

vieja, determine quién es el ganador.

 Adicionalmente debemos realizar una Suite de Prueba

para certificar nuestro algoritmo.

 ¿Cuál es el dominio de la función?

(26)

Análisis de dominio de datos

 Si numeramos las casillas del tablero (0 al 8)

0 12 3 45 6 78

 Podemos definir un juego como un arreglo de 9

posiciones donde la posición representa el turno y el valor representa la casilla seleccionada por el jugador { 0, 8 , 2, 1, 6, … }

(27)

27

Análisis de dominio de datos

 ¿Cuántos valores contiene este conjunto?

9! = 362.880 Valores

 ¿Son todos ellos juegos válidos?

 Partamos del ejemplo anterior…

{ 0, 8 , 2, 1, 6, … }

{ 0, 8 , 2, 1, 6, 4, 3, … } En este juego ya el primer jugador ha

ganado…

 Después que el ganador logró la línea, es irrelevante

(28)

Hagamos el ejercio con PyUnit...

Tenemos la clase tictactoe

Definamos una suite de prueba con:

Casos No Frontera

Casos Frontera

(29)

29

Hagamos el ejercio con PyUnit...

Variables que tenemos

Rango de la función? (0,1,2,-1)

Turno de Victoria (Ganador?)

Tipo de Victoria (Fila, Columna, Diagonal)

Número de Fila, Columna o Diagonal

(30)

• Verificación:

- PyUnit

Gestión de Configuraciones y Versiones de software:

- Introducción a Git básico

• Equipo:

- Ejercicio sobre CVs y entrevistas

• Tarea 2

(31)

¿ Qué es?

¿ Qué hace?

¿Cómo funciona?

¿ Cómo usarlo?

(32)
(33)

Git Directory (Repository)

commit (en nomenclatura de la Teoría: remite y registra en repositorio local

Número de versión por hash (SHA-1) del commit:

d921970aadf03b3cf0e71becdaab3147ba71cdef

EI hash corto: d92197

(34)
(35)
(36)

File New Project PyDev Project

(37)

37

(38)

Crea una carpeta: miRepositorioGit

Botón derecho sobre el proyecto BowlingGame : Team → Share Project → Git Next

(39)
(40)
(41)
(42)
(43)

43

Botón derecho en Bowling  Team  Show in History

(44)
(45)

45

(46)
(47)

47

(48)
(49)

49

(50)
(51)

51

(52)
(53)

53

(54)
(55)

55

(56)
(57)

57

(58)
(59)

59

Ejecutamos el merge

(60)
(61)

61

(62)
(63)

63

Merge tool

(64)
(65)

65

(66)
(67)

67

(68)
(69)

69

(70)
(71)

71

(72)
(73)
(74)
(75)
(76)
(77)
(78)
(79)
(80)
(81)

81

(82)
(83)

• Verificación:

- PyUnit

• Gestión de Configuraciones y Versiones de software:

- Introducción a Git básico

Equipo:

- Ejercicio sobre CVs y entrevistas

• Tarea 2

(84)

Introducción a los CVs y

entrevistas

Reunir los estudiantes en grupos de 2-3.

Cada grupo representa a una empresa desarrolladora de software.

Darle a cada grupos 3 CVs de gente fuera del grupo para que seleccionen UN

candidato a entrevistar para un empleo en la empresa desarrolladora de software que con base en el CV.

Una vez que decidan la selección, conducir una discusión en grupo centrado en:

 ¿Qué elementos formales del CV les llamó la atención positiva o negativamente? (alguno se destacó en presentación o claridad?).

¿En base a qué criterios seleccionaron un candidato sobre los demás? [Que digan sus criterios de selección, sin nombrar nombres).

En forma anónima cada equipo le colocará una "nota" que representa su interés en los CVs que estudió (desde 1, que representa cero interés en entrevistar a 5 que representa muchísimo interés por entrevistar).

(85)

87

Introducción a los CVs y

entrevistas

Buscar una forma en que cada estudiante escoja un currículo de alguien que desconoce en el salón

-o al men-os que n-o c-on-oce much-o.

Darle cinco minutos a que revise el currículo.

 Darle 5 minutos a la mitad del salón para que "entreviste" la persona cuyo CV tiene.

 Luego, otros 5 minutos para que los entrevistados pasen a ser entrevistadores.

En forma anónima cada estudiante marca un papelito como Sí/no emplearía a quien entrevistó. Se recogen los papelitos y se anotan los resultados en pizarra.

Llevar una discusión:

¿qué razones piensan ellos que pesaron para otorgar los sí? [Mientras entrevistan estar pendiente de lenguaje corporal para

comentarlos.

¿Se vieron nervios? (gente sentada en el borde de su asiento, brazos cruzados, recogidos/retraídos).  ¿Se vieron "sobrados? (desparramados en asientos)?

¿Había quienes evitaban contacto visual? (estar pendiente del CV en vez del entrevistado, entre los entrevistadores...).  Seleccionen un par de elementos con que ustedes se sientan cómodos y menciónenlos.

La idea es ver si pueden empezar a sensibilizar a los estudiantes que la comunicación se hace por varios canales con

características distintas:

escrita no es lo mismo que cara-a-cara.

Lo que hace el cuerpo puede enviar una señal contradictoria a lo que se dice y esta señal puede calificar

(86)

• Verificación:

- PyUnit

• Gestión de Configuraciones y Versiones de software:

- Introducción a Git básico

• Equipo:

- Ejercicio sobre CVs y entrevistasTarea 2

(87)

89

Referencias

Documento similar

4.- Másteres del ámbito de la Biología Molecular y Biotecnología (9% de los títulos. Destaca el de Biotecnología Molecular de la UB con un 4% y se incluyen otros

de su infinito amor.. imperio sobre las nubes, que.. desgracias vencidas, se vu elven las calamidades risueñas.. Publicad sus maravillas, sus inumerables beneficios ,

beralidades piadosas de esta envidiable R eyna, que fué grande, no para nuestra miseria, como el insolente Difilo.. Pedro Crisd- logo que est in cwlis

Este libro intenta aportar al lector una mirada cuestiona- dora al ambiente que se desarrolló en las redes sociales digitales en un escenario de guerra mediática mantenido por

Repasa con tu dedo índice por el interior de las letras y rellena las vocales e con papel picado de colores, intenta picar trozos pequeños de papel para no dejar espacios en

El proceso de la fotosíntesis causó un aumento en el dióxido de carbono y la muerte para muchos aerobios obligados.. Slide 20 (Answer)

Esta formación se produce mediante el doctorado (13 alumnos, lo que significa el 32% de los encuestados), diferentes másteres entre los que destacan de nuevo el de Profesorado

Reglamento (CE) nº 1069/2009 del parlamento Europeo y del Consejo de 21 de octubre de 2009 por el que se establecen las normas sanitarias apli- cables a los subproductos animales y