Buscar en Gazafatonario IT

lunes, octubre 29, 2012

Diez Consejos Útiles y Simples Para Escribir Correctamente Casos de Uso Correctos, I


“Todo debería hacerse lo más simple posible, pero no más simple.”
Frase atribuida a Albert Einstein
Presentación
Un caso de uso es un protocolo, en el sentido de conversación, normalmente entre un ser humano y un sistema de software y, como cualquier conversación en idioma español, debe ser fluida, sin tropiezos, en la que se usen términos y expresiones familiares o entendibles por los participantes. Durante esa charla, el sistema “solicita de”, “proporciona a”, o “procesa[1] información para”; mientras tanto, la persona que actúa como interlocutor suministra a, o requiere de, información. Es así de simple.
Ahora bien, la especificación de un caso de uso es una historia que escenifica las distintas situaciones que se pueden presentar en el diálogo antes mencionado. Y como historia, debe contarse de manera directa, sin adornos (adjetivos) y con objetividad. El autor del caso de uso, normalmente un Ingeniero de Requisitos, debe mantenerse al margen de los hechos, no debe hacer comentarios o dar explicaciones (sus percepciones) al respecto, no debe involucrarse en la historia.
Con todo lo anterior en mente, les traigo estos diez consejos que espero sean muy útiles a la hora de especificar requisitos de software vía casos de uso. Son lecciones que he aprendido con el tiempo y con la práctica y que me han funcionado bastante bien.
Consejo 1
Al escribir casos de uso se deben evitar términos como:
·         Automáticamente
·         Procesar
·         Administrar
·         Gestionar
Y sus sinónimos.
Automáticamente, relativo a automático,  se refiere a una cualidad que todos los sistemas tienen de manera intrínseca, que está en la naturaleza del software, ya que este sigue a determinadas circunstancias de un modo inmediato y la mayoría de las veces indefectible, es decir, cualquier cosa que hace el software es iniciada por un impulso externo, incluyendo los llamados “procesos automáticos” cuyo inicio obedece muchas veces al cumplimiento de una condición de tiempo, o sea, se ejecutan a una hora específica programada por una persona, o a un prerrequisito, es decir, otra acción o proceso se llevó a cabo y preparó los insumos necesarios para la tarea siguiente. Siempre hay un estímulo que precede a la acción automática.
Entre tanto, Procesar es una expresión genérica, abstracta por demás, que indica cualquiera de las operaciones que puede hacer un sistema de software y siempre debe reemplazarse por el nombre de la operación particular a la que queremos referirnos. Por ejemplo, hacer un cálculo, realizar una búsqueda, clasificar datos y almacenar datos. Ahora bien, es posible que el sistema realice más de una de estas acciones al tiempo o haga una combinación de varias de ellas, pero este es un asunto que abordaré en el consejo número seis.
Por su parte, Administrar y Gestionar son sinónimos entre sí y, al igual que Procesar, son comodines en el sentido de que sirven para acomodar cualquier acción o manipulación sobre la información; siempre debemos nombrar explícitamente la acción, como Transferir o Enviar, Recibir, Validar una condición específica y Generar o Mostrar datos, o el tipo de manipulación, como Ingresar, Modificar, Eliminar y Consultar datos.
Ejemplo
Consideremos el siguiente caso de uso típico para ingresar a un sistema transaccional con seguridad simple:
Caso de Uso: Ingresar al sistema
Actor: Cliente
Secuencia Básica:
1.     El caso de uso inicia cuando el Cliente decide autenticarse ante el sistema
2.     El sistema solicita el nombre de usuario del Cliente
3.     El Cliente ingresa el nombre de usuario
4.     El sistema solicita la contraseña del Cliente
5.     El Cliente ingresa su contraseña
6.     El sistema procesa el nombre de usuario y la contraseña y presenta un mensaje de bienvenida
7.     El caso de uso termina
En esta secuencia, el paso 6 debe modificarse por algo como:
6. El sistema verifica la información proporcionada y presenta un mensaje de bienvenida.
Nótese que este es el escenario “feliz” donde los datos ingresados por el usuario son correctos y el sistema permite su ingreso al sitio transaccional. Aquí “verifica” es sinónimo de “comprueba” o “identifica”, un significado más directo que el derivado de “procesa” en el caso de uso original.

