Como yerba mala
Dan Rozenfarb
[email protected]
© Copyright 2008, Dan Rozenfarb
Manifiesto Ágil
12 Principios
[…]
2. Son bienvenidos los requisitos cambiantes …
[…]
10. La simplicidad, como arte de maximizar la
cantidad de trabajo que no se hace, es
esencial
[…]
© Copyright 2008, Dan Rozenfarb
Principios Ágiles
2. Ágiles y flexibles
10.
Todo trabajo extra será peso muerto.
© Copyright 2008, Dan Rozenfarb
Qué me importa
“Una herramienta que permita importar
un archivo de texto en formato CSV a la
base de datos”
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
1ra iteración:
Importador
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Class Importador
…
Method importar {
self.abrirArchivo
while not self.finDeArchivo {
self.importarRegistro
self.avanzarBarraProgreso
}
self.cerrarArchivo
}
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Cambio de requerimiento: Ejecución en batch
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
MENTIRA
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
2da iteración: Batch
Importador
archivo
tabla
importar
ImportadorShell
modelo
archivo
tabla
importar
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Observer
MVC
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Cambio de requerimiento: Resultados
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
3ra iteración: Resultados
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Cambio de requerimiento: Resultados del batch
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
4ta iteración:
Log
¿Qué información debería tener?
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Method importar {
archivo := self.abrirArchivo
self.grabarParametrosEnLog
while not self.finDeArchivo {
self.importarRegistro
self.avanzarBarraProgreso
}
self.grabarResultadosEnLog
self.cerrarArchivo
self.cerrarLog
}
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Method cargarLog(nombreDeArchivoLog) {
archivo := self.abrir(nombreDeArchivoLog)
nombreDeArchivo := self.nombreDeArchivoEn(archivo)
nombreDeTabla := self.nombreDeTablaEn(archivo)
cantDeProcesados := self.cantDeProcesadosEn(archivo)
cantDeImportados := self.cantDeImportadosEn(archivo)
errores := self.erroresEn(archivo)
self.cerrar(archivo)
}
o
Parser
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Importador
archivo
tabla
procesados
importados
errores
duración
importar
cargarLog
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Cambio de requerimiento: Logs de una sesión
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
5ta iteración: Log de sesiones de trabajo
Importador
archivo
tabla
logs
importar
DatosDelLog
archivo
tabla
procesados
importados
errores
duración
Vector
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Importador
archivo
tabla
logs
importar
Importador
archivo
tabla
logs
importar
DatosDelLog
archivo
tabla
procesados
importados
errores
duración
Importación
archivo
tabla
procesados
importados
errores
duración
fecha
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Serialización / Deserialización
una importación
01110011010010101011101010101010101
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Method importar {
self.abrirArchivo
while not self.finDeArchivo {
self.importarRegistro
self.avanzarBarraProgreso
}
self.cerrarArchivo
self.serializarImportación
}
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Importador
archivo
tabla
actual
logs
importaciones
importaciones
importaciones
importar
Importación
archivo
tabla
procesados
importados
errores
duración
fecha
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Importación
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
No existe más el término log
Mejoramos la comunicación con el cliente,
ateniéndonos al Dominio
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
Conclusiones del ejercicio
• ¿Fuimos eficientes?
• Fuimos eficientes
• ¿Fuimos eficientes?
• Formato, lectura, escritura y parsing del log
• Variables en Importador
• “Los cambios son inevitables y no anticipables”
• MVC (circa 1980)
• Observer (1994)
• Importador – Importación
© Copyright 2008, Dan Rozenfarb
Qué me importa (cont.)
“... herramienta que permita hacer una importación…”
Importador
Importación
© Copyright 2008, Dan Rozenfarb
Buen Diseño y Análisis
Como yerba mala, el buen diseño
nunca muere
¿Y el experto no anticipa estos problemas?
Tampoco el buen análisis
© Copyright 2008, Dan Rozenfarb
Desarrollar software es difícil
Crisis del Software
¿
?
“Software” como término
Ingeniería de software
1958
1968
‘58
‘68
‘08
¡50 años de “crisis”!
¡40 años de Ingeniería!
© Copyright 2008, Dan Rozenfarb
Modelar
Recorte y Proyección
Realidad
Dominio
© Copyright 2008, Dan Rozenfarb
Modelar (cont.)
Dominio
Modelo Conceptual
Modelo Formal
Qué
Análisis
Diseño
© Copyright 2008, Dan Rozenfarb
Buen Diseño
Modelo
(representación de lo que deseamos)
Software
(mantenible, flexible, etc.)
Ambos, muy difíciles de lograr
© Copyright 2008, Dan Rozenfarb
Modelo
Frederick Brooks
Aristóteles
1985
circa 330 a.c.
Complejidad
Esencial
Accidental
© Copyright 2008, Dan Rozenfarb
Modelo (cont.)
Don Quijote de la Mancha
Formato
Texto
Tamaño
2.140.886
© Copyright 2008, Dan Rozenfarb
Modelo (cont.)
Don Quijote de la Mancha
Formato
Texto
WinZip 9.0 SR-1 (enhanced deflate)
Tamaño
2.140.886
768.756
35%
© Copyright 2008, Dan Rozenfarb
Modelo (cont.)
Don Quijote de la Mancha
Formato
Texto
WinZip 9.0 SR-1 (enhanced deflate)
Re-comprimido
Tamaño
2.140.886
768.756
768.998
© Copyright 2008, Dan Rozenfarb
Modelo (cont.)
Don Quijote de la Mancha
Formato
Texto
WinZip 9.0 SR-1 (enhanced deflate)
Re-comprimido
WinRAR 3.51 (best compression)
Re-comprimido
Tamaño
2.140.886
768.756
768.998
505.328
506.704
23%
© Copyright 2008, Dan Rozenfarb
Modelo (cont.)
Don Quijote de la Mancha
¿Podemos reducirlo más?
Teoría de la información: entropía
© Copyright 2008, Dan Rozenfarb
Modelo (cont.)
Todo debe ser lo más simple posible,
pero no más
© Copyright 2008, Dan Rozenfarb
Buen Software
Mantenible
Comprensible
Eficiente (en espacio y tiempo)
Escalable
Robusto
Flexible
Bajo acoplamiento
Alta cohesión
etc.
© Copyright 2008, Dan Rozenfarb
Software (cont.)
SIMPLE
© Copyright 2008, Dan Rozenfarb
Paliativo a la complejidad
Simplicidad
(principio 10 del manifiesto)
William de Occam (≈1300):
Las explicaciones más simples son preferidas
a las más complejas
© Copyright 2008, Dan Rozenfarb
Paliativo a la complejidad
Principio K.I.S.S.:
Keep It Simple, Stupid
© Copyright 2008, Dan Rozenfarb
El otro enemigo
“Caminar sobre agua y desarrollar software a
partir de una especificación es fácil si ambas
están congeladas” – Edward V. Berard
Cambio
(principio 2 del manifiesto)
© Copyright 2008, Dan Rozenfarb
Cambio
Dominio
Esencial
Accidental
Es infrecuente
Habitual
Proporcionalidad
• Implementación
• Comprensión
• Relevamiento
• Humor del cliente
• Tecnología
• …
© Copyright 2008, Dan Rozenfarb
Cambio (cont.)
Factura ≈ Nota de Débito
© Copyright 2008, Dan Rozenfarb
Paliativos al cambio
Lo único inamovible es que habrá cambios
1. Anticiparlos
Aprender el dominio
Extraerle el conocimiento al experto
No alcanza con tenerlo en el equipo
Convertirse en uno
© Copyright 2008, Dan Rozenfarb
Paliativos al cambio (cont.)
Buen Análisis
© Copyright 2008, Dan Rozenfarb
Paliativos al cambio (cont.)
2. Modelo tolerante al cambio
Relación 1 a 1 con el dominio (más estable)
Encapsulamiento
Binding dinámico
Bajo acoplamiento
Alta cohesión
© Copyright 2008, Dan Rozenfarb
Paliativos al cambio (cont.)
Buen Diseño
© Copyright 2008, Dan Rozenfarb
Paliativos al cambio (cont.)
“Diga todo una y sólo una vez” – Kent Beck
Herramientas
Patterns
Frameworks
Refactoring
Reificación
…
Buenas prácticas
© Copyright 2008, Dan Rozenfarb
Paliativos al cambio (cont.)
No reinventemos la rueda
© Copyright 2008, Dan Rozenfarb
Y algo más
Actitud
© Copyright 2008, Dan Rozenfarb
Sobre la simplicidad
La simplicidad está al final del recorrido
© Copyright 2008, Dan Rozenfarb
Como yerba mala, nunca mueren
Larga vida a:
observar el dominio,
el buen análisis
y el buen diseño
© Copyright 2008, Dan Rozenfarb
¿Preguntas?
¿Eh?
Las imágenes pertenecen a sus respectivos dueños
© Copyright 2008, Dan Rozenfarb
Comentarios de: Dan Rozenfarb - Como yerba mala - Ágiles 2008 (0)
No hay comentarios