SlideShare uma empresa Scribd logo
1 de 16
REPÚBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN UNIVERSITARIA,
CIENCIA Y TECNOLOGÍA
INSTITUTO UNIVERSITARIO POLITÉCNICO
“SANTIAGO MARIÑO”
EXTENSIÓN MATURÍN
FUNDAMENTOS BASICOS DEL
DISEÑO DE SOFTWARE
Profesor: Alumno:
Ing. Ángel Lugo Pedro Luces
C.I: 26.975.279
Maturín, Julio 2021
DISEÑO DE SOFTWARE
El diseño es definido en IEEE610.12 – 90 como tanto el proceso de definir la
arquitectura, la componentes, interfaces, y las otras características de un sistema o
componente como el resultado de eso se procesa. Visto como un proceso, el diseño de
software es la actividad de ciclo de vida de ingeniería de software en la que los
requerimientos de software son analizados para causar una descripción de la estructura
interna del software que servirá como base para su construcción. Más precisamente, un
diseño de software (el resultado) debe describir la arquitectura de software, es decir cómo
el software está en estado de descomposición y organizado en los componentes y las
interfaces entre esos componentes. También debe describir los componentes en un nivel
del detalle que permiten su construcción.
El diseño de software tiene un papel importante en el desarrollo de software, ya que
permite que ingenieros de software produzcan modelos distintos que moldean una clase
de plano de la solución a ser implementado. Podemos analizar y valorar a estos modelos
para determinar cuál de estos permitirá o no, cumplir con una gama de requerimientos.
IMPORTANCIA DEL DISEÑO DEL SOFTWARE
Una fase muy importante en el ciclo de vida de un proyecto es el Diseño del
Software. Se trata de una etapa fundamental y en muchas ocasiones la más importante
en el desarrollo de Software. Es el momento en que los profesionales tienen que aportar
sus conocimientos, experiencia y creatividad para llegar a una solución que cumpla con
los requerimientos funcionales y no funcionales establecidos en la fase de la toma de
requisitos.
El diseño del Software tiene un impacto directo sobre la capacidad del sistema para
cumplir o no el total de requerimientos establecidos. Un error de diseño en esta fase
puede acarrear problemas en todo el proyecto y provocar que este caiga en una espiral
de continuos cambios y de rehacer constantemente el trabajo.
ENTENDIMIENTO DE LOS REQUISITOS:
Debemos tener claros todos los requerimientos que afectan al Diseño del
Software. Estos pueden ser funcionales o no, pero deberán estar completamente
definidos, entendidos y documentados. Casi todos los problemas futuros comienzan
por no tener claros los requisitos. Estos deberán 100% claros y sin ambigüedades
PATRONES DE DISEÑO:
No deberíamos de inventar nada que ya esté inventado. Para ello debemos
conocer y aplicar los patrones de diseño. Estos son soluciones (ya probadas y
documentadas) a problemas de desarrollo conocidos.
CALIDAD:
La calidad del diseño deberá ir evaluándose mientras se va creando y no cuando
ya esté terminado.
MODULARIDAD:
El diseño deberá ser modular dividiéndose en estructuras que realicen funciones
específicas. Esto facilitará la reutilización. Además deberá realizarse de manera que
permita cambios y que permita la extensión de funcionalidades sin afectar a otras. Una
muy buena práctica para esto es exponer las funcionalidades a través de interfaces.
DISEÑOS AGILES:
No es necesario definir el diseño completo al inicio. Se puede partir de un diseño
general e ir construyéndolo a medida que avanza el desarrollo, de esta manera se
adaptará a cambios y evoluciones. Separar completamente el diseño de la codificación
tiene sus riesgos y siempre es mejor contar con profesionales que puedan diseñar y
codificar.
DOCUMENTACION:
Es fundamental poder comunicar el diseño a otras personas involucradas en el
desarrollo. La documentación se realiza por medio de distintas vistas de más alto o
bajo nivel. Estas vistas contienen normalmente diagramas además de información
que apoyan a su compresión. Como resumen podemos decir que para que el
desarrollo de software se realice con calidad, merece la pena esforzarse en un buen
Diseño del Software. El diseño es importante y deberá realizarse todos los días, esto
nos permitirá tener una visión general antes de lanzarse a la codificación y
construcción.
PRINCIPIOS BASADOS EN DISEÑO DE ATRIBUTOS DE CALIDAD:
Según M.A. Jackson (1975) “El comienzo de la sabiduría para un ingeniero de
software es reconocer la diferencia entre hacer que un programa funcione y
conseguir que lo haga del modo correcto”. El diseño de la arquitectura de software
es una fase muy importante en el ciclo de vida del software. Es absolutamente
necesario desempeñar ésta tarea con demasiada cautela, ya que un error en ésta fase
del desarrollo puede lastrar todo un proyecto y llevarlo a caer en una espiral
de constantes cambios. Existen algunas reglas las que podríamos considerar a la
hora de diseñar la arquitectura del sistema.
FUNCIONALIDAD:
Cada fragmento de software debe hacer la vida más fácil al usuario, la regla 80-
20 debe encajar aquí (por lo menos un 80 % del tiempo).
ORDEN:
Cada pieza de software debe estar organizada para encontrar fácilmente cada
fragmento de código, y estructurado de forma fácil para poder añadir un nuevo
fragmento.
TRAZABILIDAD:
Cada fragmento de software deberá registrar sus acciones en detalle,
preferentemente en diferentes niveles de detalles. Utilizar librerías de logging
facilitará tu trabajo.
SEGURIDAD:
Cada pieza de software no debe revelar sus debilidades de seguridad,
esto permitiría que se abusara maliciosamente del sistema, como inyección de código,
modificación de privilegios no autorizados, denegación de servicios del sistema, etc.
PORTABILIDAD:
Un software portable es mucho mejor que un software que necesitas instalar. Copiar
ficheros a un lugar es mucho más fácil que seguir un procedimiento de instalación.
REUSABILIDAD:
Cada fragmento de software debe ser lo más reutilizable posible (a menos que sea
aplicativo), y reutilizar otros componentes lo mayor posible.
Cuando desarrollas software, el factor de reusabilidad es crucial, especialmente
cuanto tienes plazos que cumplir. Divide tu código en varias librerías bien definidas,
que te permita utilizar en otros proyectos, por lo general te costará menos en
conceptos de tiempos, esfuerzo y dinero cuando varios proyectos están involucrados.
CUANDO NO REUTILIZAR:
Un caso donde no es bienvenida la reutilización es en un proceso muy específico.
Otro caso donde no se recomienda reutilizar, es la falta de entendimiento para
encontrar la forma correcta de construir código reutilizable. Por lo general, el código
en cuestión se escribió sólo una o dos veces.
EXTENSIBILIDAD:
Cada fragmento de software deberá ser lo más extensible posible, es decir, tener todos
los lugares posibles para añadir más funcionalidad. La extensibilidad te permite añadir
nuevas funcionalidades en el futuro. Existen muchos tipos de extensibilidad, tanto
internas como externas. Extensibilidades externas son las más importantes. El
desarrollador de software reutilizable deberá tener en cuenta la necesidad de otro
desarrollador para añadir funcionalidad o hacer las cosas un poco diferentes de su propio
punto de vista.
MEJORES PRACTICAS DE EXTENSIBILIDAD:
Una regla de oro de extensibilidad sería exponer la funcionalidad de siempre a través
de interfaces, y si desea que el usuario sea capaz de llevarlas a la introducción de los
objetos creados a tu librería, utilice el patrón de fábrica, y permitir al usuario el registro
de sus propios tipos.
ORDEN Y ESTRUCTURA:
Cuando desarrollas la estructura de tu proyecto, hazla significativamente separada
por la lógica, no en términos físicos. Piense en alguien que no conoce el proyecto y
necesita un fichero determinado, si no puede encontrarlo es que la estructura no sigue
una lógica determinada.
De la misma manera se pueden utilizar directivas de región. Si veo miles y miles de
métodos públicos, como podré encontrar lo que necesito realmente. Sería óptimo
separar las funcionalidades por región, considérese por el tipo de interacción con el
usuario, diseño de lógica, construcción e inicialización.
ESTRATEGIAS DE DISEÑO DE SOFTWARE:
Aquí se traducen los requisitos en una representación del software
realizándose en dos etapas:
Diseño preliminar: es la transformación de los requisitos en los datos y
arquitectura del software.
Diseño detallado: se ocupa del refinamiento y de la representación
arquitectónica que lleva una estructura de datos refinada y a las
representaciones algorítmicas del software.
ESTRUCTIRA DE DATOS:
Es una representación de la relación lógica existente entre los elementos
individuales de datos. Establece la organización, métodos de acceso, el grado
de asociatividad y las alternativas de procedimiento para la información.
PROCEDIMIENTO DEL SOFTWARE:
Se centra sobre los detalles de procesamiento de cada módulo individual. Debe
proporcionar una especificación precisa del procesamiento, incluyendo la secuencia
de sucesos, los puntos concretos de decisiones. Debe incluir referencias a todos los
módulos subordinados del módulo que describe.
OCULTAMIENTO DE LA INFORMACION:
Capacidad que obtienen los módulos de transmitir información contenida en
ellas pero solamente información necesaria. Implica que hay que definir un
conjunto de módulos independientes, que se comuniquen con los otros mediante la
información que sea necesaria para realizar la función del software.
Módulo secuenciales: ejecutan secuencialmente una tarea
Módulos incrementales: puede ser interrumpido antes de que terminen por el
software de la aplicación y restablece posteriormente su ejecución en el punto que
se interrumpió.
Módulo paralelo: se ejecuta a la vez que otro módulo en entorno
multiprocesadores.
ALGUNAS DESCRIPCIONES ESTRUCTURALES (VISTA ESTATICA):
Diagramas de clase y objeto: se usan para representar un conjunto de clase (y
objetos) y sus relaciones. Una notación antigua relacionada son los diagramas
entidad-relación usados para representar modelos conceptuales de datos
almacenados en sistemas de información.UML tiene esta notación
Diagramas de componentes: se usan para modelar la vista de implementación
estáticas de un sistema, es decir, cosas físicas (y sus relaciones) como ejecutables,
librerías, tablas, archivos y documentos. A pesar que si uso principal es durante la
construcción, estos diagramas pueden ser usados durante diseño, por ejemplo, para
documentar la estructura de un módulo.UML tiene esta notación
Cartas de estructuras o Diagrama de Estructura: se usan para describir la
estructura de llamado de un programa, es decir, cuál módulo es invocado por otro
módulo. Estos diagramas son inherentes de la aproximación de diseño orientado a
la función.
ALGUNAS DESCRIPCIONES CONDUCTUALES (VISTA DINAMICA)
Diagramas de actividad: se usan para mostrar el flujo de control de actividad
(ejecución continua no-atómica dentro de una máquina de estado) a otra actividad.
UML tiene esta notación.
Diagramas de interacción: se usan para mostrar las interacciones entre un grupo de
objetos. Estos diagramas vienen en dos tipos: diagramas de secuencia ponen el
énfasis en el ordenamiento temporal de los mensajes, mientras que los diagramas de
colaboración ponen el énfasis en los objetos, sus enlaces y los mensajes que
intercambian en estos enlaces. UML tiene esta notación.
Diagramas de flujo de datos: se usan para mostrar el flujo de datos entre un
conjunto de procesos.
!GRACIAS POR SU
ATENCION!

