SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Conceptos de Diseño
Ramiro Estigarribia Canese
¿Qué es el diseño de SW?
➔ El diseño de software agrupa el conjunto de
principios, conceptos y prácticas que llevan al
desarrollo de un sistema de alta calidad.
➔ El diseño crea una representación del software,
pero, a diferencia del modelo de los requerimientos,
proporciona detalles sobre arquitectura del
software, estructuras de datos, interfaces y
componentes que se necesitan para implementar el
sistema.
Edificios vs Software.
➔ Vitruvio, romano crítico de arquitectura, afirmaba
que los edificios bien diseñados eran aquellos que
tenían resistencia, funcionalidad y elegancia.
Lo mismo se aplica al buen software.
➔ Resistencia: un programa no debe tener ningún
error que impida su funcionamiento.
➔ Funcionalidad: un programa debe se apropiado
para los fines que persigue.
➔ Elegancia: la experiencia de usar el programa debe
ser placentera.
I.S. vs Otras Ingenierías.
➔ El diseño del software cambia conforme
evolucionan los métodos, surgen mejores análisis y
se obtiene una comprensión más amplia.
➔ Hasta hoy: las metodologías de diseño de software
carecen de profundidad, flexibilidad, exactitud y
naturaleza cuantitativa, que normalmente se
asocian con las ingenierías más clásicas.
➔ No obstante, sí existen métodos para diseñar
software, se dispone de criterios para el diseño con
calidad y se aplica la notación del diseño.
¿Cuándo Comienza?
Comienza una vez que se han analizado y modelado
los requerimientos.
Cada uno de los elementos del modelo de
requerimientos (capítulos 6 y 7) proporciona
información necesaria para crear los cuatro modelos
del diseño.
El trabajo de diseño es alimentado por el modelo de
requerimientos, manifestado por elementos basados
en el escenario, en la clase, orientados al flujo, y del
comportamiento.
Modelos del diseño.
➔ La importancia del diseño del software se
resume en una palabra: calidad.
➔ Da representaciones del software que pueden
evaluarse en su calidad.
➔ Es la única manera de traducir un producto
terminado a los requerimientos de los participantes.
➔ Sin diseño se corre el riesgo de obtener un sistema
inestable, que falle cuando se hagan cambios
pequeños.
Importancia del Diseño.
Atributos de Calidad
1. Funcionalidad: “Se estima al evaluar el conjunto de
características y la seguridad del sistema en su
totalidad.”
2. Facilidad de uso: “Se valora al considerar los
factores humanos, la estética, consistencia y
documentación.”
3. Confiabilidad: “Se evalúa al medir la frecuencia y
severidad de las fallas, la precisión de los
resultados, y la habilidad para recuperarse de las
fallas.”
Atributos de Calidad
4. Desempeño “Se mide con la velocidad de
procesamiento, tiempo de respuesta, consumo de
recursos, rendimiento y eficacia.”
5. Soportabilidad: Facilidad de mantenimiento,
Resistencia a pruebas. - Compatibilidad. -
Configurabilida. - Facilidad de instalación. -
Facilidad localización de problemas.
El Proceso del Diseño.
El diseño de software es un proceso iterativo por
medio del cual se traducen los requerimientos
“en un plano” para construir el software.
Al principio, el plano ilustra una visión holística del
software. Es decir, el diseño se representa en un nivel
alto de abstracción.
A medida que tienen lugar las iteraciones del diseño,
las mejoras posteriores conducen a niveles menores
de abstracción. Éstos también pueden rastrearse
hasta los requerimientos, pero la conexión es más
sutil.
Evolución del Diseño de SW.
➔ Es un proceso continuo que ya ha cubierto seis
décadas. Los primeros trabajos de diseño se
concentraban en criterios para el desarrollo de
programas modulares.
➔ Los trabajos posteriores propusieron métodos para
traducir la estructura de los datos a una definición
de diseño.
➔ Los enfoques más nuevos propusieron un enfoque
orientado a objeto para diseñar derivaciones.
➔ En los últimos tiempos, el énfasis al desarrollar
software se pone en la arquitectura de éste y en los
patrones de diseño.
Conceptos de Diseño.
Durante la historia de la ingeniería de software, ha
evolucionado un conjunto de conceptos.
Aunque con el paso de los años ha variado el grado
de interés en cada concepto, todos han soportado la
prueba del tiempo.
Todos ayudan a responder las preguntas siguientes:
➔ ¿Qué criterios se usan para dividir el software en
sus componentes individuales?
➔ ¿Cómo se extraen los detalles?
➔ ¿Cuáles son los criterios que definen la calidad?
Abstracción.
Existen diversos grados de abstracción , entre mayor
sea el grado de la misma se considera una solución
general, entre menor sea su grado se hace referencia
a elementos de mayor especificidad.
• Abstracción procedimental: Permiten describir
procesos omitiendo detalles específicos.(ej: encender
automóvil)
• Abstracción de datos: Describe las características de
un objeto. (automóvil, no siendo necesario describir en
detalle su especificación para reconocerlo).
Arquitectura.
➔ Representa la estructura general del software y la
forma como interactúan sus componentes.
➔ “En un sentido más amplio, no solo se describe los
componentes y relaciones, también se pueden
representar elementos más importantes del
sistema”
➔ Una meta del diseño del software es obtener una
aproximación arquitectónica de un sistema.
➔ Un conjunto de patrones arquitectónicos permite
que el ingeniero de software resuelva problemas de
diseño comunes.
Patrones de Diseño.
Brad Appleton define un patrón de diseño de la
manera siguiente:
“Es una mezcla con nombre propio de puntos de vista
que contienen la esencia de una solución demostrada
para un problema”.
El objetivo de cada patrón de diseño es proporcionar
una descripción que permita determinar:
1. Si es aplicable al trabajo en cuestión.
2. Si puede volverse a usar.
3. Si sirve como guía para desarrollar un patrón
distinto en funciones o estructura.
División de Problemas.
➔ Es un concepto de diseño que sugiere que
cualquier problema complejo puede manejarse con
más facilidad si se subdivide en elementos
susceptibles de resolverse u optimizarse de
manera independiente.
➔ Al separar un problema en sus piezas más
pequeñas y por ello más manejables, se requiere
menos esfuerzo y tiempo para resolverlo.
Modularidad.
➔ Es la manifestación de la división de problemas.
➔ El software se divide en componentes con nombres
distintos y abordables por separado, en ocasiones
llamados módulos, que se integran para satisfacer
los requerimientos del problema.
➔ El software monolítico (un programa grande
compuesto de un solo módulo) no es fácil de
entender para un ingeniero de software.
➔ En función de las circunstancias, el diseño debe
descomponerse en muchos módulos con la
esperanza de que sea más fácil entenderlo.
Relación entre número de
módulos y éxito.
Relación entre número
de módulos y éxito.
➔ Las curvas que aparecen en la figura constituyen
una guía útil al considerar la modularidad.
➔ Deben hacerse módulos, pero con cuidado para
permanecer en la cercanía de M.
➔ Debe evitarse hacer pocos o muchos módulos.
➔ Debe hacerse un diseño (y el programa resultante)
con módulos, de manera que el desarrollo pueda
planearse con más facilidad, que sea posible definir
y desarrollar los incrementos del software, que los
cambios se realicen con más facilidad, que las
pruebas y la depuración se efectúen con mayor
eficiencia.
Ocultamiento de
Información.
➔ El principio del ocultamiento de información sugiere
que los módulos se “caracterizan por decisiones de
diseño que se oculten (cada una) de las demás”.
➔ En otras palabras, deben especificarse y diseñarse
módulos, de forma que la información (algoritmos y
datos) contenida en un módulo sea inaccesible
para los que no necesiten de ella.
➔ Implica que la modularidad efectiva se logra
definiendo módulos independientes que
intercambien sólo aquella información necesaria
para lograr la función del software.
Independencia Funcional
El concepto de independencia funcional es resultado
directo de la separación de problemas y de
los conceptos de abstracción y ocultamiento de
información.
La independencia funcional se logra desarrollando
módulos con funciones “miopes” que tengan “aversión”
a la interacción excesiva con otros módulos.
Dicho de otro modo, debe diseñarse software de
manera que cada módulo tenga una interfaz sencilla
cuando se vea desde otras partes de la estructura del
programa.
Refinamiento
El refinamiento es un proceso de elaboración.
Se comienza con un enunciado de la función (o
descripción de la información), definida en un nivel de
abstracción alto.
Es decir, el enunciado describe la función o
información de manera conceptual, pero no dice nada
sobre los trabajos internos de la función o de la
estructura interna de la información.
Después se trabaja sobre el enunciado original, dando
más y más detalles conforme tiene lugar el
refinamiento (elaboración) sucesivo.
Rediseño
➔ “Es el proceso de cambiar un sistema de software
en forma tal que no se altera el comportamiento
externo del código [diseño], pero sí se mejora su
estructura interna.”
➔ Cuando se rediseña el software, se examina el
diseño existente en busca de redundancias,
algoritmos ineficientes, estructuras de datos mal
construidas y cualquier otra falla del diseño que
pueda corregirse para obtener un diseño mejor.
➔ El resultado será un software más fácil de integrar,
de probar y de mantener.
Resumen y Conclusiones.
El diseño del software comienza cuando termina la
primera iteración de la ingeniería de requerimientos.
El objetivo del diseño del software es aplicar un
conjunto de principios, conceptos y prácticas que
llevan al desarrollo de un sistema o producto de alta
calidad.
La meta del diseño es crear un modelo de software
que implantará correctamente todos los
requerimientos del usuario y causará placer a quienes
lo utilicen.
Resumen y Conclusiones.
Los diseñadores del software deben elegir entre
muchas alternativas de diseño y llegar a la solución
que mejor se adapte a las necesidades de
los participantes en el proyecto.
El proceso de diseño va de una visión “panorámica”
del software a otra más cercana que define el detalle
requerido para implementar un sistema.
Los conceptos de diseño han evolucionado en los
primeros 60 años de trabajo de la ingeniería
de software.

