jueves, 16 de febrero de 2012

Propiedades Deseables de los Requerimientos

La propiedad más importante de una especificación de requerimientos es que sirva como canal de comunicación entre los participantes en el proceso de ingeniería de requerimientos. Para ello, es necesario pensar en la audiencia a la que van dirigidos los requerimientos, de forma que para comunicarse con los clientes y usuarios los mejor es utilizar requerimientos-C

y para hacerlo con los desarrolladores lo mejor es usar requerimientos-D.

Las propiedades deseables de los requisitos son:

  • Correcta: Una especificación de requerimientos es correcta sí y sólo sí todo requerimiento contenido en ella representa alguna propiedad requerida por el sistema a desarrollar.
  • No ambigua: Una especificación de requerimientos es no ambigua sí y sólo sí todo requerimiento contenido en ella tiene una sola interpretación: glosario de términos.
  • Completa: Una especificación de requerimientos es completa si cumple las siguientes propiedades:
    • Todo lo que se suponga que deba hacer el sistema a desarrollar está incluido en la especificación.
    • Todas las respuestas del sistema a entradas tanto válidas como inválidas están especificadas.
    • Todas las páginas, figuras y tablas están numeradas, todas las unidades de medida están definidas, todas las referencias externas son comprobables y no hay elementos por determinar.
    • En el caso de que haya elementos por determinar, es necesario conocer la causa de su no determinación y quién es responsable de su solución.
    • Es conveniente que los requerimientos estén priorizados por el cliente para considerar una especificación como completa.
    • No debe omitirse ningún requerimiento.
    • El cliente ha validado el conjunto de requerimientos.
    • Si no se especifican todos los requerimientos se incrementa el riesgo de acabar desarrollando sistemas que no satisfagan las necesidades reales de clientes y usuarios.
  • Consistente: Una especificación de requerimientos es consistente sí y sólo sí todo requerimiento contenido en ella no está en conflicto con otros documentos de nivel superior. Es consistente internamente sí y sólo sí no existen conflictos entre los requerimientos que contiene. Los conflictos entre requerimientos pueden ser de los siguientes tipos:
    • Conflictos de conducta: Dos o más requerimientos especifican conductas distintas del sistema para las mismas condiciones y el mismo estimulo externo.
    • Conflictos de términos: Se utilizan términos distintos para referirse al mismo concepto.
    • Conflictos de característica: Dos o más requerimientos especifican aspectos contradictorios para la misma característica del sistema.
    • Conflictos temporales: Dos o más requerimientos exigen características temporales contradictorias al sistema.
  • Especificación internamente consistente: Necesidad de un mismo nivel de detalle y de un mismo estilo de redacción y de presentación de los requerimientos. Otra propiedad relacionada con la consistencia interna es la necesidad de que la especificación esté limitada, es decir, que el ámbito y el contexto en el que se definen los requerimientos esté claramente identificado.
  • Verificable: Una especificación de requerimientos es verificable sí y sólo sí existe un proceso finito y de costo razonable por el que una persona o una máquina pueda comprobar que el sistema cumple la especificación de requerimientos. Los procedimientos de observación para comprobar que el sistema cumple los requerimientos son la base para las pruebas de aceptación del sistema por parte del cliente.
  • Modificable: Una especificación de requerimientos es modificable sí y sólo sí su estructura y estilo de redacción permite que los cambios se pueda realizar fácil, completa y consistentemente. Para conseguir esta propiedad, la especificación debe estar organizada coherentemente y debe contar con los índices y las tablas de referencias cruzadas oportunas, no debe ser redundante y los requerimientos deben expresarse individualmente y no de forma conjunta. También se considera la necesidad de mantener las distintas versiones de la especificación que se vayan produciendo debido a los cambios, es decir, que la especificación sea configurable.
  • Rastreable: Una especificación de requerimientos es rastreable sí y sólo sí para cada requerimiento contenido en ella se conoce y puede referenciarse como origen en posteriores documentos durante el desarrollo, es decir, cada requerimiento puede rastrearse hacia atrás y hacia adelante. Una condición necesaria para que un requerimiento pueda rastrearse hacia adelante es que pueda referenciarse de manera única, normalmente mediante algún tipo de código.
  • Anotada con importancia y estabilidad: Para ello, cada requerimiento está anotado con la importancia que tiene su cumplimiento para clientes y usuarios y la estabilidad que se espera del requerimiento, es decir, la probabilidad de que cambie durante el desarrollo. Esto permite en que orden implementarlos en el caso de que se haya acordado entregar versiones sucesivas del producto. Por otro lado, la estabilidad permite a los diseñadores conocer qué grado de flexibilidad deben introducir en el sistema para soportar futuros cambios.
  • Independiente del diseño y la implementación: Una especificación de requerimientos es independiente del diseño y de la implementación sí y sólo sí no especifica una determinada descomposición del sistema (arquitectura) ni ningún aspecto de su posible implementación. Sólo deben admitirse requerimientos que limiten la libertad de los diseñadores y programadores en el caso de que el cliente lo solicite explícitamente.

