Este documento describe la artesanía de software y el desarrollo dirigido por pruebas (TDD). La artesanía de software se refiere a crear software de alta calidad mediante el compromiso continuo con la profesión. TDD implica escribir pruebas unitarias primero para guiar el desarrollo de código de producción a través de iteraciones rápidas. El documento también discute cómo escribir pruebas unitarias efectivas que sean legibles, confiables y fáciles de mantener.
Artesanía de software y desarrollo dirigido por pruebas (tdd)Software Guru
Parece que cada día más y más gente habla acerca de la artesanía de software.
Sin embargo, ¿te haz preguntado porqué prácticamente todos los lideres de este movimiento y la gente "cool" usan y recomiendan usar TDD?, ¿Cual es la conexión entre las pruebas unitarias y la artesanía de software?, ¿Porqué cada aspirante a Artesano debería estar usando TDD?
Algunas personas lo han intentado un par de veces y han terminado dándose por vencidos. En esta charla, abordaremos algunas de las dificultades para hacer el "switch" y hacer que TDD trabaje para nosotros, en lugar de luchar a cada paso del camino.
Algunas personas lo han intentado un par de veces y han terminado dándose por vencidos. En esta charla, abordaremos algunas de las dificultades para hacer el "switch" y hacer que TDD trabaje para nosotros, en lugar de luchar a cada paso del camino.
Slides utilizadas en charla a alumnos de Ingeniería del Software en la Escuela Politécnica de Gijón sobre:
- Necesidad de testing
- Problemas dentro de un proyecto
- Automatización de pruebas con Seleniun
Artesanía de software y desarrollo dirigido por pruebas (tdd)Software Guru
Parece que cada día más y más gente habla acerca de la artesanía de software.
Sin embargo, ¿te haz preguntado porqué prácticamente todos los lideres de este movimiento y la gente "cool" usan y recomiendan usar TDD?, ¿Cual es la conexión entre las pruebas unitarias y la artesanía de software?, ¿Porqué cada aspirante a Artesano debería estar usando TDD?
Algunas personas lo han intentado un par de veces y han terminado dándose por vencidos. En esta charla, abordaremos algunas de las dificultades para hacer el "switch" y hacer que TDD trabaje para nosotros, en lugar de luchar a cada paso del camino.
Algunas personas lo han intentado un par de veces y han terminado dándose por vencidos. En esta charla, abordaremos algunas de las dificultades para hacer el "switch" y hacer que TDD trabaje para nosotros, en lugar de luchar a cada paso del camino.
Slides utilizadas en charla a alumnos de Ingeniería del Software en la Escuela Politécnica de Gijón sobre:
- Necesidad de testing
- Problemas dentro de un proyecto
- Automatización de pruebas con Seleniun
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
Charla del webcat del 5 de marzo de 2014.
Recorrido por diferentes técnicas de desarrollo, eliminando dolores en cada paso, hasta llegar a BDD y completar aquello donde BDD nos falla.
Visión utilitaria de técnicas y metodologías.
¡Muerte a los puristas! :)
Charla evento TestingUY 2016 - Test Driven Development en la Plataforma Sales...TestingUy
Expositor: Aldo Fernández
Resumen:
El Testing es una de las claves de éxito para el desarrollo de software a largo plazo convirtiéndose en un componente fundamental en todo el proceso. Las mejores prácticas de Salesforce recomiendan utilizar un proceso de desarrollo basado en testing (Test Driven Development) lo cual significa que el desarrollo de los componentes correspondientes al testing se realizan al mismo tiempo que el código de implementación. Que tan cierto es esto en nuestros proyectos? Cuales son los beneficios a corto y largo plazo? Cómo motivar a los desarrolladores a pensar primero en el testing y luego en la solución? Hablemos sobre mitos y verdades del Test Driven Development.
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...Federico Toledo
Charla sobre testing de performance y testing automatizado, centrado en las herramientas que nos permiten realizar estas tareas, pero sin dejar de lado la importancia de la metodología para aprovechar el máximo provecho que se le pueden sacar a estas herramientas.
Esto fue en el marco del evento organizado por CDA-Perú, en el que se presentó la alianza estratégica entre CDA y Abstracta, a través de la cual se ofrecen servicios especializados de testing automatizado y performance a empresas de Perú.
Java 8, tópicos de estudio para el examen upgradeSoftware Guru
El track que debes seguir para obtener la certificación en java 8 ya sea que no tengas certificación o estés certificado en una versión previa java 5, 6 ó 7
En detalle se hablará de los tópicos de estudio que pertenecen a la versión de java 8.
Esta platica esta dirigida a todos los colegas desean realizar el upgrade de certificación en java 8 y a todos aquellos que están convencidos de que una certificación les ayudara en su carrera profesional.
Introducción al análisis estático de código en java para mejorar la calidad del software tomando como referencia mejores prácticas, estándares y optimización de código.
GCV Agile testing y videojuegos (Francisco Moreno) - Gestión de la Calidad en...Federico Peinado
Curso teórico-práctico sobre cómo funciona la gestión de la calidad en la industria del entretenimiento interactivo y cómo realizar de manera profesional el control de calidad y el trabajo de probador de videojuegos.
Una técnica para mantener el código escalable: Code smells.
Se incluyen varios ejemplos usando ruby, como se ve bien, y como se ve mejor.
También como pueden tomar ventajas de los linters y CI servers para alertar desviaciones en tiempo real
Transparencias de la charla con la que participamos en las III Jornadas de Java de Alicante.
En las transparencias se muestran algunas herramientas para implantar metodologías ágiles en Java y se comentan algunas anécdotas e historias de diferentes implantaciones.
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
Charla del webcat del 5 de marzo de 2014.
Recorrido por diferentes técnicas de desarrollo, eliminando dolores en cada paso, hasta llegar a BDD y completar aquello donde BDD nos falla.
Visión utilitaria de técnicas y metodologías.
¡Muerte a los puristas! :)
Charla evento TestingUY 2016 - Test Driven Development en la Plataforma Sales...TestingUy
Expositor: Aldo Fernández
Resumen:
El Testing es una de las claves de éxito para el desarrollo de software a largo plazo convirtiéndose en un componente fundamental en todo el proceso. Las mejores prácticas de Salesforce recomiendan utilizar un proceso de desarrollo basado en testing (Test Driven Development) lo cual significa que el desarrollo de los componentes correspondientes al testing se realizan al mismo tiempo que el código de implementación. Que tan cierto es esto en nuestros proyectos? Cuales son los beneficios a corto y largo plazo? Cómo motivar a los desarrolladores a pensar primero en el testing y luego en la solución? Hablemos sobre mitos y verdades del Test Driven Development.
Evento CDA Abstracta - Perú 2015 - Testing de performance y testing automátic...Federico Toledo
Charla sobre testing de performance y testing automatizado, centrado en las herramientas que nos permiten realizar estas tareas, pero sin dejar de lado la importancia de la metodología para aprovechar el máximo provecho que se le pueden sacar a estas herramientas.
Esto fue en el marco del evento organizado por CDA-Perú, en el que se presentó la alianza estratégica entre CDA y Abstracta, a través de la cual se ofrecen servicios especializados de testing automatizado y performance a empresas de Perú.
Java 8, tópicos de estudio para el examen upgradeSoftware Guru
El track que debes seguir para obtener la certificación en java 8 ya sea que no tengas certificación o estés certificado en una versión previa java 5, 6 ó 7
En detalle se hablará de los tópicos de estudio que pertenecen a la versión de java 8.
Esta platica esta dirigida a todos los colegas desean realizar el upgrade de certificación en java 8 y a todos aquellos que están convencidos de que una certificación les ayudara en su carrera profesional.
Introducción al análisis estático de código en java para mejorar la calidad del software tomando como referencia mejores prácticas, estándares y optimización de código.
GCV Agile testing y videojuegos (Francisco Moreno) - Gestión de la Calidad en...Federico Peinado
Curso teórico-práctico sobre cómo funciona la gestión de la calidad en la industria del entretenimiento interactivo y cómo realizar de manera profesional el control de calidad y el trabajo de probador de videojuegos.
Una técnica para mantener el código escalable: Code smells.
Se incluyen varios ejemplos usando ruby, como se ve bien, y como se ve mejor.
También como pueden tomar ventajas de los linters y CI servers para alertar desviaciones en tiempo real
Transparencias de la charla con la que participamos en las III Jornadas de Java de Alicante.
En las transparencias se muestran algunas herramientas para implantar metodologías ágiles en Java y se comentan algunas anécdotas e historias de diferentes implantaciones.
Introducción a la optimización de software, consejos, metodología y tools.
Ejemplo y documentación en:
https://drive.google.com/open?id=13egVpX2uOSX7-BWyCvFrpZul6EOEM6_U
Inteligencia Artificial y Ciberseguridad.pdfEmilio Casbas
Recopilación de los puntos más interesantes de diversas presentaciones, desde los visionarios conceptos de Alan Turing, pasando por la paradoja de Hans Moravec y la descripcion de Singularidad de Max Tegmark, hasta los innovadores avances de ChatGPT, y de cómo la IA está transformando la seguridad digital y protegiendo nuestras vidas.
Es un diagrama para La asistencia técnica o apoyo técnico es brindada por las compañías para que sus clientes puedan hacer uso de sus productos o servicios de la manera en que fueron puestos a la venta.
3Redu: Responsabilidad, Resiliencia y Respetocdraco
¡Hola! Somos 3Redu, conformados por Juan Camilo y Cristian. Entendemos las dificultades que enfrentan muchos estudiantes al tratar de comprender conceptos matemáticos. Nuestro objetivo es brindar una solución inclusiva y accesible para todos.
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Telefónica
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0xWord escrito por Ibón Reinoso ( https://mypublicinbox.com/IBhone ) con Prólogo de Chema Alonso ( https://mypublicinbox.com/ChemaAlonso ). Puedes comprarlo aquí: https://0xword.com/es/libros/233-big-data-tecnologias-para-arquitecturas-data-centric.html
3. Manifiesto por la Artesanía de Software
Como aspirantes a artesanos de software, estamos elevando el nivel
de desarrollo de software profesional practicándolo y ayudando a
otros a aprenderlo. A través de este trabajo hemos llegado a valorar:
• No sólo software que funciona, • sino también el software bien
diseñado
• No sólo responder al cambio, • pero también agregar valor de
forma sostenida
• No sólo los individuos y las • sino también una comunidad de
interacciones, profesionales
• No sólo la colaboración con los • sino también de asociaciones
clientes, productivas
Es decir, en la búsqueda de los elementos de la izquierda hemos
encontrado que los elementos de la derecha son indispensables.
4. ¿Qué es la Artesanía de Software?
• Es acerca de crear conciencia de lo que está mal con
el actual estado de la práctica.
• Es acerca de hacer el mejor trabajo posible.
• Comprometerse con nuestra profesión.
• Sentir orgullo del trabajo bien hecho.
• Mejorar continuamente nuestras habilidades.
• Satisfacer a nuestros usuarios con software de
calidad.
5. Lo que la Artesanía de Software NO es
Ingeniería de Software:
“La promesa implícita de la ingeniería
de software es que si tienes un
proceso sistemático y
cuantificado, cualquiera puede
desarrollar software exitosamente.”
-Pete McBreen
6. Lo que la Artesanía de Software NO ES
• No es solo acerca de “Código Bonito”.
• Darle la espalda a los aspectos de negocio y
concentrarse SOLO en el lado técnico.
• Buscar salidas fáciles, “aceite de víbora” o
“balas de plata”.
• Crear certificaciones artificiales y un modelo
de negocio a su alrededor.
9. ¿Qué es TDD? (cont.)
• Es tomar la responsabilidad de la calidad de
nuestro código.
• Es entender el código que escribimos en todo
momento, no solo “suponer” que
entendemos.
• Es una habilidad y como tal, requiere práctica
para dominarse.
• Es una disciplina.
11. Tres Reglas
(según Robert C. Martin)
• No se permite escribir
ningún código de
producción sin tener una
prueba que falle.
• No se permite escribir más
de la prueba que lo
necesario para fallar (y no
compilar es fallar).
• No está permitido escribir
más código de producción
que el necesario para pasar
la prueba unitaria ACTUAL.
12. Paso a paso…
from unittest import main, TestCase
class TestPrimeFactors(TestCase):
def testPrimesOf0(self):
self.assertEquals([], factorsOf[0])
if __name__ == '__main__':
main()
E
======================================================================
ERROR: testPrimesOf0 (__main__.TestPrimeFactors)
----------------------------------------------------------------------
NameError: global name 'factorsOf' is not defined
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
13. Paso a paso…
...
def factorsOf(n):
return []
...
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
14. Paso a paso…
...
def testPrimesOf0to1(self):
self.assertEquals([], factorsOf(0))
self.assertEquals([], factorsOf(1))
...
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
15. Paso a paso…
...
def testPrimesOf2(self):
self.assertEquals([2], factorsOf(2))
...
.F
======================================================================
FAIL: testPrimesOf2 (__main__.TestPrimeFactors)
----------------------------------------------------------------------
AssertionError: Lists differ: [2] != []
----------------------------------------------------------------------
Ran 2 tests in 0.029s
FAILED (failures=1)
16. Paso a paso…
...
def factorsOf(n):
if n > 1:
return [n]
return []
...
..
----------------------------------------------------------------------
Ran 2 test in 0.000s
OK
17. Paso a paso…
...
def testPrimesOf2to3(self):
self.assertEquals([2], factorsOf(2))
self.assertEquals([3], factorsOf(3))
...
..
----------------------------------------------------------------------
Ran 2 test in 0.000s
OK
19. Paso a paso…
...
def factorsOf(n):
result, factor = [], 2
if n > 1:
while n > 1:
return [n]
while n % factor == 0:
result.append(factor)
n /= factor
factor += 1
return []
return result
...
..
----------------------------------------------------------------------
Ran 2 test in 0.000s
OK
20. Aprendiendo TDD: Trampas
• Las pruebas se tornan difíciles de escribir, por lo
que sentimos una desaceleración importante.
• Corren lentamente, lo que nos volvemos
renuentes a ejecutarlas frecuentemente.
• Son frágiles, por lo que cambios aparentemente
sin importancia en el código provocan que un
montón de pruebas fallen.
• Mantenerlas en forma y funcionando se vuelve
complejo y consume tiempo.
21. Escribiendo pruebas unitarias efectivas
“Las pruebas unitarias deben ser
legibles, confiables y fáciles de mantener”
-Roy Osherove
“The Art of Unit Testing”
22. Escribiendo pruebas unitarias efectivas:
Legibilidad
• Mis pruebas son tan importantes como el
código de producción.
• Aspirar a que mis pruebas se lean como una
“receta de cocina” (patrón composed
method).
• Si no es posible determinar lo que una prueba
está haciendo, es probable que en realidad
esté verificando múltiples cosas.
23. Escribiendo pruebas unitarias efectivas:
Confiabilidad
• Evita a toda cosa colocar lógica en el código de
una prueba (if-then, switch/case, etc).
• Evita calcular el valor esperado DENTRO de la
prueba.
• Evita compartir estado entre pruebas.
• Usa inyección de dependencias.
24. Escribiendo pruebas unitarias efectivas:
Mantenibilidad
• Mantén simple el código de inicialización.
• Crea fixtures o incluso casos de prueba
especializados para cada escenario.
• Si es necesario, convierte cada escenario en
una clase de prueba individual.
• Si una parte del código es particularmente
difícil de probar, busca problemas en el diseño
del mismo.
25. Escribiendo pruebas unitarias efectivas:
Rapidez
• Una prueba unitaria efectiva debería
ejecutarse en milisegundos, NO EN
SEGUNDOS.
• Si las pruebas no son rápidas, NO SE USARÁN.
• Mantén conjuntos pequeños y bien enfocados
de pruebas, además de la suite global.
26. Aprendiendo TDD (revisado)
• Comienza con algo sencillo (¡pero no te detengas
ahí!)
• Escribe muchas pruebas (tantas como puedas).
• Familiarízate con el ritmo y las reglas de TDD.
• Cuando encuentres algo que no sabes como
probar, apóyate en un compañero.
• Nunca dejes de aprender.
27. Bibliografía
• “The Clean Coder” de Robert C. Martin.
• “Test Driven Development: By Example” de Kent Beck.
• “The Art of Unit Testing” de Roy Osherove.
• “Growing Object-Oriented Software, Guided by Tests” de
Steve Freeman y Nat Pryce.
• “Agile Java: Crafting Code with Test-Driven Development”
de Jeff Langr.
• “Diseño Ágil con TDD” de Carlos Ble Jurado -> !Es gratis!
http://www.dirigidoportests.com/el-libro