viernes, 14 de agosto de 2009

Ingeniería de requerimientos

A medida que pasan los años, la ingeniería del software ha introducido y popularizado una serie de estándares para medir y certificar la calidad, tanto del sistema a desarrollar, como del proceso de desarrollo en sí. Se han publicado muchos libros y artículos relacionados con este tema, con el modelado de procesos del negocio y la reingeniería. Al mismo tiempo, un número creciente de herramientas automatizadas surgieron para ayudar a definir y aplicar un proceso efectivo para el desarrollo del producto software. Hoy en día la economía globalizada depende más de sistemas automatizados que en épocas pasadas; esto ha llevado a los equipos de desarrollo a enfrentarse con nuevos procesos y estándares de calidad. Una de las mayores deficiencias en la práctica de construcción del producto software es la poca atención que se presta a la discusión del problema. En general los ingenieros de desarrollo se centran en la solución dejando el problema inexplorado y por ende descrito parcialmente. Uno de los resultados más importantes de la aplicación del proceso de ingeniería es la especificación de un sistema basado en computadora que se describe de manera genérica en los siguientes niveles: vista global de todo el sistema, vista del dominio, vista del elemento y vista detallada, esta jerarquía está organizada de manera deductiva: de lo general a lo particular.

En este contexto se presenta un desafío a los ingenieros del software ¿Cómo se puede asegurar que se ha especificado un sistema que recoge las necesidades del cliente y satisface sus expectativas?. No hay una respuesta segura a esta difícil pregunta, pero un sólido proceso de ingeniería de requerimientos es la mejor solución de la que se dispone hasta este momento. La ingeniería de requerimientos facilita el mecanismo apropiado para comprender lo que requiere el cliente, analizando necesidades, confirmando su factibilidad, negociando una solución razonable, especificando la solución sin ambigüedad, validando la especificación y gestionando los requerimientos para que se transformen en un sistema operacional. La ingeniería de requerimientos cumple un papel primordial en el proceso de producción de software, ya que enfoca un área fundamental: la definición de lo que se desea producir. Su principal tarea consiste en la generación de especificaciones correctas que describan con claridad, sin ambigüedades, en forma consistente y compacta, el comportamiento del sistema; de esta manera, se pretende minimizar los problemas relacionados con el desarrollo del producto software.

La definición abstracta del término requerimiento, que aparece en el glosario del “Instituto de Ingenieros Eléctricos y Electrónicos” de los Estados Unidos es: “(1) Una condición o necesidad de un usuario para resolver un problema o alcanzar un objetivo. (2) Una condición o capacidad que debe estar presente en un sistema o componentes de sistema para satisfacer un contrato, estándar, especificación u otro documento formal. (3) Una representación documentada de una condición o capacidad como en (1) o (2). Los requerimientos pueden dividirse en: funcionales y no funcionales. Los requerimientos funcionales definen las funciones que el sistema será capaz de realizar. Describen las transformaciones que el sistema realiza sobre las entradas para producir salidas. Los requerimientos no funcionales tienen que ver con características que de una u otra forma puedan limitar el sistema, como por ejemplo, el rendimiento, en tiempo y espacio, interfaces de usuario, fiabilidad, robustez del sistema, disponibilidad de equipo, mantenimiento, seguridad, portabilidad, estándares, etc.

En la ingeniería de sistemas y la ingeniería de software la ingeniería de requerimientos comprende el conjunto de tareas relacionadas con la determinación de las necesidades o de las condiciones a satisfacer para un software nuevo o modificado, tomando en cuenta los diversos requerimientos de los clientes. La ingeniería de requerimientos, por consiguiente, proporciona el mecanismo apropiado para entender lo que el cliente quiere, analizar las necesidades, evaluar la factibilidad, negociar una solución razonable, especificar la solución sin ambigüedades, validar la especificación, y administrar los requerimientos conforme éstos se transforman en un sistema operacional. El proceso de la ingeniería de requerimientos se lleva a cabo a través de siete distintas funciones: (1) Inicio, (2) obtención, (3) elaboración, (4) negociación, (5) especificación, (6) validación y (7) gestión. Resulta importante destacar que algunas de estas funciones de la ingeniería de requerimientos ocurren en paralelo y que todas deben adaptarse a las necesidades del proyecto. Todas están dirigidas a definir lo que el cliente quiere, y sirven para establecer una base sólida respecto del diseño y la construcción de lo que obtendrá el cliente.

