Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El software no es el nico campo donde el diseo se encuentra inmiscuido. En general podemos ver el
diseo como una forma para resolucin de problemas. El problema sin solucin definitiva es interesante
en trminos de comprensin del diseo. Un nmero de otras nociones y conceptos son tambin de
inters en la comprensin del diseo en su sentido general, objetivos, limitaciones, alternativas,
representaciones y soluciones
Diseo Arquitectnico.
El diseo arquitectnico puede representarse al usar uno o ms de muchos modelos diferentes. Los
modelos estructurales representan la arquitectura como una coleccin organizada de componentes del
programa. Los modelos del marco de trabajo repetible incrementan el grado de abstraccin del diseo
al intentar identificar marcos de trabajo repetibles del diseo arquitectnico que se encuentran en tipos
de aplicaciones similares.
El diseo de la arquitectura de software se describe cmo se descompone y como estn
organizados los componentes en el software. [IEEEP1471-00]
Diseo Detallado.
un
de
su
su
Un intrprete que procese el cdigo fuente y lo ejecute (por ejemplo el browser que
ejecuta scripts en javaScript al cargar la pgina web)
Un debugger que nos ayude a depurar los errores y a corregir el cdigo fuente hasta
lograr un programa ejecutable sin errores (por ejemplo el mismo browser que enva
mensajes a encontrar errores al ejecutar nuestro programa)
Se deben utilizar los tipos y estructuras de datos ms adecuados que permita el lenguaje de
programacin, teniendo especial cuidado en el uso de tipos de datos reales y los errores de
redondeo que introducen y pueden alterar los resultados.
5. Verificacin y Prueba
Esta etapa consiste en probar el programa completo y verificar que trabaja como se esperaba
Se deben probar cada una de las funciones primero por separado y luego en conjunto
Se debe probar el programa completo con distintos conjuntos de datos de prueba
En caso de que haya errores repetir el paso 4 y 5 hasta la satisfaccin de los requerimientos
Facilitan al gestor controlar el proceso de desarrollo de software y suministrar las bases para construir
software de alta calidad de una forma productiva.
Los mtodos indican cmo construir tcnicamente el software. Estos mtodos abarcan tareas que
incluyen : planificacin y estimacin de proyectos, anlisis de los requisitos del sistema y del software,
diseo deestructuras de datos, arquitectura de programas y procedimientos algortmicos, codificacin,
prueba y mantenimiento.
Las herramientas suministran un soporte automtico o semiautomtico para los mtodos. Cuando se
integran las herramientas de forma que la informacin creada por una herramienta pueda ser usada por
otra, se establece un sistema de soporte llamada Ingeniera de Software Asistida por Computadora
(CASE).
Los procedimientos son el pegamento que junta los mtodos y las herramientas, y facilita un desarrollo
racional y oportuno. Definen la secuencia en la que se aplican los mtodos, las entregas (documentos,
informes, formas, etc.) que se requieren, los controles para asegurar la calidad y coordinar los cambios,
y las directrices que ayudan a los gestores de software a evaluar el progreso.
Persistencia. Es la propiedad de un diseo a travs de la cual su existencia trasciende el tiempo (es
decir, continua existiendo despus de que su creador ha dejado de existir)
Almacenamiento
Consiste en la recuperacin ms rpida de la informacin, en la organizacin de almacenar grandes
cantidades de datos, por eso, debe tenerse en cuenta donde almacenarlos y como recuperarlos cuando
se los necesita.
Cada metodologa de diseo de software introduce heursticas y notaciones propias, as como una
visin algo particular de lo que caracteriza a la calidad del diseo. Sin embargo, todas las metodologas
tienen varias caractersticas comunes:
Un mecanismo para la traduccin de la representacin del campo de informacin en una
representacin de diseo.
Una notacin para representar los componentes funcionales y sus interfaces.
Heursticas para el refinamiento y la particin, y
Criterios para la valoracin de la calidad.
Principios de diseo
Segn M.A. Jackson (1975) "El comienzo de la sabidura para un ingeniero de software es reconocer la
diferencia entre hacer que un programa funcione y conseguir que lo haga del modo correcto".
Los principios de diseo son aplicables a todos los niveles del diseo del software, desde la arquitectura
a la microarquitectura, adems todos estos principios se relacionan entre si.
Principios de diseo
Los principios de diseo a estudiar son los siguientes:
1) ABSTRACCIN Y REFINAMIENTO: se trata de ocultar los detalles, es decir no centrarse en
detalles concretos del diseo, sino hacer un esquema visual a alto nivel. De esta manera tenemos una
visin general de todo, tambin se utiliza en los microdiseos. La tctica del refinamiento es justamente
lo contrario, es decir, centrarse en los detalles del modelo abstracto dado anteriormente.
La tcnica de abstraccin y refinamiento se complementa con la de refinamiento, es decir, primero se
hace una abstraccin del problema y una vez que tenemos un esquema abstracto usamos la tcnica del
refinamiento para centrarnos en detalles concretos.
2)MODULARIDAD: se basa en el principio de "Divide y Vencers", que consiste un dividir el
problema en varios problemas ms pequeos para que el costo de resolverlos sea menor. Consiste en
dividir un sistema en varios subsistemas, cada uno de estos resuelve un problema pequeito y luego se
vuelven a unir. Esta tcnica se puede aplicar a distintas escalas. Esto nos plantea una pregunta: Cmo
lo divido? Pues no hay una forma exacta para hacer la divisin sino que depende de cada problema en
particular.
3) VARIACIONES PROTEGIDAS: hay que tener claros dos conceptos: punto de variacin y punto
de evolucin.
*Punto de variacin: es un requisito del sistema que tiene caractersticas variables y puede
cambiar, por tanto tengo que soportarlo en mi aplicacin.
*Punto de evolucin: es cuando nosotros prevemos que se puede convertir en un punto de
variacin.
En el desarrollo del software todo lo que sea cambios es un problema, hay que prestar atencin a estos
puntos que cambian, la idea es proteger al sistema de los cambios en los puntos de variacin y en los
puntos de evolucin.
Cuando detecte un punto de variacin y/o punto de evolucin tengo que disearlo de forma que los
cambios que se produzcan en el sistema afectan a lo mnimo posible.
4) ACOPLAMIENTO: medida cualitativa del grado en el que un mdulo esta conectado a otros y el
mundo exterior. El acoplamiento hay que mantenerlos bajo para que cada mdulo sea lo ms
independiente posible. De esta forma si un mdulo cambia, su cambio afecta lo menos posible al resto
de sistema. Nunca se puede dar el acoplamiento 0.
El acoplamiento es un principio evolutivo, tenemos que ir controlndolo a medida que se disea hay que
estar evaluando el grado de acoplamiento para conseguir que sea lo ms bajo posible
Hay que ser cautelar, es decir, no hay que intentar disminuir el acoplamiento a toda costa, sino que hay
que evaluar como hacerlo.
5) COHESIN: es la medida cualitativa del grado en el que un mdulo se enfoca a una sola cosa.
Un mdulo hace cosas muy parecidas, la cohesin debe ser alta en cada mdulo, se trata de conseguir
mdulos muy cohesivos y que estn poco acoplados. Para mejorar la cohesin lo mejor es dividir en
subsistemas. Las clases con muchos mtodos son poco cohesivas y habr que dividir.
La cohesin al igual que el acoplamiento es evolutiva, hay que ir evaluando a la vez que se disea para
aumentar la cohesin.
"Un elemento es altamente cohesivo si todos sus elementos trabajar juntos para proporcionar algn
comportamiento bien determinado"
A la cohesin y al acoplamiento se les denomina el Yin y el Yan del diseo software.
6)REFACTORIZACIN: segn Martin Fowler (1999) "Es el proceso de cambiar un sistema de
software de tal forma que no se altere el comportamiento externo de su cdigo (diseo) y an as se
mejora su estructura interna".
Un requerimiento se visualiza como una declaracin abstracta de alto nivel de un servicio que debe
proveer el sistema o como una restriccin de ste.
En el diseo desde la fase de anlisis se deben considerar los requerimientos funcionales y no
funcionales, puesto que as se clasifican
Requerimientos funcionales
Son declaraciones de los servicios que proveer el software, de la manera en que ste reaccionar a
entradas particulares. En algunos casos, los requerimientos funcionales de los sistemas tambin
declaran explcitamente lo que el sistema no debe hacer.
Los requerimientos funcionales de un software describen la funcionalidad o los servicios que se espera
que ste provea. Estos dependen del tipo de software y del sistema que se desarrolle y de los posibles
usuarios. Cuando se expresan como requerimientos del usuario, habitualmente se describen de forma
general mientras que los requerimientos funcionales del sistema describen con detalle la funcin de
ste, sus entradas y salidas, excepciones, etc. Muchos de los problemas de la ingeniera de software
provienen de la imprecisin en la especificacin de requerimientos. Para un desarrollador de sistemas
es natural dar interpretaciones de un requerimiento ambiguo con el fin de simplificar su implementacin.
Sin embargo, a menudo no es lo que el cliente desea.
En principio, la especificacin de requerimientos funcionales de un sistema debe estar completa y ser
consistente. Esto significa que todos los servicios solicitados por el usuario estn definidos. La
consistencia significa que los requerimientos no tienen definiciones contradictorias.
Requerimientos no funcionales
Son restricciones de los servicios o funciones ofrecidos por el software. Incluyen restricciones de
tiempo, sobre el proceso de desarrollo, estndares, etc.
Son aquellos requerimientos que no se refieren directamente a las funciones especficas que entrega el
sistema, sino a las propiedades emergentes de ste como la fiabilidad, la respuesta en el tiempo y la
capacidad de almacenamiento. De forma alternativa, definen las restricciones del sistema como la
capacidad de los dispositivos de entrada/salida y la representacin de datos que se utiliza en la
interfase del sistema.
Muchos requerimientos no funcionales se refieren al sistema como un todo ms que a rasgos
particulares del mismo. Esto significa que a menudo con ms crticos que los requerimientos
funcionales particulares. Mientras que el incumplimiento de este ltimo degradar el sistema, una falla
en un requerimiento no funcional del sistema lo inutiliza.
Los requerimientos no funcionales surgen de la necesidad del usuario, debido a las restricciones en el
presupuesto, a las polticas de la organizacin, a la necesidad de interoperabilidad con otros sistemas
de software o hardware o a factores externos como los reglamentos de seguridad, las polticas de
privacidad, etctera.
DEFINICIN
Correccin
Fiabilidad
Eficiencia
Integridad
Usabilidad
Mantenibilidad
Facilidad de
prueba
Flexibilidad
Portabilidad
Reusabilidad
Interoperatividad
El objetivo es agrupar una coleccin de soluciones de diseo que son vlidas en distintos contextos y
que han sido aplicadas con xito en otras ocasiones.
Un patrn de diseo es una solucin a un problema de diseo no trivial que es efectiva (ya se resolvi
el problema satisfactoriamente en ocasiones anteriores) y reusable (se puede aplicar a diferentes
problemas de diseo en distintas circunstancias).
Los patrones son soluciones de sentido comn que deberan formar parte del conocimiento de un
diseador experto. Adems facilitan la comunicacin entre diseadores, pues establecen un marco de
referencia (terminologa, justificacin).
Por otro lado, los patrones de diseo, facilitan el aprendizaje al programador inexperto, pudiendo
establecer parejas problema-solucin.
Adems, los patrones de diseo, tambin nos ayudarn a especificar las interfaces, identificando los
elementos claves en las interfaces y las relaciones existentes entre distintas interfaces. De igual modo
nos facilitar la especificacin de las implementaciones.
Tambin, y de forma casi automtica, nos ayudan a reutilizar cdigo, facilitando la decisin entre
"herencia o composicin" (favorece la composicin sobre la herencia y hace uso de la delegacin).
Relacionan estructuras en tiempo de compilacin y en tiempo de ejecucin.
Y nos permiten hacer un diseo preparado para el cambio.
Los patrones ayudan a construir la experiencia colectiva de Ingeniera de Software.
Anlisis
Arquitectura
Diseo
Lenguaje de programacin (idioms)
Patrones de Diseo
Proxy
Contexto
El cliente quiere tener acceso a servicios de algn componente pero el acceso directo no
es la mejor solucin.
Problema
Optimizar el acceso al servicio compartido entre varios clientes.
Solucin
El cliente accesa el servicio del componente va un representante local del componente,
llamado proxy. El representante ofrece los mismos servicios y asegura el acceso correcto
al componente original.
Practica en wikipedia patron de diseo
El Ventanal
Rinc
n
Contexto
Problema
Ventanal
Solucin
El objetivo es agrupar una coleccin de soluciones de diseo que son vlidas en distintos contextos y
que han sido aplicadas con xito en otras ocasiones.
Un patrn de diseo es una solucin a un problema de diseo no trivial que es efectiva (ya se resolvi
el problema satisfactoriamente en ocasiones anteriores) y reusable (se puede aplicar a diferentes
problemas de diseo en distintas circunstancias).
Los patrones son soluciones de sentido comn que deberan formar parte del conocimiento de un
diseador experto. Adems facilitan la comunicacin entre diseadores, pues establecen un marco de
referencia (terminologa, justificacin).
Podemos clasificar a los patrones segn su propsito:
Patrones de creacin: para creacin de instancias.
Patrones estructurales: relaciones entre clases, combinacin y formacin de estructuras mayores.
Patrones de comportamiento: interaccin y cooperacin entre clases.
Patrones de creacin
Los patrones de creacin abstraen la forma en la que se crean los objetos, permitiendo tratar las
clases a crear de forma genrica dejando para ms tarde la decisin de qu clases crear o cmo
crearlas.
Segn donde se tome dicha decisin podemos clasificar a los patrones de creacin en patrones de
creacin de clase (la decisin se toma en los constructores de las clases y usan la herencia para
determinar la creacin de las instancias) y patrones de creacin de objeto (se modifica la clase desde
el objeto).
Patrones estructurales
Tratan de conseguir que cambios en los requisitos de la aplicacin no ocasionen cambios en las
relaciones entre los objetos. Lo fundamental son las relaciones de uso entre los objetos, y, stas estn
determinadas por las interfaces que soportan los objetos. Estudian como se relacionan los objetos en
tiempo de ejecucin. Sirven para disear las interconexiones entre los objetos.
Patrones de comportamiento
Los patrones de comportamiento estudian las relaciones entre llamadas entre los diferentes objetos,
normalmente ligados con la dimensin temporal.