SlideShare una empresa de Scribd logo
1 de 90
A veces nuestro código parece una
escena de un crimen: hay muertos,
sangre, cosas rotas…
Si nos fijamos bien podemos ver algún
singleton o trazas de un framework de
Javascript arcano.
Por mucho que nos guste dar la culpa a
otros, generalmente el culpable es un tipo
con estas pintas.
O sea, un programador. Es decir,
nosotros.
Si trabajamos en un entorno más
enterprise, los culpables tendrán un
aspecto como este…
01/02/2016 7
Pero no os dejéis engañar por las caras
de felicidad: son cupables.
Este tipo de código nos llevará semanas o
meses después a situaciones como esta
Gritaremos a nuestro código, pero a quien
estaremos gritando es a nuestro yo
pasado.
YOUR CODE AS
@vgaltes
Esta charla está basada en este libro de
Adam Tronhill (
https://pragprog.com/book/atcrime/your-
code-as-a-crime-scene).
No dejéis de leer el libro porque es muy
interesante.
Londres 1888. Jack the Ripper acaba de
cometer su quinto asesinato. Al igual que
las cuatro veces anteriores la policía no
es capaz de encontrar al culpable.
Más de 125 años después, se sigue
intentado saber quien fue Jack the Ripper.
El profesor David Canter, utilizando
Dragnet, un software desarrollado por The
Center for Investigative Psychology, llegó
a determinar el área donde probablemente
vivía Jack the Ripper.
Dragnet considera cada localización de un
crimen como un centro de gravedad y
combina los centros matemáticamente
considerando sus distancias relativas.
Image from “Your code as crime scene” by Adam Tornhill
En los años 90 se descubrió un diario de
James Maybrick, un “merchant” del
algodón que decía ser Jack the Ripper.
Curiosamente el señor Maybrick
acostumbraba a alquilar una habitación en
Middlesex Street, que está dentro del
hotspot hallado con Dragnet.
¿Como analizar los hotspots en nuestra
base de código?
Una primera opción sería ver qué archivos
tienen más complejidad. Por ahora
asumiremos que complejidad es igual a
tamaño del fichero, que es una métrica
muy fácil de calcular y bastante fiable.
Image from “Your code as crime scene” by Adam Tornhill
Pero que pasa si tengo un archivo muy
complejo pero que hace tiempo que no
toco? Es allí donde tengo que focalizar
mis esfuerzos a día de hoy.
Una métrica que puede ser más útil es
añadir a la complejidad ya calculada la
tasa de cambio del fichero.
Parece razonable pensar que un archivo
complejo que se cambia mucho puede ser
una fuente de bugs.
Image from “Your code as crime scene” by Adam Tornhill
Un efecto colateral interesante de este
estudio es que quizá pueda obtener
información de donde está mi el dominio
de mi aplicación.
Este es el proyecto que vamos a estudiar
en parte de esta charla. (url)
Es una aplicación web que tiene una parte
importante de búsqueda.
01/02/2016 27
01/02/2016 28
Empecemos extrayendo unas estadísticas
básicas.
SFA
Y ahora hagamos un análisis de los
hotspots.
Utiliza los hostspots como guia:
priorizar problemas de diseño
realizar revisiones de código
mejorar la comunicación
Otra manera senzilla de calcular la
complejidad es analizar los espacios en
blanco del código.
A más espacios en blanco (tabulaciones)
más complejidad tendrá nuestro código.
Whitespace analysis of complexity
En la imagen anterior se puede observar
el resultado de un refactoring que se hizo
a principios de enero.
También se puede observar como se
añadió a finales de marzo una nueva
feature que causó que se incrementara la
complejidad.
Whitespace analysis of complexity
Whitespace analysis of complexity
También podemos estudiar el máximo
valor de esa complejidad a lo largo del
tiempo.
Whitespace analysis of complexity
O la media.
Whitespace analysis of complexity
O la desviación estándar.
Whitespace analysis of complexity
En el 1979 se produjeron una serie de
robos en varios pueblos de Delaware y
Pennsylvania.
La característica común de estos robos es
que fueron realizados de manera muy
“educada”.
Varios testigos identificaron al padre
Pagano como el ladrón.
El “pequeño” problema es que el padre
Pagano no era el culpable. De entre todos
los sospechosos, el padre pagano fue el
único que era un clérigo.
Antes de las ruedas de reconocimiento, la
policía mencionó que el culpable podría
ser un clérigo. Es decir, la policía influyo
en la memoria de los testigos.
“police receive surprisingly little instruction on how to
interview cooperative witnesses.”
La policía no trató la entrevistas de una
forma cooperativa, comparándola con
datos.
Tenemos que tratar nuestro código
también como algo cooperativo.
Podemos estudiar con que frecuencia
diferentes archivos son comiteados a la
vez.
De esta manera podemos descubrir
acoplamientos temporales difíciles de
descubrir con otras herramientas.
Algunos de estos acoplamientos serán
normales y correctos, pero podemos
tener otros que puedan indicar un
problema.
Temporal coupling
Siempre hemos escuchado que los tests
son una red de seguridad de nuestro
código.
Pero nuestros tests pueden no estar
codificados de una manera correcta.
Si estudiamos el acoplamiento del código
con nuestros tests, podemos descubrir
malas decisiones de implementación.
Por ejemplo, podríamos descubrir que
estamos modificando demasiado nuestros
tests end-to-end, que deberían ser unos
tests más estables.
Data from “Your code as crime scene” by Adam Tornhill
También podemos estudiar como
evoluciona nuestro código y nuestros
tests en función de los cambios que les
hacemos.
Cuando empezamos a dedicar más tiempo
a nuestros tests que a nuestro código de
producción seguramente es que hay algo
que tengamos que mirar.
Track your modification patterns
Image from “Your code as crime scene” by Adam Tornhill
La universidad de Glasgow hizo un
estudio sobre la belleza del que concluyó
que a la gente les gustaban más aquellas
caras a las que se les habían quitado las
diferencias individuales respecto la
media.
Por tanto podemos decir que la belleza es
aquello que tiene consistencia y no tiene
sorpresas.
Image from “Your code as crime scene” by Adam Tornhill
Si estamos codificando utilizando un
patrón arquitectónico, podemos medir la
belleza de nuestro código contra dicho
patrón.
Nop-Commerce
Data from “Your code as crime scene” by Adam Tornhill
A principios de los 90 Suecia tuvo su
primer serial killer. Thomas Quick
(encarcelado en una institución mental)
empezó a confesar con todo lujo de
detalles asesinatos no resueltos (sin
cuerpo presente). El problema era que
Thomas Quick no era culpable.
Cuando trabajamos nos enfrentamos a
poderosos biases sociales que debemos
entender para intentar evitarlos. Uno de
ellos es process loss, que dice que un
grupo nunca puede rendir al 100% de su
capacidad.
El echo de trabajar juntos tiene unos
costes que debemos entender
(coordinacion y motivacion).
En "The Emperor's New Clothes" Hans
Christian Andersen cuenta que al
Emperador le regalaron un cofre vacío
diciéndole que allí había ropa que solo
aquellos dignos de su confianza podían
ver.
El Emperador se las puso y caminó
desnudo por toda la ciudad, pero nadie se
atrevió a decirselo.
A este bias social se le llama Pluralistic
Ignorance y sucede cuando en un equipo
todo el mundo en privado piensa una cosa
pero nadie se atreve a decirla en público.
Hay otros biases sociales como confundir
una opinión muy repetida por la realidad,
o el de magnificar una opinión minoritaria
porque está en concordancia con las
creencias del grupo.
Hay que intentar luchar contra los biases
sociales con preguntas y con datos.
¿Qué le pasó a Thomas Quick? Fué
drogado para hacer los interrogatorios.
Los terapeutas explicaron a la policia las
confesiones de Quick después de
implantarle falsas memorias. La policia
creyño a los terapeutas.
Cuando Quick no decia una confesion
muy clara, recibia ayuda de los
interrogadores hasta conseguir una
historia plausible.
Años después gente relacionada con la
investigación confesó que no veían nada
claros los métodos del interrogatorio,
pero que en su momento no se atrevieron
a decir nada.
Una manera de descubrir
comportamientos de nuestro equipo es
hacer una nube de palabras con los logs
de nuestro repositorio de código.
Discover your team modus operandi
También podemos ver la cantidad de
autores que tiene un archivo.
Puede ser razonable pensar que cuantos
más autores tenga un archivo, más
probabilidades haya de que allí haya un
bug.
Discover organizational metric in your codebase
Y también podemos evaluar los costes de
comunicación dentro de un equipo
mirando quien es el autor principal de los
archivos.
Si dos archivos muy relacionados tienen
diferentes autores, tenemos que
asegurarnos que haya una buena
comunicación entre ambos.
Evaluate communication costs
ApprenticeshipSearchController. Main
Developer: Mark Gwilliam 69%
ApprenticeshipSearchMediator. Main
Developer: David Winchurch 88%
SearchProvider. Vicenc Garcia 29%
SearchController
Mark Gwilliam: 363, 14
David Winchurch: 108, 199
Krister Bone: 30, 117
Vicenc Garcia: 17, 18
Alan Gorton: 5, 30
SearchMediator
David Winchurch: 549, 241
Mark Gwilliam: 16, 361
Vicenc Garcia: 38, 9
Alan Gorton: 17, 7
Krister Bone: 3,5
SearchProvider
Vicenc Garcia: 180, 108
Christopher Monney: 151, 76
Krister Bone: 103, 44
David Winchurch: 99, 41
Alan Gorton: 49, 21
Mark Gwilliam: 33, 33
Finalmente, podemos hacer un mapa de
los autores de cada archivo para
encontrar posibles problemas de
comunicación.
Esta técnica nos puede servir, por
ejemplo, para ver que archivos se quedan
huérfanos si un miembro del equipo se va.
Knowledge map
Hay otras herrmientas para evaluar otros
tipos de dependencias entre archivos o
paquetes, librerías, etc.
01/02/2016 85
Hemos visto técnicas que nos pueden
ayudar a determinar problemas en nuestra
base de código.
Es importante hacer notar que estas
técnicas no tienen la verdad absoluta, y
que después de aplicar cada una de ellas
es nuestra responsabilidad estudiar cada
caso en concreto y evaluar si allí hay un
problema o no.
Vicenç García Altés
vicenc.garcia-altes@valtech.co.uk
@vgaltes
vgaltes.com

