sábado, 21 de abril de 2012

DOCUMENTACION DE REQUERIMIENTO


La parte más dura en la construcción de un sistema software es decidir cómo construirlo…Ninguna parte del trabajo mutila el resultado del sistema si está hecho mal. Ninguna parte es más dificultosa para rectificarlo después”.

La ingeniería de requisitos facilita el mecanismo apropiado para comprender lo que quiere el cliente, analizando necesidades, confirmando su viabilidad, negociando una solución razonable, especificando la solución sin ambigüedad, validando la especificación y gestionando los requisitos para que se transformen en un sistema operacional.

Los requerimientos para un sistema de software determinan lo que hará el sistema y definen las restricciones de su operación e implementación.

El proceso de ingeniería de requisitos puede ser descrito en 5 pasos distintos: identificación de requisitos, Análisis de requisitos y negociación, Especificación de requisitos, Modelizado del sistema, Validación y gestión de requisitos.


IDENTIFICACION DE REQUISITOS

Christel y Kang identifican una serie de problemas que nos ayudan a comprender por qué la obtención de requisitos es costosa.

• Problemas de alcance. El límite del sistema está mal definido o los detalles técnicos innecesarios, que han sido aportados por los clientes/usuarios, pueden confundir más que clarificar los objetivos del sistema.
• Problemas de comprensión. Los clientes no están completamente seguros de lo que necesitan, tienen una pobre comprensión de las capacidades y limitaciones de su entorno de computación, no existe un total entendimiento del problema, etc.
• Problemas de volatilidad. Los requisitos cambian con el tiempo.
Para ayudar a solucionar estos problemas, los ingenieros de sistemas deben aproximarse de una manera organizada a través de reuniones para definir requisitos. El resultado alcanzado como consecuencia de la identificación de requisitos variará dependiendo del tamaño del sistema o producto a construir.

ANÁLISIS Y NEGOCIACIÓN DE REQUISITOS

Una vez recopilados los requisitos, el producto obtenido configura la base del análisis de requisitos. Los requisitos se agrupan por categorías y se organizan en subconjuntos, se estudia cada requisito en relación con el resto, se examinan los requisitos en su consistencia, completitud y ambigüedad, y se clasifican en base a las necesidades de los clientes/usuarios.

Es corriente en clientes y usuarios solicitar más de lo que puede realizarse, consumiendo recursos de negocios limitados. También es relativamente común en clientes y usuarios el proponer requisitos contradictorios, argumentando que se versión es “esencial por necesidades especiales”.

El ingeniero del sistema debe resolver estos conflictos a través de un proceso de negociación. Los clientes, usuarios y el resto de intervinientes deberán clasificar sus requisitos y discutir los posibles conflictos según su prioridad. Los riesgos asociados con cada requisito serán identificados y analizados. Se efectúan estimaciones del esfuerzo de desarrollo que se utilizan para valorar el impacto de cada requisito en el costo del proyecto y en el plazo de entrega. Utilizando un procedimiento iterativo, se irán eliminando requisitos, se irán combinando y/o modificando para conseguir satisfacer los objetivos planteados.

ESPECIFICACION DE REQUERIMIENTOS

El termino requerimiento no se utiliza de forma consistente en la industria del software. En algunos casos, un requerimiento se visualiza como una declaración abstracta de alto nivel de un servicio que debe proveer el sistema o como una restricción de éste. Por otro lado, es una definición matemática detallada y formal de una función del sistema.

REQUERIMIENTOS FUNCIONALES Y NO FUNCIONALES

A menudo los requerimientos de sistemas de software se clasifican en funcionales y no funcionales, o como requerimientos del dominio.

REQUERIMIENTOS FUNCIONALES

Son declaraciones de los servicios que proveerá el sistema, de la manera en que éste reaccionará a entradas particulares. En algunos casos, los requerimientos funcionales de los sistemas también declaran explícitamente lo que el sistema no debe hacer.

Los requerimientos funcionales de un sistema 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 del software. Cuando se expresan como requerimientos del usuario, habitualmente se describen de forma general mientras que los requerimientos funcionales del sistema describen con detalle la función de éste, sus entradas y salidas, excepciones, etc.

Muchos de los problemas de la ingeniería de software provienen de la imprecisión en la especificación de requerimientos. Para un desarrollador de sistemas es natural dar interpretaciones de un requerimiento ambiguo con el fin de simplificar su implementación. Sin embargo, a menudo no es lo que el cliente desea. Se tienen que estipular nuevos requerimientos y se deben hacer cambios al sistema, retrasando la entrega de éste e incrementando el costo.

