fundamentos de diseño
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?
ABSTRACCIÓN
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. Fundamentos del diseño de software
5
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”.
Estas abstracciones permiten al diseñador representar un objeto a diferentes
niveles de detalle.
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.
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)
que es el diseño de software
El diseño es el primer paso de la fase de desarrollo de cualquier producto o sistema de ingeniería.
El diseño es la única forma mediante la que podemos traducir con precisión los requisitos del cliente en un producto o sistema acabado. El diseño de software es la base de todas las partes posteriores del desarrollo y de la fase de prueba
importancia del diseño de software
Sin diseño, nos arriesgamos a construir un sistema inestable, un sistema que
falle cuando se realicen pequeños cambios, un sistema que sea difícil de
probar, un sistema cuya calidad no pueda ser evaluada hasta más adelante,
cuando quede poco tiempo y ya sea haya gastado mucho dinero.
conceptos básicos de diseño
Definición de diseño según Taylor
“Proceso de aplicar distintas técnicas y principios con el propósito de definir un
dispositivo, proceso o sistema con los suficientes detalles como para permitir
su realización física”
El diseño de software, al igual que los métodos de diseño de todas las
ingenierías, cambian continuamente al aparecer nuevos métodos, mejores
análisis y ampliar los conocimientos. El problema es que el diseño de software
se encuentra en una etapa relativamente temprana en su evolución. La idea de
realizar diseño de software en lugar de “programar”, surgió a principios de los
años 60, por lo que a las metodologías de diseño les falta la profundidad y la
flexibilidad que tiene el diseño en otras ingenierías. Pero, ya existen técnicas
de diseño de software para poder evaluar la calidad 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.
Mediante algunas metodologías de diseño se realiza el diseño de datos, el diseño arquitectónico y el diseño procedimental.
- El diseño de datos transforma el modelo de campo de información, creado durante el análisis, en las estructuras de datos que se van a requerir para implementar el software.
- El diseño arquitectónico define las relaciones entre los principales elementos estructurales del programa.
- El diseño procedimental transforma los elementos estructurales en una descripción procedimental del software.
trazabilidad de los requisitos en el diseño
A
La trazabilidad se define como la habilidad para describir y seguir la vida de un requisito en ambos sentidos, hacia sus orígenes o hacia su implementación, a través de todas las especificaciones generadas durante el proceso de desarrollo. Sin embargo es una práctica que los equipos de desarrollo les cuestan aplicar, debido a que no existe una cultura para ejercer la trazabilidad, se considera un asunto difícil de implementar y esta visto como una pérdida de tiempo, ocasionando como consecuencia que se pierda el rastro del requisito y en muchos casos pueden verse afectados otros requisitos ya que pueden existir dependencias entre ellos.
Existen diferentes técnicas y modelos para soportar la práctica de la trazabilidad en el proceso de desarrollo de software. La más común de las técnicas que se puede aplicar a cualquier modelo de desarrollo, es la construcción de matrices de trazado. Las matrices van a hacer posible el análisis de la correlación entre elementos de un mismo modelo y entre diferentes niveles de abstracción. Otro ejemplo de técnicas de trazabilidad es la matriz CRUD (Create, Retrieve, Update and Delete), la cual va a permitir analizar las operaciones que se deben de realizar sobre la base de datos, a partir de la correlación entre tablas, funciones y otros elementos de la base de datos.
La construcción de estas matrices trae beneficios más allá de un simple registro de las dependencias entre los elementos del sistema. A partir de ellas es posible analizar ciertas características como, el nivel de especificación de requisitos, el nivel de participación de los usuarios, costo asociado a cada fase de desarrollo, la arquitectura requerida, plan de pruebas etc.
1. En el proceso de trazabilidad consta de tres métodos importantes que son:
Definición de Trazos: se relaciona con la especificación de los objetos auditables y sus trazas.
2. Producción de Trazos: se refiere a la captura de las trazas, usualmente mediante un registro explícito de los objetos, relaciones y la extracción.
3. Extracción de Trazos: se relaciona con el proceso actual de la traza, la recuperación de información y auditorías.
Para automatizar cualquier parte de un proceso es necesario definir un modelo de trazabilidad, el modelo es el componente central alrededor del cual los procedimientos, métodos y herramientas de trazado se organizan. Un modelo debe de cubrir los tres aspectos importantes mencionados en el punto anterior, definir, producir y extraer los trazos con la finalidad de crear un modelo de trazabilidad, centrado en la historia de usuario.
A continuación se citan los modelos para el proceso de trazabilidad:
1. Modelo de Estructura Contributiva: este tipo de modelo trabaja con la trazabilidad de requerimientos basados en personas, transforma en “trazables”, las fuentes humanas de los requerimientos, la información relacionada con los requerimientos y los requerimientos relacionados con el trabajo personal.
2. Modelo Centrado de documentos: este modelo representa los trazos como relaciones entre los diferentes tipos de documentos, un ejemplo puede ser un modelo de hipertexto. Este tipo de modelo va a garantizar que se utilice y se recupere la información en su formato digital.
3. Modelo Guiado por BD: este modelo es utilizado para registrar la información de los trazos en BD para su futura extracción, la ventaja de este modelo es que va a facilitar su utilización a una gran diversidad de usuarios y entornos, seleccionando los elementos y trazos más importantes para cada ocasión.
Implementar en el desarrollo de software, herramientas para la gestión de la trazabilidad de requisitos es clave para mejorar la productividad como la calidad en el desarrollo de un proyecto de software. La gran mayoría de la herramientas de gestión de requisitos que existen en el mercado son sofisticadas, complejas, sensitivos al tiempo, manejan una dependencia interna y pueden estar evolucionando continuamente.
La mayoría de las herramientas que existen en el mercado, gestionan requisitos, pero pocas se especializan en gestionar la trazabilidad de los requerimientos.
Según una encuesta realizada por el INCOSE las herramientas para el análisis de la trazabilidad debe de cumplir con las siguientes funciones:
a) Identificar requisitos no relacionados: la herramienta debe de tener la capacidad para crear, detectar vínculos en la trazabilidad de requisitos y relaciones sospechosas para descubrir requisitos huérfanos.
b) Seguimiento de las relaciones: permitir la visibilidad de los vínculos desde el origen hasta la ejecución, le permite al usuario tener la capacidad de seguir los enlaces para ver de dónde viene y a dónde va el requisito.
c) Verificación de requisitos: a lo largo de la vida de un proyecto, la herramienta de gestión de requisitos se van a utilizar para verificar que los requisitos se han cumplido.
d) Requisitos de verificación del desempeño de los elementos del sistema: una vez que los requisitos se han asignado a los elementos del sistema, la herramienta de gestión de requisitos debe de apoyar la verificación de los requisitos y presentar un informe acerca de las verificaciones.
atributos de calidad
Un diseño debe tener una organización jerárquica.
2) Un diseño debe ser modular, es decir, el software debe estar dividido
en elementos que realicen funciones específicas.
3) Un diseño debe tener representaciones distintas y separadas de los
datos y de los procedimientos.
4) Un diseño debe llevar a módulos que exhiban características
funcionales independientes.
5) Un diseño debe conducir a interfaces que reduzcan la complejidad de
las conexiones entre los módulos y el exterior.
6) Un diseño debe obtenerse mediante un método que sea reproducible
y que esté dirigido por la información obtenida durante el análisis de
requerimientos.
Un buen diseño de software no se consigue fácilmente, resultando de la
aplicación de principios fundamentales de diseño, de una metodología
sistemática y de una revisión exhaustiva.
participantes en el diseño
A
estándares de calidad
A lo largo del proceso de diseño, la calidad del diseño se evalúa mediante una
serie de revisiones técnicas formales (RTF) que son una actividad de
garantía del software cuyos objetivos son:
1) Descubrir los errores en la función, la lógica o la implementación de cualquier representación del software.
2) Verificar que el software alcanza sus requisitos.
3) Garantizar que el software se ha representado según los estándares establecidos.
4) Conseguir un software desarrollado de forma uniforme.
5) Hacer que los proyectos sean manejables.
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?
ABSTRACCIÓN
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. Fundamentos del diseño de software
5
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”.
Estas abstracciones permiten al diseñador representar un objeto a diferentes
niveles de detalle.
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.
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)
El diseño es el primer paso de la fase de desarrollo de cualquier producto o sistema de ingeniería.
El diseño es la única forma mediante la que podemos traducir con precisión los requisitos del cliente en un producto o sistema acabado. El diseño de software es la base de todas las partes posteriores del desarrollo y de la fase de prueba
importancia del diseño de software
Sin diseño, nos arriesgamos a construir un sistema inestable, un sistema que
probar, un sistema cuya calidad no pueda ser evaluada hasta más adelante,
cuando quede poco tiempo y ya sea haya gastado mucho dinero.
conceptos básicos de diseño
Definición de diseño según Taylor
“Proceso de aplicar distintas técnicas y principios con el propósito de definir un
dispositivo, proceso o sistema con los suficientes detalles como para permitir
su realización física”
El diseño de software, al igual que los métodos de diseño de todas las
ingenierías, cambian continuamente al aparecer nuevos métodos, mejores
análisis y ampliar los conocimientos. El problema es que el diseño de software
se encuentra en una etapa relativamente temprana en su evolución. La idea de
realizar diseño de software en lugar de “programar”, surgió a principios de los
años 60, por lo que a las metodologías de diseño les falta la profundidad y la
flexibilidad que tiene el diseño en otras ingenierías. Pero, ya existen técnicas
de diseño de software para poder evaluar la calidad del software.
El diseño es la
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.
Mediante algunas metodologías de diseño se realiza el diseño de datos, el diseño arquitectónico y el diseño procedimental.
- El diseño de datos transforma el modelo de campo de información, creado durante el análisis, en las estructuras de datos que se van a requerir para implementar el software.
- El diseño arquitectónico define las relaciones entre los principales elementos estructurales del programa.
- El diseño procedimental transforma los elementos estructurales en una descripción procedimental del software.
trazabilidad de los requisitos en el diseño
La trazabilidad se define como la habilidad para describir y seguir la vida de un requisito en ambos sentidos, hacia sus orígenes o hacia su implementación, a través de todas las especificaciones generadas durante el proceso de desarrollo. Sin embargo es una práctica que los equipos de desarrollo les cuestan aplicar, debido a que no existe una cultura para ejercer la trazabilidad, se considera un asunto difícil de implementar y esta visto como una pérdida de tiempo, ocasionando como consecuencia que se pierda el rastro del requisito y en muchos casos pueden verse afectados otros requisitos ya que pueden existir dependencias entre ellos.
Existen diferentes técnicas y modelos para soportar la práctica de la trazabilidad en el proceso de desarrollo de software. La más común de las técnicas que se puede aplicar a cualquier modelo de desarrollo, es la construcción de matrices de trazado. Las matrices van a hacer posible el análisis de la correlación entre elementos de un mismo modelo y entre diferentes niveles de abstracción. Otro ejemplo de técnicas de trazabilidad es la matriz CRUD (Create, Retrieve, Update and Delete), la cual va a permitir analizar las operaciones que se deben de realizar sobre la base de datos, a partir de la correlación entre tablas, funciones y otros elementos de la base de datos.
La construcción de estas matrices trae beneficios más allá de un simple registro de las dependencias entre los elementos del sistema. A partir de ellas es posible analizar ciertas características como, el nivel de especificación de requisitos, el nivel de participación de los usuarios, costo asociado a cada fase de desarrollo, la arquitectura requerida, plan de pruebas etc.
1. En el proceso de trazabilidad consta de tres métodos importantes que son:
Definición de Trazos: se relaciona con la especificación de los objetos auditables y sus trazas.
Definición de Trazos: se relaciona con la especificación de los objetos auditables y sus trazas.
2. Producción de Trazos: se refiere a la captura de las trazas, usualmente mediante un registro explícito de los objetos, relaciones y la extracción.
3. Extracción de Trazos: se relaciona con el proceso actual de la traza, la recuperación de información y auditorías.
Para automatizar cualquier parte de un proceso es necesario definir un modelo de trazabilidad, el modelo es el componente central alrededor del cual los procedimientos, métodos y herramientas de trazado se organizan. Un modelo debe de cubrir los tres aspectos importantes mencionados en el punto anterior, definir, producir y extraer los trazos con la finalidad de crear un modelo de trazabilidad, centrado en la historia de usuario.
A continuación se citan los modelos para el proceso de trazabilidad:
1. Modelo de Estructura Contributiva: este tipo de modelo trabaja con la trazabilidad de requerimientos basados en personas, transforma en “trazables”, las fuentes humanas de los requerimientos, la información relacionada con los requerimientos y los requerimientos relacionados con el trabajo personal.
2. Modelo Centrado de documentos: este modelo representa los trazos como relaciones entre los diferentes tipos de documentos, un ejemplo puede ser un modelo de hipertexto. Este tipo de modelo va a garantizar que se utilice y se recupere la información en su formato digital.
3. Modelo Guiado por BD: este modelo es utilizado para registrar la información de los trazos en BD para su futura extracción, la ventaja de este modelo es que va a facilitar su utilización a una gran diversidad de usuarios y entornos, seleccionando los elementos y trazos más importantes para cada ocasión.
Implementar en el desarrollo de software, herramientas para la gestión de la trazabilidad de requisitos es clave para mejorar la productividad como la calidad en el desarrollo de un proyecto de software. La gran mayoría de la herramientas de gestión de requisitos que existen en el mercado son sofisticadas, complejas, sensitivos al tiempo, manejan una dependencia interna y pueden estar evolucionando continuamente.
La mayoría de las herramientas que existen en el mercado, gestionan requisitos, pero pocas se especializan en gestionar la trazabilidad de los requerimientos.
Según una encuesta realizada por el INCOSE las herramientas para el análisis de la trazabilidad debe de cumplir con las siguientes funciones:
a) Identificar requisitos no relacionados: la herramienta debe de tener la capacidad para crear, detectar vínculos en la trazabilidad de requisitos y relaciones sospechosas para descubrir requisitos huérfanos.
b) Seguimiento de las relaciones: permitir la visibilidad de los vínculos desde el origen hasta la ejecución, le permite al usuario tener la capacidad de seguir los enlaces para ver de dónde viene y a dónde va el requisito.
c) Verificación de requisitos: a lo largo de la vida de un proyecto, la herramienta de gestión de requisitos se van a utilizar para verificar que los requisitos se han cumplido.
d) Requisitos de verificación del desempeño de los elementos del sistema: una vez que los requisitos se han asignado a los elementos del sistema, la herramienta de gestión de requisitos debe de apoyar la verificación de los requisitos y presentar un informe acerca de las verificaciones.
atributos de calidad
Un diseño debe tener una organización jerárquica.
2) Un diseño debe ser modular, es decir, el software debe estar dividido
en elementos que realicen funciones específicas.
3) Un diseño debe tener representaciones distintas y separadas de los
datos y de los procedimientos.
4) Un diseño debe llevar a módulos que exhiban características
funcionales independientes.
5) Un diseño debe conducir a interfaces que reduzcan la complejidad de
las conexiones entre los módulos y el exterior.
6) Un diseño debe obtenerse mediante un método que sea reproducible
y que esté dirigido por la información obtenida durante el análisis de
requerimientos.
Un buen diseño de software no se consigue fácilmente, resultando de la
aplicación de principios fundamentales de diseño, de una metodología
sistemática y de una revisión exhaustiva.
A
estándares de calidad
A lo largo del proceso de diseño, la calidad del diseño se evalúa mediante una
serie de revisiones técnicas formales (RTF) que son una actividad de
garantía del software cuyos objetivos son:
1) Descubrir los errores en la función, la lógica o la implementación de cualquier representación del software.
2) Verificar que el software alcanza sus requisitos.
3) Garantizar que el software se ha representado según los estándares establecidos.
4) Conseguir un software desarrollado de forma uniforme.
5) Hacer que los proyectos sean manejables.