Más contenido relacionado

Similar a Your code as a crime scene

Cesnavarra 2009-boletín 6
Cesnavarra 2009-boletín 6Cesnavarra 2009-boletín 6
Cesnavarra 2009-boletín 6
Cein
 

Similar a Your code as a crime scene (20)

En Defensa Del Software Libre Nro0
En  Defensa Del  Software  Libre  Nro0En  Defensa Del  Software  Libre  Nro0
En Defensa Del Software Libre Nro0
 
Las tic
Las ticLas tic
Las tic
 
Opsec para analistas de seguridad
Opsec para analistas de seguridadOpsec para analistas de seguridad
Opsec para analistas de seguridad
 
256 tonos de Grey - A veces soy truhán, a veces soy señor
256 tonos de Grey - A veces soy truhán, a veces soy señor256 tonos de Grey - A veces soy truhán, a veces soy señor
256 tonos de Grey - A veces soy truhán, a veces soy señor
 
Tipos de criptografias
Tipos de criptografiasTipos de criptografias
Tipos de criptografias
 
Clase 2: Hackers y software libre
Clase 2: Hackers y software libreClase 2: Hackers y software libre
Clase 2: Hackers y software libre
 
La catedral y el bazar
La catedral y el bazarLa catedral y el bazar
La catedral y el bazar
 