En principio, la especificación de requerimientos funcionales de un sistema debe estar completa y ser consistente. La compleción significa que todos los servicios solicitados por el usuario están definidos. La consistencia significa que los requerimientos no tienen definiciones contradictorias.

 En la práctica, para sistemas grandes y complejos, es imposible cumplir los requerimientos de consistencia y compleción. La razón de esto se debe parcialmente a la complejidad inherente del sistema y parcialmente a que los diferentes puntos de vista tienen necesidades inconsistentes. Estas inconsistencias son obvias cuando los requerimientos se especifican por primera vez. Los problemas emergen después de un análisis profundo. Una vez que éstos se hayan descubierto en las diferentes revisiones o en las fases posteriores del ciclo de vida, se deben corregir en el documento de requerimientos. 

DISEÑO DEL SOFTWARE



Diseño del Software e Ingeniería del Software.
El diseño del software se encuentra en el núcleo técnico de la ingeniería del software y se aplica independientemente del modelo de diseño de software que se utilice. Una vez que se analizan y especifican los requisitos del software, el diseño del software es la primera de las tres actividades técnicas - diseño, generación de código y pruebas- que se requieren para construir y verificar el software.
Los requisitos del software, manifestados por los modelos de datos funcionales y de comportamiento, alimentan la tarea del diseño. Mediante uno de los muchos métodos de diseño la tarea de diseño produce un diseño de datos, un diseño arquitectónico, un diseño de interfaz y un diseño de componentes.

El diseño de datos transforma el modelo del dominio de información que se crea durante el análisis en las estructuras de datos que se necesitarán para implementar el software. Los objetos de datos y las relaciones definidas en el diagrama relación entidad y el contenido de datos detallado que se representa en el diccionario de datos proporcionan la base de la actividad del diseño de datos.

El diseño arquitectónico define la relación entre los elementos estructurales principales del software, los patrones de diseño que se pueden utilizar para lograr los requisitos que se han definido para el sistema, y las restricciones que afectan a la manera en que se pueden aplicar los patrones de diseño arquitectónicos [SHA96].

El diseño de la interfaz describe la manera de comunicarse el software dentro de sí mismo, con sis- temas que interpelan dentro de él y con las personas que lo utilizan. Una interfaz implica un flujo de infor- mación (por ejemplo, datos y/o control) y un tipo específico de comportamiento. Por tanto, los diagramas de flujo de control y de datos proporcionan gran par- te de la información que se requiere para el diseño de la interfaz.

El diseño a nivel de componentes transforma los ele-mentos estructurales de la arquitectura del software en una descripción procedimental de los componentes del software. La información que se obtiene de EP, EC y de DTE sirve como base para el diseño de los componentes.

DESCOMPOSICIÓN Y MODULARIDAD DEL SOFTWARE


Ingeniería de software es la producción de software con calidad. Calidad implica dos tipos de factores: internos y externos. Los factores externos son cualidades que son "detectadas" por los usuarios, por ejemplo: velocidad y facilidad de uso. Los factores internos son cualidades perceptibles por profesionales del área de la computación, por ejemplo: modularidad y legibilidad.

FACTORES EXTERNOS:

1.    Correctitud: Capacidad para realizar con exactitud las tareas definidas en las especificaciones.

2.    Robustez: Capacidad de reaccionar apropiadamente ante condiciones excepcionales.

3.    Extensibilidad: Facilidad de adaptar los productos de software a los cambios en la especificación.

4.    Reutilización: Capacidad de los elementos de software de servir para la construcción de muchas aplicaciones diferentes.

5.    Compatibilidad: Facilidad de combinar unos elementos de software con otros.

6.    Eficiencia: Capacidad para exigir la menor cantidad posible de recursos (tiempo de procesador, espacio de memoria, ancho de banda,             etc.).

7.    Portabilidad: Facilidad de transferir los productos de software a diferentes entornos de hardware y software.

8.    Facilidad de uso: Cubre la facilidad de instalación, de operación y de supervisión.

9.    Funcionalidad: Conjunto de posibilidades que proporciona un sistema.

El mantenimiento no se menciona como un factor, pero se estima que gran parte del costo del software se dedica al mismo.

A partir de los objetivos de extensibilidad y reutilización, dos de los factores de calidad más importantes, se desprende la necesidad de tener arquitecturas de sistemas flexibles, hechas con componentes autónomos de software. Esto se logra con una adecuada modularidad.


DESARROLLO:

¿Por qué descomponer un problema en partes?
Experimentalmente está comprobado que:

1.    Un problema complejo cuesta más de resolver que otro más sencillo.

2.    La complejidad de un problema global es mayor que la suma de las complejidades de cada una de sus partes por separado.

Según esto, merece la pena el esfuerzo de dividir un problema grande en subproblemas más pequeños. Ahora la cuestión es ¿cómo realizar la descomposición?; realizando un estudio descendente Top-Down que pueda llevar desde la concepción del problema global hasta identificar sus partes. Esta técnica se repite aplicando una estrategia llamada de refinamiento sucesivo, que consiste precisamente en volver a aplicar el estudio descendente Top-Down a cada subproblema una y otra vez hasta obtener subproblemas suficientemente pequeños.

¿Cuándo parar el refinamiento?

Un refinamiento excesivo podría dar lugar a un número tan grande de sub problemas que haría poco práctica la descomposición. Se tendrán en cuenta estos criterios para dejar de descomponer:

1.    Cuando no haya tareas bien definidas.

2.     Cuando la interfaz de un sub problema sea tan complicada como el propio sub problema.

CONTROL DE AVANCE



En la década de los setentas se introdujeron al mercado los primeros autos con motores controlados electrónicamente. Esto con el fin de obtener mejoras en su rendimiento, eficiencia y menor emisión de contaminantes. 

Inicialmente la electrónica empleada era solo analógica, evolucionando hasta la de hoy en día en donde se combina hardware y software en un control digital con mejores resultados. En el mercado se encuentran vehículos cuyos sistemas no permiten llevar a cabo variaciones en el software de la computadora. Esto con el fin de optimizar el rendimiento del vehículo, ya sea en el área de la potenciación o en situaciones en donde la gasolina es reemplazada por combustibles alternos.


Se llevó a cabo una investigación para sistemas que emplean un sensor de posición de cigüeñal de 60 dientes con un faltante de 2, en cuanto a la forma de poder introducir variaciones en el avance de encendido. De aquí se determinó, que el introducir un desfase en la señal de dicho sensor proporciona un desfase en el avance de encendido.

El empleo de un microcontrolador y el desarrollo de un software en Visual Basic, permitió desarrollar un prototipo por medio del cual se introducen adelantos o retrasos en el tiempo de encendido. Además, permite monitorear el estado del vehículo en cuanto a la posición del sensor TPS y las revoluciones por minuto del motor.

Por medio de pruebas de laboratorio se comprobó el funcionamiento del prototipo. Posteriormente se instaló en un vehículo, en donde se determinó que los desfases introducidos cambian las condiciones del vehículo según lo deseado, sin introducir ningún otro tipo de alteraciones al sistema.

COMO SE EXPRESA EL REQUERIMIENTO


CARACTERISTICAS DE UN BUEN DISEÑO



Hay muchos Web site en la Internet hoy en día, así que si quiere tener un gran Web site que se destaque de los demás, es necesario tener un diseño Web brillante en él.

Un Web site mal diseñado será recordado por todos sus defectos. Si usted quiere un Web site que se recuerde por buenas razones, va a tener que tener un diseño que haga de su Web site un sitio único.

Su diseño Web es lo primero que la gente nota cuando llegan a su Web site. Ése es el porqué de la importancia del diseño Web en el proceso de crear un Web site exitoso. Así pues, puede ver que tan importante es su diseño Web ahora.

 Hay muchas maneras de mejorar su diseño Web, puede hacerlo usted mismo o contratando alguna empresa o diseñador.

Considerando todos los aspectos, el diseño Web es solamente una pequeña parte para hacer que su Web site sea exitoso, sin embargo, es muy importante. Cuando esté diseñando su Web site, recuerde hacerlo fácil navegar, conciso y claro.

Si no está familiarizado con el diseño y todos los aspectos que entran a tallar para crear un Web site, puede buscar un diseñador profesional, una empresa de diseño de páginas web.

Imagine que usted cuenta con su propia página Web.

En ella cualquier persona puede encontrar información importante relacionada con sus productos y servicios, sus características, sus ofertas, los datos para ser contactado, etc., en resumen, todos aquellos elementos que fueron bien pensados para poder proyectar a su empresa y poder generar oportunidades de negocio a través de sus sitio Web.

Alguien hace clic en la liga de su página y comienza entonces la experiencia del primer contacto con su negocio.

