Conceptos Clave del Desarrollo de Software: Desde la Programación hasta la Arquitectura

Programas Informáticos

Un programa informático es un conjunto de instrucciones que, ejecutadas, realizan tareas en un PC. Al conjunto de programas se le denomina software. Las instrucciones se escriben en un lenguaje de programación y son traducidas al código máquina.

Tipos de Código

  • Código fuente: Es el código en el que nosotros escribimos nuestro programa en la máquina.
  • Código objeto: El código objeto es el código resultante de compilar el código fuente.
  • Código ejecutable: Es el resultado obtenido de enlazar nuestro código con las librerías.

Los lenguajes se dividen en:

  • Compilados: Necesitan ser traducidos por un programa llamado compilador.
  • Interpretados: Son traducidos mientras se ejecutan.

Fases de la Compilación

  1. Análisis lexicográfico: Se leen de manera secuencial todos los caracteres de nuestro código fuente, eliminando toda información superflua.
  2. Análisis sintáctico-semántico: Agrupa todos los componentes léxicos del análisis anterior en forma de frases gramaticales, revisa la coherencia de las frases, si su significado es correcto y si los datos son correctos.
  3. Generación de código intermedio: Se genera una representación intermedia a modo de pseudoensamblador con el objetivo de facilitar la tarea de traducir al código objeto.
  4. Optimización de código: Revisa el código pseudoensamblador optimizándolo para que el código sea más fácil y rápido de interpretar por la máquina.
  5. Generación de código: Genera el código objeto en un código en lenguaje máquina.
  6. Enlazador de librerías: Se enlaza nuestro código objeto con las librerías necesarias, produciendo el código final o código ejecutable.

Fases del Proceso de Desarrollo del Software

Hay más de un modelo: cascada, incremental, evolutivo, en espiral o concurrente.

  1. Análisis de requisitos: Se centra en el “¿QUÉ?”. El desarrollador intenta identificar qué información ha de ser procesada, qué función y rendimiento se desea y qué interfaces van a ser establecidas. El resultado se plasma en el documento ERS (Especificación de Requerimientos del Sistema). Se define un diagrama de clases o de Entidad/Relación.
  2. Diseño y arquitectura: Es el proceso de aplicar distintas técnicas a los procesos con los detalles para permitir su realización física. Se centra en el “¿CÓMO?”. El ingeniero intenta definir cómo han de diseñarse las estructuras de datos, cómo ha de implementarse la función, cómo han de caracterizarse las interfaces, cómo ha de traducirse el diseño en un lenguaje de programación y cómo ha de realizarse la prueba. Se crearán los diagramas de casos de uso y de secuencia. Con estos diagramas y la información necesaria se obtiene el cuaderno de carga.
  3. Programación: Transformar un diseño mediante un lenguaje de programación en un programa. Gracias a las etapas anteriores solo habría que traducir el cuaderno de carga en el lenguaje deseado.
  4. Pruebas: Se comprueba el funcionamiento de cada programa con datos reales o ficticios. Las pruebas buscan confirmar que la codificación ha sido exitosa y el software no contiene errores. Hay dos formas: con personal inexperto o con personal profesional.
  5. Documentación: La documentación que se realiza tiene dos caras: la documentación para el usuario y la documentación para el equipo. La documentación para el usuario muestra información completa y de calidad que ilustre cómo manejar la aplicación (Manual de usuario). La documentación técnica, destinada al equipo, explica el funcionamiento interno del programa, se pretende permitir a un equipo poder entender el programa y modificarlo si es necesario.
  6. Implantación y mantenimiento: Preparar el software para su distribución. Durante la fase de mantenimiento, hay cuatro tipos de cambios:
    • Corrección: Es muy probable que el cliente descubra defectos en el software.
    • Adaptación: Es probable que cambie el entorno original para el que se desarrolló el software, se producen modificaciones en el software para acomodarlo a los cambios.
    • Mejora o ampliaciones: El cliente-usuario puede descubrir funciones que van a producir beneficios. Una pequeña parte consiste en arreglar errores, la mayor parte en extender el sistema para hacer nuevas cosas.
    • Soporte técnico: El software requiere un mantenimiento continuo. Cuando el mantenimiento consiste en una ampliación, el modelo cascada se vuelve cíclico.

