Los Requerimientos en un sistema, 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 al desarrollo de
sistemas.
La razón principal para escoger este tema se fundamentó en la gran cantidad de
proyectos de software que no llegan a cumplir sus objetivos. En nuestro país
somos partícipes de este problema a diario, en donde se ha vuelto común la
compra de sistemas extranjeros, para luego "personalizarlos" supuestamente a la
medida de las empresas.
Tal "personalización", la mayoría de las veces, termina retrasando
el proyecto en meses, o incluso en años. El reemplazo de plataformas y
tecnologías obsoletas, la compra de sistemas completamente nuevos, las
modificaciones de todos o de casi todos los programas que forman un sistema,
entre otras razones, llevan a desarrollar proyectos en calendarios sumamente
ajustados y en algunos casos irreales; esto ocasiona que se omitan muchos pasos
importantes en el ciclo de vida de desarrollo, entre estos, la definición de los
requerimientos.
Estudios realizados muestran que más del 53% de los
proyectos de software fracasan por no realizar un estudio previo de requisitos.
Otros factores como falta de participación del usuario, requerimientos
incompletos y el cambio a
los requerimientos, también ocupan sitiales altos en los motivos de fracasos.
Con todo lo que se desarrollara en este apartado se pretende alcanzar los
siguientes objetivos:
-
Resaltar la importancia
que tiene la Ingeniería de Requerimientos dentro del ciclo de desarrollo.
-
Dar a conocer
las diferentes alternativas que existen para identificar requerimientos.
-
Ayudar a
comprender la diferencia que existe entre las diferentes técnicas utilizadas
en la IR.
-
Minimizar las
dudas que se tiene sobre los casos de uso.
-
Mostrar la
utilización de herramientas CASE dentro de la administración de requisitos.
La ingeniería de requerimientos y sus principales
actividades
¿Qué son Requerimientos?
Normalmente, un tema de la Ingeniería de Software
tiene diferentes significados. De las muchas definiciones que existen para
requerimiento, ha continuación se presenta la definición que aparece en
el glosario de la IEEE .
(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 puedes dividirse en :
Requerimientos 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.
Requerimientos no funcionales: 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.
Características de los requerimientos
Las características de un requerimiento son sus propiedades principales. Un
conjunto de requerimientos en estado de madurez, deben presentar una serie de
características tanto individualmente como en grupo. A continuación se presentan
las más importantes.
Necesario: Un requerimiento es necesario si su omisión provoca una
deficiencia en el sistema a construir, y además su capacidad, características
físicas o factor de calidad no pueden ser reemplazados por otras capacidades
del producto o del proceso.
Conciso: Un requerimiento es conciso si es fácil de leer y entender.
Su redacción debe ser simple y clara para aquellos que vayan a consultarlo en un
futuro.
Completo: Un requerimiento está completo si no necesita ampliar detalles
en su redacción, es decir, si se proporciona la información suficiente para su
comprensión.
Consistente: Un requerimiento es consistente si no es contradictorio con
otro requerimiento.
No ambiguo: Un requerimiento no es ambiguo cuando tiene una
sola interpretación. El lenguaje usado en su definición, no debe causar
confusiones al lector.
Verificable: Un requerimiento es verificable cuando puede ser
cuantificado de manera que permita hacer uso de los siguientes métodos de
verificación: inspección, análisis, demostración o pruebas.
Dificultades para definir los requerimientos
-
Los requerimientos no son
obvios y vienen de muchas fuentes.
-
Son difíciles
de expresar en palabras (el lenguaje es ambiguo).
-
Existen muchos
tipos de requerimientos y diferentes niveles de detalle.
-
La cantidad de
requerimientos en un proyecto puede ser difícil de manejar.
-
Nunca son
iguales. Algunos son más difíciles, más riesgosos, más importantes o más
estables que otros.
-
Los
requerimientos están relacionados unos con otros, y a su vez se relacionan
con otras partes del proceso.
-
Cada
requerimiento tiene propiedades únicas y abarcan áreas funcionales
específicas.
-
Un
requerimiento puede cambiar a lo largo del ciclo de desarrollo.
-
Son difíciles
de cuantificar, ya que cada conjunto de requerimientos es particular para
cada proyecto.
Ingeniería de Requerimientos vs. Administración de Requerimientos
El proceso de recopilar, analizar y verificar las necesidades
del cliente para un sistema es llamado Ingeniería de Requerimientos. La meta de
la ingeniería de requerimientos (IR) es entregar una especificación de
requisitos de software correcta y completa.
A continuación se darán algunas definiciones para ingeniería de requerimientos.
"Ingeniería de Requerimientos es la disciplina para
desarrollar una especificación completa, consistente y no ambigua, la cual
servirá como base para acuerdos comunes entre todas las partes involucradas y en
dónde se describen las funciones que realizará el sistema"
Boehm 1979.
"Ingeniería de Requerimientos es el proceso por el cual se
transforman los requerimientos declarados por los clientes ,
ya sean hablados o escritos, a especificaciones precisas, no ambiguas,
consistentes y completas del comportamiento del sistema, incluyendo funciones,
interfaces, rendimiento y limitaciones". STARTS Guide 1987.
"Es el proceso mediante el cual se intercambian diferentes
puntos de vista para recopilar y modelar lo que el sistema va a realizar. Este
proceso utiliza una combinación de métodos, herramientas y actores, cuyo
producto es un modelo del
cual se genera un documento de requerimientos" Leite 1987.
"Ingeniería de requerimientos es un enfoque sistémico para recolectar, organizar
y documentar los requerimientos del sistema; es también el proceso que establece
y mantiene acuerdos sobre los cambios de requerimientos, entre los clientes y el
equipo del proyecto" Rational Software
Importancia de la Ingeniería de Requerimientos
Los principales beneficios que se obtienen de la
Ingeniería de Requerimientos son:
-
Permite gestionar las
necesidades del proyecto en forma estructurada: Cada actividad de la IR
consiste de una serie de pasos organizados y bien definidos.
-
Mejora la
capacidad de predecir cronogramas de proyectos, así como sus resultados: La
IR proporciona un punto de partida para controles subsecuentes y actividades
de mantenimiento, tales como estimación de costos, tiempo
y recursos necesarios.
-
Disminuye los
costos y retrasos del proyecto: Muchos estudios han demostrado que reparar
errores por un mal desarrollo no descubierto a tiempo, es sumamente caro;
especialmente aquellas decisiones tomadas durante la RE.
-
Mejora la
calidad del software: La calidad en el software tiene que ver con cumplir un
conjunto de requerimientos (funcionalidad, facilidad de uso,
confiabilidad, desempeño, etc.).
-
Mejora
la comunicación entre equipos: La especificación de requerimientos
representa una forma de consenso entre clientes y desarrolladores. Si este
consenso no ocurre, el proyecto no será exitoso.
-
Evita rechazos
de usuarios finales: La ingeniería de requerimientos obliga al cliente a
considerar sus requerimientos cuidadosamente y revisarlos dentro del marco
del problema, por lo que se le involucra durante todo el desarrollo del
proyecto.
Personal involucrado en la Ingeniería de Requerimientos
Realmente, son muchas las personas involucradas en el desarrollo de los
requerimientos de un sistema. Es importante saber que cada una de esas personas
tienen diversos intereses y juegan roles específicos dentro de
la planificación del proyecto; el conocimiento de cada papel desempeñado,
asegura que se involucren a las personas correctas en las diferentes fases del
ciclo de vida, y en las diferentes actividades de la IR.
No conocer estos intereses puede ocasionar una comunicación poco efectiva entre
clientes y desarrolladores, que a la vez traería impactos negativos tanto en
tiempo como en presupuesto. Los roles más importantes pueden clasificarse como
sigue:
-
Usuario final: Son las
personas que usarán el sistema desarrollado. Ellos están relacionados con la
usabilidad, la disponibilidad y la fiabilidad del sistema; están
familiarizados con los procesos específicos que debe realizar el software,
dentro de los parámetros de su ambiente laboral. Serán quienes utilicen las
interfaces y los manuales de usuario.
-
Usuario Líder: Son los individuos que comprenden el ambiente del sistema
o el dominio del problema en donde será empleado el software desarrollado.
Ellos proporcionan al equipo técnico los detalles y requerimientos de las
interfaces del sistema.
-
Personal de
Mantenimiento: Para proyectos que requieran un mantenimiento eventual,
éstas personas son las responsables de la administración de cambios, de la
implementación y resolución de anomalías. Su trabajo consiste en revisar y
mejorar los procesos del producto ya finalizado.
-
Analistas y
programadores: Son los responsables del desarrollo del producto en sí;
ellos interactúan directamente con el cliente.
-
Personal de
pruebas: Se encargan de elaborar y ejecutar el plan de pruebas para
asegurar que las condiciones presentadas por el sistema son las adecuadas.
Son quienes van a validar si los requerimientos satisfacen las necesidades
del cliente.
Otras personas que pueden estar involucradas, dependiendo de la magnitud del
proyecto, pueden ser: administradores de proyecto, documentadores, diseñadores
de base de datos, programadores, analistas, entre otros.
Puntos a considerar durante la Ingeniería de
Requerimientos
Objetivos del negocio y ambiente de trabajo: Aunque los objetivos del
negocio están definidos frecuentemente en términos generales, son usados para
descomponer el trabajo en tareas específicas. En ciertas situaciones IR se
enfoca en la descripción de las tareas y en el análisis de sistemas similares.
Esta información proporciona la base para especificar el sistema que será
construido; aunque frecuentemente se añadan al sistema tareas que no encajan con
el ambiente de trabajo planificado.
El nuevo sistema cambiará el ambiente de trabajo, sin embargo, es muy
difícil anticipar los efectos actuales sobre la organización. Los cambios no
ocurren solamente cuando un nuevo software es implementado y puesto en
producción; también ocurren cuando cambia el ambiente que lo rodea
(nuevas soluciones a problemas, nuevo equipo para instalar, etc.). La necesidad
de cambio es sustentada por el enorme costo de mantenimiento; aunque existen
diversas razones que dificultan el mantenimiento del software, la falta
de atención a la IR es la principal.
Frecuentemente la especificación inicial es también la especificación final, lo
que obstaculiza la comunicación y el proceso de aprendizaje de las personas
involucradas; esta es una de las razones por las cuales existen sistemas
inadecuados.
Punto de vista de los clientes
Muchos sistemas tienen diferentes tipos de clientes. Cada grupo de clientes
tiene necesidades diferentes y, diferentes requerimientos tienen diferentes
grados de importancia para ellos. Por otro lado, escasas veces tenemos que los
clientes son los mismos usuarios; trayendo como consecuencia que los clientes
soliciten procesos que causan conflictos con los solicitados por el usuario.
Diferentes puntos de vistas también pueden tener consecuencias negativas, tales
como datos redundantes, inconsistentes y ambiguos.
El tamaño y complejidad de los requerimientos ocasiona desentendimiento,
dificultad para enfocarse en un solo aspecto a la vez y dificultad para
visualizar relaciones existentes entre requerimientos.
-
Barreras de comunicación:
La ingeniería
de requerimientos depende de una intensa comunicación entre clientes y
analistas de requerimientos; sin embargo, existen problemas que no pueden
ser resueltos mediante la comunicación.
Para remediar esto, se deben abordar nuevas técnicas operacionales que
ayuden a superar estas barreras y así ganar experiencia dentro del marco del
sistema propuesto.
-
Evolución e integración del
sistema: Pocos sistemas son construidos desde cero. En la práctica, los proyectos se
derivan de sistemas ya existentes. Por lo tanto, los analistas de
requerimientos deben comprender esos sistemas, que por lo general son una
integración de componentes de varios proveedores.
Para encontrar una solución a problemas de este tipo,
es muy importante hacer planeamientos entre los requerimientos y la fase
de diseño; esto minimizará la cantidad de fallas directas en el código.
-
Documentación de
requerimientos: Los documentos de ingeniería de requerimientos son largos. La mayoría están
compuestos de cientos o miles de páginas; cada página contiene muchos
detalles que pueden tener efectos profundos en el resto del sistema.
Normalmente, las personas se
encuentran con dificultades para comprender documentos de este tamaño, sobre
todo si lo leen cuidadosamente. Es casi imposible leer un documento de
especificación de gran tamaño, pues difícilmente una persona puede memorizar
los detalles del documento. Esto causa problemas y errores que no son
detectados hasta después de haberse construido el sistema.
Actividades de la Ingeniería de Requerimientos
En el proceso de IR son esenciales diversas actividades. En este documento serán
presentadas secuencialmente, sin embargo, en un proceso de ingeniería de
requerimientos efectivo, estas actividades son aplicadas de manera continua y en
orden variado.
A pesar de las diferentes interpretaciones podemos identificar y extraer cinco
actividades principales que son:
-
Análisis del Problema
-
Evaluación y
Negociación
-
Especificación
-
Validación
-
Evolución
A continuación se explicará cada una de ellas, presentándolas en el orden en que
deben ser aplicadas para un nuevo proyecto.
Análisis del Problema
El objetivo de esta actividad es entender las verdaderas necesidades del
negocio.
Antes de describir qué pasos deben cumplirse en esta actividad, debemos tener
una definición clara del término "Problema".
"Un problema puede ser definido como la diferencia entre las cosas como se
perciben y las cosas como se desean". Aquí vemos nuevamente la importancia que
tiene una buena comunicación entre desarrolladores y clientes; de esta
comunicación con el cliente depende que entendamos sus necesidades.
A través de la definición de problema, podemos ver entonces que la actividad de
"Análisis del Problema" tiene por objetivo que se comprendan los
problemas del negocio, se evalúen las necesidades iniciales de todos los
involucrados en el proyecto y que se proponga una solución de alto nivel para
resolverlo.
Durante el análisis del problema, se realizan una serie de pasos para garantizar
un acuerdo entre los involucrados, basados en los problemas reales del negocio.
Estos pasos son los siguientes
Comprender el problema que se está resolviendo: Es importante determinar
quién tiene el problema realmente, considerar dicho problema desde una variedad
de perspectivas y explorar muchas soluciones desde diferentes puntos de vista.
Veamos la siguiente necesidad: "El cliente se queja mucho por la
enorme fila que debe formar para realizar una transacción bancaria".
Perspectiva del cliente = Pérdida de tiempo
Perspectiva del banco = Posibles pérdidas de clientes
Posibles soluciones pueden ser, determinar por qué demoran los cajeros,
colocar una nueva caja (implica contratación de nuevos cajeros), abrir una
nueva sucursal (involucra personal nuevo y estudio de mercado), realizar
transacciones por otros medios (teléfono, internet, mediante cajeros
automáticos, autobancos, etc).
Como puede verse, múltiples soluciones aplican para el mismo problema, sin
embargo, sólo una de ellas será la más factible. Las soluciones iniciales,
deben ser definidas tomando en cuanta tanto la perspectiva técnica como la
del negocio.
Construir un vocabulario común: Debe confeccionarse un glosario en dónde
se definan todos los términos que tengan significados comunes (sinónimos) y que
serán utilizados durante el proyecto. Por ejemplo, las palabras pignoración,
retención, valor en suspenso, custodia, garantía, entre otras, son utilizadas
para referirse a la acción de dejar una prenda (puede ser cualquier forma de
ahorros) como garantía de una deuda adquirida.
La creación de un
glosario es sumamente beneficiosa ya que reduce los
términos ambiguos desde el principio, ahorra tiempo, asegura que todos los
participantes de una reunión están en la misma página, además de ser
reutilizable en otros proyectos.
Identificar a los afectados por el sistema: Identificar a todos los afectados
evita que existan sorpresas a medida que avanza el proyecto. Las necesidades de
cada afectado, son discutidas y sometidas a debate durante de ingeniería de
requerimientos, aunque esto no garantiza que vaya a estar disponible toda la
información necesaria para especificar un sistema adecuado.
Para saber quiénes son las personas, departamentos, organizaciones internas o
externas que se verán afectadas por el sistema, debemos realizar algunas
preguntas.
-
¿Quién usará el sistema que se
va a construir?
-
¿Quién
desarrollará el sistema?
-
¿Quién probará
el sistema?
-
¿Quién
documentará el sistema?
-
¿Quién dará
soporte al sistema?
-
¿Quién dará
mantenimiento al sistema?
-
¿Quién
mercadeará, venderá, y/o distribuirá el sistema?
-
¿Quién se
beneficiará por el retorno de inversión del sistema?
Como vemos, debe conocerse la opinión de todo aquél que de una u otra forma está
involucrado con el sistema, ya sea directa o indirectamente.
Definir los límites y restricciones del sistema: Este punto es importante
pues debemos saber lo que se está construyendo, y lo que no se está
construyendo, para así entender la estrategia del producto a corto y largo
plazo. Debe determinarse cualquier restricción ambiental, presupuestaria, de
tiempo, técnica y de factibilidad que limite el sistema que se va a construir.
Evaluación y negociación de los requerimientos
La diversa gama de fuentes de las cuales provienen los requerimientos, hacen
necesaria una evaluación de los mismos antes de definir si son adecuados para el
cliente. El término "adecuado" significa que ha sido percibido a un nivel
aceptable de riesgo tomando en cuenta las factibilidades técnicas y económicas,
a la vez que se buscan resultados completos, correctos y sin ambigüedades.
En esta etapa se pretende limitar las expectativas del cliente apropiadamente,
tomando como referencia los niveles de abstracción y descomposición de cada
problema presentado.
Los principales pasos de esta actividad son:
Descubrir problemas potenciales: En este paso se asegura que todas las
características descritas en el punto 1.1 estén presentes en cada uno de los
requerimientos, es decir, se identifican aquellos requerimientos ambiguos,
incompletos, inconsistentes, etc.
Clasificar los requerimientos:
En este paso se busca identificar la importancia que tiene un requerimiento en
términos de implementación. A esta característica se le conoce como prioridad y
debe ser usada para establecer la secuencia en que ocurrirán las actividades de
diseño y prueba de cada requisito. La prioridad de cada requerimiento dependerá
de las necesidades que tenga el negocio.
En base a la prioridad, cada requerimiento puede ser
clasificados como mandatorio, deseables o innecesarios. Un requerimiento
es mandatorio si afecta una operación crítica del negocio. Si existe
algún proceso que se quiera incluir para mejorar los procesos actuales, estamos
ante un requerimiento deseable; y si se trata de un requerimiento informativo o
que puede esperar para fases posteriores, el requerimiento es catalogado como
innecesario.
Una vez hecha esta categorización de los requerimientos, puedo tomar como
estrategia general el incluir los mandatorios, discutir los deseables y
descartar los innecesarios. Antes de decidir la inclusión de un requerimiento,
también debe analizarse su costo, complejidad, y una cantidad de otros factores.
Por ejemplo, si un requerimiento fuera trivial de implementar, puede ser una
buena idea incluirlo por más que éste sea sólo deseable.
Evaluar factibilidades y riesgos: Involucra la evaluación de factibilidades
técnicas (¿pueden implementarse los requerimientos con la tecnología actual?);
factibilidades operacionales (¿puede ser el sistema utilizado sin alterar
el organigrama actual?); factibilidades económicas (¿ha sido aprobado por los
clientes el presupuesto?).
En la actividad de evaluación y negociación, se incrementa la comunicación entre
el equipo de desarrollo y los afectados. Para que los requerimientos puedan ser
comunicados de manera efectiva, hay una serie de consideraciones que deben
tenerse en cuenta; entre las principales tenemos:
-
Documentar todos los
requerimientos a un nivel de detalle apropiado.
-
Mostrar todos
los requerimientos a los involucrados en el sistema.
-
Analizar el
impacto que causen los cambios a requerimientos antes de aceptarlos.
-
Establecer las
relaciones entre requerimientos que indiquen dependencias.
-
Negociar con
flexibilidad para que exista un beneficio mutuo.
-
Enfocarse en
intereses y no en posiciones.