[1] Estoy usando “procesar” en un sentido amplio, significando cualquiera de las funciones comunes que desempeña un computador, como calcular, buscar u ordenar datos, o una combinación de dos o más de estas.

miércoles, octubre 24, 2012

Gerencia de Proyectos Dirigida por Riesgos: la estrategia del Maestro de ajedrez


No me gustan los artículos sobre Gerencia de Proyectos. Casi todos siguen la receta de “Cómo hacer esto o aquello”, “Cómo escribir un artículo de gerencia de proyectos”: 1) encuentra un tema sobre el cual escribir, donde incluso te dicen que puesto que eres un gerente de proyectos, trata el proceso de escribir el artículo como un proyecto; 2) organiza tu artículo, donde debes planear el alcance y ejecutar el plan, es decir, escribir la crónica y, por supuesto, cerrar el proyecto, que se traduce en publicar el artículo. Y luego te dan ideas de cómo mejorar el artículo y cosas así. De hecho, existen las recetas para que mantengas la certificación como PMP (PMI) escribiendo artículos sobre gerencia de proyectos “¡y ganas 15 créditos PDU!”

Y los que no son así, son escritos por autores cuyos proyectos han sido todos fallidos y quieren que nosotros no cometamos los mismos errores que ellos. Estos autores nos dicen precisamente que cuando llegaron al fondo, tuvieron una epifanía que ningún otro ser humano tuvo hasta entonces, así es que decidieron compartir su experiencia divina con el resto de los mortales. Son reseñas usualmente repetitivas, simples y, algunas, hasta absurdas.

Por eso no me gustan esa clase de trabajos, pero este artículo que les voy a recomendar, sobre gerencia de proyectos, tiene la palabra “paritariamente”. ¿Qué significa “paritariamente”? Eso quizás no es importante, el asunto realmente interesante es que este artículo tiene palabras de más de tres silabas y frases con sentido completo, de esas que aprendíamos mientras leíamos a los Clásicos antiguos o a Don Quijote de la Mancha. Este artículo se atreve a mencionar el juego de Ajedrez y hace una comparación entre la mente de los gerentes de proyectos y la de los grandes maestros del juego ciencia, habla de estrategia y la diferencia de la táctica, habla de la anticipación (palabras de más de tres silabas) y presenta el análisis pre-morten (frases con sentido completo), es decir, de prever algo y manejarlo antes de su ocurrencia.

Incluso este artículo se atreve a desmentir la muy archi-popular Ley de Murphy y nos presenta la primera Ley Anti-Murphy o Ley de la Proactividad, inclusive se atreve a decir que la mejor herramienta de administración de proyectos no es un sistema de software. El artículo va más allá de las herramientas automatizadas y le otorga confianza a la mente humana (la mente de los grandes maestros).

Por eso me gusta este artículo, llamado “Gerencia de Proyectos Dirigida por Riesgos: la estrategia del Maestro de ajedrez”. El artículo lo encuentran en el portal especializado LiderdeProyecto.com, en la dirección:

http://www.liderdeproyecto.com/articulos/gerencia_de_proyectos_dirigida_por_riesgos_la_estrategia_del_maestro_de_ajedrez.html

Ah, se me olvidaba decirles, yo soy el autor del artículo. ¡Por eso también me gusta!

jueves, octubre 11, 2012

Los casos de abuso o de cómo hacer un mal uso de los casos de uso