Arquitecturas del Software

La arquitectura de software es un conjunto de decisiones que definen a nivel de diseño los componentes computacionales y la interacción entre ellos para garantizar que el proyecto llegue a buen término. Se establecen fundamentos para que un equipo trabaje en una línea común que permita alcanzar los objetivos.

Tiene 3 partes:

  • Una interfaz de usuario: elemento con el que interacciona el usuario.
  • Reglas de negocio: Son las que procesan la información para generar los resultados.
  • Gestión de datos: Se ocupa del almacenamiento y recuperación de la información.

El término “nivel” corresponde a la forma en que las capas lógicas se encuentran distribuidas de forma física.

Las arquitecturas más universales son:

  • Monolítica: El software se estructura en grupos funcionales. Todas las capas en un PC.
  • Cliente-servidor: El software se reparte en dos: Una computadora que solicita información (Cliente) y una computadora más potente que recibe dichas peticiones y las procesa para devolver los datos (Servidor).
  • Arquitectura de 3 niveles: La carga se divide en 3 partes: presentación, cálculo y almacenamiento.

Patrones de Diseño

Ofrecen soluciones a problemas de diseño, facilitan la tarea de diseñar un software correctamente en menos tiempo, ayudan a construir soluciones y facilitan la documentación. Los patrones de diseño establecen los componentes, la funcionalidad y el comportamiento de cada uno.

Hay 4 ámbitos:

  • Creacionales: Definen el modo en el que se construyen los objetos.
  • Estructurales: Establecen las relaciones y organizaciones entre los distintos componentes de nuestro software.
  • De comportamiento: Describen las comunicaciones entre objetos y clases.
  • De interacción: Tienen por objetivo definir diferentes directrices para la creación de las interfaces.

Los antipatrones son situaciones o prácticas que no tenemos que hacer o tenemos que evitar al desarrollar un software.

Desarrollo en 3 Capas

Nace de la necesidad de separar la lógica de la aplicación del diseño, separando a su vez los datos de la presentación al usuario.

  • Capa de Presentación: Solo se comunica con la capa de negocio, es la que ve el usuario final en su pantalla, es la que permite la entrada de datos hacia el programa.
  • Capa de Negocio: Alberga los programas de la aplicación, se comunica con la capa de presentación y la de datos, se considera el corazón del software. Su función es aplicar las reglas de negocio para la gestión de datos.
  • Capa de Datos: Es el acceso a datos, tanto para solicitar como para persistir, se comunica con la capa de negocio. Los datos se guardan en una base de datos después de su correcto tratamiento. Una vez guardados se devuelve confirmación o salta un error.

Relación del Software con los Componentes del Sistema

Hay 4 componentes:

  • Dispositivos de entrada: Los que permiten introducir información al PC.
  • Dispositivos de salida: Envían la información del interior del PC al exterior.
  • CPU: La parte más importante, es el cerebro del PC.
  • Memoria principal y secundaria: En la memoria principal se almacenan las instrucciones y los datos que la CPU necesita para ejecutar tareas. La memoria secundaria es el conjunto de componentes electrónicos que almacenan programas y datos.
  • Hardware: Todos los componentes físicos que intervienen en un sistema.
  • Software: Las instrucciones, datos o programas con los cuales opera el PC.

Roles que Participan en el Proceso de Desarrollo del Software

  • Analista de Sistemas: Su objetivo consiste en realizar un estudio del sistema para dirigir el proyecto. Participa en la etapa de análisis.
  • Diseñador de software: Realiza el diseño de la solución que hay que desarrollar. Participa en la etapa de diseño.
  • Analista programador: Aporta una visión general del proyecto más detallada, diseñando una solución más amigable para la codificación y participando en ella. Participa en el diseño y la codificación.
  • Programador: Se encarga de crear el resultado del estudio realizado por el analista y el diseñador. Escribe el código fuente del software. Participa en la codificación.
  • Arquitecto del software: Es la argamasa que cohesiona el proceso de desarrollo. Participa en el análisis, diseño, documentación y explotación.