Este documento discute técnicas para aplicar pruebas dirigidas por desarrollo (TDD) en código existente, como refactorizaciones encadenadas y objetos simuladores. Explica que el código existente a menudo tiene mal diseño con acoplamientos y dependencias que dificultan la escritura de pruebas. Propone romper estas dependencias mediante refactorizaciones para permitir la aplicación de TDD de manera incremental. Incluye un ejemplo de importación de clientes para ilustrar el proceso.
Hacer un sistema, sin probar, es lanzarlo al precipicio.
Las pruebas son fundamentales, pero claro, probar sin un método es lo mismo que no probar, es probar sólo una parte del sistema y dejar lo demás al azar.
TDD es una técnica de eXtreme Programming con la que las pruebas y el código se escriben a la vez. No antes cuando el sistema sólo es una abstracción. No después cuando en realidad ya da flojera escribirlas. A la vez que se escribe el código, van las pruebas.
TDD es un método ágil y eficaz de lograr un sistema Probado, y Funcional.
Hacer un sistema, sin probar, es lanzarlo al precipicio.
Las pruebas son fundamentales, pero claro, probar sin un método es lo mismo que no probar, es probar sólo una parte del sistema y dejar lo demás al azar.
TDD es una técnica de eXtreme Programming con la que las pruebas y el código se escriben a la vez. No antes cuando el sistema sólo es una abstracción. No después cuando en realidad ya da flojera escribirlas. A la vez que se escribe el código, van las pruebas.
TDD es un método ágil y eficaz de lograr un sistema Probado, y Funcional.
Las Pruebas Unitarias, son una técnica esencial en la búsqueda de generar software con calidad. Ejemplo de una prueba de unidad con código java utilizando NetBeans y JUnit
Charla evento TestingUY 2017 - Automatización en gran escalaTestingUy
Expositor: Franco Santi
Resumen: En general los proyectos de automatización suelen seguir un patrón similar, el mismo tipo de trabajo, duración, tamaño de equipo, tecnologías, objetivos, entre otros. Pero, ¿qué ocurre cuando un proyecto sale de la regla y su dimensión se multiplica en todos los aspectos?. La primer acción que pensamos naturalmente es aumentar los recursos asignados, ¿pero es eso suficiente? ¿Cuáles son las variables que entran en juego al escalar?. El objetivo de esta charla es, basado en proyectos reales, brindar tips y herramientas que pueden ser de utilidad en situaciones en que la escala comienza a ser un desafío y causal de futuros problemas.
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...TestingUy
Expositor: Rodrigo Gómez
Resumen: El mockeo es una herramienta utilizada principalmente por los desarrolladores; para la creación de software. Su uso para pruebas, fuera de lo que son test unitarios tiende a ser más acotada. Hoy en día, el aumento de la complejidad de las aplicaciones, así como el manejo de un mayor número de pruebas automáticas, hace que utilicemos más esta herramienta; para poder realizar nuestras pruebas.
Los objetivos de esta charla son:
difundir el uso y utilidad, de esta herramienta.
establecer cómo puede servirnos para mejorar nuestras pruebas.
compartir un caso real de implementación, que se utilizó para solucionar problemas concretos.
Taller evento TestingUY 2015 - Gestión de Casos de Prueba con TESTLINKTestingUy
Expositores: Giulliana Scuoteguazza y Belen Luna
Resumen:
Testlink es una herramienta de gestión de pruebas muy popular en el mundo. Ofrece grandes facilidades para la gestión y organización de los Casos de prueba. Muy útil para gestionar proyectos de testing, tanto las tareas de gestión de requerimientos como de casos de prueba. Permite optimizar los tiempos del equipo de testing y tener un control sobre el avance y la cobertura del testing. Tiene integración con herramientas de gestión de incidentes como Mantis Bug Tracker.
En este workshop aprenderán sobre las principales funcionalidades de la herramienta y variedad de reportes que es posible generar. Se realizarán ejercicios prácticos, de modo que permitan a los asistentes entrenar, ver resultados de lo aprendido y luego poder aplicar los conocimientos en sus tareas cotidianas.
La metodología que se explicará es extrapolable a cualquier otra herramienta de gestión de pruebas, se usa TestLink por ser una buena alternativa que no genera costos extra.
Las Pruebas Unitarias, son una técnica esencial en la búsqueda de generar software con calidad. Ejemplo de una prueba de unidad con código java utilizando NetBeans y JUnit
Charla evento TestingUY 2017 - Automatización en gran escalaTestingUy
Expositor: Franco Santi
Resumen: En general los proyectos de automatización suelen seguir un patrón similar, el mismo tipo de trabajo, duración, tamaño de equipo, tecnologías, objetivos, entre otros. Pero, ¿qué ocurre cuando un proyecto sale de la regla y su dimensión se multiplica en todos los aspectos?. La primer acción que pensamos naturalmente es aumentar los recursos asignados, ¿pero es eso suficiente? ¿Cuáles son las variables que entran en juego al escalar?. El objetivo de esta charla es, basado en proyectos reales, brindar tips y herramientas que pueden ser de utilidad en situaciones en que la escala comienza a ser un desafío y causal de futuros problemas.
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...TestingUy
Expositor: Rodrigo Gómez
Resumen: El mockeo es una herramienta utilizada principalmente por los desarrolladores; para la creación de software. Su uso para pruebas, fuera de lo que son test unitarios tiende a ser más acotada. Hoy en día, el aumento de la complejidad de las aplicaciones, así como el manejo de un mayor número de pruebas automáticas, hace que utilicemos más esta herramienta; para poder realizar nuestras pruebas.
Los objetivos de esta charla son:
difundir el uso y utilidad, de esta herramienta.
establecer cómo puede servirnos para mejorar nuestras pruebas.
compartir un caso real de implementación, que se utilizó para solucionar problemas concretos.
Taller evento TestingUY 2015 - Gestión de Casos de Prueba con TESTLINKTestingUy
Expositores: Giulliana Scuoteguazza y Belen Luna
Resumen:
Testlink es una herramienta de gestión de pruebas muy popular en el mundo. Ofrece grandes facilidades para la gestión y organización de los Casos de prueba. Muy útil para gestionar proyectos de testing, tanto las tareas de gestión de requerimientos como de casos de prueba. Permite optimizar los tiempos del equipo de testing y tener un control sobre el avance y la cobertura del testing. Tiene integración con herramientas de gestión de incidentes como Mantis Bug Tracker.
En este workshop aprenderán sobre las principales funcionalidades de la herramienta y variedad de reportes que es posible generar. Se realizarán ejercicios prácticos, de modo que permitan a los asistentes entrenar, ver resultados de lo aprendido y luego poder aplicar los conocimientos en sus tareas cotidianas.
La metodología que se explicará es extrapolable a cualquier otra herramienta de gestión de pruebas, se usa TestLink por ser una buena alternativa que no genera costos extra.
Facilitadores asombrosos: logrando mejores conversaciones e interaccionesJuliana Betancur
¿Cómo podemos ayudar a que clientes y equipos logren sus objetivos? ¿Cómo crear entornos participativos que propicien las mejores conversaciones y que a su vez nos permitan lograr resultados óptimos? En esta presentación hablaremos de la facilitación como herramienta para lograr que las personas trabajen creativa, colaborativa y efectivamente en pro de una misma meta y profundizaremos en las habilidades que nos harán facilitadores asombrosos, como primer escalón en nuestro camino hacia el coaching ágil.
http://www.visual-engin.com/blog/testing-protocolos-y-extensiones-ios-workshop/
Workshop Testing, protocolos y extensiones:
- Objetivos
- Requisitios
- Protocols
- Configurar proyecto en xcode
- Tests unitarios
- Integración continua
- Material de interés
Presentado por ingenieros Alberto Irurueta y Alejandro García
Slides del taller presentado por mi persona y Marcos Montaño en el Regional Scrum Gathering Bolivia 2014. Contiene una corta introducción sobre lo que es refactorización y una pequeña demostración del proceso.
Charla de Iker (540) en el Open Space 10 aniversario de Biko. Cómo trabajar con código legado
Después de leernos el libro “Working effectively with legacy code” explicaremos algunos ejemplos chulos que explican en el libro sobre como trabajar con código legado, introducir testing y limpiar el código. Teórica y también práctica ya que entraremos a ver ejemplos en código.
Presentación del meetup de "Gasteiz Developers" acerca de cuidar el código, guiados por el libro "Clean Code: A Handbook of Agile Software Craftsmanship" de Robert C. Martin
En esta charla vamos a hablar principalmente de testing aplicado a PHP. Daremos un pequeño y rápido repaso a PHPunit, si algún asistente no lo conoce, y después nos meteremos de lleno en el meollo de la cuestión que son los "test doubles": veremos qué son, para qué sirven y como trabajar con ellos cómodamente en PHP gracias a la librería Mockery. Para terminar la sesión veremos algunos ejemplos prácticos en los que veremos aplicados algunos de los conceptos teóricos vistos anteriormente.
A brief tour about what software is and how current programming languages as Go, Ruby and Java satisfy or not its development. At the end I speculate on what the next programming languages would be if we want a paradigm shift
Si bien los hospitales conjuntan a profesionales de salud que atienden a la población, existe un equipo de organización, coordinación y administración que permite que los cuidados clínicos se otorguen de manera constante y sin obstáculos.
Mario García Baltazar, director del área de Tecnología (TI) del Hospital Victoria La Salle, relató la manera en la que el departamento que él lidera, apoyado en Cirrus y Estela, brinda servicio a los clientes internos de la institución e impulsa una experiencia positiva en el paciente.
Conoce el Hospital Victoria La Salle
Ubicado en Ciudad Victoria, Tamaulipas, México
Inició operaciones en el 2016
Forma parte del Consorcio Mexicanos de Hospitales
Hospital de segundo nivel
21 habitaciones para estancia
31 camas censables
13 camillas
2 quirófanos
+174 integrantes en su plantilla
+120 equipos médicos de alta tecnología
+900 pacientes atendidos
Servicios de +20 especialidades
Módulos utilizados de Cirrus
HIS
EHR
ERP
Estela - Business Intelligence
Escaneo y eliminación de malware en el equiponicromante2000
El malware tiene muchas caras, y es que los programas maliciosos se reproducen en los ordenadores de diferentes formas. Ya se trate de virus, de programas espía o de troyanos, la presencia de software malicioso en los sistemas informáticos siempre debería evitarse. Aquí te muestro como trabaja un anti malware a la hora de analizar tu equipo
3. Hacer TDD en código existente
Problemas
Tengo que arreglar un error …
… pero no puedo modificar código sin
escribir un test primero…
… pero no puedo escribir el test porque hay
muchas dependencias que me lo impoden…
… y debo romper esas dependencias para
poder tester …
… pero no puedo modificar código sin
escribir un test primero…
…
4. Hacer TDD en código existente
Problemas
Tengo que agregar funcionalidad …
… pero no puedo modificar código sin
escribir un test primero…
… pero no puedo escribir el test porque el
código es muy complicado, no lo entiendo…
… y debo modificarlo para entenderlo …
… pero no puedo modificar código sin
escribir un test primero…
…
5. Hacer TDD en código existente
Problema: Mal diseño
Código no entendible (malos nombres,
mala distribución de responsabilidades,
poca cohesión, etc).
Mucho acoplamiento (referencia a recursos
externos, mala descomposición funcional,
etc)
Solución
Refactoring, objetos simuladores, romper
dependencias
6. Ejemplo
Customer Import
El sistema importa desde archivo clientes y
sus direcciones.
Formato de archivo:
C,Pepe,Sanchez,D,22333444
A,San Martin,3322,Olivos,1636,BsAs
A,Maipu,888,Florida,1122,Buenos Aires
C,Juan,Perez,C,23-25666777-9
A,Alem,1122,CABA,1001,CABA
Clientes
Direcciones
del Cliente
7. Ejemplo
Customer Import
Hay un main que prueba que funciona!
Pero… ¿Funciona bien?
8. Refactorings
Rename
Renombra el elemento seleccionado y
todas las referencias
Extract method
Crea un nuevo método con el código
seleccionado y lo reemplaza por un envío
de mensaje a ese método
Algunas herramientas reemplazan todas las
repeticiones de la selección
9. Refactorings
Move method
Mueve el método seleccionado a una clase
que debe estar visible desde el contexto en
que se mueve. Modifica todas las
referencias al método movido
Convert local to field - Introduce
Field
Convierte una variable local en variable de
instancia
Puede mover la inicialización de la variable
10. Refactorings
Extract to Local - Introduce Variable
Extrae el código seleccionado en una
variable local inicializada con dicho código
Introduce parameter
Reemplaza el código seleccionado con una
referencia a un parámetro, modifica todos
los senders agregando dicho parámetro
que será el código reemplazado
11. Refactorings
Change Method signature - Change
Signature
Permite modificar los elementos que
definen un método como tipo de retorno,
parametros, etc.
Modifica todos los senders para quedar de
acuerdo a la nueva definición
Cuando se agregan parámetros se puede
indicar con qué código usado en los
senders
12. Refactorings
Generalize Declared Type - Use base
type where possible
Permite reemplazar el tipo de una variable
por algún supertipo
13. Refactorings
Inline
Copia el código representado por el método
o variable a los lugares donde ser
referencia dicho método o variable
Extract to Local + Extract Method +
Inline
Se los suele utilizar para extraer código
que se encuentra separado
14. Refactorings
Encapsulate Field
Referencias a variables de instancia se
reemplazan por getter y setters
Encapsulate Field + Move
Permite mover variables de instancia a
otras clases
15. Refactorings
Extract Interface
Permite crear una interface a partir de
parte del protocolo definido en una clase
Extract Interface + Generalize Declared
Type
Sirve para crear jerarquías polimórficas
16. Refactorings
Extract Parameter Object - Extract
Class from Parameters
Permite crear una abstracción nueva a
partir de un conjunto de parámetros de un
método
Reemplaza todos los senders por la
instanciación de la nueva abstracción
17. Refactorings
Extract Parameter Object + Move
Permite crear nuevas abstracciones a partir
de código existente
Extract Parameter Object + Generalize
Declared Type
Permite usar la misma abstracción
extrayéndola de métodos distintos
18. Refactorings
Extract Superclass
Idem Extract Interface pero con clase
Extract Class
Permite encapsular variables de instancia
en una clase
19. Refactorings
Pull Up
Mueve variables de instancia y/o métodos
a la superclase o declara el método como
abstracto en la superclase
Push Down
Mueve un conjunto de variables de
instancia y/o métodos a las subclases
21. Recordar
Lo más importante: Feedback
inmediato para poder reflexionar
No preocuparme por nombres de tests al
principio
No preocuparme por organización de los
tests al principio
Recordar que es iterativo incremental
22. Recordar
Usar la computadora como
soporte/medio de aprendizaje
No correr el sistema en nuestra cabeza!
Hacerle caso a nuestro instinto
El código nos habla
No ser derrotista
Es test no es el fin, es un medio
Un programador no es buen
programador si no es buen tester
23. Recordar
TDD ayuda a generar diseños menos
acoplados
TDD NO IMPLICA BUEN DISEÑO!!
TDD nos da confianza para realizar
cambios cuando el modelo así lo
requiera
Debido al punto anterior, el sistema no
se convierte en Legacy
25. Bibliografía recomendada
Test Driven
Development By
Example.
Kent Beck, 2002.
xUnit Test Patterns:
Refactoring Test Code
Gerard Meszaros, 2007.
Working Effectively with
Legacy Code
Michael Feacthers
26. Bibliografía adicional
▶ S. Freeman, N. Pryce – Growing Object Oriented Software
with Tests, 2009
▶ K.Beck, M.Fowler – Planning Extreme Programming. 2000
▶ L.Crispin, J.Gregory - Agile Testing: A Practical Guide for
Testers and Agile Teams. 2009
▶ L.Koskela - Test Driven: TDD and Acceptance TDD for Java
Developers. 2007
▶ T.Mackinnon, S.Freeman, P.Crai - Endo-Testing: Unit
Testing with Mock Objects. 2000
http://www.mockobjects.com/files/endotesting.pdf
▶ M.Fowler - Mocks Aren't Stubs.
http://martinfowler.com/articles/mocksArentStubs.html