Este fue un estudio de hace unos 5 años. Los resultados los publiqué entonces internamente como la Lectura Fundamental 13, que nunca vio la luz en este Gazafatonario. Solo ahora, revisando los temas que incluiré en mi próximo libro, decidí hacerlos público abiertamente como ustedes los han estado leyendo.
No obstante el tiempo que ha pasado desde entonces, el resultado de mi observación es que seguimos cometiendo estos errores incontables veces. Por eso no quise esperar a que el libro estuviera publicado.
Lo primero que se deriva de este análisis es que los casos de uso no son el único instrumento para especificar requisitos de software, algo que he llamado en otras instancias “el arquetipo de los envoltorios heterogéneos”.
Pero antes de ir a la conclusión de este estudio, revisemos los abusos que estamos cometiendo:
Caso de Abuso
Impacto en la Calidad
Alto
Bajo
Medio
Medio
Medio
Alto
Bajo
Alto
Bajo
Alto
Alto
Medio
Hay muchos más: el problema es mucho más grave cuando no hay el entrenamiento y acompañamiento que todo Analista o Ingeniero novel necesita cuando emprende el viaje hacia lo que significa identificar, documentar, organizar y administrar requisitos de software.
Para No Cometer Más Abusos
En general, las personas creemos que el mejor proceso de aprendizaje es la lectura. Si bien es cierto que leer es fundamental, sobre todo en las etapas tempranas de la carrera de un buen profesional, pienso que la forma principal de aprendizaje es la introspección. Leer siempre ayuda, especialmente porque puede hacernos reflexionar sobre puntos que no habíamos analizado previamente, pero la mejoría como Analista de Requisitos en particular y como Ingeniero de Software en general, más allá de un ingeniero primitivo que hace su trabajo con las prácticas regulares transmitidas por instructores académicos que muchas veces nunca han estado en un proyecto de construcción de software, empieza siempre por el análisis profundo de cada situación. Conocer nuestras debilidades y saber por qué estamos haciendo en cada situación lo que estamos haciendo, es lo que nos acabará convirtiendo en mejores profesionales. Y para eso, aprender de los propios errores es algo esencial, tratando de evitar automatismos que pueden repercutir negativamente en nuestra profesión.
En particular, recomiendo leer a Cockburn [11] de quien ya he repetido es uno de los mejores autores de temas relacionados con la materia que nos ocupa: la escritura de casos de uso. El libro tiene un capitulo completo sobre errores cometidos al momento de escribir casos de uso. Pero también encuentro de mucha utilidad volver a leer y a releer los casos de uso que hemos escrito anteriormente. Y leer los casos de uso de nuestros compañeros. Someter los nuestros al escrutinio de nuestros pares y de otros expertos en el área, recibir con respeto las observaciones que nos hacen y discutirlas abiertamente. Leer las guías y listas de chequeos existentes y seguir las indicaciones de las plantillas ayuda profusamente. Para noveles, recomiendo las cinco primeras lecturas fundamentales de mi Gazafatonario IT [13] (Gazafatonario.Blogspot.com).
El artículo que motivó este estudio lo leí hace unos 13 años [14], lo encargo pródigamente. En [12] hay un compendio expedito sobre la cuestión, a manera de enumeración ejecutiva sobre lo malo y lo feo en las prácticas de casos de uso. De la misma forma, en [7] hay unas guías para cometer abusos, por supuesto, debemos usarlas a la inversa. Finalmente, en [15] y en [10] Ellen Gottesdiener identifica algunos patrones de abuso que siguen los equipos de desarrollo a la hora de crear casos de uso; no puede faltar en nuestra biblioteca digital de consulta. Por su parte, en [16] encontramos algunas sugerencias para aplicar durante el entrenamiento de estudiantes y profesionales en el área de Requisitos de Software, específicamente en modelado y especificación de casos de uso.
Y mi última recomendación: ¡Lanzarnos! Es decir, escribir casos de uso.
(Aclaración)
A propósito de todos estos trabajos relacionados que especifico en la sección anterior, cuando hacía la labor de investigación de fondo sobre este tema (paso 2 del método científico), me encontré inexorablemente en Google buscando por los términos “abuse cases” y “misuse cases” y Oh sorpresa mayor cuando me topé con [8] y [9] y el contexto es totalmente distinto al que deseaba: resulta que un caso de abuso (“abuse case”) es una especificación de un tipo de interacción completa entre un sistema y uno o más actores, donde los resultados de la interacción son dañinos para el sistema, para uno de los actores o para uno de los involucrados (stakeholders) en el sistema. Seguí este hilo y encontré todo un sumario que habla de modelos de casos de abuso para hacer análisis de requisitos de seguridad y de casos de uso con intención hostil (hacia los sistemas de software), no sólo en cuanto a la seguridad de las aplicaciones se refiere sino a los demás requisitos “ilidad” (confiabilidad, mantenibilidad, soportabilidad, funcionalidad y otras “ilidades” conocidas).
Así es que me pareció pertinente contarles el cuento por si llegan al punto o por si llegan a necesitar el dato. No es más.
Conclusiones
Errores se cometen en cualquier actividad, incluso he llegado a creer que la propia Naturaleza se equivocó al seleccionarnos como especie dominante durante este período cuaternario de la era Cenozoica, pero ese es otro asunto. Sin embargo, de los errores se aprende y, al parecer, estamos preparados para aprender muy rápido de nuestros propios sofismas. Es por eso que quise traerles este vademécum que espero se convierta en material de consulta regular y que apoye al elemento sorpresa asociado al descubrimiento de que estamos equivocados, para que así podamos formarnos en el difícil oficio de la Ingeniería de Requisitos y afines.
Sin duda, la lista de faltas puede ser mayor, pero lo que hacemos no define quienes somos, lo que nos define es qué tan bien nos levantamos después de caernos; es decir, lo que hacemos después de cometer la infracción. Algunos de estos abusos son más graves que otros, no tanto para nosotros, individuos reemplazables, sino para nuestros receptores principales: los usuarios.
Referencias
Algunas de estas referencias “bibliowebgráficas” ya las he mencionado en cada uno de los casos de abuso. Aquí están todas en conjunto para su consulta:
[1]  P.B. Kruchten, “The 4 + 1 View Model of Architecture,” IEEE Software, pp. 42–50, Nov. 1995. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?tp=&arnumber=469759&isnumber=9910
[2]   Luis Antonio Salazar Caraballo, “RUP: Fase de Concepción”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2007/03/lecturas-fundamentales-8.html, 08 mar. 2007.
[3]  Luis Antonio Salazar Caraballo, “Realización de Casos de Uso: de los Objetos y sus Interacciones”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2007/10/lecturas-fundamentales-10-lectura_3046.html, 23 oct. 2006.
[4]  Luis Antonio Salazar Caraballo, “Casos de Uso: Del Todo y de Sus Partes”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-3.html, 23 nov. 2006.
[5]  Así conocen al célebre trío de metodólogos que lideraron la creación de RUP y UML: Ivar Jacobson, James Rumbaugh y Grady Booch.
[6]  Luis Antonio Salazar Caraballo, “Casos de Uso: Origen, Especificación y Evolución”, Gazafatonario IT, http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html, 17 nov. 2006.
[11]Alistair Cockburn, “Writing Effective Use Cases”, Addison-Wesley, 21 Feb. 2000
[17]Real Academia de la Lengua Española. RAE. http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=abuso

