Universidad Nacional Autónoma de México
Dirección General de Servicios de Cómputo Académico
Año 7 Núm. 74, Publicación Mensual, 27 de Noviembre de 2008

ARTÍCULOS

 

Año 2, Número 19, Mayo de 2003
Programación extrema

Luz María Ramírez Romero
luz@simba.dgsca.unam.mx

 

En un software o en un sistema ¿qué tan “grave” puede ser que se suscite un error?

En el periodo de 1985 a 1987, seis personas fueron sobreexpuestas a radiación por un tratamiento contra el cáncer que era proporcionado con ayuda de una máquina llamada Therac-25. Se cree que tres de estos seis pacientes fallecieron debido a la sobreexposición, causada por un error en el software de la máquina Therac-25 y por la falta de monitoreo de los operadores de la máquina.

En 1995, el procesador Pentium de Intel® presentó un error de software, codificado en su hardware, que llevaba a la imprecisión en las ope-raciones de división de números con punto flotante. Intel predecía que este problema sólo lo notaría una persona cada 27 mil años, no obstante, fue tan conocido, que la empresa perdió más de 400 millones de dólares en reemplazos del procesador.

El 4 de junio de 1996, la nave espa-ial Ariane 5, a los 40 segundos de haber iniciado su secuencia de vuelo y a una altitud de 3,700 me-tros, se salió de su ruta y explotó. El problema fue ocasionado por el software de navegación que heredó del Ariane 4 y que no fue debidamente probado.

Durante la Guerra del Golfo, un misil americano Patriot, falló en rastrear e interceptar un misil Scud iraquí, el cual mató a 28 soldados e hirió a 100 personas. El problema se produjo por un error en los cálculos del Sistema de Control de Armas; cuando ocurrió el incidente, el sistema había trabajado por más de 100 horas, para entonces, la imprecisión del software se acumuló y ocasionó que el sistema buscara en el lugar equivocado el misil Scud.

Producir sistemas con un mínimo de errores es una necesidad clara y urgente, una de las formas de lograrlo es con la Programación Ex-trema o XP (Extreme Programming), propuesta de Kent Beck y Ward Cunningham, que se usó por primera vez, en 1996, en la Daimler Chrysler®.

Esta filosofía de programación se está utilizando en compañías como la Ford® Motor Company y el First Union National Bank, también comienza a ser tomada como metodología en el desarrollo de software libre.

A diferencia de otras metodologías de desarrollo de sistemas, la Programación Extrema, además de ofrecer sistemas de calidad, plantea nuevas alternativas de respuesta a la solución de problemas complejos y, en la mayoría de los casos, facilita las modificaciones en las aplicaciones para lograr su extensibilidad.

Los principios de la Programación Extrema son:

Lograr simplicidad en el diseño, comunicación efectiva entre los programadores, así como entre éstos y el cliente, retroalimentación permanente, constantes pruebas automatizadas del software, desde el primer día de la programación, y tomar siempre en cuenta que los sistemas son muy susceptibles de sufrir cambios, tanto en las necesidades del usuario como en el ambiente del sistema o en la tecnología.

Planeación del proyecto

En esta fase, el usuario deberá escribir sus necesidades, definiendo las actividades que realizará el sistema; a este documento se le conoce como “Historias del Usuario” (User Stories, similares a los Casos de Uso de la metodología RUP). De 20 a 80 historias se consideran suficientes para formar el denominado Plan de Liberación.

El Plan de Liberación define, de manera específica, los tiempos de entrega de la aplicación para recibir retroalimentación del usuario. Se recomienda que cada Historia de Usuario requiera de una a tres semanas de desarrollo.

Las reuniones periódicas serán una constante durante la fase de planeación, éstas pueden ser diario, con todo el equipo de desarrollo para identificar problemas, proponer soluciones y señalar aquellos puntos a los que se les debe dar mayor importancia.

Diseño

El diseño de soluciones debe tener siempre en mente la simplicidad; en ésta, la refactorización, entendida como el proceso que permite eliminar redundancias y rejuvenecer diseños obsoletos, resultará sumamente útil para el logro de objetivos.

De iguama, utilizar una metáfora del sistema que ayude al equipo de desarrollo a comprenderlo mejor y a utilizar nombres de clases y variables que expresen, de manera adecuada, lo que contienen y lo que realizan, facilitará el trabajo de todo el personal participante.

Las tarjetas CRC (Clase, Responsabilidades, Colaboración) también ayudarán al equipo a definir actividades durante el diseño del sistema. Cada tarjeta representa una clase en la programación orientada a objetos, y define sus responsabilidades y las colaboraciones con otras clases.

Programación

El grupo de desarrollo deberá ser pequeño (mínimo dos programadores y máximo 12, y solamente en aquellos casos en los que la aplicación sea muy compleja, se necesitarán 30 programadores), y tendrá que incluir, además, al administrador del proyecto y al cliente.

Los programadores deben trabajar en pareja para propiciar el intercambio de ideas; de igual forma, se recomienda dejar para el último la optimización del código y utilizar estándares para la codificación, como la indentación en las estructuras de control.

Es importante considerar que la integración de las diferentes piezas del software en un producto, evitará confusiones entre los programadores, que podría tener como resultado un software fragmentado y difícil de unir en una sola pieza final.

Utilizar la figura de propiedad intelectual colectiva del producto final, motivará a los integrantes del proyecto a la propuesta de nuevas y mejores ideas.

Pruebas

Finalmente, en el periodo de pruebas de aceptación o de caja negra se definirán las entradas del sistema y los resultados correspondientes a dichas entradas. Se recomienda automatizar las pruebas para que el sistema pueda ser probado varias veces; para ello, se pueden utilizar “Ambientes de Prueba” (Unit testing frameworks). Un ejemplo de ambientes de prueba es el JUnit para el caso de Java (www.junit.org/index.htm). Otros ambientes de prueba para lenguajes como C, C++, JavaScript, XML y servicios Web, pueden encontrarse en www.xprogramming.com/software.htm

Inicio | Contacto |