jueves, 7 de agosto de 2008

Gestión de requerimientos II

Abordaremos someramente el tratamiento de los requerimientos. En particular cómo:
- apuntarlos y documentarlos
- abstraerlos en casos de uso tradicionales
- manejarlos y fusionarlos con otros análisis:
   1.- requerimientos funcionales y no funcionales
   2.- matriz de requerimientos
   3.- priorización de los requerimientos.

Apuntar y documentar requerimientos


Hay muchas maneras, desde muy metodológicas a muy informales, de documentar los requerimientos.
Yo utilizo fundamentalmente las historias de usuario.
Una historia de usuario tiene los siguientes elementos:
1.-Identificador
2.-Título
3.-Historia
4.-Notas

El identificador lo suelo poner como F1,F2,F3... para las historias que conllevan requerimientos funcionales, y NF1, NF2... para las que conllevan no funcionales (veremos qué es un requerimiento funcional y otro no funcional en breve).

El título tiene una frase cortísima que me permite recordar el requerimiento de un vistazo (yo soy muy malo recordando siglas y números).

La historia explica el requerimiento. O bien de forma clara, breve y concisa ("el sistema debe permitir editar las fichas de los productos y que queden todas las operaciones registradas") o bien en forma tradicional de historia ("como gerente de productos debo poder editar las fichas de los productos para hacer las modificaciones que necesite y todas las operaciones han de quedar guardadas").

En notas voy apuntando todo lo que se me va ocurriendo del requerimiento, clarificaciones, cuestiones de desarrollo, etc. Con fecha, autor y texto.

Abstracción a casos de uso


En algunas ocasiones es necesario (bien por requerimientos de la compañía, bien para generar una documentación interesante y vendible, bien por gusto) hacer una agrupación de los requerimientos en casos de uso al estilo RUP o al estilo Cockburn.

Lo que yo hago en este caso es seleccionar los actores intervinientes en todos los requerimientos y agrupar los mismos en función de estos actores. Luego, usando el sentido común, agrupo los requerimientos en un mismo caso de uso.

La descripción del caso de uso viene de manera natural a la vista de los requerimientos que lo conforman (¡no más de diez!) y es cuando, según Cockburn, yo los documento.

Otros análisis sobre los requerimientos


Estamos viendo que todas las acciones sobre los requisitos nos van sirviendo para ir dándoles forma y que ésta es una labor continua, sin una fase claramente delimitada.
Entre las otras acciones que podemos hacer para "amasar" los requerimientos están:

Distinción en requerimientos funcionales y no funcionales


En breve, los requerimientos funcionales son los que aportan valor al producto. Los no funcionales son el lastre con el que tenemos que contar pero que no aportan nada visible; sin embargo, de no encontrarse, se echarían en falta.
Tadicionalmente, los requerimientos no funcionales ser refieren a:
 
Disponibilidad
Certificación
Dependencia de otras partes
Documentación
Eficiencia
Ser extensible
Aspectos legales y de licencias
Mantenimiento
Performance
Plataforma
Precio
Calidad
Necesidad de recursos
Seguridad
Compatibilidad
Estabilidad
Soporte.

Matriz de requerimientos


Siguiendo con nuestras técnicas de manipulación, podemos interrelacionar los requerimientos entre ellos, con los casos de uso y con los elementos del software que vamos creando (por ejemplo pantallas, APIs, módulos o cualquier agrupación que hagamos) por medio de matrices.

Una matriz de requerimientos tiene en un eje los requerimientos y en el otro los otros requerimientos, los casos de uso o los elementos funcionales. En sus entradas aparecerá o una X cuando haya cierta relación de relevancia o un valor (habitualmente 1,3,9) que indique esa relación y su grado.

Así sabremos cuáles son los requerimientos con mayor influencia sobre los casos de uso, los que tienen un mayor impacto a la hora de ser cambiados sobre los elementos funcionales o los que se relacionan con otros requerimientos formando una malla.
Lo ideal a nivel de gestión del cambio de requerimientos es que los requerimientos sean ortogonales (es decir, la matriz requerimientos-requerimientos sea diagonal), porque elimina la necesidad de estudiar el impacto de un cambio en los requisitos.

Priorización