Mais conteúdo relacionado

Mais procurados

LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...
LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...
LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...Jesús Fernando Sing Rubio
 
Ensayo software
Ensayo softwareEnsayo software
Ensayo softwarehitwinenze
 
Fundamentos de ingenieria de software
Fundamentos de ingenieria de softwareFundamentos de ingenieria de software
Fundamentos de ingenieria de softwareITSPR
 
Ensayo sobre el Software y sus tipos
Ensayo sobre el Software y sus tiposEnsayo sobre el Software y sus tipos
Ensayo sobre el Software y sus tiposJordi Cuevas
 
01 software-desarrollo y clasificacion
01 software-desarrollo y clasificacion01 software-desarrollo y clasificacion
01 software-desarrollo y clasificacionRubén Mantilla Quiroz
 
Clasificacion del sotfware 2
Clasificacion del sotfware 2Clasificacion del sotfware 2
Clasificacion del sotfware 2santanadaniela
 
diferentes tipos de software en areas de trabajo
diferentes tipos de software en areas de trabajodiferentes tipos de software en areas de trabajo
diferentes tipos de software en areas de trabajoalondratrujillofernandez
 
Software tipos y característica formas de trabajo
Software tipos y característica formas de trabajoSoftware tipos y característica formas de trabajo
Software tipos y característica formas de trabajoColegio Metropolitano
 
