programacion_extrema

23
Programación eXtrema y Software Libre Gregorio Robles Universidad Rey Juan Carlos [email protected] Jorge Ferrer Universidad Politécnica de Madrid [email protected] Copyright (C) 2002 Gregorio Robles Martínez y Jorge Ferrer Zarzuela. Permitida la redistribución ilimitada de copias literales y la traducción del texto a otros idiomas siempre y cuando se mantenga esta autorización y la nota de copyright. Historial de revisiones Revisión 2.0 - versión V Congreso Hi- spalinux, Octubre 2002 10 de octubre de 2002 La programación extrema es una metodología de desarrollo ligera basada en una serie de valores y una docena de prácticas de, llamémoslas así, buenas maneras que propician un aumento en la productividad a la hora de generar software. Por otro lado, el software libre es un movimiento nacido de la idea de que los usuarios tienen una serie de derechos sobre el software que permiten modificarlo, adaptarlo y redistribuirlo. Estas características han hecho que el desarrollo de software libre haya desembocado en unos métodos de desarrollo informales similares a los que se pregonan en la programación extrema y que serán presentados, estudiados y comparados en este artículo. Se hará especial énfasis en las diferencias que hay entre los dos métodos y lo que puede aprender el software libre de la programación extrema. Tabla de contenidos 1. Sobre este documento .......................................................................... 2 2. La Programación Extrema ...................................................................... 2 2.1. El proceso de desarrollo extremo ......................................................... 3 2.2. Valores de la programación extrema ...................................................... 8 2.3. Principios de la programación extrema .................................................... 8 2.4. Prácticas de la programación extrema ..................................................... 9 2.5. Conclusión ............................................................................ 10 3. El Software Libre ............................................................................. 10 1

Upload: hector-cardenas

Post on 02-Oct-2015

4 views

Category:

Documents


0 download

DESCRIPTION

Programacion XP

