Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El éxito de un sistema de software se mide de acuerdo al grado con que este y su proyecto de
desarrollo cumplen con el objetivo para el cual fueron requeridos. La Ingeniería de
Requerimientos es la parte inicial del proceso de desarrollo la cual permite descubrir este objetivo
mediante la obtención, análisis y documentación de todos los requerimientos del cliente. El
problema fundamental del desarrollo de los sistemas de software es que los requerimientos son
inherentemente dinámicos. Estos cambian constantemente con el tiempo y los cambios se deben a
múltiples factores entre los que se encuentran, cambios por mejoras, cambios por errores
descubiertos, cambios por adopción de nuevas tecnologías ó cambios por mejoras en la
comprensión del sistema, entre otros. Debido a su naturaleza dinámica, el proceso de Ingeniería
de Requerimientos debe ser preciso y flexible a la vez. Preciso por que debe incluir todos los
requerimientos del cliente y del ambiente donde este estará operando. Así mismo debe ser
flexible, ya que los requerimientos están sujetos a constantes cambios.
Los requerimientos de software se definen como las necesidades de los clientes, los servicios que
el usuario desea que proporcione el sistema y las restricciones sobre las que el software debe
operar. El resultado del proceso de requerimientos es la base para el diseño, la implementación y
la evaluación del software.
A pesar de los avances recientes en la Ingeniería de Software, en la actualidad existe una gran
cantidad de desarrolladores que no hacen uso de los procedimientos y actividades que
proporciona la Ingeniería de Software en el desarrollo de sistemas. Esto afecta particularmente a
la Ingeniería de Requerimientos ya que si no se descubren y especifican todos los requerimientos
del sistema en desarrollo, podría conducir a la entrega de un producto de software incompleto
(sin satisfacer completamente las necesidades de los clientes), con defectos y poco funcional.
Esto podría provocar también el abandono de los proyectos de software en pleno proceso de
desarrollo o que estos sean entregados con retrasos y a costos mayores a los estimados.
2
La Ingeniería de Requerimientos en una fase clave en el proceso de Ingeniería de Software ya
que es la etapa en la cual se decide que es lo que se quiere construir. La fase de requerimientos es
la etapa del proceso que más afecta al producto resultante, si no se lleva a cabo adecuadamente.
Ninguna otra fase del proceso es más costosa de reparar. Muchos errores en los requerimientos
pasan sin detectarse hasta varias fases adelante en el ciclo de vida, y la corrección de estos es más
costosa, entre más fases se hayan terminado.
En la Figura 2.1 se muestra la interacción que existe entre las diferentes actividades del proceso
de Ingeniería de Requerimientos utilizando el paradigma de cascada, en donde cada actividad
tiene un retorno a la actividad anterior. Se parte del hecho de que existe una definición general
del problema y un análisis de factibilidad, el cual permite descubrir los problemas que involucra
el desarrollo del software. Siempre que se resuelvan los problemas descubiertos en el análisis de
factibilidad, el proceso de Ingeniería de Requerimientos inicia con la actividad de la obtención de
los requerimientos.
3
fácil, por lo cual en los próximos capítulos expondremos algunas de las técnicas mas
utilizadas para la obtención de requerimientos.
5. Validación de los requerimientos. En esta actividad, se verifica que lo escrito sea realmente
lo que requiere el cliente. En algunos casos, en esta actividad se desarrollan prototipos de
software para visualizar los requerimientos de software, a fin de validar su funcionalidad.
En cada una de las actividades del proceso de la Ingeniera de Requerimientos se llevan a cabo
tareas específicas utilizando técnicas y herramientas de la Ingeniería de Requerimientos. El
objetivo de la Ingeniería de Requerimientos es obtener un documento formal (DER) en donde se
especifiquen las características y restricciones que debe cumplir el sistema que se va a
desarrollar. Este documento debe cumplir con ciertas características de calidad, como son las
siguientes: entendible, necesario, consistente, no ambiguo, completo, verificable, correcto,
realista, rastreable y modificable.
4
Figura 2.1. El proceso de Ingeniería de Requerimientos en el modelo de cascada.
Dentro de las actividades del proceso de Ingeniería de Requerimientos se encuentran también las
siguientes tareas:
• Mantenimiento de los planes del proyecto a fin de cumplir con los tiempos de desarrollo.
Una vez que los requerimientos son completamente especificados, otros procesos del desarrollo
deben llevarse a cabo: diseño, implementación, pruebas y mantenimiento.
Los modelos descritos en las figuras 2.1 y 2.2 son adecuados para lograr el Documento de
Especificación de los Requerimientos del sistema. Los dos modelos poseen cuatro actividades
enlazadas que permiten avanzar o retroceder en el proceso en cualquier momento del desarrollo.
Esto permite lograr un documento de requerimientos completo y consistente.
6
Figura 2.2. El modelo espiral del proceso de Ingeniería de Requerimientos.
1. Documentos del proyecto. Los documentos del proyecto que proporcionaran información
importante al proceso de la Ingeniería de Requerimientos son el documento de administración
del proyecto y el documento de factibilidad. El documento de administración del proyecto
incluye las actividades de todo el proyecto, el personal asignado y los tiempos de cada
actividad. El documento de factibilidad ayuda a entender la capacidad técnica y
organizacional con que cuentan los desarrolladores para llevar a cabo el proyecto e identifica
si es capaz de llevarlo a cabo dentro de los tiempos y costos estimados.
7
desarrollar el sistema si no se conoce el ambiente sobre el cual operará y cuales son los
usuarios del futuro sistema.
3. Necesidades de los clientes y usuarios. Define que el lo que el cliente y los usuario
requieren del sistema para poder llevar a cabo su labor.
Por otro lado las salidas del proceso son las siguientes.
3. Modelos del Sistema. Son una serie de modelos gráficos que pueden consistir en diagramas
de flujo de datos, diagramas de entidad-relación, diagramas de objetos, entre otros, que
permiten describir la funcionalidad del sistema. Estos modelos pueden estar contenidos en los
documentos DDR o DER.
4. Prototipo. Es una versión del sistema de software, el cual no incluye toda su funcionalidad.
En muchas ocasiones un prototipo permite descubrir, modificar o validar algunos de los
requerimientos del sistema.
Como puede observarse la salida más importante del proceso es el documento de especificación.
Este documento es conocido también como Documento de Especificación de Requerimientos de
Software (DER).
8
2.2 ¿Que son los requerimientos y por que son tan importantes?
Un requerimiento de software permite definir las funciones, capacidades o atributos de cualquier
sistema de software. También, los requerimientos pueden representar factores de calidad del
sistema que permitirán evaluar su utilidad a un cliente o usuario. Los requerimientos son los
datos de entrada al proceso de desarrollo de software y representan lo que se requiere
implementar. Los requerimientos también representan una descripción de cómo el sistema deberá
comportarse, describe información del dominio de la aplicación, describe restricciones de la
operación del sistema y especifica atributos ó propiedades del sistema.
De cualquier forma, los requerimientos definen un problema por resolver. Este problema puede
constituir el desarrollo de un sistema de software nuevo ó la mejora de un software actualmente
en operación. El desarrollo de un software nuevo demanda mayores retos en cuanto a su
especificación. Por otro lado, la especificación de un software existente que demanda mejoras
debería ser más fácil, ya que tanto los clientes como los desarrolladores cuentan con cierta
experiencia que les permite conocer los requerimientos por mejorar.
Es claro que todo software tiene requerimientos que lo definen y quizás la parte más difícil de la
construcción del software es la decisión de que es lo que se debe construir. Ninguna otra parte del
desarrollo del software es más difícil que la definición precisa de los requerimientos del software.
No hay otra parte del proceso de desarrollo que pudiera perjudicar más al software resultante que
los requerimientos, si estos no son definidos correctamente. Corregir los requerimientos es más
difícil que corregir cualquier otra parte del proceso de desarrollo.
Toda aplicación de software tiene usuarios los cuales confían en esta para mejorar su
productividad o para mejorar algún atributo de sus sistemas anteriores. El tiempo dedicado para
9
entender las necesidades del usuario debe verse como una inversión a largo plazo para el éxito
del proyecto. Si los desarrolladores no cuentan con un documento de requerimientos, con el que
los clientes estén completamente de acuerdo, entonces será difícil llevar a buen final el desarrollo
del software o proporcionar un adecuado mantenimiento. Aun cuando se trate de un software
comercial, no definido por ningún cliente, dicho documento debe estar correctamente definido, y
en consecuencia claramente entendible.
En ocasiones es difícil especificar completamente todos los requerimientos antes del diseño o de
su construcción. En ocasiones, el tipo de software a desarrollar o su medio ambiente de operación
no se conocen completamente desde el principio. En estos casos, existen procesos iterativos e
incrementales (como los descritos en los capítulos 1.3.2 y 1.3.3) que permiten especificar y
construir el software en etapas o mediante prototipos. Sin embargo, aunque en este caso sea más
difícil escribir el documento de requerimientos, éste nunca debe faltar.
La obtención de requerimientos es un proceso difícil debido a que el cliente puede pedir algo que
no es factible de llevar a la práctica. Así mismo, puede ocurrir que los desarrolladores entiendan
distintas cosas de las que el cliente está requiriendo. Por estas razones el proceso de obtención de
requerimientos demanda especial atención.
Frecuentemente, existe una tendencia a comenzar el desarrollo de software sin haber dedicado
suficiente tiempo a comprender, analizar, administrar y documentar los requerimientos de una
forma adecuada. Muchos desarrolladores y clientes tienden a creer que el éxito del proyecto
depende de que tan rápido se comience a codificar. Sin embargo, de acuerdo a la experiencia
industrial, la mayoría de los proyectos que fracasan llevan a cabo una pobre recolección y análisis
de requerimientos.
Los requerimientos son inicialmente especificados por el cliente o usuario del sistema. El
analista de requerimientos (el cual forma parte del equipo de desarrollo) recolecta los
requerimientos y los transforma, de la especificación del cliente (requerimientos establecidos) a
su implementación real (requerimientos reales). Los requerimientos establecidos deben escribirse
en el documento DDR, mientras que los requerimientos reales deben estar en el documento DER.
Existe una diferencia significativa entre los requerimientos establecidos y los reales. Los
requerimientos establecidos son aquellos que el cliente provee, sin ningún cambio por parte de
los desarrolladores. Estos requerimientos pueden ser el resultado de una propuesta de desarrollo o
de entrevistas con el cliente. Este tipo de requerimientos se documentan mediante anotaciones en
10
lenguaje natural a veces acompañadas de dibujos o diagramas que describen al sistema tal y como
el cliente lo requiere. Los requerimientos reales, son aquellos que resultan del análisis exhaustivo
de lo que el cliente requiere. No solo incluye anotaciones de lo que el cliente requiere sino que
además es el resultado de un análisis que permite evaluar la factibilidad, la completitud y la
eficiencia de los requerimientos. Los requerimientos a menudo pueden ser confusos o vagos,
contradictorios entre si ó poco realistas. Los requerimientos reales tienden a evitar tener estas
características.
El documento de requerimientos, mostrado en la Figura 2.3, está dirigido a los usuarios y clientes
quienes verifican que realmente estén definidos todos los servicios y restricciones. Así mismo, el
documento de especificación de requerimiento sirve al equipo de desarrolladores como una base
para las siguientes fases del proceso de desarrollo, es decir, para iniciar el diseño y la
implementación del sistema.
Algunos de los requisitos que debe satisfacer un documento de requerimientos de software son
los siguientes:
11
2. Especificará las restricciones de la implementación.
Existen un gran número de consecuencias que se presentan cuando los requerimientos son
incorrectos o incompletos.
1. El sistema podría terminarse tarde o los costos podrían excederse más de lo esperado.
2. El cliente y los usuarios finales no estarán satisfechos con el sistema final. Podrían usar solo
parte de la funcionalidad del sistema o decidirse a abandonar el sistema al poco tiempo
después de empezar a utilizarlo.
3. El sistema podría no ser confiable, con errores frecuentes y caídas que podrían interrumpir la
operación normal del sistema.
4. Si el sistema continúa en uso, los costos de mantenimiento podrían ser muy altos.
El costo de reparar omisiones o errores en la etapa de requerimientos, suele ser mucho menor que
la reparación de errores en etapas posteriores del desarrollo. Consecuentemente, el costo de no
reparar los errores durante la etapa de requerimientos es muy alto.
12
2.3 El Rol del Analista de Requerimientos
Todo proyecto de software necesita un analista de requerimientos, ya que este estará a cargo de
todas las actividades del proceso de Ingeniería de Requerimientos.
requerimientos Factibilidad,
del negocio Tiempos y costos
requerimientos
requerimientos funcionales
del cliente/usuario
y no-funcionales
Cliente y Desarrolladores
Usuarios
Analista de Requerimientos
restricciones y requerimientos funcionales
requerimientos y no-funcionales
13
Además de llevar a cabo todas las actividades incluidas en el proceso de Ingeniería de
Requerimientos el analista debe realizar las siguientes actividades:
1. Definir los objetivos del proyecto y los beneficios al negocio. El trabajo del analista
comienza cuando este ayuda al cliente a definir para que se quiere llevar a cabo el proyecto y
cuales serán los beneficios que traerá el desarrollo del sistema de software. En esta actividad
deben definirse las oportunidades de negocio y los beneficios que traerá el sistema de
software al implementarse. Así mismo, en esta actividad se definirá el contexto, medio
ambiente de operación del sistema, las necesidades actuales del cliente y del mercado, y los
riesgos del negocio. Algunas de estas actividades obtienen su información del documento de
factibilidad. Como resultado del anterior análisis, en esta actividad se planteará una propuesta
general de la solución que se propone para el nuevo producto, la cual ayudará a cumplir con
los objetivos.
2. Identificar el problema a resolver y obtener los requerimientos. Una vez definidos los
objetivos del proyecto, es necesario que el analista junto con el cliente definan el problema
que se quiere resolver y de esta forma poder obtener los requerimientos.
3. Identificar a los involucrados en el desarrollo del proyecto así como a las clases de
clientes y usuarios. En esta actividad se identifican a las personas involucradas en el
proyecto, por parte del cliente y por parte del grupo de desarrollo. Así mismo se definen
responsabilidades y las actividades que realizarán.
14
capaz de proporcionar a los clientes con sistemas modernos y eficientes. Un sistema eficiente
es aquel que utiliza los recursos de forma eficiente, con el menor costo y en el menor tiempo
posible. Por otro lado, existen herramientas y metodologías de desarrollo de requerimientos
que el analista debe conocer para llevar a cabo su tarea eficientemente.
15
la programación. Por ejemplo, para hacer que un sistema sea rápido, no deben utilizarse
técnicas de programación o sistemas operativos que incluyan un alto overhead. La usabilidad
depende de la habilidad de los diseñadores de plantear una arquitectura del sistema que lleve
a una implementación que los usuarios puedan entender y que su uso sea fácil. El desempeño
tampoco es una función explicita, y su implementación implica que los diseñadores y los
programadores sean capaces de utilizar de la forma mas eficiente posible los recursos
computacionales disponibles. La seguridad puede ser una parte del sistema e incluir distintas
funciones. Por ejemplo, si se trata de un sistema basado en Web (referencia), el cual se quiere
proteger contra intrusos externos, la seguridad podría incluir un “firewall”(referencia), el cual
consiste de un conjunto de funciones que evitan que usuarios externos entren al sistema y lo
accedan sin autorización.
6. Modelar los requerimientos. El analista debe determinar los casos en los cuales es necesario
representar los requerimientos de forma grafica o mediante métodos visuales distintos a texto.
En estos casos se podrían incluir, por ejemplo, distintos tipos de gráficos para representar
arquitecturas, diagramas de flujos de información, diagramas de transición de estados,
diagramas de clases, diagramas de entidad-relación, diagramas de comportamiento, tablas, o
interfaces hombre-maquina.
3. Capacidad de organización. El analista debe ser capaz de organizar todas las actividades
que surjan alrededor de su ambiente. Así mismo debe ser capaz de coordinar al personal con
quien debe interactuar de forma tal que su labor sea eficiente. El proceso de Ingeniería de
requerimientos puede continuar durante todo el desarrollo del proyecto, ya que los
requerimientos pueden cambiar o evolucionar, y también nuevos requerimientos pueden
surgir con el desarrollo del sistema. Por estas razones, el analista no terminará su labor al
terminarse esta etapa, sino que continuará realizando su labor hasta que el sistema sea
finalmente puesto en operación.
4. Analizar los riesgos del desarrollo del software. Los riesgos son eventos que llevan a que el
proyecto falle, se retrase o introduzca problemas en el desarrollo. En muchas ocasiones los
17
proyectos de software parten de requerimientos en los cuales se desconoce la forma en que
estos serán implementados. Es necesario que el analista sea capaz de recolectar y analizar los
requerimientos. Así mismo, debe ser capaz de anticipar la forma en como estos
requerimientos deben ser implementados. Algunos requerimientos llevan a implementaciones
poco factibles, con grandes tiempos de implementación o muy costosos de llevar a la practica.
Cada requerimiento implica un riesgo cuando este se lleva a la implementación, por lo cual el
analista debe analizar cuales requerimientos son factibles, cuales no son factibles y los
correspondientes costos y tiempos de su implementación. El manejo de riesgos se discutió
con detalle en el capitulo anterior.
El cliente es cualquier persona que requiere ó que de alguna forma se beneficia de un producto de
software. Esta persona puede ser aquella que ordena la construcción del proyecto, quien lo
selecciona ó lo especifica, quien utiliza el producto de software ó también aquellos que de alguna
forma reciben los beneficios del producto de software. Los clientes proveen la idea y financian el
proyecto de software además de proveer el concepto del producto (sistema) de software que se
requiere y justifican su adquisición. Esta justificación debe estar descrita en términos del valor
que aportará el producto de software a los usuarios y a la organización que recibirá el producto de
software. El cliente es quien primero visualiza la necesidad de contratar el proyecto o el producto
de software de acuerdo a las necesidades de la organización, y también quien planea su posible
implantación dentro del negocio y los costos que ello implica. De esta forma el cliente, con la
ayuda del jefe del proyecto y del analista, planean el posible costo y el tiempo en que demanda
sea desarrollado el proyecto (o producto) de software.
En ocasiones, el cliente y los desarrolladores definen en conjunto los objetivos del producto de
software. Si el usuario conoce poco sobre el ambiente de operación o las funciones del producto a
desarrollar, entonces el analista de requerimientos podrá ayudar al cliente en la definición del
18
producto. De cualquier forma, en la mayoría de los casos, será útil que los desarrolladores ayuden
al cliente en la definición del producto.
Hay una clara diferencia entre el cliente y el usuario, aunque en ocasiones son la misma persona.
El cliente es quien solicita el proyecto, pero el usuario es quien finalmente operará dicho
software, después de que este sea implementado. De esta forma, el usuario es parte del personal
que trabaja para el cliente.
Es claro que el cliente no debe solicitar un software que los usuarios no puedan operar, y aquí es
donde potencialmente pueden surgir varios conflictos en los requerimientos. Sin embargo, es
difícil saber si un usuario podrá o no operar un software que aun no ha sido construido. Estos
conflictos suelen resolverse involucrando al usuario en la etapa de requerimientos y durante las
demás etapas del desarrollo. Al usuario hay que tomarlo en cuenta ya que es necesario identificar
su nivel de habilidades y conocimientos en el uso del producto de software. Además, los usuarios
pueden describir las actividades que ellos realizan cotidianamente y la calidad y funcionalidad
que esperan del producto. De hecho, el analista de requerimientos debe obtener de los usuarios
parte de los requerimientos.
A menudo los clientes proveen las necesidades generales del proyecto, pero los detalles
específicos los proveen los Ingenieros de la organización. Estos deben de trabajar conjuntamente
con el analista de requerimientos para entender y describir al mayor detalle posible las
necesidades del proyecto.
Algunos de las responsabilidades que se esperan del cliente son las siguientes:
• Plantear costos y tiempos esperados de desarrollo y estar abierto a discutir cambios en los
costos y tiempos de entrega.
• Estar siempre dispuesto a reunirse con los desarrolladores para discutir distintos aspectos del
proyecto.
19
• Respetar los procesos que implementarán los desarrolladores para implementar el producto.
Los usuarios de sistema de software pueden clasificarse de acuerdo a los siguientes aspectos:
• Sus privilegios de acceso o niveles de seguridad (tales como usuario invitado, administrador o
usuario de nivel interno).
• Tipo de usuarios necesarios para operar el sistema (persona, grupo de personas, robot, u otra
computadora).
La clasificación de usuarios del sistema ayuda a la obtención de requerimientos por que define a
detalle las características de los usuarios y de su actividad. Es importante distinguir a los usuarios
que utilizan el sistema con frecuencia para sus labores en la organización de aquellos que lo
utilizan esporádicamente. Esto no solo permitirá definir su rol en la organización sino también su
nivel de experiencia. Algunos usuarios por su inexperiencia, solo utilizan cierta funcionalidad del
sistema que les es de mayor utilizad ó la cual conocen mejor. Otra parte de la funcionalidad del
sistema no la utilizan, por que la desconocen ó por que no la encuentran útil. Obtener esta
información permite definir con mayor precisión los requerimientos y diseñar interfaces de
usuario más útiles y fáciles de usar.
Algunos usuarios del sistema no llegan a utilizarlo, sin embargo se ven indirectamente
influenciados por su operación. Este personal pueden ser los encargados de su mantenimiento,
los administradores del sistema o el personal de supervisión. Este personal es importante por que
permite verificar que las labores de los usuarios se lleven a cabo de forma eficiente y sin errores.
Algunos otros usuarios solo reciben los beneficios o los productos que entrega el sistema y
forman parte de la organización. Este tipo de personas pueden ser integradores o ingenieros de
producto que se encargan de usar y dar salida a los productos que produce el sistema de software.
Algunos usuarios pueden tener mayor nivel de autorización para el acceso a ciertas funciones o
niveles de operación del sistema de software. Por ejemplo, en un sistema de software de control
20
de tarjetas de crédito de un banco, deberán existir personas que cuenten un mayor nivel en la
organización o con mayor nivel de autorización para realizar operaciones de modificación de las
cuentas de las tarjetas de crédito.
Por otro lado, los usuarios no necesariamente tienen que ser personas. Algunos sistemas se
operan de forma automática, mediante otros sistemas de computo, mediante robots o de forma
híbrida computadora-humano. Muchos sistemas de software industriales operan en ambiente con
un alto nivel de ruido, contaminación o de calor, por lo cual se requiere de un sistema
automatizado para operar el sistema.
2. Determinar la factibilidad, los recursos necesarios, los costos y los tiempos estimados del
proyecto. En esta actividad debe definirse un documento de factibilidad que permita verificar
si el proyecto es factible de construirse.
21
oportunidades de negocio que se abren con la construcción del sistema, las necesidades
actuales del cliente y del mercado, las propuestas iniciales de solución y el contexto del
medio ambiente operativo.
4. Definición de los riesgos del proyecto. Un riesgo es un factor que altera de forma negativa el
desarrollo del software, que afecta su calidad, su costo o su fecha de terminación. El
documento de riesgos presenta los riesgos asociados con el desarrollo del sistema del
software. El documento de riesgos es necesario dentro del ciclo de desarrollo debido a que
permite anticipar los problemas, prever soluciones y registrar la experiencia en este tipo de
situaciones. Este documento es continuación al documento de factibilidad y contempla los
riesgos de todas las actividades del proceso de desarrollo, no solo de los riesgos de la
actividad de los requerimientos. Estimar las perdidas potenciales en caso de ocurrencia de
cada riesgo, la probabilidad de ocurrencia, y la posible habilidad de poder control tales
riesgos.
5. Documentos DDR y DER. Estos documentos son el resultado de las actividades del proceso
de Ingeniería de requerimientos sobre el proyecto del sistema de software a desarrollar.
6. Métodos, técnicas y herramientas a utilizar. Para cada una de las fases del proceso existen
distintos métodos, técnicas y herramientas bien documentadas que permiten hacer el proceso
más eficiente. Es necesario especificar cuales de estas serán utilizadas para cada fase del
proceso. En los próximos capitulo, se detallaran algunos de los métodos, las técnicas y las
herramientas mas conocidas para este proceso. Es necesario que el grupo de desarrolladores
se familiarice con ellas y que se justifiquen las razones por las cuales estas fueron elegidas.
7. Documentos de soporte. Deben existir un conjunto de documentos que ayuden a dar soporte
al proceso. Existen 2 tipos de documentos que serán utilizados con más frecuencia durante el
proceso de Ingeniería de Requerimientos. El primer tipo son todos aquellos documentos que
describen a la organización sus objetivos, funciones y flujos de trabajo, asi como su ambiente
operativo y el personal de la organización. El segundo documento mas importante es el
documento de administración de proyecto de desarrollo del software. Este documento permite
documentar todas las actividades del proceso, su planificación de actividades, tiempos y
asignación de personal. Otros documentos de soporte importantes son:
Tanto para el cliente como para el desarrollador pueden escribirse distintos reportes de
factibilidad (o podría también escribirse un solo reporte para ambos).
1. El sistema contribuirá a los objetivos de negocio de la organización del cliente y también del
desarrollador ?.
23
2. Podrá el sistema ser desarrollado con la tecnología actual, el personal disponible, y con las
restricciones de presupuesto y de tiempo de desarrollo impuestas ?.
4. Podrá el sistema ser operado eficientemente por los usuarios de la organización del cliente ?
Cada una de estas preguntas debe estar resuelta antes de comenzar el desarrollo del proyecto de
software. En el estudio de factibilidad es necesario consultar distintas fuentes de información
para decidir si el sistema debe ser construido o no. Este personal puede ser, administradores de
los departamentos de la organización del cliente, Ingenieros de Cómputo que tengan
conocimientos con el sistema requerido, expertos en técnicas relacionadas al proyecto y usuarios
finales del sistema. Así mismo, es recomendable también consultar a los desarrolladores, quienes
finalmente son quienes mas poseen mayores conocimientos técnicos en el dominio de la
aplicación requerida. Podrían existir distintas organizaciones que podrían llevar a cabo el
desarrollo, y algunas de estas podrían desarrollarlo factiblemente y otras no. Por esta razón,
también es importante que la organización del cliente estudie la experiencia en el dominio de la
aplicación de distintas organizaciones de desarrolladores, para poder decidir cual de estas
organizaciones es capaz de llevar a cabo el sistema requerido.
Un proyecto de software fracasará si este no cuenta con objetivos claros, o si algunos de los
involucrados en el proyecto no están de acuerdo en algunos objetivos. Dicho de otra forma, todos
los involucrados deben de estar de acuerdo en todos los objetivos del proyecto. En algunos
24
proyectos no hay una comunicación abierta, permanente y efectiva, o algunos de estos se
encuentran en distintos lugares geográficos, lo cual lleva a que algunos pudieran no trabar en
equipo o no conocer todos los objetivos del proyecto. El trabajo en equipo es esencial en
proyectos grandes y complejos en donde se requiere de personal no solo especializado en
software, sino también en otras múltiples disciplinas.
Si los objetivos del proyecto no están claramente definidos esto llevará a definir requerimientos
incompletos, erróneos o con frecuentes cambios. Por otro lado, los beneficios al negocio
describen la forma en que el sistema de software mejorará a la organización del cliente y a la vez
beneficiará a los desarrolladores.
La Tabla 2.1 describe la plantilla para el documento de objetivos del proyecto y beneficios al
negocio.
1.1. Antecedentes
2. Propuestas de solución.
3. Alcance y limitaciones
Tabla 2.1. Plantilla para el documento de objetivos del proyecto y beneficios al negocio.
25
2.7.1 Objetivos del Negocio
Los proyectos comienzan cuando existe la idea de que el nuevo sistema mejorará de alguna forma
la operación o las ganancias de la organización. Los objetivos describen principalmente los
beneficios que el nuevo sistema traerá a los clientes y a los desarrolladores.
Los objetivos del negocio pueden describirse mediante los siguientes factores:
Antecedentes. Los antecedentes permiten describir las razones y el contexto en que fue
concebido el nuevo producto. Provee una descripción general de los motivos que llevaron a la
decisión de construir el sistema de software
Criterios de Éxito. Proporcionar los beneficios que el sistema traerá al negocio mediante
criterios cuantitativos y cualitativos. La Tabla 2.2 presenta algunos ejemplos de objetivos del
negocio, financieros y no-financieros. Determinar la forma en que los clientes y desarrolladores
medirán el éxito en este proyecto. Describir los factores que tendrán el mayor impacto para
conseguir el éxito del proyecto, incluyendo factores que estén dentro y fuera del control de la
organización. Especificar criterios de medición del éxito.
Necesidades del cliente y del mercado. Describe las necesidades de clientes típicos de mercado
que se quiere abarcar, con el sistema a desarrollar, incluyendo las necesidades que actuales no se
satisfacen con los sistemas o tecnologías actuales. Presenta los problemas que actualmente
enfrentan los usuarios del sistema a actual, y que no se presentaran con el sistema a desarrollar.
Define a un alto nivel, los requerimientos no-funcionales más importantes con que debe contar el
nuevo sistema, sin incluir detalles de diseño o implementación.
26
Financieros No Financieros
Nombre del sistema o producto. Identifica el nombre del producto como se quiere dar a conocer
en el mercado.
27
Categoría del producto. Clasifica el producto de acuerdo al tipo de sistema de software. Por
ejemplo, sistema de información, sistema de manejo de bases de datos gerencial, sistema de
ventas de productos en Web.
Beneficio principal, razones para comprar el sistema o usarlo. Identifica los beneficios que el
sistema traerá a la organización y permite justificar su compra.
Sistema o procesos actuales, y otras alternativas competitivas. Identifica el sistema o los que
actualmente esta utilizando la organización describiendo las desventajas o problemas que se
tienen en su utilización.
Ventajas del desarrollo del nuevo sistema o producto. Describe las ventajas que traerá a la
organización el nuevo sistema de software.
Características principales del sistema. Describe las características principales del sistema, y si
es necesario las ordena por prioridad. Identifica cuales de estas características distinguen al
sistema del sistema actual, o de otros productos similares en el mercado. Cada una de estas
características podría convertirse en requerimientos funcionales, no-funcionales, o elementos del
sistema.
Suposiciones y dependencias. Describe las suposiciones que realizan los clientes-usuarios y los
desarrolladores al plantear los objetivos del proyecto. Con frecuencia las suposiciones que hacen
los clientes no son compartidas con los usuarios o con los desarrolladores, y viceversa. Si estas
suposiciones se plantear por escrito y son revisadas por cada integrante del proyecto, se pueden
discutir a fin de que todos estén de acuerdo en cada suposición y así presentar una visión común.
Las dependencias del proyecto describen todos los factores ligados al proyecto que están fuera de
su control. Estas podrían incluir, partes del proyecto que deben sub-contratarse, normas o
estándares a cumplir, regulaciones gubernamentales, y regulaciones o normas de la propia
empresa. Por otro lado, usualmente el sistema a implementar, estará operando dentro de una
empresa y formando parte de su sistema general de ventas, operación o administración, por lo
cual interactuará y dependerá de alguna forma de los sistemas o procesos de la organización,
cuando este se encuentre operando.
28
2.7.3 Alcance y limitaciones
El alcance describe las capacidades que el sistema de software este tendrá y también las que no
tendrá. En ocasiones el cliente requiere algunas funciones del sistema que son muy costosas, que
requieren de mucho tiempo de desarrollo o que están fuera del alcance o del contexto del
proyecto. Los requerimientos que se encuentren fuera del alcance deben rechazarse a menos de
que sea posible ampliar el alcance del proyecto para incluir estos requerimientos, con los
correspondientes cambios en presupuesto, administración del proyecto y personal. Es necesario
llevar un registro de los requerimientos rechazados y las razones de cada rechazo en caso de que
estos aparezcan de nuevo en el futuro. Las limitaciones definen los requerimientos que esta fuera
del alcance del proyecto y que no es posible implementarlos debido a situaciones de factibilidad.
29
Perfil de los participantes en el proyecto. Los participantes del proyecto son todos aquellos
individuos, grupos u organizaciones que participan activamente en el proyecto. El perfil de los
participantes describe y clasifica a los participantes de acuerdo al área en donde se encontraran
participando. Seleccionar personal para trabajar en el proyecto depende de la especialidad de
cada posible participante y de su experiencia. Es importante integrar a los participantes en áreas
del proyecto en las cuales tengan conocimientos y experiencia. Si algún participante se integra a
alguna área en la cual no tenga experiencia previa, deberá dedicarse tiempo a entrenarlo o
capacitarlo, lo cual podría extender el tiempo de desarrollo de esta parte del proyecto.
Desarrollador:
• Area de especialidad.
• Responsabilidades asignadas.
Usuario u operador:
• Productividad actual.
30
cuales son implicaciones de diseño. Además de que podría en ocasiones ser posible conocer el
logro de estos requerimientos solo hasta que el sistema, o una parte de este halla sido construido.
Para poder identificar el ambiente operativo, es necesario elaborar un diagrama de contexto del
sistema. El diagrama de contexto permite definir una arquitectura inicial del sistema, las
interconexiones entre sus componentes mas importantes y también permite establecer los limites
o fronteras del sistema. El diagrama de contexto es la abstracción de mas alto nivel que permite a
usuarios y desarrolladores ponerse de acuerdo sobre los componentes que integran al sistema, su
funcionalidad y restricciones. Ayuda a identificar algunos de los flujos de información mas
importantes y sus conexiones con el mundo exterior.
1. Los Requerimientos del Usuario. Son expresados en lenguaje natural utilizando diagramas
fáciles de comprender, y representan los servicios que se espera que el sistema provea y las
restricciones bajo las cuales el sistema debe funcionar. También son conocidos como
Requerimientos del Cliente.
2. Los Requerimientos del Sistema. En estos requerimientos se establecen con más detalle los
servicios y restricciones del sistema. También se les conoce como especificación funcional o
Requerimientos del Desarrollador.
31
3. Especificación del Diseño del software. Es una descripción abstracta del diseño del software
que se utiliza como una base para el diseño y la implementación.
Los distintos niveles de descripción de requerimientos son necesarios debido a que informan de
manera clara su contenido a diferentes tipos de usuarios. Por ejemplo, los requerimientos de
usuario, como están expresado en un lenguaje claro, fácil y sin detalles funcionales, están
dirigidos a clientes administradores, usuarios finales del sistema, clientes ingenieros, contratistas
administradores y arquitectos del sistema.
Por otro lado, los requerimientos del sistema son dirigidos para usuarios técnicos del sistema,
clientes ingenieros, arquitectos del sistema y desarrolladores de software. Debido a su
especificación funcional dentro del sistema, es necesario contar con un cierto grado de
conocimiento técnico ó especialización en el área. Y por último, la especificación del diseño de
software está dirigida a clientes ingenieros, arquitectos del sistema y desarrolladores de software.
Los requerimientos evolucionan o tienden a cambiar de acuerdo a las necesidades del negocio o
el desarrollo del software puede llevar tiempo sobre todo si se trata de sistemas grandes. Desde
esta perspectiva los requerimientos se clasifican en:
• Requerimientos mutantes. Son requerimientos que cambian debido a los cambios del
ambiente en el que opera la organización.
34
• Requerimientos consecutivos. Estos requerimientos, son el resultado de la introducción
del sistema. Esta introducción puede cambiar los procesos de la organización y abrir
nuevas formas de trabajar que generarán nuevos requerimientos.
• Requerimientos negociables. Este tipo de requerimientos son aquellos los cuales son
sujetos a negociación con el cliente. En este tipo de requerimientos se pueden demandar
negociaciones para realizar cambios, mejoras, o pedir extensiones de tiempo de desarrollo
o presupuesto.
1. Problemas de alcance, en los cuales se describen el ámbito y los límites de operación del
software. En esta categoría algunos de los problemas podrían ser, que el ambiente del sistema
no esta bien delimitado, o que no exista información suficiente del flujo de información de la
organización.
2. Problemas de comprensión de lo que se quiere construir, con los clientes, usuarios y con los
grupos de desarrolladores. En esta categoría podrían aparecer distintos problemas:
• Los clientes y usuarios tienen poco conocimiento de las capacidades y limitaciones de los
sistemas de cómputo.
35
• Los analistas de requerimientos tienen poco conocimiento del dominio de la aplicación.
• Existen distintas perspectivas de cómo debe construirse el software, entre el cliente y los
desarrolladores.
1. Organización
2. Medio Ambiente
3. Proyecto.
36
En la obtención de requerimientos es necesario contar con una buen comprensión de la
organización para la cual se llevara a cabo la construcción del sistema, así como de los objetivos
que logrará el sistema para la organización. EL interés primordial de la organización no es el
sistema de software en si, sino los efectos positivos que se esperan con su introducción dentro del
medio ambiente de la organización. En muchas ocasiones, esto no se refleja en la práctica, ya que
muchos proyectos se concentran mas en el sistema a construir sin considerar los factores
organizacionales. Algunos de los factores organizacionales incluyen:
• Las formas en que el sistema cambiara los medios en los que la organización hace negocios.
Los factores medio ambientales también tienen una fuerte influencia en la obtención de
requerimientos. Algunos de los factores medio ambientales son los siguientes:
• El rol del sistema como componente de un sistema mas grande dentro de la organización.
Las restricciones del medio ambiente se derivan del hecho de que el sistema por construir es no
siempre un sistema único, sino que frecuentemente forma parte de un sistema global de la
organización. Al formar parte de un sistema mas grande, es necesario conocer todos los
componentes que forman parte del medio ambiente global. El sistema a construir debe ser
compatible con los sistemas existentes no solo desde el punto de vista arquitectural, sino también
de usabilidad. Los usuarios futuros del sistema deben sentirse cómodos con la nueva
funcionalidad o con las nuevas funciones introducidas por el nuevo sistema. Desde el punto de
vista arquitectural el sistema a construir debe ser compatible con el sistema actual, dado que
probablemente será un componente de este, para lo cual se requerirán de interfaces de conexión o
enlace. El tipo de arquitectura de hardware y software debe ser compatible con el sistema actual.
37
Así mismo, es posible que ambos compartan Bases de Datos, protocolos y líneas de
comunicación, sistemas operativos e incluso interfaces hombre-maquina.
El contexto del proyecto también afecta a la obtención de los requerimientos. Algunos de los
factores que afectan al proyecto son:
• Experiencia en el dominio.
• Restricciones impuestas por el cliente y los usuarios: tiempos de desarrollo, costos, calidad
deseada.
Por otro lado, el proceso de desarrollo a seguir es también responsabilidad del director del
proyecto, quien junto con el grupo de diseñadores debe decidir sobre el tipo de proceso que se
debe seguir. En ocasiones, podría ser necesario un proceso de desarrollo incremental, en el cual la
construcción sea mediante prototipos, o por el contrario, podría ser necesario un proceso simple
en cascada.
38
2.10.2 Problemas de entendimiento
En recientes estudios (referencia) se encontró que el 56% de los errores en sistemas en operación
se debían a que existió un comunicación muy pobre entre el cliente y el analista en la definición
de los requerimientos, y que este tipo de errores fueron los mas difíciles de corregir (utilizando
mas de 82% por ciento del tiempo del personal dedicado a corregir los errores). Los problemas
de entendimiento durante el proceso de obtención de requerimientos puede llevar a la definición
de requerimientos ambiguos, incompletos, inconsistentes o incluso incorrectos, debido a que no
resolvieron las necesidades reales de los clientes y de los usuarios.
• Los grupos involucrados en la obtención de requerimientos (por parte del cliente y por parte
de los desarrolladores) tienen distinta preparación técnica, distintos estudios o distinto nivel
de experiencia, de forma que el conocimiento de un grupo puede ser distinto (mayor o menor)
que el de otro grupo. Esto hace difícil el análisis de los requerimientos, ya la información se
obtuvo de estas distintas fuentes de información.
• El lenguaje utilizado para expresar los requerimientos por los distintos grupos puede ser
demasiado formal o demasiado informal, como para que sea comprendido por todos y que
cumpla con las necesidades de cliente.
Los distintos grupos involucrados en la definición y desarrollo del software pueden estar
organizados de forma jerárquica. La organización del cliente puede tener su organización en
varios niveles, en donde cada grupo tenga distintas responsabilidades y funciones. Por otro lado,
los desarrolladores pueden provenir de una empresa de desarrollo con su propia estructura
jerárquica.
39
La información recolectada de los requerimientos puede provenir de distintos grupos de la
organización de cliente y por lo tanto puede tener distintos enfoques y puntos de vista. Esto puede
hacer difícil la obtención de los requerimientos.
Cada grupo de personas en la organización del cliente puede tener sus propias prioridades del
manejo del proyecto, sus propias opiniones sobre los objetivos y distintas responsabilidades en la
implementación del sistema. Por lo tanto, los requerimientos y el problema a resolver puede
provenir de muy distintas fuentes con distintos puestos y distintas responsabilidades, con lo cual
el sistema les puede afectar a su labor de muy distintas formas. Aun cuando la información del
problema a resolver provenga de personas con distintas opiniones, se debe hacer un esfuerzo de
entendimiento y comunicación entre todos los involucrados para definir el problema real a
solucionar, los detalles de los requerimientos y el impacto que tendrá su implementación. Los
desarrolladores del sistema de software y los analistas de requerimientos pueden tener un
conocimiento limitado del dominio de la aplicación, mientras que los clientes y usuarios pueden
no conocer mucho de los métodos de diseño necesarios para desarrollar el sistema. El cliente
puede no conocer lo que se necesita para resolver su problema, o puede no conocer las
dificultades de los desarrolladores para entender el problema o para implementar el sistema. Por
otro lado, los analistas de requerimientos o muchos de los desarrolladores pueden tener
dificultades para comprender el problema del cliente, sus metas y sus necesidades.
Muchos de los problemas antes descritos, pueden solucionarse poniendo especial atención al
logro de una comunicación fluida entre el cliente y los desarrolladores.
40
Dado que los requerimientos pueden provenir de distintos grupos de personas, la información
recolectada puede presentar problemas de redundancia, ambigüedad o información contradictoria,
o simplemente puede expresar la opinión muy particular de los distintos grupos.
Existen distintas herramientas y métodos para obtención de requerimientos, sin embargo estas
son muchas veces poco utilizadas debido a que son difíciles de usar o por que la información que
recolectan puede no ser muy útil. En los próximos capítulos describiremos algunos de estos
métodos y herramientas para obtener requerimientos. La mayoría de métodos y herramientas
permiten describir y recolectar requerimientos de manera informal y por lo pueden estar sujetos a
distintas interpretaciones. Por otro lado, los métodos formales de obtención y definición de
requerimientos frecuentemente son difíciles de comprender y poca gente es capaz de utilizarlos
en toda su capacidad.
En muchos proyectos de desarrollo, los requerimientos son recolectados mientras el sistema esta
en desarrollo. En este caso, los sistemas que no son comprendidos en toda su extensión y en todas
41
sus funciones, tendrán que ser desarrollados de forma incremental. En esta forma de desarrollar
sistemas, los requerimientos del sistema se van añadiendo mientras se desarrolla el sistema.
Otra causa de la volatilidad en los requerimientos se debe a que los requerimientos fueron
obtenidos por distintos grupos de personas y cada grupo a menudo tiene distintos objetivos y
visualiza los requerimientos de distinta forma que los demás grupos. La fase de análisis, descrita
en los próximos capítulos, permitirá estudiar cada requerimiento a fin de darle consistencia,
prioridad, y coherencia.
Independientemente de la naturaleza de cada requerimiento se debe buscar que estos lleguen a ser
estables lo más pronto posible. Se deben buscar que todos los involucrados comprendan que cada
cambio es un factor de riesgo que necesariamente llevara a extender la terminación de proyecto, y
en el peor de los casos puede llevar aun sistema con tantos cambios que será imposible terminar,
o que terminara con múltiples defectos.
42