Los diferentes tipos de software que se aplican en las areas de trabajo
Los diferentes tipos de software que se aplican en las areas de trabajoLos diferentes tipos de software que se aplican en las areas de trabajo
Los diferentes tipos de software que se aplican en las areas de trabajomiri_lr
 
Diferentes tipos de software utilizados en las áreas de trabajos
Diferentes tipos de software utilizados en las áreas de trabajosDiferentes tipos de software utilizados en las áreas de trabajos
Diferentes tipos de software utilizados en las áreas de trabajosPabloSorian
 
Categorías de software
Categorías de softwareCategorías de software
Categorías de softwarekitzia3
 
Riverodanna_presentacion
Riverodanna_presentacionRiverodanna_presentacion
Riverodanna_presentacionDannaRivero
 
Ensayo Tipos de Software
Ensayo Tipos de Software Ensayo Tipos de Software
Ensayo Tipos de Software lpgraterol
 
Victoria_Isabel_DiseñoDeSoftware
Victoria_Isabel_DiseñoDeSoftwareVictoria_Isabel_DiseñoDeSoftware
Victoria_Isabel_DiseñoDeSoftwareVictoria_isabel
 

Mais procurados (20)

LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...
LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...
LA INGENIERÍA INFORMÁTICA: Tipos de software utilizados en diferentes áreas y...
 