domingo, octubre 07, 2012

Casos de Abuso, Parte 12: El Ingeniero de Requisitos es un psíquico


Bueno, esta me la sé también con Analistas, con Diseñadores, con Programadores y hasta con Gerentes de Proyectos. También con usuarios. Cada uno de nosotros piensa que todos los demás en el proyecto están igualmente motivados, que tienen las mismas habilidades, que conocen todo el entorno necesario para entender el sistema. Y No es así. También creemos que los demás piensan como nosotros mismos, que ven el universo como lo vemos nosotros. Y Tampoco es así.
Como receptores de información siempre tenemos un mecanismo infalible: “el qué más.” Como en ¿Qué más debo saber de este proceso? ¿Qué más me puede decir de este modelo? ¿Qué otra cosa esconde este escenario? ¿Quién más necesita esta funcionalidad? ¿En qué otro momento se requiere esta información? Como emisores también debemos estar prestos a brindar toda la información que requiera nuestro interlocutor. ¿Qué más necesita saber? ¿Tiene alguna otra pregunta? ¿Son necesarios más ejemplos? ¿Quiere hablar con alguien más?
Y no me refiero solamente a la comunicación usuario-analista, sino también a la que ocurre al interior del equipo de desarrollo: cuando presentamos los casos de uso, cuando exponemos la arquitectura, cuando mostramos la realización de casos de uso o el modelo de datos y, sobre todo, cuando documentamos el software. Todo esto debemos hacerlo con la premisa de “documentar para el resto”, para el resto de la organización, para el resto del equipo del proyecto, para los usuarios, para los socios de negocios, para los proveedores, incluso para personas ajenas al producto, al proyecto y a la misma compañía, como consultores, expertos del dominio de negocio o técnico y otro tipo de personas. Este es otro de los momentos cuando recomiendo el uso formal de UML y del español (o de algún otro idioma necesario) acorde al público, o sea, terminología del negocio para los usuarios, léxico técnico para los técnicos.
Impacto en la calidad: Medio.
Aquí termina por ahora este análisis, al menos en lo que se refiere a la enumeración de casos de abuso. Volveremos con un capítulo sobre conclusiones y recomendaciones.
Entre tanto, ¿qué otros errores se les ocurren? ¿Qué otros abusos creen que han estado cometiendo ustedes o sus colegas?
No dejen de contarme y lo discutiremos más adelante.

