Programación Extrema ¿Pero qué demonios es eso? La desconocida Programación Extrema es una metodología de programación que, en muchos casos, hace las cosas bastante más sencillas.
Nos enfrentamos a un nuevo proyecto y lo primero que hacemos es sacar lápiz, papel y pasar unas cuantas horas diseñando la estructura del proyecto, definiendo las relaciones internas y la interfaz de las diferentes clases y métodos. Después empezamos a programar propiamente dicho y en último lugar, y con menor importancia, finalmente testeamos nuestra aplicación. En teoría, y en teoría funciona el comunismo; pero sólo en teoría, este esquema es perfecto : Planificar, Construir y Buscar Errores (que no debería de haber ninguno). Pero si alguna vez lo has usado, sabrás que se cae por su propio peso en la mayoría de casos. Piensa en aquel momento que descubriste un error y tuviste que revisar cientos de líneas de código para taparlo, y la solución era un gran parche para no tocar el resto de tu super-código. O aquel en el que pasaste horas y horas definiendo métodos de clases que al final no llegaste a usar, porque en la práctica te saltaste toda esa teoría aburrida y en vez de unos setters decidiste hacer públicas las variables y modificarlas "a pelo".
Ahí es donde interviene la programación extrema, haciendo el proceso más práctico que teórico. La programación extrema (a partir de ahora XP - eXtreme Programming - para facilitar las cosas) es perfecta para proyectos pequeños y medianos, pero es aún mejor para grandes proyectos o de alto riesgo.
¿En qué se diferencia entonces la XP de otras metodologías?
En la XP, la importancia de los test (para encontrar errores) y la experiencia del cliente (feedback) adquieren una mayor importancia, haciendo que se trabaje en ciclos de menor tiempo. Tranquilos que lo explicaremos todo.
A tomar por culo toda la teoría
La teoría está muy bien, pero es eso, "teoría". Sólo hay que ver que se inventaron los atributos public para las variables en lenguajes orientados a objetos, cuando "en teoría" todas deberían de ser privadas y controladas mediante setters y getters. Eso no significa que no piensen antes de empezar un proyecto. Es bueno (y necesario) hacer un mínimo esquema de cómo deben de ser las cosas y funcionar el sistema, pero no pasar horas y horas de organización (todo dependerá del tamaño del proyecto). Recuerda que poca organización es mala, pero en exceso también.
Los tests antes que el programa
La XP llevada al extremo implica que se escriban los test (debug tests) antes que la propia aplicación. Esto tampoco es estrictamente necesario, pero sin embargo hay "Tests Units Frameworks" que son una serie de tests pre-fabricados para aplicar directamente a tu aplicación. ¿Por qué?¿Por qué son tan importantes? Cuando se programa de la forma old-school, uno deja para el final el testear su aplicación y encontrar errores. Esto significa que se le da una menor importante porque "en teoŕia" el programa no debería de fallar, aunque la realidad sea otra. Además suele ocurrir que al encontrar un fallo se aplica un parche que sólo ensucia el código y que ni siquiera se integra bien con el código. Sed sinceros, ¿cuántos de vosotros ha creado variables y métodos especiales para solucionar un fallo, cuando podría haber utilizado parte de los recursos a existentes?¿Y después nos olvidamos de esas variables, sin borrarlas ni nada?
Testeando nuestra aplicación desde el primer momento, nos aseguramos de que el código escrito hasta entonces es correcto y no estropea lo anterior. La programación orintada a objetos facilita esta tarea, ya que los objetos tienen una "interfaz" y deben responder ante ciertos "estímulos". Así por ejemplo, en un caso práctico, podríamos escribir los métodos vacíos de una clase, dentro de cada método escribir solamente el código necesario para que imprima por pantalla un mensaje que diga que se llegó a tal método o a tal otro. Y después, poco a poco, ir escribiendo el resto del código.
Haz compartimentos estanco
Si todo tu programa es una gran bola de código inentendible, cuando haya un agujero te entrará agua y te hundirás en la balsa. Si por el contrario tu barquichuelo está hecho a base de compartimentos estancos y uno está agujereado, seguirás a flote porque el resto no se inundará. Hacer pequeños trozos independientes de un programa es casi una obligación de nuestros tiempos y una de las bases de la XP. Tanto si trabajas en solitario como en un grupo, las ventajas son infinitas. Si trabajas en grupo, cada uno de tus compañeros puede trabajar en un apartado diferente del programa ahorrando tiempo de desarrollo, además al ser "independientes" si falla un "módulo" del programa, sólo se necesita reparar ese módulo, el código estará localizado en un grupo de archivos menor y se solucionará con mayor rapidez. Haz módulos según necesites.
Consulta con el cliente
El feedback es importante, y la XP lo potencia al máximo. Si el programador idea una forma de ir desde A hasta C pasando por B, el cliente o el usuario encontrará la forma de ir directamente de A a C generando errores por el camino. A cada poco se suelta una beta para testeo, con la información resultante de los testeadores se hace una "pequeña" release. Pequeños cambios implican pequeños errores que se solucionan en menor tiempo. Esto va acorde con el de hacer pequeños módulos en el programa, y se van probando los módulos uno a uno según su desarrollo.
En grandes proyectos y de riesgo, utiliza la XP
¿Tienes un gran proyecto?¿Algo nuevo para tu equipo de desarrollo?¿Para la industria del software?¡La XP es para tí! La XP proporciona un camino fácil para alcanzar metas simples a corto plazo que formen parte de un proyecto a mayor escala. Con la XP puedes establecer mejores roadmaps (planes de desarrollo y tiempos de entrega) tener un mejor control sobre el producto porque a cada paso que des tendrás un producto funcional, no tan completo como el proyectado, pero funcional.
Conclusiones
La XP está ahí afuera. Es un recurso útil y al igual que muchos de los patrones de programación (MVC, Singleton, ...) posiblemente estés usando ya parte de la XP en tus proyectos a diario, pero nunca viene mal conocer algunos consejos extra para hacernos más ágiles en el desarrollo de software.
Más información
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Llevo toda la vida haciendo programación de esa y pensé que ir hacia la planificación extrema era evolucionar y mejorar...
He fallado en la vida de nuevo
Por pabletein el 27 de Agosto de 2007
Esta bien explicado y suena muy logico todo......para algo me servira!
Gracias conejo!
Cada dia aprendiendo más.
Por Señor Nacho el 27 de Agosto de 2007
Muy buen artículo.
Por Zandy el 27 de Agosto de 2007
Por DaHouseCat el 27 de Agosto de 2007
Por Prozac el 27 de Agosto de 2007
Saludos!
Muy buen articulo _Conejo
Muy bien _CONEJO
Por Francisco ROberto el 27 de Agosto de 2007
1.- Por si sola la XP, deja muchos procesos sin documentacion, ya que si es cierto que mucho proceso entorpece y quita tiempo, pero entre mas vigilado este el proceso y documentado, la empresa sabra a todo momento como va realmente el avance del proyecto, y no llegara a preguntarle al programador:
¿como vas?? --- Jefe.
¿Pues ahi la llevo, ya casi termino?--PROGramador.
Ese casi no le dice nada a un lider de proyecto o aun Gerente.
Bueno espero entiendan m diferencia de opinion y pues como dije, no estoy encontra, si que si se combinara con otra metodologia estaria mejor.
Saludos
Por clydde el 27 de Agosto de 2007
Por rodrigo.art el 27 de Agosto de 2007
Saludos.
que bueno _CONEJO
Por manolo el 27 de Agosto de 2007
Y pues si, efectivamente, muchos de nosotros hacemos uso de esa metodología a diario son darnos cuenta. En cuanto a otras metodologías puedo reiterar que es como a cada quién le acomode y según optimice sus tiempos. Tal vez no todos desarrollan de la misma manera por la sencilla razón que tal vez otros hallan más fácil (mas no más practico) método para sus proyectos.
manolo_blog :
Creo suponer que leyo completo el Articulo.
Muy buen Articulo Conejo, me parece que llevo ya tiempo utilizando esta metodologia sin saberlo y pensar que segun yo utlilizaba la de prueba y error
Personalmente la única vez que intentaron enseñarme algo de programación de forma oficial (en cursos) era Java y decidí no asistir. Mucha gente (sobre todo ahora) empieza con Java, que para aprender POO está muy bien, pero es un lenguaje harto aburrido y repetitivo, demasiado teórico de "creo tal clase con tal interface que hereda de tal otra"... Hey, primero veamos realmente qué necesitamos y vayamos poco a poco.
Grandes proyectos
Gato, la XP sigue siendo perfecta para grandes proyectos. Tienes un proyecto de grandes proporciones, es novedoso para tu equipo de trabajo e incluso para la industria del software... ¿Qué usas? ¡¡ La XP !! ¿Por qué? Es sencillo, cumples pequeños objetivos, es más fácil plantearse una serie de objetivos a dos semanas vista cada uno que un gran objetivo a 6 meses de desarrollo. Grandes tiempos de desarollos son malos, al final se pierde mucho tiempo porque al principio dices "ya habrá tiempo", además de que es más dificil de depurar y encontrar errores.
Si construimos una casa, primero ponemos los cimientos, luego las paredes interiores, luego las exteriores y finalmente decoramos. Esto está bien, sea la casa grande o pequeña funciona pero... si la casa es grande, podemos perder demasiado tiempo con los cimientos o perder definitivamente el enfoque del proyecto, si el tiempo se agota tendremos unos cimientos pero no un techo donde cobijarnos. Con la XP primeramente haríamos los cimientos de una habitación, conforme empecemos con sus paredes veremos que necesitamos tirar los cimientos de las habitaciones contiguas y así, ir habitación por habitación, metas creibles y realizables en cortos periodos de tiempo. Si el tiempo se agota siempre podremos capear el temporal del cliente malhumorado y enseñarle "parte".
Cambios en el diseño/estructura
Está claro Prozac, si a mitad se decide incluir/excluir una nueva característica, esta es la metodología con la que menos daños sufrirá el proyecto. Además no sólo sirve para eso, si no que si te adentras en "terreno inexplorado" es lo tuyo. Digamos que diseñas un juego, cuando los testers lo prueban dicen "pues estaría bien que hiciese tal cosa" y no sólo en juegos, si no en cualquier programa al cual debas de dar soporte durante un tiempo.
No se documenta
Bueno, documentar o no es cosa tuya, si es cierto que no hay una documentación "pre-programación" aunque unos buenos nombres de variables y métodos, así como una documentación posterior facilitaría mucho la tarea de mantenimiento del código. Digamos que NO HAY una planificación muy detallada (pero la debe de haber siempre), pero una documentación es necesaria si se planea mantener el código.
@Francisco Roberto : la situación que planteas no es de la XP, es cosa del programador, de hecho, al tener objetivos más pequeños se controla mejor lo que se ha hecho y lo que no.
Por dav el 27 de Agosto de 2007
¿estás de broma verdad?
dav_blog :
¿estás de broma verdad?
Por dav el 27 de Agosto de 2007
En relación al soporte que te puede dar una empresa para un desarrollo profesional, comparar Macromedia con Sun se me antoja muy parecido a decir que MySQL no tiene nada que envidiarle a Oracle.
Por Uno de españa el 27 de Agosto de 2007
No intentes dibujar con un Cañon ni derruir castillos con un pincel...
A buen entendedor, ...
dav_blog :
dav_blog :
Por otro lado, Macromedia no existe, se llama Adobe. Y si comparamos las acciones de Adobe con las de Sun:
Adobe Systems Incorporated
Sun Microsystems, Inc.
En conclusión: Es cosa de contexto. Java, como dije, es perfecto para el lado del servidor, pero es aburridorsisimo y las metodologías que se usan del lado del cliente para "hacerlo robusto" se pueden hacer igual en la mayoría de otros lenguajes. Como ejemplo que puse, Actionscript 3. Un gran lenguaje para cliente que copia mucho de Java pero le quita todo lo "tedioso" de sus millones de interfaces y frameworks insufribles (Del lado del cliente).
Por RaC el 28 de Agosto de 2007
La mayor empresa informática de la región "ganó" el concurso para hacer el software de las bibliotecas municipales de toda la comunidad (de hecho, la versión anterior también era suya). Al proyecto, además de unos cuantos millones le dieron un plazo de un año. Empezó a ser desarrollado en Java. Ahora llevan MÁS DE TRES años de desarrollo, la empresa ha tenido que contratar a 3 personas más para este proyecto únicamente y te aseguro que no está ni por asomo acabado o con pinta de acabar. Y no creas que cogieron a unos mandangas que iban por la calle, fueron a buscar a los mejores en el tema.
Por mi parte, cuando recuerdo el mini-ahorcado que hice y la cantidad de código sobrante y repetitivo que había me entran temblores y eso que sólo era uno de los muchos ejercicios que tuve que entregar.
Java es bueno, es rápido en cálculos y con una sintaxis relativamente cómoda, siempre y cuando te dediques a hacer aplicaciones de consola y no interfaces para el usuario.
Por Pitxon el 28 de Agosto de 2007
Dirigido por casos de uso.
Centrado en la arquitectura.
Iterativo e incremental.
Por dav el 28 de Agosto de 2007
Gracias por las aclaraciones
Por carlosczg_ el 29 de Agosto de 2007
Por sisweb el 30 de Agosto de 2007
Por sisweb el 30 de Agosto de 2007
Por otro lado, mientras mejor estructurado esten los modulos, y mejor documentes tu código será más fácil para otros usar tu trabajo, sea un proyecto libre o privado.
Se ha comprobado en muchos proyectos que si está bien estructurado, documentado y mientras más rápido se libere código en microversiones mejor será desarrollado y usado. Ejemplo. Distribuciones de Linux, CMS colectivos como wordpress, Frameworks, etc.
Un saludo.
Por GUSANO el 10 de Septiembre de 2007
Por jalemos el 11 de Septiembre de 2007
saludos alexa
Por martin varesio el 02 de Octubre de 2007
Por Marce el 06 de Enero de 2008
Es cierto lo que comenta Francisco ROberto_blog, no está claro que y como documentar, pero bueno en principio depende de lo que quiera docuemtar cada uno, supongo que gestionar recursos y tiempos con un excel y ms project evitaría estar preguntando todo el tiempo...
En fin es una metodología muy abierta y depende de la experiencia de cada uno, como implementarla...
Sds, desde Uruguay...
Por juaan el 15 de Enero de 2008
Por Midori el 09 de Mayo de 2008
Por Necrophasto el 12 de Mayo de 2008
A ver si le dedicamos un poco de estudio
Autodidactismo al poder!! :p
Por Pedro O. el 19 de Mayo de 2008
Cuando quiero hacer un proyecto en Rup utilizo el lenguaje de modelado uml..
En el caso de Xp que lenguaje de modelado es el adecuado..?
O como yo hago para modelar cada una de las etapas en Xp?
Por rosa maria mondragon el 28 de Mayo de 2008
Por kinsi el 27 de Agosto de 2008
Por wilycab el 30 de Noviembre de 2008
no soy un desarrollador nato pero siempre toca hacer uno que otro proyecto y por ende siempre debe estar una metodologia que respalde.
Cuando decidi hacer Xp en realidad busque algo que no tenga documentacion pero me estrelle, ya que si necesitas un proyecto firme y que camine de buena mano necesitas documentar las cosas mas relevantes, y la metodologia se presta para ello.
Por Ditmar el 14 de Abril de 2009
contestando la duda de Pedro O sobre la pregunta planteada arriba.
Es posible usar UML para el modelado de cualquier sistema, ya que UML es solo una herramienta, esta muy separado de la métodología, puedes mesclar UML con XP sin ningún problema. Los diagramas que uses dependerán de como enfoques tú el análisis.
En lo personal solo prefiero y veo más importante el uso de los diagramas de clases y los diagramas de casos de uso, tal vez los de secuencia si el sistema lo amerita
Por CCCP el 09 de Febrero de 2010
exigimos que retractes!!!