Ensayo software
Ensayo softwareEnsayo software
Ensayo software
 
Ensayo (El Software)
Ensayo (El Software)Ensayo (El Software)
Ensayo (El Software)
 
Fundamentos de ingenieria de software
Fundamentos de ingenieria de softwareFundamentos de ingenieria de software
Fundamentos de ingenieria de software
 
Ensayo sobre el Software y sus tipos
Ensayo sobre el Software y sus tiposEnsayo sobre el Software y sus tipos
Ensayo sobre el Software y sus tipos
 
01 software-desarrollo y clasificacion
01 software-desarrollo y clasificacion01 software-desarrollo y clasificacion
01 software-desarrollo y clasificacion
 
Clasificacion del sotfware 2
Clasificacion del sotfware 2Clasificacion del sotfware 2
Clasificacion del sotfware 2
 
Ensayo Jesus Guerrero
Ensayo Jesus GuerreroEnsayo Jesus Guerrero
Ensayo Jesus Guerrero
 
Ingeniería de Software: Conceptos y Retos
Ingeniería de Software: Conceptos y Retos Ingeniería de Software: Conceptos y Retos
Ingeniería de Software: Conceptos y Retos
 
Software
SoftwareSoftware
Software
 
diferentes tipos de software en areas de trabajo
diferentes tipos de software en areas de trabajodiferentes tipos de software en areas de trabajo
diferentes tipos de software en areas de trabajo
 
Software tipos y característica formas de trabajo
Software tipos y característica formas de trabajoSoftware tipos y característica formas de trabajo
Software tipos y característica formas de trabajo
 
Los diferentes tipos de software que se aplican en las areas de trabajo
Los diferentes tipos de software que se aplican en las areas de trabajoLos diferentes tipos de software que se aplican en las areas de trabajo
Los diferentes tipos de software que se aplican en las areas de trabajo
 
Diferentes tipos de software utilizados en las áreas de trabajos
Diferentes tipos de software utilizados en las áreas de trabajosDiferentes tipos de software utilizados en las áreas de trabajos
Diferentes tipos de software utilizados en las áreas de trabajos
 
Grupo 5
Grupo 5Grupo 5
Grupo 5
 
Software
SoftwareSoftware
Software
 
Categorías de software
Categorías de softwareCategorías de software
Categorías de software
 
