Este documento presenta los fundamentos básicos para el diseño de software. Explica que el diseño de software consiste en crear una especificación de un artefacto de software para cumplir unos objetivos utilizando componentes primitivos y sujeto a restricciones. Luego describe los fundamentos como la abstracción, refinamiento, modularidad, arquitectura, jerarquía de control, estructura de datos, procedimientos y ocultamiento de información. Finalmente, cubre temas como el diseño orientado a objetos, garantías de calidad y técnicas de
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
Fundamentos basicos del diseño de software
1. República Bolivariana de Venezuela
Ministerio del poder popular para la educación
Instituto universitario politécnico “Santiago Mariño”
Extensión Cabimas
“Inteligencia artificial
Integrante
Jesús Molleda
C.I:29.519.469
Carrera: ING.SISTEMA “47
28-06- 2020
2. INTRODUCCIÓN
En el diseño de software, se lleva a cabo, en diferentes pasos para
obtener un producto que cumpla con las especificaciones deseadas,
ajustándose a los parámetros establecidos por los medidas de calidad y
garantía, además de establecer sus ciclos de mantenimiento y
afinaciones reglamentarias para asegurar su perfecto funcionamiento.
El objetivo de los diseñadores es producir un modelo o representación
de una entidad que será construida después. En cualquier proceso de
diseño existen dos fases importantes: la diversificación y la
convergencia. La diversificación es la adquisición de un repertorio de
alternativas, de un material primitivo de diseño: componentes,
soluciones de componentes y conocimiento, todo dentro de catálogos,
de libros de texto y en la mente.
3. En que consiste el diseño de Software
Para poder explicar los fundamentos básicos, primero hay que saber
que es el diseño del Software
El diseño de software es el proceso por el que un agente crea
una especificación de un artefacto de software, pensado para
cumplir unos objetivos, utilizando un conjunto de componentes
primitivos y sujeto a restricciones. El diseño de software se
puede referir a "toda la actividad en conceptualizar, enmarcar,
implementar, poner en funcionamiento y, finalmente, modificar
sistemas complejos" o "la actividad que sigue a la especificación
de requisitos y precede a la programación, como en un proceso
de ingeniería de software estilizado.
Uno de los componentes principales del diseño de software es el
análisis de requisitos del software (ARS, del inglés SRA). Se trata de
una parte del proceso de desarrollo de software que enumera
especificaciones empleadas en ingeniería de software. Si el software
está "automatizado" o centrado en el usuario, el diseño de software
puede implicar también el diseño de experiencia de usuario que utiliza
un storyboard o guion gráfico para ayudar determinar esas
especificaciones. Si el software es completamente automatizado (es
decir, sin usuario o interfaz de usuario), un diseño de software puede
ser tan sencillo como un diagrama de flujo o un texto describiendo una
secuencia planeada de acontecimientos.
4. Importancia del diseño de 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.
5. Fundamentos basicos Para el diseño de Software
Una vez que se han establecido los requisitos del software, el diseño es la primera de tres actividades técnicas:
diseño, codificación y prueba. Cada actividad transforma la información de forma que al final se obtiene un
software validado. El diseño es técnicamente la parte central de la ingeniería del software. Durante el diseño se
desarrollan, revisan y se documentan los refinamientos progresivos de las estructuras de datos, de la estructura
del programa y de los detalles procedimentales. El diseño da como resultado
representaciones cuya calidad puede ser evaluada.
Los fundamentos del diseño ayudan al
desarrollador de software a responder a estas
preguntas:
• ¿Qué criterios puedo utilizar para dividir
el software en componentes individuales?
• ¿Cómo se separan los detalles de una
función o de la estructura de los datos de
la representación conceptual del software?
• ¿Existen criterios uniformes que definan
la calidad técnica de un
• diseño de software?
6. Fundamentos basicos para el diseño de Software
Los Fundamentos básicos del diseño de Software se dividen en:
ABSTRACCIÓN
REFINAMIENTO
MODULARIDAD
ARQUITECTURA DEL
SOFTWARE
JERARQUÍA DE
CONTROL
ESTRUCTURA DE
DATOS
PROCEDIMIENTOS
DEL SOFTWARE
OCULTAMIENTO DE
INFORMACIÓN
7. ABSTRACCIÓN
Fundamentos basicos para el diseño de Software
Cuando se considera una solución modular para cualquier problema, pueden formularse varios niveles de abstracción.
En el nivel superior de abstracción se establece una solución en términos generales, en lenguaje natural. En los niveles
inferiores de abstracción se utiliza una orientación más procedimental. Por último, en el nivel más bajo de abstracción, se
establece una solución, de forma que pueda implementarse directamente.
Cada paso de los procesos de la ingeniería del software es un refinamiento del nivel de abstracción de la solución
software. Conforme nos movemos desde los preliminares hacia el diseño detallado, se reduce el nivel de abstracción.
Finalmente, el nivel más bajo de abstracción se alcanza cuando se genera el código fuente.
Conforme nos movemos por los diferentes niveles de abstracción,
trabajamos para crear abstracciones de datos y de procedimientos.
• Una abstracción de datos es un conjunto de datos que describen un
objeto, como puede ser el DNI de una persona, que está compuesta
por conjunto de partes de información, pero que nos podemos
referir a todos los datos mencionando el nombre de la abstracción
de datos.
• Una abstracción procedimental es una determinada secuencia de
instrucciones que tienen una función limitada y específica, como
puede ser “mover objeto”, que supone la secuencia de pasos “abrir
pinza”, “mover hasta posición de destino 1”, “cerrar pinza”, “mover
hasta posición 2”, “abrir pinza”, “mover hasta posición origen”,
“cerrar pinza”.
8. REFINAMIENTO.
El refinamiento sucesivo es una primera estrategia de diseño
descendente propuesta por Niklaus Wirth. La arquitectura de un
programa se desarrolla en niveles sucesivos de refinamiento de los
detalles procedimentales. Se desarrolla una jerarquía descomponiendo
una función de forma sucesiva hasta que se llega a las sentencias del
lenguaje de programación.
Comenzamos con una declaración de la función
(o una descripción de la información) definida a
un nivel superior de abstracción. Es decir, la
declaración describe la función o la información
conceptualmente, pero no proporciona
información sobre el funcionamiento interno de
la función o sobre la estructura interna de la
información, sino que se va a realizando
sucesivamente, dando
cada vez más detalles.
Fundamentos basicos para el diseño de Software
9. MODULARIDAD.
El software se divide en componentes con nombres y ubicaciones determinados, que se denominan módulos y que se
integran para satisfacer los requisitos del proveedor.
El software monolítico (es decir, un programa grande compuesto de un solo módulo) no puede ser estudiado fácilmente por
un lector, ya que el número de caminos de control, el número de variables y la complejidad global harían el código
prácticamente indescifrable.
Mátemáticamente, esto se explica de esta forma: Sea C(x)
una función que defina la complejidad de un problema x, y
E(x) una función que defina el esfuerzo de desarrollo de un
problema x.
Para dos problemas p1 y p2, si
C(p1) > C(p2)
se deduce que
E(p1) > E(p2)
Además, se cumple que
C(p1 + p2) > C(p1) + C(p2)
y que
E(p1 + p2) > E(p1) + E(p2)
Esto nos lleva a la conclusión divide y vencerás, por tanto la
modularidad del software facilita el desarrollo del mismo,
pero hasta un cierto límite, porque si llegáramos a dividir el
problema en infinitos módulos, los módulos tendrían una
complejidad y un esfuerzo mucho menor, pero crecería el
coste asociado a la creación de interfaces entre los módulos,
Fundamentos basicos para el diseño de Software
10. ARQUITECTURA DEL SOFTWARE.
La arquitectura del software se refiere a dos características
importantes del software:
• La estructura jerárquica de los módulos del software
• La estructura de los datos
La arquitectura del software se obtiene mediante un proceso de partición, que relaciona los problemas del mundo real
(definidos en el análisis de requerimientos) con las soluciones software para resolver los problemas software.
Fundamentos basicos para el diseño de Software
11. JERARQUÍA DE CONTROL.
se le conoce como estructura del programa, y
representa la organización jerárquica de los
módulos de un programa e implica una jerarquía
de control. La representación de jerarquía se suele
representar con diagramas de árbol, aunque
también se pueden utilizar otros tipos de
notaciones.
• Profundidad: Número de niveles de control
• Anchura: Amplitud global del control
• Grado de salida: Número de módulos que controla un
módulo
• Grado de entrada: Número de módulos que controlan a
un módulo
• Visibilidad: Conjunto de componentes del programa
que pueden ser invocados por un módulo (Herencia en
entornos de POO). Todos los objetos serían visibles para
el módulo
• Conectividad: Conjunto de componentes a los que se
invoca directamente o se utilizan sus datos. (La ejecución
de un módulo puede suponer la ejecución de otro
módulo)
Fundamentos basicos para el diseño de Software
12. ESTRUCTURA DE DATOS.
La estructura de datos es una representación de la lógica que existe entre
los elementos individuales de información. Debido a que la estructura
de la información afectará de forma determinante al diseño
procedimiental, la estructura de datos es tan importante como la
estructura del programa en la representación de la arquitectura del
software.
La estructura de datos dicta la organización, los métodos de acceso, el
grado de asociatividad y las alternativas para el tratamiento de la
información. Las estructuras de datos clásicas son los elementos
escalares, los arrays, las listas y los árboles.
Fundamentos basicos para el diseño de Software
13. PROCEDIMIENTOS DEL SOFTWARE.
La estructura del programa define la jerarquía de control,
independientemente de las decisiones y secuencias de procesamiento. El
procedimiento del software se centra en los detalles de procesamiento de
cada módulo individual.
El procedimiento debe proporcionar una
especificación precisa del procesamiento,
incluyendo la secuencia de sucesos, los puntos
concretos de decisiones, la repetición de
operaciones e incluso la
organización/estructura de los datos.
Como existe una relación entre la estructura y
el procedimiento, ya que el procesamiento de
un módulo puede suponer la llamada a otros
módulos. A esto se le conoce como
representación procedimental del software por
capas.
Fundamentos basicos para el diseño de Software
14. OCULTAMIENTO DE INFORMACIÓN.
El concepto de modularidad nos lleva a esta pregunta: ¿cómo descomponer una solución de software
en el mejor conjunto de módulos? El principio de ocultamiento de la información sugiere que los
módulos deben especificarse de forma que la información (procedimientos y datos) contenida dentro
de un módulo sea inaccesible a otros módulos que no necesiten tal información.
Por tanto se trata de definir una serie de módulos independientes que se comuniquen sólo a través
de la información necesaria para realizar la función de software.
El uso de ocultamiento de información en el diseño facilitará las modificaciones, prueba y
mantenimiento del software, ya que como la mayoría de los datos y de los procedimientos están
ocultos a otras partes del software, será menos probable que los errores que se introduzcan durante
la modificación se propaguen a otros módulos del software.
Fundamentos basicos para el diseño de Software
15. Diseño Oriebtado a Objetos
El diseño orientado a objeto (DOO) Es una Fase de la Metodología Orientada a objetos para el
desarrollo de Software.
Su Uso induce a desarrolladores y programadores a pensar en términos de Objetos, en Vez de
procedimientos, cuando planifican el código.
Un objeto agrupa datos encapsulados y procedimientos para representar una entidad. La “interfaz del
Objeto”, esto es la forma de interactuar con el objeto, también se definen en esta etapa
Un programa orientado a objetos se caracteriza por la interacción de estos objetos.
16. GARANTÍAS DE CALIDAD DE SOFTWARE
Se define como concordancia con los requisitos
funcionales y de rendimiento explícitamente
establecidos, con los estándares de desarrollo
explícitamente documentados, y con las características
implícitas que se espera de todo software desarrollado
profesionalmente.
La garantía de calidad de software es una actividad de protección que se aplica a
lo largo de todo el proceso del software. La SQA engloba:
1. Un enfoque de gestión de calidad.
2. Tecnología de ingeniería del software efectiva (métodos y herramientas).
3. Revisiones técnicas formales que se aplican durante el proceso del software.
4. Una estrategia de prueba multi-‐escalada.
5. El control de la documentación del software y de los cambios realizados.
6. Un procedimiento que asegure un ajuste a los estándares de desarrollo
delsoftware (cuando sea posible).
7. Mecanismos de medición y de generación de informes.
17. TÉCNICAS DE PRUEBAS DE SOFTWARE
1) Prueba Unitaria: La prueba unitaria se aplica
en el elemento más pequeño de un sistema, cada
componente es testeado para asegurar que
funciona correctamente. Normalmente desarrolla
una única función cohesiva. La función de la
prueba unitaria es de analizar cada pequeña
parte y testear que funciona correctamente.
2) Prueba de Integración: La prueba de
integración es una extensión lógica de las
pruebas unitarias. Dos unidades que ya han
sido testeadas y combinadas en un
componente y su interface son testeadas
entre ellas.
3) Las pruebas funcionales: se basan en
asegurarse de que todas las características
funcionen de cabo a rabo. Por ejemplo, testear
que las características de un usuario se actualicen
cuando el usuario clicka en el botón de guardar.
Las pruebas funcionales testean una pequeña
parte de la funcionalidad del sistema entera. Se
aplica para verificar que las aplicaciones y
funcionalidades del software actúan
correctamente acorde a un diseño específico. Las
pruebas funcionales son elementos cruciales
para asegurar la calidad del producto software y
confirmar que actúa acorde a sus funciones tal
y como el usuario espera.
4) Pruebas de rendimiento: Y la última es la
prueba de rendimiento. En el desarrollo
desoftware, la prueba de rendimiento es una
práctica de test que determina la actuación
de un sistema en términos de respuesta y
estabilidad en una carga de trabajo en
particular. También puede servir para
investigar, medir, validar o verificar otros
atributos de calidad del sistema, como la
escalabilidad, seguridad y uso de recursos.
Las pruebas de rendimiento construye unos
estándares de actuación en la
implementación, diseño y arquitectura de un
sistema.
18. MANTENIMIENTO DE SOFTWARE
El mantenimiento preventivo de software es el proceso por el
cual se mejora y optimiza el software que se ha instalado, este
mantenimiento se realiza para la prevención de posibles
problemas que puedan llegar a surgir a medida que se utiliza el
computador.
La principal razón por la que se realiza este mantenimiento, en
estos días es el análisis en busca de virus, ya que estos; los “Virus”
son programas nocivos para el computador, ya que
causan una inestabilidad en el sistema, bajas en el rendimiento del
computador, pérdida de productividad, cortes en los sistemas y
probables errores en el mismo, tales que no se pueden corregir de
manera simple, sino mediante de una formateada
19. CONCLUSIÓN
El diseño de Software, suelen tomarse en cuenta muchos factoreres, tales como
sus objetivos funcionales, los parámetros a elegir y los recursos con los que se
deben interactuar dentro del entorno de desarrollo. También nos permitirá
tener una visión general antes de lanzarse a la codificación y construcción.
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. A raíz de esto es que se deben realizar diversas pruebas para
comprobar si el Software desarrollado cumple con los estándares de calidad y
garantía, además de establecer una conclusión mas firme y saber si cumplirá
con su objetivo de manera optima o necesitaría mas complementos y
desarrollo.
Dentro de las diversas pueba de software, se aprecia que son utilizadas, de
manera que los resultados sean contundentes y claros, ya sea de comprobar
datos, hasta realizar una prueba de estrés a todo en conjunto para saber si se
podrá con la tension exigida dentro del campo real donde sera aplicado como
solucion