¿Cómo le gustaría que fuera esa primera impresión? Lo que usted busca es retener la atención de quien ingresa por primera vez a su sitio el tiempo suficiente como para poder navegar entre sus ligas y evaluar sus contenidos.

 Si ese cliente potencial no cuenta con una buena primera impresión a través de un atractivo diseño Web, probablemente abandone su sitio en cuestión de segundos, teniendo como resultado un cliente potencial perdido.

Aquí es donde el diseño Web juega un papel importante el la retención de atención e interés en las personas que visitan su página, mediante una estrategia creativa donde elementos visuales lleven de la mano a sus visitantes a través de las partes más importantes de su sitio, lo conozcan y estén interesados en hacer negocios con usted.

Las fotografías de sus productos, enmarcadas en patrones de colores idóneos, el acomodo de cada uno de los elementos, las distintas tipografías, la animación de introducción, todos esos pequeños grandes detalles gráficos de diseño Web podrían hacer la diferencia para generar más oportunidades de negocio para su empresa.

Últimamente me he dado cuenta de que los usuarios de aplicaciones ya no quieren las cosas bonitas, porque eso les transmite la idea inconsciente de “comerciabilidad”; se le transmite la idea de que algo en el fondo quieren venderle, de que algo le van a cobrar. Digo esto después de “encuestar” a muchos usuarios que son fanáticos de aplicaciones simples, casi sin diseño.

CARACTERÍSTICA DE REQUERIMIENTO



En ingeniería del software y el desarrollo de sistemas, un requerimiento es una necesidad documentada sobre el contenido, forma o funcionalidad de un producto o servicio.

Los requerimientos son declaraciones que identifican atributos, capacidades, características y/o cualidades que necesita cumplir un sistema (o un sistema de software) para que tenga valor y utilidad para el usuario. En otras palabras, los requerimientos muestran qué elementos y funciones son necesarias para un proyecto.

En el modelo clásico de desarrollo de sistemas o desarrollo software, la etapa de los requerimientos viene antecedida de la etapa de
factibilidad del sistema/software y precedida por la etapa de diseño del sistema/software.

Etapas de la fase de requerimientos
*Obtención de requerimientos: búsqueda y obtención de los requerimientos desde los grupos de interés.
* Análisis: comprobación de la consistencia y completitud de los requerimientos.
* Verificación: constatación de que los requerimientos especificados son correctos.


Clasificación de los requerimientos.


* Requerimientos funcionales: qué debe hacer el sistema o software.
* Requerimientos no funcionales: cómo debe funcionar el sistema o software (no su implementación), por ej. Calidad, rendimiento, facilidad de uso, etc.
* Requerimientos externos: a qué se debe atener el sistema o software con respecto a su entorno: compatibilidad con otros sistemas, adecuación a determinadas leyes, etc.

Características que deberían cumplir los requerimientos.

* Actual: el requerimiento no debe volverse obsoleto con el paso del tiempo.
* Cohesión: el requerimiento debe dirigirse a solo una única cosa.
* Completo: el requerimiento debe estar completamente declarado en un único lugar, sin información faltante.
* Consistente: el requerimiento no debe contradecir ningún otro requerimiento y debe ser completamente consistente con toda la documentación.
* Correcto/necesario: el requerimiento debe cumplir con la necesidad declarada por los interesados en el sistema/software.
* Factible/viable: el requerimiento debe poder ser implementado.
* No ambiguo: el requerimiento debe estar concisamente declarado. Debe expresar hechos objetivos, no opiniones subjetivas. Debe poder poder ser interpretado de una única manera.
* Obligatorio: el requerimiento debe representar una característica definida por el grupo interesado en el desarrollo del sistema/software, su ausencia no puede ser reemplazada.
* Observable externamente: el requerimiento debe especificar una característica observable externa o experimentable por el usuario del producto.
* Verificable/demostrable: La implementación del requerimiento debe poder ser resuelta en alguno de estos cuatro métodos: inspección, análisis, demostración o prueba.



 



METRICAS DEL PRODUCTO PARA EL SOFTWARE



La medición es un elemento clave para cualquier proceso de ingeniería, las medidas se utilizan par comprender de mejor manera los atributos de los modelos que se creen y evaluar  la calidad de los productos de la ingeniería  o de los sistemas que se construyen.

La medición es el proceso mediante el cual se asignan números  o símbolos a los atributos de entidades reales para definirlas de acuerdo a reglas claramente establecidas, por supuesto  las medidas por lo general no tienen un alto grado de refinamiento, pero es de gran importancia tratar de medir lo inmedible para comprender de mejor manera entidades particulares del desarrollo de software.

La calidad  es el cumplimiento de los requisitos de funcionalidad  y desempeño explícitamente establecidos, de los estándares de desarrollo  explícitamente documentados y de las características implícitas que se esperan de todo software de desarrollo profesionalmente.

FACTORES DE CALIDAD DE MCALL
Se dividen en dos grandes grupos:
1. Los que se miden directamente.
2. Los que solo se pueden medir indirectamente.





Estos elementos son cualitativos al igual manera se pretende asignar numero o símbolos a entidades reales y esto merece un modelo de medición que abarque un conjunto de reglas

Una medida proporciona una indicación cuantitativa de la extensión, la cantidad, la dimensión, la capacidad  o el tamaño de algún atributo del producto o proceso.

Medición es el acto de determinar una medida.

Métrica, es la medida cuantitativa del grado de en que un sistema, componente o proceso posee un atributo determinado.

Un indicador es una métrica o una combinación de métricas que proporciona conocimiento acerca del proceso de software, un proyecto de software o el propio producto.

Algunos principios en el uso de métricas pueden ser los siguientes.         

Una métrica debe tener propiedades matemáticas deseables.

Cuando  una métrica representa  una característica de software que aumenta cuando se representan rasgos positivos  o que disminuyen al encontrar rasgos indeseables el valor de la métrica debe aumentar o disminuir en  el mismo sentido.

Cada métrica debe validarse empíricamente en una amplia variedad de contextos antes de publicarse o aplicarse a toma de decisiones.

Existen muchas métricas que cumplen con los principios esto no indica que deban ser totalmente rechazadas o desmerecidas pero hay que tener cuidado al utilizarlas comprender sus objetivos y entender que no pueden ser usadas como comprobación científica solida.

Las métricas y sus medidas deben ser.

Simples y calculables.
Empírica e intuitivamente persuasiva.
Consistentes y objetivas.
Consistentes en el uso de unidades y dimensiones.
Independientes del lenguaje de programación.
Mecanismo efectivo para la retroalimentación de alta calidad.

TÉCNICAS DE PRUEBA DE SOFTWARE



Las técnicas presentan un reto para los ingenieros de software quienes por naturaleza son personas constructivas.


Las pruebas no deben provocar culpa  y no son destructivas, es mas nos ayudan encontrar errores para poder corregir la mayor cantidad de errores antes de entregarlo al cliente.

El principio de facilidad de prueba indica si es fácil o no probar un programa de computadora.

Operatividad cuanto mejor funcione con mayor eficiencia podrá probarse.

Observabilidad, lo que se ve es lo que se puede probar.

Controlabilidad cuanto mejor se controle el software mejor se automatizaran   y mejoraran las pruebas.

Capacidad para descomponer  al controlar el alcance de la prueba se aíslan los problemas más fácilmente  y se aplicaran nuevas pruebas con mayor inteligencia.

Simplicidad cuanto menos  haya que probar más rápido se hará.

Estabilidad  cuanto menos cambios haya  menores alteraciones habrá en la prueba.

Facilidad de comprensión, cuanto más información se hará la prueba con mayor inteligencia



Las pruebas de caja blanca se enfocan en un examen cercano al detalle  procedimental y pueden diseñarse solo después del diseño a nivel de componentes es necesario que los detalles logicosesten disponibles.

Es importante hacer esquemas de los diferentes flujos que nos permitan luego trazar rutas para observar el comportamiento a lo largo de las mismas.

La complejidad ciclo matica  es una métrica  que nos resulta útil  para predecir  cuales módulos tienen  más probabilidades de contener errores, esta proporciona una medida cuantitativa de la complejidad lógica de un programa  y se calcula de tres formas.

1. El número de regiones corresponde a la  complejidad ciclo matica
2. La complegidadciclomatica  V(G) de una grafica de flujo se define como
V(G) = E-N +2
donde E es el numero de aristas y  N el numero de nodos

3. La complejidad ciclo matica se define como
V(G)  = P+1 donde p es el numero de nodos predicados

Las pruebas de caja negra es una prueba complementaria a las pruebas de caja blanca y tiene como finalidad descubrir otro tipo de errores.

PRUEBAS DE SOFTWARE



1. PRUEBAS DE SOFTWARE Control de Calidad del Software.