Riverodanna_presentacion
Riverodanna_presentacionRiverodanna_presentacion
Riverodanna_presentacion
 
Ensayo Tipos de Software
Ensayo Tipos de Software Ensayo Tipos de Software
Ensayo Tipos de Software
 
Victoria_Isabel_DiseñoDeSoftware
Victoria_Isabel_DiseñoDeSoftwareVictoria_Isabel_DiseñoDeSoftware
Victoria_Isabel_DiseñoDeSoftware
 

Semelhante a Presentación Fundamentos Básicos del Diseño de Software Pedro Luces

Fundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de softwareFundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de softwaremichellvillegas3
 
Fundamentos del diseño de software
Fundamentos del diseño de software Fundamentos del diseño de software
Fundamentos del diseño de software AlessandreMndez
 
Fundamentos basicos del diseño de software
Fundamentos basicos del diseño de softwareFundamentos basicos del diseño de software
Fundamentos basicos del diseño de softwareJesús Molleda
 
Fundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de softwareFundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de softwareluis javier perez
 
Tecnicas.de.ingenieria.de.software
Tecnicas.de.ingenieria.de.softwareTecnicas.de.ingenieria.de.software
Tecnicas.de.ingenieria.de.softwarejuankexmisiodj
 
Unidad 1 Ingenieria de software
Unidad 1 Ingenieria de softwareUnidad 1 Ingenieria de software
Unidad 1 Ingenieria de softwareJahiro Bojorquez
 
Fundamentos de diseño de software
Fundamentos de diseño de softwareFundamentos de diseño de software
Fundamentos de diseño de softwareLuis Jesus Curbata
 
Fundamentos del diseno de software jesus marcano
Fundamentos del diseno de software   jesus marcanoFundamentos del diseno de software   jesus marcano
Fundamentos del diseno de software jesus marcanoGalderIL057
 
Presentanción 20% 3er corte
Presentanción 20% 3er cortePresentanción 20% 3er corte
Presentanción 20% 3er corteEduardoRauseo1
 
Tarea semana 1
Tarea semana 1Tarea semana 1
Tarea semana 1preciadoag
 
Análisis del Proyecto de Software
Análisis del Proyecto de SoftwareAnálisis del Proyecto de Software
Análisis del Proyecto de SoftwareMaricela Ramirez
 
Fundamentos para el diseño de un software
Fundamentos para el diseño de un softwareFundamentos para el diseño de un software
Fundamentos para el diseño de un softwaressalzar
 
Edwin alexande mata escobar
Edwin alexande mata escobarEdwin alexande mata escobar
Edwin alexande mata escobarEdwin Alexander
 

Semelhante a Presentación Fundamentos Básicos del Diseño de Software Pedro Luces (20)

Fundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de softwareFundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de software
 
Diseño de software
Diseño de softwareDiseño de software
Diseño de software
 
Fundamentos del diseño de software
Fundamentos del diseño de software Fundamentos del diseño de software
Fundamentos del diseño de software
 
Fundamentos basicos del diseño de software
Fundamentos basicos del diseño de softwareFundamentos basicos del diseño de software
Fundamentos basicos del diseño de software
 
Fundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de softwareFundamentos básicos para el diseño de software
Fundamentos básicos para el diseño de software
 
Tecnicas.de.ingenieria.de.software
Tecnicas.de.ingenieria.de.softwareTecnicas.de.ingenieria.de.software
Tecnicas.de.ingenieria.de.software
 
Fundamentos de ingenieria del software (2)
Fundamentos de ingenieria del software (2)Fundamentos de ingenieria del software (2)
Fundamentos de ingenieria del software (2)
 
Unidad 1 Ingenieria de software
Unidad 1 Ingenieria de softwareUnidad 1 Ingenieria de software
Unidad 1 Ingenieria de software
 
Juan velasquez
Juan velasquezJuan velasquez
Juan velasquez
 
Fundamentos de diseño de software
Fundamentos de diseño de softwareFundamentos de diseño de software
Fundamentos de diseño de software
 
Prueba de dominio
Prueba de dominioPrueba de dominio
Prueba de dominio
 
