Barra Superior

PMOinformatica.com
La oficina de proyectos de informática
La web sobre gerencia de proyectos de informática, software y tecnología.
Síguenos en:     

miércoles, 9 de mayo de 2018

Ejemplo de presupuesto de un proyecto de software

Este artículo está basado en el contenido del Curso de preparación para la certificación Certified Function Point Specialist (CFPS) del IFPUG. Curso suministrado por Fatto, empresa de consultoría y sistemas. Visita la página del curso para más información.


Cuando un cliente o área de negocio interna en una organización nos solicita un desarrollo de software, la primera pregunta que nos vendrá a la mente será la de ¿Cómo elaborar el presupuesto?. Para dilucidar estas dudas, a continuación te presentamos un ejemplo de presupuesto de un proyecto de software.

Para elaborar el presupuesto de un proyecto de software, lo primero que necesitaremos será entender en que consiste el software a desarrollar y cuáles serán sus funcionalidades. Seguidamente necesitaremos medir la magnitud del trabajo a realizar y determinar el costo por unidad de medida, llegando así a un costo por funcionalidad y total.

En este artículo, te presentamos un ejemplo de presupuesto para desarrollar un software, donde cubriremos la medición del software, determinación de la productividad, estimación de esfuerzo y personal en base a la misma, llegando por último al presupuesto.

Ejemplo de presupuesto de un proyecto de software


Para desarrollar el ejemplo de presupuesto de un proyecto de software, seguiremos los siguientes pasos.

  • Medición del software.
  • Determinación de la productividad del equipo de trabajo.
  • Estimación de esfuerzo y personal necesarios para el presupuesto.
  • Costos del personal.
  • Costos de las unidades de medida del proyecto.
  • Presupuesto de un proyecto de software

Análisis de requerimientos


El primer paso es obtener un entendimiento de que es lo que necesita el cliente. Para ello, debemos realizar una serie de entrevistas utilizando técnicas de levantamiento de información de requerimientos de software.

Supongamos que para el ejemplo de presupuesto de un proyecto de software que estamos desarrollando, realizamos el levantamiento de información y hemos determinado que los requerimientos son los siguientes:

Requerimientos funcionales de un sistema de compras


RQ-001

Al realizar órdenes de compra, se ingresaran al sistema los siguientes datos: Número de la orden (determinado automáticamente por el sistema), código de proveedor y fecha de la orden. Adicionalmente, a las órdenes de compra se le agregarán líneas, para cada línea se especificará la siguiente información: Código de artículo, cantidad solicitada y precio. Todos los datos indicados son obligatorios.

RQ-002

Se permitirá el registro de órdenes de compra con datos incompletos, los cuales podrán completarse posteriormente modificando la orden. Las órdenes de compra con datos incompletos se registrarán con el estado “Por completar información”. Una vez verificado que los datos estén completos, la orden de compra pasará al estado de “pendiente de aprobación”.

RQ-003

Las órdenes de compra que excedan los montos establecidos en el flujo aprobación configurados, se registrarán con el estado “pendiente de aprobación” a nombre de los usuarios indicados en el flujo de aprobación configurado.

RQ-004

Solamente los usuarios autorizados podrán visualizar las órdenes de compra pendientes de aprobación.

RQ-005

Los usuarios autorizados podrán seleccionar, visualizar y aprobar las órdenes de compra. Una vez aprobada, la orden de compra pasará al estado de “Aprobada”.

RQ-006

Las órdenes de compra con estado “Aprobada” podrán imprimirse (incluyendo impresión en archivo PDF) y enviarse por correo.

Con los requerimientos funcionales definidos podemos seguir con el siguiente paso, que será realizar una medición de la magnitud o tamaño del software a desarrollar.

Medición del software


Existen diversas técnicas de estimación de esfuerzo y costo en software a nuestra disposición, para este ejemplo, utilizaremos como método de medición el Análisis de puntos de función definido por el International Function Points Group (IFPUG).

Desarrollaremos la medición en dos pasos, primero determinaremos los componentes funcionales del presupuesto de desarrollo de software, a partir del análisis de requerimientos realizado anteriormente. Seguidamente, realizaremos el cálculo de los puntos de función, con lo cual obtendremos una medida del tamaño del proyecto.

Una de las ventajas de las métricas de software usando el método de puntos de función, es que al multiplicar el tamaño funcional de un sistema por el costo de producir cada punto de función, quienes toman las decisiones en la organización pueden realizar cálculos rápidos del costo de desarrollo de un software y por lo tanto de su presupuesto.

Para mayor información del método, te recomendamos nuestra serie de artículos sobre el método de puntos de función del IFPUG:

> Introducción a la estimación de proyectos de software por puntos de función

> Determinar tipo de conteo y componentes funcionales

> Cálculo de los puntos de función no ajustados

Retomando la medición del software utilizando nuestro ejemplo, tenemos:

Determinar los componentes funcionales


Para determinar los componentes funcionales, debemos determinar tanto las transacciones de negocio como los componentes de datos, siguiendo el método de análisis de puntos de función.

Transacciones de negocio

Las transacciones de negocio que podemos desglosar a partir de los requerimientos de software son las siguientes:

  • Consultar lista de órdenes de compra.
  • Ingresar orden de compra.
  • Ingresar línea de orden de compra.
  • Modificar orden de compra.
  • Modificar línea de orden de compra.
  • Consultar órdenes de compra por aprobar.
  • Aprobar orden de compra.
  • Imprimir orden de compra.
  • Enviar por email orden de compra.

Seguidamente, clasificamos las transacciones de negocio, que pueden ser de 3 tipos: Entradas, salidas y consultas. Adicionalmente, debemos asignar un nivel de complejidad alto, medio o bajo a cada uno.

Los niveles de complejidad 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, entre otros.

Al clasificar las transacciones de negocio y asignar los niveles de complejidad se tiene lo siguiente:

  • Consulta externa (Alta): Consultar lista de órdenes de compra.
  • Entrada externa (Bajo): Ingresar orden de compra.
  • Entrada externa (Bajo): Ingresar línea de orden de compra.
  • Entrada externa (Bajo): Modificar orden de compra.
  • Entrada externa (Bajo): Modificar línea de orden de compra.
  • Consulta externa (Alta): Consultar órdenes de compra por aprobar.
  • Entrada externa (Bajo): Aprobar orden de compra.
  • Salida externa (Bajo): Imprimir orden de compra.
  • Salida externa (Medio): Enviar por email orden de compra.

Componentes de datos

Para determinar los componentes de datos para nuestro ejemplo de presupuesto de un proyecto de software, necesitamos tener una idea preliminar de cuál será el modelo de datos, o bien las entidades de nuestro modelo entidad relación.

Como estamos en una fase de presupuesto, no podemos realizar el análisis de sistema e ingeniería de software completa, pero debemos tratar de llegar a un nivel de detalle suficiente para poder elaborar un presupuesto realista.

Los componentes de datos se pueden clasificar en archivos internos y archivos externos. Igualmente, debemos asignar un nivel de complejidad. En el caso de componentes de datos dependerá del número de campos que tenga (más campos más complejidad) y las subagrupaciones de estos datos, entre otros aspectos.

Siguiendo el ejemplo hemos determinado que los componentes de datos son los siguientes:

  • Archivo lógico interno (Bajo): Tabla de Orden de compra
  • Archivo lógico interno (Bajo): Tabla de línea de orden de compra
  • Archivo lógico interno (Bajo): Tabla de Proveedor
  • Archivo lógico interno (Bajo): Tabla de Artículo

Cálculo de los puntos de función


El método de puntos de función establece una cierta cantidad de puntos a asignar según el nivel de complejidad de los componentes funcionales, esta medida es relativa a unos a otros y a mayor complejidad mayor cantidad de puntos de función asignados.

Los puntos de función se asignan según la siguiente tabla:


