Arquitectura de Software y Metodologías de desarrollo de Software

La metodología hace referencia al conjunto de procedimientos racionales utilizados para alcanzar un objetivo que requiera habilidades y conocimientos específicos. (Maida & Pacienzia, 2015)

Metodologías de Software

La metodología hace referencia al conjunto de procedimientos racionales utilizados para alcanzar un objetivo que requiera habilidades y conocimientos específicos. (Maida & Pacienzia, 2015)

La metodología es una de las etapas específicas de un trabajo o proyecto que parte de una posición teórica y conlleva a una selección de técnicas concretas o métodos acerca del procedimiento para el cumplimiento de los objetivos. Es el conjunto de métodos que se utilizan en una determinada actividad con el fin de formalizarla y optimizarla. Determina los pasos a seguir y cómo realizarlos para finalizar una tarea. (Maida & Pacienzia, 2015)

Metodología tradicional

Desarrollar un buen software depende de un gran número de actividades y etapas, donde el impacto de elegir la metodología para un equipo en un determinado proyecto es trascendental para el éxito del producto. (Maida & Pacienzia, 2015)

Las metodologías tradicionales son denominadas, a veces, de forma despectiva, como metodologías pesadas. Centran su atención en llevar una documentación exhaustiva de todo el proyecto, la planificación y control de este, en especificaciones precisas de requisitos y modelado y en cumplir con un plan de trabajo, definido todo esto, en la fase inicial del desarrollo del proyecto. Estas metodologías tradicionales imponen una disciplina rigurosa de trabajo sobre el proceso de desarrollo del software, con el fin de conseguir un software más eficiente. Para ello, se hace énfasis en la planificación total de todo el trabajo a realizar y una vez que está todo detallado, comienza el ciclo de desarrollo del producto software. Se centran especialmente en el control del proceso, mediante una rigurosa definición de roles, actividades, artefactos, herramientas y notaciones para el modelado y documentación detallada. Además, las metodologías tradicionales no se adaptan adecuadamente a los cambios, por lo que no son métodos adecuados cuando se trabaja en un entorno, donde los requisitos no pueden predecirse o bien pueden variar. (Maida & Pacienzia, 2015)

Existen los siguientes tipos:

  • Cascada. Es denominado así por la posición de las fases en el desarrollo de esta, que parecen caer en cascada “por gravedad” hacia las siguientes fases. Es el enfoque metodológico que ordena rigurosamente las etapas del proceso para el desarrollo de software, de tal forma que el inicio de cada etapa debe esperar a la finalización de la etapa anterior. Al final de cada etapa, el modelo está diseñado para llevar a cabo una revisión final, que se encarga de determinar si el proyecto está listo para avanzar a la siguiente fase. Este modelo fue el primero en originarse y es la base de todos los demás modelos de ciclo de vida. (Maida & Pacienzia, 2015)
  • Prototyping. Un prototipo es una versión preliminar de un sistema de información con fines de demostración o evaluación. El prototipo de requerimientos es la creación de una implementación parcial de un sistema, para el propósito explícito de aprender sobre los requerimientos del sistema. Un prototipo es construido de una manera rápida tal como sea posible. El prototipo puede ser usado como parte de la fase de requerimientos (determinar requerimientos) o justo antes de la fase de requerimientos (como predecesor de requerimientos). En otro caso, el prototipo puede servir su papel inmediatamente antes de algún o todo el desarrollo incremental en modelos incremental o evolutivo. (Maida & Pacienzia, 2015)
  • Espiral. Toma las ventajas del modelo de desarrollo en cascada y el de prototipos añadiéndole el concepto de análisis de riesgo. (Maida & Pacienzia, 2015)
  • Incremental. Permite construir el proyecto en etapas incrementales en donde cada etapa agrega funcionalidad. Estas etapas, consisten en requerimientos, diseño, codificación, pruebas y entrega. Permite entregar al cliente un producto más rápido en comparación del modelo en cascada. (Maida & Pacienzia, 2015)
  • Entre otros.

Metodologías ágiles

Un modelo de desarrollo ágil, generalmente es un proceso Incremental (entregas frecuentes con ciclos rápidos), también Cooperativo (clientes y desarrolladores trabajan constantemente con una comunicación muy fina y constante), Sencillo (el método es fácil de aprender y modificar para el equipo) y finalmente Adaptativo (capaz de permitir cambios de último momento). Las metodologías ágiles proporcionan una serie de pautas y principios junto a técnicas pragmáticas que hacen que la entrega del proyecto sea menos complicada y más satisfactoria tanto para los clientes como para los equipos de trabajo, evitando de esta manera los caminos burocráticos de las metodologías tradicionales, generando poca documentación y no haciendo uso de métodos formales. (Maida & Pacienzia, 2015)

Estas metodologías ponen de relevancia que la capacidad de respuesta a un cambio es más importante que el seguimiento estricto de un plan. (Maida & Pacienzia, 2015)

