SlideShare una empresa de Scribd logo
1 de 50
Motivación.
La metáfora de la arqueología.
Conceptos, principios y métricas útiles.
Antes de comenzar…
Métodos y herramientas de la arqueología de
software.
¿Qué falta?
De varios miles de líneas de código (KLOC)
Que no tiene documentación de diseño
   O está obsoleta.
Los diseñadores/desarrolladores originales
posiblemente ya emigraron a pasturas más
verdes.
Con serios problemas de calidad.
   Medidos por el número e impacto de defectos.
Resulta muy difícil / costoso realizar cambios.
Los dueños o desarrolladores están pensando en
rehacerlo.
   Lo cual probablemente resultará en la misma
   situación.
   ¿Por qué? Bueno…
Analizando desarrollos de otras personas.
Posiblemente a partir de un proyecto de código
abierto.
¿Qué patrones, tecnologías y estilos de
programación son realmente efectivos y en qué
situaciones?
¿Qué métodos producen que tipo de productos?
Entender sociedades y culturas antiguas
   Principalmente a través de la recuperación y análisis
   de los artefactos que dejaron.

Intenta responder a las siguientes preguntas:
   ¿Para qué sirve este artefacto?
   ¿Cómo lo crearon y usaron sus autores?
   ¿Qué estaban pensando cuando lo hicieron?
   ¿Cómo vivían quienes lo desarrollaron?

Parece aplicable a nuestros 3 escenarios =)
Es una metáfora útil para describir un enfoque y
método que permite abordar los escenarios
planteados anteriormente.

Pero hay unas diferencias muy obvias:
   Las escalas de tiempo.
   En el software,

   Sin embargo…
Como mínimo:

 Cohesión
 Acoplamiento
 Inestabilidad
 Abstracción
 Complejidad ciclomática
ingle responsibility principle
 pen-Closed principle
iskov substitution principle
nterface segregation principle
 ependency inversion principle



         Robert C. Martin (Uncle Bob)
                          (Uncle
          http://bit.ly/ooprinciples
Vas a experimentar, asegúrate que todo el
código está en control de versiones y que
siempre puedes regresar a la versión original.




Asegúrate de que todos los binarios pueden
generarse a partir del código fuente.
Tendrás que leer código, mucho y
probablemente de muy poca calidad.
Tendrás que programar, no hay herramientas
que contesten todas tus dudas.
Es mucha la
información que se
debe procesar para
realizar una
excavación y análisis.
Lo mejor es tomar
notas de todo, sin
repetir lo que ya
existe en el código
(DRY).
Es un acercamiento
“a vista de pájaro” a la
zona arqueológica.

Permite crear un
primer mapa donde se
identifican las
características
principales del
conjunto.
En software, el tamaño importa, ¡y mucho!
   10 KLOC es muy distinto a 1 MLOC

¿Cuántas versiones “vivas” existen?

Debe medirse la distribución del
código desde diferentes perspectivas
   Por lenguaje de programación.
   Por estereotipo o capa de componentes.
   Por módulo.
Por estereotipo o capa de componentes.
  Stereotype        files   # lines of # lines of # blanks # code +    % Total
                               code     comment             comment
  Clients           1978        917530      39860     82610    957390 75.92%
  Services           943        109535       9182     19264    118717     9.41%
  PL/SQL             690         71292       7314      8009     78606     6.23%
  Common             434         63036       6071     10298     69107     5.48%
  Admin               82         34204       1403      4280     35607     2.82%
  Installer           23           1287       317       161      16 04    0.13%
               Total 4150 1196884        64147 124622 1261031

                                                               % Total
                                                                                  Clients
                                                                                  Services
                                                                                  PL/SQL
                                                                                  Common
                                                                                  Admin
                                                                                  Installer
                                                                                  Total
El “copy & paste” es en general un feo hábito.
   Pero muy permeado.

Si hay mucho código duplicado, nos da una
indicación de que:
   Los hábitos de los programadores no eran los
   mejores.
   El tamaño del sistema podría reducirse
   considerablemente.
Código C#
Similarity threshold (lines)                15
Total number of duplicate lines          58177
Total number of duplicate blocks          1584
Total number of files with duplicates      658
Total number of files                     2237
Total number of significant lines       214833
% Duplication                           13.82%


                     Código SQL
Similarity threshold (lines)                15
Total number of duplicate lines          28358
Total number of duplicate blocks           644
Total number of files with duplicates      154
Total number of files                      636
Total number of significant lines        56027
% Duplication                           26.56%
Scatter Plot (demo)
Identificar módulos (de grano grueso) y sus
relaciones (grafo de dependencias).
Entender las responsabilidades, tamaño y
complejidad de cada módulo.
Identificar y caracterizar las fronteras del
sistema.
Determinar características como estabilidad,
fragilidad y flexibilidad al cambio.
   A nivel sistema y a nivel módulo.
Métricas.
   Cohesión
   Acoplamiento
   Abstracción
   Estabilidad/Inestabilidad
   Tamaño de clases y métodos.
   Duplicación de código.
Evaluación de que tanto se aplican los principios
de buen diseño modular.
Matriz de dependencias (Design Structure Matrix)
Puede usarse para relacionar distintas capas.
Muchos módulos.
Muy pocos módulos en un sistema muy grande.
Demasiadas dependencias
Dependencias cíclicas
Cadenas muy largas de dependencias.

¿Qué constituye una modularización efectiva?
           http://slidesha.re/cEwkuK
          http://modularity.kirkk.com/
En tu mapa, debes tener perfectamente
identificadas las partes del sistema que:
   Son más frágiles e inestables.
   Son más propensas a tener bugs.
   Han sufrido más cambios.

¿Cómo?
   Métricas de complejidad, tamaño e inestabilidad.
   Historial de cambios en el repositorio de código.
     Los que más cambian, suelen ser muy importantes o tener
     mal diseño ocasionado por corrección de muchos bugs.
Ejemplo: métodos con mayor complejidad
La historia te da una                   E-3.0.1

buena idea del proceso       E-3.0.0                   E-3.0.x-mtto
que llevó al sistema
actual, el cual puede                         E-2.0.2
ser sencillo o muy                       E-2.0.1

accidentado.
                             E-2.0.0                   E-2.0.x-mtto
                         E-2.0.0-RC2
                                          merge
                         E-2.0.0-RC1
Este es un ejemplo de
                                                   E-1.0.1
una historia sencilla                        E-1.0.1-RC2

                                         E-1.0.1-RC1



                              E-1.0.0                  E-1.0.x-mtto
                         E-1.0.0-RC1
Ejemplo de una historia muy accidentada
(micro-fragmento)
Commits (por 4º anual) en proyectos con desarrollo en
cascada




Commits (semanales) en proyectos con desarrollo
iterativo e incremental.
  Count of Commits
  Proyectos          1   2    3    4   5   6    7    8   9 10 11     12   13   14   15   16 Grand Total
  Proyecto-1         5   7   82   89 109 265   13   85 120 187 197   82   39   59   38   24        1401
Una vista dinámica puede dar pistas cualitativas
sobre el ritmo de desarrollo.
Evolución de eclipse http://bit.ly/vO4Wc
http://www.spinellis.gr/codereading/
Recuerda que estás viendo el resultado de capa
tras capa de modificaciones.
Puede ser difícil descubrir la intención /
estructura original.
Probablemente aún puedes conocer a
programadores que participaron en el desarrollo
original (los nativos).
   Haz amistad con ellos, que te cuenten su historia y
   su tradición.
   Aprende su
   vocabulario y
   dialecto.
   Respétalos.
Herramientas más integradas.

Mejores visualizadores de código y repositorios.

Más herramientas open-source.

Publicaciones de arquéologos de software.

Más arqueólogos =)
Medición de LOC
    cloc
Duplicación de código
   PMD’s CPD, Checkstyle, Simian, CCFinder
Grafos de dependencias
   JarAnalyzer, AssAnalyzer, NDepend, XDepend, SonarJ
Análisis de dependencias
   NDepend, XDepend, SonarJ, Structure 101, Lattix DSM
Métricas de diseño
   PMD, FxCop, NDepend, XDepend, Structure 101, SonarJ
Visualización de repositorios de código
   gource, codeswarm
http://machinesareus.blogspot.com
        Twitter: @MachinesAreUs
        Twitter: @MachinesAreUs

Más contenido relacionado

Similar a Arqueología de software

Similar a Arqueología de software (20)

Aspect Oriented Programming introduction
Aspect Oriented Programming introductionAspect Oriented Programming introduction
Aspect Oriented Programming introduction
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
Csharp
CsharpCsharp
Csharp
 
Taller de c sharp
Taller de c sharpTaller de c sharp
Taller de c sharp
 
Charla 2005 09 16
Charla 2005 09 16Charla 2005 09 16
Charla 2005 09 16
 
Unidad i
Unidad iUnidad i
Unidad i
 
Clusterhomogeneorocks
ClusterhomogeneorocksClusterhomogeneorocks
Clusterhomogeneorocks
 
Manual De DISEÑO DIGITAL CON VHDL
Manual De DISEÑO DIGITAL CON VHDLManual De DISEÑO DIGITAL CON VHDL
Manual De DISEÑO DIGITAL CON VHDL
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Capa aplicacion Modelo OSI
Capa aplicacion Modelo OSICapa aplicacion Modelo OSI
Capa aplicacion Modelo OSI
 
Reporte final
Reporte finalReporte final
Reporte final
 
Ingenieria inversa
Ingenieria inversaIngenieria inversa
Ingenieria inversa
 
Multithreading a la manera de Delphi
Multithreading a la manera de DelphiMultithreading a la manera de Delphi
Multithreading a la manera de Delphi
 
03 Software Parte I
03  Software  Parte  I03  Software  Parte  I
03 Software Parte I
 
aplicacion del lenguaje c
aplicacion del lenguaje caplicacion del lenguaje c
aplicacion del lenguaje c
 
Cppbasico
CppbasicoCppbasico
Cppbasico
 
Tutorial de C
Tutorial de CTutorial de C
Tutorial de C
 
Aprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primero
 
C++ basico subido JHS
C++ basico subido JHSC++ basico subido JHS
C++ basico subido JHS
 

Más de Agustin Ramos

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerAgustin Ramos
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017Agustin Ramos
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testingAgustin Ramos
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasAgustin Ramos
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?Agustin Ramos
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellAgustin Ramos
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoAgustin Ramos
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continuaAgustin Ramos
 
Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaAgustin Ramos
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noAgustin Ramos
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Agustin Ramos
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoAgustin Ramos
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroAgustin Ramos
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraAgustin Ramos
 

Más de Agustin Ramos (15)

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with Archeometer
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testing
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseño
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continua
 
Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrencia
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que no
 
Hola OSGi
Hola OSGiHola OSGi
Hola OSGi
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamiento
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidra
 