Si pensamos que todos los requerimientos han quedado absolutamente claros y puestos de manifiesto y que vamos a ser capaces de desarrollarlos completamente en el tiempo esperado, la priorización sobra.
Quizás sea por eso por lo que cuesta tanto extraer de las personas sobre las que pesa la decisión de impulsar el proyecto y de obtener el mayor beneficio de él una priorización: estamos obligándo a asumir que no todo es evidente ni claro ni completo ni predecible. En definitiva, les estamos forzando a que asuman como cierto el riesgo inherente en el proceso de fabricación de software... algo que es verdadero, en definitiva.

Como la gestión de los requerimientos surge de la falta de precisión implicita en todo proyecto de software, es evidente que una parte de esa gestión será la priorización: ¿qué queremos que se clarifique con mayor prioridad?.

En definitiva, priorizar los requerimientos es también un paso conducente a clarificarlos, porque nos ayuda a determinar qué se espera realmente del software por hacer. También nos sirve de vehículo de comunicación con los promotores: es posible hacer una plan de ruta claro en los objetivos. Y sirve para dotar de mayor control a los promotores del proyecto, que pueden detenerlo cuando estén satisfechos con los objetivos.

En conclusión, debemos vender la necesaria priorización de requisitos con la idea de que aportan:
- un plan de releases claro en los objetivos y aproximado en el tiempo
- una vía para clarificar requerimientos: qué se espera del producto
- mayor control a los promotores del proyecto: viibilidad y capacidad para detener el proyecto

viernes, 1 de agosto de 2008


X-509 PKI



Entendemos por PKI el marco para mantener/revocar/usar certificados confirmados por un tercero.



X509 es un conjunto de especificaciones de la IETF y la ISO/IEC/ITU-T definido en el rfc2459. Vamos a centrarnos en el X509 v3, que añade a las versiones anteriores la capacidad de autofirmar un certificado, añadir extensiones a un certificado.



X509 inicialmente tenía que ver con X-500 (que versa sobre directorios compartidos), pero ahora ni siquiera lo necesita.
Aunque se publicó y desarrolló al mismo tiempo (en 1988), el X500 ha quedado
sin implementar compeltamente.



En el rfc3280 se recoge la estructura y las listas de revocación (CRL), parte imprescindible en una PKI.





Estructura interna



A grandes rasgos, tenemos


  1. Certificado:

    • Version (1 a 3)

    • Número de serie

    • Algoritmos relacionados con la parte pública del certificado


  2. Algoritmo que se ha usado para firmar el certificado.

  3. Firma del certificado.






Explicación detallada:


Version: 1, 2 ó 3
Número de serie:
asignado por la CA
permite a la CA asociar el certificado con un identificador
es imprescindible para listar la CRLs
Identificador del Algortimo de firma:
sirve para saber qué algortimo se ha usado en la firma del paquete
X509
CA:
Autoridad certificadora, en formato X500
Validez:
ventana temporal para la que ha sido verificado
Identidad:
entidad cuya clave pública se está certificando
en formato X500
Clave pública:
clave pública de la entidad que se está firmando
con diversos subcampos:
algortimo de cifrado (DSA, RSA)
clave pública en sí misma
Extensiones:
según la versión puede haber uno o más campos de información adicional
Firma:
firma del contenido anterior, con el algoritmo dado en el tercer
campo usando la clave privada de la CA.



Los algoritmos de firmado y cifrado soportados por el estándar X509 son MD2, MD5 y SHA1 y RSA y DSA respectivamente.




Para los algoritmos de clave pública, se reconocen las llaves RSA, DSA y el mecanismo de intercambio Diffie-Hellman.






Extensiones



Los campos "Extensiones" en el certificado X509 permiten a las CAs añadir su propia información.



Para un certificado X509 "autofirmado", los campos con la


Identidad,
Clave pública
Extensiones

desaparecen y el campo de la CA puede referirse a cualquier entidad.







Listas de Revocación (CRL)



Hay un tipo de extensión, llamada "CRLDistributionPoints", que indica la URI donde puede encontrarse la lista de revocación de certificados de la CA que firma el certificado.



La version 3 del X509, definió tambien los delta-CRL, que son no publicaciones enteras de las listas de revocación sino simples modificaciones incrementales.