Una conversación inicial es todo lo que se necesita para precipitar un esfuerzo importante de ingeniería del software. Pero en general, la mayoría de los proyectos comienza cuando se identifica una necesidad de negocios o se descubre un nuevo mercado o servicio potencial. Al inicio del proyecto los ingenieros de requerimientos hacen una serie de preguntas libres de contexto. El objetivo es establecer una comprensión básica del problema, las personas que quieren la solución, la naturaleza de la solución que se desea, y la efectividad de la comunicación preliminar. En la siguiente etapa, aparenta ser muy simple preguntarle al cliente, a los usuarios y otros interesados cuáles son los objetivos para el sistema o producto, qué es lo que se debe lograr, de qué forma el producto satisface las necesidades del negocio y por último cómo se utilizará el sistema o producto día a día. Pero estas cuestiones no son simples como aparentan, son bastante complicadas. La información conseguida con el cliente durante el inicio y la obtención se expande y se refina durante la elaboración. Esta actividad de la ingeniería de requerimientos se enfoca en el desarrollo de un modelo técnico refinado de las funciones, características y restricciones del software.

La elaboración es una acción del modelado del análisis y se compone de una serie de tareas de modelado y refinamiento. La elaboración se conduce mediante la creación y el refinamiento de escenarios del usuario que describen la forma en que el usuario final, y otros actores, interactuarán con el sistema. Cada escenario del usuario se analiza para obtener clases de análisis: entidades del dominio de negocios visibles para el usuario final. Se definen los atributos de cada clase de análisis y se identifican los servicios que requiere cada clase. Se identifican las relaciones y la colaboración entre las clases y se produce una variedad de diagramas con el “Lenguaje de Modelado Unificado”. El resultado final de la elaboración es un modelo de análisis que define el dominio de la información, las funciones y el comportamiento del problema. Posteriormente, dados los recursos limitados del negocio, resulta usual que los clientes y usuarios pidan más de lo que se puede lograr. También es relativamente común que diferentes clientes o usuarios propongan requerimientos que entran en conflicto entre sí al argumentar que su versión es “esencial para las necesidades especiales del cliente”. El ingeniero de requerimientos debe conciliar estos conflictos por medio de un proceso de negociación. Se pide a los clientes, usuarios y otros interesados que ordenen sus requerimientos y después discutan los conflictos relacionados con la prioridad. Se identifican y analizan los riesgos asociados con cada requerimiento. Se hacen “estimaciones” preliminares del esfuerzo requerido para su desarrollo y después se utilizan para evaluar el impacto de cada requerimiento en el costo del proyecto y sobre el tiempo de entrega.

Mediante un enfoque iterativo, los requerimientos se eliminan, combinan o modifican de forma que cada parte alcance cierto grado de satisfacción. Una especificación puede ser un documento escrito, un conjunto de modelos gráficos, un modelo matemático formal, una colección de escenarios de uso, un prototipo o cualquier combinación de éstos. La especificación es el producto de trabajo final que genera la ingeniería de requerimientos. Sirve como base para las actividades de ingeniería del software subsecuentes. Describe la función y el desempeño de un sistema basado en computadora y las restricciones que regirán su desarrollo. La calidad de los productos de trabajo procedentes de la ingeniería de requisitos se evalúa durante el proceso de validación. La validación de requisitos examina la especificación para asegurar que todos los requisitos del software se han establecido de manera precisa; que se han detectado las inconsistencias, omisiones y errores y que éstos han sido corregidos, y que los productos de trabajo cumplen con los estándares establecidos para el proceso, proyecto y producto. La función de gestión de los requerimientos es un conjunto de actividades que ayudan al equipo del proyecto a identificar, controlar y rastrear los requisitos y los cambios a estos en cualquier momento mientras se desarrolla el proyecto. Muchas de estas actividades son idénticas a las actividades de la gestión de la configuración del software.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Mayo 18 de 2009

No hay comentarios: