Desarrollo

Historia y fundamentos de la ingenieria de software

La historia del desarrollo de software puede entenderse como la búsqueda constante de mejores formas de afrontar un problema que apareció casi al mismo tiempo que los propios ordenadores: construir sistemas cada vez más grandes y complejos sin perder el control sobre ellos. En los primeros años de la informática, programar consistía principalmente en conseguir que una máquina ejecutara correctamente una serie de instrucciones. A medida que los sistemas crecieron, esa visión dejó de ser suficiente, porque ya no bastaba con conseguir que el código funcionara: también era necesario encontrar formas sistemáticas de organizar, desarrollar y mantener sistemas cada vez más complejos.

Las tres categorías de estructuras de una arquitectura de software

Cuando empecé a estudiar arquitectura de software, una de las cosas que más me costaba era entender qué significaba exactamente cada una de las cajas que aparecían en los diagramas. Una caja podía representar un módulo, un componente, un servicio, un proceso o incluso un servidor. Con las flechas ocurría algo parecido: podían representar una dependencia, una llamada, un mensaje o una relación entre el software y la infraestructura.

Después de leer Software Architecture in Practice, de Len Bass, Paul Clements y Rick Kazman, encontré una clasificación que me resulta bastante útil para poner un poco de orden en todo esto. Los autores hablan de tres categorías de estructuras arquitectónicas: estructuras de módulos, estructuras de componentes y conectores y estructuras de asignación.

Notas personales del proyecto

En ocasiones podemos disponer de una buena documentación, una wiki del proyecto o cualquier plataforma de colaboración que nos permita consultar y compartir información técnica, configuraciones, procesos de gestión… Pero seamos sinceros, documentar no es lo que más nos gusta a los ingenieros de desarrollo de software y estas opciones no siempre están disponibles para nosotros. Por otro lado, es posible que quieras disponer de algunas notas personales, scripts de automatización o incluso configuraciones personales para el proyecto donde estás colaborando.