En cualquier caso, en el RFC3280 se define el formato que tienen que tener las CRLs.




En general, hay tres métodos para estar actualizado de las CRL:


1.- muestrear periódicamente las CRLs publicadas por cada CA
2.- esperar el anuncio de la CA sobre la CRL nueva
3.- verificar en el momento la CRL de la CA que firma el certificado

El tercer método es el mejor, pero es el más costoso para las CAs. De ahí que ciertas operaciones se deleguen en las RA para estas cuestiones.




Las CRL para el formato X509 contienen:


Version de certificados anulados
Identificador del algoritmo que firma la CRL
Identidad de la CA
Fecha y hora de la CRL
Próxima fecha en la que se publicará una CRL
Extensiones a la CRL
Lista de certificados revocados:
identificador de certificado
fecha de revocación
motivo (unspecified, cese de operaciones, cambio de afiliación,
sustituido, temporalmente suspendido,
eliminado definitavemente)



Ejemplo de CRL:


Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: /C=CL/O=REUNACA/CN=REUNA Certification Authority
Last Update: May 6 12:54:53 2008 GMT
Next Update: Jun 5 12:54:53 2008 GMT
CRL extensions:
X509v3 Authority Key Identifier:
keyid:A3:AE:48:8E:B9:C1:8E:B1:92:AA:5E:0C:D0:DC:9D:4B:05:2E:2C:57

X509v3 CRL Number:
16
Revoked Certificates:
Serial Number: 02
Revocation Date: May 15 15:39:41 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 03
Revocation Date: May 16 12:46:19 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Cessation Of Operation
Serial Number: 07
Revocation Date: Dec 11 11:36:13 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 08
Revocation Date: Oct 10 11:57:50 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 0A
Revocation Date: Oct 11 12:30:32 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 0B
Revocation Date: Dec 11 11:38:57 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 0C
Revocation Date: Dec 11 11:39:49 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 0D
Revocation Date: Dec 11 11:37:10 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 0E
Revocation Date: Oct 11 13:01:51 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 12
Revocation Date: Dec 11 12:43:19 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 13
Revocation Date: Dec 11 12:44:45 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 14
Revocation Date: Nov 7 15:30:14 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 16
Revocation Date: Dec 11 11:46:32 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 17
Revocation Date: Dec 11 12:49:25 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 18
Revocation Date: Dec 11 11:42:03 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 1C
Revocation Date: Dec 11 11:42:59 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 1D
Revocation Date: Dec 11 12:38:49 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 1F
Revocation Date: Dec 12 16:25:44 2007 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Serial Number: 36
Revocation Date: Mar 7 10:52:10 2008 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Unspecified
Signature Algorithm: sha1WithRSAEncryption
0e:2b:49:e3:30:7e:80:18:4e:3c:3b:b4:ea:25:99:26:eb:9f:
f9:ff:ee:70:12:f0:ac:18:43:94:64:64:37:e3:17:85:fd:24:
5d:b9:81:9f:a4:69:62:63:67:1d:86:94:c1:d3:e5:1c:48:6c:
56:a0:cc:96:a4:b3:9a:72:1d:5b:5c:0a:c2:46:10:76:81:b8:
1a:af:d8:23:2f:66:f5:07:54:0f:20:91:d0:da:da:4d:ba:80:
85:92:8f:f8:e0:da:24:8b:42:bd:b2:d4:d8:9d:f1:bc:d8:23:
77:19:3b:99:29:98:ef:e2:b1:2c:61:14:bb:27:2d:95:8f:e7:
7f:19:30:2f:5c:ab:ae:9f:07:0e:a9:6a:fd:c9:f9:b1:d6:38:
00:e7:86:71:7a:04:8b:9b:17:fa:b4:f8:f3:17:f1:c5:38:02:
ce:c9:f4:73:0e:ee:14:26:dc:f9:9a:53:61:a9:5e:f0:a2:5f:
bf:46:25:d8:0f:80:65:42:52:b1:c4:bd:52:52:48:13:af:f5:
45:63:c1:ea:bf:4b:26:a7:5c:94:e9:e1:fa:07:38:07:4b:94:
4a:34:d9:f3:39:e4:2d:7e:cd:a2:06:5a:86:09:8b:37:9f:46:
e5:68:55:e2:86:af:8b:97:5d:46:72:c0:5d:45:67:24:38:1a:
af:e3:bb:47
-----BEGIN X509 CRL-----
MIIETDCCAzQCAQEwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0wxEDAOBgNV
BAoTB1JFVU5BQ0ExJjAkBgNVBAMTHVJFVU5BIENlcnRpZmljYXRpb24gQXV0aG9y
aXR5Fw0wODA1MDYxMjU0NTNaFw0wODA2MDUxMjU0NTNaMIIChjAgAgECFw0wNzA1
MTUxNTM5NDFaMAwwCgYDVR0VBAMKAQAwIAIBAxcNMDcwNTE2MTI0NjE5WjAMMAoG
A1UdFQQDCgEFMCACAQcXDTA3MTIxMTExMzYxM1owDDAKBgNVHRUEAwoBADAgAgEI
Fw0wNzEwMTAxMTU3NTBaMAwwCgYDVR0VBAMKAQAwIAIBChcNMDcxMDExMTIzMDMy
WjAMMAoGA1UdFQQDCgEAMCACAQsXDTA3MTIxMTExMzg1N1owDDAKBgNVHRUEAwoB
ADAgAgEMFw0wNzEyMTExMTM5NDlaMAwwCgYDVR0VBAMKAQAwIAIBDRcNMDcxMjEx
MTEzNzEwWjAMMAoGA1UdFQQDCgEAMCACAQ4XDTA3MTAxMTEzMDE1MVowDDAKBgNV
HRUEAwoBADAgAgESFw0wNzEyMTExMjQzMTlaMAwwCgYDVR0VBAMKAQAwIAIBExcN
MDcxMjExMTI0NDQ1WjAMMAoGA1UdFQQDCgEAMCACARQXDTA3MTEwNzE1MzAxNFow
DDAKBgNVHRUEAwoBADAgAgEWFw0wNzEyMTExMTQ2MzJaMAwwCgYDVR0VBAMKAQAw
IAIBFxcNMDcxMjExMTI0OTI1WjAMMAoGA1UdFQQDCgEAMCACARgXDTA3MTIxMTEx
NDIwM1owDDAKBgNVHRUEAwoBADAgAgEcFw0wNzEyMTExMTQyNTlaMAwwCgYDVR0V
BAMKAQAwIAIBHRcNMDcxMjExMTIzODQ5WjAMMAoGA1UdFQQDCgEAMCACAR8XDTA3
AIBFxcNMDcxMjExMTI0OTI1WjAMMAoGA1UdFQQDCgEAMCACARgXDTA3MTIxMTEx
NDIwM1owDDAKBgNVHRUEAwoBADAgAgEcFw0wNzEyMTExMTQyNTlaMAwwCgYDVR0V
BAMKAQAwIAIBHRcNMDcxMjExMTIzODQ5WjAMMAoGA1UdFQQDCgEAMCACAR8XDTA3
MTIxMjE2MjU0NFowDDAKBgNVHRUEAwoBADAgAgE2Fw0wODAzMDcxMDUyMTBaMAww
CgYDVR0VBAMKAQCgLzAtMB8GA1UdIwQYMBaAFKOuSI65wY6xkqpeDNDcnUsFLixX
MAoGA1UdFAQDAgEQMA0GCSqGSIb3DQEBBQUAA4IBAQAOK0njMH6AGE48O7TqJZkm
65/5/+5wEvCsGEOUZGQ34xeF/SRduYGfpGliY2cdhpTB0+UcSGxWoMyWpLOach1b
XArCRhB2gbgar9gjL2b1B1QPIJHQ2tpNuoCFko/44Noki0K9stTYnfG82CN3GTuZ
KZjv4rEsYRS7Jy2Vj+d/GTAvXKuunwcOqWr9yfmx1jgA54ZxegSLmxf6tPjzF/HF
OALOyfRzDu4UJtz5mlNhqV7wol+/RiXYD4BlQlKxxL1SUkgTr/VFY8Hqv0smp1yU
6eH6BzgHS5RKNNnzOeQtfs2iBlqGCYs3n0blaFXihq+Ll11GcsBdRWckOBqv47tH
-----END X509 CRL-----