Dimensiones de los Requerimientos

Los calificativos que se aplican al término requerimiento muestran distintos aspectos ortogonales. Además, realiza un esfuerzo por agrupar dichos calificativos en tres dimensiones:

  • Ámbito: Esta dimensión indica en qué ámbito se debe entender el requerimiento. En general, un ámbito de sistema indica que el requerimiento debe cumplirse a nivel sistema, entendiendo por sistema un conjunto de herdware y software.
  • Característica: Esta dimensión clasifica los requerimientos en función de la naturaleza de la característica del sistema deseado que se especifica. Tal clasificación es:
      1. 1) Requerimientos funcionales.
        2) Requerimientos de información: qué información debe almacenar el sistema por ser relevante para las necesidades y objetivos de clientes y usuarios.
        3) Requerimientos no funcionales.
  • Audiencia: Esta dimensión indica la audiencia a la que está dirigido el requerimiento, es decir, las personas que deben ser capaces de entenderlo. Se tienen dos tipos de audiencia:
      1. 1) Los clientes y usuarios, que no tienen porqué tener formación en ingeniería de software (especificación de requerimientos mediante lenguaje natural): requerimientos-C.
        2) Los desarrolladores de software (especificación de requerimientos utilizando técnicas estructuradas, orientadas a objetos o formales): requerimientos-D.

¿Quién dijo que era fácil?

No tengo duda de que la carrera de desarrollo de software no es fácil: El camino tiene muchos obstáculos y más importante que las habilidades del equipo de desarrollo está en centrar la importancia del desarrollo en la comunicación con los stakeholders, pues ellos son la base para el éxito del desarrollo de todo el producto.

De modo que me permitiré citar un párrafo de F. P. Brooks:

La parte más difícil de construir un sistema de software es decidir qué construir. Ninguna otra parte del trabajo afecta más negativamente al sistema final si se realiza de manera incorrecta. Ninguna otra parte es más difícil de rectificar después.

Recuerdo haber escuchado la siguiente frase: "Técnica del carpintero: Medir dos veces, cortar una vez". Y esto viene a mi mente para enfatizar lo siguiente: Definir una línea base de requerimientos y examinarla con toda la gente involucrada en el desarrollo hasta que se comprenda cada requerimiento. Una vez comprendida toda la línea base de requerimientos comenzar a construir el producto. No construya si no se tiene una línea base de requerimientos definida y comprendida.

El presente post está por supuesto sujeto a debate. Gracias por sus visitas y comentarios.

Mejores Prácticas en la Gestión de Requerimientos

  • Priorizar los requerimientos: Para determinar aquellos que se deberían cumplir en la primera versión o producto y aquellos que pueden llevarse a cabo en sucesivas versiones.
  • Establecer líneas base de los requerimientos: Para asegurar que cualquier modificación en los requerimientos que cambie la línea base se trata como cambios de alcance.
  • Comunicación abierta: Para asegurar que la información relacionada con los requerimientos se comunica de forma consistente. Una comunicación abierta también implica comunicar a la gente correcta y al conjunto mínimo de personas.
  • Gestión de cambios de los requerimientos: Es esencial gestionar estos cambios de forma efectiva y eficiente.
  • Uso de herramientas para la gestión de requerimientos: Para facilitar la gestión de los requerimientos.
  • Mantener trazabilidad de los requerimientos: Para llevar un seguimiento de la vida de un requerimiento.
  • Establecer un plan de mejora de procesos para la ingeniería de requerimientos: Para cumplir con las necesidades actuales y futuras de forma más eficiente y con mayor calidad.
  • Formar a los analistas de requerimientos: Para asegurar que los analistas de requerimientos tienen el conocimiento, entre otros aspectos, de cómo escribir buenos requerimientos, etc.

Mejores Prácticas en el Desarrollo de Requerimientos

