viernes, 3 de octubre de 2014

expocicion

 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 

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.