Utilizando la tabla, podemos realizar el conteo de puntos de función para los componentes funcionales.

  • Consulta externa (Alta): Consultar lista de órdenes de compra. 6 puntos.
  • Entrada externa (Bajo): Ingresar orden de compra. 3 puntos.
  • Entrada externa (Bajo): Ingresar línea de orden de compra. 3 puntos.
  • Entrada externa (Bajo): Modificar orden de compra. 3 puntos.
  • Entrada externa (Bajo): Modificar línea de orden de compra. 3 puntos.
  • Consulta externa (Alta): Consultar órdenes de compra por aprobar. 6 puntos.
  • Entrada externa (Bajo): Aprobar orden de compra. 3 puntos.
  • Salida externa (Bajo): Imprimir orden de compra. 4 puntos.
  • Salida externa (Medio): Enviar por email orden de compra. 5 puntos.
  • Archivo lógico interno (Bajo): Tabla de Orden de compra. 7 puntos.
  • Archivo lógico interno (Bajo): Tabla de línea de orden de compra. 7 puntos.
  • Archivo lógico interno (Bajo): Tabla de Proveedor. 7 puntos.
  • Archivo lógico interno (Bajo): Tabla de Artículo. 7 puntos.

Total de puntos de función: 64

Al determinar los puntos de función tenemos una medida de la magnitud del tamaño del software y del esfuerzo que se requiere para desarrollarlo.

Formación en medición de software


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

Inscríbete en los cursos de Medición y estimación de software con puntos de función.



Análisis de puntos de función
Medición y estimación de software en proyectos y contratos de servicios con métodos cuantitativos.

Certificación CFPS del IFPUG
Demuestra tus conocimientos en estimaciones con puntos de función con la certificación del IFPUG.







Productividad del equipo de trabajo


Para continuar con el ejemplo de presupuesto de un proyecto de software, necesitamos conocer cuantos puntos de función por unidad de tiempo puede desarrollar nuestro equipo de trabajo en un tiempo dado, esto para determinar la duración del proyecto.

Necesitamos valernos de la información de proyectos pasados que tenga la organización, también podemos usar información de otras fuentes, otras organizaciones y bases de datos de Benchmarking.

Por ejemplo, supongamos que sabemos que un equipo de trabajo compuesto por 4 desarrolladores, 2 testers y un director de proyectos (Project Manager), pueden producir 32 puntos de función IFPUG al mes.

Para que la medición sea exacta, debemos considerar puntos de función completamente desarrollados, es decir donde se ejecutó el análisis, diseño, desarrollo, pruebas. Es decir, todo lo necesario para que sea puesto en producción.

Determinar la productividad solamente con tiempos de desarrollo no nos ayuda en este caso.

Considerando que un mes tiene 21 jornadas en promedio, podemos determinar el número de jornadas que necesitamos para producir 32 puntos de función, a saber:

Para producir 32 puntos de función necesitamos:
  • 84 jornadas de desarrolladores de software.
  • 42 jornadas de testing.
  • 21 jornadas de Project Management.


Por lo tanto la productividad del equipo es:
  • Gerente de proyecto: 1,52 puntos de función por jornada.
  • Desarrollo de software: 0,38 puntos de función por jornada.
  • Testing de Software: 0,76 puntos de función por jornada.

¿Y si no tenemos datos históricos de la productividad?


Si no tenemos datos históricos de la productividad, tendremos que utilizar algún punto de partida como referencia, podríamos partir de una estimación inicial de productividad y luego ajustarla tan pronto tengamos algún tiempo de operación y obtengamos los primeros datos de productividad.

También podríamos valernos de datos que tengamos de nuestras experiencias laborales previas, o de otras empresas.

En todo caso nuestro objetivo será el mismo, determinar la composición del equipo y cuantos puntos de función pueden desarrollarse por jornada de trabajo.

Estimación de esfuerzo y personal necesarios en base a la productividad


Conocida la productividad, podremos realizar el cálculo del esfuerzo necesario (medido en jornadas) y estimación de personal.

En el ejemplo, sabiendo que el desarrollo de software tiene una medición de 64 puntos de función, podemos determinar que necesitamos:

  • Gerente de proyectos: 44 jornadas.
  • Desarrolladores de software: 168 jornadas.
  • Testers: 84 jornadas.

¿Cuántas personas necesitamos para ejecutar el proyecto? Dependerá del tiempo en que necesitemos ejecutarlo. En nuestro ejemplo de presupuesto de un proyecto de software, si mantenemos la configuración de nuestro equipo de trabajo, el proyecto tomará 2 meses.

Podríamos aumentar el número de personas para ejecutarlo en menos tiempo, sin embargo, no podemos aplicar la misma productividad que calculamos en base al equipo de trabajo previo, pues está demostrado que la relación cantidad de personas con la productividad no es linealmente proporcional.

Para determinar esta nueva productividad necesitamos un factor de ajuste o encontrar información de proyectos ejecutados con más personas (para conocer cuántos puntos de función se desarrollaron en un tiempo dado).

Costos del personal del proyecto de desarrollo de software


Teniendo definidas el número de jornadas que requiere nuestro proyecto de desarrollo de software, pasamos a determinar los costos, para lo cual lo primero que necesitamos conocer es el costo por jornada del personal.

Para nuestro ejemplo de presupuesto, los costos mensuales de nuestro personal serán los siguientes:

  • Gerente de proyecto: 2.895 USD.
  • Desarrollador de software: 2.150 USD.
  • Tester: 1.850 USD.

Con estos datos podríamos determinar el costo por jornada, y como conocemos las jornadas del proyecto podríamos calcular el presupuesto. Sin embargo, para obtener una medida de costo que podamos aplicar universalmente a todos los proyectos, es más útil definir cuál es el costo de un punto de función.

Costos de las unidades de medida del proyecto (Puntos de función)


Tomando los costos de personal, el costo mensual del equipo de desarrollo de software es el siguiente:

  • Gerente de proyectos (1 persona): 2.895 USD.
  • Desarrollador de software (4 personas): 8.600 USD.
  • Tester (2 personas): 3.700 USD.

Total: 15.195 USD

En un mes de trabajo el equipo puede desarrollar 32 puntos de función, por lo tanto el costo por unidad de medida es:

Costo por unidad de medida = Costo total / Nro. De unidades de medida
Costo por unidad de medida = 15.195 USD / 32 puntos de función = 474,84 USD por punto de función.

Presupuesto del proyecto de desarrollo de software


Sabiendo que nuestro proyecto tiene 64 puntos de función, podemos estimar su costo en:

474,84 USD x 64 puntos de función = 30.390 USD.

De hecho, dado que conocemos los puntos de función de cada componente funcional del proyecto, podríamos inclusive presentar un presupuesto desglosado:

  • Consultar lista de órdenes de compra. 6 puntos, USD 2.849,04.
  • Ingresar orden de compra. 3 puntos, USD 1.424,52.
  • Ingresar línea de orden de compra. 3 puntos, USD 1.424,52.
  • Modificar orden de compra. 3 puntos, USD 1.424,52.
  • Modificar línea de orden de compra. 3 puntos, USD 1.424,52.
  • Consultar órdenes de compra por aprobar. 6 puntos. USD 2.849,04.
  • Aprobar orden de compra. 3 puntos, USD 1.424,52.
  • Imprimir orden de compra. 4 puntos, USD 1.899,36.
  • Enviar por email orden de compra. 5 puntos, USD 2.374,20.
  • Tabla de Orden de compra. 7 puntos. USD 3.323,88.
  • Tabla de línea de orden de compra. 7 puntos, USD 3.323,88.
  • Tabla de Proveedor. 7 puntos, USD 3.323,88.
  • Tabla de Artículo. 7 puntos, USD 3.323,88.

Finalizado esto solo nos queda presentar el presupuesto al cliente o al solicitante del proyecto. Para ello te recomendamos usar nuestra Plantilla de Presupuesto de un proyecto.

Asimismo, no solo bastará con que presentes el presupuesto, también deberías elaborar una propuesta. En el siguiente enlace te compartimos un modelo:

> Modelo de como hacer una propuesta de servicios

Otros métodos para determinar el presupuesto de un proyecto de software


Este ejemplo de presupuesto de un proyecto de software, fue realizado utilizando el método de puntos de función IFPUG para la medición del software. Existe otro método de medición de puntos de función, el método COSMIC, sigue el siguiente enlace para ver el ejemplo:

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

¿Te gustaría certificarte profesionalmente como experto en estimación y medición de proyectos de Software. Inscríbete en el Curso de preparación para la certificación Certified Function Point Specialist (CFPS)


¿Y qué opinas tú?


¿Tendrías algo que agregar al ejemplo de presupuesto de un proyecto de software que te hemos presentado? ¿Cómo se elaboran los presupuestos de proyectos de software en tu organización? Déjanos tus comentarios al final del artículo.

¿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 relacionados


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.