Apunte (Metodologias Avanzadas)
Apunte (Metodologias Avanzadas)
Apunte (Metodologias Avanzadas)
Definición de software
Se pueden encontrar varias definiciones del software:
El software transforma los datos de modo que puedan ser más útiles en un contexto local y a su
vez, da mecanismos para distribuirla.
Estas preocupaciones llevaron a la industria en una situación de crisis, la llamada “crisis del
software”, lo cual dio lugar a la adopción de la ingeniería de software. En esta materia nos
enfocamos en las metodologías de esta ingeniería.
CHIGAL, LAUTARO 1
APUNTE METODOLOGÍAS AVANZADAS
Esta curva se puede contrastar con la curva de desgaste del hardware, que presenta una
alta tasa de fallas en su infancia que luego se corrigen, pero que con el tiempo y la
deterioración de los componentes físicos (debido a la suciedad, el abuso, o las
temperaturas extremas, por ejemplo), se comienza a desgastar.
Una actividad busca lograr un objetivo amplio independientemente del dominio, como
por ejemplo el análisis, que es una actividad obligatoria, pero se puede realizar de varias
maneras.
Una acción es un conjunto de tareas que producen un producto de trabajo, están dentro
de las actividades, como, por ejemplo, el modelado de los casos de uso.
Dentro de las actividades hay tareas que se centran en un objetivo pequeño, pero bien
definido, como la realización de una prueba unitaria.
CHIGAL, LAUTARO 2
APUNTE METODOLOGÍAS AVANZADAS
Para muchos proyectos de software, las actividades estructurales se aplican en forma iterativa
a medida que avanza el proyecto. Es decir, se ejecutan a través de cierto número de repeticiones
del proyecto. Cada iteración produce un incremento del software que da a los participantes un
subconjunto de características y funcionalidad generales del software. Conforme se produce
cada incremento, el software se hace más y más completo.
Actividades sombrilla
Las actividades estructurales del proceso de ingeniería de software son complementadas por
cierto número de actividades sombrilla. Estas se aplican a lo largo de un proyecto de software
y ayudan al equipo que lo lleva a cabo a administrar y controlar el avance, la calidad, el cambio
y el riesgo. Son las siguientes:
Seguimiento y control del proyecto de software: permite que el equipo evalúe el progreso
comparándolo con el plan del proyecto y tome cualquier acción necesaria para
apegarse a la programación de actividades.
Administración del riesgo: evalúa los riesgos que puedan afectar el resultado del
proyecto o la calidad del producto.
Aseguramiento de la calidad del software: define y ejecuta las actividades requeridas
para garantizar la calidad del software.
Revisiones técnicas: evalúa los productos del trabajo de la ingeniería de software a fin
de descubrir y eliminar errores antes de que se propaguen a la siguiente actividad.
CHIGAL, LAUTARO 3
APUNTE METODOLOGÍAS AVANZADAS
Medición: define y reúne mediciones del proceso, proyecto y producto para ayudar al
equipo a entregar el software que satisfaga las necesidades de los participantes.
Administración de la configuración del software: administra los efectos del cambio a lo
largo del proceso del software.
Administración de la reutilización: define criterios para volver a usar el producto del
trabajo y establece mecanismos para obtener componentes reutilizables.
Preparación y producción del producto del trabajo: agrupa las actividades requeridas para
crear productos del trabajo, tales como modelos, documentos, registros, formatos y
listas.
Se define proceso del software como una estructura para las actividades, acciones y tareas que
se requieren a fin de construir software de alta calidad.
CHIGAL, LAUTARO 4
APUNTE METODOLOGÍAS AVANZADAS
Flujo de proceso
Como se dijo antes, una estructura general para la ingeniería de software define cinco
actividades estructurales. Además, a lo largo de todo el proceso se aplica un conjunto de
actividades sombrilla.
Un aspecto importante dentro del proceso del software es el flujo del proceso que describe la
manera en que están organizadas las actividades estructurales y las acciones y tareas que
ocurren dentro de cada una con respecto de la secuencia y el tiempo.
Un flujo de proceso lineal ejecuta cada una de las cinco actividades estructurales en secuencia,
comenzando por la comunicación y terminando con el despliegue.
Un flujo de proceso iterativo repite una o más de las actividades antes de pasar a la siguiente.
Un flujo de proceso evolutivo realiza las actividades en forma “circular”. A través de las cinco
actividades, cada circuito lleva a una versión más completa del software.
Un flujo de proceso paralelo ejecuta una o más actividades en paralelo con otras.
CHIGAL, LAUTARO 5
APUNTE METODOLOGÍAS AVANZADAS
Modelos de proceso
Modelo de cascada
El modelo de la cascada sugiere un enfoque sistemático y secuencial para el desarrollo del
software, que comienza con la especificación de los requerimientos por parte del cliente y
avanza a través de la planeación, modelado, construcción y despliegue, para concluir con el
apoyo del software terminado.
Se le llama así debido a que se divide en varias etapas, en las cuales la salida de una es una
entrada de la siguiente etapa. Esto conlleva varios problemas en la realidad, debido a que en
ciertas fases se puede llegar a tener que iniciar todo el proceso desde el principio. Cuanto más
tarde se detecta un error, mayor será el costo de repararlo. Además, se suele llegar a ciertos
estados de bloqueo, en donde una actividad no puede empezar sin que termine la anterior, lo
cual es una pérdida substancial de tiempo. Esto también implica que el cliente no podrá ver una
versión funcional del sistema en mucho tiempo, por lo que tiene que ser paciente.
Es similar al modelo de cascada, pero con la diferencia que se subdivide en partes que se
desarrollan en paralelo, es decir, concurrentemente. El producto de cada “mini-cascada” se
acopla a los productos anteriores. Esto además se planea de forma que se pueda administrar
los riesgos técnicos.
CHIGAL, LAUTARO 6
APUNTE METODOLOGÍAS AVANZADAS
Los modelos evolutivos son iterativos. Se caracterizan por la manera en la que permiten
desarrollar versiones cada vez más completas del software.
Prototipado
El prototipado no es una metodología en sí misma, sino una técnica complementaria.
1. Se reúne con otros participantes para definir los objetivos generales del software.
2. Identifica los requerimientos que conozca y detecta las áreas en las que es
imprescindible una mayor definición.
3. Se planea rápidamente una iteración para hacer el prototipo y se lleva a cabo el
modelado (en forma de “diseño rápido”). Éste se centra en la representación de
aquellos aspectos del software que serán visibles para los usuarios finales.
4. El diseño rápido lleva a la construcción de un prototipo que es evaluado por los
participantes que dan retroalimentación para mejorar los requerimientos.
El prototipado sirve para disminuir la brecha entre la expectativa del cliente y el desarrollo del
software, pero no son parte del software en sí.
El modelo espiral
El modelo espiral es un modelo evolutivo del proceso del software y se acopla con la naturaleza
iterativa de hacer prototipos con los aspectos controlados y sistémicos del modelo de cascada.
Con el empleo del modelo espiral, el software se desarrolla en una serie de entregas evolutivas.
Durante las primeras iteraciones, lo que se entrega puede ser un modelo o prototipo. En las
CHIGAL, LAUTARO 7
APUNTE METODOLOGÍAS AVANZADAS
iteraciones posteriores se producen versiones cada vez más completas del sistema cuya
ingeniería se está haciendo.
El proceso unificado
El proceso unificado es un marco de desarrollo de software iterativo e incremental. Trata de
reunir los mejores rasgos y características de los procesos de software en una única
metodología. Orientada a grandes proyectos.
Es manejado por casos de uso. Se parte desde los casos de uso ya que sirven para
capturar los requerimientos del sistema, y no sólo eso, estos también se mantienen
como guía a seguir durante casi todo el ciclo de vida.
Centrado en la arquitectura, es decir, la estructura del sistema en sí (si está distribuido,
centralizado, si utiliza Java con algún framework, etc.).
Iterativo e incremental. El ciclo de vida se divide en fases, y cada fase está dividida en
iteraciones.
CHIGAL, LAUTARO 8
APUNTE METODOLOGÍAS AVANZADAS
describen por medio de un conjunto de casos de uso preliminares que detallan las
características y funciones que desea cada clase principal de usuarios.
La fase de elaboración incluye las actividades de comunicación y modelado del modelo general
del proceso. Esto mejora y amplía los casos de uso preliminares desarrollados y aumenta la
representación de la arquitectura para incluir cinco puntos de vista distintos del software: los
modelos del caso de uso, de requerimientos, del diseño, de la implementación y del despliegue.
La fase de producción coincide con la actividad de despliegue del proceso general. Durante
esta fase, se vigila el uso que se da al software, se brinda apoyo para el ambiente de operación
(infraestructura) y se reportan defectos y solicitudes de cambio para su evaluación.
Es probable que al mismo tiempo que se llevan a cabo las fases de construcción, transición y
producción, comience el trabajo sobre el siguiente incremento del software. Esto significa que
las cinco fases del PU no ocurren en secuencia, sino que concurren en forma escalonada.
Disciplinas
Las disciplinas son un conjunto de actividades relacionadas (flujos de trabajo) vinculadas a un
área específica dentro del proyecto total. Las más importantes son: requerimientos, análisis,
diseño, codificación y prueba.
CHIGAL, LAUTARO 9
APUNTE METODOLOGÍAS AVANZADAS
Cada disciplina está asociada con un conjunto de modelos que desarrollan, y estos son los
resultados de cada disciplina (requerimientos: modelo de casos de uso, por ejemplo). Estos
modelos están compuestos por artefactos.
Características
Los procesos de desarrollo del software rápido se diseñan para producir rápidamente un
software útil. El software no se desarrolla como una sola unidad, sino como una serie de
incrementos, y cada uno de ellos incluye una nueva funcionalidad del sistema. Aun cuando
existen muchos enfoques para el desarrollo de software rápido, comparten algunas
características fundamentales:
CHIGAL, LAUTARO 10
APUNTE METODOLOGÍAS AVANZADAS
Metodologías ágiles
La insatisfacción con los gastos involucrados en los modelos de diseño de software originales
llevó a la creación de los métodos ágiles. Estos métodos:
La filosofía detrás de los métodos ágiles se refleja en el manifiesto ágil, que acordaron muchos
de los desarrolladores líderes de estos métodos. Este manifiesto afirma:
CHIGAL, LAUTARO 11
APUNTE METODOLOGÍAS AVANZADAS
Principios de la agilidad
Aplicabilidad
Las metodologías ágiles no son para todos, pero podemos identificar situaciones en las que
pueden servir:
Problemas
En la práctica, los principios que subyacen a los métodos ágiles son a veces difíciles de cumplir:
Puede ser difícil mantener el interés de los clientes que participan en el proceso.
Los miembros del equipo pueden ser inadecuados para la intensa participación que
caracteriza a los métodos ágiles.
La priorización de cambios puede ser difícil cuando hay múltiples partes interesadas, es
decir, varios stakeholders con opiniones diferentes.
Mantener la simplicidad requiere trabajo extra. Bajo la presión de fechas de entrega, es
posible que no haya tiempo para realizar las simplificaciones deseables al sistema.
Muchas organizaciones pasan años cambiando su cultura, de tal modo que los procesos
se definan y continúen. Para ellas, resulta difícil moverse hacia un modelo de trabajo
donde los procesos sean informales y estén definidos por equipos de desarrollo.
Otro problema ocurre cuando el cliente acude a una organización externa para el desarrollo del
sistema. Por lo general, el documento de requerimientos del software forma parte del contrato
entre el cliente y el proveedor. Como la especificación incremental es inherente en los métodos
ágiles, quizá sea difícil elaborar contratos para este tipo de desarrollo.
CHIGAL, LAUTARO 12
APUNTE METODOLOGÍAS AVANZADAS
El mantenimiento
Una enorme cantidad de esfuerzo en ingeniería de software se usa en el mantenimiento y la
evolución de los sistemas de software existentes, por lo que las organizaciones gastan más en
mantener el software existente que el desarrollo de software nuevo debido a sus altos costos.
Debido a esto, los métodos ágiles tienen que respaldar el mantenimiento y el desarrollo
original.
Se presentan entonces dos preguntas que deberían considerarse junto con los métodos y el
mantenimiento ágiles:
¿Los sistemas que se desarrollan usando un enfoque ágil se mantienen, a pesar del énfasis
en el proceso de desarrollo de minimizar la documentación formal?
¿Los métodos ágiles pueden usarse con efectividad para evolucionar un sistema como
respuesta a requerimientos de cambio por parte del cliente?
CHIGAL, LAUTARO 13
APUNTE METODOLOGÍAS AVANZADAS
¿Es importante tener una especificación y un diseño muy detallados antes de pasar a la
implementación? Si es así, probablemente conviene un enfoque planificado.
¿Es una estrategia de entrega incremental, donde se entrega el software a los clientes y
obtiene una respuesta rápida de ellos? De ser así, es útil un enfoque ágil.
¿Qué tan grande es el sistema que se está desarrollando? Los métodos ágiles son más
efectivos cuando el sistema se diseña con un pequeño equipo. Esto sería imposible para
sistemas más grandes que precisan equipos más amplios, en este caso, conviene un
enfoque planificado.
¿Qué tipo de sistema se desarrollará? Los sistemas que demandan mucho análisis antes
de la implementación, por lo general, necesitan un diseño bastante detallado para
realizar este análisis. En tales circunstancias, quizá sea mejor un enfoque basado en un
plan.
¿Cuál es la expectativa de duración del sistema? Los sistemas con lapsos de vida
prolongados podrían requerir más documentación de diseño, para comunicar al equipo
de apoyo los propósitos originales de los desarrolladores del sistema, y los métodos
ágiles no contemplan tanta documentación.
¿Qué tecnologías están disponibles para el soporte del desarrollo del sistema? Los
métodos ágiles se auxilian a menudo de buenas herramientas para seguir la pista de un
diseño en evolución.
¿Cómo está organizado el equipo de desarrollo? Si el equipo de desarrollo está
distribuido, o si parte del desarrollo se subcontrata, entonces tal vez se requiera
elaborar documentos de diseño para comunicarse a través de los equipos de desarrollo.
Quizá se necesite planear por adelantado cuáles son.
¿Existen aspectos de la cultura organizacional que pueden afectar el desarrollo del
sistema? Las organizaciones de ingeniería tradicionales presentan una cultura de
desarrollo basada en un plan, pues es una norma en ingeniería, y esto requiere de
mucha documentación que los métodos ágiles no plantean.
¿Cuán bueno son los diseñadores y programadores en el equipo de desarrollo? Se
argumenta en ocasiones que los métodos ágiles requieren niveles de habilidad
superiores a los enfoques basados en un plan, en que los programadores simplemente
traducen un diseño detallado en un código.
¿El sistema está sujeto a regulación externa? Si es así, tal vez se le requerirá
documentación detallada como parte del sistema de seguridad.
Programación extrema
La programación extrema (XP) es probablemente la metodología ágil más difundida. Toma un
enfoque “extremo” al desarrollo iterativo:
CHIGAL, LAUTARO 14
APUNTE METODOLOGÍAS AVANZADAS
Ciclo de vida de XP
En la programación extrema, los requerimientos se expresan como escenarios (llamados
historias de usuario), que se implementan directamente como una serie de tareas. Los
programadores trabajan en pares y antes de escribir el código desarrollan pruebas para
cada tarea. Todas las pruebas deben ejecutarse con éxito una vez que el nuevo código se
integre en el sistema. Entre los lanzamientos del sistema existe un breve lapso.
CHIGAL, LAUTARO 15
APUNTE METODOLOGÍAS AVANZADAS
Prácticas del XP
XP y el cambio
Un precepto fundamental de la ingeniería de software tradicional es que se tiene que diseñar
para cambiar. Esto es, deben anticiparse cambios futuros al software y diseñarlo de manera que
dichos cambios se implementen con facilidad. Sin embargo, la programación extrema descartó
este principio basada en el hecho de que al diseñar para el cambio con frecuencia se desperdicia
esfuerzo. No vale la pena gastar tiempo en adicionar generalidad a un programa para enfrentar
el cambio. Los cambios anticipados casi nunca se materializan y en realidad pueden hacerse
peticiones de cambio diametralmente opuestas. Por lo tanto, el enfoque XP acepta que los
cambios sucederán y cuando éstos ocurran realmente se reorganizará el software.
Modelado de sistemas
El modelado de sistemas es el proceso para desarrollar modelos abstractos de un sistema,
donde cada modelo presenta una visión o perspectiva diferente de dicho sistema. En general,
es un medio para representar el sistema usando algún tipo de notación gráfica, que casi siempre
se basa en notaciones en el Lenguaje de Modelado Unificado (UML).
CHIGAL, LAUTARO 16
APUNTE METODOLOGÍAS AVANZADAS
Los modelos se usan durante el proceso de ingeniería de requerimientos para ayudar a derivar
los requerimientos de un sistema, durante el proceso de diseño para describir el sistema a los
ingenieros que implementan el sistema, y después de la implementación para documentar la
estructura y la operación del sistema.
Modelos de sistemas actual y nuevo
Es posible desarrollar modelos tanto del sistema existente como del sistema a diseñar:
Perspectivas de un sistema
El aspecto más importante de un modelo del sistema es que deja fuera los detalles. Un modelo
es una abstracción del sistema a estudiar, y no una representación alternativa de dicho sistema.
Una representación de un sistema debe mantener toda la información sobre la entidad a
representar.
CHIGAL, LAUTARO 17
APUNTE METODOLOGÍAS AVANZADAS
1. Como medio para facilitar la discusión sobre un sistema existente o propuesto. Se pueden
utilizar modelos incompletos o incorrectos si el objetivo es servir de base para la
discusión.
2. Como una forma de documentar un sistema existente. Los modelos deben ser
representaciones correctas, pero no necesariamente completos.
3. Como una descripción detallada del sistema que sirve para generar una implementación
del sistema. Los modelos tienen que ser completos y correctos, ya que se usan como la
base para generar el código fuente del sistema.
Modelo de contexto
Los modelos de contexto se utilizan para ilustrar el contexto de operación de un sistema,
mostrando que se encuentra fuera de los límites del sistema. Esto implica trabajar con los
participantes del sistema para determinar cuál funcionalidad se incluirá en el sistema y cuál la
ofrece el entorno del sistema, quizás algunas actividades se beneficien de ser automatizadas y
otras no.
En algunos casos, la frontera entre un sistema y su entorno es relativamente clara, pero esto no
siempre es así. Los aspectos sociales y organizacionales pueden afectar la decisión de donde
colocar los límites del sistema considerando factores no técnicos como, por ejemplo, colocarlo
de modo que no se deba consultar a un administrador difícil de encontrar. Se puede decir que
definir un límite del sistema es un juicio político, puede incluso haber presiones para desarrollar
limites que incremente la carga de trabajo de diferentes partes de la organización.
Perspectiva de procesos
Los modelos de contexto muestran que el entorno incluye varios sistemas automatizados, pero
no presentan los tipos de relaciones entre los sistemas en el entorno y el sistema que se
especifica. Por consiguiente, los modelos de contexto simples se usan junto con otros modelos,
CHIGAL, LAUTARO 18
APUNTE METODOLOGÍAS AVANZADAS
como los modelos de proceso empresarial. Éstos describen procesos humanos y automatizados
que se usan en sistemas particulares de software.
Las flechas representan el flujo de trabajo de una actividad a otra. Una barra sólida se emplea
para indicar coordinación de actividades. Cuando el flujo de más de una actividad se dirige a
una barra sólida, entonces todas esas actividades deben completarse antes del posible avance.
Cuando el flujo de una barra sólida conduzca a algunas actividades, éstas pueden ejecutarse en
forma paralela.
Modelos de interacción
El modelado de interacción del usuario es importante, pues ayuda a identificar los
requerimientos del usuario. El modelado de la interacción sistema a sistema destaca los
problemas de comunicación que se lleguen a presentar. El modelado de interacción de
componentes ayuda a entender si es probable que una estructura de un sistema propuesto
obtenga el rendimiento y la confiabilidad requeridos por el sistema.
Hay dos enfoques relacionados al modelado de la interacción en UML, los diagramas de caso de
uso y de secuencia.
Cada caso de uso representa una tarea discreta que implica interacción externa con un sistema
y brindan un panorama bastante sencillo de una interacción, de modo que se tiene que ofrecer
más detalle de otra manera para entender lo que está implicado. Este detalle puede ser una
CHIGAL, LAUTARO 19
APUNTE METODOLOGÍAS AVANZADAS
Diagramas de secuencia
Los diagramas de secuencia en el UML se usan principalmente para modelar las interacciones
entre los actores y los objetos en un sistema, así como las interacciones entre los objetos en sí.
Como sugiere su nombre, muestran la sucesión de interacciones que ocurre durante un caso de
uso particular o una instancia de caso de uso.
Modelos estructurales
Los modelos estructurales de software muestran la organización de un sistema, en términos
de los componentes que constituyen dicho sistema y sus relaciones. Los modelos estructurales
son modelos estáticos, que muestran la estructura del diseño del sistema, o modelos
dinámicos, que revelan la organización del sistema cuando se ejecuta.
Diagramas de clase
Los diagramas de clase pueden usarse cuando se desarrolla un modelo de sistema orientado a
objetos para mostrar las clases en un sistema y las asociaciones entre dichas clases. Una clase
de objeto puede considerarse como una definición general de un tipo de objeto de sistema.
Una asociación es un enlace entre clases que indica que existe alguna relación entre estas
clases.
Durante las primeras etapas del proceso de ingeniería del software, los objetos representan
algo en el mundo real, como un paciente, una receta, un médico, etc. Conforme se desarrolla
una implementación, por lo general se necesitan definir los objetos de implementación
adicionales que se usan para dar la funcionalidad requerida del sistema.
Modelos de comportamiento
Los modelos de comportamiento son modelos dinámicos del sistema conforme se ejecutan.
En ellos se muestra lo que sucede o lo que se supone que pasa cuando un sistema responde ante
un estímulo de su entorno. Tales estímulos son de dos tipos:
CHIGAL, LAUTARO 20
APUNTE METODOLOGÍAS AVANZADAS
Los modelos dirigidos por datos están entre los primeros modelos gráficos de software, desde
1978 con la introducción de los diagramas de flujos de datos (DFD), pero UML no soporta estos
diagramas, puesto que originalmente se propusieron y usaron para modelar el procesamiento
de datos.
Sin embargo, como los sistemas dirigidos por datos son tan comunes en los negocios, UML 2.0
introdujo los diagramas de actividad, que son similares a los diagramas de flujo de datos.
En los diagramas de estado UML, los rectángulos redondeados representan estados del
sistema. Pueden incluir una breve descripción de las acciones que se tomarán en dicho estado.
Las flechas etiquetadas representan estímulos que fuerzan una transición de un estado a otro.
Los estados inicial y final se indican círculos rellenos.
CHIGAL, LAUTARO 21
APUNTE METODOLOGÍAS AVANZADAS
Los partidarios de la MDE argumentan que ésta eleva el nivel de abstracción en la ingeniería de
software, pues los ingenieros ya no tienen que preocuparse por detalles del lenguaje de
programación o las especificidades de las plataformas de ejecución.
La MDE tiene sus raíces en la arquitectura dirigida por modelos (MDA, por las siglas de Model-
Driven Architecture). Ambas parecen iguales, pero se considera que la MDE tiene un ámbito más
amplio. La MDA se enfoca en las etapas de diseño e implementación del desarrollo de software,
mientras que la MDE se interesa por todos los aspectos del proceso de ingeniería de software.
Pros y contras
Los principales argumentos a favor y en contra de MDE son:
En favor de la MDE:
o Permite a los ingenieros pensar sobre sistemas en un nivel de abstracción
elevado, sin ocuparse por los detalles de su implementación.
o Reduce la probabilidad de errores, acelera el diseño y el proceso de
implementación, y permite la creación de modelos de aplicación reutilizables,
independientes de la plataforma de aplicación.
o Las implementaciones de sistema pueden generarse para diferentes
plataformas a partir del mismo modelo.
o Para adaptar el sistema a alguna nueva plataforma, sólo es necesario escribir
un traductor para dicha plataforma.
En contra de la MDE:
o No siempre sucede que las abstracciones que soporta el modelo sean las
abstracciones correctas para la implementación.
o Los argumentos para independencia de plataforma sólo son válidos para
sistemas grandes de larga duración, donde las plataformas se vuelven
obsoletas durante el tiempo de vida de un sistema.
o La implementación no es el principal problema: ingeniería de requerimientos,
seguridad y confiabilidad, integración con sistemas heredados, y las pruebas
son más significativos.
o Los ahorros logrados por la generación de códigos pueden ser superados por
los costos de desarrollo de traductores para nuevas plataformas.
CHIGAL, LAUTARO 22
APUNTE METODOLOGÍAS AVANZADAS
Tipos de modelos
El método de MDA recomienda la producción de tres tipos de modelo de sistema abstracto:
Transformaciones de modelos
Las transformaciones entre los modelos planteados pueden definirse y aplicarse
automáticamente con herramientas de software. Esto se ilustra en la figura debajo, que
también muestra un nivel final de transformación automática. Una transformación se aplica al
PSM para generar un código ejecutable que opere en la plataforma de software designada.
Diseño arquitectónico
El diseño arquitectónico se interesa por entender cómo debe organizarse un sistema y
cómo tiene que diseñarse la estructura global del mismo. Es la primera etapa en el proceso de
diseño del software y el enlace crucial entre el diseño y la ingeniería de requerimientos, ya que
identifica los principales componentes estructurales en un sistema y la relación entre ellos. Su
salida consiste en un modelo arquitectónico que describe la forma en que se organiza el sistema
como un conjunto de componentes en comunicación.
CHIGAL, LAUTARO 23
APUNTE METODOLOGÍAS AVANZADAS
Niveles de abstracción
Las arquitecturas de software se diseñan en dos niveles de abstracción:
Los diagramas de bloque presentan una imagen de alto nivel de la estructura del sistema e
incluyen fácilmente a individuos de diferentes disciplinas que intervienen en el proceso de
desarrollo del sistema, pero, estos han sido criticados porque carecen de semántica, no
CHIGAL, LAUTARO 24
APUNTE METODOLOGÍAS AVANZADAS
muestran los tipos de relaciones entre entidades ni las propiedades visibles de las entidades en
la arquitectura.
1. ¿Existe alguna arquitectura de aplicación genérica que actúe como plantilla para el
sistema que se está diseñando?
2. ¿Cómo se distribuirá el sistema?
3. ¿Qué patrones o estilos arquitectónicos pueden usarse?
4. ¿Cuál será el enfoque usado para estructurar el sistema?
5. ¿Cómo se descompondrá el sistema en módulos?
6. ¿Qué estrategia se usará para controlar la operación de los componentes?
7. ¿Cómo se evaluará el diseño arquitectónico?
8. ¿Cómo se documentará la arquitectura del sistema?
Reutilización de arquitectura
Aunque cada sistema de software es único, los sistemas en el mismo dominio de aplicación
tienen normalmente arquitecturas similares que reflejan los conceptos fundamentales del
dominio. Cuando se diseña una arquitectura de sistema, debe decidirse qué tienen en común el
sistema y las clases de aplicación más amplias, con la finalidad de determinar cuánto
conocimiento se puede reutilizar de dichas arquitecturas de aplicación.
CHIGAL, LAUTARO 25
APUNTE METODOLOGÍAS AVANZADAS
Vistas arquitectónicas
Es imposible representar toda la información relevante sobre la arquitectura de un sistema en
un solo modelo arquitectónico, ya que cada uno presenta únicamente una vista o perspectiva
del sistema. Debido a esto, surgen dos cuestiones:
1. ¿Qué vistas o perspectivas son útiles al diseñar y documentar una arquitectura del
sistema?
2. ¿Qué notaciones deben usarse para describir modelos arquitectónicos?
Modelo de vista 4 + 1
El modelo de vista 4 + 1 sugiere que deben existir cuatro vistas arquitectónicas fundamentales,
que se relacionan usando casos de uso o escenarios:
1. Una vista lógica, que indique las abstracciones clave en el sistema como objetos o clases
de objeto.
2. Una vista de proceso, que muestre cómo, en el tiempo de operación, el sistema está
compuesto de procesos en interacción.
3. Una vista de desarrollo, que muestre cómo el software está descompuesto para su
desarrollo.
4. Una vista física, que exponga el hardware del sistema y cómo los componentes de
software se distribuyen a través de los procesadores en el sistema.
5. Otros autores sugieren una vista conceptual (+1), una vista abstracta del sistema que
puede ser la base para descomponer los requerimientos de alto nivel en
especificaciones más detalladas. Se puede relacionar con los casos de uso.
Patrones arquitectónicos
Los patrones arquitectónicos son una forma de presentar, compartir y reutilizar el
conocimiento sobre los sistemas de software. Se pueden considerar como una descripción
abstracta estilizada de buena práctica, que se ensayó y puso a prueba en diferentes sistemas y
entornos.
Estos patrones deben incluir información sobre cuándo es y cuándo no es adecuado usar dicho
patrón, así como sobre las fortalezas y debilidades del patrón.
CHIGAL, LAUTARO 26
APUNTE METODOLOGÍAS AVANZADAS
Patrón MVC
Arquitectura en capas
La arquitectura en capas se utiliza para modelar la interfaz de los subsistemas. Organiza el
sistema en un conjunto de capas (o máquinas abstractas), cada una de las cuales proporciona
un conjunto de servicios.
CHIGAL, LAUTARO 27
APUNTE METODOLOGÍAS AVANZADAS
Diseño e implementación
El diseño y la implementación del software es la etapa del proceso de ingeniería de software
en que se desarrolla un sistema de software ejecutable.
Desarrollar o comprar
Una de las decisiones de implementación más importantes, que se toman en una etapa
inicial de un proyecto de software, consiste en determinar si debe comprar o diseñar el
software de aplicación. Ahora es posible comprar sistemas comerciales (COTS) que se adapten
y personalicen según los requerimientos de los usuarios, y esto puede ser más barato y más
rápido.
Al desarrollarse de esta forma una aplicación, el proceso de diseño se preocupa sobre cómo
usar las características de configuración de dicho sistema, para entregar los requerimientos del
CHIGAL, LAUTARO 28
APUNTE METODOLOGÍAS AVANZADAS
mismo. Por lo general, no se desarrollan modelos de diseño del sistema, como los modelos de
los objetos del sistema y sus interacciones.
Para grandes sistemas desarrollados por diferentes modelos de diseño de grupos son un
mecanismo de comunicación importante.
La comprensión del contexto también le permite establecer los límites del sistema, lo cual
ayuda a decidir sobre las características que se implementarán en el sistema que se va a diseñar,
así como sobre las de otros sistemas asociados.
Los modelos de contexto del sistema y los modelos de interacción presentan vistas
complementarias de las relaciones entre un sistema y su entorno:
Un modelo de contexto del sistema es un modelo estructural, que muestra los otros
sistemas en el entorno del sistema a desarrollar.
Un modelo de interacción es un modelo dinámico que indica la forma en que el sistema
interactúa con su entorno conforme se utiliza.
El modelo del contexto de un sistema puede representarse mediante asociaciones, las cuales
muestran simplemente que existen algunas relaciones entre las entidades que intervienen en
la asociación. Es posible documentar el entorno del sistema con un simple diagrama de bloques,
que manifieste las entidades en el sistema y sus asociaciones.
Al modelar las interacciones de un sistema con su entorno, se debe usar un enfoque abstracto
que no contenga muchos detalles. Una forma de hacerlo es usar un modelo de caso de uso.
CHIGAL, LAUTARO 29
APUNTE METODOLOGÍAS AVANZADAS
Diseño arquitectónico
Se identifican los principales componentes que conforman el sistema y sus interacciones, y
luego organizar los componentes utilizando un patrón arquitectónico, como un modelo en
capas o cliente-servidor.
Hay varias propuestas sobre cómo identificar las clases de objetos en los sistemas
orientados a objetos:
Análisis gramatical.
Detectar entidades tangibles (cosas).
Análisis basado en escenarios.
Modelos de diseño
Los modelos de diseño o sistema muestran los objetos o clases de objetos en un sistema.
También indican las asociaciones y relaciones entre tales entidades. Dichos modelos son el
puente entre los requerimientos y la implementación de un sistema. Deben ser abstractos, de
manera que el detalle innecesario no oculte las relaciones entre ellos y los requerimientos del
sistema. Sin embargo, deben incluir suficiente detalle para que los programadores tomen
decisiones de implementación.
En las primeras fases del proceso de diseño, se considera que existen tres modelos que son
útiles particularmente para agregar detalle a los modelos de caso de uso y arquitectónico:
Especificación de interfaz
Una parte importante de cualquier proceso de diseño es la especificación de las interfaces
entre los componentes en el diseño. Es necesario especificar las interfaces de modo que
los objetos y subsistemas puedan diseñarse en paralelo.
CHIGAL, LAUTARO 30