2. Pruebas de Unidad Índice de la fiabilidad del software: se comporta de acuerdo a las especificaciones y requisitos de rendimiento. “ La prueba no puede asegurar la ausencia de defectos: sólo puede demostrar que existen defectos en el software”. No es una actividad secundaria: 30-40% del esfuerzo de desarrollo En aplicaciones críticas ( p.ej. control de vuelo, reactores nucleares ), ¡de 3 a 5 veces más que el resto de pasos juntos de la ingeniería del software! El coste aproximado de los errores del software ( bugs ) para la economía americana es el Þequivalente al 0,6% de su PIB, unos 60.000 millones de dólares  ¡Evitar bichos puede ser un gran negocio!

3. Pruebas de Unidad A todas las pruebas se les debería poder hacer un seguimiento hasta los requisitos de los clientes (trazabilidad ) . Las pruebas deberían planificarse antes de que empiecen. El principio de Pareto es aplicable a la prueba del software (“donde hay un defecto, hay otros”) . Las pruebas deberían empezar por “lo pequeño” y progresar hacia “lo grande”. No son posibles las pruebas exhaustivas. Para ser más efectivas, las pruebas deberían ser conducidas por un equipo independiente. Se deben evitar los casos de prueba no documentados ni diseñados con cuidado. No deben realizarse planes de prueba suponiendo que prácticamente no hay defectos en los programas y, por tanto, dedicando pocos recursos a las pruebas.

4. Pruebas de Unidad Se concentra en el esfuerzo de verificación de la unidad más pequeña del diseño del software: el componente o módulo del software. Las pruebas de unidad se concentran en la lógica del procesamiento interno. Este tipo de prueba se puede aplicar en paralelo a varios componentes.

5. Pruebas de Integración “ Si todo funciona bien individualmente, ¿por qué dudan que funcione cuando se une? La prueba de integración es una técnica sistemática para construir la arquitectura del software, mientras, al mismo tiempo, se aplican las pruebas para descubrir errores asociados con la interfaz. El objetivo es tomar componentes a los que se aplicó una prueba de unidad y construir una estructura de programa que determine el diseño. A menudo se tiende a intentar una integración que no sea incrementa (enfoque “bigbang”), se combinan todos los componentes por anticipado, se prueba todo el programa como un todo.

6. Pruebas de Validación Las pruebas de validación empiezan tras la culminación de la prueba de integración, cuando se han ejercitado los componentes individuales. Se ha terminado de ensamblar el software como paquete y se han descubierto y corregido los errores de interfaz. La prueba se concentra en las acciones visibles para el usuario y en la salida del sistema que éste puede reconocer. La validación se define de una forma simple en que se alcanza cuando el software funciona de tal manera que satisface las expectativas razonables del cliente (especificación de requisitos-criterios de validación.

7. Pruebas de Validación Criterios de la prueba de validación La validación del software se logra mediante una serie de pruebas que demuestren que se cumple los requisitos. Un plan de prueba delinea la clase de pruebas que se aplicarán y un procedimiento de prueba define los casos de prueba específicos. Después de que se ha dirigido cada caso de prueba de validación, existirá dos condiciones posibles: 1) La característica de funcionamiento o desempeño cumple con la especificación y se la acepta. 2) se descubre una desviación de la especificación y se crea una lista de deficiencias.

8. Pruebas de Validación Revisión de la configuración Es un elemento importante del proceso de validación. So objetivo es asegurar que todos los elementos de la configuración del software se hayan desarrollado apropiadamente, estén catalogados y tengan el detalle suficiente para reforzar la fase de soporte del ciclo de vida del software.
9. Pruebas del Sistema Al final del desarrollo el software se incorpora a otros elementos del sistema (hardware, personas, información) y se realiza una serie de pruebas de integración del sistema y de validación. Estas pruebas están más allá del alcance del proceso del software y no las realizan únicamente los ingenieros de software. Sin embargo, los pasos dados durante el diseño y la prueba del software mejorarán en gran medida la probabilidad de tener éxito en la integración del software del sistema mayor.

10. Pruebas del Sistema Prueba de seguridad La interrupción abarca un amplio rango de actividades: hackers La prueba de seguridad comprueba que los mecanismos de protección integrados en el sistema realmente lo protejan de irrupciones inapropiadas. Durante la prueba de seguridad quién la aplica desempeña el papel del individuo que desea entrar en el sistema.