Existen los siguientes tipos:

  • SCRUM. Es un proceso en el que se aplican de manera regular un conjunto de buenas prácticas para trabajar colaborativamente, en equipo, y obtener el mejor resultado posible de un proyecto. Estas prácticas se apoyan unas a otras y su selección tiene origen en un estudio de la manera de trabajar de equipos altamente productivos. Podríamos decir que SCRUM se basa en cierto caos controlado pero establece ciertos mecanismos para controlar esta indeterminación, manipular lo impredecible y controlar la flexibilidad. (Maida & Pacienzia, 2015)
  • CRYSTAL. Crystal no es solo una metodología de desarrollo de software ágil, ya que se la considera una familia de metodologías, debido a que se subdivide en varios tipos en función a la cantidad de persona involucradas en el proyecto. Se trata de un conjunto de metodologías para el desarrollo de software caracterizadas por estar centradas en las personas que componen el equipo y la reducción al máximo del número de artefactos producidos. (Maida & Pacienzia, 2015)
  • Kanban. Kanban se basa en la idea de que el trabajo en curso debería limitarse, y sólo deberíamos empezar con algo nuevo cuando un bloque de trabajo anterior haya sido entregado o ha pasado a otra función posterior de la cadena. La metodología Kanban utiliza un mecanismo de control visual para hacer seguimiento del trabajo conforme este viaja a través del flujo de valor. Normalmente, se emplea un panel o pizarra con notas adhesivas o un panel electrónico de tarjetas para gestionar el flujo de trabajo y las asignaciones. Las mejores prácticas apuntan al uso de ambos métodos. (Maida & Pacienzia, 2015)

Arquitectura y Diseño de Software

Expresado de manera simplificada, el desarrollo de un sistema de software puede verse como una transformación hacia la solución técnica de determinada problemática u oportunidad con el fin de resolverla. (Cervantes Meceda, Velasco-Elizondo, & Castro Careaga, 2016)

Durante la transformación, que inicia en el dominio del problema y culmina en el de la solución, se llevan a cabo distintas actividades técnicas: 1) requerimentos, 2) diseño, 3) construcción, 4) pruebas y 5) implantación. (Cervantes Meceda, Velasco-Elizondo, & Castro Careaga, 2016)

La arquitectura de software tiene que ver principalmente con la actividad de diseño del sistema; sin embargo, juega también un rol importante en relación con las demás actividades técnicas. (Cervantes Meceda, Velasco-Elizondo, & Castro Careaga, 2016)

Arquitectura de Software

La arquitectura de software de un sistema es el conjunto de estructuras necesarias para razonar sobre el sistema. Comprende elementos de software, relaciones entre ellos, y propiedades de ambos. (Cervantes Meceda, Velasco-Elizondo, & Castro Careaga, 2016)

Además de ayudar a identificar módulos individuales que permitan llevar a cabo el desarrollo en paralelo de un sistema por parte de un equipo de desarrollo, la arquitectura de software tiene otra importancia especial: la manera en que se estructura un sistema tiene impacto directo sobre la capacidad de este para satisfacer los requerimientos, en particular aquellos que se conocen como atributos de calidad del sistema. (Cervantes Meceda, Velasco-Elizondo, & Castro Careaga, 2016)

Diseño de Software

El diseño arquitectónico representa la estructura de los datos y de los componentes del programa que se requieren para construir un sistema basado en computadora. (Bovet Derpich, 20215)

La arquitectura de software se establece en la fase de diseño y puede conceptualizarse conforme a lo descrito por Roger Pressman “El diseño es prácticamente todo lo que un ingeniero de software desea realizar. Es el espacio donde la creatividad toma forma y donde los requerimientos, reglas del negocio y consideraciones técnicas convergen en la formulación de un producto o sistema. El diseño crea la representación o modelo del software proveyendo detalles acerca de su arquitectura necesaria para la implementación del sistema”. (Universidad Abierta y a Distancia de México, 2023)

Las actividades o pasos que conllevan a la obtención de un diseño de arquitectura de software forman parte de la fase de diseño de cualquier metodología de desarrollo y existen principios y técnicas en la literatura de la Ingeniería de Software que permitirán obtener un buen resultado de diseño. (Universidad Abierta y a Distancia de México, 2023)

Algunas técnicas esenciales del diseño son las siguientes:

  • División y conquista: Descomposición del problema.
  • Abstracción: Representación de las características esenciales.
  • Encapsulamiento: Ocultamiento de los detalles de implementación.
  • Modularización: Descomposición del sistema en módulos.
  • Acoplamiento y cohesión: Interdependencia entre módulos y relación de las tareas realizadas en un mismo módulo.
  • Estructura jerárquica.
  • Separación de políticas de la ejecución de algoritmos.
  • Separación de interfaces de sus implementaciones.
    (Universidad Abierta y a Distancia de México, 2023)

Entre los principios que deben considerarse en el diseño de software se consideran indispensables:

  • El diseño debe constituir una guía comprensible y legible para el equipo de desarrollo, de pruebas y posteriormente, de soporte.
  • Debe proveer una imagen completa del software, que direccione adecuadamente datos, funcionalidad y relaciones entre los dominios desde la perspectiva de implementación.
  • Considerar varios enfoques en base a los requerimientos definidos en la fase de análisis.
  • El diseño debe estructurarse de tal manera que sea adaptable al cambio.
  • Implementar un control de calidad durante el proceso de creación, no al final del diseño, lo cual reduce el tiempo de desarrollo.
  • Revisiones formales periódicas para minimizar errores conceptuales.
  • La consistencia del diseño y la uniformidad se tornan cruciales para sistemas de gran tamaño.
  • (Universidad Abierta y a Distancia de México, 2023)

More Posts

Diseño de software con metodologías ágiles

Extreme Programming y TDD

Test Driven Development es principalmente una metodología de desarrollo de software. La misión principal de TDD es dirigir la arquitectura, el diseño y la codificación del software.

Leer más »
Arquitectura en capas y orientado a objetos

Patrones arquitectónicos

Un patrón arquitectónico es una solución general y reutilizable a un problema común en la arquitectura de software dentro de un contexto dado.

Leer más »
Arquitectura en capas y orientado a objetos

Arquitectura en capas

Los primeros sistemas de cómputo existentes se encontraban aislados unos de otros y contaban con sus propios dispositivos propios de E/S, y los programas tenían acceso a la computadora únicamente a través de dichos dispositivos; con la llegada y auge de las redes de comunicaciones el panorama ha cambiado

Leer más »