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.