Code Smells Código que huele mal….

Slides:



Advertisements
Presentaciones similares
INGENIERÍA DE SOFTWARE Introducción Arquitectura de Software
Advertisements

BizTalk Server 2006 & Test Driven Development Kabel Sistemas S.L.
Refactoring – Visual Studio 2005 Hector Minaya, mcsd.net MR2 Solutions
Metodologías ágiles.
10 secretos de Bill Gates Su estilo de hacer negocios y de cómo llevo a Microsoft a convertirse en la empresa líder de tecnología a nivel mundial.
Enfoques de desarrollo
Las 5S Autor: Gustavo Villegas López Docente Investigador TPM Universidad EAFIT Principios de organización que ayudarán a optimizar.
Guía metodológica para la gestión de proyectos de software en PyMEs que no son fábricas de software por medio de Metodologías ágiles.
TÉCNICAS PARA FOMENTAR LA PARTICIPACIÓN
ASEGURANDO LA CALIDAD DEL CODIGO
Ingeniería de Software
Rosemary Torrico Bascopé
Herencia simple y multiple
Desarrollo para Entorno Web
DESARROLLO E IMPLEMENTACIÓN DE UN PLUGIN DE GOOGLE WALLET PARA PAGOS ONLINE UTILIZANDO SOFTWARE OPEN SOURCE.
Detección de Bad Smells en aplicaciones Java
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Modelo de Desarrollo XP
Evaluación de Productos
CICLO DE VIDA DE UN PROYECTO DE SOFTWARE
Lagash Systems Mariano Sánchez – Software Architect
PLANEACION DE UNA ESTRUCTURA ORGANIZACIONAL
M.C. Juan Carlos Olivares Rojas
Reingeniería del Software
Test Driven Development TDD
Test Driven Development
Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.
Nuevas y Futuras Soluciones Dealers Meeting, Dead Sea, Israel, 2008
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.