A continuación se describen una serie de mejores prácticas orientadas al desarrollo de requerimientos:

  • Documentar el alcance y visión del proyecto: Permitirá tener un mejor entendimiento de los requerimientos y asegurará que todas las personas involucradas en el proyecto trabajen hacia la misma meta.
  • Mantener un glosario del proyecto: Facilitará una comunicación efectiva asegurando un entendimiento unánime.
  • Uso de técnicas de obtención de requerimientos de usuario: Para facilitar esta tarea.
  • Involucrar a toda la gente implicada: Asegura una validación temprana del entendimiento de los requerimientos.
  • Desarrollo incremental de requerimientos: Puede minimizar la cantidad de re-trabajo del proyecto.
  • Captura de requerimientos usando casos de uso: Será más fácil gestionar los requerimientos y hacer un seguimiento en los mismos.
  • Validar los requerimientos: Para mejorar el éxito de los proyectos es crítico que se validen los requerimientos de forma adecuada.
  • Verificar los requerimientos: Para asegurar que los requerimientos proporcionan una base adecuada para llevar a cabo el diseño, la construcción y las pruebas.

La Trazabilidad en los Requerimientos

Un concepto clave en el proceso de gestión de cambios es la Trazabilidad. Los requerimientos deben ser trazables, es decir, "rastreables". Se podría decir que un requerimiento es trazable si se pueden identificar todas las partes del producto existente relacionadas con ese requerimiento. Todos los requerimientos deberían ser trazables para mantener consistencia entre los distintos documentos de un proyecto.

Es importante conocer aspectos de los requerimientos tales como:

  • Su origen (quién lo propueso).
  • Necesidad (por qué existe).
  • Relación con otros requerimientos (Dependencias).
  • Relación con otros elementos (Dependencias).

La siguiente matriz se utiliza para relacionar requerimientos. Es una matriz de dependencias:

  Requerimientos (A)
Req. 1 Req. 2 Req. 3 Req. 4 Req. 5 Req. 6 Req. 7 Req. 8
Requerimientos (B) Req. 1 X X X
Req. 2 X
Req. 3 X X
Req. 4 X
Req. 5 X
Req. 6 X
Req. 7 X
Req. 8 X

En este caso los Requerimientos (A) representan los requerimientos que originan las dependencias y los Requerimientos (B) serían los requerimientos que dependen de otros requerimientos, de los Requerimientos (A).

Por ejemplo, se puede ver como los requerimientos 1, 2 y 7 dependen del requerimiento 5, o que el requerimiento 3, además de depender del requerimiento 5 también depende del requerimiento 6. De esta forma se puede ver de qué manera se relacionan los requerimientos para analizar mejor el impacto de los cambios.

Gestión de los Requerimientos

La gestión de requerimientos es el conjunto de actividades que ayudan al equipo de trabajo a identificar, controlar y seguir los requerimientos y sus cambios en cualquier momento. Es decir, la gestión de requerimientos consiste en gestionar los cambios de los requerimientos, las relaciones entre ellos, las dependencias entre la especificación de requerimientos y otros documentos producidos por el proceso de desarrollo de software. De esta forma se asegura la consistencia entre los requerimientos y el sistema construido.

Por los tanto, los objetivos principales del proceso de gestión de requerimientos serán:

  • Gestionar el levantamiento de requerimientos.
  • Obtener la aprobación de los participantes involucrados en el proyecto.
  • Gestionar los cambios (trazabilidad)

La gestión de requerimientos es un proceso que se desarrolla a lo largo de toda la vida del producto.

Los requerimientos cambian durante todo el ciclo de vida de desarrollo del producto. Los cambios deben controlarse y documentarse, es decir, hay que convivir con ellos y por ello la gestión de cambios es esencial para tratar dichos cambios.

Cuando, durante el proyecto y una vez aceptada la línea de base de requerimientos, se solicita un cambio sobre esta línea base, estos cambios no se pueden aceptar sin más ya que podrían afectar al desarrollo de todo el sistema, o alguna parte esencial del mismo.

El siguiente gráfico muestra el proceso de gestión de cambios con las actividades a llevar a cabo durante el desarrollo del mismo:

En definitiva, podríamos destacar tres importantes actividades dentro del proceso de gestión de cambios:

1. Evaluar el Impacto.

La primera tarea a realizar tras recibir una petición de cambio es valorar el impacto del mismo. Para ello se deberá ir recorriendo todo el árbol de requerimientos viendo como les afecta el cambio, y aquí es donde entra la trazabilidad de los requerimientos.

2. Aceptación del Cambio.

Una vez analizado el impacto del cambio, se debe tomar una decisión. Si se acepta el cambio tras negociarlo con el cliente, se continuará con la actividad de implementar el cambio. En caso contrario, se deberá negociar con el cliente el siguiente paso a realizar.

3. Implementación del Cambio.

Si se ha aceptado el cambio, hay que reflejar ese cambio en todos los productos que resulten afectados por dicho cambio (si el cambio es mínimo algunos productos como el plan del proyecto, puede que no sea necesario modificar). Además se deberá generar un nuevo punto de partida (línea base) de requerimientos.