Fundamentos del diseno de software jesus marcano
Fundamentos del diseno de software   jesus marcanoFundamentos del diseno de software   jesus marcano
Fundamentos del diseno de software jesus marcano
 
Adrian adrianza
Adrian adrianzaAdrian adrianza
Adrian adrianza
 
Fundamentos
FundamentosFundamentos
Fundamentos
 
Presentanción 20% 3er corte
Presentanción 20% 3er cortePresentanción 20% 3er corte
Presentanción 20% 3er corte
 
Tarea semana 1
Tarea semana 1Tarea semana 1
Tarea semana 1
 
Tareasemana1
Tareasemana1Tareasemana1
Tareasemana1
 
Análisis del Proyecto de Software
Análisis del Proyecto de SoftwareAnálisis del Proyecto de Software
Análisis del Proyecto de Software
 
Fundamentos para el diseño de un software
Fundamentos para el diseño de un softwareFundamentos para el diseño de un software
Fundamentos para el diseño de un software
 
Edwin alexande mata escobar
Edwin alexande mata escobarEdwin alexande mata escobar
Edwin alexande mata escobar
 

Presentación Fundamentos Básicos del Diseño de Software Pedro Luces

  • 1. REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN UNIVERSITARIA, CIENCIA Y TECNOLOGÍA INSTITUTO UNIVERSITARIO POLITÉCNICO “SANTIAGO MARIÑO” EXTENSIÓN MATURÍN FUNDAMENTOS BASICOS DEL DISEÑO DE SOFTWARE Profesor: Alumno: Ing. Ángel Lugo Pedro Luces C.I: 26.975.279 Maturín, Julio 2021
  • 2. DISEÑO DE SOFTWARE El diseño es definido en IEEE610.12 – 90 como tanto el proceso de definir la arquitectura, la componentes, interfaces, y las otras características de un sistema o componente como el resultado de eso se procesa. Visto como un proceso, el diseño de software es la actividad de ciclo de vida de ingeniería de software en la que los requerimientos de software son analizados para causar una descripción de la estructura interna del software que servirá como base para su construcción. Más precisamente, un diseño de software (el resultado) debe describir la arquitectura de software, es decir cómo el software está en estado de descomposición y organizado en los componentes y las interfaces entre esos componentes. También debe describir los componentes en un nivel del detalle que permiten su construcción. El diseño de software tiene un papel importante en el desarrollo de software, ya que permite que ingenieros de software produzcan modelos distintos que moldean una clase de plano de la solución a ser implementado. Podemos analizar y valorar a estos modelos para determinar cuál de estos permitirá o no, cumplir con una gama de requerimientos.
  • 3. IMPORTANCIA DEL DISEÑO DEL SOFTWARE Una fase muy importante en el ciclo de vida de un proyecto es el Diseño del Software. Se trata de una etapa fundamental y en muchas ocasiones la más importante en el desarrollo de Software. Es el momento en que los profesionales tienen que aportar sus conocimientos, experiencia y creatividad para llegar a una solución que cumpla con los requerimientos funcionales y no funcionales establecidos en la fase de la toma de requisitos. El diseño del Software tiene un impacto directo sobre la capacidad del sistema para cumplir o no el total de requerimientos establecidos. Un error de diseño en esta fase puede acarrear problemas en todo el proyecto y provocar que este caiga en una espiral de continuos cambios y de rehacer constantemente el trabajo.
  • 4. ENTENDIMIENTO DE LOS REQUISITOS: Debemos tener claros todos los requerimientos que afectan al Diseño del Software. Estos pueden ser funcionales o no, pero deberán estar completamente definidos, entendidos y documentados. Casi todos los problemas futuros comienzan por no tener claros los requisitos. Estos deberán 100% claros y sin ambigüedades PATRONES DE DISEÑO: No deberíamos de inventar nada que ya esté inventado. Para ello debemos conocer y aplicar los patrones de diseño. Estos son soluciones (ya probadas y documentadas) a problemas de desarrollo conocidos. CALIDAD: La calidad del diseño deberá ir evaluándose mientras se va creando y no cuando ya esté terminado.
  • 5. MODULARIDAD: El diseño deberá ser modular dividiéndose en estructuras que realicen funciones específicas. Esto facilitará la reutilización. Además deberá realizarse de manera que permita cambios y que permita la extensión de funcionalidades sin afectar a otras. Una muy buena práctica para esto es exponer las funcionalidades a través de interfaces. DISEÑOS AGILES: No es necesario definir el diseño completo al inicio. Se puede partir de un diseño general e ir construyéndolo a medida que avanza el desarrollo, de esta manera se adaptará a cambios y evoluciones. Separar completamente el diseño de la codificación tiene sus riesgos y siempre es mejor contar con profesionales que puedan diseñar y codificar.
  • 6. DOCUMENTACION: Es fundamental poder comunicar el diseño a otras personas involucradas en el desarrollo. La documentación se realiza por medio de distintas vistas de más alto o bajo nivel. Estas vistas contienen normalmente diagramas además de información que apoyan a su compresión. Como resumen podemos decir que para que el desarrollo de software se realice con calidad, merece la pena esforzarse en un buen Diseño del Software. El diseño es importante y deberá realizarse todos los días, esto nos permitirá tener una visión general antes de lanzarse a la codificación y construcción. PRINCIPIOS BASADOS EN DISEÑO DE ATRIBUTOS DE CALIDAD: Según M.A. Jackson (1975) “El comienzo de la sabiduría para un ingeniero de software es reconocer la diferencia entre hacer que un programa funcione y conseguir que lo haga del modo correcto”. El diseño de la arquitectura de software es una fase muy importante en el ciclo de vida del software. Es absolutamente necesario desempeñar ésta tarea con demasiada cautela, ya que un error en ésta fase del desarrollo puede lastrar todo un proyecto y llevarlo a caer en una espiral de constantes cambios. Existen algunas reglas las que podríamos considerar a la hora de diseñar la arquitectura del sistema.
  • 7. FUNCIONALIDAD: Cada fragmento de software debe hacer la vida más fácil al usuario, la regla 80- 20 debe encajar aquí (por lo menos un 80 % del tiempo). ORDEN: Cada pieza de software debe estar organizada para encontrar fácilmente cada fragmento de código, y estructurado de forma fácil para poder añadir un nuevo fragmento. TRAZABILIDAD: Cada fragmento de software deberá registrar sus acciones en detalle, preferentemente en diferentes niveles de detalles. Utilizar librerías de logging facilitará tu trabajo.
  • 8. SEGURIDAD: Cada pieza de software no debe revelar sus debilidades de seguridad, esto permitiría que se abusara maliciosamente del sistema, como inyección de código, modificación de privilegios no autorizados, denegación de servicios del sistema, etc. PORTABILIDAD: Un software portable es mucho mejor que un software que necesitas instalar. Copiar ficheros a un lugar es mucho más fácil que seguir un procedimiento de instalación.
  • 9. REUSABILIDAD: Cada fragmento de software debe ser lo más reutilizable posible (a menos que sea aplicativo), y reutilizar otros componentes lo mayor posible. Cuando desarrollas software, el factor de reusabilidad es crucial, especialmente cuanto tienes plazos que cumplir. Divide tu código en varias librerías bien definidas, que te permita utilizar en otros proyectos, por lo general te costará menos en conceptos de tiempos, esfuerzo y dinero cuando varios proyectos están involucrados. CUANDO NO REUTILIZAR: Un caso donde no es bienvenida la reutilización es en un proceso muy específico. Otro caso donde no se recomienda reutilizar, es la falta de entendimiento para encontrar la forma correcta de construir código reutilizable. Por lo general, el código en cuestión se escribió sólo una o dos veces.
  • 10. EXTENSIBILIDAD: Cada fragmento de software deberá ser lo más extensible posible, es decir, tener todos los lugares posibles para añadir más funcionalidad. La extensibilidad te permite añadir nuevas funcionalidades en el futuro. Existen muchos tipos de extensibilidad, tanto internas como externas. Extensibilidades externas son las más importantes. El desarrollador de software reutilizable deberá tener en cuenta la necesidad de otro desarrollador para añadir funcionalidad o hacer las cosas un poco diferentes de su propio punto de vista. MEJORES PRACTICAS DE EXTENSIBILIDAD: Una regla de oro de extensibilidad sería exponer la funcionalidad de siempre a través de interfaces, y si desea que el usuario sea capaz de llevarlas a la introducción de los objetos creados a tu librería, utilice el patrón de fábrica, y permitir al usuario el registro de sus propios tipos.
  • 11. ORDEN Y ESTRUCTURA: Cuando desarrollas la estructura de tu proyecto, hazla significativamente separada por la lógica, no en términos físicos. Piense en alguien que no conoce el proyecto y necesita un fichero determinado, si no puede encontrarlo es que la estructura no sigue una lógica determinada. De la misma manera se pueden utilizar directivas de región. Si veo miles y miles de métodos públicos, como podré encontrar lo que necesito realmente. Sería óptimo separar las funcionalidades por región, considérese por el tipo de interacción con el usuario, diseño de lógica, construcción e inicialización.
  • 12. ESTRATEGIAS DE DISEÑO DE SOFTWARE: Aquí se traducen los requisitos en una representación del software realizándose en dos etapas: Diseño preliminar: es la transformación de los requisitos en los datos y arquitectura del software. Diseño detallado: se ocupa del refinamiento y de la representación arquitectónica que lleva una estructura de datos refinada y a las representaciones algorítmicas del software. ESTRUCTIRA DE DATOS: Es una representación de la relación lógica existente entre los elementos individuales de datos. Establece la organización, métodos de acceso, el grado de asociatividad y las alternativas de procedimiento para la información.
  • 13. PROCEDIMIENTO DEL SOFTWARE: Se centra sobre los detalles de procesamiento de cada módulo individual. Debe proporcionar una especificación precisa del procesamiento, incluyendo la secuencia de sucesos, los puntos concretos de decisiones. Debe incluir referencias a todos los módulos subordinados del módulo que describe. OCULTAMIENTO DE LA INFORMACION: Capacidad que obtienen los módulos de transmitir información contenida en ellas pero solamente información necesaria. Implica que hay que definir un conjunto de módulos independientes, que se comuniquen con los otros mediante la información que sea necesaria para realizar la función del software. Módulo secuenciales: ejecutan secuencialmente una tarea Módulos incrementales: puede ser interrumpido antes de que terminen por el software de la aplicación y restablece posteriormente su ejecución en el punto que se interrumpió. Módulo paralelo: se ejecuta a la vez que otro módulo en entorno multiprocesadores.
  • 14. ALGUNAS DESCRIPCIONES ESTRUCTURALES (VISTA ESTATICA): Diagramas de clase y objeto: se usan para representar un conjunto de clase (y objetos) y sus relaciones. Una notación antigua relacionada son los diagramas entidad-relación usados para representar modelos conceptuales de datos almacenados en sistemas de información.UML tiene esta notación Diagramas de componentes: se usan para modelar la vista de implementación estáticas de un sistema, es decir, cosas físicas (y sus relaciones) como ejecutables, librerías, tablas, archivos y documentos. A pesar que si uso principal es durante la construcción, estos diagramas pueden ser usados durante diseño, por ejemplo, para documentar la estructura de un módulo.UML tiene esta notación Cartas de estructuras o Diagrama de Estructura: se usan para describir la estructura de llamado de un programa, es decir, cuál módulo es invocado por otro módulo. Estos diagramas son inherentes de la aproximación de diseño orientado a la función.
  • 15. ALGUNAS DESCRIPCIONES CONDUCTUALES (VISTA DINAMICA) Diagramas de actividad: se usan para mostrar el flujo de control de actividad (ejecución continua no-atómica dentro de una máquina de estado) a otra actividad. UML tiene esta notación. Diagramas de interacción: se usan para mostrar las interacciones entre un grupo de objetos. Estos diagramas vienen en dos tipos: diagramas de secuencia ponen el énfasis en el ordenamiento temporal de los mensajes, mientras que los diagramas de colaboración ponen el énfasis en los objetos, sus enlaces y los mensajes que intercambian en estos enlaces. UML tiene esta notación. Diagramas de flujo de datos: se usan para mostrar el flujo de datos entre un conjunto de procesos.