# Puntos de caso de uso

Puntos de caso de uso es un método de estimación de esfuerzo para proyectos de software, a partir de sus casos de uso. Fue desarrollado por Gustav Karner en 1993, basándose en el método de punto de función, y supervisado por Ivar Jacobson. Ha sido analizado posteriormente en otros estudios, como la tesis de Kirsten Ribu (Universidad de Oslo) en 2001. El método se emplea cuando para el diseño y desarrollo de software se utilizan las metodologías UML y RUP.
El método utiliza los actores y casos de uso relevados para calcular el esfuerzo que significará desarrollarlos. A los casos de uso se les asigna una complejidad basada en transacciones, entendidas como una interacción entre el usuario y el sistema, mientras que a los actores se les asigna una complejidad basada en su tipo, es decir, si son interfaces con usuarios u otros sistemas. También se utilizan factores de entorno y de complejidad técnica para ajustar el resultado.

## Método

El método de punto de casos de uso consta de cuatro etapas, en las que se desarrollan los siguientes cálculos:
* Factor de peso de los actores sin ajustar (UAW, del inglés unadjusted actor weight)
* Factor de peso de los casos de uso sin ajustar (UUCW, unadjusted use case weight)
* Puntos de caso de uso ajustados (UCP, use case points)
* Esfuerzo horas-hombre

### Puntos de caso de uso sin ajustar (UUCP)

Al inicio de un proyecto de software, cuando apenas se conocen los casos de uso y sus actores asociados, se puede proyectar una breve descripción de cada caso de uso, en el cual se describe de forma breve la funcionalidad que éste debe brindar.
El UUCP son los puntos de casos de uso sin ajustar, esto nos puede servir para tener una idea un poco más precisa de la dificultad de los casos de uso e interfaces, tomando en cuenta los pesos de los actores (UAW) y los pesos de los casos de uso (UUCW).
    UUCP = UAW + UUCW
Estas siglas significan:
* UUCP: Puntos de casos de uso sin ajustar.
* UAW: Factor de peso de los actores sin ajustar.
* UUCW: Factor de peso de los casos de uso sin ajustar.
Aplicando el análisis de puntos de función a estos casos de uso, se puede obtener una estimación trivial del tamaño y a partir de ella una estimación del esfuerzo.

#### Factor de peso de los actores sin ajustar (UAW)

Consiste en la evaluación de la complejidad de los actores con los que tendrá que interactuar el sistema. Este puntaje se calcula determinando si cada actor es una persona u otro sistema, a la forma en la que este interactúa con el caso de uso y la cantidad de actores de cada tipo.
Tabla 1: Peso de los actores sin ajustar. :
| Tipo de actor | Descripción | Factor |
| Simple | Otro sistema que interactúa con el sistema a desarrollar mediante una interfaz de programación de aplicaciones (API). | 1 |
| Medio | Otro sistema interactuando a través de un protocolo (ej. TCP/IP) o una persona interactuando a través de una interfaz en modo texto. | 2 |
| Complejo | Una persona que interactúa con el sistema mediante una interfaz gráfica (GUI). | 3 |
La fórmula sería:
    UAW = Sum(cantidadDeUnTipoDeActor*Factor)
Para realizar esta operación sería necesario contar cuántos actores de cada tipo existen en el sistema, este representaría el valor cantidadDeUnTipoDeActor en la fórmula y se tiene que multiplicar por el valor que tenga su factor correspondiente, para obtener el resultado por cada tipo de actor. Una vez terminado esto se procede a sumar cada producto para obtener el UAW.

#### Factor de peso de los casos de uso sin ajustar (UUCW)

Este punto funciona muy similar al anterior, pero para determinar el nivel de complejidad se puede realizar mediante dos métodos: basado en transacciones o basado en clases de análisis.
Una transacción es un conjunto de actividades atómicas, lo que quiere decir que se ejecutan todas o no se ejecuta ninguna.
* Basado en transacciones:
Toma en cuenta el número de transacciones que se pueden realizar en un caso de uso y lo evalúa según la siguiente tabla:
Tabla 2: Peso de las transacciones. :
| Tipo de caso de uso | Descripción | Factor |
| Simple | 3 transacciones o menos | 5 |
| Medio | 4 a 7 transacciones | 10 |
| Complejo | Más de 7 transacciones | 15 |
* Basado en clases de análisis.
Toma en cuenta el número de clases que tiene un caso de uso y lo evalúa según la siguiente tabla:
Tabla 3: Peso de las clases de análisis. :
| Tipo de caso de uso | Descripción | Factor |
| Simple | Menos de 5 clases | 5 |
| Medio | 5 a 10 clases | 10 |
| Complejo | Más de 10 clases | 15 |
Ahora independientemente del camino utilizado para determinar el tipo de caso de uso, la fórmula es la misma y se presenta a continuación: La fórmula sería:
    UUCW = Sum (CantidadDeUnTipoDeCasoUso*Factor)
Para realizar esta operación se debe contar cuántos casos de uso de cada tipo hay en el sistema y esta cantidad se sustituiría en el campo nombrado como CantidadDeUnTipoDeCasoUso y se multiplica por el valor que tenga su factor correspondiente, para obtener el resultado por cada tipo de caso de uso. Una vez hecho esto se suma cada producto para obtener el factor de peso de los casos de uso sin ajustar (UUCW).
Esta estimación es bastante imprecisa debido principalmente a la escasa información que se tiene, pero permitirá obtener una idea del esfuerzo necesario para llevar adelante el mismo, y podrá ser refinada a medida que se obtenga más información.

### Puntos de caso de uso ajustados (UCP)

Para esto se utilizan las siglas UCP y se obtiene al multiplicar el UUCP el TCF y el EF quedando la operación de la siguiente forma:
UCP = UUCP x TCF x EF
Estas siglas significan:
* UCP: Puntos de casos de uso ajustados.
* UUCP: Puntos de casos de uso sin ajustar.
* TCF: Factores técnicos.
* EF: Factores ambientales.

#### Factores de complejidad técnica

Este se compone de 13 puntos que evalúan la complejidad de los módulos del sistema que se desarrolla, cada uno de estos factores tienen un peso definido con los cuales se obtendrá puntos ponderados por cada uno de ellos, según la valoración que se le asigne. Para una mejor comprensión, a continuación se mostrará una tabla con los ítems:
Tabla 4: Peso de los factores de complejidad técnica. :
| Factor | Descripción | Peso |
| T1 | Sistema distribuido. | 2 |
| T2 | Objetivos de performance o tiempo de respuesta. | 1 |
| T3 | Eficiencia del usuario final. | 1 |
| T4 | Procesamiento interno complejo. | 1 |
| T5 | El código debe ser reutilizable. | 1 |
| T6 | Facilidad de instalación. | 0.5 |
| T7 | Facilidad de uso. | 0.5 |
| T8 | Portabilidad. | 2 |
| T9 | Facilidad de cambio. | 1 |
| T10 | Concurrencia. | 1 |
| T11 | Incluye objetivos especiales de seguridad. | 1 |
| T12 | Provee acceso directo a terceras partes. | 1 |
| T13 | Se requiere facilidades especiales de entrenamiento a usuario. | 1 |
Cada uno de estos puntos se debe evaluar según la siguiente escala:
Tabla 5: Escala de los factores de complejidad técnica. :
| Descripción | Valor |
| Irrelevante | De 0 a 2. |
| Medio | De 3 a 4. |
| Esencial | 5 |
Las fórmulas para este punto son:
* TFactor = Sum (Valor*Peso)
* TCF = 0.6 + (0.01 * TFactor)
Para realizar este cálculo, se debe evaluar cada factor, asignándole un valor como se menciona anteriormente, después se multiplican y se suma cada producto para obtener el TFactor. Luego, se debe seguir la segunda fórmula multiplicando el TFactor por 0.01 y sumar el resultado a 0.6, esto nos va a dar el TCF.

#### Factores ambientales

Los factores sobre los cuales se realiza la evaluación son 8 puntos, que están relacionados con las habilidades y experiencia del grupo de personas involucradas con el desarrollo del proyecto. Estos factores se muestran a continuación:
Tabla 6: Peso de los factores ambientales. :
| Factor | Descripción | Peso |
| E1 | Familiaridad con el modelo de proyecto utilizado. | 1.5 |
| E2 | Experiencia en la aplicación. | 0.5 |
| E3 | Experiencia en orientación a objetos. | 1 |
| E4 | Capacidad del analista líder. | 0.5 |
| E5 | Motivación. | 1 |
| E6 | Estabilidad de los requerimientos | 2 |
| E7 | Personal part-time | -1 |
| E8 | Dificultad del lenguaje de programación | -1 |
Cada uno de estos factores se debe calificar con un valor de 0 a 5.
Las fórmulas para este punto son:
* EFactor = Sum(Valor * Peso)
* EF = 1.4 + (-0.03 * EFactor)
Para obtener el EFactor se debe sumar todos los productos obtenidos al multiplicar el peso de cada punto por el valor asignado, después se multiplica por -0.03 y se le suma el 1.4. Así, se obtiene el peso de los factores ambientales (EF).

### Esfuerzo horas-hombre (E)

Este cálculo se realiza con el fin de tener una aproximación del esfuerzo, pensando solo en el desarrollo según las funcionalidades de los casos de uso. Anteriormente, se sugería utilizar 20 horas persona por UCP, pero a través del tiempo se ha ido mejorando. Está basado en los factores ambientales y se calcula de la siguiente manera:
Primero se debe contar la cantidad de factores ambientales del E1 al E6 que tienen una puntuación menor a 3, también contar la cantidad de estos mismos del E7 y E8 que son mayores que 3.
Tabla 7: Factor del esfuerzo horas-persona. :
| Factor | Filtro |
| De E1 a E6 | Factor < 3 |
| De E7 a E8 | Factor > 3 |
Para evaluar el resultado o la cantidad total según la siguiente tabla:
Tabla 8: Cantidad de horas-persona según el valor. :
| Horas-Persona (CF) | Descripción |
| 20 | Si el valor es<=2 |
| 28 | Si el valor es<=4 |
| 36 | Si el valor es>=5 |
El esfuerzo en horas-persona viene dado por:
E = UCP x CF
Estas siglas significan:
* E: Esfuerzo estimado en horas-persona.
* UCP: Puntos de Casos de Uso ajustados.
* CF: Horas-Persona.
Al realizar la multiplicación del UCP por las horas- persona, se consigue un esfuerzo estimado, que representa una parte del total del esfuerzo de todo el proyecto, generalmente un 40%. Este 40% se refiere al esfuerzo total para el desarrollo de la funcionalidades especificadas en los Casos de Uso.
En la siguiente tabla se detallan la distribución en porcentaje, para el esfuerzo total en el desarrollo del proyecto:
| Actividad | Porcentaje |
| Análisis | 10% |
| Diseño | 20% |
| Programación | 40% |
| Pruebas | 15% |
| Sobrecarga | 15% |