Último

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Último (10)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Arqueología de software

  • 1.
  • 2. Motivación. La metáfora de la arqueología. Conceptos, principios y métricas útiles. Antes de comenzar… Métodos y herramientas de la arqueología de software. ¿Qué falta?
  • 3.
  • 4. De varios miles de líneas de código (KLOC) Que no tiene documentación de diseño O está obsoleta. Los diseñadores/desarrolladores originales posiblemente ya emigraron a pasturas más verdes.
  • 5.
  • 6. Con serios problemas de calidad. Medidos por el número e impacto de defectos. Resulta muy difícil / costoso realizar cambios. Los dueños o desarrolladores están pensando en rehacerlo. Lo cual probablemente resultará en la misma situación. ¿Por qué? Bueno…
  • 7.
  • 8.
  • 9.
  • 10. Analizando desarrollos de otras personas. Posiblemente a partir de un proyecto de código abierto. ¿Qué patrones, tecnologías y estilos de programación son realmente efectivos y en qué situaciones? ¿Qué métodos producen que tipo de productos?
  • 11.
  • 12. Entender sociedades y culturas antiguas Principalmente a través de la recuperación y análisis de los artefactos que dejaron. Intenta responder a las siguientes preguntas: ¿Para qué sirve este artefacto? ¿Cómo lo crearon y usaron sus autores? ¿Qué estaban pensando cuando lo hicieron? ¿Cómo vivían quienes lo desarrollaron? Parece aplicable a nuestros 3 escenarios =)
  • 13. Es una metáfora útil para describir un enfoque y método que permite abordar los escenarios planteados anteriormente. Pero hay unas diferencias muy obvias: Las escalas de tiempo. En el software, Sin embargo…
  • 14.
  • 15.
  • 16. Como mínimo: Cohesión Acoplamiento Inestabilidad Abstracción Complejidad ciclomática
  • 17. ingle responsibility principle pen-Closed principle iskov substitution principle nterface segregation principle ependency inversion principle Robert C. Martin (Uncle Bob) (Uncle http://bit.ly/ooprinciples
  • 18.
  • 19. Vas a experimentar, asegúrate que todo el código está en control de versiones y que siempre puedes regresar a la versión original. Asegúrate de que todos los binarios pueden generarse a partir del código fuente.
  • 20. Tendrás que leer código, mucho y probablemente de muy poca calidad. Tendrás que programar, no hay herramientas que contesten todas tus dudas.
  • 21. Es mucha la información que se debe procesar para realizar una excavación y análisis. Lo mejor es tomar notas de todo, sin repetir lo que ya existe en el código (DRY).
  • 22.
  • 23. Es un acercamiento “a vista de pájaro” a la zona arqueológica. Permite crear un primer mapa donde se identifican las características principales del conjunto.
  • 24.
  • 25.
  • 26. En software, el tamaño importa, ¡y mucho! 10 KLOC es muy distinto a 1 MLOC ¿Cuántas versiones “vivas” existen? Debe medirse la distribución del código desde diferentes perspectivas Por lenguaje de programación. Por estereotipo o capa de componentes. Por módulo.
  • 27. Por estereotipo o capa de componentes. Stereotype files # lines of # lines of # blanks # code + % Total code comment comment Clients 1978 917530 39860 82610 957390 75.92% Services 943 109535 9182 19264 118717 9.41% PL/SQL 690 71292 7314 8009 78606 6.23% Common 434 63036 6071 10298 69107 5.48% Admin 82 34204 1403 4280 35607 2.82% Installer 23 1287 317 161 16 04 0.13% Total 4150 1196884 64147 124622 1261031 % Total Clients Services PL/SQL Common Admin Installer Total
  • 28. El “copy & paste” es en general un feo hábito. Pero muy permeado. Si hay mucho código duplicado, nos da una indicación de que: Los hábitos de los programadores no eran los mejores. El tamaño del sistema podría reducirse considerablemente.
  • 29. Código C# Similarity threshold (lines) 15 Total number of duplicate lines 58177 Total number of duplicate blocks 1584 Total number of files with duplicates 658 Total number of files 2237 Total number of significant lines 214833 % Duplication 13.82% Código SQL Similarity threshold (lines) 15 Total number of duplicate lines 28358 Total number of duplicate blocks 644 Total number of files with duplicates 154 Total number of files 636 Total number of significant lines 56027 % Duplication 26.56%
  • 31. Identificar módulos (de grano grueso) y sus relaciones (grafo de dependencias). Entender las responsabilidades, tamaño y complejidad de cada módulo. Identificar y caracterizar las fronteras del sistema. Determinar características como estabilidad, fragilidad y flexibilidad al cambio. A nivel sistema y a nivel módulo.
  • 32.
  • 33. Métricas. Cohesión Acoplamiento Abstracción Estabilidad/Inestabilidad Tamaño de clases y métodos. Duplicación de código. Evaluación de que tanto se aplican los principios de buen diseño modular. Matriz de dependencias (Design Structure Matrix)
  • 34.
  • 35. Puede usarse para relacionar distintas capas.
  • 36. Muchos módulos. Muy pocos módulos en un sistema muy grande. Demasiadas dependencias Dependencias cíclicas Cadenas muy largas de dependencias. ¿Qué constituye una modularización efectiva? http://slidesha.re/cEwkuK http://modularity.kirkk.com/
  • 37. En tu mapa, debes tener perfectamente identificadas las partes del sistema que: Son más frágiles e inestables. Son más propensas a tener bugs. Han sufrido más cambios. ¿Cómo? Métricas de complejidad, tamaño e inestabilidad. Historial de cambios en el repositorio de código. Los que más cambian, suelen ser muy importantes o tener mal diseño ocasionado por corrección de muchos bugs.
  • 38. Ejemplo: métodos con mayor complejidad
  • 39. La historia te da una E-3.0.1 buena idea del proceso E-3.0.0 E-3.0.x-mtto que llevó al sistema actual, el cual puede E-2.0.2 ser sencillo o muy E-2.0.1 accidentado. E-2.0.0 E-2.0.x-mtto E-2.0.0-RC2 merge E-2.0.0-RC1 Este es un ejemplo de E-1.0.1 una historia sencilla E-1.0.1-RC2 E-1.0.1-RC1 E-1.0.0 E-1.0.x-mtto E-1.0.0-RC1
  • 40. Ejemplo de una historia muy accidentada (micro-fragmento)
  • 41. Commits (por 4º anual) en proyectos con desarrollo en cascada Commits (semanales) en proyectos con desarrollo iterativo e incremental. Count of Commits Proyectos 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Grand Total Proyecto-1 5 7 82 89 109 265 13 85 120 187 197 82 39 59 38 24 1401
  • 42. Una vista dinámica puede dar pistas cualitativas sobre el ritmo de desarrollo. Evolución de eclipse http://bit.ly/vO4Wc
  • 44. Recuerda que estás viendo el resultado de capa tras capa de modificaciones. Puede ser difícil descubrir la intención / estructura original.
  • 45. Probablemente aún puedes conocer a programadores que participaron en el desarrollo original (los nativos). Haz amistad con ellos, que te cuenten su historia y su tradición. Aprende su vocabulario y dialecto. Respétalos.
  • 46.
  • 47. Herramientas más integradas. Mejores visualizadores de código y repositorios. Más herramientas open-source. Publicaciones de arquéologos de software. Más arqueólogos =)
  • 48.
  • 49. Medición de LOC cloc Duplicación de código PMD’s CPD, Checkstyle, Simian, CCFinder Grafos de dependencias JarAnalyzer, AssAnalyzer, NDepend, XDepend, SonarJ Análisis de dependencias NDepend, XDepend, SonarJ, Structure 101, Lattix DSM Métricas de diseño PMD, FxCop, NDepend, XDepend, Structure 101, SonarJ Visualización de repositorios de código gource, codeswarm
  • 50. http://machinesareus.blogspot.com Twitter: @MachinesAreUs Twitter: @MachinesAreUs