Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Diseo de Software
El diseo es tcnicamente la parte central de la ingeniera del software. Durante el diseo 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 diseo es la nica forma mediante la que podemos traducir con precisin los requisitos del cliente en
un producto o sistema acabado. El diseo de software es la base de todas las partes posteriores del
desarrollo y de la fase de prueba.
En otras palabras se puede decir que el diseo de software son las metodologas, tcnicas y actividades
que permiten estructurar y construir un producto de software a partir de los requerimientos del cliente y
con el fin de satisfacer las necesidades del mismo.
Las fases de diseo, codificacin y prueba, absorben el 75% o ms del coste de la ingeniera del software
(excluyendo el mantenimiento). Es aqu donde se toman las decisiones que afectarn finalmente al xito
de la implementacin del programa, y tambin, a la facilidad de mantenimiento que tendr el software.
Mediante algunas metodologas de diseo se realiza el diseo de datos, el diseo arquitectnico, el diseo
procedimental y diseo de interfaz.
El diseo de datos transforma el modelo de campo de informacin, creado durante el anlisis, en
las estructuras de datos que se van a requerir para implementar el software.
El diseo arquitectnico define las relaciones entre los principales elementos estructurales del
programa.
El diseo procedimental transforma los elementos estructurales en una descripcin procedimental
del software.
Diseo de la Interfaz. Establece la disposicin y los mecanismos para la interaccin HombreMquina.
Sin diseo, nos arriesgamos a construir un sistema inestable, un sistema que falle cuando se realicen
pequeos cambios, un sistema que sea difcil de probar, un sistema cuya calidad no pueda ser evaluada
hasta ms adelante, cuando quede poco tiempo y ya sea haya gastado mucho dinero.
2. Fundamentos del diseo de software
Los fundamentos del diseo ayudan al desarrollador de software a responder a estas preguntas:
Qu criterios puedo utilizar para dividir el software en componentes individuales?
Cmo se separan los detalles de una funcin o de la estructura de los datos de la representacin
conceptual del software?
Existen criterios uniformes que definan la calidad tcnica de un diseo de software?
Abstraccin
Cuando se considera una solucin modular para cualquier problema, pueden formularse varios niveles de
abstraccin.
En el nivel superior de abstraccin se establece una solucin en trminos generales, en lenguaje natural.
En los niveles inferiores de abstraccin se utiliza una orientacin ms procedimental. Por ltimo, en el
nivel ms bajo de abstraccin, se establece una solucin, de forma que pueda implementarse
directamente. Se puede decir por ejemplo que una abstraccin 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
informacin, pero que nos podemos referir a todos los datos mencionando el nombre de la abstraccin de
datos.
Estas abstracciones permiten al diseador representar un objeto a diferentes niveles de detalle.
Refinamiento
Comenzamos con una declaracin de la funcin (o una descripcin de la informacin) definida a un nivel
superior de abstraccin. Es decir, la declaracin describe la funcin o la informacin conceptualmente,
pero no proporciona informacin sobre el funcionamiento interno de la funcin o sobre la estructura
interna de la informacin, sino que se va a realizando sucesivamente, dando cada vez ms detalles.
Modularidad
El software se divide en componentes con nombres y ubicaciones determinados, que se denominan
mdulos y que se integran para satisfacer los requisitos del proveedor.
El software monoltico (es decir, un programa grande compuesto de un solo mdulo) no puede ser
estudiado fcilmente por un lector, ya que el nmero de caminos de control, el nmero de variables y la
complejidad global haran el cdigo prcticamente indescifrable.
Arquitectura del Software
La arquitectura del software se obtiene mediante un proceso de particin, que relaciona los problemas del
mundo real (definidos en el anlisis de requerimientos) con las soluciones software para resolver los
problemas software.
Jerarqua de Control tambin se le conoce como estructura del programa, y representa la
organizacin jerrquica de los mdulos de un programa e implica una jerarqua de control.
Estructura de Datos La estructura de datos es una representacin de la lgica que existe entre
los elementos individuales de informacin, la estructura de datos es tan importante como la
estructura del programa en la representacin de la arquitectura del software.
Procedimientos del Software El procedimiento debe proporcionar una especificacin precisa del
procesamiento, incluyendo la secuencia de sucesos, los puntos concretos de decisiones, la
repeticin de operaciones e incluso la organizacin/estructura de los datos.
Ocultamiento de Informacin Por tanto se trata de definir una serie de mdulos independientes
que se comuniquen slo a travs de la informacin necesaria para realizar la funcin de software.
El uso de ocultamiento de informacin en el diseo facilitar las modificaciones, prueba y
mantenimiento del software, ya que como la mayora de los datos y de los procedimientos estn
ocultos a otras partes del software, ser menos probable que los errores que se introduzcan
durante la modificacin se propaguen a otros mdulos del software.
3. Diseo Orientado a Objetos
El Diseo Orientado a los Objetos (DOO) crea una representacin del problema del mundo real y la hace
corresponder con el mbito de la solucin, que es el software, en otras palabras, es la disciplina que define
los objetos y sus interacciones para resolver un problema que fue identificado y documentado durante el
anlisis orientado a objetos.
A diferencia con otros mtodos de diseo, el DOO produce un diseo que interconecta objetos de datos y
operaciones de procesamiento para esos objetos, de forma que se modulariza la informacin y el
procesamiento, en lugar de aislar el procesamiento.
La mayora de metodologas de diseo de software intentan basarse en estos tres aspectos:
Abstraccin
Ocultamiento de informacin
Modularidad
Algunas de las actividades del AOO y el DOO son:
En el AOO deben llevarse a cabo las siguientes actividades:
La identificacin de clases semnticas, atributos y servicios
Identificacin de las relaciones entre clases (generalizaciones, agregaciones y asociaciones).
El emplazamiento de las clases, atributos y servicios.
La especificacin del comportamiento dinmico mediante paso de mensajes.
En el DOO deben llevarse a cabo las siguientes actividades:
Aadir las clases interfaz, base y utilidad.
Refinar las clases semnticas.
Debemos comprender la diferencia entre el Anlisis Orientado a Objetos, que es una actividad de
clasificacin, y el Diseo Orientado a Objetos, que define los objetos que se derivan de cada clase, se
tiene que indicar las relaciones que existen entre ellos mediante una notacin.
El DOO tiene que comenzar con una descripcin en lenguaje natural de la estrategia de solucin, y a
partir de esta descripcin, el diseador identifica los objetos y operaciones.
4. Conceptos del DOO
4.1. Abstraccin Expresa las caractersticas esenciales de un objeto, las cuales distinguen al objeto de los
dems. Adems de distinguir entre los objetos provee lmites conceptuales.
4.2. Encapsulacin es un mecanismo que consiste en organizar datos y mtodos de una estructura,
conciliando el modo en que el objeto se implementa, es decir, evitando el acceso a datos por cualquier
otro medio distinto a los especificados. Por lo tanto, la encapsulacin garantiza la integridad de los datos
que contiene un objeto, es decir, que es un mecanismo el cual permite ocultar los detalles de
implementacin de un objeto. Permite empaquetar en una unidad los datos y las funciones que operan
sobre dichos datos.
4.3. Objetos
Componente del mundo real que se hace corresponder con el software. En un Sistema de Informacin
basado en Computador, un objeto es un producto o consumidor de informacin, o un elemento de
informacin. Asimismo se refiere a un objeto como la instancia de una de clase.
Combinan tanto datos como procedimientos
Se relacionan con otros objetos heredando su estado y sus comportamientos, o actuando como
clientes de la funcionalidad que otros ofrecen
Tienen identidad propia
Son siempre ejemplares de una cierta clase
Tienen un identificador nico mediante el que otros objetos pueden referenciarlos
Tienen un estado
Atributos: valor de los datos que contienen o referencias a otros objetos con los que comunicarse para
dar rdenes, enviar o recibir informacin
Mtodos: procedimientos que es capaz de ejecutar pudiendo, segn su estado, operar sobre sus
atributos o delegar parte del trabajo aprovechndose de los comportamientos de otros objetos
4.4. Aspectos de diseo
Por lo general se sugieren cinco criterios para la evaluacin de un mtodo de diseo a partir de la
modularidad.
Descomponibilidad: Facilidad con la que un mtodo de diseo ayuda al diseador a descomponer un
problema en sub problemas ms sencillos.
Componibilidad: Grado en el que un mtodo de diseo permite la reutilizacin de mdulos.
Compresibilidad: Facilidad para comprender un componente del programa sin tener que hacer referencia
a otros mdulos.
Continuidad: Capacidad de realizar cambios en un programa y que esos cambios afecten a un nmero
mnimo de mdulos.
Proteccin
El principio de ocultamiento de informacin se consigue cuando toda la informacin del mdulo est
oculta para el acceso desde el exterior, a menos que la informacin se defina explcitamente de forma
pblica.
Si bien estos principios son aplicables a cualquier tipo de diseo, el mtodo de Diseo Orientado a
Objetos consigue alcanzar estos principios de forma ms eficiente que el resto de los enfoques,
consiguiendo arquitecturas ms modulares.
4.5. Clases, instancias y herencia
Una clase es un conjunto de objetos que tienen las mismas caractersticas. As, un objeto es una instancia
de una clase mayor.
Describe sus atributos y sus mtodos
Es el punto de partida para crear nuevos objetos
Relaciones entre clases
Generalizacin y su inversa (especializacin)
Se realiza mediante la herencia entre clases
Composicin (parte de) y su inversa (todo)
Se realiza mediante la inclusin de referencias a los objetos que son partes en los atributos del objeto
que es todo
Asociacin (usa a) y su inversa (es usado por). Tambin se realiza mediante inclusin de referencias a
los objetos usados en los atributos del objeto que los usa
4.6. Descripciones de los objetos
La descripcin del diseo de un objeto (una instancia de una clase o de una subclase) est compuesta de
dos partes:
Descripcin de la interfaz: Establece la interfaz del objeto, definiendo los mensajes que puede recibir el
objeto y las operaciones que puede realizar cuando el objeto recibe el mensaje. En palabras simples se
dice que son un conjunto de mensajes con sus comentarios correspondientes
Las pruebas muestran presencia de defectos mostrar los defectos que estn presentes en el
producto de software, pero no puede probar que no existan defectos en dicho producto.
Pruebas exhaustivas es imposible probar de todo, incluyendo todas las combinaciones de
insumos y condiciones no es posible.
Pruebas tempranas: las prueba deben comenzar tan pronto como sea posible y debe centrarse
en objetivos definidos.
Agrupacin de defectos: Un pequeo nmero de mdulos contiene la mayora de los defectos
descubiertos durante las pruebas de pre-lanzamiento o muestra los fracasos operacionales
La paradoja de Pesticidas: Si el mismo tipo de pruebas se repiten una y otra vez, con el tiempo
el mismo conjunto de casos de prueba ya no ser capaz de encontrar nuevos errores.
La prueba de acuerdo a contexto La prueba es bsicamente dependiente del contexto. Por
ejemplo, la seguridad - crticos software ha sido probado de forma diferente a partir de un sitio
de comercio electrnico.
Falacia de ausencia de errores: Si el sistema construido es inutilizable y no cumple con las
necesidades y expectativas del usuario, encontrar y corregir defectos no ayuda.
Se centran en lo que hay codificado o diseado a bajo nivel por lo que no es necesario conocer la
especificacin de requisitos.
Los mtodos de caja blanca permiten derivar casos de prueba que
Garanticen que todas las rutas independientes dentro del mdulo se ejecuten al menos de una vez.
Ejecuten los lados verdadero y falso de todas las decisiones lgicas.
Ejecuten las estructuras de datos internas para asegurar su validez
Eliminan errores tipogrficos.
En resumen las pruebas de caja banca se centran en la estructura de control del programa. Se obtienen
casos de prueba que aseguren que durante la prueba se han ejecutado al menos una vez todas las
sentencias del programa.
4. Pruebas de Integracin e Integracin Continua*
4.4 Pruebas de integracin
Prueba que se realiza a los distintos componentes, todos de manera integrada, el mtodo es de forma
progresiva y est centrada en el diseo y la construccin de la arquitectura de software. Cuando se
desarrolla el esqueleto del sistema y luego los componente se le llama integracin descendente, Por el
contrario si se integran primero los componentes de la infraestructura que proporcionan servicios y luego
los componentes funcionales se les llama integracin ascendente.
Para este tipo de pruebas el equipo que realizara el testeo debe tener acceso al cdigo fuente del sistema.
4.5 Pruebas de entregas
Este tipo de pruebas est dirigido a las versiones del software que podran ser entregadas al usuario, En
este caso se busca validar que el sistema satisface los requerimientos respectivos adems de asegurar por
medio de estas que el sistema es confiable.
Esta prueba est basada en pruebas de caja negra donde el equipo simplemente busca demostrar si el
sistema funciona o no correctamente.
4.6 Pruebas de rendimiento
Cuando el sistema est integrado en su totalidad, es posible realizar las propiedades emergentes de
sistema, como el caso del rendimiento. Las pruebas de rendimiento buscan probar si el sistema es capaz
de procesar la carga esperada. Como sucede en el resto de las pruebas, las de rendimiento buscan
demostrar tanto que el sistema satisface los requerimientos como descubrir problemas y defectos.
Con esta metodologa en las pruebas se espera cumplir con:
Probar cmo se comporta el programa una vez que falla
Sobrecargar el sistema puede provocar que se muestren defectos.
4.7 Pruebas de compones (pruebas de unidad)
Las pruebas de componentes lo que pretende es probar individualmente los componentes del sistema. El
proceso de estas pruebas es para encontrar defectos en los componentes.
Entre los componentes que pueden probarse en esta etapa son:
Funciones individuales o mtodos dentro de un objeto.
Objetos que poseen varios atributos y mtodos.
Componentes compuestos que estn formados por varios objetos o funciones.
Por otra parte las pruebas a objetos deben ser diseadas para incluir todas las caractersticas del mismo.
Entre los puntos que deben incluir son:
Pruebas aisladas para cada una de operaciones que posee el objeto.
Las pruebas estructurales son una proximidad a casos de prueba, estas proceden a partir del conocimiento
de la estructura e implementacin del sistema.Estas ayudan a identificar particiones adicionales y casos de
prueba.
Al examinar el cdigo de este ejemplo sobre bsqueda binaria, se puede ver que la rutina de bsqueda
binaria divide el espacio de bsqueda en tres partes, siendo cada una de esas partes una particin de
equivalencia. As mismo se disean los casos de prueba, los cuales se situaran en los lmites de cada una
de estas porciones. Todo este anlisis da nacimiento a un conjunto de casos de prueba
5.2 Pruebas basadas en caminos
Este tipo de pruebas es una estratega de las pruebas estructurales, tiene como fin probar cada camino de
ejecucin independiente en un componente o programa. Esto con el fin de ejecutar todas las sentencias de
cada componente al menos en una oportunidad. En las sentencias condicionales se comprueban los casos
verdadero y falso. Cabe mencionar que en un diseo orientado a objetos se pueden utilizar pruebas de
caminos cuando se prueban los mtodos asociados a objetos.
Cabe mencionar que los caminos que existen en un programa son proporcional al tamao del mismo. Una
vez calculada se descubrir el nmero de caminos independientes, disean los casos de prueba para
ejecutar cado uno de estos caminos independientes ya calculados.
Cuando es difcil descubrir el perfil de ejecucin de programas complejos, se puede hacer uso de
herramientas, tal como el caso de algn analizador dinmico de programas, los cuales muchas veces
trabajan conjuntamente con los compiladores.
6. Automatizacin
Las pruebas es un proceso laborioso y puede resultar caro, como consecuencia a la necesidad de brindar
productos robustos y efectivos as como fieles a los requerimientos que el cliente necesita. Se ofrecen
herramientas con una serie de facilidades y que sin duda reducen el costo de las mismas.
Algunos de los elementos bsicos que un banco de prueba debe poseer son los siguientes:
Gestores de pruebas: Gestiona la ejecucin de las pruebas del programa, el gestor de pruebas mantiene
un registro de los datos, resultados, habilidades del programa que han sido probados. Un ejemplo de ellos
es JUnit como gestor de pruebas.
Generador de datos de prueba: Concibe datos de prueba para el programa a probar.
Orculo: Generador de predicciones de resultados esperados de las pruebas, estos pueden ser versiones
previas del programa o sistemas prototipos.
Comparador de ficheros: Compara resultados del mismo programa con resultados previos del mismo
creando informes sobre estos datos. Son muy utilizados en pruebas de regresin, cuando son
automatizadas estos comparadores son invocados desde las mismas pruebas.
Generador de informes: Son facilitadores de generadores de informes para los resultados de las
pruebas e preparar los resultados manualmente.