martes, octubre 02, 2012

Casos de Abuso, Parte 11: Cada caso de uso se diseña e implementa de manera independiente


El diseñador y el desarrollador sólo ven el caso de uso en desarrollo sin importarles el sistema como un todo.  Cuando esto se hace así, y no por paquetes relacionados, corremos el riesgo de no armar el “rompecabezas” con facilidad al final de la operación.
Y lo que es peor, muchas veces durante el diseño e implementación del caso de uso no tenemos en cuenta los lineamientos arquitectónicos impuestos a la solución. El producto termina siendo una colcha de retazos mal cosidos. Esta situación convierte los hitos de integración del producto, iteración tras iteración, fase tras fase, en un serio dolor de cabeza para el arquitecto, los diseñadores y los mismos programadores. Entonces surgen los reprocesos, el desperdicio de código, rediseños, y el resultado final: un producto de mala calidad.
El tratamiento: la arquitectura del software. Una que sirva como una gran lista de chequeo para los diseñadores y para los implementadores del producto. La arquitectura de software es la organización fundamental de un sistema, formado por sus componentes, las relaciones entre ellos mismos y con el entorno, y los principios que gobiernan su diseño y evolución (IEEE 1471-2000). Según Booch, Kruchten y otros, la Arquitectura de Software incluye decisiones acerca de la organización de un sistema de software como:
·         La selección de los elementos estructurales que componen el sistema y sus interfaces
·         El comportamiento del sistema, especificado en las colaboraciones entre esos elementos
·         La composición de estos elementos estructurales y comportacionales en subsistemas más grandes
·         El estilo arquitectónico que guía esta organización
Toda arquitectura de software comienza por una arquitectura funcional o vista de casos de uso, un subconjunto del modelo de casos de uso del sistema, compuesto a su vez por los así llamados casos de uso o requisitos arquitectónicos. Después están la vista lógica, que le habla a los analistas y diseñadores sobre la estructura del software. La vista de implementación, que les cuenta a los programadores detalles sobre el manejo del software. Por su parte, la vista de procesos habla de desempeño, escalabilidad y puesta en marcha a los integradores del sistema. Y también está la vista de despliegue que nos explica de manera lacónica la topología del sistema, aspectos de la entrega del mismo, de instalación y de comunicación subyacentes.
El diseño y la implementación de todo el producto de software debe obedecer a estas restricciones, casi leyes, impuestas por la arquitectura así descrita. Es lo que hace posible que los casos de uso se diseñen en grupos heterogéneos de paquetes o subsistemas diferentes.
Impacto en la calidad: Alto.

PD. Para saber sobre Arquitectura de Software, específicamente sobre el modelo de las 4 + 1 vistas expuesto por Krutchen, pueden tener en cuenta la siguiente referencia:
P.B. Kruchten, “The 4 + 1 View Model of Architecture,” IEEE Software, pp. 42–50, Nov. 1995. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?tp=&arnumber=469759&isnumber=9910
También la encuentran en:
Además, sobre análisis y diseño de casos de uso, en particular, sobre realización de casos de uso, pueden visitar mi Lectura Fundamental 10:
Y sobre programación orientada a objetos, pueden leer mi Lectura Fundamental 11: Orientación a Objetos: Un Enfoque Teórico Moderno (Actualizado)