Resumen
Resumen
Resumen
Problemas de alcance. La frontera de los sistemas está mal definida o los clientes
o usuarios finales especifican detalles técnicos innecesarios que confunden, más
que clarifican, los objetivos generales del sistema.
Problemas de entendimiento. Los clientes o usuarios no están completamente
seguros de lo que se necesita, comprenden mal las capacidades y limitaciones de
su ambiente de computación, no entienden todo el dominio del problema, tienen
problemas para comunicar las necesidades al ingeniero de sistemas, omiten
información que creen que es “obvia”, especifican requerimientos que están en
conflicto con las necesidades de otros clientes o usuarios, o solicitan
requerimientos ambiguos o que no pueden someterse a prueba.
Problemas de volatilidad. Los requerimientos cambian con el tiempo.
¿Cuál sería una “buena” salida generada por una solución exitosa?
¿Qué problemas resolvería esta solución?
¿Puede mostrar (o describir) el ambiente de negocios en el que se usaría la
solución?
¿Hay aspectos especiales del desempeño o restricciones que afecten el modo en
el que se enfoque la solución?
Las preguntas finales se centran en la eficacia de la actividad de comunicación en sí.
Gause y Weinberg [Gau89] las llaman “metapreguntas” y proponen la siguiente lista
(abreviada):
¿Es usted la persona indicada para responder estas preguntas? ¿Sus respuestas
son “oficiales”?
¿Mis preguntas son relevantes para el problema que se tiene?
¿Estoy haciendo demasiadas preguntas?
¿Puede otra persona dar información adicional?
¿Debería yo preguntarle algo más?
Estas preguntas (y otras) ayudarán a “romper el hielo” y a iniciar la comunicación, que
es esencial para una indagación exitosa. Pero una reunión de preguntas y respuestas no
es un enfoque que haya tenido un éxito apabullante. En realidad, la sesión de preguntas
y respuestas sólo debe usarse para el primer encuentro y luego ser reemplazada por un
formato de indagación de requerimientos que combine elementos de solución de
problemas, negociación y especificación. En la sección 5.3 se presenta un enfoque de
este tipo.
- Despliegue de la función de calidad
El despliegue de la función de calidad (DFC) es una técnica de administración de la
calidad que traduce las necesidades del cliente en requerimientos técnicos para el
software. El DFC “se concentra en maximizar la satisfacción del cliente a partir del
proceso de ingeniería del software” [Zul92]. Para lograr esto, el DFC pone el énfasis en
entender lo que resulta valioso para el cliente y luego despliega dichos valores en todo
el proceso de ingeniería. El DFC identifica tres tipos de requerimientos [Zul92]:
Requerimientos normales. Objetivos y metas que se establecen para un producto o
sistema durante las reuniones con el cliente. Si estos requerimientos están presentes, el
cliente queda satisfecho. Ejemplos de requerimientos normales son los tipos de gráficos
pedidos para aparecer en la pantalla, funciones específicas del sistema y niveles de
rendimiento definidos.
Requerimientos esperados. Están implícitos en el producto o sistema y quizá sean tan
importantes que el cliente no los mencione de manera explícita. Su ausencia causará
mucha insatisfacción. Algunos ejemplos de requerimientos esperados son: fácil
interacción humano/máquina, operación general correcta y confiable, y facilidad para
instalar el software.
Requerimientos emocionantes. Estas características van más allá de las expectativas del
cliente y son muy satisfactorias si están presentes. Por ejemplo, el software para un
nuevo teléfono móvil viene con características estándar, pero si incluye capacidades
inesperadas (como pantalla sensible al tacto, correo de voz visual, etc.) agrada a todos
los usuarios del producto.
Aunque los conceptos del DFC son aplicables en todo el proceso del software [Par96a],
hay técnicas específicas de aquél que pueden aplicarse a la actividad de indagación de
los requerimientos.
El DFC utiliza entrevistas con los clientes, observación, encuestas y estudio de datos
históricos (por ejemplo, reportes de problemas) como materia prima para la actividad
de recabación La escena: Sala de juntas. Está en marcha la primera
reunión para recabar los requerimientos.
Participantes: Jamie Lazar, integrante del equipo de software; Vinod Raman, miembro
del equipo de software; Ed Robbins, miembro del equipo de software; Doug Miller,
gerente de ingeniería de software; tres trabajadores de mercadotecnia; un
representante de ingeniería del producto, y un facilitador.
La conversación: Facilitador (apunta en un pizarrón): De modo que ésa es la lista actual
de objetos y servicios para la función de seguridad del hogar.
Persona de mercadotecnia: Eso la cubre, desde nuestro punto de vista.
Vinod: ¿No dijo alguien que quería que toda la funcionalidad de CasaSegura fuera
accesible desde internet? Eso incluiría la función de seguridad, ¿o no? Persona de
mercadotecnia: Sí, así es… tendremos que añadir esa funcionalidad y los objetos
apropiados.
- Escenarios de uso
A medida que se reúnen los requerimientos, comienza a materializarse la visión general
de funciones y características del sistema. Sin embargo, es difícil avanzar hacia
actividades más técnicas de la ingeniería de software hasta no entender cómo
emplearán los usuarios finales dichas funciones y características. Para lograr esto, los
desarrolladores y usuarios crean un conjunto de escenarios que identifican la naturaleza
de los usos para el sistema que se va a construir. Los escenarios, que a menudo se llaman
casos de uso [Jac92], proporcionan la descripción de la manera en la que se utilizará el
sistema.
- Patrones de análisis
Cualquiera que haya hecho la ingeniería de los requerimientos en varios proyectos de
software ha observado que ciertos problemas son recurrentes en todos ellos dentro de
un dominio de aplicación específico.18 Estos patrones de análisis [Fow97] sugieren
soluciones (por ejemplo, una clase, función o comportamiento) dentro del dominio de
la aplicación que pueden volverse a utilizar cuando se modelen muchas aplicaciones.
- Requerimientos funcionales
Los requerimientos funcionales para un sistema refieren lo que el sistema debe hacer.
Tales requerimientos dependen del tipo de software que se esté desarrollando, de los
usuarios esperados del software y del enfoque general que adopta la organización
cuando se escriben los requerimientos. Al expresarse como requerimientos del usuario,
los requerimientos funcionales se describen por lo general de forma abstracta que
entiendan los usuarios del sistema. Sin embargo, requerimientos funcionales más
específicos del sistema detallan las funciones del sistema, sus entradas y salidas, sus
excepciones, etcétera.
- Requerimientos no funcionales
Los requerimientos no funcionales, como indica su nombre, son requerimientos que no
se relacionan directamente con los servicios específicos que el sistema entrega a sus
usuarios. Pueden relacionarse con propiedades emergentes del sistema, como
fiabilidad, tiempo de respuesta y uso de almacenamiento. De forma alternativa, pueden
definir restricciones sobre la implementación del sistema, como las capacidades de los
dispositivos I/O o las representaciones de datos usados en las interfaces con otros
sistemas. Los requerimientos no funcionales, como el rendimiento, la seguridad o la
disponibilidad, especifican o restringen por lo general características del sistema como
un todo.
Los requerimientos no funcionales a menudo son más significativos que los
requerimientos funcionales individuales. Es común que los usuarios del sistema
encuentren formas para trabajar en torno a una función del sistema que realmente no
cubre sus necesidades. No obstante, el fracaso para cubrir los requerimientos no
funcionales haría que todo el sistema fuera inútil. Por ejemplo, si un sistema de
aeronave no cubre sus requerimientos de fiabilidad, no será certificado para su
operación como dispositivo seguro; si un sistema de control embebido fracasa para
cubrir sus requerimientos de rendimiento, no operarán correctamente las funciones de
control.
1. Los requerimientos no funcionales afectan más la arquitectura global de un
sistema que los componentes individuales. Por ejemplo, para garantizar que se
cumplan los requerimientos de rendimiento, quizá se deba organizar el sistema
para minimizar las comunicaciones entre componentes.
2. Un requerimiento no funcional individual, como un requerimiento de seguridad,
podría generar algunos requerimientos funcionales relacionados que definan
nuevos servicios del sistema que se requieran. Además, también podría generar
requerimientos que restrinjan los requerimientos ya existentes.
- Especificación de requerimientos
La especificación de requerimientos es el proceso de escribir, en un documento de
requerimientos, los requerimientos del usuario y del sistema. De manera ideal, los
requerimientos del usuario y del sistema deben ser claros, sin ambigüedades, fáciles de
entender, completos y consistentes. Esto en la práctica es difícil de lograr, pues los
participantes interpretan los requerimientos de formas diferentes y con frecuencia en
los requerimientos hay conflictos e inconsistencias inherentes.
Los requerimientos del usuario para un sistema deben describir los requerimientos
funcionales y no funcionales, de forma que sean comprensibles para los usuarios del
sistema que no cuentan con un conocimiento técnico detallado. De manera ideal,
deberían especificar sólo el comportamiento externo del sistema. El documento de
requerimientos no debe incluir detalles de la arquitectura o el diseño del sistema. En
consecuencia, si usted escribe los requerimientos del usuario, no tiene que usar jerga
de software, anotaciones estructuradas o formales. Debe escribir los requerimientos del
usuario en lenguaje natural, con tablas y formas sencillas, así como diagramas intuitivos.
Los requerimientos del usuario se escriben casi siempre en lenguaje natural,
complementado con diagramas y tablas adecuados en el documento de requerimientos.
Los requerimientos del sistema se escriben también en lenguaje natural, pero de igual
modo se utilizan otras notaciones basadas en formas, modelos gráficos del sistema o
modelos matemáticos del sistema.
- Especificaciones estructuradas
El lenguaje natural estructurado es una manera de escribir requerimientos del sistema,
donde está limitada la libertad del escritor de requerimientos y todos éstos se anotan
en una forma estándar. Aunque este enfoque conserva la mayoría de la expresividad y
comprensibilidad del lenguaje natural, asegura que haya cierta uniformidad sobre la
especificación. Las anotaciones en lenguaje estructurado emplean plantillas para
especificar requerimientos del sistema. La especificación utiliza constructos de lenguaje
de programación para mostrar alternativas e iteración, y destaca elementos clave con el
uso de sombreado o de fuentes distintas.
Cuando use una forma estándar para especificar requerimientos funcionales, debe
incluir la siguiente información:
1. Una descripción de la función o entidad a especificar.
2. Una descripción de sus entradas y sus procedencias.
3. Una descripción de sus salidas y a dónde se dirigen.
4. Información sobre los datos requeridos para el cálculo u otras entidades en el
sistema que se utilizan (la parte “requiere”).
5. Una descripción de la acción que se va a tomar.
6. Si se usa un enfoque funcional, una precondición establece lo que debe ser
verdadero antes de llamar a la función, y una postcondición especifica lo que es
verdadero después de llamar a la función.
7. Una descripción de los efectos colaterales (si acaso hay alguno) de la operación.
- Descubrimiento de requerimientos
El descubrimiento de requerimientos (llamado a veces adquisición de requerimientos)
es el proceso de recopilar información sobre el sistema requerido y los sistemas
existentes, así como de separar, a partir de esta información, los requerimientos del
usuario y del sistema. Las fuentes de información durante la fase de descubrimiento de
requerimientos incluyen documentación, participantes del sistema y especificaciones de
sistemas similares. La interacción con los participantes es a través de entrevistas y
observaciones, y pueden usarse escenarios y prototipos para ayudar a los participantes
a entender cómo será el sistema. Los participantes varían desde administradores y
usuarios finales de un sistema hasta participantes externos como los reguladores,
quienes certifican la aceptabilidad del sistema.
Todas estas diferentes fuentes de requerimientos (participantes, dominio, sistemas) se
representan como puntos de vista del sistema, y cada visión muestra un subconjunto de
los requerimientos para el sistema. Diferentes puntos de vista de un problema enfocan
el problema de diferentes formas. Sin embargo, sus perspectivas no son totalmente
independientes, sino que por lo general se traslapan, de manera que tienen
requerimientos comunes. Usted puede usar estos puntos de vista para estructurar tanto
el descubrimiento como la documentación de los requerimientos del sistema.
- Entrevistas
Las entrevistas formales o informales con participantes del sistema son una parte de la
mayoría de los procesos de ingeniería de requerimientos. En estas entrevistas, el equipo
de ingeniería de requerimientos formula preguntas a los participantes sobre el sistema
que actualmente usan y el sistema que se va a desarrollar. Los requerimientos se derivan
de las respuestas a dichas preguntas. Las entrevistas son de dos tipos:
1. Entrevistas cerradas, donde los participantes responden a un conjunto de
preguntas preestablecidas.
2. Entrevistas abiertas, en las cuales no hay agenda predefinida. El equipo de
ingeniería de requerimientos explora un rango de conflictos con los participantes
del sistema y, como resultado, desarrolla una mejor comprensión de sus
necesidades.
- Escenarios
Por lo general, las personas encuentran más sencillo vincularse con ejemplos reales que
con descripciones abstractas. Pueden comprender y criticar un escenario sobre cómo
interactuar con un sistema de software. Los ingenieros de requerimientos usan la
información obtenida de esta discusión para formular los verdaderos requerimientos
del sistema.
Los escenarios son particularmente útiles para detallar un bosquejo de descripción de
requerimientos. Se trata de ejemplos sobre descripciones de sesiones de interacción.
Cada escenario abarca comúnmente una interacción o un número pequeño de
interacciones posibles. Se desarrollan diferentes formas de escenarios y se ofrecen
varios tipos de información con diversos niveles de detalle acerca del sistema. Las
historias que se usan en programación extrema, estudiadas en el capítulo 3, son un tipo
de escenario de requerimientos.
- Casos de uso
Los casos de uso son una técnica de descubrimiento de requerimientos que se introdujo
por primera vez en el método Objectory (Jacobson et al., 1993).
Los casos de uso se documentan con el empleo de un diagrama de caso de uso de alto
nivel. El conjunto de casos de uso representa todas las interacciones posibles que se
describirán en los requerimientos del sistema. Los actores en el proceso, que pueden
ser individuos u otros sistemas, se representan como figuras sencillas. Cada clase de
interacción se constituye como una elipse con etiqueta. Líneas vinculan a los actores con
la interacción.
Los casos de uso identifican las interacciones individuales entre el sistema y sus usuarios
u otros sistemas. Cada caso de uso debe documentarse con una descripción textual.
Entonces pueden vincularse con otros modelos en el UML que desarrollará el escenario
con más detalle. Por ejemplo, una breve descripción del caso de uso.
- Etnografía
Los sistemas de software no existen aislados. Se usan en un contexto social y
organizacional, y dicho escenario podría derivar o restringir los requerimientos del
sistema de software. A menudo satisfacer dichos requerimientos sociales y
organizacionales es crítico para el éxito del sistema. Una razón por la que muchos
sistemas de software se entregan, y nunca se utilizan, es que sus requerimientos no
consideran de manera adecuada cómo afectaría el contexto social y organizacional la
operación práctica del sistema.
La etnografía es una técnica de observación que se usa para entender los procesos
operacionales y ayudar a derivar requerimientos de apoyo para dichos procesos. Un
analista se adentra en el ambiente laboral donde se usará el sistema. Observa el trabajo
diario y toma notas acerca de las tareas existentes en que intervienen los participantes.
El valor de la etnografía es que ayuda a descubrir requerimientos implícitos del sistema
que reflejan las formas actuales en que trabaja la gente, en vez de los procesos formales
definidos por la organización.
Las personas con frecuencia encuentran muy difícil articular los detalles de su trabajo,
porque es una segunda forma de vida para ellas. Entienden su trabajo, pero tal vez no
su relación con otras funciones en la organización. Los factores sociales y
organizacionales que afectan el trabajo, que no son evidentes para los individuos, sólo
se vuelven claros cuando los percibe un observador sin prejuicios. Por ejemplo, un grupo
de trabajo puede organizarse de modo que sus miembros conozcan el trabajo de los
demás y se suplan entre sí cuando alguien se ausenta. Es probable que esto no se
mencione durante una entrevista, pues el grupo podría no verlo como una parte integral
de su función.
La etnografía puede combinarse con la creación de prototipos (figura 4.16). La
etnografía informa del desarrollo del prototipo, de modo que se requieren menos ciclos
de refinamiento del prototipo. Más aún, la creación de prototipos se enfoca en la
etnografía al identificar problemas y preguntas que entonces pueden discutirse con el
etnógrafo. Siendo así, éste debe buscar las respuestas a dichas preguntas durante la
siguiente fase de estudio del sistema (Sommerville et al., 1993).
- Validación de requerimientos
La validación de requerimientos es el proceso de verificar que los requerimientos
definan realmente el sistema que en verdad quiere el cliente. Se traslapa con el análisis,
ya que se interesa por encontrar problemas con los requerimientos. La validación de
requerimientos es importante porque los errores en un documento de requerimientos
pueden conducir a grandes costos por tener que rehacer, cuando dichos problemas se
descubren durante el desarrollo del sistema o después de que éste se halla en servicio.
En general, el costo por corregir un problema de requerimientos al hacer un cambio en
el sistema es mucho mayor que reparar los errores de diseño o codificación. La razón es
que un cambio a los requerimientos significa generalmente que también deben cambiar
el diseño y la implementación del sistema. Más aún, el sistema debe entonces ponerse
a prueba de nuevo.
No hay que subestimar los problemas incluidos en la validación de requerimientos.
A final de cuentas, es difícil demostrar que un conjunto de requerimientos, de hecho, no
cubre las necesidades de los usuarios. Estos últimos necesitan una imagen del sistema
en operación, así como comprender la forma en que dicho sistema se ajustará a su
trabajo. Es difícil, incluso para profesionales de la computación experimentados, realizar
este tipo de análisis abstracto, y más aún para los usuarios del sistema.
- Administración de requerimientos
Los requerimientos para los grandes sistemas de software siempre cambian. Una razón
es que dichos sistemas se desarrollaron por lo general para resolver problemas
“horrorosos”: aquellos problemas que no se pueden definir por completo. Como el
problema no se logra definir por completo, los requerimientos del software están
condenados también a estar incompletos. Durante el proceso de software, la
comprensión que los participantes tienen de los problemas cambia constantemente.
La administración de requerimientos es el proceso de comprender y controlar los
cambios en los requerimientos del sistema. Es necesario seguir la pista de
requerimientos individuales y mantener los vínculos entre los requerimientos
dependientes, de manera que pueda valorarse el efecto del cambio en los
requerimientos. También es preciso establecer un proceso formal para hacer cambios a
las propuestas y vincular éstos con los requerimientos del sistema. El proceso formal de
la administración de requerimientos debe comenzar tan pronto como esté disponible
un borrador del documento de requerimientos.
Sin embargo, hay que empezar a planear cómo administrar el cambio en los
requerimientos durante el proceso de adquisición de los mismos.