CI3715 Sep. – Dic. 2014
Agenda
•
Programación
–
Programación por pares
–
Programación dirigida por casos de prueba (TDD)
–
Práctica
Programación por pares
•
Programación por pares (45 min)
–
Introducción y descripción breve del concepto (10 min)
–
Recomendaciones (10 min)
•
Mostrar video de la sesión buena.
•
Notar las cosas que se hicieron bien.
–
Anti-valores (10 min)
•
Mostrar video de la sesión de antivalores.
•
Notar los antivalores que se mostraron en el video.
–
Discusión con los estudiantes de sus dudas y posibles
A simple vista, la programación en parejas es un concepto muy simple. Dos programadores trabajan juntos en un equipo en la misma tarea.
PERO
Programación por pares
Programación por pares
Si fuera tan fácil y funciona, eso sería todo lo que hay que decir.
Hay, sin embargo, las personas y personalidades involucradas…
Conductor
Navegante Siguiente línea de código,
sintaxis, API, clase bajo Python
estamos en la dirección correcta, los requisitos, las alternativas, siguiente casos de prueba, el impacto .
Puesto de la pareja
" ¿Eh?
Programación por pares es un estilo de programación en la que dos programadores trabajan codo con codo en equipo , colaborando continuamente en el mismo diseño , algoritmo , código o prueba.
Programación por pares
También es muy importante cambiar los roles periódicamente entre el conductor y el navegante
Programación por pares
Cambio de roles
Programación por pares
... O no emparejar, esta es la pregunta
La confianza y trabajo en equipo Tiempo
Moral
Transferencia del Conocimiento
Calidad
La mejora del aprendizaje
kryptonita.
Programación por pares
Los siete mitos de la programación en parejas
Programación por pares
Mito 1:
La carga de trabajo será doble, con dos haciendo el trabajo que uno puede
hacer.
Mito 2:
Nunca volveré a trabajar solo. Yo no podría soportarlo!
Mito 3:
Va a funcionar bien sólo con el socio adecuado
.
Mito 4
: La programación en parejas es bueno para la formación. Pero, una vez
que sabes lo que estás haciendo, es una pérdida de tiempo
Mito 5:
Nunca voy a conseguir el crédito por hacer cualquier cosa. Voy a tener
que compartir todo el reconocimiento con mi pareja
Mito 6:
El navegador sólo encuentra errores de sintaxis. Qué aburrido es eso! Los
compiladores pueden hacer mejor eso que los humanos.
Mito 7:
Las únicas veces que he hecho bien algún trabajo interesante, es cuando
estoy solo. Ahora con esto de PP, nunca voy a hacer nada! La
Sesión normal de programación en parejas
Programación por pares
Sesión normal de programación en parejas
Programación por pares
¿Cómo ayuda?
Programación por pares
•
Revisión continua.
•
Menos defectos, estos se
detectan a tiempo
•
Mejo Calidad del Diseño
•
Mejor Solución de Problemas
•
Más económico
•
La presión de pareja asegura la
entrega oportuna
•
Rápido método práctico para el
aprendizaje
•
Mejor inducción de nuevos
miembros del equipo
•
Ahorra esfuerzo de
documentación Intra-Equipo
•
Menos distracción conduce a
una mayor productividad
•
Mejora de la satisfacción
•
Progreso sostenible: Ayuda a
reducir la velocidad y pensar
•
Mejor Trabajo en Equipo y
Comunicación
•
Gestión de proyectos:
Más económico
Más económico
Anti patrón de programación en parejas
Programación por pares
Programación por pares
Programación por pares
El emparejamiento es delicado - Cosas a tener en cuenta ...
•
Parejas sin rotación
•
Sólo una persona conduce
•
Par Distraído
•
Emparejamiento selectivo más cerca de una
salida
Programación por pares
Puntos de resistencia - Cosas a tener en cuenta …
•
Dificultad para convencer a las partes interesadas para
que dos personas trabajen en una misma tarea
•
Todo el mundo se establece en una "zona de confort"
El emparejamiento podría alterarlo
•
Sentido de dueño del código
•
Las personas que no se preocupan
•
Los desarrolladores no participan en Estimación y
Planificación
Programación por pares
Agenda
•
Programación
–
Programación por pares
–
Programación dirigida por casos de prueba (TDD)
–
Práctica
Pruebe antes con PyUnit
Añadir el esqueleto de la clase y métodos (sin
contenido)
Retrabajar
Agregar caso de prueba
Ejecutar la prueba
Agenda
•
Programación
–
Programación por pares
–
Programación dirigida por casos de prueba (TDD)
–
Práctica
25
26
Añadir el esqueleto de la clase y métodos (sin
27
29
30
32
34
35
TDD en la practica…
Requerimiento: desarrollar una función que toma dos argumentos y los suma con TDD:
entero + entero, string + string lista + lista
entero + string; convierte el entero a una cadena antes de concatenación
string o un entero +lista, añade el enero a la lista (independientemente de si es el primero o segundo argumento).
Crear un proyecto nuevo en PyDev: Proyecto-Taller3
Añadir un modulo nuevo denominado: mdlmytdd
Modificamos la clase Test:
class clsTestSuma (unittest.TestCase):
Añadir el método testSumaEntero:
def testSumaEntero(self): pass
Probar (Ctrl+F11)
Modificar el método testSumaEntero:
def testSumaEntero(self):
self.assertEqual(7, suma(3,4), “3+4 debe ser 7”)
36
PyUnit en la practica…
Crear un nuevo modulo y una nueva función (Ctrl+1 y click con botón derecho
del mouse sobre mdlsumar) :
from mdlsumar import sumar
Codificar la función o método sumar:
def sumar(x, y) pass
Probar (Ctrl+F11)
Modificar la función sumar:
def sumar(x, y) return x+y
Añadir el método testSumaString: def testSumaString(self):
pass
Probar (Ctrl+F11)
Modificar el método testSumaString :
def testSumaString(self):
self.assertEqual(‘34’, Sumar(´3’,’4’), “3+4 debe ser 34”)
37
PyUnit en la practica…
Añadir el método testSumaListas:
def
testSumaListas(self):
pass
Probar (Ctrl+F11)
Modificar el método testSumaListas:
def
clsTestSumaListas
(self):
self.assertEqual([1,2,3,4], suma([1,2],[3,4]), "[1,2] + [3,4]
debe es [1,2,3,4]")
Probar (Ctrl+F11)
Añadir el método testSumaNumeroString:
def
testSumaNumeroString(self):
pass
38
PyUnit en la practica…
Añadir el método testSumaListas:
def
testSumaListas(self):
pass
Probar (Ctrl+F11)
Modificar el método testSumaListas :
def
clsTestSumaListas
(self):
self.assertEqual([1,2,3,4], suma([1,2],[3,4]), "[1,2] + [3,4]
debe es [1,2,3,4]")
Probar (Ctrl+F11)
Añadir el método testSumaNumeroString:
def
testSumaNumeroString(self):
pass
39
PyUnit en la practica…
Modificar el método testSumaNumeroString:
def testSumaNumeroString (self):
self.assertEqual('1two', suma(1,'two'), "1 + two debe ser 1two")
Probar (Ctrl+F11)
EL TEST FALLA
Modificar la función o método suma del modulo mdlsumar:
import numbers
def suma(x, y):
if isinstance(x, list) and not isinstance(y, list): return x + [y]
elif isinstance(y, list) and not isinstance(x, list): return y + [x]
elif isinstance(x, numbers.Number) and isinstance(y, str): return str(x)+y
elif isinstance(x, str) and isinstance(y, numbers.Number): return x+str(y)
return x+y
40