TRANSCRIPT

  • Programacin eXtrema y SoftwareLibre

    Gregorio RoblesUniversidad Rey Juan Carlos

    [email protected] Ferrer

    Universidad Politcnica de Madrid

    [email protected] (C) 2002 Gregorio Robles Martnez y Jorge Ferrer Zarzuela. Permitida la redistribucin ilimitada de copiasliterales y la traduccin del texto a otros idiomas siempre y cuando se mantenga esta autorizacin y la nota de copyright.Historial de revisionesRevisin 2.0 - versin V Congreso Hi-spalinux, Octubre 2002

    10 de octubre de 2002

    La programacin extrema es una metodologa de desarrollo ligera basada en una serie de valores y una docena deprcticas de, llammoslas as, buenas maneras que propician un aumento en la productividad a la hora de generarsoftware. Por otro lado, el software libre es un movimiento nacido de la idea de que los usuarios tienen una seriede derechos sobre el software que permiten modificarlo, adaptarlo y redistribuirlo. Estas caractersticas han hechoque el desarrollo de software libre haya desembocado en unos mtodos de desarrollo informales similares a los quese pregonan en la programacin extrema y que sern presentados, estudiados y comparados en este artculo. Se harespecial nfasis en las diferencias que hay entre los dos mtodos y lo que puede aprender el software libre de laprogramacin extrema.

    Tabla de contenidos1. Sobre este documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22. La Programacin Extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2.1. El proceso de desarrollo extremo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2. Valores de la programacin extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3. Principios de la programacin extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4. Prcticas de la programacin extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.5. Conclusin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3. El Software Libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1

  • 3.1. El modelo de desarrollo de software libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.2. Herramientas de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3. Conclusin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4. Software Libre y Programacin Extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.1. Caractersticas intrnsecas de programacin extrema en el software libre . . . . . . . . . . . . . . . . . . . . . 134.2. Prcticas de difcil adaptacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.3. Prcticas interesantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.4. Desarrollo distribuido y programacin extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.5. Interrogantes y retos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    5. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206. Referencias (en orden alfabtico) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217. Bibliografa y otras direcciones de inters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    1. Sobre este documentoEn este artculo se har una introduccin tanto de la programacin extrema como del software libre. Aunque sern dospresentaciones bastante amplias, no se pretende llegar a un gran nivel de detalle. Existen multitud de artculos y librossobre programacin extrema y software libre que tratan ambos temas de una manera mucho ms extensa; alguno delos artculos y libros se pueden encontrar en el apartado dedicado a las referencias y direcciones de inters al final deeste documento.

    Despus de dar a conocer en qu consisten la programacin extrema y el software libre se proceder a compararlos, aver qu prcticas son comunes, as como en qu aspectos difieren o seran necesarias modificaciones para poder llegara compaginarlas. La comparacin desembocar en un ltimo punto en el que se muestran las conclusiones que el autorha sacado de la elaboracin del estudio.

    2. La Programacin ExtremaLa programacin extrema se basa en una serie de reglas y principios que se han ido gestando a lo largo de todala historia de la ingeniera del software. Usadas conjuntamente proporcionan una nueva metodologa de desarrollosoftware que se puede englobar dentro de las metodologas ligeras, que son aqullas en la que se da prioridad a lastareas que dan resultados directos y que reducen la burocracia que hay alrededor tanto como sea posible (pero no ms)[Fowler]. La programacin extrema, dentro de las metodologas giles, se puede clasificar dentro de las evolutivas[Harrison].

    Una de las caractersticas de eXtreme Programming es que muchos de, si no todos, sus ingredientes son de sobraconocidos dentro de la rama de la ingeniera del software desde hace tiempo, incluso desde sus comienzos. Losautores de han seleccionado los que han considerados como los mejores y han profundizado en sus relaciones y encmo se refuerzan unos a otros. El resultado ha sido una metodologa nica y compacta. Por eso, aunque se pueda

    2

  • alegar que la programacin extrema no se base en principios nada nuevos, se ha de aclarar que, en conjunto, es unanueva forma de ver el desarrollo de software.

    Aunque, como ya se ha comentado, la programacin extrema se basa en unos valores, unos principios fundamentalesy unas prcticas, en este artculo no se van a enumerar as de primeras, ya que el autor considera que no es la mejorforma de presentarlos. Los principios y prcticas no se han hecho a priori o porque s, sino que tienen un porqu apartir de una forma global de desarrollar software que, al menos en teora, parece ser ms eficiente.

    Por tanto, en este artculo se presentar la programacin extrema desde un punto de vista prctico para luego dar pasoa enunciar los valores y principios que se han extrado y las prcticas que hacen que se lleven a buen fin. La ideaes seguir que el lector pueda seguir en los siguientes prrafos un proceso de desarrollo extremo tal y como deberadarse en un equipo de desarrollo que siguiera la metodologa XP. De esta forma se irn detallando y explicando lasdiferentes tcnicas utilizadas, as como su razn de ser.

    Una vez que hayamos visto el proceso de desarrollo extremo, los valores, principios y prcticas sern evidentes y norequerirn mucho detenimiento.

    2.1. El proceso de desarrollo extremoLa programacin extrema parte del caso habitual de una compaa que desarrolla software, generalmente software amedida, en la que hay diferentes roles: un equipo de gestin, un equipo de desarrolladores y los clientes. La relacincon el cliente es totalmente diferente a lo que se ha venido haciendo en las metodologas tradicionales que se basanfundamentalmente en una fase de captura de requisitos previa al desarrollo y una fase de validacin posterior al mismo.

    2.1.1. Interaccin con el clienteEn la programacin extrema al cliente no slo se le pide que apoye al equipo de desarrollo, en realidad podramosdecir que es parte de l. Su importancia es capital a la hora de abordar las historias de los usuarios y las reunionesde planificacin, como veremos ms adelante. Adems, ser tarea suya realimentar al equipo de desarrolladoresdespus de cada iteracin con los problemas con los que se ha encontrado, mostrando sus prioridades, expresandosus sensaciones... Existirn mtodos como pruebas de aceptacin que ayudarn a que la labor del cliente sea lo msfructfera posible.

    En resumen, el cliente se encuentra mucho ms cercano al proceso de desarrollo. Se elimina la fase inicial de capturade requisitos y se permite que stos se vayan definiendo de una forma ordenada durante el tiempo que dura el proyecto.El cliente puede cambiar de opinin sobre la marcha y a cambio debe encontrarse siempre disponible para resolverdudas del equipo de desarrollo y para detallar los requisitos especificados cuando sea necesario.

    El proceso de captura de requisitos de XP gira entorno a una lista de caractersticas que el cliente desea que existan enel sistema final. Cada una de estas caractersticas recibe el nombre de historias de usuarios y su definicin consta dedos fases:

    3

  • En la primera fase el cliente describe con sus propias palabras las caractersticas y el responsable del equipo dedesarrollo le informa de la dificultad tcnica de cada una de ellas y por lo tanto de su coste. A travs del dilogoresultante el cliente deja por escrito un conjunto de historias y las ordena en funcin de la prioridad que tienen para l.En este momento ya es posible definir unos hitos y unas fechas aproximadas para ellos.

    La segunda fase consiste en coger las primeras historias que sern implementadas (primera iteracin) y dividirlas enlas tareas necesarias para llevarlas a cabo. El cliente tambin participa, pero hay ms peso del equipo de desarrollo,que dar como resultado una planificacin ms exacta. En cada iteracin se repetir esta segunda fase para las historiasplanificadas para ella.

    Este proceso es una de las principales diferencias con las metodologas tradicionales. Aunque las historias de usuariosguardan cierta relacin con otras tcnicas como los casos de uso de UML, su proceso de creacin es muy diferente.En lo que al cliente se refiere no se le exige que especifique exactamente lo que quiere al principio con un documentode requisitos de usuario. La parte que se mantiene con este documento es que es el cliente el que tiene que escribir loque quiere, no se permite que alguien del equipo de desarrolladores lo escriba por l.

    Como se ha comentado, son los desarrolladores los que se encargan de catalogar las historias de los usuarios yasignarles una duracin. Para ello se sigue una norma simple: las historias de usuarios deberan poder ser abordables enun espacio de tiempo de entre una y tres semanas de programacin ideal. Historias de los usuarios que requieran menostiempo de implementacin son agrupadas, mientras que aqullas que necesiten ms tiempo deben ser modificadas odivididas. Una semana de programacin ideal es una semana (cinco das de trabajo) de desarrollo por parte de undesarrollador sin interferencias de otras partes del proyecto. Al hacer la planificacin se aplica un factor de correccinmedido de proyectos anteriores para ajustar este tiempo ideal al real.Las historias de los usuarios se plasmarn en tarjetas, lo que facilitar que el cliente pueda especificar la importanciarelativa entre las diferentes historias de usuario, as como la tarea de los desarrolladores que podrn catalogarlasconvenientemente. El formato de tarjeta adems es muy provechoso a la hora de realizar pruebas de aceptacin.

    2.1.2. Planificacin del proyectoEs probablemente en este punto donde nos debamos enfrentar a la planificacin de entregas (release planning) dondeplanificaremos las distintas iteraciones. Para ello existen una serie de reglas que hay que seguir para que las tres partesimplicadas en este proceso (equipo de gestin, equipo de desarrollo y cliente) tengan voz y se sientan parte de ladecisin tomada, que al fin y al cabo debe contentar a todos.

    La planificacin debe de seguir unas ciertas premisas. La primordial es que las entregas se hagan cuanto antes y quecon cada iteracin el cliente reciba una nueva versin. Cuanto ms tiempo se tarde en introducir una parte esencial,menos tiempo habr para trabajar en ella posteriormente. Se aconsejan muchas entregas y muy frecuentes. De estaforma, un error en una parte esencial del sistema se encontrar pronto y, por tanto, se podr arreglar antes.

    Sin embargo, los requisitos anteriores en cuanto a la planificacin no deben suponer horas extra para el equipo dedesarrollo. El argumento que se esboza es que lo que se trabaja de ms un da, se deja de trabajar al siguiente.

    4

  • Diversas prcticas como las pruebas unitarias, la integracin continua o el juego de la planificacin permiten eliminarlos principales motivos por los que suele ser necesario trabajar muchas horas extra.Pero lo mejor de todo es que a la hora de planificar uno se puede equivocar. Es ms, todos sabemos que lo comn esequivocarse y por ello la metodologa ya tiene previsto mecanismos de revisin. Por tanto, es normal que cada 3 a 5iteraciones se tengan que revisar las historias de los usuarios y renegociar nuevamente la planificacin.

    Hemos visto que al principio del proyecto se hace una planificacin en iteraciones que debe ser retocada al cabo deunas cuantas iteraciones. A esto hay que aadir que en cada iteracin tambin hay que realizar la planificacin dela misma, lo que ha venido a llamarse planificacin iterativa. En la planificacin iterativa se especifican las historiasde los usuarios cuya implementacin se considera primordial y se aaden aqullas que no han pasado las pruebasde aceptacin de anteriores iteraciones. La planificacin de una iteracin tambin hace uso de tarjetas en las que seescribirn tareas, que durarn entre uno y tres das (la duracin la deben decidir los propios desarrolladores).

    Es por eso, que el diseo que seguimos se puede calificar de continuo. Como vemos aade agilidad al proceso dedesarrollo y evita mirar demasiado adelante e implementar tareas que no estn programadas (algo que se ha venido allamar programacin just-in-time). Tambin es cierto que no hay nada que pueda evitar que los retrasos se acumuleny como ya deca Brooks en esos casos aadir gente a un proyecto retrasado, slo lo retrasa ms.

    A raz de lo anterior, podemos entender el siguiente consejo: optimiza al final. El eslogan subyacente es "make itwork, make it right and then make it fast" (haz que funcione, hazlo bien y entonces haz que sea rpido). Y es quenunca se sabe a priori dnde puede estar el verdadero cuello de botella, as que lo mejor es no aadir funcionalidaddemasiado temprano y concentrarnos completamente en lo que es necesario hoy. Para la optimizacin siempre habrtiempo despus cuando sea prioritaria, si es que de verdad llega a serlo.

    La planificacin en iteraciones y el diseo iterativo dan pie a una prctica poco comn en el desarrollo tradicional queson las discusiones diarias de pie. De esta forma, se fomenta la comunicacin, ya que los desarrolladores cuentan contiempo para hablar de los problemas a los que se enfrentan y cmo van con su(s) tarea(s), a la vez que su carcterinformal las hacen agradables y, sobre todo, no se alargan.

    2.1.3. Diseo, desarrollo y pruebasEl desarrollo es la pieza clave de todo el proceso de programacin extrema. Todas las tareas tienen como objetivo quese desarrollo a la mxima velocidad, sin interrupciones y siempre en la direccin correcta.

    Tambin se otorga una gran importancia al diseo y establece que ste debe ser revisado y mejorado de forma continuasegn se van aadiendo funcionalidades al sistema. Esto se contrapone a la prctica conocida como "Gran diseoprevio" habitual en otras metodologas. Los autores de XP opinan que este enfoque es incorrecto dado que a priori nose tiene toda la informacin suficiente para disear todo el sistema y se limita la posibilidad del cliente de cambiar deopinin respecto a las funcionalidades deseadas. Como veremos a continuacin a cambio se establecen los mecanismospara ir remodelando el diseo de forma flexible durante todo el desarrollo.

    5

  • La clave del proceso de desarrollo de XP es la comunicacin. La gran mayora de los problemas en los proyectos dedesarrollo son provocados por falta de comunicacin en el equipo, as que se pone un gran nfasis en facilitar que lainformacin fluya lo ms eficientemente posible.

    Es en este punto donde entra uno de los trminos estrella de la programacin extrema: la metfora. El principalobjetivo de la metfora es mejorar la comunicacin entre los todos integrantes del equipo al crear una visin globaly comn del sistema que se pretende desarrollar. La metfora debe estar expresada en trminos conocidos para losintegrantes del grupo, por ejemplo comparando lo que se va a desarrollar con algo que se puede encontrar en la vidareal. Aunque tambin se incluye informacin sobre las principales clases y patrones que se usarn en el sistema.

    Un apoyo a la metfora a lo largo del proyecto es una correcta eleccin y comunicacin de los nombres que seescojan durante el proyecto para los mdulos, sistemas, clases, mtodos, etc. Nombres bien puestos implican claridad,reusabilidad y simplicidad... tres conceptos a los que XP otorga una gran importancia.

    Aunque en general el diseo es realizado por los propios desarrolladores en ocasiones se renen aquellos con msexperiencia o incluso se involucra al cliente para disear las partes ms complejas. En estas reuniones se empleanun tipo de tarjetas denominadas CRC (Class, Responsabilities and Collaboration - Clases, Responsabilidades yColaboracin) cuyo objetivo es facilitar la comunicacin y documentar los resultados. Para cada clase identificada serellenar una tarjeta de este tipo y se especificar su finalidad as como otras clases con las que interaccione. Las tarjetasCRC son una buena forma de cambiar de la programacin estructurada a una filosofa orientada a objetos. Aunque losgrandes gurs de la programacin extrema sostienen que bien hechas suelen hacer el diseo obvio, recomiendan hacersesiones CRC en caso de que el sistema que se pretenda crear tenga un grado de complejidad grande. Este tipo desesiones es una simulacin, tarjetas CRC en mano, de las interacciones entre los diferentes objetos que puede realizarel equipo de desarrollo.

    Como ya hemos visto con anterioridad, uno de los principios de la programacin extrema es la simplicidad. El diseodebe ser lo ms simple posible, pero no ms simple. El paradigma KISS ("Keep It Small and Simple" para unos o"Keep it Simple, Stupid" para otros) se lleva hasta las ltimas consecuencias. Por ejemplo, se hace nfasis en no aadirfuncionalidad nunca antes de lo necesario, por las sencillas razones de que probablemente ahora mismo no sea lo msprioritario o porque quizs nunca llegue a ser necesaria.

    Supongamos que ya hemos planificado y dividido en tareas, como se ha comentado en los prrafos anteriores. Lolgico sera empezar ya a codificar. Pues no. Nos encontramos con otro de los puntos clave de la programacin extrema(y que s es innovador en ella): las pruebas unitarias se implementan a la vez hay que el cdigo de produccin. Dehecho cada vez que se va a implementar una pequea parte se escribe una prueba sencilla y luego el cdigo suficientepara que la pase. Cuando la haya pasado se repite el proceso con la siguiente parte. Aunque intuitivamente esto parezcacontraproducente, a la larga har que la generacin de cdigo se acelere. Los creadores de la programacin extremaargumentan que encontrar un error puede llegar a ser cien veces ms caro que realizar las pruebas unitarias. La idea, endefinitiva, se resumen en la siguiente frase: "Todo cdigo que pueda fallar debe tener una prueba". Adems, hay quetener en cuenta que se hacen una vez y luego se pueden reutilizar multitud de veces, incluso por otros desarrolladoresque desconocen los entresijos de esa parte o de todo el sistema, por lo que permiten compartir cdigo (otra de lasprcticas que permiten acelerar el desarrollo tal y como se ver ms adelante).

    6

  • Esta forma de usar las pruebas unitarias ayuda a priorizar y comprobar la evolucin del desarrollo y que ofrecenrealimentacin inmediata. Ya no hay imprescindibles dos equipos diferenciados que desarrollan y prueban cada unopor su cuenta. Ahora el ciclo se basa en implementar una prueba unitaria, codificar la solucin y pasar la prueba, conlo que se consigue un cdigo simple y funcional de manera bastante rpida. Por eso es importante que las pruebas sepasen siempre al 100% [Jeffries].

    Hay mucha literatura sobre las pruebas unitarias [Beck2][Gamma][Gamma2]. La mayora de los autores estn deacuerdo en que cuanto ms difcil sea implementar una prueba, ms necesarias son. Algunos incluso dicen queentonces quizs sea porque lo que se intenta probar no es lo suficientemente sencillo y ha de redisearse. En cuanto aherramientas para realizar tests unitarios, existen varias para los diferentes lenguajes, lo que hace que su ejecucin seasimple y, sobre todo, automtica [Impl].

    Las pruebas unitarias no se han de confundir con las pruebas de aceptacin que han sido mencionadas con anterioridad.stas ltimas son pruebas realizadas por el cliente o por el usuario final para constatar que el sistema hace realmente loque l quiere. En caso de que existan fallos, debe especificar la prioridad en que deben ser solucionados los diferentesproblemas encontrados. Este tipo de pruebas son pruebas de caja negra y se hacen contra las historias de los usuarios.Se suele tender a que sean parcialmente automticos y que los resultados sean pblicos.

    Es hora entonces de ampliar el ciclo de creacin de pruebas unitarias, codificacin, paso de las pruebas y aadirleun paso ms: la integracin. La programacin extrema viene a perseguir lo que se ha venido a llamar integracincontinua. De esta forma, hacindolo cada vez con pequeos fragmentos de cdigo, se evita la gran integracin final.Las ventajas de este enfoque es que permite la realizacin de pruebas completas y la pronta deteccin de problemasde incompatibilidad. Adems, ya no ser necesario un equipo independiente de integracin que haga uso del mgicopegamento al enfrentarse a problemas de divergencias y fragmentacin de cdigo.

    En todo desarrollo de programacin extrema debera existir, por tanto, una versin siempre integrada (incluso se puedeasegurar su existencia mediante cerrojos - locks). La sincronizacin por parte de los desarrolladores con el repositoriocentral debe darse como mnimo una vez al da, de manera que los cambios siempre se realicen sobre la ltima versin.De esta forma nos podemos asegurar de que las modificaciones que hacemos no se estn haciendo sobre una versinobsoleta.

    Quizs el lector se haya sorprendido con la ltima afirmacin y pensar que la probabilidad de encontrarse una versinde cdigo obsoleta (ms antigua que el cdigo actual) es muy baja. En cierto modo, esto es cierto en las metodologastradicionales, pero en la programacin extrema no: nos topamos con la importancia de refactorizar [Fowler3].Refactorizar consiste bsicamente en quitar redundancia, eliminar funcionalidad que no se usa o "rejuvenecer" diseosviejos. Tiene su justificacin principal en que el cdigo no slo tiene porque funcionar, tambin debe ser simple. Estohace que a la larga refactorizar ahorre mucho tiempo y suponga un incremento de calidad. Por cierto, tal es el nfasisque se pone en la refactorizacin que de la misma no se libran ni las pruebas unitarias.

    Como uno de los objetivos de la programacin extrema es que cualquier miembro del equipo de desarrollo puedemejorar cualquier parte del sistema, llegamos fcilmente a la conclusin de que se busca que el cdigo sea de todos.Cualquier desarrollador puede realizar cambios, corregir erratas o refactorizar en cualquier momento. Para eso, entreotras cosas, tenemos el colchn de las pruebas unitarias por si nos equivocamos. Adems, es una forma coherente

    7

  • de plasmar que todo el equipo es responsable del sistema en su conjunto y de que no haya feudos personales. Enconsecuencia, un desarrollador que deje el proyecto (algo habitual, por otra parte) no tiene por qu convertirse enun hecho catastrfico. El mejor mtodo para conseguir que el cdigo sea de todos es seguir unos estndares decodificacin consistentes, de manera que la lectura (y refactorizacin) por parte del resto del equipo de desarrollo sefacilite al mximo.

    Para terminar esta, ya extensa, descripcin de un proceso de desarrollo de programacin extrema, he dejado una desus joyas para el final. El proceso de desarrollo no lo va a hacer un desarrollador en solitario, sino siempre con otrapersona, algo que se ha venido a llamar programacin por parejas. Una pareja de desarrolladores debe compartirordenador, teclado y ratn. El principal objetivo es realizar de forma continua y sin parar el desarrollo una revisinde diseo y de cdigo. Las parejas deben ir rotando de forma peridica para hacer que el conocimiento del sistema sevaya difundiendo por el equipo (facilitndose que el cdigo sea de todos), a la vez que se fomentan el entrenamientocruzado[Jeffries2]. Existen estudios que concluyen que esta prctica es eficaz en la prctica justificndola con aspectospsicolgicos y sociolgicos [Cockburn]. Con este apoyo los gurs de la programacin extrema no dudan en afirmarque dos personas trabajando conjuntamente en pareja generan en cantidad el mismo cdigo (o mejor dicho, la mismafuncionalidad) que dos personas por separado, pero de mayor calidad. Sin embargo esta es la prctica que msreticencias provoca por parte de jefes y de los propios programadores.

    2.2. Valores de la programacin extremaEl proceso de desarrollo descrito en la seccin anterior est fundamentado en una serie de valores y principios que loguan. Los valores representan aquellos aspectos que los autores de XP han considerado como fundamentales paragarantizar el xito de un proyecto de desarrollo de software. Los cuatro valores de XP son:

    1. comunicacin,

    2. simplicidad,

    3. realimentacin y

    4. coraje

    8

  • Los partidarios de la programacin extrema dicen que son los necesarios para conseguir diseos y cdigos simples,mtodos eficientes de desarrollo software y clientes contentos. Los valores deben ser intrnsecos al equipo dedesarrollo.

    De los cuatro valores, quizs el que llame ms la atencin es el de coraje. Detrs de este valor encontramos el lema "sifunciona, mejralo", que choca con la prctica habitual de no tocar algo que funciona, por si acaso. Aunque tambines cierto que tenemos las pruebas unitarias, de modo que no se pide a los desarrolladores una heroicidad, sino slocoraje.Algunas voces, adems, aaden un quinto valor: la humildad. Y es que con la que comparticin de cdigo, larefactorizacin y el trabajo en equipo tan estrecho una buena dosis de humildad siempre ser de agradecer.

    2.3. Principios de la programacin extremaLos principios fundamentales se apoyan en los valores y tambin son cuatro. Se busca

    1. realimentacin veloz,

    2. modificaciones incrementales,

    3. trabajo de calidad y4. asuncin de simplicidad.

    Los principios suponen un puente entre los valores (algo intrnseco al equipo de desarrollo) y las prcticas, que severn a continuacin, y que estn ms ligadas a las tcnicas que se han de seguir.

    2.4. Prcticas de la programacin extremaPor su parte, las prcticas son las siguientes:

    1. El juego de la planificacin (the planning game)2. Pequeas entregas (small releases)

    3. Metfora (metaphor)

    4. Diseo simple (simple design)

    5. Pruebas (testing)

    9

  • 6. Refactorizacin (refactoring)

    7. Programacin por parejas (pair programming)8. Propiedad colectiva (collective ownership)

    9. Integracin continua (continous integration)

    10. 40 horas semanales (40-hour week)

    11. Cliente en casa (on-site costumer)

    12. Estndares de codificacin (coding standards)

    No es fcil aplicar una nueva metodologa en un equipo de desarrollo ya que obliga a aprender una nueva forma detrabajar. Tambin obliga a abandonar cmo se hacan las cosas antes, que aunque no fuera la mejor forma posibleya se conoca. XP ha sido adoptado por un gran nmero de equipos en los ltimos aos y de sus experiencias se haextrado una conclusin sencilla: es mejor empezar a hacer XP gradualmente.El proceso que recomiendan los autores de XP es el siguiente: identifica el principal problema del proceso de desarrolloactual. Escoge la prctica que ayuda a resolver ese problema y aplcala. Cuando ese haya dejado de ser un problema,escoge el siguiente. En realidad se recomienda que se apliquen las prcticas de dos en dos. El objetivo es que lasprcticas de XP se apoyan unas a otras y por tanto dos prcticas aportan ms que la suma de ambas y por tanto es msfcil comprobar los resultados.

    El objetivo final debe ser aplicar todas las prcticas, ya que representan un conjunto completo, "si no las aplicas todasno ests haciendo eXtreme Programming".

    2.5. ConclusinSegn Kent Beck, "la programacin extrema es una forma ligera, eficiente, flexible, predecible, cientfica y divertidade generar software" (Kent Beck, Extreme Programming Explained). Ah es nada. Esta metodologa ha surgido desdela experiencia, como una forma de resolver los problemas encontrados en los procesos de desarrollo software en losque se han visto involucrados sus autores. Este tipo de desarrollos eran en general de creacin de software a la medidadel cliente y hay numerosas opiniones que relatan el xito de esta metodologa en este mbito. Queda por ver si esposible aplicar sus ideas tambin en procesos de desarrollo muy diferentes, como el seguido por la comunidad delsoftware libre.

    3. El Software LibreEn realidad, la definicin de software libre es un concepto legalista, ya que la nica diferencia entre el softwarepropietario y el software libre es precisamente su licencia [Stallman]. Esto no es del todo cierto, porque se ha venido

    10

  • constatando en la ltima dcada que esta distincin tiene unos efectos secundarios que afectan a la manera en la quese entiende y en la que se genera el propio software. Podemos ver que la licencia condiciona la manera de buscar unaforma eficiente de generacin y difusin del software.

    3.1. El modelo de desarrollo de software libreEric S. Raymond, gur del software libre, se dio cuenta de ello en 1997 y en uno de sus famosos escritoscatalog el modelo de desarrollo de algunos (no todos) proyectos de software libre como el modelo de bazar[Raymond][Bezroukov]. Para Raymond la metodologa tradicional se poda comparar con la construccin decatedrales donde exista un gran arquitecto que haca el diseo y el reparto de tareas, para que posteriormente unconjunto de operarios y peones realizaran las operaciones pertinentes. En el modelo de bazar, por el contrario, noexiste ese orden tan estricto, sino que se asemeja ms bien al caos que se forma en un bazar oriental. La manera deinteractuar entre los diferentes actores en el caso del bazar no est controlada por ningn tipo de personas ni entidades,sino que existe una enorme cantidad de intereses y de intercambios de diferentes tipos (lo que los economistas que hanestudiado el software libre han llamado transacciones [Ghosh][Lerner]).

    Eric Raymond achac la creacin de proyectos de software libre a necesidades e intereses particulares de los propiosdesarrolladores, que lanzan una aplicacin para resolver su problema y el de otras personas en idntica situacin. Noes difcil imaginar entonces que en cada proyecto exista la figura del lder, normalmente asociada a su fundador o a unode sus principales promotores. El lder del proyecto no necesita ser una persona dotada meramente de conocimientostcnicos, sino que debe tener habilidad para coordinar y motivar a todo aqul que est interesado en unirse al proyectorealizando aportaciones. Esto es as, porque el origen del rediseo suele situarse en los propios usuarios, que se revelancomo los que hacen el trabajo de depuracin, probablemente el proceso ms tedioso en la generacin de software. Seda el hecho de que una cantidad grande de usuarios permite procesos de depuracin en paralelo y que, en caso deexistir errores, su correccin puede darse de forma distribuida, ya que el usuario que encuentra una errata no tiene porqu ser el usuario/desarrollador que la corrige.

    3.2. Herramientas de desarrolloPara poder llevar a la prctica de manera eficaz el que los proyectos sean lo ms abiertos que se pueda, el modelo debazar ha supuesto la elaboracin y perfeccin de numerosas herramientas, incluso de sitios centralizados que intentanenglobar todo el proceso de desarrollo, como son SourceForge y sus clones (BerliOS o Savannah). Las herramientasson, con mucha probabilidad, la mejor forma de ver y entender el desarrollo que sigue el software libre.Uno de los principios bsicos enunciados por Raymond, aunque no expresado precisamente de esta forma, es que elproceso de desarrollo debe ser lo ms abierto posible. Una de las consecuencias es que cuantos ms ojos hay mirandoel cdigo mayor es la probabilidad de encontrar fallos antes [Raymond]. La herramienta que mejor se adapta a estanecesidad es un sistema de control de versiones abierto al pblico. La ltima versin (y todas las anteriores) delcdigo estar disponible para todo aqul que lo desee. El sistema de control de versiones, al igual que todas las demsherramientas utilizadas, son herramientas que permiten la colaboracin de manera distribuida. Cualquier desarrolladoren cualquier lugar del mundo podr descargarse el cdigo y corregir una errata que haya encontrado.

    11

  • En realidad, la idea de Raymond va ms all, ya que la "comunidad" que se crea alrededor de un proyecto no se formapor s sola. Son necesarios una serie de acciones y mecanismos para que el proyecto sea conocido. De esta forma, seconsiguen usuarios que son el primer paso para tener desarrolladores. Esta tarea, aunque no necesariamente tcnica,implica gran cantidad de trabajo. Uno de los mtodos evocados por Raymond y proclamado incluso como principiopor algunos es el famoso "release early, release often" (entrega pronto, entrega frecuentemente), que est pensado paracaptar la atencin de una comunidad de usuarios (y desarrolladores) y mantenerla satisfecha con la evolucin de unaaplicacin que satisfaga sus necesidades [Raymond].

    La proliferacin del acceso a Internet ha hecho que el ciclo de desarrollo se sustente fuertemente en el uso de susservicios, de manera que se consigue un grupo potencial de usuarios (y desarrolladores) mucho mayor. Las formasde comunicacin habituales son las listas de correo, abiertas a la suscripcin de cualquiera que as lo desee. Losmensajes de las lista de correo son almacenados en los llamados "archivos", lo que permite poder tener acceso a todaslas decisiones y discusiones de la lista. De esta manera, todo queda plasmado por escrito. Tambin existen otrosmedios de comunicacin como pueden ser los canales de IRC.

    SourceForge y otros portales especializados en sustentar la creacin de software libre lo que hacen es realizar lastareas de instalacin, configuracin y gestin de herramientas que permiten este tipo de desarrollos, de manera que undesarrollador que quiera crear un nuevo proyecto de software libre no se tenga que preocupar de tener que instalarse supropio software de control de versiones ni gestores de listas de correo-e. En definitiva, los desarrolladores de softwarelibre pueden desarrollar y gestionar sus proyectos de manera que se aproveche la sinergia producida por un entorno dedesarrollo lo ms abierto posible.

    3.3. ConclusinPodemos concluir que el software libre per se no est asociado a ninguna forma de desarrollo especfica, sino que secaracteriza por una serie de condiciones (legales) que un programa debe cumplir para ser considerado como tal. Sinembargo, la experiencia ha demostrado formas y mtodos por los cuales proyectos de software libre tienen ms xito yevolucionan ms rpido y mejor que otros, probablemente incluso mejor que el software propietario. La idea principales aprovechar las caractersticas impuestas por las licencias para abrir el proceso de desarrollo al mayor nmero depersonas y aprovechar mecanismos de difusin predefinidos (independientes de los desarrolladores) para llegar a tenerun amplio grupo de usuarios. Adems, la existencia de herramientas de colaboracin distribuida permiten aprovecharal mximo efectos sinergticos.

    4. Software Libre y Programacin ExtremaA lo largo de las introducciones a la programacin extrema y al software libre hemos visto como algunas de lasprcticas de la programacin extrema son intrnsecas al desarrollo del software libre. Por contra, existe otra serie deprcticas que son de difcil implantacin o que generan serios interrogantes. Este apartado va a tratar sobre todo esto.

    Antes de todo, es importante recordar que para Beck se est haciendo programacin extrema si y slo si se siguenlas doce prcticas, ninguna ms ni ninguna menos [Beck][Jeffries3]. Fowler es ms flexible en este sentido y prefiere

    12

  • hablar entonces de procesos influenciados por la programacin extrema [Fowler2]. Vemos que mientras el softwarelibre es muy flexible en cuanto a su modelo de desarrollo (como ya hemos visto con anterioridad, en realidad es unconcepto legal), la programacin extrema consta de un conjunto conocido y cerrado de prcticas. Esta caractersticahar que consideremos invariante la programacin extrema y veamos qu cosas son las que pueden ser interesantespara el desarrollo de software libre.

    Como veremos, la programacin extrema no puede ser implantada en su prctica totalidad por el desarrollo de softwarelibre. Por eso, retomando las palabras de Fowler, veremos hasta qu punto se puede influenciar el software libre porlos procesos de programacin extrema.

    4.1. Caractersticas intrnsecas de programacin extrema en el softwa-re libre

    En un prrafo anterior se ha comentado que el software libre sigue de por s algunas prcticas de la programacinextrema. Como son caractersticas ya adoptadas y ampliamente conocidas, no nos detendremos mucho en ellas.

    La ms evidente de las prcticas comunes es probablemente la propiedad colectiva del cdigo, caracterstica esencialpara la libertad del software. Al igual que en la programacin extrema, para facilitar el trabajo conjunto, se siguen unoestndares de codificacin que permiten una lectura rpida y simple del cdigo, a la vez que independiza el cdigode su autor. Un buen ejemplo en cuanto a estndares de codificacin es el proyecto PEAR, un repositorio de clasesPHP [Jansen]. En muchos proyectos, las aportaciones de terceros no se aceptan, ni siquiera revisan, hasta que siganlos estndares establecidos. Que el cdigo sea comunitario en el software libre, como se ha dicho antes, no implica enmuchas ocasiones que haya comparticin de conocimiento total como se recomienda en la programacin extrema.

    El paradigma "entrega pronto, entrega frecuentemente" del software libre encaja perfectamente con la idea de tenerentregas frecuentes de la programacin extrema en busca de realimentacin. El que se haga hincapi en hacer unaprimera entrega pronto encaja, por su parte, perfectamente con la idea de que se empiece por lo primordial y se dejenfuncionalidades avanzadas para el futuro. A partir de ah el proceso iterativo de probar, codificar, pasar pruebas yrefactorizar de la programacin extrema se cumple parcialmente en el software libre. Mientras las pruebas unitariastodava se utilizan poco asiduamente, el proceso de tener pequeas iteraciones se cumple casi al pie de la letra, llegandoincluso a tener proyectos con entregas diarias. La refactorizacin en s no ocurre como tal, siendo lo ms frecuente unasimple correccin de erratas. Lo ms frecuente es que se de el caso de que los usuarios hagan depuracin (paralela) yque ofrezcan realimentacin, ya sea con la solucin del problema o como un aviso para que el desarrollador principalo cualquier otra persona pueda corregirlo.

    4.2. Prcticas de difcil adaptacinAl igual que existen ciertas prcticas de la programacin extrema muy arraigadas y en concordancia con el proceso dedesarrollo mayoritario de software libre, existen otras cuyo seguimiento se puede prcticamente descartar.

    4.2.1. 40 horas semanales

    13

  • La que se puede eliminar, sin lugar a dudas, es el requisito de que el equipo de trabajo deba tener una carga de trabajorazonable (40 horas). Los estudios realizados sobre desarrolladores de software libre demuestran que una gran mayorade los desarrolladores de software libre colaboran en proyectos en su tiempo libre. Se da la circunstancia de que un80% le dedica menos de 15 horas semanales. Sin embargo, aunque esta prctica est dirigida a un entorno laboral,tambin es cierto que se basa en el hecho de que la capacidad creativa no se puede alargar ms all de un cierto tiempo.El desarrollador necesita una serie de condiciones para poder ejercerla en su mxima expresin y una de ellas es queel ambiente laboral sea agradable.

    En el caso de los colaboradores del software libre asumir esto es de perogrullo, ya que su colaboracin es en cualquiercaso de manera voluntaria.

    En conclusin, esta prctica es de difcil adaptacin en el mundo del software libre, pero por otra parte tampoco esnecesaria, porque los objetivos que persigue ya son alcanzados por otros medios de por s.

    4.2.2. Cliente en casaEl segundo punto es ya un poco ms complejo de solucionar: la cliente en casa. Y lo es por partida doble, ya que noes que no podamos asegurar que est en casa, es que en realidad no tenemos la certeza de tener clientes. De hecho loque se tiene son usuarios. Sin embargo, la figura del usuario difiere en bastantes aspectos de la de cliente.

    En comn tienen que, tanto en el software libre como en la programacin extrema, se intente integrar al usuario/clienteen el equipo de desarrollo. En la programacin extrema esto se hace para agilizar la realimentacin, mientras que elsoftware libre va ms all y tambin se ve la posibilidad de que el propio usuario termine formando parte del equipode desarrollo, con el objetivo de que colabore tambin en tareas de depuracin, correccin y, con suerte, integracin.Se diferencian en que en la programacin extrema, todo el desarrollo gira en torno a las historias de los usuarios. Elcliente es la fuente de ingresos y merece, por consiguiente, todas las atenciones. El desarrollo de software libre es mscatico en este sentido. El usuario recibir la funcionalidad que precisa si existe algn desarrollador que est interesadoen implementarla. El centro de decisin se ha trasladado en este caso hacia el desarrollador. Sin embargo, tambines cierto que un usuario siempre tiene la posibilidad de pagar a un desarrollador para que aporte la funcionalidadal proyecto que satisfaga sus necesidades. Esto lo puede hacer incluso yendo en contra de la estrategia general delproyecto. Y es que una de las consecuencias econmicas de las licencias de software libre es que imposibilitan elvendor lock-in, esa situacin donde es el fabricante de software (aqul que tiene la propiedad intelectual) el que decidede manera unilateral el rumbo que debe tomar el software, as como lo que se puede hacer con l [Barahona].

    Tambin es cierto que en los grandes proyectos de software libre se hace un gran esfuerzo por conocer las necesidadesde los usuarios para satisfacerles en prximas entregas, aunque este proceso no se encuentre formalizado como enla programacin extrema mediante el uso de tarjetas CRC, cuya adopcin sea probablemente de gran inters. Elmecanismo habitual que tienen los usuarios para hacer peticiones a los desarrolladores suelen ser las listas de correoelectrnico del proyecto. La cercana del usuario es parcial.

    Resumiendo, hemos visto que el software libre suele carecer de cliente como tal, aunque cuenta con la figura deusuario. Hemos tratado las diferencias existentes entre clientes y usuarios y las consecuencias que acarrean en el

    14

  • proceso de desarrollo. Tambin sabemos que a da de hoy, en el software libre no existen mtodos formales paracapturar necesidades de los usuarios y comprobar que han sido satisfechas.

    4.2.3. El juego de planificacinComo hemos visto en el apartado anterior, la falta de cliente har que sea muy difcil que se pueda llevar a cabo eljuego de planificacin que propone la programacin extrema. En realidad, podemos asegurar que tal y como se vienedesarrollando el software libre en este aspecto es todava ms extremo que el modelo de la programacin extrema, yaque prescinde segn los casos parcial o totalmente de este paso.

    Los nuevos proyectos suelen crearse para satisfacer necesidades personales por parte de un desarrollador o un grupo dedesarrolladores. En este miniestadio, el propio desarrollador suele ser a la vez el propio usuario, por lo que no necesitaun proceso de formalizacin de historias de los usuarios. Segn va creciendo el proyecto, es probable que el juego deplanificacin se haga ms y ms necesario, sobre todo si el nmero de usuarios crece y el equipo de desarrolladoresest dispuesto a satisfacer las necesidades de los usuarios llegando incluso a realizar una planificacin temporal delmismo. Como en muchos de los puntos anteriores vemos que no existen herramientas ni mecanismos de software libreque permitan formalizar esto convenientemente.

    La mejor aproximacin es quizs Bugzilla que permite ser utilizado adems de para la gestin de la generacin deinformes de defectos y posterior correccin de los mismos, para organizar y repartir tareas entre el equipo de desarrollo.Otro mtodo ampliamente difundido es el uso de wikis, aplicaciones con interfaz web abiertas a la contribucin detodo el que las visite, aunque ciertamente es una solucin bastante primitiva. Herramientas como MrProject, un clonde la aplicacin para gestin de proyectos MS Project, pueden favorecer que esto mejore en un futuro prximo.Vemos que en lo que al juego de planificacin se refiere, el software libre es todava ms extremo que la propiaprogramacin extrema. Su ejecucin se retrasa hasta estadios en los que es verdaderamente necesaria, siguiendo laidea que aparece en otras partes de la programacin extrema: "si no lo necesitas ahora, no lo hagas".

    4.2.4. Programacin por parejasLa programacin por parejas es una de las piezas clave de la programacin extrema y que, sin embargo, parece que notiene cabida en el mundo del software libre. Sin embargo, es posible que la programacin por parejas no sea tan tilen el software libre como lo puede ser en un proyecto en una empresa.

    La revisin entre iguales, tanto de cdigo como de diseo, que propicia el trabajo en parejas, es una prctica que enmuchos proyectos se da de por s. El ms conocido es el caso de Linux, donde se carece incluso de un repositorioCVS. Linus Torvalds quiere que todas las aportaciones de cdigo se manden a la lista de correo. No como adjuntoal mensaje, sino incluso en el cuerpo del mensaje. De esta forma est a la vista de todos y no es una prctica pocohabitual que los parches sean analizados y comentados por terceras personas en la propia lista.

    Existen otros mecanismos no formalizados de aceptacin de colaboraciones de cdigo. Generalmente lo ms comnes que los desarrolladores principales sean los nicos que tengan acceso de escritura al repositorio del sistema de

    15

  • control de versiones. Cualquier persona es capaz de descargarse la ltima versin del mismo, pero tendr que enviar alos desarrolladores principales el parche para que ste sea incluido. Ser tarea de estos ltimos revisar la contribuciny verificar que sigue los parmetros de codificacin y diseo pertinentes.

    Otra ventaja adicional en el mundo de la empresa de tener dos programadores realizando tareas conjuntamente espor la alta movilidad laboral. Es bien sabido, que muchos proyectos pierden un tiempo valiossimo cuando uno delos integrantes del equipo deja el trabajo (una situacin que, por cierto, se ha dado con una pasmosa frecuencia en losltimos tiempos). La programacin por parejas intenta mitigar este efecto, ya que de los dos programadores se quedaruno que tendr el conocimiento suficiente sobre lo que estaba haciendo la pareja como para poder seguir adelante. Sinembargo, tambin en este caso, las condiciones que se dan en el desarrollo de software libre hacen que esto no sea tanproblemtico.

    Vemos en definitiva, que an cuando la programacin por parejas se suple por otros medios, no existe un mecanismoformal que permita comprobar que los objetivos promulgados por la misma se cumplen.

    4.3. Prcticas interesantesEn los siguientes puntos vamos a comentar las prcticas cuya adopcin por parte del mtodo de desarrollo del softwarelibre puede ser interesante. Es verdad que estas prcticas ya se encuentran ms o menos arraigadas en diferentesproyectos, pero en opinin del autor esta situacin no es suficiente y, por tanto, se debe fomentar su uso.

    Las prcticas que se incluyen en este apartado no chocan frontalmente con el modelo actual de desarrollo de softwarelibre, por lo que su adopcin se facilita. En la mayora de los casos suponen ms un cambio de costumbre en la formade programar y utilizar la informacin que se maneja en un proyecto. Por contra, las consecuencias de este ligerocambio pueden suponer un sustancial aumento de calidad de las aplicaciones de software libre.

    4.3.1. Pruebas unitarias y de aceptacinLas pruebas unitarias se deberan implementar con mayor frecuencia. Aunque se puede considerar que es una tcnicaya existente en los aos 70, la programacin extrema puede hacer que se incremente su uso en los proyectos desoftware libre y, probablemente, que sea su mayor aportacin a la misma. Las pruebas unitarias no tienen por quhacerse estrictamente antes de codificar; al fin y al cabo es mejor tener pruebas, aunque sea con posterioridad, que notenerlas.

    Cuando un programador tiene que modificar cdigo que ha sido desarrollado por otra persona se corre un alto riesgode que introduzca alguna errata (bug). Las pruebas unitarias reducen este riesgo dado que avisarn al instante si algodeja de funcionar. Naturalmente para ello debe adquirirse el hbito de ejecutar todas las pruebas del sistema tras hacerun cambio. En los proyectos de software libre, la reduccin de este factor de riesgo es muy til, dado que es muyhabitual modificar cdigo escrito por otros.

    Es probable que la introduccin de las pruebas unitarias conlleve un cambio de filosofa en el mundo del softwarelibre. De la bsqueda heroica de erratas en la que se hace tanto nfasis, se debe pasar a la implantacin de buenas

    16

  • maneras que redunden en cdigo menos proclive a tenerlos. En definitiva, se debe tener a desarrolladores con talentocreando cdigo (que es probablemente lo que mejor hagan y ms les estimule) en vez de repasando cdigo errneo deotros.

    En un futuro, esperemos que este tipo de pruebas puedan estar integradas en sistemas de control de versiones como elCVS. Quizs haya que esperar a que Subversion, la herramienta de siguiente generacin de control de versiones quetodava se encuentra en fase de desarrollo, las implemente. De esta forma, las pruebas unitarias formaran parte delsistema de control de versiones.

    No nos debemos olvidar por otro lado de las pruebas de aceptacin. La mayora de los proyectos de software librecarecen en sus pginas web de informacin de hacia dnde va el proyecto: las funcionalidades que sern aadidas enun futuro prximo, los cambios que se van a hacer, etc. Una buena forma de resolver esto y abrir el desarrollo a msdesarrolladores podra ser la creacin de pruebas de aceptacin previas a la implementacin de la siguiente operacinque podrn ser comprobadas al final de la misma, tal y como ocurren en los ciclos iterativos de la programacinextrema. Esto tambin puede utilizarse para saber las funcionalidades que son prioritarias para los usuarios.

    4.3.2. MetforaEl objetivo de la metfora del sistema es proporcionar a todo el equipo una misma visin del fin del sistema y desu arquitectura general. Con ello se facilita que todos los desarrolladores hablen un mismo idioma y que nuevosdesarrolladores lo adquieran ms rpido y integrarse en el proyecto sin dificultades. Este segundo aspecto es el quepuede hacerla interesante para el software libre. La posibilidad de conseguir el cdigo en muchas ocasiones no rebajasuficientemente la barrera de entrada que existe para nuevas incorporaciones. De hecho, estoy seguro de que lainformacin que se puede plasmar de manera concisa en la metfora se encuentra dispersada en el cdigo y las listasde correo.

    Plasmar la metfora por escrito puede suponer, por tanto, una forma de revisar el propio diseo del sistema por partede los desarrolladores. Asimismo, ya que estamos hablando de un nivel de abstraccin superior al de codificacin,puede alentar a la utilizacin de patrones de diseo, una prctica bastante desconocida en el mundo del software libre.

    El uso de la metfora junto con formas de documentacin de cdigo, del estilo de javadoc y similares, puede paliaren parte la falta de documentacin que existe en el mundo de software libre. Estas prcticas podran incluso llegarsea automatizarse parcialmente (de hecho javadoc es en s una herramienta ms que una forma de documentacin).Muchos adeptos a la programacin extrema se muestran contrarios a la utilizacin de estas maneras de creardocumentacin del cdigo, ya que argumentan que el cdigo debe ser lo suficientemente simple como para poderser entendido por s mismo. Sin embargo, habr que tener en cuenta que en muchas ocasiones para refrendar lasinterfaces de una clase o biblioteca puede ser muy til, ya que el desarrollador puede no estar interesado en esa claseo biblioteca, sino en desarrollar una aplicacin que la utilice.

    4.3.3. Refactorizacin

    17

  • El principal objetivo de la refactorizacin es que en vez de corregir cdigo errneo se reescriba, una idea contrapuestaa la bsqueda y caza de erratas que tanto han proclamado grandes gurs del software libre. El nuevo cdigo, por suparte, debe tener un mejor diseo: tiene que ser ms simple y estar mejor estructurado que el anterior. Detrs de estaidea, est el convencimiento de que con la inclusin de pruebas unitarias, la correccin de erratas ser muchas vecesmucho ms costosa que la propia reescritura.

    Si se mantiene un sistema lo ms simple posible se facilita que nuevos desarrollares entren en el proyecto y realicenaportaciones. Esta idea es la contraria al enfoque segn el cual lo primero es crear una gran infraestructura paraque luego sea ms fcil aadir funcionalidad. El principal problema es que en este caso no es necesario conocer esainfraestructura para poder aportar . Ms grave an es que no es posible crear una infraestructura que prevea todas lasfuncionalidades futuras, por lo que si no se refactoriza acabar siendo un impedimento.

    Con refactorizacin continua se podra evitar que aplicaciones enteras sean reescritas, porque los errores de diseo, lacalidad del cdigo y otros parmetros hacen imposible mantener la antigua versin.

    4.4. Desarrollo distribuido y programacin extremaEl hecho de que el software libre se produzca mayoritariamente de forma distribuida hace indispensable un anlisisun poco ms exhaustivo de la implicacin que tiene la distribucin en las tcnicas de programacin extrema. Paraello vamos a retomar algunos aspectos que ya han sido comentados, aunque poniendo ahora el nfasis en su carcterdistribuido.

    La generacin distribuida de software tambin es interesante desde un punto de vista netamente empresarial. Laglobalizacin de la economa mundial ha propiciado que exista un nmero creciente de proyectos cuyo equipo dedesarrollo, por razones econmicas o personales, se encuentra distribuido geogrficamente.

    La experiencia con los mtodos de desarrollo tradicionales ha demostrado que el esfuerzo dedicado a documentarpormenorizadamente o crear documentacin extra no ha incrementado la eficiencia comunicativa del equipo quetrabaja de manera distribuida. Es ms, en realidad, se ha visto que es contraproducente.Por el contrario, nos encontramos con un dilema al intentar llevar a cabo algunas de las prcticas de la programacinextrema, ya que varias de ellas asumen proximidad fsica. Es el caso de las siguientes prcticas:

    1. Programacin por parejas2. Integracin continua

    3. Juego de planificacin

    4. Cliente en casa

    18

  • Esto ha dado paso a lo que se ha venido a llamar la programacin extrema distribuida (DXP - Distributed eXtremeProgramming), que permite a los miembros del equipo estar en lugares geogrficos diferentes e incluso gozar de unagran movilidad. El mtodo se basa en aplicar los valores y principios de la programacin extrema, pero adapta lasprcticas a un entorno de trabajo distribuido, de manera que se relaja la asuncin de proximidad fsica.Es verdad que las tecnologas Internet han ayudado a que el trabajo distribuido sea posible, pero tambin es ciertoque esas tecnologas que se usan (pginas web, IRC, listas de correo, bitcora de cambios y documentacin -- ya seagenerada manual o semiautomticamente) existan ya en los aos 70. Aunque es constatable que estas tecnologas nopueden reemplazar la presencia en persona, el salto a las nuevas (y tan prometidas) formas de comunicacin como lavideoconferencia no son accesibles al pblico en general.

    4.5. Interrogantes y retosEl software libre se ha caracterizado en los ltimos aos porque su proceso de desarrollo es flexible. El hecho de quequeramos introducir varias tcnicas nuevas para acentuar la calidad de las aplicaciones generadas, da pie a una seriede interrogantes y retos que habr que ir solucionando.

    4.5.1. Compatibilidad hacia atrs y dependenciasEl diseo iterativo que promulga la programacin extrema choca frontalmente en muchos proyectos con la compatibi-lidad hacia atrs. Quizs esto tambin sea una de las debilidades de la programacin extrema, ya que invita a realizarfrecuentes entregas y diseo iterativo pero no aborda la cuestin de mantener la compatibilidad hacia atrs o de lamigracin de datos de versiones anteriores. La programacin extrema est orientada a satisfacer las necesidades deun cliente conocido donde este problema est ms controlado. Sin embargo dentro de la industria del software, y porsupuesto con mayor frecuencia en el software libre, no es lo general ya que se dirigen a una gran multitud de usuariosfinales. Es, por tanto, muy importante poder asegurar al usuario que el trabajo realizado con anterioridad con la apli-cacin pueda ser manipulado por las nuevas versiones de la aplicaciones y en el caso de las libreras que se mantenganlas APIs durante al menos un tiempo de migracin.

    Sin embargo, el mayor problema para utilizar los mtodos de la programacin extrema en el software libre son lasdependencias. La programacin extrema asume que el proyecto se encuentra aislado en el mundo, una asuncin queen demasiadas ocasiones no es cierta. Muchos desarrollos se basan en otros paquetes que a la vez se encuentran en fasede desarrollo y cuyas caractersticas cambian constantemente. En esta carrera es muy difcil mantenerse independientey aislado del mundo exterior. Las pruebas de regresin y las pruebas unitarias pueden ser dos maneras de mitigar losefectos de las dependencias dentro del software libre.

    4.5.2. Interrogantes econmicos y psicolgicosUna de las crticas a la programacin extrema es la dificultad de estimar cunto va a costar un proyecto, un problemaasociado, por otra parte, tambin a las metodologas tradicionales. Es verdad que esto afecta en parte al software libre,ya que muchos proyectos no estn ubicados en empresas ni tienen que generar una estimacin de costes. Por otro

    19

  • lado, sera interesante tener alguna forma de hacerlo de manera ms o menos exacta para empresas que realizarandesarrollos de software libre.

    Los efectos que puede causar la refactorizacin no estn del todo claros. El hecho de tener menos lneas de cdigodespus de refactorizar tiene un efecto psicolgico negativo importante, adems de que siempre es doloroso tirar lneasde cdigo.

    A favor del software libre est el hecho de que los desarrolladores se suelen adaptar rpidamente a nuevas ideas, yaque ven el desarrollo de software libre como un buen laboratorio para tcnicas novedosas. Esto no suele ser ciertoen el mundo empresarial, mucho ms inerte y pesado ante nuevos cambios, donde existe frecuentemente el llamadosndrome de "no lo hemos inventado aqu".

    Por supuesto, hay que tener en cuenta que gran parte del xito en la adopcin de tcnicas de programacin extremadepender de que se creen nuevas herramientas que las soporten o que las existentes integren los nuevos mtodos.

    En general, podemos concluir que todava no existe la experiencia suficiente en proyectos de software libre para poderhablar de los efectos secundarios que provocara la adopcin de las tcnicas de programacin extrema.

    5. ConclusionesA lo largo de este documento hemos visto cmo el mtodo de desarrollo seguido mayoritariamente en el softwarelibre y la programacin extrema tienen muchas caractersticas comunes. Por otro lado, existen una serie de prcticas(pruebas, metfora y refactorizacin) que sera muy interesantes adoptar en el software libre, ya que conllevaran unaumento de la calidad. Las pruebas permitirn a los desarrolladores realizar modificaciones con la seguridad de que norompen nada en otro lugar, la metfora proporciona una visin intuitiva del sistema y la refactorizacin est pensadapara mejorar la calidad del cdigo. Estas tres iniciativas tienen como objetivo principal transformar el modelo dedesarrollo que actualmente est centrado en demasa en encontrar y corregir erratas a una nueva forma de desarrollaren la que el diseo iterativo y la codificacin tomen mayor relevancia. Dado que lo segundo es ms divertido que loprimero no dudo que ser muy provechoso en un entorno donde la mayora de los contribuidores lo hacen en su tiempolibre y de manera altruista.

    A la vista de lo que se ha ido exponiendo parece ser que la mejor solucin para la adopcin de tcnicas de programacinextrema en el software libre es la existencia de un ncleo que asegure las prcticas de la programacin extrema comopequeas entregas y que permitan tener un diseo simple y controlado (un ejemplo de esto podra ser Linux, donde defacto esto ya existe ms o menos de esta manera). Este grupo puede funcionar de por s como un equipo de desarrollodistribuido, teniendo asignada entre otras tareas la de comprobar que las aportaciones exteriores cumplen los requisitosde calidad necesarios para ser integradas en el proyecto.

    Otro aspecto interesante es que la programacin extrema ofrece mtodos formales para plasmar informacin que noexisten de tal forma en el software libre. Sera interesante contar con dichos mtodos para que la barrera de entradaa nuevos desarrolladores sea ms baja. Un ejemplo interesante de estos mtodos son las tarjetas CRC que permitentener una idea intuitiva del proyecto en un espacio de tiempo muy corto sin tener que analizar concienzudamente la

    20

  • organizacin de ficheros y cdigo. Yendo ms all, se podra utilizar UML adems de las tarjetas CRC para especificarel diseo de la aplicacin [Wills]. Es probable que esto supongo una redefinicin del uso de las tarjetas CRC, ya queen la programacin extrema sirven slo para comunicarse en una reunin, careciendo despus de importancia comodocumentacin porque se asume que se quedarn obsoletas enseguida.

    En definitiva, se ha podido ver cmo la programacin extrema puede aportar nuevas formas en busca de optimizar elmodelo de desarrollo de software libre. El tiempo dir si estas prcticas son asumidas por los diferentes proyectos desoftware libre y, en su caso, si realmente harn gozar de las ventajas que se han presentado.

    6. Referencias (en orden alfabtico)1. [Barahona] Jess Mara Gonzlez Barahona "Software libre, monopolios y otras yerbas",

    http://sinetgy.org/~jgb/articulos/soft-libre-monopolios/2. [Beck] Kent Beck "Extreme Programming Explained: Embrace Change", Addison-Wesley Pub Co; ISBN:

    0201616416, 1a edicin octubre 1999

    3. [Beck2] Kent Beck & Erich Gamma "JUnit Cookbook", http://junit.sourceforge.net/doc/cookbook/cookbook.htm4. [Bezroukov] Nikolai Bezroukov "A Second Look at the Cathedral and the Bazaar", http://www.firstmonday.dk/issues/issue4_12/bezroukov/

    5. [Cockburn] Alistair Cockburn, Laurie Williams "Costs and Benefits of Pair Programming",http://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF

    6. [Fowler] Martin Fowler "Is Design Dead?", http://www.martinfowler.com/articles/designDead.html

    7. [Fowler2] Martin Fowler "Variations on a Theme of XP", http://www.martinfowler.com/articles/xpVariation.html

    8. [Fowler3] Martin Fowler "Refactoring: Improve the Design of Existing Code", Addison-Wesley Pub Co, ISBN:0201485672, 1a edicin junio 1999

    9. [Gamma] Erich Gamma & Kent Beck "JUnit A Cooks Tour", http://junit.sourceforge.net/doc/cookstour/cookstour.htm10. [Gamma2] Erich Gamma & Kent Beck "JUnitTest Infected: Programmers Love Writing Tests",

    http://junit.sourceforge.net/doc/testinfected/testing.htm11. [Ghosh] Rishab Aiyer Ghosh "Cooking pot markets: an economic model for the trade in free goods and services

    on the Internet", http://www.firstmonday.dk/issues/issue3_3/ghosh/

    12. [Harrison] Peter Harrison "Evolutionary Programming", http://www.devcentre.org/research/evoprogramming.htm

    21

  • 13. [Impl] Implementaciones de tests unitarios para diferentes lenguajes y plataformas "Testing Frameworks",http://www.xprogramming.com/software.htm

    14. [Jansen] Martin Jansen, Toms V.V. Cox & Alexander Merz "PEAR Coding Standards",http://pear.php.net/manual/en/standards.php

    15. [Jeffries] Ron Jeffries "Essential XP: Unit Tests at 100", http://www.xprogramming.com/xpmag/expUnitTestsAt100.htm

    16. [Jeffries2] Ron Jeffries "Essential XP: Junior / Senior Pairing", http://www.xprogramming.com/xpmag/pairing.htm

    17. [Jeffries3] Ron Jeffries "Theyre called Practices for a reason", http://www.xprogramming.com/xpmag/PracticesForaReason.htm

    18. [Lerner] Josh Lerner & Jean Tirole "The Simple Economics of Open Source", http://www.idei.asso.fr/Commun/Articles/Tirole/simpleeconomics-July-24-2001.pdf

    19. [Raymond] Eric S. Raymond "The Cathedral and the Bazaar", http://www.tuxedo.org/~esr/writings/cathedral-bazaar/

    20. [Stallman] Richard Stallman "The Free Software Definition", http://www.fsf.org/philosophy/free-sw.html

    21. [Wills] Alan Cameron Wills "UML meets XP", http://www.trireme.com/whitepapers/process/xp-uml/paper.htm

    7. Bibliografa y otras direcciones de inters

    1. Relacin de libros sobre Ingeniera del Software, patrones (patterns) y Programacin Extrema (Extreme Program-ming, XP), http://www.ctv.es/USERS/pagullo/biblio/ingenieria_del_software.htm

    2. Donnovan Wells "Extreme Programming: A gentle introduction", http://www.extremprogramming.org

    3. Allison Pearce Wilson "Extreme Programming", http://www-106.ibm.com/developerworks/library/it-aprcc01/?dwzone=ibm

    4. chromatic "An Introduction to Extreme Programming", http://linux.oreillynet.com/lpt/a//linux/2001/05/04/xp_intro.html

    5. Andrew McKinlay "Extreme Programming and Open Source Software", http://www.advogato.org/article/202.html

    6. Ron Jeffries "Manuals in Extreme Programming", http://www.xprogramming.com/xpmag/manualsInXp.htm

    7. Kent Beck "Simple Smalltalk Testing: With Patterns", http://www.xprogramming.com/testfram.htm

    8. Leigh Dodds "XP Meets XML", http://www.xml.com/pub/a/2001/04/04/xp.html

    22

  • 9. Varios autores (Wiki) "Combining Open Source And Xp", http://c2.com/cgi/wiki?CombiningOpenSourceAndXp

    10. Armin Roehrl & Stefan Schmiedel "Absolut extrem!!! Extreme Programming und Open Source Entwicklung"(alemn), http://www.entwickler.com/le/ausgaben/2001/10/artikel/2/online.shtml

    11. Proyecto Gestin Libre de Hispalinux, http://gestion-libre.hispalinux.es

    12. Jorge Ferrer "Extreme Programming y Software Libre - Aprendiendo una metodologa de software tradicional",http://www.jorgeferrer.com/doctorado/xp-y-sw-libre/

    13. Annimo (Visin sarcstica de la XP) "RiP: Programmer Invents New Methodology", http://www.bad-managers.com/rumours/story021.shtml

    23