11. Prueba de Interfaces Gráficas de Usuario ( GUI , GraphicalUser Interface) Uso de una lista de chequeo preestablecida (ver (Presuman 98), p.319): Para ventanas: ¿Se abrirán las ventanas mediante órdenes basadas en el teclado o en un menú? ¿Se puede ajustar el tamaño, mover y desplegar la ventana? ¿Se regenera adecuadamente cuando se escribe y se vuelve a abrir? ... Para menús emergentes y operaciones con el ratón: ¿Se muestra la barra de menú apropiada en el contexto apropiado? ¿Es correcto el tipo, tamaño y formato del texto? ¿Si el ratón tiene varios botones, están apropiadamente reconocidos en el contexto? ... Entrada de datos: ¿Se repiten y son introducidos adecuadamente los datos alfanuméricos? ¿Funcionan adecuadamente los modos gráficos de entrada de datos? (p.e. barra deslizante) ¿Se reconocen adecuadamente los datos no válidos? ¿Son inteligibles los mensajes de entrada de datos?.

12. Pruebas del Sistema Prueba de resistencia Las pruebas de resistencia están diseñadas para confrontar los programas con situaciones anormales. La prueba de resistencia ejecuta un sistema de tal manera que requiera una frecuencia o un volumen anormal de recursos La persona que aplica la prueba tratará de sobrecargar el programa. Una variante de la prueba de resistencia es una técnica denominada prueba de sensibilidad. Las pruebas de sensibilidad tratan de descubrir combinaciones de datos dentro de las clases de entrada válidas que causen inestabilidad o procesamiento inapropiado.

13. Pruebas del Sistema Prueba de desempeño La prueba de desempeño está diseñada para probar el desempeño del software en tiempo de ejecución dentro del contexto de un sistema integrado. La prueba de desempeño se aplica en todos los pasos del proceso de la prueba, incluso al nivel de la unidad, el desempeño de un módulo individual debe evaluarse mientras se realizan las pruebas. Sin embargo no es sino hasta que se encuentren totalmente integrados todos los elementos del sistema que es posible asegurar el verdadero desempeño del sistema.

14. Resumen 1. Prueba de unidad: es la prueba de cada módulo, que normalmente realiza el propio personal de desarrollo en su entorno 2. Prueba de integración: con el esquema del diseño del software, los módulos probados se integran para comprobar sus interfaces en el trabajo conjunto 3. Prueba de validación: el software totalmente ensamblado se prueba como un todo para comprobar si cumple los requisitos funcionales y de rendimiento, facilidad de mantenimiento, recuperación de errores, etc. 4. Prueba del sistema: el sw. ya validado se integra con el resto del sistema (rendimiento, seguridad, recuperación y resistencia) 5. Prueba de aceptación: el usuario comprueba en su propio entorno de explotación si lo acepta como está o no.

15. Relación entre productos de desarrollo y niveles de prueba Requisitos de usuario Especificación de requisitos Diseño modular Especificación lógica del módulo Pruebas de sistema Pruebas de integración Pruebas de unidad Pruebas de aceptación Código (Piattini et al. 96). 

DISEÑO DE LA INTERFAZ DE USUARIO


 

El diseño de la interfaz se concentra en tres partes.

1. Diseño de interfaces entre componentes.
2. Diseño de interfaces  entre el software  y otros productores  y consumidores de información que no son humanos.
3. Interfaz  entre  ser humano y computadora.

La creación de una interfaz entre el ser humano y la computadora crea un mecanismo efectivo de comunicación, la interfaz debe estar construida de la mejor forma para que motive el uso y ayude al exito del sistema de software.

Existen tres reglas de oro en el diseño de la interfaz de usuario

1. Dar el control al usuario. el usuario desea manejar el sistema y no que este lo maneje a el de modo que si el constructor introduce limitaciones que ayuden a hacer mas fácil el trabajo de construcción puede influir en un resultado frustrante para el usuario. 
Para ello se deben definir.
-. Modos de interacción de forma que el usuario no realice acciones innecesarias  o indeseables.
-.una interacción flexible.
-.incluir opciones de interrumpir y deshacer.
-.permitir que se personalice la interacción.
-.ocultar elementos técnicos a usuario usual.
-.Diseñar interacción directa con los objetos que aparecen en la pantalla.


2. Reducir la carga de memoria del usuario. El sistema debe recordar las cosas y no el usuario un sistema que dependa del usuario usualmente cometeramas errores.

-. Reducir la demanda de memoria a corto plazo
-. Definir valores a corto plazo que tengan significado
-.definir accesos directos intuitivos
-.El formato visual de la interfaz debe basarse en una metáfora tomada de la interfaz
-.Desglosar la información de manera progresiva.

3. Lograr que la interfaz sea consistente, la información en pantalla debe estar organizada de acuerdo a un estándar que se mantenga en todas las presentaciones de pantalla, los mecanismos de entrada deben restringirse a un conjunto limitado que se utilice durante toda la aplicacion.los mecanismos para ir de una tarea a otra deben implementarse de manera consistente.

Permitir que un usuario incluya la tarea actual en algún contexto que tenga algún significado.
Mantener la consistencia en toda la familia de aplicaciones.
Si los modelos interactivos anteriores han causado expectativas  en el usuario no hacer cambios a menos que hayan razones inexcusables.

DISEÑO A NIVEL DE COMPONENTES




El diseño a nivel de componentes se presenta a menudo después que se ha terminado la primera iteración del diseño arquitectónico. y  el objetivo de esta fase es traducir el diseño en software operacional.

El diseño a nivel de componentes define las estructuras de datos, los algoritmos, las características de la interfaz  y los mecanismos de comunicación asignados a cada componente de software. esta fase permite revisar si los detalles de diseño son correctos y consistentes con las representaciones iníciales de diseño.


¿QUE ES UN COMPONENTE?

Es un bloque de construcción modular par el software de cómputo. Una parte modular desplegable y reemplazable de un sistema que encapsula implementación y expone un conjunto de interfaces.

Desde el punto de vista orientado a objetos un componente es un conjunto de clases que se interrelacionan entre si.

En el contexto convencional de ingeniería de software  un componente es un elemento funcional que incorpora  la lógica del procesamiento y las estructuras internas de datos necesarios para implementar dicha lógica  y una interfaz que permita la invocación del componente y el paso de los datos.

Los componentes pueden ser de tres tipos

1. Componente de control que coordina la invocación de todos los demás componentes del dominio del problema.

2.  Un componente del dominio del problema que implementa una función parcial o completa requerida por el cliente.

3.  Un componente de infraestructura  responsable de funciones que soportan el procesamiento requerido en el dominio del problema.

A continuación se presenta un ejemplo  de un diseño a nivel de componentes utilizando UML

DISEÑO DE COMPONENTES BASADOS EN CLASES

Cuando se elige un método de ingeniería de software basado en componentes el nivel de diseño de estos se concentra en la elaboración de clases de análisis y la definición y afinación de clases de infraestructura.

Hay cuatro principios básicos basados en el nivel de diseño de componentes

1. El principio abierto cerrado PAC un modulo debe estar abierto para extensiones pero cerrado para modificaciones.

2. Principio de sustitución de Liso PSL debe tenerse la opcion de sustituir las subclases con sus clases principales.

3. Principio de la inversión de la dependencia PID dependa de las abstracciones no de las concreciones, mientras un componentes dependa mas de de otros componentes concretos es mas difícil extenderlos.

4. Principio de la segregación de la interfaz es mejor tener  tener muchas interfaces específicas del cliente que una interfaz de propósito general.

DISEÑO ARQUITECTÓNICO



Representa  la estructura de datos  y los componentes necesarios para construir un sistema computacional. El diseño arquitectónico inicia con el diseño de datos y luego pasa a la derivación de una o mas representaciones de la estructura arquitectónica del sistema

la arquitectura es la manera en que los diversos componentes se integran para formar un todo cohesionad.

la arquitectura de software son las estructuras del sistema o estructura que incluyen los componentes del software las propiedades visibles externamente de esos componentes  y las relaciones entre ellos. y permite analizar la efectividad del software para cumplir los requisitos establecidos, nos da la pauta para reevaluar y hacer cambios en un momento en el cual no existe demasiado impacto, reduce los riegos asociados al construir software.


DISEÑO DE DATOS


Este proceso traduce los objetos de datos obtenidos en el modelo de análisis en estructuras globales a nivel de componentes de software.

Estilos arquitectónicos


el estilo describe
1. un conjunto de componentes que realizan una función requerida por el sistema.
2. un conjunto de conectores que permiten la comunicación, cooperación y coordinación entre componentes.
3. restricciones que definen como se integran los componentes para formar el sistema.
4. modelos semánticos que permiten al diseñador del sistema comprender las propiedades generales de un sistema.

Arquitectura centrada en datos

Un almacén de datos se encuentra en el centro de de esta arquitectura


Esta arquitectura promueve  la capacidad de integración.

Arquitectura de flujo de datos

Esta arquitectura se utiliza cuando los datos de entrada se hablaran de transformar en datos de salida mediante una serie de componentes para el cálculo o manipulación-