Contenu connexe

Tendances

Modelado del AnáLisis
Modelado del AnáLisisModelado del AnáLisis
Modelado del AnáLisis
Carolina Rojas
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
Liliana Pacheco
 
Modelo componentes
Modelo componentesModelo componentes
Modelo componentes
martin
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
kaolong
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de Software
Roberth Loaiza
 

Tendances (20)

10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes
 
Estandares y modelos de calidad del software
Estandares y modelos de calidad del softwareEstandares y modelos de calidad del software
Estandares y modelos de calidad del software
 
Modelado del AnáLisis
Modelado del AnáLisisModelado del AnáLisis
Modelado del AnáLisis
 
Patrones diseño y arquitectura
Patrones diseño y arquitecturaPatrones diseño y arquitectura
Patrones diseño y arquitectura
 
Metricas del producto para el Software
Metricas del producto para el SoftwareMetricas del producto para el Software
Metricas del producto para el Software
 
EstáNdares De Calidad Aplicadas Al Software
EstáNdares De Calidad Aplicadas Al SoftwareEstáNdares De Calidad Aplicadas Al Software
EstáNdares De Calidad Aplicadas Al Software
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
 
Prototipos
PrototiposPrototipos
Prototipos
 
2.modelos del proceso
2.modelos del proceso2.modelos del proceso
2.modelos del proceso
 
Modelo componentes
Modelo componentesModelo componentes
Modelo componentes
 
1-Unidad 1. Arquitectura de Diseño
1-Unidad 1. Arquitectura de Diseño1-Unidad 1. Arquitectura de Diseño
1-Unidad 1. Arquitectura de Diseño
 
Fundamentos del diseño y Garantías de Calidad del Software
Fundamentos del diseño y Garantías de Calidad del SoftwareFundamentos del diseño y Garantías de Calidad del Software
Fundamentos del diseño y Garantías de Calidad del Software
 
Diseño de Software
Diseño de SoftwareDiseño de Software
Diseño de Software
 
Diseño arquitectónico
Diseño arquitectónicoDiseño arquitectónico
Diseño arquitectónico
 
Vista lógica
Vista lógicaVista lógica
Vista lógica
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Sistemas operativos distribuidos
Sistemas operativos distribuidosSistemas operativos distribuidos
Sistemas operativos distribuidos
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de Software
 
Ejemplo rup
Ejemplo rupEjemplo rup
Ejemplo rup
 
Normas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de SoftwareNormas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de Software
 

Similaire à 8.conceptos de diseño

PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTEPRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
CAMILO
 
Presentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de CostePresentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de Coste
CAMILO
 
PROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOSPROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOS
CAMILO
 
Proyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de CostoProyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de Costo
CAMILO
 
presentacion de software y estimacion de doste
presentacion de software y estimacion de dostepresentacion de software y estimacion de doste
presentacion de software y estimacion de doste
CAMILO
 
Proyecto de Software y Coste
Proyecto de Software y CosteProyecto de Software y Coste
Proyecto de Software y Coste
CAMILO
 
Proyecto de Software y Estimacion de Coste
Proyecto de Software y Estimacion de CosteProyecto de Software y Estimacion de Coste
Proyecto de Software y Estimacion de Coste
CAMILO
 
1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño
landeta_p
 
Diseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizanDiseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizan
Arianna Peralta
 

Similaire à 8.conceptos de diseño (20)

Fundamentos
FundamentosFundamentos
Fundamentos
 
Fundamentos del diseño de software
Fundamentos del diseño de software Fundamentos del diseño de software
Fundamentos del diseño de software
 
2017.10.16-senati-powerpoint sesion8.pptx
2017.10.16-senati-powerpoint sesion8.pptx2017.10.16-senati-powerpoint sesion8.pptx
2017.10.16-senati-powerpoint sesion8.pptx
 
Fundamentos de diseño de software
Fundamentos de diseño de softwareFundamentos de diseño de software
Fundamentos de diseño de software
 
Conceptosdemodelado.pdf
Conceptosdemodelado.pdfConceptosdemodelado.pdf
Conceptosdemodelado.pdf
 
Guillermo cárdenas
Guillermo cárdenasGuillermo cárdenas
Guillermo cárdenas
 
Guillermo cárdenas
Guillermo cárdenasGuillermo cárdenas
Guillermo cárdenas
 
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTEPRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
PRESENTACION: PROYECTO DE SOFTWARE & ESTIMACION DE COSTE
 
Juan velasquez
Juan velasquezJuan velasquez
Juan velasquez
 
Presentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de CostePresentacion de Software y Estimacion de Coste
Presentacion de Software y Estimacion de Coste
 
PROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOSPROYECTOS DE SOFTWARE Y COSTOS
PROYECTOS DE SOFTWARE Y COSTOS
 
Proyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de CostoProyecto de Software y Estimacion de Costo
Proyecto de Software y Estimacion de Costo
 
presentacion de software y estimacion de doste
presentacion de software y estimacion de dostepresentacion de software y estimacion de doste
presentacion de software y estimacion de doste
 
Proyecto de Software y Coste
Proyecto de Software y CosteProyecto de Software y Coste
Proyecto de Software y Coste
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
 
Proyecto de Software y Estimacion de Coste
Proyecto de Software y Estimacion de CosteProyecto de Software y Estimacion de Coste
Proyecto de Software y Estimacion de Coste
 
1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño
 
Diseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizanDiseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizan
 
Ingeniería de software y el paradigma orientado a objetos
Ingeniería de software y el paradigma orientado a objetosIngeniería de software y el paradigma orientado a objetos
Ingeniería de software y el paradigma orientado a objetos
 
Diseño estructurado
Diseño estructuradoDiseño estructurado
Diseño estructurado
 

Plus de Ramiro Estigarribia Canese

Plus de Ramiro Estigarribia Canese (20)

8.Flujo, Comportamiento, Patrones y WebApps.pdf
8.Flujo, Comportamiento, Patrones y WebApps.pdf8.Flujo, Comportamiento, Patrones y WebApps.pdf
8.Flujo, Comportamiento, Patrones y WebApps.pdf
 
Principios que Guían la Práctica
Principios que Guían la PrácticaPrincipios que Guían la Práctica
Principios que Guían la Práctica
 
CSS - Hojas de Estilo en Cascada.pdf
CSS -  Hojas de Estilo en Cascada.pdfCSS -  Hojas de Estilo en Cascada.pdf
CSS - Hojas de Estilo en Cascada.pdf
 
Python conceptos básicos
Python   conceptos básicosPython   conceptos básicos
Python conceptos básicos
 
Diseño de WebApps
Diseño de WebAppsDiseño de WebApps
Diseño de WebApps
 
Diseño basado en patrones
Diseño basado en patronesDiseño basado en patrones
Diseño basado en patrones
 
Servicios web
Servicios webServicios web
Servicios web
 
Especificaciones de los procesadores
Especificaciones de los procesadoresEspecificaciones de los procesadores
Especificaciones de los procesadores
 
Lenguaje de programación awk
Lenguaje de programación awkLenguaje de programación awk
Lenguaje de programación awk
 
Bases de datos con PHP y PDO
Bases de datos con PHP y PDOBases de datos con PHP y PDO
Bases de datos con PHP y PDO
 
Bases de datos con PHP y Mysqli
Bases de datos con PHP y MysqliBases de datos con PHP y Mysqli
Bases de datos con PHP y Mysqli
 
Interfaz de usuario
Interfaz de usuarioInterfaz de usuario
Interfaz de usuario
 
Variables del sistema en php
Variables del sistema en phpVariables del sistema en php
Variables del sistema en php
 
Funciones en php
Funciones en phpFunciones en php
Funciones en php
 
Bootstrap menues, contenedores y formularios
Bootstrap   menues, contenedores y formulariosBootstrap   menues, contenedores y formularios
Bootstrap menues, contenedores y formularios
 
Estructuras de control en bash
Estructuras de control en bashEstructuras de control en bash
Estructuras de control en bash
 
Visual studio code
Visual studio codeVisual studio code
Visual studio code
 
Herramienta cacti
Herramienta cactiHerramienta cacti
Herramienta cacti
 
Monitoreo de datacenter
Monitoreo de datacenterMonitoreo de datacenter
Monitoreo de datacenter
 
Comprensión de los requerimientos
Comprensión de los requerimientosComprensión de los requerimientos
Comprensión de los requerimientos
 

Dernier

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (11)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