Cesnavarra 2009-boletín 6
Cesnavarra 2009-boletín 6Cesnavarra 2009-boletín 6
Cesnavarra 2009-boletín 6
 
Hx c01
Hx c01Hx c01
Hx c01
 
01. crea tu primer troyano [indetectable por los antivirus]
01. crea tu primer troyano [indetectable por los antivirus]01. crea tu primer troyano [indetectable por los antivirus]
01. crea tu primer troyano [indetectable por los antivirus]
 
La gran linea roja de WordPress 2.1 16:9 notes
La gran linea roja de WordPress 2.1 16:9 notesLa gran linea roja de WordPress 2.1 16:9 notes
La gran linea roja de WordPress 2.1 16:9 notes
 
DEEP WEB.pptx
DEEP WEB.pptxDEEP WEB.pptx
DEEP WEB.pptx
 
Cuestionario de investigacion
Cuestionario de investigacionCuestionario de investigacion
Cuestionario de investigacion
 
Hxc11
Hxc11Hxc11
Hxc11
 
Privacidad en la red
Privacidad en la redPrivacidad en la red
Privacidad en la red
 
Privacidad en la red
Privacidad en la red Privacidad en la red
Privacidad en la red
 
La biblia del_footprinting
La biblia del_footprintingLa biblia del_footprinting
La biblia del_footprinting
 
