Académique Documents
Professionnel Documents
Culture Documents
Software
El Software y la Ingeniería de
Software
CONTENIDO
2
Contenido
Contenido
Contenido
METODOLOGÍA
6
Distribución de los temas por
semana
• Semana 1 – La Ingeniería de Software
• Semana 2 – Ingeniería de Procesos de Software
• Semanas 3 y 4 – Ingeniería de Requisitos
• Semana 5 – Examen Primer Parcial
• Semanas 6 y 7 – Ingeniería de Diseño
• Semana 8 – Garantía de la Calidad de Software
• Semana 9 – Examen Segundo Parcial
• Semanas 10 y 11 – Técnicas de Pruebas del Software
• Semana 12 – Gestión y Estimación de Proyectos de
Software
• Semana 13 – Métricas de Proyectos
• Semana 14 – Examen Final
Actividades
• Práctica 1 - El Software y la Ingeniería de Software (3 puntos)
• Práctica 2 - Ingeniería de Procesos de Software (3 puntos)
• Práctica 3 - Ingeniería de Requisitos (Parte I) (3 puntos)
• Práctica 4 - Ingeniería de Requisitos (Parte II) (3 puntos)
• Práctica 5 - Ingeniería del Diseño (Parte I) (3 puntos)
• Práctica 6 - Ingeniería del Diseño (Parte II) (3 puntos)
• Práctica 7 - Garantía de la Calidad de Software (3 puntos)
• Práctica 8 - Técnicas de Pruebas del Software (Parte I) (3 puntos)
• Práctica 9 - Técnicas de Pruebas del Software (Parte II) (3 puntos)
• Práctica 10 - Gestión y Estimación Proyectos de Software (4 puntos)
• Práctica 11 - Métricas de Software (4 puntos)
• Exposiciones (5 puntos)
EVALUACIÓN
9
Resumen
• Prácticas: 40 puntos
• Exámenes: 60 puntos
Profe, deme esos dos
puntitos para la C, a favol…
12
¿CONOCIMIENTOS PREVIOS?
14
¿EXPECTATIVAS?
15
Es el conjunto de los programas de cómputo,
procedimientos, reglas, documentación y datos
asociados, que forman parte de las operaciones
de un sistema de computación.
Se construye a
la medida; se
construye por
componentes
El software
no se
desgasta pero
sí se deteriora
El software se
desarrolla o modifica
con intelecto; no se
manufactura
Software Heredado
• Programas viejos - Longevidad
• Múltiples modificaciones
• Soporte de las funciones centrales de negocios –
Críticos
• Mala calidad
• No son susceptibles de extenderse
• Código confuso
• Documentación mala o inexistente
• Casos y resultados de prueba que nunca se archivaron
• Historial de cambio mal administrado
Por qué evoluciona el Software?
• Comunicación
• Planeación
• Modelado
• Construcción
• Despliegue
Principios generales
• Dar valor a sus usuarios
• Todo diseño debe ser tan simple como sea
posible, pero no más
• Una visión clara es esencial para el éxito de un
proyecto de software
• Siempre establezca especificaciones, diseñe e
implemente con la seguridad de que alguien más
tendrá que entender lo que usted haga
• Un sistema con larga vida útil tiene más valor
• Planee por anticipado la reutilización
• ¡Piense!
Mitos del Software
Conceptos
¿Qué es la práctica de la
ingeniería de software?
Principios
Métodos
Herramientas
Principios Fundamentales
• Nivel del proceso
− Establecen un fundamento filosófico que guía al equipo de software
cuando:
Realiza actividades estructurales y actividades sombrilla
Navega por el flujo del proceso
Elabora un conjunto de productos del trabajo de la ingeniería de software
• Nivel de la práctica
− Definen un conjunto de valores y reglas que sirven como guía cuando:
Se analiza un problema
Se diseña una solución
Se implementa y prueba ésta
Se entrega el software a la comunidad de usuarios
Principios que guían el proceso
• Ser ágil
− Son los principios básicos del desarrollo ágil los
que deben gobernar el enfoque
− Economía de acción:
Mantener el enfoque técnico tan sencillo como sea
posible
Hacer los productos del trabajo que se generan tan
concisos como se pueda
Tomar las decisiones localmente, siempre que sea
posible
• Centrarse en la calidad
Principios que guían el proceso
• Estar listo para adaptar
– Adapte su enfoque a las restricciones impuestas por el problema, la gente y el proyecto
en sí
• Formar un equipo eficaz
– El objetivo son las personas
– Forme un equipo con organización propia en el que haya confianza y respeto mutuos
• Establecer mecanismos para la comunicación y coordinación
• Administrar el cambio
– Deben establecerse mecanismos para administrar la forma en la que los cambios se
solicitan, evalúan, aprueban e implementan
• Evaluar el riesgo
– Es esencial establecer planes de contingencia
• Crear productos del trabajo que agreguen valor para otros
– Asegúrese de que el producto del trabajo imparte la información necesaria sin
ambigüedades u omisiones
Principios que guían la práctica
• Divide y vencerás
– Separación de entidades, un problema grande es más fácil de resolver si se
divide en un conjunto de elementos
• Entender el uso de la abstracción
– Abstracción: Simplificación de algún elemento complejo de un sistema usado
para comunicar significado en una sola frase
– El objetivo de una abstracción es eliminar la necesidad de comunicar detalles
• Buscar la coherencia
– Principio de coherencia: Sugiere que un contexto familiar hace que el software
sea más fácil de usar. Considerar el aspecto ergonómico
• Centrarse en la transferencia de información
– La información fluye a través de una interfaz
– Debe ponerse atención especial al análisis, diseño, construcción y prueba de
las interfaces
Principios que guían la práctica
• Construir software que tenga modularidad eficaz
– Cada módulo debe centrarse exclusivamente en un aspecto bien delimitado
del sistema
– Cohesivo en su función
– Restringido en el contenido que representa
– Interconectados en forma relativamente sencilla, poco acoplamiento
• Buscar patrones
– Objetivo de los patrones
Crear un cúmulo de bibliografía para resolver problemas recurrentes
Crear un lenguaje compartido
Acumular con éxito el cuerpo de conocimientos que define nuestra comprensión de
las buenas arquitecturas que satisfacen las necesidades de sus usuarios
• Cuando sea posible, representar el problema y su solución desde
varias perspectivas diferentes
• Tener en mente que alguien dará mantenimiento al software
PRINCIPIOS QUE GUÍAN TODA
ACTIVIDAD ESTRUCTURAL
Principios de Escuchar Centrarse en las palabras del hablante en lugar
de formular su respuesta a dichas palabras
comunicación
Si algo no está claro, pregunte para aclararlo,
pero evite las interrupciones constantes
Es mejor la comunicación
cara a cara
PRINCIPIOS QUE GUÍAN TODA
ACTIVIDAD ESTRUCTURAL
Principios de Tomar notas y documentar las decisiones
comunicación
Perseguir la colaboración
Permanecer centrado; hacer módulos con Abandonar un tema sólo después de que se
la discusión haya resuelto
C de Software T
l é
i c
e n
n i
t Características
c
e o
Principios de Modelado
PRINCIPIOS QUE GUÍAN TODA
ACTIVIDAD ESTRUCTURAL
Dominio
de la Arquitectura
Información
Modelos
Modelos
de de
Requerimientos
Dominio Dominio Interfaz de
Diseño Nivel de
de
Comportamiento Funcional usuario componente
Principios de Modelado
PRINCIPIOS QUE GUÍAN TODA
ACTIVIDAD ESTRUCTURAL
Principios de modelado
• El equipo de software tiene como objetivo principal elaborar software, no crear
modelos
• Viajar ligero, no crear más modelos de los necesarios
• Tratar de producir el modelo más sencillo que describa al problema o al software
• Construir modelos susceptibles al cambio
• Ser capaz de enunciar un propósito explícito para cada modelo que se cree
• Adaptar los modelos que se desarrollan al sistema en cuestión
• Tratar de construir modelos útiles, pero olvidarse de elaborar modelos perfectos
• No ser dogmático respecto de la sintaxis del modelo. Si se tiene éxito para
comunicar contenido, la representación es secundaria
• Si su instinto dice que un modelo no es el correcto a pesar de que se vea bien en
el papel, hay razones para estar preocupado
• Obtener retroalimentación tan pronto como sea posible
PRINCIPIOS QUE GUÍAN TODA
ACTIVIDAD ESTRUCTURAL
• Principios de modelado de los Requerimientos
– Debe representarse y entenderse el dominio de información de un problema
Datos que fluyen hacia el sistema
Datos que fluyen fuera del sistema
Almacenamientos de datos que recaban y organizan objetos persistentes de datos
– Deben definirse las funciones que realizará el software
– Debe representarse el comportamiento del software
Interacción con el ambiente externo
Entradas que dan los usuarios finales
Control de los datos efectuado por un sistema externo
Vigilancia de datos reunidos en una red
La arquitectura
del software
PRINCIPIOS QUE GUÍAN TODA
ACTIVIDAD ESTRUCTURAL
• Principios del modelado del diseño (cont.)
– El diseño de los datos es tan importante como el de las funciones de
procesamiento
Ayuda a simplificar el flujo del programa
Hace más fácil el diseño e implementación de componentes de software
Hace más eficiente el procesamiento conjunto
– Las interfaces deben diseñarse con cuidado
– El diseño de la interfaz de usuario debe ajustarse a las necesidades
del usuario final
Debe resaltar la facilidad de uso
– El diseño en el nivel de componentes debe tener independencia
funcional
Cohesiva, centrarse en una y sólo una función o subfunción
PRINCIPIOS QUE GUÍAN TODA
ACTIVIDAD ESTRUCTURAL
• Principios del modelado del diseño (cont.)
– Los componentes deben estar acoplados con holgura entre sí y con el
ambiente externo
El acoplamiento de componentes debe mantenerse tan bajo como sea
razonable
Componentes
Errores
Principios de codificación
• Principios de la prueba (cont.)
– Las pruebas deben comenzar “en lo pequeño” y
avanzar hacia “lo grande”
– No son posibles las pruebas exhaustivas
Principios de construcción
• Entrega
• Apoyo
• Retroalimentación
Actividad del
despliegue
Principios de construcción
Principios de despliegue
• Deben manejarse las expectativas de los clientes
• Debe ensamblarse y probarse el paquete completo que
se entregará
• Antes de entregar el software, debe establecerse un
régimen de apoyo
• Se deben proporcionar a los usuarios finales materiales
de aprendizaje apropiados
• El software defectuoso debe corregirse primero y
después entregarse
COMPRENSIÓN DE LOS
REQUERIMIENTOS
– Especificación
• Documento escrito
• Conjunto de modelos gráficos
• Modelo matemático formal
• Conjunto de escenarios de uso
• Prototipo
Ingeniería de Requerimientos
• Tareas (cont.)
– Validación
• Analiza la especificación a fin de garantizar que
– Todos ellos han sido enunciados sin ambigüedades
– Se detectaron y corrigieron las inconsistencias, las omisiones y los errores
– Los productos del trabajo se presentan conforme a los estándares
establecidos para el proceso, el proyecto y el producto
• El mecanismo principal de validación de los requerimientos es la
revisión técnica
• Actividades
– Identificación de los participantes clave del sistema o
subsistema
– Determinación de las “condiciones para ganar” de los
participantes
– Negociación de las condiciones para ganar de los
participantes a fin de reconciliarlas en un conjunto de
condiciones ganar-ganar para todos los que intervienen
Cuando se revisan los requerimientos,
¿qué preguntas deben plantearse?
• ¿Es coherente con los objetivos generales del sistema o producto?
• ¿Se han especificado en el nivel apropiado de abstracción?
• ¿Es realmente necesario?
• ¿Está acotado y no es ambiguo?
• ¿Hay una fuente clara?
• ¿Hay requerimientos en conflicto con otros?
• ¿Es asequible en el ambiente técnico que albergará el sistema o producto?
• ¿Puede someterse a prueba?
• ¿Refleja de manera apropiada la información, la función y el comportamiento del
sistema que se va a construir?
• ¿Se ha “particionado” en forma que exponga información cada vez más detallada
sobre el sistema?
• ¿Se ha usado el patrón para simplificar el modelo de éstos? ¿Se han validado todos
los patrones de manera apropiada? ¿Son consistentes todos los patrones con los
requerimientos del cliente?
Introducción a la Ingeniería de
Software
Conceptos y principios del análisis
(Parte II)
Modelado de los requerimientos
• Utiliza una combinación de texto y diagramas para
ilustrarlos en forma que sea relativamente fácil de
entender y de revisar para corregir, completar y hacer
congruente.
• Da como resultado:
– La especificación de las características operativas del
software
– Indica la interfaz de éste y otros elementos del sistema
– Establece las restricciones que limitan al software
• Permite al profesional construir sobre los
requerimientos básicos establecidos durante las tareas
de concepción, indagación y negociación
Modelado de los requerimientos
Tipos de modelo:
• Modelos basados en el escenario desde el punto de vista de
distintos “actores” del sistema
• Modelos de datos, ilustran el dominio de información del
problema
• Modelos orientados a clases, representan clases orientadas a
objetos y la manera en la que las clases colaboran para cumplir
con los requerimientos del sistema
• Modelos orientados al flujo, representan los elementos
funcionales del sistema y la manera como transforman los datos
a medida que se avanza a través del sistema
• Modelos de comportamiento, ilustran el modo en el que se
comporta el software como consecuencia de “eventos” externos
Caso de Uso
Modelo E-R
Modelos de Datos
Modelos Orientados a Clase
Diagrama CRC
Diagrama de Estado
Objetivos principales:
• Describir lo que requiere el cliente
La meta
• Encontrar o crear aquellas clases o patrones de análisis que
sean aplicables en lo general, de modo que puedan volverse
a usar
Enfoques del modelado de
requerimientos
• Análisis estructurado, considera que los datos y los procesos
que los transforman son entidades separadas
– Los objetos de datos, se modelan de modo que se definan
sus atributos y relaciones
– Los procesos, se modelan en forma que se muestre cómo
transforman a los datos a medida que los objetos que se
corresponden con ellos fluyen por el sistema
• Excepción
– Describe una situación que ocasiona que el sistema
presente un comportamiento algo distinto
– Debe describirse dentro del caso de uso si el software
la puede detectar y debe manejarla una vez detectada
– ¿Existen casos en los que ocurra alguna “función de
validación” durante este caso de uso?
– ¿Hay casos en los que una función (o actor) de soporte
falle en responder de manera apropiada?
– ¿El mal desempeño del sistema da como resultado
acciones inesperadas o impropias?
Escritura de un caso de uso formal
Excepciones
Disparador • Identifican las
Objetivo en • Identifica el situaciones
contexto evento o detectadas
condición que cuando se
• Identifica el “hace que mejora el caso
alcance general comience el caso de uso
del caso de uso de uso” preliminar
Precondición Escenario
• Describe lo que • Enlista las
se sabe que es acciones
verdadero antes específicas que
de que inicie el requiere el actor,
caso de uso y las respuestas
apropiadas del
sistema
Modelos UML que proporcionan el
caso de uso
• El diagrama de actividad UML
– Representa las acciones y decisiones que
ocurren cuando se realiza cierta función
– Gráfica del flujo de interacción dentro de
un escenario específico
• Rectángulos redondeados para denotar
una función específica del sistema,
• Flechas para representar flujo a través de
éste
• Rombos de decisión para ilustrar una
ramificación de las decisiones
• Líneas continuas para indicar que están
ocurriendo actividades en paralelo
Modelos UML que proporcionan el
caso de uso
• Diagramas de canal
– Representa el flujo de
acciones y decisiones e
indica qué actores
efectúan cada una de
ellas
– Las responsabilidades se
representan con
segmentos paralelos que
dividen el diagrama en
forma vertical
Conceptos de modelado de datos
• Modelo de datos
– Un ingeniero o analista de software define:
• Objetos de datos que se procesan dentro del sistema
• Relación entre ellos
• Otro tipo de información que sea pertinente para las
relaciones
– Diagrama entidad-relación
• Representa los datos que se introducen, almacenan,
transforman y generan dentro de una aplicación
Conceptos de modelado de datos
algo que tiene varias
propiedades o atributos
• Objetos de datos diferentes
Estructuras Cosas
¿Cómo se
manifiestan
las clases?
Ocurrencias
Lugares
o eventos
Unidades
organizacionales Roles
El modelado basado en clases
• ¿Cómo determino si una clase potencial debe, ser una clase
de análisis?
– Información retenida. La clase potencial será útil durante
el análisis sólo si debe recordarse la información sobre ella
para que el sistema pueda funcionar.
– Servicios necesarios. La clase potencial debe tener un
conjunto de operaciones identificables que cambien en
cierta manera el valor de sus atributos
– Atributos múltiples
– Atributos comunes
– Operaciones comunes
– Requerimientos esenciales
El modelado basado en clases
• Especificación de atributos
– Describen una clase que ha sido seleccionada para
incluirse en el modelo de requerimientos
• Definición de las operaciones
– Definen el comportamiento de un objeto
– Se dividen en cuatro categorías principales:
1) Operaciones que manipulan datos en cierta manera
2) Operaciones que realizan un cálculo
3) Operaciones que preguntan sobre el estado de un objeto
4) Operaciones que vigilan un objeto en cuanto a la
ocurrencia de un evento de control
El modelado basado en clases
• Modelado clase-responsabilidad-colaborador
– Proporciona una manera sencilla de identificación
y organización de las clases que son relevantes
para los requerimientos de un sistema o producto
– Responsabilidades, son los atributos y operaciones
relevantes para la clase
– Colaboradores, son aquellas clases que se
requieren para dar a una clase la información
necesaria a fin de completar una responsabilidad
Modelado clase-responsabilidad-
colaborador
• Clases-Categorías
– Clases de entidad, se extraen directamente del
enunciado del problema
– Clases de frontera, se utilizan para crear la interfaz
que el usuario mira y con la que interactúa cuando
utiliza el software. Se diseñan con la
responsabilidad de administrar la forma en la que
se presentan a los usuarios los objetos de entidad
– Clases de controlador, administran una “unidad de
trabajo” de principio a fin
Modelado clase-responsabilidad-
colaborador
• Responsabilidades-Lineamientos
– La inteligencia del sistema debe estar distribuida entre
las clases para enfrentar mejor las necesidades del
problema
– Cada responsabilidad debe enunciarse del modo más
general posible
– La información y el comportamiento relacionado con
ella deben residir dentro de la misma clase
– La información sobre una cosa debe localizarse con
una sola clase, y no distribuirse a través de muchas
– Cuando sea apropiado, las responsabilidades deben
compartirse entre clases relacionadas
Modelado clase-responsabilidad-
colaborador
• Colaboraciones
– Se identifican determinando si una clase puede
cumplir cada responsabilidad
– Relación es-parte-de, todas las clases que forman
parte de una clase agregada
– Relación tiene-conocimiento-de, cuando una clase
debe adquirir información de otra
– Relación depende-de, significa que dos clases
tienen una dependencia que no se determina por
tiene-conocimiento-de ni por es-parte-de
El modelado basado en clases
• Asociaciones y dependencias
– Asociación, define una relación entre clases
– Multiplicidad, define cuántas de una clase se
relacionan con cuántas de otra clase
– Relación de dependencia, una clase cliente depende
de algún modo de la clase servidor
– Estereotipo, “mecanismo extensible” dentro del UML
que permite definir un elemento especial de
modelado con semántica y especialización
determinadas. En UML se representan entre
paréntesis dobles angulares
El modelado basado en clases
• Paquetes de análisis
– Se utiliza para ensamblar un conjunto de
clases relacionadas
– Categorización, se clasifican distintos
elementos del modelo de análisis de
manera que se agrupen en un paquete
al que se da un nombre representativo
– El signo más (suma) que precede al
nombre de la clase de análisis en cada
paquete, indica que las clases tienen
visibilidad pública, por lo que son
accesibles desde otros paquetes
– El signo menos (resta) indica que un
elemento queda oculto desde todos los
demás paquetes
– El símbolo # señala que un elemento es
accesible sólo para los paquetes
contenidos dentro de un paquete dado
Requerimientos que modelan las
estrategias
Análisis estructurado
• Considera como entidades separadas los datos y los procesos que los
transforman
• Los objetos de datos se modelan en una forma que define sus
atributos y relaciones
• Los procesos que manipulan objetos de datos se modelan de una
forma que muestra cómo transforman los datos cuando los objetos
de datos fluyen por el sistema
• Participantes
• Categorías de usuario
• el contexto del negocio
• Las metas definidas de información y aplicación
• Requerimientos generales de webapps
• Los escenarios de uso
Modelado de requerimientos para
webapps
Salida del modelado de los requerimientos
• Modelo de contenido: identifica el espectro completo de contenido que
dará la webapp. El contenido incluye datos de texto, gráficos e imágenes,
video y sonido
• Modelo de interacción: describe la manera en que los usuarios
interactúan con la webapp
• Modelo funcional: define las operaciones que se aplicarán al contenido
de la webapp y describe otras funciones de procesamiento que son
independientes del contenido pero necesarias para el usuario final
• Modelo de navegación: define la estrategia general de navegación para
la webapp
• Modelo de configuración: describe el ambiente e infraestructura en la
que reside la webapp
Modelado de requerimientos para
webapps
• Modelo del contenido de las webapps
– Incluye elementos estructurales que dan un punto de vista importante de los requerimientos del
contenido de una webapp
Objetos del contenido
Clases de análisis
Entidades visibles para el usuario
– El contenido puede desarrollarse antes de la implementación de la webapp, mientras ésta se
construye o cuando ya opera
– Se incorpora por referencia de navegación en la estructura general de la webapp
– Objeto de contenido
Descripción de un producto en forma de texto
Pueden almacenarse como archivos separados, incrustarse directamente en páginas web u obtenerse en forma
dinámica de una base de datos
Es cualquier aspecto de información cohesiva que se presente al usuario final
Se determinan directamente a partir de casos de uso, estudiando la descripción del escenario respecto de
referencias directas e indirectas al contenido
– Árbol de datos
Representa una jerarquía de información que se utiliza para describir un componente
Se desarrolla como un esfuerzo para definir relaciones jerárquicas entre los objetos de contenido y para dar un
medio de revisión del contenido a fin de que se descubran las omisiones e inconsistencias antes de que
comience el diseño
Sirve como base para diseñar el contenido
Modelado de requerimientos para
webapps
• Modelo de la interacción para webapps
– Se compone de los elementos siguientes:
Casos de uso
Diagramas de secuencia
Diagramas de estado
Prototipos de la interfaz de usuario
– El formato de la interfaz de usuario, el contenido que presenta, los
mecanismos de interacción que implementa y la estética general de
las conexiones entre el usuario y la webapp tienen mucho que ver con
la satisfacción de éste y con el éxito conjunto del software
– Aunque se afirme que la creación de un prototipo de interfaz de
usuario es una actividad de diseño, es una buena idea llevarla a cabo
durante la creación del modelo de análisis
Modelado de requerimientos para
webapps
• Modelo funcional para las webapps
– Enfrenta dos elementos de procesamiento de la webapp,
cada uno de los cuales representa un nivel distinto de
abstracción del procedimiento:
1) Funciones observables por los usuarios que entrega la webapp a
éstos
2) Las operaciones contenidas en las clases de análisis que
implementan comportamientos asociados con la clase
– En un nivel más bajo de abstracción del procedimiento,
describe el procesamiento que se realizará por medio de
operaciones de clase de análisis
– En el nivel de análisis, los diagramas de actividades deben
usarse sólo donde la funcionalidad sea relativamente
compleja
Modelado de requerimientos para
webapps
• Objetivo:
– Producir un modelo o representación que tenga Resistencia,
Funcionalidad y Belleza.
– Esto se logra a través de dos elementos:
o Diversificación y convergencia, las cuales se basan en:
Experiencia
Principios
Criterios
Proceso de iteración
Ingeniería del Diseño
El diseño de software se ubica en el área técnica de la
ingeniería de software y se aplica sin importar el modelo
del proceso que se utilice
•Estructura general del software y las formas en que la estructura proporciona una integridad conceptual para un sistema
•Estructura u organización de los componentes del programa
•La manera en que estos componentes interactúan
•Estructura de datos que utilizan los componentes
•Propiedades estructurales, define los componentes de un sistema y la manera en la que están agrupados e interactúan
unos con otros
•Propiedades extrafuncionales, cómo se satisface los requerimientos de desempeño, capacidad, confiabilidad, seguridad
y adaptabilidad, así como otras características del sistema
•Familias de sistemas relacionados, el diseño debe tener la capacidad de reutilizar bloques de construcción
arquitectónica
•Modelos estructurales, representan la arquitectura como un conjunto organizado de componentes del programa
•Modelos del marco de trabajo, aumentan el nivel de abstracción del diseño, al tratar de identificar patrones de diseño
arquitectónico repetibles que se encuentran en tipos similares de aplicaciones
•Modelos dinámicos, abordan los aspectos estructurales de la arquitectura del programa e indican cómo cambia la
estructura o la configuración del sistema en función de eventos externos
•Modelos del proceso, se centran en el diseño del negocio o proceso técnico al que debe dar acomodo el sistema
•Modelos funcionales, se usan para representar la jerarquía funcional de un sistema
Conceptos de Diseño
• Patrón de diseño
– Describe una estructura de diseño que resuelve un
problema de diseño particular dentro de un contexto
específico y en medio de "fuerzas" que pueden tener un
impacto en la manera en que se aplica y utiliza el patrón
• Objetivo
– Proporcionar una descripción que le permita al diseñador
determinar si el patrón:
1) Es aplicable al trabajo en cuestión
2) Se puede reutilizar
3) Sirve como guía para desarrollar un patrón distinto en funciones
o estructura
Conceptos de Diseño
• División de problemas
– Cualquier problema complejo puede manejarse con más facilidad si se subdivide en elementos
susceptibles de resolverse u optimizarse de manera independiente
o Problema, característica o comportamiento que se especifica en el modelo de los requerimientos para el
software
• Modularidad
– El software se divide en componentes (módulos) con nombres independientes y que es posible
abordar en forma individual
– Atributo particular del software que permite que un programa sea manejable de manera intelectual
• Ocultación de información
– Sugiere que los módulos se caracterizan por las decisiones de diseño que cada uno oculta a los otros
– Los módulos deben especificarse y diseñarse de manera que la información que está dentro del
módulo sea inaccesible para otros módulos que no necesiten esa información
– El ocultamiento define y fortalece las restricciones de acceso para los detalles de procedimiento
dentro de un módulo y para cualquier estructura de datos local que utilice el módulo
Conceptos de Diseño
• Independencia funcional
– Debe diseñarse software de manera que cada módulo resuelva un
subconjunto específico de requerimientos y tenga una interfaz sencilla cuando
se vea desde otras partes de la estructura del programa
– El software es más fácil de desarrollar porque su función se subdivide y las
interfaces se simplifican
– Son más fáciles de mantener debido a que los efectos secundarios causados
por el diseño o por la modificación del código son limitados, se reduce la
propagación del error y es posible obtener módulos reutilizables
– Es una clave para el buen diseño y éste es la clave de la calidad del software
– Se evalúa aplicando dos criterios cualitativos:
• Cohesión: indicador de la fortaleza relativa funcional de un módulo
• Acoplamiento: independencia relativa entre módulos
– Un módulo cohesivo ejecuta una sola tarea, por lo que requiere interactuar
poco con otros componentes en otras partes del programa
– En el diseño de software, debe buscarse el mínimo acoplamiento posible
Conceptos de Diseño
Refinamiento
- Es una estrategia de diseño descendente . Es un proceso de elaboración
- El desarrollo de un programa se realiza al refinar de manera sucesiva los niveles de detalle
procedimentales
- Ayuda al diseñador a revelar los detalles de grado menor mientras se realiza el diseño
Aspectos
- Representación de una preocupación de interferencia
- Es importante identificar aspectos, de modo que el diseño les pueda dar acomodo
conforme sucede el refinamiento y la división en módulos
Rediseño
- Técnica de reorganización que simplifica el diseño de un componente sin cambiar su función
o comportamiento
- Es el proceso de cambiar un sistema de software de tal forma que no se altere el
comportamiento externo de su código y aún así se mejore su estructura interna
Conceptos de Diseño
• Clases de diseño
– Permite refinar las clases de análisis al proporcionar detalles del diseño que permitirán
la implementación de las clases
– Permite producir un conjunto nuevo de clases de diseño que implementen una
infraestructura de software para soportar la solución del negocio
• Tipos de clases
– Clases de interfaz con el usuario, definen todas las abstracciones necesarias para la
interacción humano-computadora
– Clases del dominio de negocios, identifican los atributos y servicios necesarios para
implementar algún elemento del dominio de negocios
– Clases de proceso, implementan abstracciones del negocio en un nivel más bajo, las
cuales se requieren para manejar por completo las clases del dominio de negocios
– Clases persistentes, representan almacenamientos de datos que persistirán más allá de
la ejecución del software
– Clases de sistema, implementan las funciones de gestión y control de software que
permiten que el sistema opere y se comunique dentro de su entorno de computación y
con el mundo exterior
Ingeniería del Diseño
• Características clase de diseño bien formada
– Completa y suficiente, una clase de diseño debe ser la encapsulación
completa de todos los atributos y métodos que se pueden esperar, en
forma razonable, que existan por clase
– Primitivismo, los métodos asociados con una clase de diseño deben
enfocarse en el cumplimiento de un servicio para la clase. Una vez que
el servicio ha sido implementado con un método, la clase no debe
proporcionar otra forma de complementar la misma cosa
– Cohesión alta, una clase de diseño cohesiva tiene un conjunto de
responsabilidades pequeño y enfocado, y aplica atributos y métodos
de manera sencilla para implementar dichas responsabilidades
– Acoplamiento bajo, Dentro del modelo de diseño es necesario que las
clases de diseño colaboren con alguna otra. La colaboración se debe
mantener en un mínimo aceptable. Si un modelo de diseño tiene un
acoplamiento alto, el sistema es difícil de implementar, probar y
mantener a través del tiempo
El Modelo del Diseño
• Dimensión del proceso
– Indica la evolución del modelo del diseño
conforme se ejecutan las tareas de éste como
parte del proceso del software
• Dimensión de la abstracción
– Representa el nivel de detalle a medida que cada
elemento del modelo de análisis se transforma en
un equivalente de diseño y luego se mejora en
forma iterativa
El Modelo del Diseño
• Elementos del diseño de datos
– En ocasiones denominado arquitectura de datos
– Crea un modelo de datos o información que se
representa en un nivel de abstracción elevado
– La estructura de los datos y algoritmos requeridos
para manipular los datos – Nivel de componentes
– Traducción de un modelo de datos a una base de
datos – Nivel de aplicación
– Conjunto de información almacenada en bases de
datos incompatibles y reorganizados en un “data
warehouse” – Nivel de negocios
El Modelo del Diseño
• Elementos del diseño arquitectónico
– Conjunto de sistemas interconectados, obtenidos de paquetes de análisis
dentro del modelo de requerimientos
– Fuentes:
• Información sobre el dominio de la aplicación del software que se va a elaborar
• Elementos específicos del modelo de requerimientos, sus relaciones y
colaboraciones para el problema en cuestión
• La disponibilidad de estilos arquitectónicos y sus patrones
Militares: Consulta, comunicaciones, comando, control e inteligencia, así como de armas ofensivas y defensivas
Sistemas operativos: Están inmediatamente instalados en el hardware para dar servicios de software básico
Utilidades: Interactúan con otro software para brindar algún servicio específico
Estilos Arquitectónicos
• Estilos arquitectónicos
– Mecanismo descriptivo
– Plantilla para la construcción
– Describe una categoría de sistemas
• Objetivo
– Establecer una estructura para todos los componentes del sistema
• Los estilos arquitectónicos abarcan:
Conjunto de componentes, que realizan una función requerida por el sistema
Conjunto de conectores, que permiten la comunicación, coordinación y
cooperación entre los componentes
Restricciones, que definen cómo se integran los componentes para formar el
sistema
Modelos semánticos, que permiten a un diseñador, mediante el análisis de las
propiedades conocidas de las partes que lo integran, comprender las
propiedades generales de un sistema
Estilos Arquitectónicos
• Arquitectura centrada en datos
– Un almacén de datos se encuentra en el centro; otros componentes tienen
acceso a él y cuentan con la opción de actualizar, agregar, eliminar o modificar
los datos
• Arquitectura en capas
– Hay varias capas definidas; cada una de ellas realiza operaciones que se
acercan progresivamente al conjunto de instrucciones de la máquina
• Capa externa, los componentes sirven a las operaciones de interfaz de usuario
• Capa interna, los componentes sirven como interfaz con el sistema operativo
– Datos.
• Cómo se comunican los datos entre los componentes?
• El flujo de datos es continuo o los objetos de datos se pasan esporádicamente al sistema?
• Cuál es el modo de transferencia de los datos?
• Existen componentes de datos, y de ser así, cuál es su papel?
• Cómo interactúan los componentes funcionales con los de datos?
• Los componentes de datos son pasivos o activos?
• Cómo interactúan los datos y el control dentro del sistema?
Diseño Arquitectónico
• Representación del sistema en el contexto
– Diagrama de contexto del sistema
• Representa el flujo de la información dentro y fuera del sistema, la información del
usuario y el procesamiento relevante de soporte.
• Modela la manera en que el software interactuará con las entidades ubicadas mas
allá de sus limites.
– Sistemas superiores: Utilizan al sistema objetivo como parte de algún
esquema de procesamiento de alto nivel
– Sistemas subordinados: Usados por el sistema objetivo y proveen
datos o procesamiento que son necesarios para completar las
funciones del sistema objetivo
– Sistemas entre iguales: Interactúan sobre una base de igualdad
– Actores: entidades que interactúan con el sistema objetivo mediante
la producción o consumo de información que es necesaria para el
procesamiento de los requerimientos
Diseño Arquitectónico
Definición de arquetipos
• Dominio de la aplicación
• Dominio de la infraestructura
Instancia de Ia arquitectura
• Tipos de dependencias:
– Dependencias compartidas, representan relaciones de dependencia
entre consumidores que usan el mismo recurso o los productores que
producen para los mismos consumidores.
– Dependencias de flujo, representan las relaciones de dependencia
entre productores y consumidores de recursos.
– Dependencias de restricción, representan restricciones al flujo relativo
de control entre un conjunto de actividades.
Evaluación de las arquitecturas de
software
¿Qué es?
Tipos de cohesión
• Funcional. Ocurre cuando un componente realiza un cálculo y
luego devuelve el resultado
• De capa. Ocurre cuando una capa más alta accede a los servicios
de otra más baja, pero ésta no tiene acceso a las superiores
• De comunicación. Las clases se centran únicamente en los datos
en cuestión, acceden a ellos y los guardan
Diseño de Componentes
Basados en Clase
Acoplamiento
Componente de webapp
Secuencia
Condición
Repetición
• Preguntas:
– ¿Es posible construir sistemas complejos con el ensamble de componentes
reutilizables de software procedentes de un catálogo?
– ¿Se logra esto en forma eficaz en cuanto a costo y tiempo?
– ¿Pueden establecerse incentivos apropiados que estimulen a los ingenieros de
software a reutilizar, más que a reinventar?
– ¿La dirección está dispuesta a incurrir en los gastos adicionales asociados a la
creación de componentes de software reutilizables?
– ¿Es posible crear la biblioteca de componentes necesarios para conseguir la
reutilización en forma tal que sea accesible a quienes los necesitan?
– ¿Quienes necesitan los componentes que ya existen pueden encontrarlos?
Desarrollo Basado en Componentes
Un tema que genera mucha polémica entre la gente que modela casos de uso es la
elección entre la relación de <<include>> y <<extend>>. Lo peor es que muchas de esas
discusiones generan muy poco valor en el resultado final en el modelo y en cambio
quitan tiempo valioso del proyecto. Esto se debe a que dichas relaciones, muchas veces
no son del todo comprendidas por la persona que la modela, y mucho menos son
comprendidas por las personas que leen el modelo. Así que al final no se le saca el
provecho que en todo caso debería de tener dicha elección.
Es mejor mantener el modelo simple, incluso si esto significa utilizar menos elementos
gráficos de UML, si eso va a facilitar el modelado y la comunicación en el proyecto.
Pero, después de todo este tiempo y de los diferentes temas que hemos venido tratando,
es importante avanzar y adentrarnos en algunos pormenores del lenguaje unificado.
Estas, son relaciones que usamos para ligar gráficamente dos casos de uso, cuyos flujos
de eventos están unidos, normalmente en una sola sesión del usuario. En otras palabras,
un caso de uso que está ligado, por medio de una de estas dos relaciones, a otro caso de
uso; también podría leerse o ejecutarse como un sólo caso de uso en lugar de dos.
Obviamente, hay una razón por la cual decidimos separarlos en dos, lo cual explicaremos
más adelante.
Imagina el conjunto de pasos que ocurren al realizar una compra en una tienda
departamental. Seguramente no tendrás problema en visualizar el conjunto de pasos para
solicitar la autorización de la tarjeta de crédito con la que vas a pagar, ligado a los pasos
donde el vendedor registra los productos a comprar. Es decir, los flujos de eventos de
ambos procesos forman una sola cosa; juntos podrían formar un solo caso de uso, en
lugar de dos casos de uso unidos por alguna de estas relaciones que aquí estamos
tratando.
Figura 1. Relacionando casos de uso
Include. En términos muy simples, cuando relacionamos dos casos de uso con un
“include”, estamos diciendo que el primero (el caso de uso base) incluye al segundo (el
caso de uso incluido). Es decir, el segundo es parte esencial del primero. Sin el segundo,
el primero no podría funcionar bien; pues no podría cumplir su objetivo. Para una venta
en caja, la venta no puede considerarse completa si no se realiza el proceso para cobrarla
en ese momento. El caso de uso “Cobrar Renta” está incluido en el caso de uso “Rentar
Video”, o lo que es lo mismo “Rentar Video” incluye (<<include>>) “Cobrar Renta”.
Extend. La polémica al querer seleccionar una de las dos relaciones es que en el “extend”
también podemos ver, desde la perspectiva del usuario, a los dos flujos como si fueran
uno sólo. Y en ciertos escenarios el caso de uso base no podría cumplir su objetivo si no
se ejecutara la extensión. Pero, una de las diferencias básicas es que en el caso del
“extend” hay situaciones en que el caso de uso de extensión no es indispensable que
ocurra, y cuando lo hace ofrece un valor extra (extiende) al objetivo original del caso de
uso base. En cambio en el “include” es necesario que ocurra el caso incluido, tan sólo
para satisfacer el objetivo del caso de uso base. Ejemplo: Puedes “Realizar Venta” sin
“Acumular Puntos de Cliente VIP”, cuando no eres un cliente VIP. Pero, si eres un
cliente VIP sí acumularás puntos. Por lo tanto, “Acumular Puntos” es una extensión de
“Realizar Venta” y sólo se ejecuta para cierto tipo de ventas, no para todas.
Figura 3. Ejemplo de Extend
Casos de Abuso
Uno de los riesgos que existe cuando la gente sabe que tiene estas relaciones como un
elemento a utilizar en sus modelos de casos de uso, consiste en su abuso. Mucha gente, y
sobre todo la que arrastra prácticas de métodos estructurados, la suele utilizar en exceso.
No es raro ver modelos de casos de uso que llegan a tener decenas de inclusiones y
extensiones, incluso las inclusiones y extensiones se vuelven a extender a varios niveles,
generando una maraña de casos de uso que no ofrecen valor al ser mostrados
explícitamente.
Una de las razones por las cuales deberías de considerar el uso de este tipo de relaciones,
es porque identificas que hay pasos que son iguales en dos o más casos de uso. No
querrás tener que escribir y darle mantenimiento a esos pasos en los documentos
asociados a cada uno de ellos. Peor aún, no querrás correr el riesgo de que esos pasos se
diseñen, programen y prueben de maneras diferentes y con esfuerzos aislados por ti o tu
equipo de desarrollo. Finalmente son la misma cosa, ¿para qué querríamos trabajar
doble? Lo que queremos es economizar, ser más eficientes en el desarrollo, y ahí es
cuando viene el beneficio de identificar estos tipos de relaciones; porque es una
oportunidad de identificar reuso.
Figura 5. Identificación de reuso
• Los Casos de Uso (Ivar Jacobson) • Comparación con respecto a los Diagramas de
describen bajo la forma de Flujo de Datos del Enfoque Estructurado
acciones y reacciones el • Un caso de uso es una función atómica
ofrecida por el sistema al entorno (actores)
comportamiento de un sistema
• DFD puede ser detallada en un DFD Hijo
desde el p.d.v. del usuario
• Caso Uso y Proceso igual modelado, pero
• Permiten definir los límites del caso de uso expresa funcionalidad mediante
sistema y las relaciones entre el interacción de actores
sistema y el entorno • Caso de uno no modela detalle funcional
interno
• Los Casos de Uso son • Relaciones de extensión y generalización de
descripciones de la funcionalidad CU no tienen igual en DFD
del sistema independientes de la
implementación
• Actores:
• Principales: personas que usan el sistema
• Secundarios: personas que mantienen o administran el sistema
• Material externo: dispositivos materiales imprescindibles que forman parte del ámbito de la
aplicación y deben ser utilizados
• Otros sistemas: sistemas con los que el sistema interactúa
• La misma persona física puede interpretar varios papeles como actores distintos
• El nombre del actor describe el papel desempeñado
• Los Casos de Uso se determinan observando y precisando, actor por actor, las
secuencias de interacción, los escenarios, desde el punto de vista del usuario
• Un escenario es una instancia de un caso de uso
• Los casos de uso intervienen durante todo el ciclo de vida. El proceso de
desarrollo estará dirigido por los casos de uso
• Comunicación <<include>>
Caso de Uso
Actor
<<include>> reemplazó al
denominado <<uses>>
• Ejemplo:
Identificación
<<include>>
Transferencia
Cliente
<<extend>>
Transferencia en Internet
• Ejemplo: