Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una vez estaba trabajando en una historia impresa para este proyecto de construcción, y tomé
la ruta del guerrero espartano (entregando la implementación básica). Tan pronto como lo
demostré, podría decir que al cliente simplemente no le gustó.
Eran demasiado educados para decir algo, pero podía sentirlo, y sabía que no era mi mejor
trabajo.
En ese momento, tuve que aguantar y preguntarles si podía intentarlo de nuevo. Ellos dijeron
que si.
Si no hubiera estado entregando durante siete semanas antes de esto, podrían haberme dado
una respuesta diferente. Pero cuando su cliente lo vea reventando su joroba todas las
semanas, lo perdonarán y le dejarán un poco de holgura por el tiempo ocasional que lo
fastidia.
Por lo tanto, no tengas miedo de probar cosas. Intentar y fracasar y tomar la iniciativa es parte
del juego.
A veces descubrirás una historia más grande de lo que pensabas. Está bien. Simplemente divídalo para que
encaje en una sola iteración, actualice el plan y continúe. La buena noticia es que esto funciona en ambos
sentidos (también encontramos que algunas historias son más pequeñas de lo que pensábamos).
No encontrará SPM cubiertos en ningún método ágil formal. Son solo un mecanismo que yo y otros hemos
encontrado útiles para evitar el desperdicio que proviene de comenzar una iteración con una historia sin
analizar.
Pero esa es la belleza de ágil. No hay una sola forma de hacer esto. Si necesita algo, créelo o hágalo usted
mismo (a pesar de lo que diga cualquier autor o libro).
Otra cosa que querrá hacer en cada iteración es obtener comentarios de los clientes.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
EL CASO 182
10.3 El escaparate
Iteración (n)
Demuestre las historias de esta iteración
¡Lo hiciste! Entregaste algo de valor. ¿Sabes cuántos proyectos duran semanas, meses y, a veces, años sin
entregar nada de valor? Mucho.
los escaparate es su oportunidad de mostrarle al mundo el gran trabajo que usted y el equipo han estado
haciendo y obtener comentarios reales de su clientela.
Durante un escaparate, usted y todo el equipo muestran las historias de la última iteración. Eso significa
mostrar código real en vivo implementado en un servidor de prueba. No son imágenes bonitas o mejores
intenciones. Es el material con el que podrías ir a la batalla y desplegarte hoy si realmente tuvieras que
hacerlo. Se hace.
Las vitrinas están destinadas a ser divertidas y son una excelente manera de cerrar el trabajo de la última
iteración. ¡Celebrar! Trae bocadillos o dulces. Presumir. Obtenga comentarios Deje que su cliente maneje la
demostración y vea cómo usan el software.
Veamos ahora los métodos ágiles para reuniones como Scrum y XP que recomendamos: la reunión de
planificación de iteración (IPM).
Escaparate
¡Establezca las expectativas
IPM Planifica la próxima iteración
de la próxima semana!
Mini retrospectiva
Iteración (n)
Verifique la salud del proyecto Revise la
velocidad del equipo Regístrese para historias
y comprométase
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
P LAN LA TERACIÓN EXT EXT 183
El IPM es donde se reúne con su cliente y planifica el trabajo de la próxima iteración. Usted revisa la
velocidad de su equipo, revisa las próximas historias y luego determina colectivamente cuánto pueden
comprometerse usted y el equipo para el trabajo de la próxima iteración.
Los MIP también son un buen momento para hacer una verificación del estado del mini proyecto.
Aquí puede dar un pronóstico del tiempo rápido sobre cómo va el proyecto. Si hay algo que necesita o hay
un problema particularmente difícil que le gustaría discutir, esta es su oportunidad para plantear el
problema, presentar algunas opciones y hacer algunas recomendaciones sobre cómo le gustaría proceder.
Cuando se trata de hablar sobre fechas, use su cuadro de quemado. Es brutalmente honesto y, de una
manera muy poco emotiva, le dirá a usted y a su cliente cuán realistas son sus citas.
Esfuerzo
restante
Nuevas historias
Ve Ve
l lo cid
oc
id ad
ad rea
es l
tim
ad
a
Iteraciones Hora
¿Qué debemos hacer con
estos?
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿CÓMO HACERSE INI- R ETROSPECTIVA? 184
• "Suzy, noté que hiciste un gran trabajo en la última iteración del módulo de impresión, pero
sus pruebas unitarias eran realmente deficientes ". O puede agregar una gota de miel y
endulzarla un poco:
¿Ver la diferencia? Al evitar el uso de la palabra pero, Puedes cambiar totalmente el tono y la
entrega del mensaje. No digo que debas cubrir todo con azúcar. Pero cambiando el mensaje a
veces, puede recorrer un largo camino para cambiar el comportamiento.
Para obtener el alcance completo sobre cómo comunicarse de manera efectiva, lea el clásico
de Dale Carnegie Cómo ganar amigos e influir en las personas [ Coche90 ]
Esta es la parte de visibilidad de ágil. Queremos ser lo más transparentes posible con nuestros clientes y
partes interesadas. Malas noticias temprano es el camino ágil.
Lo último que queremos hacer antes de dejar cualquier iteración es preguntarnos si hay algo que podríamos
estar haciendo mejor.
Principio ágil
A intervalos regulares, el equipo reflexiona sobre cómo volverse
más efectivo y luego ajusta y ajusta su comportamiento en
consecuencia.
Las retrospectivas pueden ser grandes, elegantes, asuntos de todo el día que se llevan a cabo al final de un
lanzamiento importante o cerca del final de un proyecto. Eso no es de lo que estoy hablando aquí.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿CÓMO HACERSE INI- R ETROSPECTIVA? 185
Estas retrospectivas son discusiones rápidas, enfocadas de diez a quince minutos, donde usted y su equipo
se reúnen regularmente y hablan sobre dónde están pateando el trasero y dónde deben mejorar.
La primera regla general para organizar una buena retrospectiva es asegurarse de que todos se sientan
seguros. Si crees que tienes un problema con la seguridad, saca la directiva principal retrospectiva y
recuerda a la gente de qué se trata.
"Suzy. Fue increíble cómo creaste esa guía de estilo y refactorizaste las hojas de estilo para que podamos
mantener fácilmente una apariencia constante en nuestra aplicación ".
Llamar a un buen comportamiento y dar apoyo a las personas que merecen ser reconocidas puede hacer
que las personas se sientan mal y alentar más el tipo de comportamiento que nos gusta ver en nuestros
proyectos.
“Equipo, muchos errores pasaron ese último lote de historias. Reduzcamos la velocidad, ajustemos las cosas
y asegurémonos de que estamos haciendo suficientes pruebas unitarias ”.
“Estamos viendo mucha duplicación en la base del código. Recuerde tomarse el tiempo y refactorizar el
código a medida que avanza ".
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
H OW N OT TO H OST AD T ADYY TAND-UP 186
“He arruinado completamente esa historia impresa. Lo siento. Permítanme darle otra oportunidad en esta
iteración, y les prometo que la próxima versión será mucho mejor ".
Cualquiera sea el problema, celebrar una retrospectiva y compartir ideas con los compañeros de equipo es
una excelente manera de reenfocar y energizar al equipo en las áreas que necesitan para apuntalar. Luego,
puede crear un tema para las próximas iteraciones y resaltar y realizar un seguimiento de las áreas que
desea mejorar.
Para obtener la guía definitiva para realizar retrospectivas, consulte Retrospectivas ágiles: hacer buenos
equipos buenos [ DL06 ]
Buen material. Terminemos repasando una excelente manera de alinear rápidamente a todos al comienzo
del día: el stand-up diario.
Iteración (n)
Stand-ups diarios
El stand-up diario se trata de compartir información importante con su equipo rápidamente. Es la reunión
para finalizar todas las reuniones. Tiene una duración de cinco a diez minutos, no se requieren sillas (para
recordarles a las personas que lo mantengan breve), y básicamente brinda una actualización sobre lo que
está trabajando y comparte todo lo que cree que el resto del equipo necesita saber.
Ahora, la mayoría de los libros de texto ágiles le dirán que cuando hace una parada diaria, debe pararse en
un círculo y hacer que todos en el equipo le digan a todos lo siguiente:
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
HACER LO QUE FUNCIONE PARA USTED 187
En su lugar, intente reunirse con su equipo al comienzo de cada día y, en su lugar, dígales lo siguiente:
• Cómo vas a atravesar cualquier obstáculo lo suficientemente desafortunado como para estar en tu
camino
Responder este tipo de preguntas cambia por completo la dinámica del stand-up. En lugar de solo pararte
allí y dar una actualización, ahora estás poniendo toda la línea y declarando tu intención al universo.
Cuando haces esto, una de dos cosas va a suceder. O vas a seguir adelante y cumplir o no. Depende
completamente de usted.
Pero puedo decirte esto: si apareces todos los días y declaras públicamente a tus compañeros lo que estás
comprometido personalmente a hacer ese día, aumenta dramáticamente las posibilidades de que lo hagas.
Ahora, en caso de que se pregunte si todos estos deben ser reuniones separadas o si puede agruparlos en
uno solo ... depende completamente de usted.
Para reducir al mínimo el número de reuniones, a algunos equipos les gusta combinar el escaparate, la
planificación de la próxima iteración y retroceder todo en uno y hacerlo en una hora (esa es mi preferencia,
y eso es lo que he presentado aquí bajo un IPM )
Otros prefieren separar la planificación de las vitrinas y hacer lo retro como una actividad divertida cerca del
final de la semana.
Y algunos equipos tienen un contacto tan bueno con sus clientes que no necesitan reuniones dedicadas de
planificación de historias (SPM). Simplemente hablan todos los días y tienen una sesión de diseño cuando
lo necesitan.
Recuerde, no hay una sola forma de hacer esto. Si algo no agrega valor, suéltelo. Pruebe diferentes cosas y
vea lo que funciona para usted.
Solo asegúrese de que en algún momento durante su iteración se ponga delante de su cliente, muéstrele un
software que funcione, establezca expectativas y busque formas de mejorar.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
HACER LO QUE FUNCIONE PARA USTED 188
UH oh. Parece que Master Sensei quiere ver si estás recogiendo algo de esto. Mejor pase al dojo y vea si
algo de esto tiene sentido. ¡Buena suerte!
Maestro Sensei
y el aspirante a
guerrero
Bienvenido de nuevo, estudiante. He preparado tres lecciones para probar su temple en varios escenarios
mecánicos de iteración de la vida real. Lea cada uno detenidamente antes de responder.
MAESTRO: Un día, durante un IPM, se hizo evidente que una historia solo estaba medio completa.
Queriendo mostrar el progreso, el joven gerente de proyecto quería contar la mitad de los puntos de la
historia hacia la velocidad del equipo de esta iteración y luego contar la otra mitad cuando la historia se
completó la próxima iteración. ¿Es esta una buena idea?
ESTUDIANTE: Bueno, si la historia está realmente hecha a medias, no veo ningún daño en reflejar con
precisión el estado de la historia contando la mitad de los puntos de la historia hacia la velocidad de esta
iteración y trasladando la otra mitad a la siguiente iteración.
MAESTRO: ¿Es eso así? Contéstame esto. ¿Puede un granjero transportar su arroz?
en un carro con una rueda? ¿Puede un hombre comer con un solo palillo? ¿Puede un cliente entrar en
producción con la mitad de una función?
MAESTRO: Para el guerrero ágil no hay 1/2, 3/4 hecho o 4/5 hecho para una historia de usuario. La historia
está completa, o no lo está. Por esa razón, el guerrero solo cuenta historias completamente probadas y
completadas hacia la velocidad de su iteración. Cualquier historia incompleta se transfiere.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
HACER LO QUE FUNCIONE PARA USTED 189
MAESTRO: Una vez hubo un equipo luchando para que los miembros asistieran a sus stand-ups diarios.
Los miembros del equipo pensaron que las reuniones no agregaban mucho valor y que podrían estar mejor
trabajando y hablando entre sí cuando sea necesario. ¿Qué debe hacer el equipo?
ESTUDIANTE: El líder del equipo debe recordar a todos la importancia de mantener a todos en la misma
página y el importante papel que juega el stand-up diario para lograrlo.
MAESTRO: Si. El equipo podría revisar los objetivos del stand-up diario y por qué se creó en primer lugar.
Pero, ¿qué pasa si, a pesar de eso, el equipo todavía siente que las reuniones son innecesarias?
MAESTRO: A pesar de todos los beneficios que provienen de una buena posición diaria, no es la única
forma. Si un equipo está ubicado conjuntamente, es pequeño y trabaja en estrecha colaboración entre sí y
con sus clientes de manera continua durante todo el día, puede que no siempre se requiera un stand-up
diario.
MAESTRO: Estoy diciendo que los equipos deben mantener esas prácticas que agregan
MAESTRO: Hubo una vez un equipo que realizó una iteración completa sin
ser capaz de entregar cualquier cosa de valor. El fracaso fue totalmente de su propia creación. No
planificaron, comenzaron tarde y, en general, eran flojos. Sabiendo que esto iba a ser un mensaje difícil de
entregar, cancelaron el escaparate con su cliente. ¿Fue esto sabio?
ESTUDIANTE: Aunque parte de mí siente que el equipo debería enfrentar la música por no entregar nada
de valor, supongo que si no tienen nada que mostrar, sería aceptable cancelar el escaparate. Sin embargo,
prefiero que sean honestos en cuanto a por qué.
MAESTRO: Ah ... te estás volviendo sabio, estudiante. No entregar nada de valor sucede de vez en
cuando, pero generalmente no por diseño o por falta de esfuerzo. ¿Cómo puede el equipo corregir esta
pereza en el comportamiento?
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
HACER LO QUE FUNCIONE PARA USTED 190
ESTUDIANTE: ¿Estás sugiriendo que se queden con el escaparate, Maestro? ¿Y enfrentar a sus clientes
sin tener nada de valor que mostrar?
MAESTRO: Hai! A veces sentir el aguijón de la vergüenza es el mejor maestro. Enfrentarse a sus clientes y
no tener nada que mostrar puede ser una experiencia humillante. Una vez experimentado, no es algo que
los equipos quieran volver a hacer.
No intente evitar situaciones desagradables en su proyecto. A veces son tu mejor maestro. Admite tus
errores, comparte lo que has aprendido con los demás y sigue adelante.
¿Que sigue?
Con un plan de comunicación en la mano y una buena comprensión de cómo funciona el desarrollo iterativo,
está en un buen lugar para ver cómo los mejores equipos ágiles lo convierten en un punto a la hora de
ejecutar con fi abilidad.
A continuación, aprenderá los secretos del espacio de trabajo visual y cómo aprovecharlo para mantenerlo a
usted y a su equipo con energía y concentración.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
Capítulo 11
Las tablas de estado de vuelo son geniales. En un vistazo rápido puede ver lo que viene, lo que va y lo que
se ha cancelado por completo.
Al aprender a crear un espacio de trabajo visual, usted y el equipo nunca perderán qué hacer a continuación
o dónde pueden agregar el mayor valor. Esto no solo le permitirá trabajar con mayor claridad y enfoque,
sino que la mayor transparencia también lo ayudará a establecer expectativas con los poderes que existen.
Ha habido una gran sacudida en las empresas. Los presupuestos han sido recortados. Las líneas de tiempo
han sido cortadas. Y todo debe hacerse mejor, más rápido y más barato.
Como resultado, se le ha pedido que haga más con menos. La gerencia desea que entregue la misma
cantidad de funcionalidad, con la mitad del equipo, un mes antes de lo previsto. Si no.
Todo está cayendo duro y rápido, y mañana quieren concertar una reunión con usted para confirmar que
está de acuerdo con el nuevo plan.
¡Trago! ¿Qué haces? Lo que están pidiendo es completamente irracional. Tú lo sabes. El equipo lo sabe.
Parece que son los únicos que no lo hacen.
¿Qué podría hacer para demostrar que si bien no le gustaría nada más que poder ofrecer la misma cantidad
de funcionalidad con la mitad de los recursos, no va a suceder?
En lugar de organizar una reunión formal y defender su caso en PowerPoint, invita a los ejecutivos a su área
de trabajo para ver primero y el estado del proyecto.
Comienzas llevándolos a través de la plataforma de inicio para tu proyecto, que convenientemente has
publicado en el muro.
Que va a
Por la noche Dimensionarlo dar
¿Qué va a
tomar?
El mazo de inicio, usted explica, es una herramienta que usted y el equipo usan para asegurarse de que
nunca pierdan de vista el objetivo del proyecto. Al hacerlo visible,
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
U H-OH ... H ERE C OME THE H EAVIES! 193
siempre sabe quién es el cliente, qué busca y, lo más importante, por qué decidimos gastar dinero en este
proyecto en primer lugar.
Impresionados, los ejecutivos se acercan y le preguntan en qué parte del proyecto se encuentra. Para
responder eso, entonces diriges su atención a tu liberar la pared.
Historias que
hemos hecho
allí
El muro de lanzamiento es donde usted y el equipo realizan un seguimiento de lo que se ha hecho y lo que
queda. El lado izquierdo de la pared muestra las características que el cliente ha analizado, desarrollado,
probado y examinado completamente (están listas para ser enviadas). Y el lado derecho muestra esas
historias que aún deben desarrollarse.
En cuanto a lo que el equipo está trabajando en esta iteración, atrae la atención de la administración al
guión gráfico de esta iteración.
El storyboard
Iteración actual Estado de las historias de usuario de esta iteración
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
U H-OH ... H ERE C OME THE H EAVIES! 194
El guión gráfico rastrea el estado de las características de esta iteración (o lo que llamamos historias del
usuario). Las características aún por desarrollar viven a la izquierda, mientras que las que han sido
construidas y bendecidas por el cliente viven a la derecha. A medida que la historia se desarrolla más, se
mueve en todos los ámbitos de izquierda a derecha. Solo cuando está completamente desarrollado,
probado y examinado por el cliente, pasa a la columna Listo.
Para responder eso, los lleva a los únicos dos cuadros en su muro que aún no los ha mostrado: la velocidad
de su equipo y el cuadro de quemado del proyecto.
V = 15 pts
Velocidad
(pts)
alimenta
Iteraciones Iteraciones
Explica que la velocidad del equipo es lo más cercano que usted y el equipo tienen para medir el nivel de
productividad del equipo. Al medir cuánto hace el equipo cada semana y usarlo como base para planificar
en el futuro, el equipo puede predecir con precisión cuándo esperan que se haga. Esto se muestra en el
cuadro de quemado del proyecto.
Con el escenario preparado, ahora señala con calma lo que ya debería ser obvio para todos en la sala.
Reducir a la mitad el equipo de desarrollo reduciría efectivamente la productividad del equipo a la mitad.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿CÓMO CIFRAR EL ESPACIO DE TRABAJO AVISUAL? 195
Impresionados con su dominio de la situación, los ejecutivos le agradecen su tiempo y pasan a su próxima
reunión de proyecto.
Unas semanas más tarde, recibirá un correo electrónico explicando que debido a que la compañía se dirige
en una nueva dirección estratégica, su proyecto se cancelará (la vida es así a veces).
Sin embargo, la buena noticia es que estaban tan impresionados con la forma en que manejaste tu
proyecto, ¡quieren que juegues un papel principal en la nueva iniciativa!
Este es solo un ejemplo artificial de cómo un espacio de trabajo visual puede ayudarlo a establecer
expectativas con las partes interesadas y hacer que la realidad de una situación sea evidente. Pero donde
realmente brilla es en ayudarlo a usted y a su equipo a ejecutar y concentrarse.
Ahora repasemos algunas ideas para crear su propio espacio de trabajo visual.
Crear un buen espacio de trabajo visual es bastante sencillo. Para equipos nuevos a ágiles, generalmente
recomiendo comenzar con lo siguiente:
• Un muro
• Un muro de liberación
El mazo de inicio es bueno porque le recuerda al equipo por qué están allí y de qué se trata realmente (que
puede ser fácil perder de vista cuando su cabeza está enterrada en su proyecto).
El muro de la historia es genial porque cualquier mañana cualquiera puede entrar y saber exactamente lo que
debe hacerse a continuación.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿CÓMO CIFRAR EL ESPACIO DE TRABAJO AVISUAL? 196
Muro de la historia
No empezado
Complemento
de Twitter
Error crítico de la
misión
El muro de la historia también le mostrará los cuellos de botella que tiene en el sistema y hacia dónde
querrá dirigir los recursos.
El storyboard
Iteración actual
El desarrollador ágil
¡Recursos necesarios aquí!
La pared de lanzamiento es algo hermoso, porque cualquiera puede entrar a su habitación y ver el estado
de su proyecto de un vistazo. Esto es lo que se hace. Esto es lo que queda. No se requieren matemáticas
sofisticadas ni hojas de cálculo de Excel.
Y como hablamos extensamente en la planificación ágil, nada establece las expectativas mejor que un buen
cuadro de quemado. Mantenga a uno de estos bebés en su pared, y siempre sabrá cuán realistas son sus
citas y qué tendencias tiene.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
S CÓMO NUESTRO I NTENT 197
Y, por supuesto, esto es solo el comienzo. Si tiene otras imágenes, maquetas o diagramas que lo ayuden a
usted y a su equipo a ejecutar, péguelos allí y haga que sean visibles para todos.
Aquí hay algunas otras ideas para crear su espacio de trabajo visual.
Los acuerdos de trabajo consisten en poner una estaca en el suelo como equipo y decir: "Así es como a
nosotros como equipo nos gusta trabajar". Es una forma de establecer expectativas con todos los miembros
del equipo sobre cómo va a funcionar su equipo y qué se espera de las personas si se unen a usted en este
viaje.
Los valores compartidos son los mismos, solo que más sensibles. Si el equipo se ha quemado en el pasado
porque se vieron obligados a comprometer la calidad y ya no quieren ser conocidos como ese equipo que
corta las esquinas y escribe software malo, pueden publicar sus valores compartidos y darlo a conocer.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
C REAR Y COMPARTIR AC OMMON D OMAIN LENGUAJE 198
Ubicación: Dispositivo:
Cuando las palabras utilizadas en su software no coinciden con las utilizadas por las empresas, puede
meterse en todo tipo de problemas.
• Las abstracciones incorrectas se integran en el software (las empresas pensarán ubicación significa
una cosa, mientras que los desarrolladores lo interpretarán como algo diferente).
• El software se vuelve más difícil de cambiar (porque las palabras que aparecen en la pantalla no
coinciden con las utilizadas para almacenarlo en la base de datos).
• Termina con más errores y mayores costos de mantenimiento (porque el equipo tiene que trabajar
más duro al hacer cambios en el software).
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
MIRAR LAS MANGUERAS 199
Para evitar esta disfunción, cree un lenguaje común que usted y la empresa compartan y úselo
implacablemente en sus historias de usuario, modelos, imágenes y código.
Por ejemplo, si hay algunas palabras clave que usted y su cliente usan cuando habla sobre el sistema,
escríbalas, presente definiciones claras sobre el significado de estas palabras y luego asegúrese de que
coinciden con esas definiciones en el software (que es decir, pantallas, código y columnas de la base de
datos).
Hacer esto no solo minimizará los errores y el reprocesamiento, sino que también hará que sea más fácil
hablar con su cliente porque su código siempre estará al tanto de cómo hablan sobre su negocio.
No tenemos el tiempo ni el espacio para hacer justicia a este tema. Pero hay un excelente libro sobre el
tema de Eric Evans: Diseño basado en dominios: abordar la complejidad en el corazón del software. [ Eva03 ]
Vale la pena leerlo.
hora
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
MIRAR LAS MANGUERAS 200
Para asegurarse de que usted y su equipo no se vean abrumados por un ataque sorpresa de errores justo
antes de pasar a la producción, realice un seguimiento y mantenga su cuenta regresiva desde el primer día de
su proyecto.
Si ayuda, dedique el 10 por ciento de cada iteración a la corrección de errores y al pago de la deuda
técnica. Simplemente aplasta a esos insectores en el acto y no dejes que ese recuento de insectos se te
escape.
Maestro Sensei
y el aspirante a
guerrero
ESTUDIANTE: Maestro, ¿qué pasa si mi lugar de trabajo no me permite crear un espacio de trabajo visual?
¿Qué tengo que hacer?
ESTUDIANTE: Si señor. ¿Pero debería luchar por el espacio de trabajo visual? ¿O simplemente aceptar que no
puedo tener uno?
MAESTRO: Eso depende de ti. Puedes comprometerte. Puedes consentir. O puedes confrontar. Hay un
tiempo y lugar para cada uno. Busca en tu corazón, busca aliados y decide si esta batalla vale la pena.
ESTUDIANTE: Si esta es realmente una práctica importante, ¿qué se puede hacer para
¿compromiso?
MAESTRO: Cuando se enfrentan a situaciones como estas, algunos guerreros han encontrado que crear
guiones gráficos plegables es útil para mantener limpio el lugar de trabajo, al tiempo que permite al equipo
comunicarse abiertamente durante el día. Otros han utilizado herramientas en línea y guiones gráficos
virtuales para compartir información importante, así como para mantener al equipo sincronizado.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
MIRAR LAS MANGUERAS 201
MAESTRO: Puede comenzar simplemente creando un espacio de trabajo visual, usarlo diariamente para su
proyecto y esperar que, a través del diálogo y la educación, los beneficios se hagan evidentes.
ESTUDIANTE: ¿Y si no lo hacen?
MAESTRO: Entonces, la causa raíz suele ser una basada en la emoción. Puede haber fuerzas
diametralmente opuestas a lo que está tratando de lograr. Trata de empatizar y comprender el espíritu
detrás de esas fuerzas que están en tu contra. Quizás a través del diálogo podrá encontrar una solución que
funcione para ambas partes. El tiempo y la paciencia pueden ser tus mejores aliados aquí.
¿Que sigue?
Tu viaje está casi completo. Tienes a todos en el autobús (Capítulo 3 , Cómo subir a todos en el autobús, en
la página 48 ), tienes el plan (Capítulo 8 , Planificación ágil: lidiar con la realidad, en la página 130 ), y sabes lo
que se necesita para ejecutar.
La siguiente parte del libro, "Ingeniería de software ágil", se centra en las prácticas básicas de ingeniería de
software ágil que usted y su equipo necesitarán para hacer que todo esto sea ágil.
Es una lectura obligada si corta el código, pero también se recomienda si alguna vez planea liderar un
proyecto ágil. Ninguna de estas cosas ágiles funciona a menos que esté respaldada por algunas prácticas
técnicas realmente sólidas, y aunque cada uno de los siguientes cuatro capítulos podría ser un libro en sí
mismo, los capítulos aquí le darán una idea suficiente para comprender cómo funcionan las prácticas y por
qué son importantes para la agilidad general de tu equipo.
Comenzaremos por echar un vistazo a uno de los mejores ahorradores de tiempo de cualquier proyecto de software: las
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
Parte v
Durante todo el tiempo dedicado a la planificación y gestión de expectativas, los procesos ágiles no
funcionan a menos que estén respaldados por un conjunto sólido de prácticas de ingeniería de software.
Aunque algunas prácticas, como la programación de pares de XP, han sido controvertidas, otras, como las
pruebas unitarias automatizadas, han sido ampliamente aceptadas.
En los cuatro capítulos finales del libro, aprenderemos sobre lo que me gusta llamar los no-cerebros de la
ingeniería de software ágil:
• Examen de la unidad
• Refactorización
• Integración continua
Cada uno de estos capítulos podría ser fácilmente un libro en sí mismo, pero al presentarle los conceptos
aquí, al menos tendrá una buena comprensión de lo que son y conocerá lo suficiente de la mecánica para
que usted y su equipo trabajen.
Todos los ejemplos están en Microsoft .NET C # (aunque los conceptos se pueden aplicar a todos los
lenguajes en general). Y no te preocupes si eres del tipo no técnico. Estas son cosas buenas para que
tengas en cuenta, y destacaré las cosas importantes a medida que avanzamos.
Comencemos con la práctica que sustenta la mayor parte de lo que hacemos cuando se trata de ingeniería
de software ágil: pruebas unitarias rigurosas y extensas.
Eres un perro con suerte! ¡Te acabas de unir a un equipo de desarrolladores de software que está creando un nuevo
Aquí está su primer corte del código en C # para una baraja completa de cartas:
solo lectura privada IList <Card> cards = nuevo Lista <Card> ();
público Cubierta () {
// bufón
tarjetas.Add (Card.JOKER); }
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¡BIENVENIDO A V EGAS, B ABY! 205
Usted lo hace a través de la revisión por pares, todo se ve bien, y justo antes de que esté listo para entrar en
producción, QA encuentra un error. ¡No hay una carta de comodín en un mazo de Black Jack! Usted corrige el
error, le da al QA una nueva compilación y lo lanza a producción.
Luego, un par de semanas después, recibió un desagradable correo electrónico del gerente de control de
calidad informándole que hubo un error importante en la producción anoche. Debían reembolsarse decenas
de miles de dólares porque alguien puso un comodín en el Tarjeta ¡clase!
"¿Qué?" tu dices. "Imposible. Lo solucioné hace un par de semanas. Profundizando más, descubres que
una estudiante de verano a la que estabas orientado te tomó demasiado literalmente cuando le pediste que
se asegurara de que tu clase de baraja de cartas se comportara como una baraja física con la que le diste
una prueba.
Parece que, sin darse cuenta, agregó el comodín de nuevo a la cubierta, pensando que había encontrado un
error.
Avergonzado y avergonzado, el estudiante de verano se disculpa contigo y con el resto del equipo. Detrás
de puertas cerradas, ella le pregunta qué puede hacer para asegurarse de que algo así nunca vuelva a
suceder.
Que le dices ¿Qué podría haber hecho ella (o usted) para asegurarse de que el error del comodín no tuviera
ninguna posibilidad de volver a entrar en la base de código una vez que se haya corregido?
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ENTRE LA PRUEBA DE U NIT 206
Las pruebas unitarias son pequeñas, las pruebas a nivel de método que los desarrolladores escriben cada vez que realizan un
cambio en el software para demostrar que los cambios que hicieron funcionan como se esperaba.
Por ejemplo, supongamos que queríamos verificar que nuestro mazo de cartas tuviera cincuenta y dos
cartas (y no cincuenta y tres). Podríamos escribir una prueba unitaria que se vería así:
[Accesorio de prueba]
[Prueba]
vacío público Verify_deck_contains_52_cards () {
Para ser claros, el código anterior no es el código real que ejecutamos como parte de nuestro simulador Black
Jack en producción. Este es un código de prueba que verifica que nuestro código real funciona como se
esperaba.
Siempre que tengamos dudas sobre cómo se va a comportar nuestro código o si queremos verificar que está
haciendo lo que esperamos, escribimos una prueba unitaria (en este caso, una que verifique que nuestro mazo
Las pruebas unitarias son invaluables porque una vez que automatizamos y hacemos que sean fáciles de
ejecutar, podemos ejecutarlas cada vez que hacemos un cambio en nuestro software y sabemos
instantáneamente si rompimos algo (más sobre esto en el Capítulo 15 , Integración continua: Haciéndolo
listo para la producción, en la página 236 )
Por lo general, los proyectos ágiles tendrán cientos, si no miles, de pruebas unitarias. Recorrerán toda la
aplicación probando todo, desde la lógica comercial de nuestra aplicación hasta si podemos almacenar la
información de nuestros clientes en la base de datos.
Los beneficios de escribir muchos de estos contra su base de código son muchos:
- Cuando realice cambios en su código y se rompa una prueba unitaria, lo sabrá al instante (no
tres semanas después de que haya entrado en producción).
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ENTRE LA PRUEBA DE U NIT 207
Extreme Programming (XP) tiene un mantra llamado "probar todo lo que pueda romperse". Es
un recordatorio para los desarrolladores que si hay algo que creen que tiene una posibilidad
razonable de romper el sistema, entonces deberían escribir una prueba automatizada en su
contra.
Nunca podemos probar todo, pero la práctica captura el espíritu de cuán ágil quiere que los
equipos piensen en las pruebas. Pruebe todo lo que crea que necesita para asegurarse de que
su software funciona y utilice su criterio para determinar dónde puede obtener el máximo
rendimiento de su inversión. En el capitulo 14 , Desarrollo guiado por pruebas, en la página 225 ,
veremos cómo el desarrollo de la prueba de manejo puede ayudarlo a encontrar dónde
maximizar sus dólares de prueba, así como a encontrar el equilibrio adecuado entre tratar de
probar todo versus probar lo suficiente.
- En lugar de tener que volver a probar todo manualmente cada vez que lanzamos una nueva
versión, nos ahorramos un montón de tiempo al automatizar las cosas fáciles para que
tengamos más tiempo para probar las cosas complicadas.
- Cuando falla una prueba unitaria, usted sabe exactamente dónde está el problema. No más
disparar al depurador y recorrer miles de líneas de código, buscando el fragmento de código
ofensivo. Las pruebas unitarias atraviesan la niebla como un láser y le muestran exactamente
dónde está el problema.
Piensa en las pruebas unitarias como la armadura que usas antes de entrar en batalla. Se convierten en una
forma de especificación ejecutable que vive para siempre en su código,
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ENTRE LA PRUEBA DE U NIT 208
s
jo
vie ue
os le sq r
ich mp na
B si cio
sa
s fun
Co ría
n
be
de
mano
Error hu
Problemas de
configuración
Lógica básica
Advertencia: también se encontrará periódicamente con casos en los que escribir una prueba automatizada
es difícil. Por ejemplo, escribir una prueba para verificar que podríamos barajar nuestro mazo de cartas es
difícil (ya que la respuesta es aleatoria y cambiaría cada vez). Además, probar concurrencia y aplicaciones
multiproceso puede ser un desafío, por decir lo menos.
Cuando te encuentres con casos como estos, no te desesperes. Son la excepción más que la norma. En la
abrumadora cantidad de casos, podrá crear instancias de un objeto y hacer afirmaciones sobre los métodos
que llame. Esto es aún más posible con todos los marcos de prueba de unidades disponibles actualmente.
En esos raros casos en los que no puede probar algo fácilmente, puede ser un problema con su diseño
(consulte el Capítulo 14 , Desarrollo guiado por pruebas,
en la página 225 ) O tal vez has heredado un código heredado que es realmente difícil de probar.
Si este es el caso, que así sea. Acepta que no podrás probar todo. Asegúrate de cubrirlo con algunas
pruebas manuales y exploratorias realmente buenas, y sigue adelante.
Simplemente no te rindas! Siempre trate de automatizar esa porción de código, porque tener esa pequeña
armadura adicional realmente puede salvar su tocino cuando llegue esa solicitud de reparación de error de
emergencia y tenga que liberarlo rápidamente.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ENTRE LA PRUEBA DE U NIT 209
También puedes leer Michael Feathers ' Trabajando efectivamente con código heredado [ Fea04 ], que tiene
muchas sugerencias invaluables sobre cómo trabajar duro con el código heredado y hacerlo más abierto al
cambio.
Ahora tu intenta
Vamos a hacerte pensar como un probador. ¿Qué pruebas unitarias crees que podríamos escribir contra
nuestra clase de mazo de cartas dados los siguientes requisitos? ¿Cómo podríamos evitar que ese
desagradable error de comodín vuelva a aparecer?
Si sus pruebas se parecen a estas, está en el camino correcto. Queremos probar todo lo que pueda
romperse, por lo que si sospecha que algo podría salir mal, póngase cómodo y escriba una prueba.
[Accesorio de prueba]
[Prueba]
vacío público Verify_deck_contains_52_cards () {
[Prueba]
vacío público Verify_deck_contains_thirteen_cards_for_each_suit () {
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ENTRE LA PRUEBA DE U NIT 210
[Prueba]
vacío público Verify_deck_contains_no_joker () {
[Prueba]
vacío público Check_every_card_in_the_deck () {
// los demás
}
Para los que no son técnicos, el código anterior contiene pruebas unitarias que hacen lo siguiente:
• Comprueba que cada mazo tiene trece cartas para cada palo
• Asegúrese de que nuestro mazo no contenga comodines (este es el error que se deslizó antes)
Solo hemos arañado la superficie de las pruebas unitarias, y se puede decir mucho más sobre el tema.
Afortunadamente, las pruebas unitarias se están volviendo tan comunes en los proyectos de software que la
mayoría de los lenguajes modernos tienen marcos de pruebas unitarias (disponibles gratuitamente para
descargar) y tutoriales que le muestran cómo comenzar.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ENTRE LA PRUEBA DE U NIT 211
Un buen lugar para comenzar para cualquier desarrollador que busque comprender el espíritu de la práctica es
el clásico documento introductorio de Kent Beck. 1
También puedes consultar Prueba de unidad pragmática en C # con NUnit [ HT04 ] y Pruebas de unidades
pragmáticas en Java con JUnit [ HT03 ]
Maestro Sensei
y el aspirante a
guerrero
ESTUDIANTE: Maestro, ¿cómo las pruebas unitarias no ralentizan a los equipos? Quiero decir, estás
escribiendo el doble de la cantidad de código, ¿no?
aún se desarrolla como se esperaba. Esto nos ahorra tiempo al no tener que hacer una prueba de regresión manual de
PREGUNTA: Si señor. Pero, ¿escribir pruebas unitarias no hará que el código sea frágil? ¿Cómo me aseguro
de que mis pruebas unitarias no se rompan cada vez que realizo un cambio en mi código?
RESPONDER: Aunque ciertamente es posible escribir pruebas frágiles que se basan en datos codificados,
están estrechamente acopladas y están mal diseñadas, a medida que se acostumbra a dejar que las
pruebas dirijan su diseño (Capítulo 14 , Desarrollo impulsado por pruebas, en la página 225 ), encontrará que
sus pruebas no tienden a romperse y, de hecho, mejoran su diseño general. La mayoría de los entornos de
desarrollo integrado (IDE) modernos también facilitan el manejo de los cambios en el código y las pruebas.
Puede cambiar el nombre de un método en toda su base de código simplemente presionando algunas
teclas. Esto ayuda a mantener sus pruebas y producción en movimiento como una sola.
PREGUNTA: ¿Es el 100 por ciento de cobertura de prueba unitaria algo que yo y mi equipo
1) http://junit.sourceforge.net/doc/testinfected/testing.htm
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ENTRE LA PRUEBA DE U NIT 212
RESPONDER: Eso es para que usted y su equipo decidan. Algunos marcos e idiomas facilitan el logro de
una buena cobertura de prueba. Otros hacen que sea difícil lograr una buena cobertura. Si recién comienza,
no se preocupe demasiado por la cobertura. Simplemente escriba tantas de las mejores pruebas que
pueda.
¿Que sigue?
Buen trabajo. Ahora conoce uno de los fundamentos básicos sobre los que descansan todas nuestras otras
prácticas ágiles de ingeniería de software. Sin pruebas unitarias automatizadas de sonido, todo se
desmorona.
A continuación, veremos cómo construir sobre nuestras pruebas unitarias y hacer algo tan crítico que, de
alguna manera, omitir esta práctica, nuestro producto se convertiría en otro blob de código demasiado caro
e imposible de mantener resistente a todas las formas de cambio.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
Capítulo 13
Refactorización:
Pagando su deuda técnica
Al igual que una casa con una hipoteca, el software tiene una deuda que también debe ser pagada
continuamente.
Al final del capítulo, verá cómo la refactorización reducirá sus costos de mantenimiento, le dará un
vocabulario común para realizar mejoras en el código y le permitirá agregar nuevas funcionalidades a toda
velocidad.
Entremos ahora en el mundo de la refactorización y veamos qué se necesita para ganar un centavo.
Parece que la competencia acaba de lanzar una versión "amigable para los niños" del producto Black Jack
en línea de su compañía, y se vende como pasteles calientes.
Para responder a esta nueva amenaza competitiva, usted y el equipo comienzan a trabajar de inmediato, y
por un tiempo todo va bien. Pero entonces algo extraño comienza a suceder. Lo que inicialmente parecía
una volcada ahora está empezando a parecer realmente difícil.
Por un lado, se ha copiado y pegado una gran cantidad de código en toda la base de código. Esto dificulta
agregar nuevas funcionalidades porque cada vez que realiza un cambio en un lugar, debe realizar el mismo
cambio en una docena de otros.
Además de eso, el código que usted y el equipo escribieron a toda prisa para cumplir con la última fecha
límite ahora ha vuelto para perseguirlo. Es realmente un desastre y es difícil trabajar con él. Para empeorar
las cosas, el programador que originalmente lo escribió ahora se ha ido.
Si ( sum2> = sum1) {
volver verdadero ;
}
más
falso retorno ;
falso retorno ;
}
No se preocupe si no puede entender este código (yo tampoco). Sin embargo, este es el código que
necesita cambiar. Este es el código que necesita mantener. Este es el código que (¡ack!) Introduces en
producción.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
DEUDA TÉCNICA 215
Trabajar y realizar cambios en esta base de código llevará más tiempo y costará más de lo que pensaba
originalmente.
Rápidamente se hace evidente que para hacer esto bien, necesitará al menos dos semanas para limpiar la
base de código existente antes de que pueda comenzar a agregar la nueva funcionalidad.
Desafortunadamente, son dos semanas de tiempo que su jefe dice que no tiene.
¿Qué salió mal? ¿Cómo podría algo agradable, simple y fácil de trabajar transformarse en algo tan grande,
feo y difícil de trabajar?
Ahora estamos listos para echar un vistazo a un concepto llamado deuda técnica.
$ 100
¿Cambio? ¡Olvídalo!
$ 10
Deuda El cambio es dificil
técnica $1
El cambio es fácil do
iza
tor
ac
ref
no
digo
Có
do
factoriza
Código re
La deuda técnica es la acumulación continua de atajos, hacks, duplicaciones y otros pecados que
cometemos regularmente contra nuestra base de código en nombre de la velocidad y el horario.
Siempre tendrá alguna deuda en su código (no tener ninguna significaría que no está probando cosas
innovadoras o diferentes), pero tendrá
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 216
Si bien la mayor parte de nuestra deuda técnica está centrada en el código, también puede
tenerla en datos y archivos de compilación y configuración. Una vez fui parte de una reescritura a
gran escala para un sistema de fondo donde el nombre de una ciudad se deletreaba de dos
maneras diferentes. El costo de esta aparentemente pequeña diferencia fue enorme. En lugar de
no importarles cómo se deletreaba la ciudad, tuvieron que escribir y llevar este código y
complejidad adicionales mientras ese sistema permaneciera en producción, lo que para los
sistemas mainframe puede durar mucho tiempo.
sepa que ha acumulado demasiado cuando lo que solía ser divertido, fácil y simple ahora es doloroso, difícil
y complejo.
La deuda técnica puede tomar muchas formas (código de espagueti, complejidad excesiva, duplicación y
descuido general), pero lo que lo hace realmente peligroso es cómo te engaña. Cada transgresión realizada
inicialmente contra la base del código puede parecer pequeña o insignificante. Pero como todas las formas
de deuda, es el efecto acumulativo que se acumula con el tiempo lo que duele.
Lo que necesitamos es una forma de pagar sistemáticamente nuestra deuda técnica a medida que
avanzamos. Necesitamos una forma de mejorar y mantener gradualmente la integridad y el diseño de nuestro
software que nos permita cumplir con los objetivos de hoy y estar en una buena posición para manejar los
desafíos aún desconocidos que vendrán mañana.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 217
Cuando refactorizamos nuestro código, no estamos agregando nuevas funcionalidades o incluso corrigiendo
errores. En cambio, estamos mejorando la comprensión de nuestro código al hacer que sea más fácil de
comprender y más susceptible de cambiar.
Por ejemplo, cada vez que cambia el nombre de un método o variable mal nombrados en un esfuerzo por
facilitar su lectura y comprensión, está refactorizando.
Refactorizaciones
sal decimal; salario decimal [Cambiar nombre de variable]
A primera vista, las refactorizaciones como estas pueden parecer pequeñas e insignificantes. Pero cuando
se aplican de forma continua y agresiva contra una base de código, pueden tener un profundo impacto en la
calidad y la capacidad de mantenimiento del código.
Por ejemplo, eche un vistazo a estos fragmentos de código y pregúntese cuál requiere más esfuerzo para
leer y comprender:
if (NotSummer (fecha))
carga = WinterCharge (cantidad); más
No tiene que ser desarrollador ni conocer C # para ver que el segundo ejemplo es mucho más fácil de leer y
comprender que el primero. Escribir código es muy parecido a escribir una buena prosa. Usted quiere que
sea claro, fácil de entender y que no requiera mucho esfuerzo para descubrir lo que está sucediendo.
La refactorización es la salsa secreta que los programadores orientados a objetos usan para hacer esto. Al
elegir métodos y variables bien nombrados y ocultar detalles innecesarios del lector, pueden comunicar su
intención muy claramente, haciendo que el código sea fácil de entender y fácil de cambiar.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 218
Principio ágil
La atención continua a la excelencia técnica y al buen
diseño mejora la agilidad.
En esencia, de eso se trata la refactorización: recordarnos que el software está escrito y mantenido por
personas como usted y yo. Y si no podemos hacer que nuestro software sea fácil de cambiar y sea un
placer trabajar con él, no será muy divertido cada vez que necesitemos hacer cambios o agregar nuevas
funcionalidades.
Cuando refactoriza agresivamente, no disminuye la velocidad cerca del final de un proyecto, sino que
acelera. Eso es porque cuando ha mantenido su diseño en el tiempo, ha realizado la mayor parte del trabajo
pesado. Las nuevas características se basan en las más antiguas y bien diseñadas. Luego puede
aprovechar su arduo trabajo y cosechar las recompensas de mantener una casa en orden.
Refactorizar agresivamente significa no guardar todas sus refactorizaciones hasta el final de una iteración.
Esto es lo que quieres hacer continuamente durante todo el día.
Cuando se hace bien, la refactorización es casi invisible. Los pasos son tan pequeños y las mejoras tan
pequeñas que es casi imposible distinguir cuándo alguien está refactorizando el código y agregando nuevas
funciones.
Deuda Refactor
Semanal
Diario
Minutos
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 219
Eso es suficiente teoría. Vamos a estirar al viejo cerebro y probar esto por nosotros mismos:
Ahora tu intenta
¿Qué mejoras podríamos hacer en la versión amigable para los niños de nuestro juego Black Jack que
vimos al comienzo del capítulo?
var h1 = mano1; int sum1 = 0; ÊÊÊÊÊÊÊÊÊÊÊ foreach alguna variable que podamos renombrar?
devuelve verdadero;
másÊÊÊÊÊÊÊÊ
falso retorno; }
Un buen lugar para comenzar al realizar cualquier refactorización es asegurarse de que todas nuestras variables y
nombres de métodos sean buenos. Entonces, ¿por qué no comenzamos limpiando esos primero?
}
Refactorización: Simplificó el código
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 220
Bueno, eso se ve un poco mejor. Es un poco más legible. Pero aún no hemos terminado. Todavía hay algo
más de duplicación allí. ¿Qué pasa si intentamos extraer alguna lógica de aspecto similar en su propio
método?
int handValue = 0;
return handValue; }
es mucho más fácil de leer. Y si alguna vez queremos ver los detalles de cómo se calcula la mano del
jugador, siempre podemos desplegarnos en el GetPlayerHandValue método y eche un vistazo.
Este código es bastante claro. Si quisiéramos llevarlo al siguiente nivel, por supuesto, también podríamos
hacer algo como esto:
• Variable en línea
• Método de extracción
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 221
Para cualquier gerente que lea esto, esto es importante porque ahora, cuando el equipo necesita hacer ese
error de emergencia o hacer ese cambio de misión crítica, podrán hacerlo mejor, más rápido y más barato
que antes.
En lugar de pasar innumerables horas tratando de averiguar qué está haciendo el código, pueden ir
directamente al trabajo y hacer el cambio.
Por esta razón, debe ser un gran defensor y animador para garantizar que los programadores de su equipo
estén refactorizando agresivamente y pagando continuamente cualquier deuda técnica.
Gran pregunta A veces necesitamos hacer cambios más grandes en nuestro software que simplemente cambiar
el nombre de algunas variables. Es posible que sea necesario reemplazar una biblioteca o un marco, una nueva
herramienta que deba integrarse, o creemos que la publicidad de marketing es demasiado y ahora necesitamos
reemplazar una herramienta en la que confiamos para un poco de trabajo pesado.
Cualquiera sea la razón, las grandes refactorizaciones surgen de vez en cuando, y necesitamos una forma
de manejarlas.
Si el cambio se impone desde fuera del equipo y es algo que solo debemos hacer, trate la refactorización
como cualquier otra historia de usuario. Estimarlo, priorizarlo, hacer visible el costo y mostrar el impacto que
tendrá en el proyecto.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 222
Una vez, al crear una aplicación de intercambio de energía, nuestro equipo se fue e hizo varias
refactorizaciones a gran escala en la base del código y no agregó mucho en cuanto a nuevas
funcionalidades durante varias semanas.
Bueno, no pasó mucho tiempo para que la gerencia despreciara la palabra refactorización porque
llegó a significar volver a trabajar y no agregar ninguna funcionalidad nueva), y pronto llegaron
los edictos desde arriba que no volverá a refactorizar.
No dejes que esto te pase a ti. Refactorizar continuamente a medida que avanza. Es mucho
más difícil pagar la deuda técnica más tarde, y lo último que quiere hacer es darle un nombre
sucio a la refactorización.
10 pts
gran refactorización
Los más difíciles de manejar son aquellos casos más subjetivos en los que podríamos pasar si seguimos
trabajando, pero la recompensa de hacer este cambio realmente podría pagar dividendos en el futuro.
Si su gran refactorización cae en esta área gris, hágase dos preguntas antes de decidir si continuar:
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 223
Las grandes refactorizaciones al final del proyecto generalmente no valen la pena porque no tendrá tiempo
para cosechar las recompensas de su trabajo. Por lo tanto, generalmente es una buena idea aprobar si está
cerca del final de su proyecto.
Las refactorizaciones incrementales son más fáciles de vender a su cliente porque significa que usted y el
equipo no van a desaparecer en ellas. Continuarán viendo nuevas funcionalidades en su software mientras
usted elimina la refactorización de manera incremental.
Solo eche un vistazo a su situación. Mira lo que hay que hacer. Y si parece que le ahorrará mucho dolor,
hágalo, probablemente valga la pena hacerlo.
Solo hemos arañado la superficie sobre el tema muy importante de la refactorización, y este pequeño
capítulo no trata el tema en ninguna parte cerca de la justicia que merece.
El libro que realmente quieres leer es Martin Fowler Refactorización: Mejora del diseño de código existente [ FBB
+ 99 ]
Otro digno de leer es el de Michael Feathers Trabajando efectivamente con código heredado [ Fea04 ]
Maestro Sensei
y el aspirante a
guerrero
MAESTRO: Salvo por las refactorizaciones a gran escala que ya discutimos, no. En general, desea
refactorizar su código cada vez que realice un cambio en el software.
ESTUDIANTE: ¿He fallado si alguna vez necesito una iteración dedicada a nada más que refactorizar?
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
M AKE P AYMENTOS A TRAVÉS DE R EFACTORING 224
MAESTRO: No, es menos que ideal. Esfuérzate por hacer tus refactorizaciones en pequeño para que no
necesites hacerlas en grande. No siempre tendrá éxito, y a veces se requieren grandes cambios. Pero trata
de hacer de ellos un último recurso. No es algo que haces regularmente.
¿Que sigue?
Buen material. Las pruebas unitarias y la refactorización juntas forman un poderoso golpe entre dos contra el
que la mayoría de los software mal diseñados no pueden resistir.
Pero hay otra práctica que debes conocer, una que no solo te ayuda con el diseño de tu software, sino que
también te ayuda a calcular cuánto debes probar.
Pase la página para descubrir el arte del desarrollo basado en pruebas y para ver cómo la escritura de pruebas nos
ayuda primero mientras observamos nuestro lienzo de código en blanco y nos preguntamos dónde debería comenzar
todo.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
Capítulo 14
Estas atorado. Perplejo. Has estado mirando un código en particular todo el día, y simplemente no sabes
cómo desglosarlo ni siquiera por dónde comenzar.
Hay algo sobre su código. Simplemente parece funcionar. Cada vez que usas cualquiera de sus códigos, es
como si él hubiera leído tu mente. Todo lo que necesita está ahí, respaldado por un conjunto completo de
pruebas unitarias automatizadas.
Frustrado pero al darse cuenta de que necesita ayuda, finalmente reúne el coraje y se dirige al escritorio de
Eric. "¿Cómo se escribe un código tan bueno y limpio?"
El desarrollo basado en pruebas (TDD) es una técnica de desarrollo de software que utiliza ciclos de
desarrollo realmente cortos para diseñar su software de forma incremental.
1) Rojo: Antes de escribir cualquier código nuevo para el sistema, primero escriba
una prueba de unidad fallida, que muestra la intención de lo que le gustaría que hiciera el nuevo
código. Aquí estás pensando críticamente sobre el diseño.
2) Verde: Luego haces lo que sea necesario para que la prueba pase. Si tu
vea la implementación completa, agregue el nuevo código. Si no lo hace, haga lo suficiente para
aprobar el examen.
sd
ba
ep
ue
ru
pr
eb
La
Círculo TDD
de vida
Refactor
Cuando se le pregunta cómo sabe cuándo detenerse, Eric responde que sigue repitiendo el proceso de
escribir pruebas, haciéndolas pasar y refactorizando hasta que esté seguro de que el código hace todo lo
que la historia del usuario requiere (generalmente esto significa pasar todos los criterios de aceptación de la
historia).
También tiene algunas reglas generales para ayudarse a sí mismo a mantenerse en el camino.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ESCRIBA SUS NUESTRAS PRUEBAS 227
Regla n. ° 1: No escriba ningún código nuevo hasta que primero tenga una prueba fallida.
Eric admite fácilmente que no puede seguir esta regla el 100 por ciento del tiempo (algunas cosas son
realmente difíciles de probar primero, como las interfaces de usuario). Pero el espíritu de esto, explica, no
es escribir más código del que sea absolutamente necesario. Escribir una prueba primero nos obliga a
pensar en el valor de lo que estamos agregando y nos ayuda a evitar que diseñemos en exceso la solución.
Seguir esta regla no significa que literalmente pruebes todo —Eso tomaría una eternidad. La palabra clave
aquí es posiblemente. Si existe una posibilidad plausible de que algo se rompa o si queremos mostrar
intención en cómo se comportará el programa bajo ciertas condiciones, escribimos una prueba para ello.
Crear perfil de
cli ente Criterio de pru
eba
vos perfiles
en la espalda * * guardar nue
* * buscar du
plicados
* * validación
básica
"Como saben, tenemos algunos grandes apostadores aquí en Las Vegas", explica Eric. “Algo que a
nuestros muchachos del almacén de datos les gusta hacer es perfilar a los motores y agitadores. Calculan
sus gustos, disgustos, comidas favoritas, bebidas favoritas y cualquier otra cosa que pueda ayudarnos a
llevarlos de vuelta a nuestro casino.
“Ahora, ya tenemos un objeto de perfil de cliente en el sistema. Lo que necesito hacer es averiguar cómo
almacenar esa información de perfil en la base de datos ”.
Lo primero que hace Eric es escribir una prueba. Aquí se imagina que el código que necesita probar ya
existe, y simplemente está escribiendo una prueba para probarse a sí mismo que funciona:
[Prueba]
vacío público Create_Customer_Profile () {
// preparar
gestor var = nuevo CustomerProfileManager ();
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ESCRIBA SUS NUESTRAS PRUEBAS 228
// agregarlo
En t uniqueId = manager.Add (perfil); // obtener id de la base de datos
profile.Id = uniqueId;
// limpiar
manager.Remove (uniqueId); }
Confiando en su prueba le dirá si puede agregar de manera segura un nuevo perfil de cliente, luego cambia
de marcha y ahora se enfoca en lograr que la prueba pase.
Aquí él ve claramente lo que hay que hacer (tomar la información del perfil del cliente y almacenarla en la
base de datos), por lo que continúa y agrega la nueva funcionalidad.
// finge que este código almacenó el perfil // en la base de datos y devolvió una
identificación real
regreso 0; }
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
ESCRIBA SUS NUESTRAS PRUEBAS 229
La refactorización es el tramo final de su viaje TDD. Ahora regresa y revisa todo (código de prueba, código
de producción, archivos de configuración y cualquier otra cosa que tocó para que la prueba pase) y lo
refactoriza todo realmente (Capítulo 13 , Refactorización: pagar su deuda técnica,
en la página 213 )
Después de refactorizar, regresa y se pregunta si ha probado todo lo que podría romperse. Para esta
historia, necesita verificar que no permitimos duplicados.
Entonces, repite el mismo proceso. Escriba una prueba reprobatoria, haga lo suficiente para aprobarla y luego
refactorice.
A veces tiene un pequeño problema con el huevo y la gallina (antes de que pueda probar si la inserción
funciona, necesita un código que le diga si el cliente ya existe).
Cuando eso sucede, simplemente pone su prueba actual en espera, agrega la nueva funcionalidad
(probando primero, por supuesto), y luego vuelve a lo que sea que estaba trabajando antes.
Agradeces a Eric por su demostración de TDD y regresas a tu escritorio con pensamientos de pruebas,
refactorización y códigos que te pasan por la cabeza.
Detengámonos y reflexionemos por un segundo sobre lo que acaba de suceder aquí y por qué es
importante.
En TDD escribimos primero las pruebas y luego las hacemos pasar. Esto parece al revés. Definitivamente
no es lo que nos enseñaron en la escuela.
Pero piénsalo por un segundo. ¡Qué mejor manera de diseñar su software que imaginar que ya existe!
Eso es todo lo que estamos haciendo TDD. Los programadores escriben el código que necesitan como si ya
existiera y luego lo prueban para asegurarse de que funciona. Es una forma maravillosa de asegurarse de que
construye solo lo que necesita mientras prueba que funciona.
Ahora no se asuste si su equipo no toma de repente TDD como un pez al agua. Es una técnica de
codificación más avanzada que se basa en pruebas unitarias y refactorización. Y para estar seguros, habrá
momentos en los que no podrá hacer TDD y solo querrá sentarse y hackear para resolver las cosas.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
UTILICE LAS PRUEBAS PARA COMER CON C OMPLEXIDAD 230
Pero una vez que tenga lo básico y experimente el ritmo y la potencia que proviene de escribir una pequeña
prueba, hacerla pasar y luego refactorizarla, le gustará la apariencia y las pruebas de su código.
Los desarrolladores se enfrentan a una gran complejidad al escribir código. Mire cuántas decisiones tomó
Eric al desarrollar su interfaz de programación de aplicaciones (API) "Crear perfil de cliente".
clase de padres
CustomerProfileRepository
x6 decisiones
public int Add (perfil del perfil del cliente)
de diseño
¡Por una sola línea de
código!
Cuentalos. Esas son seis decisiones de diseño, compensaciones y bifurcaciones en el camino en las que el
desarrollador debe pensar, ¡todo por una sola línea de código! No es de extrañar que las cosas se caigan
periódicamente.
Al escribir sus pruebas primero y asegurarse de que tiene una prueba reprobatoria antes de
agregando el nuevo código, TDD lo ayuda a luchar contra la gran cantidad de complejidad que usted y su
equipo enfrentarán al escribir código todos los días.
TDD también le ofrece una forma de diseñar con confianza. Al concentrarse en una sola prueba y hacerla
pasar, no tiene que tener mil cosas en su cabeza a la vez.
Puede enfocarse en un pequeño problema, aprender de manera incremental cómo abordarlo mejor y
obtener la retroalimentación instantánea que necesita para decirle si se dirige en la dirección correcta.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
UTILICE LAS PRUEBAS PARA COMER CON C OMPLEXIDAD 231
Diseño más
Menos código
simple
Todo esto facilita una base de código mucho más fácil de mantener y modificar. Con menos código viene
menos complejidad. Y con un diseño más simple, hacer cambios y modificaciones se vuelve mucho más
fácil.
Basta de hablar ya. Hagamos algunas pruebas y veamos cómo le va en la pista de prueba.
Ahora tu intenta
Eric te invita a emparejarte con él al escribir un código que compara el valor de dos cartas. Él piensa que la
funcionalidad debería ir en el Tarjeta clase y quisiera su ayuda para completar el examen.
Escriba el nombre del método que le gustaría ver en el Tarjeta clase que compara dos cartas y dice si una es
mayor que la otra.
lla
fa
ba
ue
pr
La
Círculo TDD
de vida
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
UTILICE LAS PRUEBAS PARA COMER CON C OMPLEXIDAD 232
[Prueba]
vacío público Compare_value_of_two_cards () {
Entregándole el teclado, Eric le pregunta si puede pasar la prueba. Se te ocurre algo como esto:
En t thisCardValue = value;
En t newCardValue = newCard.value;
regreso thisCardValue <newCardValue; }
Pa
se
sd
ep
ru
eb
a
Círculo TDD
de vida
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
UTILICE LAS PRUEBAS PARA COMER CON C OMPLEXIDAD 233
Después de pasar la prueba, Eric le pregunta si ve algo que le gustaría refactorizar. Tú lo haces. Después
de hacer algunos cambios en las pruebas y el método, su código ahora se ve así:
[Prueba]
vacío público Compare_value_of_two_card () {
Círculo TDD
de vida
Refactor
Después de completar un bucle del círculo TDD, Eric sonríe y dice: "¡Creo que lo tienes!" Deseoso de
probar esto en parte de su propio código, le agradece a Eric y vuelve a su escritorio para escribir algunas
pruebas propias.
Para realmente entender el espíritu de TDD, recomiendo el libro de Kent Beck Desarrollo guiado por
pruebas: por ejemplo [ Bec02 ], que tiene algunos buenos consejos y trucos sobre la mecánica más profunda
de TDD y cómo hacer que funcione para usted.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
UTILICE LAS PRUEBAS PARA COMER CON C OMPLEXIDAD 234
Maestro Sensei
y el aspirante a
guerrero
ESTUDIANTE: Maestro, estoy confundido acerca de TDD. ¿Cómo se supone que debo escribir pruebas para
código que ni siquiera existe?
ESTUDIANTE: Entonces, estás diciendo que solo escribas pruebas para las cosas que necesito, y todo lo que el
MAESTRO: Si.
ESTUDIANTE: ¿Puedes explicar un poco cómo funciona exactamente toda esta magia?
está utilizando las pruebas como una puerta de entrada para darse cuenta de su intención. Esta es la razón por la
que a menudo se hace referencia a TDD como una técnica de diseño y se trata menos de pruebas.
MAESTRO: Eso sería una simplificación excesiva. La prueba es una parte central de TDD, porque usamos
pruebas para probar que el código que producimos funciona. Pero no podemos completar las pruebas sin
primero hacer un diseño y mostrar nuestra intención a través del código.
¿Que sigue?
¿Puedes sentir cómo se desarrollan las prácticas? Las pruebas unitarias nos dan la confianza para saber lo que
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
UTILICE LAS PRUEBAS PARA COMER CON C OMPLEXIDAD 235
ple, y TDD nos brinda una herramienta poderosa para lidiar con la complejidad y el diseño.
Todo lo que queda ahora es la única práctica para unirlos a todos y garantizar que su proyecto esté en un
estado continuo de preparación de producción.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
Capítulo 15
Integración continua:
Haciéndolo listo para la producción
Prepárese para un poco de bondad lista para la producción. Al aprender cómo integrar continuamente su
software, eliminará los errores de manera temprana, reducirá el costo de realizar cambios en su software y
podrá implementar con confianza.
15.1 Showtime
Primero las buenas noticias. Su director está trayendo algunos inversores influyentes para ver la última
versión de su producto insignia Black Jack. ¡La mala noticia es que estarán aquí en una hora!
Eso le deja menos de sesenta minutos para crear una compilación estable, insertarla en el servidor de
prueba y prepararse para la demostración.
¿Qué haces?
Antes de responder eso, pase dos minutos pensando en todas las cosas que pueden salir mal cada vez que
implementamos nuestro software.
Documentación desactualizada
Estas son las cosas que queremos eliminar, o al menos administrar, con nuestro proceso de integración
continua. Queremos crear una cultura de preparación para la producción y poder demostrar nuestro producto a
cualquier persona, en cualquier momento y en cualquier lugar.
¡Una hora! Eso no te deja mucho tiempo. Al presionar el botón de pánico, inmediatamente reúne al equipo
y, como una ametralladora, comienza a responder preguntas:
Sin confiar en que nadie haga esto correctamente, sino usted mismo, informa a todos que su caja se
convertirá en la caja de integración para la demostración y todos tienen quince minutos para fusionar sus
cambios en la rama de su código.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
TIEMPO DE LA FUNCION 238
A medida que las personas comienzan a fusionar su código, surgen más problemas. Las interfaces en las
clases principales han cambiado. Los archivos de con fi guración han sido modificados. Los archivos del sistema
anterior se han reestructurado y faltan. Fusionar todos los cambios a la vez rápidamente se convierte en una
pesadilla de integración.
Maldiciendo silenciosamente al director por no darle suficiente tiempo, le dice a la gente que comente y
piratee cualquier cosa que les impida integrar su código.
Luego, con cinco minutos de sobra, verá un tenue rayo de esperanza: ¡se compila!
Pero luego desastre: los inversores se presentan cinco minutos antes. No hay tiempo para probar.
Cruzando los dedos, despliega el software, abre la aplicación para la demostración y ... se bloquea. Arregla
ese problema rápidamente y abre la aplicación, solo para que se bloquee nuevamente después de pasar
por la pantalla de presentación introductoria.
Ligeramente avergonzado y al ver que la demostración no está yendo como se esperaba, el director le
pregunta al equipo si tal vez podrían ver algunas maquetas.
Escenario 2: El No Evento
Sabiendo que tiene una hora completa antes de la demostración, le informa al equipo que pronto habrá una
demostración y les dice que si pudieran registrarse y concluir lo que sea que estén trabajando, sería
apreciado enormemente.
Una vez que se ha guardado el trabajo de todos, revisa la última versión del código, ejecuta todas las
pruebas y, viendo que todo funciona, empuja a prueba. El proceso está completamente automatizado y
toma aproximadamente cinco minutos.
Los inversores llegan temprano. La demo va genial. Y su jefe le agradece por poder presentar con tan poco
tiempo de aviso y le entrega algo que siempre quiso: las llaves del baño ejecutivo.
De acuerdo, tal vez no quieras las llaves del baño, pero entiendes el punto.
Prepararse para las demostraciones e introducir el código en la producción no tiene que ser un gran evento
estresante, laborioso y lleno de ansiedad.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
AC ULTURE DE P RODUCTION R EADINESS 239
Hay un dicho en Extreme Programming de que la producción comienza el primer día del proyecto. Desde el
primer día que escribe una línea de código, trata el proyecto como si estuviera en producción y después de
eso, simplemente realiza cambios en un sistema en vivo.
Es una profunda diferencia en cómo ves tu código. En lugar de ver la producción y la implementación como
un evento en el futuro distante, imagina que usted y su equipo están en producción hoy y comienzan a
comportarse en consecuencia.
A los agilistas les gusta esta noción de preparación para la producción porque reconoce que el software
pasa mucho más tiempo en producción que en desarrollo, y acostumbra a los equipos a la idea de hacer
cambios en un sistema listo para la producción.
Sin embargo, mantener una cultura de preparación para la producción no es fácil ni gratuito. Se necesita
una disciplina extrema, y la tentación de retrasar la inversión en código de calidad de producción en nombre
del cronograma puede ser grande.
Pero aquellos que hacen la inversión temprano pueden convertir sus proyectos en un centavo. Se
despliegan con facilidad, realizan cambios en sus sistemas de forma regular y segura, y responden a las
necesidades de sus clientes más rápido que sus competidores.
Base de
código único
Repositorio
de código
fuente
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿QUÉ ES LA NTEGRACIÓN CONTINUA DE ISC? 240
La integración continua es el acto de tomar continuamente los cambios que los desarrolladores hacen en su
software e integrarlos todos juntos de manera continua durante el día.
Para utilizar una analogía de escritura de libros, imagine que usted y su coautor están trabajando juntos en
un capítulo, y deben fusionar sus cambios con los de ella. Combinar algunas ediciones simples para un par
de oraciones no es tan malo.
Es cuando no integramos nuestros cambios por largos períodos de tiempo cuando nos encontramos con
problemas.
Escribir software es lo mismo. Cuanto más tiempo pase sin integrar sus cambios con sus compañeros de
equipo, más difícil será la combinación cuando lo haga.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿COMO FUNCIONA? 241
Mantenlo rápido
Una vez estuve en un proyecto que tenía una gran herramienta de automatización de prueba de
grabación / reproducción. Fue tan bueno, de hecho, que todos comenzaron a usarlo para grabar todas
sus pruebas, y dejaron de escribir las pruebas unitarias más rápidas y de bajo nivel.
Esto estuvo bien por un tiempo, pero a medida que se acumularon más pruebas de grabación /
reproducción, nuestro tiempo de compilación automatizado pasó de unos diez minutos
relativamente buenos a poco más de tres horas. Esto nos mató. La gente dejó de ejecutar la
compilación. Comenzaron a revisar su trabajo con menos frecuencia, y las construcciones rotas se
convirtieron en la norma para el proyecto.
No cometas el error que cometimos al dejar que nuestras compilaciones sean demasiado largas. Vigila tu
tiempo de construcción. Cualquier cosa menos de diez minutos es una buena regla general. Los proyectos
más pequeños generalmente pueden mantenerlo por debajo de cinco.
• Un proceso de check-in
Los repositorios de código fuente almacenan y versionan su software. Esto es en lo que su equipo de
desarrollo "registra" su código. Es el punto de integración de su proyecto y mantiene una copia maestra de
su código. Los repositorios de código abierto como Git o Subversion son tus amigos aquí.
Solo asegúrese de evitar el bloqueo pesimista (lo que significa que solo un desarrollador puede trabajar en
un archivo a la vez). Frustrará tu
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
E ESTABLECER P ROCESS DE AC 242
desarrolladores, reduzca la velocidad de su equipo y evite que su equipo posea colectivamente la base del
código.
Un buen proceso de registro es más interesante. Veamos cómo un equipo ágil típico podría hacer eso.
Un proceso de registro típico para los desarrolladores que trabajan en un equipo ágil se vería así:
repositorio
Buscar actualizaciones
44 de código
fuente
Desarrollador
Registrarse
66
Antes de comenzar cualquier trabajo nuevo, debe asegurarse de tener el último y mejor código del
repositorio. Aquí puede ver la última compilación y comenzar su trabajo con una pizarra limpia.
2. Hacer cambios.
Entonces haces tu trabajo. Agregue la nueva funcionalidad, corrija el error o haga cualquier trabajo que
deba hacerse.
3. Ejecute pruebas.
Para asegurarse de que los cambios que realizó no hayan roto algo más en la base del código, ejecute
todas sus pruebas para asegurarse de que todas pasen.
Si sus cambios están funcionando, obtendrá otra actualización del repositorio, en caso de que alguien más
haya realizado algunos cambios mientras realizaba su trabajo.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
C REATE UN A UTOMADO B UILD 243
Luego ejecuta las pruebas una vez más para asegurarse de que sus cambios funcionen con cualquier otro
cambio que otros hayan realizado desde que comenzó a trabajar.
6. Check-in.
Todos los sistemas van. Todo se construye. Todas las pruebas corren. Tenemos lo último. Es seguro
registrarse.
Además de este proceso de registro, hay un par de cosas que no se deben hacer en relación con una buena conducta de
construcción.
Dos No hacer
Al final del día, se trata de respetar la construcción, garantizar que esté siempre en funcionamiento y
ayudarse mutuamente cuando la rompamos (lo que sucede de vez en cuando).
El siguiente paso es crear una compilación automatizada. Realmente forma la columna vertebral del
proceso de integración continua de su equipo.
Una buena compilación automatizada compila el código, ejecuta las pruebas y básicamente hace todo lo
que debe hacerse regularmente como parte del proceso de compilación del proyecto.
Los desarrolladores lo ejecutan todo el tiempo como parte del círculo de vida de TDD y crean agentes (como
CruiseControl 1) úselo para ejecutar la compilación cada vez que detecten un cambio en el repositorio de código
fuente.
1) http://cruisecontrol.sourceforge.net/
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
C REATE UN A UTOMADO B UILD 244
Desarrolladores
compilación automatizada
Escuchando
compilación automatizada
Repositorio
Construcción automatizada
Compilación automatizada
X Error
Notificar
y notifica al equipo si hay un problema.
Ambientes
DEV
Compilar
PINCHAR
La mayoría de los lenguajes modernos tienen sus propios marcos de compilación automatizados (Ant para
Java, NAnt o MS-Build para .NET y rake para Rails). Si el lenguaje que está utilizando no lo hace,
generalmente puede crear el suyo con archivos de DOS o scripts Unix.
Pero a pesar de lo buenos que son los procesos de registro y las compilaciones automatizadas, lo que realmente hace que
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
TRABAJAR EN PEQUEÑOS C HUNKS 245
Al igual que las pruebas con TDD, la integración del código es mucho más fácil cuando se realiza en pequeño.
Semanal
Diario
Minutos
Con demasiada frecuencia, los equipos pasan días o semanas sin integrar su trabajo, eso es demasiado
tiempo. Desea integrar su código cada diez a quince minutos más o menos (como mínimo por hora).
No te estreses si no puedes registrarte con tanta frecuencia. Solo comprenda que cuanto más lo haga, más
fácil será. Por lo tanto, combine su código temprano y con frecuencia para evitar el dolor de las grandes
integraciones.
La integración continua se ha convertido en una práctica tan común que puede encontrar casi todo lo que
necesitará en la Web.
Wikipedia tiene un buen resumen de la práctica, 2 y uno de los primeros artículos de integración continua se
puede encontrar en el sitio web de Martin Fowler. 3
2) http://en.wikipedia.org/wiki/Continuous_integration
3) http://martinfowler.com/articles/continuousIntegration.html
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
TRABAJAR EN PEQUEÑOS C HUNKS 246
Maestro Sensei
y el aspirante a
guerrero
ESTUDIANTE: Maestro, obviamente no podemos tener todo listo para la producción durante la primera
iteración. ¿Qué quieres decir realmente cuando dices "listo para producción"?
ESTUDIANTE: ¿Qué sucede si no puedo construir todo el sistema porque mi proyecto es solo una pequeña
parte de la imagen más grande?
MAESTRO: Luego construya, pruebe e implemente lo que pueda. En algún momento, necesitarás integrar
tu pieza con todo lo demás. Haz tu mejor esfuerzo para asegurarte de que tu porción esté lista para que
puedas hacer los cambios necesarios cuando puedas. Pero no permita que el hecho de que sea una pieza
pequeña le impida automatizar su compilación o integrar continuamente su software.
Entonces, ahí lo tienes. Nuestro tour de force de force de prácticas de ingeniería de software ágiles
esenciales:
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿A DONDE VOY DESDE AQUI? 247
Sin estos, poco en nuestros proyectos ágiles funcionaría, y rápidamente volveríamos a nuestros días de
"código y arreglo".
¡Felicidades! Ahora está armado y es peligroso con el conocimiento y la experiencia para iniciar, planificar y
ejecutar su propio proyecto ágil.
Si está comenzando un nuevo proyecto, tal vez quiera comenzar con un mazo de inicio (Capítulo 3 , Cómo
subir a todos en el autobús, en la página 48 ) Haga que todos suban al autobús y se dirijan en la dirección
correcta haciendo las preguntas difíciles justo al comienzo del proyecto.
O, si ya está en medio de un proyecto (y su plan es claramente incorrecto), tal vez presione el botón de
reinicio organizando un taller de recopilación de historias (Sección 6.4 , Cómo organizar un taller de
recopilación de historias, en la página 108 ), seleccionando algunas historias realmente importantes y viendo
si puedes entregar algunas de ellas cada semana. Luego construya un nuevo plan basado en eso.
O, si está sufriendo por el lado de la ingeniería, tal vez comience mirando algunas de sus prácticas de
ingeniería y asegurándose de que no esté cortando esquinas en las pruebas y pague regularmente su
deuda técnica.
No hay mapa Tendrá que determinar qué es lo mejor para usted y su proyecto. Pero entienda que tiene las
herramientas, y apuesto a que probablemente ya sepa lo que hay que hacer.
¿Qué te detiene?
¡Sal y comienza a hacerlo!
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿A DONDE VOY DESDE AQUI? 248
Ultimas palabras
Se trata de elección.
Nadie puede evitar que produzca software de alta calidad. Nadie puede evitar que sea sincero y honesto
con sus clientes sobre el estado de su proyecto y lo que debe hacerse.
No me malinterpreten, nada de esto es fácil. Tenemos décadas de historia y equipaje trabajando en nuestra
contra. Pero al final del día, comprenda que la forma en que elige trabajar y la calidad del trabajo que
produce depende de usted y de nadie más.
No evangelices
No le digas a otras personas qué hacer.
En cambio, lidere con el ejemplo, acepte que los demás no siempre estarán allí y haga lo que se necesita
hacer.
Una pregunta que escuchas mucho de los equipos cuando se ponen ágiles por primera vez es: “¿Ya
llegamos? ¿Estamos siendo ágiles?
Y esa es una pregunta justa para hacer. Como hacer algo nuevo por primera vez, naturalmente querrá
saber cómo lo está haciendo y si lo está haciendo según el libro.
Y eso es totalmente genial. Solo entienda que no hay libro, ni este ni ningún otro. No hay una lista de
verificación ágil que yo o cualquier otra persona pueda darle que le dirá si está siendo ágil.
Y no lo olvides. No se trata de "ser" ágil. Se trata de crear excelentes productos y brindar un servicio de
clase mundial a sus clientes.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
¿A DONDE VOY DESDE AQUI? 249
Todo lo que puedo decir es que si crees que lo has logrado y lo tienes todo resuelto, has dejado de ser ágil.
Por lo tanto, no se obsesione con las prácticas. Tome lo que pueda de este libro y haga que se ajuste a su
situación y contexto únicos. Y cada vez que se pregunte si está haciendo las cosas de la "manera ágil",
hágase dos preguntas:
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
Parte VI
Apéndices
Principios ágiles
Aquí hay un resumen del Manifiesto Ágil 1 y doce principios rectores del movimiento ágil de software 2 tomado
del sitio web del Manifiesto Ágil.
Estamos descubriendo mejores formas de desarrollar software haciéndolo y ayudando a otros a hacerlo. A
través de este trabajo hemos llegado a valorar:
Es decir, si bien hay valor en los elementos de la derecha, valoramos más los elementos de la izquierda.
2. Acepte los requisitos cambiantes, incluso tarde en el desarrollo. Los procesos ágiles aprovechan el
cambio para la ventaja competitiva del cliente.
1) http://agilemanifesto.org
2) http://agilemanifesto.org/principles.html
3. Entregue software de trabajo con frecuencia, desde un par de semanas hasta un par de meses, con
preferencia al menor tiempo.
4. Los empresarios y desarrolladores deben trabajar juntos a diario durante todo el proyecto.
5. Construir proyectos alrededor de individuos motivados. Bríndeles el entorno y el apoyo que necesitan,
y confíe en ellos para hacer el trabajo.
6. El método más eficiente y efectivo para transmitir información a un equipo de desarrollo y dentro de él
es la conversación cara a cara.
12. A intervalos regulares, el equipo reflexiona sobre cómo ser más efectivo y luego ajusta y ajusta su
comportamiento en consecuencia.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
apéndice B
Recursos
Hay muchos grupos de noticias, recursos y otros lugares excelentes para que pueda continuar su viaje.
Aquí hay algunos buenos lugares para pasar el rato y aprender más sobre la entrega ágil de software y
cómo funciona:
• http://tech.groups.yahoo.com/group/extremeprogramming
• http://groups.yahoo.com/group/scrumdevelopment
• http://tech.groups.yahoo.com/group/leanagile
• http: // fi nance.groups.yahoo.com/group/kanbandev
• http://tech.groups.yahoo.com/group/agile-testing
• http://tech.groups.yahoo.com/group/agile-usability
• http: // fi nance.groups.yahoo.com/group/agileprojectmanagement
Bibliografía
[Bec02] Kent Beck. Desarrollo guiado por pruebas: por ejemplo. Addison Wesley, Reading, MA,
2002.
[Blo01] Michael Bloomberg. Bloomberg por Bloomberg. John Wiley & Sons, Hoboken, Nueva
Jersey, 2001.
[DL06] Esther Derby y Diana Larsen. Retrospectivas ágiles: hacer buenos equipos geniales. The
Pragmatic Programmers, LLC, Raleigh, NC, y Dallas, TX, 2006.
[Eva03] Eric Evans. Diseño basado en dominios: abordar la complejidad en el corazón del
software. Addison-Wesley Professional, Reading, MA, primera edición, 2003.
[FBB + 99] Martin Fowler, Kent Beck, John Brant, William Opdyke y
Don Roberts Refactorización: Mejora del diseño de código existente. Addison Wesley
Longman, Reading, MA, 1999.
[GC09] Lisa Gregory y Janet Crispin. Pruebas ágiles: una guía práctica para probadores y equipos
ágiles. Addison-Wesley, Reading, MA, 2009.
[HH07] Dan Heath y Chip Heath. Hecho para pegar: por qué algunas ideas sobreviven y otras
mueren. Random House, Nueva York, 2007.
[HT03] Andrew Hunt y David Thomas. Prueba de unidad pragmática en Java con JUnit. The
Pragmatic Programmers, LLC, Raleigh, NC, y Dallas, TX, 2003.
[HT04] Andrew Hunt y David Thomas. Prueba de unidad pragmática en C # con NUnit. The
Pragmatic Programmers, LLC, Raleigh, NC, y Dallas, TX, 2004.
[Joh98] Spencer Johnson ¿Quién movió mi queso? Una forma increíble de lidiar con el cambio en
su trabajo y en su vida. Putnam Adult, Nueva York, 1998.
[McC06] Steve McConnell. Estimación de software: desmitificando el arte negro. Microsoft Press,
Redmond, WA, 2006.
[Sch03] David Schmaltz. Los ciegos y el elefante. Berrett Koehler, San Francisco, 2003.
[SD09] Rachel Sedley y Liz Davies. Coaching ágil. The Pragmatic Programmers, LLC, Raleigh, NC,
y Dallas, TX, 2009.
[Sur05] James Surowiecki. La sabiduría de las multitudes. Anchor, Nueva York, 2005.
Informe errata
Descargar desde Wow! eBook <www.wowebook.com>
esta copia es ( Impresión P1.0, septiembre de 2010)
Índice
UNA vecinos, para proyecto, 68
Equipos ágiles, 26 - 46
Ambigüedad, 45
responsabilidad en, 32 - 33
Análisis, 165 - 170
rol de analista, 38
Analista, 38
arquitectura del proyecto y, 74
Arquitectura, equipos y, 74
montaje, 88
cuadro de incendio, 148
cambiar en, 34 si
coubicación en, 29 - 30 Beck, Kent, 97 , 211 , 233
propiedad del código, 173 La tienda de surf de Big Wave Dave, 104
lenguaje común de, 198 - 199 Ejemplo de construcción BigCo, 164
retroalimentación constructiva, 184 Ejemplo de simulador de Black Jack,
funcionalidad cruzada en, 33 - 34 204 204 - 205
44 prioridades de clasificación, 86
reunión de planificación de la historia, 180 - 181 Entrega, ver Entrega de software Fechas de
257
Descargar desde Wow! eBook <www.wowebook.com>
mi LANZAMIENTO DEL LEVADOR J ANÁLISIS DE TIEMPO USADO
mi antecedentes de 51
F visualizando la solución, 73 - 74
Fichas, 98
Fracaso, riesgo de, 79f Plumas, Michael, 209
Siglas INVERTIR, 103 , 105
, 223
Iteración, 20 , 25 , 135
Retroalimentación, 180 , 184
Iteración 0, 172
Flexibilidad, 101 , 137 , 154
Gestión de iteraciones, 161 - 178
Fluir, 175
iteración ágil 163 - 164
Diagramas de flujo, 167
análisis y diseño, 165 - 170
Fowler, Martin, 97 , 223 , 245
Ejemplo de construcción BigCo, 164
Furioso cuatro, 83
errores y 200
entregando valor semanalmente, 162
sol desarrollo, 170 - 173
Galton, Francis, 126
retroalimentación, 180
Generalistas, 33 , 44
diagramas de flujo, 167
Gibbons, Robin, 51
iteración 0, 172
Gregory, Janet, 41
análisis justo a tiempo, 166
Kanban 174 - 176
H refactorización y 223
yo J
En cosas, sesenta y cinco Jobs, Steve 30
Cubierta de inicio Análisis justo a tiempo, 166
258
Descargar desde Wow! eBook <www.wowebook.com>
K ANBAN R EFACTORING
K lanzamientos, 140
O entra, 171
el éxito en, 49
O fi cina, ver Espacio de trabajo visual
preguntas difíciles en 50
Repositorios de código abierto, 241
transición a ágil, 151 - 152
Herramientas de código abierto, 73
desperdiciar, 142
Fuera de las cosas, sesenta y cinco
PAGS Q
Calidad, 83 , 84
Programación en pareja, 170
Preguntas, 50 , 66
Pascal, Blaise, 60 60
Personas, 110 , 167
Imágenes, para lluvia de ideas, 110 R
El toque de Pixar (película), 30 Tarjetas de recetas, 98
259
Descargar desde Wow! eBook <www.wowebook.com>
Refactorización: mejora del diseño del código existente ( F OWLER) DESLIZADORES T RADE-OFF
Alcance, 83 , 84 , 137 , 154 , ver NO listar Scrum Master, 44 Desarrollo basado en pruebas (TDD),
225 - 235
verdades de 23 - 25 documentación y 98
Estimación de software: desmitificando el reuniones de planificación iterativa, 183
Arte negro ( McConnell), 115 para proyectos, 78 - 80
Guerrero espartano, 155 El camino de Toyota ( Liker), 56
Especialistas contra generalistas, 33 , 44 Seguimiento de errores, 175
260
Descargar desde Wow! eBook <www.wowebook.com>
T LLUVIA VS. ENTREGA GRUPOS Y AHOO
V
errores y 205
depuración y 207
Velocidad, ver Espacio de trabajo visual de
descrito, 206 - 210
velocidad del equipo, 191 - 201
recursos educativos, 210
errores y 200
velocidad del equipo y 211
lenguaje común de, 198 - 199
que probar 207
creando, 195 - 197
ver también Probar cosas NO
reunión de ejecutivos, 191 - 195
RESUELTAS, sesenta y cinco
intenciones 197
Prueba de aceptación del usuario (UAT), 173
visión general, 200 - 201
Diseñadores de experiencia de usuario (UX), 43
W
Historias del usuario
261
Descargar desde Wow! eBook <www.wowebook.com>
La estantería pragmática
Disponible en libros de bolsillo y libros electrónicos sin DRM, nuestros títulos están aquí para ayudarlo a mantenerse al tanto de su juego. Lo
siguiente está impreso a partir de agosto de 2010; asegúrese de visitar nuestro sitio web en
Recetas avanzadas de Rails: 84 nuevas formas de crear aplicaciones 2008 9780978739225 464
impresionantes de Rails
Desarrollo web ágil con rieles, tercera edición 2009 9781934356166 784
Detrás de puertas cerradas: secretos de una gran gestión 2005 9780976694021 192
Programación de cacao: una guía de inicio rápido para desarrolladores 2010 9781934356302 450
Core Animation para Mac OS X y iPhone: creación de interfaces de 2008 9781934356104 200
usuario dinámicas convincentes
Datos básicos: API de Apple para datos persistentes en Mac OS X 2009 9781934356326 256
Implementación de aplicaciones de Rails: una guía paso a paso 2008 9780978739201 280
Diseñe sitios web accesibles: 36 claves para crear contenido 2007 9781934356029 336
para todos los públicos y plataformas
Desktop GIS: Mapping the Planet with Open Source Tools 2008 9781934356067 368
Diseño controlado por dominio utilizando objetos desnudos 2009 9781934356449 375
Scripting diario con Ruby: para equipos, probadores y usted 2007 9780977616619 320
FXRuby: Crear GUIs Lean y Mean con Ruby 2008 9781934356074 240
De Java a Ruby: cosas que todo gerente debe saber 2006 9780976694090 160
SIG para desarrolladores web: agregar dónde a sus aplicaciones web 2007 9780974514093 275
API de Google Maps, V2: agregar dónde a sus aplicaciones 2006 PDF-Only 83
Patrones de implementación del lenguaje: cree sus propios lenguajes de 2009 9781934356456 350
programación específicos de dominio y generales
Dominar Dojo: JavaScript y herramientas Ajax para grandes 2008 9781934356111 568
experiencias web
Metaprogramming Ruby: programa como los profesionales de Ruby 2010 9781934356470 240
Java modular: creación de aplicaciones flexibles con OSGi y Spring 2009 9781934356401 260
Técnica Pomodoro ilustrada: la manera fácil de hacer más en menos 2009 9781934356500 144
tiempo
Programación de Cocoa con Ruby: Cree aplicaciones Mac 2009 9781934356197 300
convincentes usando RubyCocoa
Continúa en la siguiente página
Prototipo y script.aculo.us: ¡Nunca sabías que JavaScript podría hacer 2007 9781934356012 448
esto!
¡Liberarlo! Diseñar e implementar software listo para producción 2007 9780978739218 368
¡Envíalo! Una guía práctica para proyectos de software exitosos 2005 9780974514048 224
Stripes ... y el desarrollo web Java vuelve a ser divertido 2008 9781934356210 375
Ubuntu Kung Fu: consejos, trucos, sugerencias y hacks 2008 9781934356227 400
Diseño web para desarrolladores: una guía del programador para 2009 9781934356135 300
diseñar herramientas y técnicas
Depurarlo!
Depurarlo! lo equipará con las herramientas, técnicas y enfoques para ayudarlo a
abordar cualquier error con confianza. Estos secretos de depuración profesional
iluminan cada etapa del ciclo de vida del error, desde la construcción de software
que facilita la depuración; a través de la detección de errores, reproducción y
diagnóstico; para desplegar su fi nal eventual. Aprenda una mejor depuración si
está escribiendo Java o lenguaje ensamblador, apuntando a servidores o
microcontroladores integrados, o utilizando enfoques ágiles o tradicionales.
http://pragprog.com/titles/pbdp
Antipatterns SQL
Si está programando aplicaciones que almacenan datos, entonces es probable
que esté utilizando SQL, ya sea directamente o mediante una capa de mapeo.
Pero la mayor parte del SQL que se usa es ineficaz, difícil de mantener y, a
veces, simplemente erróneo. Este libro le muestra todos los errores comunes y
luego lo guía a través de los mejores fi jos. Además, te muestra qué es detrás estos
fi jos, por lo que aprenderá mucho sobre bases de datos relacionales en el
camino.
http://pragprog.com/titles/bksqla
http://pragprog.com/titles/trevan
http://pragprog.com/titles/btlang
Visítanos en línea
El ágil samurai
http://pragprog.com/titles/jtrap
Código fuente de este libro, erratas y otros recursos. ¡Ven a darnos tu opinión también!
http://pragprog.com/updates
Unete a la communidad
http://pragprog.com/community
Lea nuestros weblogs, únase a nuestras discusiones en línea, participe en nuestra lista de correo, interactúe con nuestro wiki y benefíciese
de la experiencia de otros programadores pragmáticos.
Comprar el libro
Si le gustó este libro electrónico, tal vez le gustaría tener una copia en papel del libro. Está disponible para comprar en nuestra tienda: pragprog.com/titles/jtrap
.
Contáctenos
Pedidos en línea: www.pragprog.com/catalog