Hx c19
Hx c19Hx c19
Hx c19
 
Las tic's, el plagio, reglas de la netiqueta
Las tic's, el plagio, reglas de la netiquetaLas tic's, el plagio, reglas de la netiqueta
Las tic's, el plagio, reglas de la netiqueta
 
software pnp
software pnpsoftware pnp
software pnp
 

Más de Vicenç García-Altés

Construcciones automatizadas multiplataforma con TFS2010
Construcciones automatizadas multiplataforma con TFS2010Construcciones automatizadas multiplataforma con TFS2010
Construcciones automatizadas multiplataforma con TFS2010
Vicenç García-Altés
 

Más de Vicenç García-Altés (15)

Operational Serverless
Operational ServerlessOperational Serverless
Operational Serverless
 
Architecture, architects and other mythological creatures
Architecture, architects and other mythological creaturesArchitecture, architects and other mythological creatures
Architecture, architects and other mythological creatures
 
Elm 101
Elm 101Elm 101
Elm 101
 
Gestión del ciclo de vida de aplicaciones Web. Continuous deployment.
Gestión del ciclo de vida de aplicaciones Web. Continuous deployment.Gestión del ciclo de vida de aplicaciones Web. Continuous deployment.
Gestión del ciclo de vida de aplicaciones Web. Continuous deployment.
 
Owin, katana y WebAPI
Owin, katana y WebAPIOwin, katana y WebAPI
Owin, katana y WebAPI
 
Bdd beyond testing
Bdd beyond testingBdd beyond testing
Bdd beyond testing
 
Novedades Visual Studio 2013
Novedades Visual Studio 2013Novedades Visual Studio 2013
Novedades Visual Studio 2013
 
Plain Concepts ALM Tour 2013 - Estamos construyendo lo que el cliente espera
Plain Concepts ALM Tour 2013 - Estamos construyendo lo que el cliente esperaPlain Concepts ALM Tour 2013 - Estamos construyendo lo que el cliente espera
Plain Concepts ALM Tour 2013 - Estamos construyendo lo que el cliente espera
 
Plain Concepts ALM Tour 2013 - Maximizando la productividad de nuestros equipos
Plain Concepts ALM Tour 2013 - Maximizando la productividad de nuestros equiposPlain Concepts ALM Tour 2013 - Maximizando la productividad de nuestros equipos
Plain Concepts ALM Tour 2013 - Maximizando la productividad de nuestros equipos
 
Especificaciones ejecutables, acercando negocio y desarrollo
Especificaciones ejecutables, acercando negocio y desarrolloEspecificaciones ejecutables, acercando negocio y desarrollo
Especificaciones ejecutables, acercando negocio y desarrollo
 
Retrospective’s retrospective (extended version)
Retrospective’s retrospective (extended version)Retrospective’s retrospective (extended version)
Retrospective’s retrospective (extended version)
 