DISEÑO DE SOFTWARE 1ª. Parte
Diseño e Implementación
Reestructuración del Código M.C. Juan Carlos Olivares Rojas Marzo 2010.
ASEGURANDO LA CALIDAD DEL CODIGO REFACTORING. Refactorizar (o Refactoring) es realizar una transformación al software preservando su comportamiento, modificando.
Programación Orientada a Objetos
Tecnología para la Comunidad
CONCEPTOS BÁSICOS Diseño de Sistemas.
(Cambiar la imagen por otra representativa de la WQ o por otros u otros elementos) (Escribir aquí el nombre del autor o autores) (poner un enlace a una.
Patrones de Diseño de Arquitecturas de Software Enterprise
Ingeniería de Requerimiento
Universidad Central de Venezuela Facultad de Ciencias Postgrado en Ciencias de la Computación Sistemas Distribuidos Albany Márquez.
Andrés Harker Gutiérrez Director: Cesar Julio Bustacara Medina MSc. Asesor: Oscar Xavier Chavarro MSc. Arquitectura de un módulo I/O para objetos 3D Pontificia.
Desarrollo de Software Esbelto
FRAMEWORK VS Código fuente
Buenas prácticas en el desarrollo de Software
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Desarrollo de Software Orientado a Objetos (deficiencias)
Algoritmos y Programación III 9. Diseño micro y refactorización Carlos Fontela, 2006.
Nombre del experimento Nombre: Grupo: Fecha: Clase: Nombre de la maestra:
Reestructuración de Código M.C. Juan Carlos Olivares Rojas
CONTRATOS DE CLIENTES Orlando Sedamano Cornejo Marco Bustinza
Redes virtuales.
Actividades en el Proceso de desarrollo de Software
INTRODUCCIÓN TAREA PROCESO RECURSOS EVALUACIÓN CONCLUSIONES CREDITOS Guía para el profesor. Vamos a viajar en el.
COIS 115 Profesor: Gustavo A. Vélez.  Proceso donde necesito estar seguro que usted llego al salón  ¿Esta usted aquí, AHORA?  Elimine lo que tiene.
TEMA: RESPONSABILIDAD DE ERRORES
Preocupaciones del Analista Programador & Usuarios
8 CONSEJOS PRACTICOS PARA AYUDARTE A MEJORAR TU PRODUCTIVIDAD.
Conveniencias entre comprar o desarrollar un software a medida
Especificación del Problema Partimos del hecho de un programador no puede resolver un problema que no entiende. Por esta razón, la primera etapa en todo.
PROCESO DE DESARROLLO. Introducción Mediante esta presentación se pretende describir el proceso de desarrollo del TALLER I.
Conveniencias entre comprar o desarrollar un software a medida EL SOFTWARE A MEDIDA.
Profesor: Julio Cesar Cano R..  Nombre completo  Algo personal de usted  A que se dedica o que hace además de estudiar  Porque esta en el programa.
¿Es buena moda? 18 y 19 de febrero ESPAÑOL 3. De pensar: Completa las frases siguientes usando: algun, alguno, alguna, algunos, algunas, algo 1.Tengo
Scrum: Mejorando las prácticas Anabel Ruth Berenstein Año 2012.
ALUMNO ALUMNO: DIEGO URES LEGAJO LEGAJO: La prueba unitaria es la herramienta para la Calidad Presentación Trabajo Final de Grado.
Charo y Lee 2.4 Vocabulario nuevo. estoy preparando = I am preparing estás preparando = you are preparing / Are you preparing? está preparando = s/he.
Metodologías de Desarrollo Ágil
Transcripción de la presentación:

Code Smells Código que huele mal…

Agenda Introducción Clasificación Ejemplos

¿Qué es un code smell? Wikipedia: En “criollo” Un “Code Smell” es un síntoma que encontramos en el código que indica un posible problema más profundo. Los code smells entrenan tu nariz para que te diga: Cuándo refactorizar Qué refactorizar Cómo refactorizar En “criollo” Es código que funciona pero que en un futuro podría no hacerlo.

¿Qué hacer con los code smells? Refactoring Proceso de mejorar la calidad del código fuente sin alterar su funcionalidad. No es una bala de plata, son guías. Lo más importante es el criterio del desarrollador Se recomienda hacer test unitarios antes de refactorizar!

¿Por qué refactorizar? “Cualquier tonto puede escribir código que una computadora entienda. Los buenos programadores escriben código que los humanos entienden.” - Refactoring: Improving the Design of Existing Code Código más legible Fácil encontrar bugs Se aprenden principios de diseño Descubrir nuevas abstracciones Código limpio y mantenible The boy scout rule The Boy Scouts rule: "Always leave the campground cleaner than you found it." If you find a mess on the ground, you clean it up regardless of who might have made the mess. You intentionally improve the environment for the next group of campers.

Clasificación

The Bloaters Agrupa smells que indican la existencia de algún aspecto que con el tiempo y el crecimiento pueden volver incontrolable el código. Long method Large class Primitive obsession Long parameter list Data clumps

The Object Orientation Abusers El común denominador de este tipo de smells es que representan casos donde la solución no explota completamente las posibilidades del diseño orientado a objetos. Switch statements Temporary field Refused bequest Alternative Classes with Different Interfaces Conditional complexity

The Change Preventers Estos smells dificultan la posibilidad de realizar cambios en nuestro software o de simplemente seguir avanzando en el desarrollo. Violan la regla sugerida por Fowler y Beck, que dice que las clases y los posibles cambios deben tener una relación de uno a uno. Divergent Change Shotgun surgery Parallel Inheritance Hierarchies Combinatorial Explosion Magic Number Divergent Change: Este síntoma se presenta cuando en una clase se producen cambios de diferentes maneras por diferentes motivos. Las clases que suelen tener este síntoma tienen varias responsabilidades y baja cohesión.

The Dispensables Estos Smells tienen en común la existencia de algún elemento innecesario que debería ser removido del código fuente. Lazy class Data class Duplicate code Dead code Speculative generality Comments

The Couplers Son smells que alertan sobre problemas en el manejo del acoplamiento entre componentes, pudiendo ser este excesivo y o mal diseñado. Features envy Inappropriate intimacy Message Chain Middle man Solution Sprawl Middle man: Es cuando una clase, en la mayoría de sus métodos delega toda la responsabilidad a otras clases quienes realmente resuelven el problema. Por lo tanto se debería llamar a las clases que saben resolverlo y no a la clase intermedia. Solution Sprawl: Es cuando una clase para llevar a cabo una responsabilidad “habla” con muchas clases. Feature envy: Cuando una clase utiliza varios atributos de otra clase para realizar alguna tarea. En lugar de eso debería delegar dicha tarea a la clase que tiene dicha información. Inappropriate intimacy: cuando un objeto conoce demasiado de otro

Ejemplos

Data Class Clases con atributos y no mucho más Sín lógica de negocio Indicio de “Modelo de dominio anémico” ¿Value Objects ? ¿Data Tranfer Objects (DTOs) ? Discutir por que un value object o un DTO no es data class

Comments

Feature Envy

Shotgun surgery

Parallel Inheritance Hierarchies

Data Clump

Long Parameter List Algún smell más acá!?  Data clump!

Temporary Field

Switch Statements

Message Chain

Cierre

Conclusión

¿Preguntas?