Estimación de proyectos de software por puntos de función: Introducción - La Oficina de Proyectos de Informática

lunes, 6 de abril de 2015

Estimación de proyectos de software por puntos de función: Introducción

Este articulo esta basado en el contenido del Curso de Análisis de Puntos de Función: Medición y Estimación de Software suministrado por FATTO. Los puntos de función son una herramienta útil para realizar estimaciones de esfuerzo exactas. Para mayor información visita la pagina del curso.


Todo proyecto de desarrollo de software comienza con una etapa de estimación y planificación, en la cual debemos determinar, a partir de los requerimientos del software, cuánto esfuerzo, personal, recursos materiales, tiempo y en última instancia dinero tomará construir el sistema o producto.

No solo los gerentes de proyectos estiman software, pues a cada desarrollador, analista de sistemas y software tester se le suele asignar un componente y se le pregunta cuánto tiempo le tomará elaborarlo.

Estas estimaciones suelen elaborarse de forma empírica, en base a la experiencia pasadas y conocimiento del trabajo a realizar, sin embargo, suelen ser imprecisas debido a que los requerimientos y sus implicaciones técnicas no se conocen en su totalidad y además ningún desarrollo de software es exactamente igual a uno anterior con el que se pueda comparar.

Frente a esto, se han desarrollado métodos como el de puntos de función, donde estimamos las funcionalidades usando fórmulas matemáticas basadas en parámetros como el tipo de componente, complejidad, factores del entorno, entre otros aspectos.

En este artículo presentamos una introducción a las estimaciones de proyectos de software usando los puntos de función, incluyendo que es, diferencias respecto a estimar en base a experiencia, un sencillo ejemplo y como puede ser de utilidad a distintos profesionales de ingeniería de software.

Introducción a la estimación de software con puntos de función


Este es el primer artículo de una serie dedicada a la estimación de proyectos de software por puntos de función. Si quieres profundizar más en el tema te recomendamos otros artículos de esta serie:

>> Estimación de proyectos de software por puntos de función: Determinar tipo de conteo y componentes funcionales

¿Qué es el método de puntos de función?


Es una técnica de estimación de software desarrollada originalmente por Allan Albrecht en 1979 mientras trabajaba para IBM, quien definió conceptos para medir el software a partir de valoraciones de funcionalidades entregadas al usuario y no a partir de aspectos técnicos, con la intención de producir valoraciones independientes de la tecnología y fases del ciclo de vida utilizado.

El trabajo de Albrecht fue continuado por el grupo internacional de usuarios de puntos de función, quienes plasmaron sus conceptos en el método IFPUG-FPA.

IFPUG-FPA realiza las valoraciones a partir de la funcionalidad del sistema, primero clasificándolas, luego asignando una complejidad y ponderación a cada una según unas tablas predefinidas, determinando así el valor de puntos de función.

Sumando los puntos de todas las funcionalidades se obtiene la valoración de todo el proyecto y finalmente se puede aplicar un factor de ajuste, que puede depender de características generales del sistema como por ejemplo requerimientos no funcionales como el rendimiento, reusabilidad, facilidad de instalación y operación entre otros aspectos.

Los puntos de función permiten traducir el tamaño de funcionalidades de software a un número, a través de la suma ponderadas de las características que este tiene.

Una vez que tenemos los puntos de función, podemos traducirlos en horas hombre o días de trabajo, según factor de conversión que dependería de mediciones históricas de nuestra productividad. Con las horas hombre, podemos determinar el costo y presupuesto de los proyectos.

¿Existen otros métodos de puntos de función distintos de IFPUG-FPA?


Si, desde que surgió el IFPUG-FPA, los métodos de puntos de función se han diversificado, produciendo las siguientes variantes:
  • NESMA: Método definido por la Netherlands Software Metrics Association.
  • MkII: Método definido por el United Kingdom Software Metrics Association.
  • COSMIC: Denominado Full Function Points o COSMIC-FFP, fue desarrollado por el Common Software Metrics Internacional Consortium.
  • FiSMA: De la asociación finlandesa de medición de software.

Sígue el siguiente enlace y te presentamos un ejemplo de estimación con COSMIC:

> Ejemplos de estimación de costos de un proyecto de software

Cada uno de estos métodos tiene aplicaciones en distintos tipos de proyectos de software. Además, cada uno cuenta con su estándar ISO.

¿Para qué se utiliza el método de puntos de función?


Estimación de proyectos de software

Una de las principales aplicaciones del método es en la determinación de valoraciones (estimaciones) del producto de software a desarrollar, que es una parte fundamental de todo proceso de ingeniería de software y de la gerencia de estos proyectos.

Dentro del ciclo de ingeniería de software, lo normal es que la estimación del proyecto ocurra después que la ingeniería de requerimientos produzca una primera versión de la especificación de requisitos con suficiente información para elaborar la estimación.

Validar la calidad de las especificaciones funcionales

Si asignamos el mismo requisito a dos Analistas de sistemas y la estimación producida por los puntos de función difiere, esto nos puede servir para identificar ambigüedades en las especificaciones funcionales.

Seguimiento y control de proyectos

Otras aplicaciones de los puntos de función incluyen el seguimiento y control de proyectos, donde se puede usar para estimar el impacto de cambios en la funcionalidad solicitados durante el desarrollo y también para medir en puntos de función el avance del proyecto e inclusive la facturación en contratos de servicios.

Medir la productividad y calidad de nuestro proyecto o servicio de ingeniería de software

Por otra parte, los puntos de función tienen aplicaciones en mediciones de productividad, por ejemplo si dividimos las horas hombre empleadas para producir cierta cantidad de puntos de función, obtenemos un indicador de productividad de nuestro equipo y de cómo esta puede mejorar en el tiempo.

Con esto adicionalmente podemos calibrar el factor de conversión entre puntos función y horas hombre que utilicemos para nuestras estimaciones.

Otros indicadores interesantes son número de incidencias por puntos de función producidos como medición de la calidad del proceso de desarrollo.

¿Problemas para determinar las jornadas / horas para desarrollar requerimientos de software?



Técnicas para medir y estimar el tamaño del software a partir de la complejidad de sus funcionalidades.




¿En qué se diferencia estimar por puntos de función de estimar en base a la experiencia?


Los puntos de función permiten estandarizar las mediciones del tamaño del software, obteniendo estimaciones de mayor exactitud, frente a las que obtendríamos al basarnos solamente en nuestra experiencia y aproximación inexacta.

Diferentes Analistas de sistemas que apliquen el método utilizando los mismos parámetros deberían llegar a conclusiones similares (siempre y cuando los requerimientos estén definidos sin ambigüedades), por lo cual la medición del tamaño del software es más objetiva y auditable.

De esta forma, es posible por ejemplo comparar la complejidad de dos funcionalidades, módulos o proyectos enteros de forma más confiable, permitiendo tomar decisiones informadas sobre como priorizarlos.

A la hora de desarrollar software empresarial, el éxito o fracaso del proyecto suele medirse en función del desempeño de este frente a las expectativas establecidas inicialmente, de allí la importancia de la exactitud de las mediciones de tamaño del software que realizamos inicialmente.

¿Como se estima software con el método de puntos de función (Ejemplo)?


Ahora pongamos un ejemplo sencillo de estimación de proyectos de software por puntos de función:

Componentes de software a desarrollar

Supongamos que como Analista de sistemas, has realizado la ingeniería de requisitos de una nueva funcionalidad para un sistema determinado. Estas nuevas funcionalidades son:

  • Ingresar nuevos clientes en la aplicación.
  • Modificar clientes existentes.
  • Producir un listado de clientes.
  • Producir un reporte con el número de clientes por país de origen.

Si quieres profundizar más sobre los métodos para identificar los componentes de software de una aplicación, te recomendamos el siguiente artículo de esta serie.

>> Estimación de proyectos de software por puntos de función: Determinar tipo de conteo y componentes funcionales

IFPUG-FPA define 5 tipos de componentes de software, que son: Archivo lógico interno, Archivo externo de interfaz, Entrada externa, Salida externa y Consulta externa.

A partir de la ingeniería de requisitos, procedes a definir los componentes de las funcionalidades a desarrollar, que son:


Las salidas externas y consultas externas se diferencian en que las salidas externas producen valor agregado (por ejemplo agrupan datos) mientras que las consultas externas solo toman el contenido de archivos internos y lo presentan (por ejemplo un listado).

Nivel de complejidad de cada componente

A continuación, debes asignar un nivel de complejidad para cada componente, estos niveles dependen de factores como por ejemplo número de campos no repetidos, número de archivos a ser leídos, creados o actualizados, número de sub grupos de datos o formatos de registros. A mayor número de factores mayor número de complejidad.

Los umbrales para pasar de un grado a otro son particulares a cada organizacion o empresa y deben ser analizados individualmente.

Supongamos que luego de evaluar estos factores, los niveles de complejidad fueron los siguientes:



Asignar puntos función según nivel de complejidad

Con los niveles de complejidad, puedo proceder a asignar los puntos de función no ajustados a cada uno, según la tabla de parámetros que estemos usando. 

Por ejemplo podemos usar la siguiente tabla de parametros:


Según esta tabla, los puntos de función a asignar a cada funcionalidad son:



Entonces el número de puntos de función no ajustado es de 28.

Factor de ajuste según particularidades de la organización o empresa

Por último, podemos aplicar un factor de ajuste, basado en 14 características generales de sistema definidas por el IFPUG-FPA.

Estas se especifican en una tabla de parámetros y para cada una estableceremos en qué medida contribuye al factor de ajuste total. Estos parámetros suelen depender de la complejidad de una aplicación, entorno técnico, exigencias no funcionales (rendimiento, mantenibilidad, etc.)

Volviendo a nuestro ejemplo, supongamos que para este proyecto y aplicación en particular hemos calculado un 10% de ajuste, esto significa que el resultado final en puntos función es:

28 +- 10%x28 es decir 28 +- 2,8 puntos de función.

El máximo de puntos de función que tendrá este desarrollo de software es de 30,8 y el mínimo es 25,2.

Estimar horas hombre (o días hombre) a partir de los puntos de función

Con los puntos de función puedes calcular las horas hombre aplicando un factor de conversión, pues no necesariamente un punto función equivale a una hora hombre.

Para determinar este factor de conversión necesitas disponer de datos históricos de productividad del equipo para producir cada funcionalidad.

Por ejemplo supongamos que hemos determinado que nuestra organización toma 3 horas en producir 1 punto de función, entonces:

28 puntos de función multiplicados por 3 horas resulta en 84 horas, o 11 días si consideramos 8 horas por día. 

Tomando el factor de ajuste mencionado en el punto anterior, por medio del cual sabemos que según las particularidades de nuestra organización tenemos un margen de mas o menos 2,8 puntos de función,  entonces sabemos que nuestro desarrollo de software puede tomarnos 84 horas mas o menos 8,4 horas, u 11 días mas o menos 1 día.

Los puntos de función y su conversión a horas hombre los podemos tomar globales o individuales a cada funcionalidad, esto puede ser útil para elaborar las estimaciones de actividades, costes y presupuesto en los proyectos.


¿Te gustaría certificarte profesionalmente como experto en estimación y medición de proyectos de Software?


Inscríbete en el:


¿En que me puede ayudar el método de puntos de función?


Los puntos de función pueden ser de utilidad para todos los profesionales involucrados en un proyecto de desarrollo de software, por ejemplo:

Como Analista de sistemas (o Ingeniero en sistemas) pueden solicitarte estimaciones de esfuerzo, recursos y tiempo para desarrollar los requerimientos que estas analizando en tu ingeniería de requisitos. Los puntos de función pueden ayudarte a medir el tamaño del software de forma rápida y confiable, basadas en un modelo paramétrico y no subjetividades.

Como desarrollador de software (o programador) con frecuencia te preguntarán cuánto tiempo tomará realizar el desarrollo de uno o varios requisitos. Puedes usar el método de puntos de función para medir el tamaño del desarrollo a partir de sus componentes y funcionalidades. Conociendo el tamaño puedes decirle a tu supervisor, líder técnico o gerente cuanto tiempo tomará el desarrollo, y el número que proporciones será más confiable que el que hubieras producido con una apreciación general de la funcionalidad.

En la Gestión de proyectos, el método de puntos de función puede ayudar en la estimación de tiempos y costos. Los puntos función proporcionan una forma fiable de determinar el tamaño del software a partir de la definición de su alcance. Luego con estas mediciones puedes establecer la relación de puntos de función con los días que tomará desarrollar cada componente, produciendo así estimado de tiempo, costos y presupuesto.

Como software tester puedes usar los puntos de función para medir la complejidad de los casos de prueba, y contestar la pregunta de cuánto tiempo me tomará ejecutar el software Testing de unos requerimientos determinados.

Ejemplo de presupuesto de proyecto de software con puntos de función


Sígue el siguiente enlace y te presentamos un ejemplo completo para elaborar el presupuesto de un proyecto de software, con el método de puntos de función:

> Ejemplo de presupuesto de un proyecto de software

Este articulo esta basado en el contenido del Curso de Análisis de Puntos de Función: Medición y Estimación de Software suministrado por FATTO. Los puntos de función son una herramienta útil para realizar estimaciones de esfuerzo exactas. Para mayor información visita la pagina del curso.

¿Y tú? ¿Qué opinas?


¿Cómo elaboras tus estimaciones de proyectos de software?, ¿Utilizas algún método paramétrico como los puntos de función o te basas en la opinión de expertos?, ¿Has intentado usar métodos como los de puntos de función, que retos te has encontrado y como los has superado?


¿Buscas más información de gerencia informática?


¿Quieres obtener completamente gratis y directamente en tu correo electrónico plantillas, artículos y otros recursos de gerencia informática?, entonces presiona "suscríbete" a continuación.

Suscríbete a la lista de correo electrónico:


Vía FeedBurner, se abrirá una nueva ventana

También puedes seguirnos vía Twitter, Facebook o Linkedin:

  

Artículos similares


> 10 Técnicas de estimación de software

Medición y estimación: Método COSMIC

Contratación de Servicios de Software: El Modelo Brasileño de Puntos Función

5 pasos para elaborar estimaciones de proyectos de software

No hay comentarios :

Publicar un comentario

Pmoinformatica.com," La Oficina de Proyectos de Informática ", es un participante en el Programa de Servicios de Amazon Associates LLC, un programa de publicidad de afiliación diseñado para proporcionar un medio para que sitios web puedan ganar honorarios por la publicidad y enlaces a amazon.com y amazon.es.