Lo que nadie te va a contar sobre Scrum
Lo que nadie te va a contar sobre ScrumLo que nadie te va a contar sobre Scrum
Lo que nadie te va a contar sobre Scrum
 
Agile Inception
Agile InceptionAgile Inception
Agile Inception
 
Automatización de pruebas funcionales
Automatización de pruebas funcionalesAutomatización de pruebas funcionales
Automatización de pruebas funcionales
 
Construcciones automatizadas multiplataforma con TFS2010
Construcciones automatizadas multiplataforma con TFS2010Construcciones automatizadas multiplataforma con TFS2010
Construcciones automatizadas multiplataforma con TFS2010
 

Último

SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
EdwinC23
 
Tipos de Valvulas para uso industrial y comercial
Tipos de Valvulas para uso industrial y comercialTipos de Valvulas para uso industrial y comercial
Tipos de Valvulas para uso industrial y comercial
macsal12345
 

Último (20)

Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potable
 
Matrices Matemáticos universitario pptx
Matrices  Matemáticos universitario pptxMatrices  Matemáticos universitario pptx
Matrices Matemáticos universitario pptx
 
Sistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptxSistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptx
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
2e38892c-fc5d-490e-b751-ce772cf4756f.pdf
2e38892c-fc5d-490e-b751-ce772cf4756f.pdf2e38892c-fc5d-490e-b751-ce772cf4756f.pdf
2e38892c-fc5d-490e-b751-ce772cf4756f.pdf
 
Tipos de Valvulas para uso industrial y comercial
Tipos de Valvulas para uso industrial y comercialTipos de Valvulas para uso industrial y comercial
Tipos de Valvulas para uso industrial y comercial
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTOPRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
 
Video sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptxVideo sustentación GA2- 240201528-AA3-EV01.pptx
Video sustentación GA2- 240201528-AA3-EV01.pptx
 
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdfSESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión interna
 
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVOESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
 
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptxEFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientos
 

Your code as a crime scene

  • 1.
  • 2. A veces nuestro código parece una escena de un crimen: hay muertos, sangre, cosas rotas… Si nos fijamos bien podemos ver algún singleton o trazas de un framework de Javascript arcano.
  • 3.
  • 4. Por mucho que nos guste dar la culpa a otros, generalmente el culpable es un tipo con estas pintas.
  • 5.
  • 6. O sea, un programador. Es decir, nosotros. Si trabajamos en un entorno más enterprise, los culpables tendrán un aspecto como este…
  • 8. Pero no os dejéis engañar por las caras de felicidad: son cupables.
  • 9. Este tipo de código nos llevará semanas o meses después a situaciones como esta
  • 10.
  • 11. Gritaremos a nuestro código, pero a quien estaremos gritando es a nuestro yo pasado.
  • 13. Esta charla está basada en este libro de Adam Tronhill ( https://pragprog.com/book/atcrime/your- code-as-a-crime-scene). No dejéis de leer el libro porque es muy interesante.
  • 14.
  • 15. Londres 1888. Jack the Ripper acaba de cometer su quinto asesinato. Al igual que las cuatro veces anteriores la policía no es capaz de encontrar al culpable.
  • 16.
  • 17. Más de 125 años después, se sigue intentado saber quien fue Jack the Ripper. El profesor David Canter, utilizando Dragnet, un software desarrollado por The Center for Investigative Psychology, llegó a determinar el área donde probablemente vivía Jack the Ripper. Dragnet considera cada localización de un crimen como un centro de gravedad y combina los centros matemáticamente considerando sus distancias relativas.
  • 18. Image from “Your code as crime scene” by Adam Tornhill
  • 19. En los años 90 se descubrió un diario de James Maybrick, un “merchant” del algodón que decía ser Jack the Ripper. Curiosamente el señor Maybrick acostumbraba a alquilar una habitación en Middlesex Street, que está dentro del hotspot hallado con Dragnet.
  • 20. ¿Como analizar los hotspots en nuestra base de código? Una primera opción sería ver qué archivos tienen más complejidad. Por ahora asumiremos que complejidad es igual a tamaño del fichero, que es una métrica muy fácil de calcular y bastante fiable.
  • 21. Image from “Your code as crime scene” by Adam Tornhill
  • 22. Pero que pasa si tengo un archivo muy complejo pero que hace tiempo que no toco? Es allí donde tengo que focalizar mis esfuerzos a día de hoy. Una métrica que puede ser más útil es añadir a la complejidad ya calculada la tasa de cambio del fichero. Parece razonable pensar que un archivo complejo que se cambia mucho puede ser una fuente de bugs.
  • 23. Image from “Your code as crime scene” by Adam Tornhill
  • 24.
  • 25. Un efecto colateral interesante de este estudio es que quizá pueda obtener información de donde está mi el dominio de mi aplicación.
  • 26. Este es el proyecto que vamos a estudiar en parte de esta charla. (url) Es una aplicación web que tiene una parte importante de búsqueda.
  • 29. Empecemos extrayendo unas estadísticas básicas.
  • 30. SFA
  • 31.
  • 32. Y ahora hagamos un análisis de los hotspots.
  • 33.
  • 34. Utiliza los hostspots como guia: priorizar problemas de diseño realizar revisiones de código mejorar la comunicación
  • 35. Otra manera senzilla de calcular la complejidad es analizar los espacios en blanco del código. A más espacios en blanco (tabulaciones) más complejidad tendrá nuestro código.
  • 37. En la imagen anterior se puede observar el resultado de un refactoring que se hizo a principios de enero. También se puede observar como se añadió a finales de marzo una nueva feature que causó que se incrementara la complejidad.
  • 40. También podemos estudiar el máximo valor de esa complejidad a lo largo del tiempo.
  • 44. O la desviación estándar.
  • 46. En el 1979 se produjeron una serie de robos en varios pueblos de Delaware y Pennsylvania. La característica común de estos robos es que fueron realizados de manera muy “educada”.
  • 47. Varios testigos identificaron al padre Pagano como el ladrón. El “pequeño” problema es que el padre Pagano no era el culpable. De entre todos los sospechosos, el padre pagano fue el único que era un clérigo. Antes de las ruedas de reconocimiento, la policía mencionó que el culpable podría ser un clérigo. Es decir, la policía influyo en la memoria de los testigos.
  • 48. “police receive surprisingly little instruction on how to interview cooperative witnesses.”
  • 49. La policía no trató la entrevistas de una forma cooperativa, comparándola con datos. Tenemos que tratar nuestro código también como algo cooperativo.
  • 50. Podemos estudiar con que frecuencia diferentes archivos son comiteados a la vez. De esta manera podemos descubrir acoplamientos temporales difíciles de descubrir con otras herramientas.
  • 51. Algunos de estos acoplamientos serán normales y correctos, pero podemos tener otros que puedan indicar un problema.
  • 53.
  • 54. Siempre hemos escuchado que los tests son una red de seguridad de nuestro código.
  • 55.
  • 56. Pero nuestros tests pueden no estar codificados de una manera correcta. Si estudiamos el acoplamiento del código con nuestros tests, podemos descubrir malas decisiones de implementación. Por ejemplo, podríamos descubrir que estamos modificando demasiado nuestros tests end-to-end, que deberían ser unos tests más estables.
  • 57. Data from “Your code as crime scene” by Adam Tornhill
  • 58. También podemos estudiar como evoluciona nuestro código y nuestros tests en función de los cambios que les hacemos. Cuando empezamos a dedicar más tiempo a nuestros tests que a nuestro código de producción seguramente es que hay algo que tengamos que mirar.
  • 59. Track your modification patterns Image from “Your code as crime scene” by Adam Tornhill
  • 60. La universidad de Glasgow hizo un estudio sobre la belleza del que concluyó que a la gente les gustaban más aquellas caras a las que se les habían quitado las diferencias individuales respecto la media. Por tanto podemos decir que la belleza es aquello que tiene consistencia y no tiene sorpresas.
  • 61. Image from “Your code as crime scene” by Adam Tornhill
  • 62. Si estamos codificando utilizando un patrón arquitectónico, podemos medir la belleza de nuestro código contra dicho patrón.
  • 63. Nop-Commerce Data from “Your code as crime scene” by Adam Tornhill
  • 64. A principios de los 90 Suecia tuvo su primer serial killer. Thomas Quick (encarcelado en una institución mental) empezó a confesar con todo lujo de detalles asesinatos no resueltos (sin cuerpo presente). El problema era que Thomas Quick no era culpable.
  • 65.
  • 66. Cuando trabajamos nos enfrentamos a poderosos biases sociales que debemos entender para intentar evitarlos. Uno de ellos es process loss, que dice que un grupo nunca puede rendir al 100% de su capacidad. El echo de trabajar juntos tiene unos costes que debemos entender (coordinacion y motivacion).
  • 67. En "The Emperor's New Clothes" Hans Christian Andersen cuenta que al Emperador le regalaron un cofre vacío diciéndole que allí había ropa que solo aquellos dignos de su confianza podían ver. El Emperador se las puso y caminó desnudo por toda la ciudad, pero nadie se atrevió a decirselo.
  • 68.
  • 69. A este bias social se le llama Pluralistic Ignorance y sucede cuando en un equipo todo el mundo en privado piensa una cosa pero nadie se atreve a decirla en público.
  • 70. Hay otros biases sociales como confundir una opinión muy repetida por la realidad, o el de magnificar una opinión minoritaria porque está en concordancia con las creencias del grupo. Hay que intentar luchar contra los biases sociales con preguntas y con datos.
  • 71. ¿Qué le pasó a Thomas Quick? Fué drogado para hacer los interrogatorios. Los terapeutas explicaron a la policia las confesiones de Quick después de implantarle falsas memorias. La policia creyño a los terapeutas. Cuando Quick no decia una confesion muy clara, recibia ayuda de los interrogadores hasta conseguir una historia plausible.
  • 72. Años después gente relacionada con la investigación confesó que no veían nada claros los métodos del interrogatorio, pero que en su momento no se atrevieron a decir nada.
  • 73. Una manera de descubrir comportamientos de nuestro equipo es hacer una nube de palabras con los logs de nuestro repositorio de código.
  • 74. Discover your team modus operandi
  • 75. También podemos ver la cantidad de autores que tiene un archivo. Puede ser razonable pensar que cuantos más autores tenga un archivo, más probabilidades haya de que allí haya un bug.
  • 76. Discover organizational metric in your codebase
  • 77. Y también podemos evaluar los costes de comunicación dentro de un equipo mirando quien es el autor principal de los archivos. Si dos archivos muy relacionados tienen diferentes autores, tenemos que asegurarnos que haya una buena comunicación entre ambos.
  • 78. Evaluate communication costs ApprenticeshipSearchController. Main Developer: Mark Gwilliam 69% ApprenticeshipSearchMediator. Main Developer: David Winchurch 88% SearchProvider. Vicenc Garcia 29%
  • 79. SearchController Mark Gwilliam: 363, 14 David Winchurch: 108, 199 Krister Bone: 30, 117 Vicenc Garcia: 17, 18 Alan Gorton: 5, 30
  • 80. SearchMediator David Winchurch: 549, 241 Mark Gwilliam: 16, 361 Vicenc Garcia: 38, 9 Alan Gorton: 17, 7 Krister Bone: 3,5
  • 81. SearchProvider Vicenc Garcia: 180, 108 Christopher Monney: 151, 76 Krister Bone: 103, 44 David Winchurch: 99, 41 Alan Gorton: 49, 21 Mark Gwilliam: 33, 33
  • 82. Finalmente, podemos hacer un mapa de los autores de cada archivo para encontrar posibles problemas de comunicación. Esta técnica nos puede servir, por ejemplo, para ver que archivos se quedan huérfanos si un miembro del equipo se va.
  • 84. Hay otras herrmientas para evaluar otros tipos de dependencias entre archivos o paquetes, librerías, etc.
  • 86. Hemos visto técnicas que nos pueden ayudar a determinar problemas en nuestra base de código. Es importante hacer notar que estas técnicas no tienen la verdad absoluta, y que después de aplicar cada una de ellas es nuestra responsabilidad estudiar cada caso en concreto y evaluar si allí hay un problema o no.
  • 87.
  • 88.
  • 89.

Notas del editor

  1. London 1888 Jack The Ripper has murdered his 5th victim. But nobody knows who is he.
  2. Dragnet considers each crime location a center of gravity. It then combines the individual centers mathematically using one small twist; psychologically, all distances aren’t equal. Thus, the crime locations are weighted depending on their relative distances.
  3. Interpret evolutionary change frequencies Frequent changes to complex code generally indicate declining quality
  4. Max complexity over time
  5. Standard deviation
  6. Back in 1979, several towns in Delaware and Pennsylvania were struck by a series of robberies. The salient characteristic of these robberies was the perpetrator’s polite manners. Several witnesses identified a priest named Father Pagano as the robber. De entre todos los sospechosos, el padre pagano fue el unico que era un clerigo. La policia menciono que el culpable podria ser un clerigo. La policia influyo en la memoria de los testigos. La policia no trato la entrevistas de una forma cooperativa, comparandola con datos. Tenemos que tratar nuestro codigo tambien como algo cooperativo.
  7. Create a safety net for your architecture
  8. Use beauty. As she tested the attractiveness of all these photos on a group, the results turned out to be both controversial and fascinating. Graded on physical attractiveness, the composite pictures won. And they won big. The reason for the controversy comes from the process that produced the apparently attractive faces. When you morph photos of faces, individual differences disappear. The more photos you merge, the more average the end result. That would mean that beauty is nothing more than average! Beauty is about consistency and avoiding surprises
  9. Use hotspot analysis to assess the severity
  10. A principios de los 90 Suecia tuvo su primer serial killer. Thomas Quick (encarcelado en una institucion mental) empezo a confesar con todo lujo de detalles asesinatos no resueltos (sin cuerpo presente). El problema es que Thomas Quick no era culpable. Cuando trabajamos nos enfrentamos a poderosos bias sociales que debemos entender para intentar evitarlos. Uno de ellos es process loss, que dice que un grupo nunca puede rendir al 100% de su capacidad. El echo de trabajar juntos tiene unos costes que debemos entender (coordinacion y motivacion). Sweden 1990s -> first serial killer -> no bodies -> thomas quick -> process loss -> the emperor is naked When you choose a technology you also choose a culture.
  11. "The Emperor's New Clothes" Hans Christian Andersen  Pluralistic ignorance -> Pluralistic ignorance happens in situations where everyone privately rejects a norm but thinks that everyone else in the group supports it. Mistake a familiar opinion for a widespread one. Challenge all with questions and data Avoid group thinking. Pero con cuidado, puede pasar que una opinion minoritaria este alineada con el ideal del grupo. Entonces nos vemos con mas fuerza para expresar esa opinion, tomamos una posicion mas extrema. Por ejemplo, los tests son buenos verdad? Pues testeemoslo todo, a lo bestia, incluso codigo que sabemos que luego vamos a tirar. Testeemos a lo bestia los spikes, hagamosle integracion continua, etc. Para evitar todo esto, hagamos preguntas, hablemos con la gente y soportemos nuestras decisiones con datos. Dejemos que expertos externos revisen nuestros datos, que subgrupos trabajen independientemente en el mismo problema y si tenemos una posicion de fuerza, no hagamos saber nuestra opinion demasiado pronto. Que le paso a Thomas Quick? Fue drogado para hacer los interrogatorios, los terapeutas explicaron a la policia las confesiones de Quick despues de implantarle falsas memorias. La policia creyo a los terapeutas. Cuando Quick no decia una confesion muy clara, recibia ayuda de los interrogadores hasta conseguir una historia plausible.
  12. Identify abandoned code (code developed by a dev that not longer is in the team)