8.conceptos de diseño

  • 1. Conceptos de Diseño Ramiro Estigarribia Canese
  • 2. ¿Qué es el diseño de SW? ➔ El diseño de software agrupa el conjunto de principios, conceptos y prácticas que llevan al desarrollo de un sistema de alta calidad. ➔ El diseño crea una representación del software, pero, a diferencia del modelo de los requerimientos, proporciona detalles sobre arquitectura del software, estructuras de datos, interfaces y componentes que se necesitan para implementar el sistema.
  • 3. Edificios vs Software. ➔ Vitruvio, romano crítico de arquitectura, afirmaba que los edificios bien diseñados eran aquellos que tenían resistencia, funcionalidad y elegancia. Lo mismo se aplica al buen software. ➔ Resistencia: un programa no debe tener ningún error que impida su funcionamiento. ➔ Funcionalidad: un programa debe se apropiado para los fines que persigue. ➔ Elegancia: la experiencia de usar el programa debe ser placentera.
  • 4. I.S. vs Otras Ingenierías. ➔ El diseño del software cambia conforme evolucionan los métodos, surgen mejores análisis y se obtiene una comprensión más amplia. ➔ Hasta hoy: las metodologías de diseño de software carecen de profundidad, flexibilidad, exactitud y naturaleza cuantitativa, que normalmente se asocian con las ingenierías más clásicas. ➔ No obstante, sí existen métodos para diseñar software, se dispone de criterios para el diseño con calidad y se aplica la notación del diseño.
  • 5. ¿Cuándo Comienza? Comienza una vez que se han analizado y modelado los requerimientos. Cada uno de los elementos del modelo de requerimientos (capítulos 6 y 7) proporciona información necesaria para crear los cuatro modelos del diseño. El trabajo de diseño es alimentado por el modelo de requerimientos, manifestado por elementos basados en el escenario, en la clase, orientados al flujo, y del comportamiento.
  • 7. ➔ La importancia del diseño del software se resume en una palabra: calidad. ➔ Da representaciones del software que pueden evaluarse en su calidad. ➔ Es la única manera de traducir un producto terminado a los requerimientos de los participantes. ➔ Sin diseño se corre el riesgo de obtener un sistema inestable, que falle cuando se hagan cambios pequeños. Importancia del Diseño.
  • 8. Atributos de Calidad 1. Funcionalidad: “Se estima al evaluar el conjunto de características y la seguridad del sistema en su totalidad.” 2. Facilidad de uso: “Se valora al considerar los factores humanos, la estética, consistencia y documentación.” 3. Confiabilidad: “Se evalúa al medir la frecuencia y severidad de las fallas, la precisión de los resultados, y la habilidad para recuperarse de las fallas.”
  • 9. Atributos de Calidad 4. Desempeño “Se mide con la velocidad de procesamiento, tiempo de respuesta, consumo de recursos, rendimiento y eficacia.” 5. Soportabilidad: Facilidad de mantenimiento, Resistencia a pruebas. - Compatibilidad. - Configurabilida. - Facilidad de instalación. - Facilidad localización de problemas.
  • 10. El Proceso del Diseño. El diseño de software es un proceso iterativo por medio del cual se traducen los requerimientos “en un plano” para construir el software. Al principio, el plano ilustra una visión holística del software. Es decir, el diseño se representa en un nivel alto de abstracción. A medida que tienen lugar las iteraciones del diseño, las mejoras posteriores conducen a niveles menores de abstracción. Éstos también pueden rastrearse hasta los requerimientos, pero la conexión es más sutil.
  • 11. Evolución del Diseño de SW. ➔ Es un proceso continuo que ya ha cubierto seis décadas. Los primeros trabajos de diseño se concentraban en criterios para el desarrollo de programas modulares. ➔ Los trabajos posteriores propusieron métodos para traducir la estructura de los datos a una definición de diseño. ➔ Los enfoques más nuevos propusieron un enfoque orientado a objeto para diseñar derivaciones. ➔ En los últimos tiempos, el énfasis al desarrollar software se pone en la arquitectura de éste y en los patrones de diseño.
  • 12. Conceptos de Diseño. Durante la historia de la ingeniería de software, ha evolucionado un conjunto de conceptos. Aunque con el paso de los años ha variado el grado de interés en cada concepto, todos han soportado la prueba del tiempo. Todos ayudan a responder las preguntas siguientes: ➔ ¿Qué criterios se usan para dividir el software en sus componentes individuales? ➔ ¿Cómo se extraen los detalles? ➔ ¿Cuáles son los criterios que definen la calidad?
  • 13. Abstracción. Existen diversos grados de abstracción , entre mayor sea el grado de la misma se considera una solución general, entre menor sea su grado se hace referencia a elementos de mayor especificidad. • Abstracción procedimental: Permiten describir procesos omitiendo detalles específicos.(ej: encender automóvil) • Abstracción de datos: Describe las características de un objeto. (automóvil, no siendo necesario describir en detalle su especificación para reconocerlo).
  • 14. Arquitectura. ➔ Representa la estructura general del software y la forma como interactúan sus componentes. ➔ “En un sentido más amplio, no solo se describe los componentes y relaciones, también se pueden representar elementos más importantes del sistema” ➔ Una meta del diseño del software es obtener una aproximación arquitectónica de un sistema. ➔ Un conjunto de patrones arquitectónicos permite que el ingeniero de software resuelva problemas de diseño comunes.
  • 15. Patrones de Diseño. Brad Appleton define un patrón de diseño de la manera siguiente: “Es una mezcla con nombre propio de puntos de vista que contienen la esencia de una solución demostrada para un problema”. El objetivo de cada patrón de diseño es proporcionar una descripción que permita determinar: 1. Si es aplicable al trabajo en cuestión. 2. Si puede volverse a usar. 3. Si sirve como guía para desarrollar un patrón distinto en funciones o estructura.
  • 16. División de Problemas. ➔ Es un concepto de diseño que sugiere que cualquier problema complejo puede manejarse con más facilidad si se subdivide en elementos susceptibles de resolverse u optimizarse de manera independiente. ➔ Al separar un problema en sus piezas más pequeñas y por ello más manejables, se requiere menos esfuerzo y tiempo para resolverlo.
  • 17. Modularidad. ➔ Es la manifestación de la división de problemas. ➔ El software se divide en componentes con nombres distintos y abordables por separado, en ocasiones llamados módulos, que se integran para satisfacer los requerimientos del problema. ➔ El software monolítico (un programa grande compuesto de un solo módulo) no es fácil de entender para un ingeniero de software. ➔ En función de las circunstancias, el diseño debe descomponerse en muchos módulos con la esperanza de que sea más fácil entenderlo.
  • 18. Relación entre número de módulos y éxito.
  • 19. Relación entre número de módulos y éxito. ➔ Las curvas que aparecen en la figura constituyen una guía útil al considerar la modularidad. ➔ Deben hacerse módulos, pero con cuidado para permanecer en la cercanía de M. ➔ Debe evitarse hacer pocos o muchos módulos. ➔ Debe hacerse un diseño (y el programa resultante) con módulos, de manera que el desarrollo pueda planearse con más facilidad, que sea posible definir y desarrollar los incrementos del software, que los cambios se realicen con más facilidad, que las pruebas y la depuración se efectúen con mayor eficiencia.
  • 20. Ocultamiento de Información. ➔ El principio del ocultamiento de información sugiere que los módulos se “caracterizan por decisiones de diseño que se oculten (cada una) de las demás”. ➔ En otras palabras, deben especificarse y diseñarse módulos, de forma que la información (algoritmos y datos) contenida en un módulo sea inaccesible para los que no necesiten de ella. ➔ Implica que la modularidad efectiva se logra definiendo módulos independientes que intercambien sólo aquella información necesaria para lograr la función del software.
  • 21. Independencia Funcional El concepto de independencia funcional es resultado directo de la separación de problemas y de los conceptos de abstracción y ocultamiento de información. La independencia funcional se logra desarrollando módulos con funciones “miopes” que tengan “aversión” a la interacción excesiva con otros módulos. Dicho de otro modo, debe diseñarse software de manera que cada módulo tenga una interfaz sencilla cuando se vea desde otras partes de la estructura del programa.
  • 22. Refinamiento El refinamiento es un proceso de elaboración. Se comienza con un enunciado de la función (o descripción de la información), definida en un nivel de abstracción alto. Es decir, el enunciado describe la función o información de manera conceptual, pero no dice nada sobre los trabajos internos de la función o de la estructura interna de la información. Después se trabaja sobre el enunciado original, dando más y más detalles conforme tiene lugar el refinamiento (elaboración) sucesivo.
  • 23. Rediseño ➔ “Es el proceso de cambiar un sistema de software en forma tal que no se altera el comportamiento externo del código [diseño], pero sí se mejora su estructura interna.” ➔ Cuando se rediseña el software, se examina el diseño existente en busca de redundancias, algoritmos ineficientes, estructuras de datos mal construidas y cualquier otra falla del diseño que pueda corregirse para obtener un diseño mejor. ➔ El resultado será un software más fácil de integrar, de probar y de mantener.
  • 24. Resumen y Conclusiones. El diseño del software comienza cuando termina la primera iteración de la ingeniería de requerimientos. El objetivo del diseño del software es aplicar un conjunto de principios, conceptos y prácticas que llevan al desarrollo de un sistema o producto de alta calidad. La meta del diseño es crear un modelo de software que implantará correctamente todos los requerimientos del usuario y causará placer a quienes lo utilicen.
  • 25. Resumen y Conclusiones. Los diseñadores del software deben elegir entre muchas alternativas de diseño y llegar a la solución que mejor se adapte a las necesidades de los participantes en el proyecto. El proceso de diseño va de una visión “panorámica” del software a otra más cercana que define el detalle requerido para implementar un sistema. Los conceptos de diseño han evolucionado en los primeros 60 años de trabajo de la ingeniería de software.