El Modelo del Análisis de Precios Unitarios Industrial adaptado a un Proyecto de Desarrollo de Software para un Producto de Informática

The Model Unit Prices Analysis Industrial adapted to a Software Development Project for Computer Product

Cirilo Vega Magaña
Universidad Tecnológica del Valle de Toluca, México
cirilo_vega@hotmail.com

Ivan Steve Vega Herrera
Consultor Senior en Crucialsoft SC, México
ivancatarina@gmail.com

 

Resumen
En el presente trabajo se analiza la factibilidad de realizar el cálculo y estimación de costo de un proyecto de personalización de un producto de software empleando técnicas de costeo del Análisis de Precios Unitarios utilizados en Ingeniería Industrial.

Se contemplan los ajustes que se tendrían que hacer para poder utilizar el modelo de Análisis de Precios Unitarios, buscando las equivalencias de los conceptos usados en Ingeniería Industrial: maquinaria y equipo, materiales, mano de obra, jornada, etcétera, y aplicados a la ingeniería de software específicamente en proyectos de desarrollo y mantenimiento de software.

Mediante un modelo simplificado obtenido a partir del análisis se verifica la viabilidad de usar el modelo de costeo comparándolo con cifras obtenidas a partir de las estimaciones generales que se hacen en informática en el mercado mexicano.

Palabras Clave: análisis precios unitarios, estimación tiempo y costo desarrollo de software

Abstract
In this paper, the feasibility of using the analysis of unit prices technique to estimate the cost and time needed to customize a commercial software product as it is used in Industrial Engineering Projects.

The adjustments needed to make use of the unit prices model are taken into consideration as part of this work, identifying the equivalences of the concepts used in Industrial Engineering such as machinery, materials, working force, journey, etcetera, applied to what the software engineering has to offer, specifically for software development and maintenance projects.

The feasibility of using this technique is verified by testing a simplified model of unit prices, obtained by means of the analysis that comprises this document. The results issued by the model are then compared to the data obtained by common techniques used in software Engineering in the Mexican Market.

Key words: Unit prices analysis, time and cost estimate software development.

Fecha recepción:   Enero 2015           Fecha aceptación: Julio 2015


Introducción
La mayoría de las técnicas de estimación de costo y tiempos de desarrollo de software se basan en el listado de requisitos de funcionalidad que el software debe realizar y se realizan con base en un estimado teórico de tiempo de desarrollo, calculado la mayoría de las veces a partir de una descripción de dicha funcionalidad que, en muy pocos casos, es lo suficientemente detallada como para llegar a un cálculo no digamos exacto, pero al menos adecuado, funcional, y que derive en que el equipo de desarrollo tenga un resultado positivo económicamente, esto es, que el proyecto genere dividendos, sobre todo cuando el presupuesto es ajustado.

Otro inconveniente que se tiene con esta forma de estimar es que normalmente lo hace el personal de ventas o en el mejor de los casos, personal con un nivel técnico suficiente para poder realizar los análisis de los elementos de funcionamiento con las especificaciones técnicas requeridas; no obstante, quien vende o realiza el análisis inicial en general no es la persona ni el equipo de trabajo que termina ejecutando el trabajo. El personal de ventas o el que apoya técnicamente a ventas carece del detalle suficiente como para realizar un levantamiento de requerimientos suficientemente claro como para poder hacer el cálculo dado.

También influye el conocimiento técnico de la parte del interesado en el producto; dado que este está enfocado en temas fiscales, normalmente los interesados son personal del área contable o fiscal, y muy raramente tienen apoyo de personal de sistemas. En PyMES, con operaciones “generales”, la configuración estándar de la herramienta es suficiente para atender los requisitos de información, pero en empresas grandes o corporativos, las operaciones pueden ser tan complejas que la propia organización cuenta con todo un equipo de gente de informática que procesa estos datos. En este último caso, a veces el personal del área fiscal/contable no tiene buena comunicación con el área informática, y esto deriva en que la parte informática no colabore lo suficiente y ponga de su parte lo requerido para realizar las definiciones en materia tecnológica que el área usuaria no puede por la carencia del conocimiento técnico.

Desde el punto de vista informático, una estimación de esfuerzo y costo implica contemplar el tiempo de uno o más perfiles que realizan las siguientes tareas:

Si se observa el listado de tareas anterior, y mirándolo desde el punto de vista de Precios Unitarios como lo ejercita la Ingeniería Industrial, estas actividades solo contemplan la mano de obra de un producto, que aunque físicamente no es un producto tangible, el software termina siendo un producto manufacturado con un proceso similar al de un proceso de fabricación industrial.
Tomando en cuenta los aspectos que menciona la Ingeniería Industrial, para la generación de un producto se necesita contemplar:

Haciendo converger estos puntos con la Ingeniería en Sistemas, la mano de obra es el tiempo que cada perfil de desarrollo de software debe invertir, incluido el personal que ejecuta las actividades, así como quien dirige y coordina al equipo de desarrollo.

La maquinaria contempla el equipo de cómputo y demás periféricos que se necesitan para generar el/los productos de software, y que incluye los equipos de cómputo que cada desarrollador utiliza, impresoras, equipos de comunicación, escáner, etcétera.

Los materiales en materia informática incluyen: papel para la impresión de los documentos que oficialicen el desarrollo (en caso de que aplique), consumibles para los equipos de impresión, dispositivos de almacenamiento como memorias flash o discos compactos o DVD.

La parte más complicada es la estimación del tiempo de la mano de obra, específicamente del equipo de desarrollo. Una ventaja que se tiene con el caso de estudio, es que las tareas de desarrollo son de la misma naturaleza. Para realizar el análisis de la factibilidad de utilizar la técnica de Análisis de Precios Unitarios, se tomará como caso de estudio la personalización de un módulo del aplicativo que consiste en generar facturas a partir de la información que se lee de un archivo de texto emitido por otro sistema.

El caso de estudio

Por razones de confidencialidad y con la finalidad de no exponer información crucial acerca del funcionamiento del aplicativo, ya que es un software que se vende comercialmente, los nombres específicos del software no serán revelados y se hará mención a ellos con un nombre genérico.

El software en cuestión es una solución comercial que se ofrece en el mercado mexicano para emitir documentos fiscales con base en la definición tecnológica que el SAT definió para la contabilidad electrónica y generación de documentos fiscales electrónicos.

El caso de estudio es la funcionalidad con que cuenta el software para permitir la captura de los  datos de facturación y realizar una conexión con un servicio de timbrado externo, para posteriormente registrar y generar una factura en formato XML y en formato PDF.

En la versión estándar del programa, es decir, el que se ofrece de fábrica, al usuario se le presenta una pantalla donde podrá capturar los datos para generar una factura. Una vez que el usuario ha finalizado su captura, el software valida que toda la información necesaria para generar la factura está presente y posteriormente envía esa información a un servicio de timbrado de facturación electrónica que le devolverá la factura en formato XML con un sello autorizado por el SAT. Una vez que recibe la respuesta del servicio de timbrado, genera la versión impresa del documento o PDF. Finalizado este proceso, el sistema registra internamente la nueva factura y esta se le presenta al usuario cuando este último entra al sistema a verificar la facturación.

La factura generada se ofrece comercialmente como una factura estándar que incluye únicamente los campos que el SAT solicita, siendo estos:

Cuando un cliente requiere que la factura en formato impreso incluya más información, como por ejemplo un número de orden, una leyenda específica o cualquier otro aspecto no contemplado en la estructura estándar, el equipo de desarrollo debe hacer modificaciones internas a la programación del sistema para que esto ocurra.

A simple vista, agregar el campo se aprecia sencillo, pero dependiendo de las condiciones que están alrededor de este sencillo dato, la tarea que parece fácil se puede convertir en un trabajo de más de 40 horas de programación.

Las condiciones que determinan la complejidad de la tarea son:

 

 

Realizar un análisis minucioso de las combinaciones que estas distintas posibilidades pueden dar, está fuera del alcance de este trabajo. Lo que se busca es un método de estimación de tiempo y esfuerzo, que pueda ser usado para elaborar el cálculo del costo que representa para la empresa realizar las modificaciones a la programación del software que puedan dar respuesta a la necesidad de un cliente determinado, y que este costo a su vez pueda ser utilizado como base para calcular el precio de venta al consumidor final.

Como se describía en la introducción del escrito, normalmente las tareas de desarrollo de software son cotizadas con base en el tiempo que un equipo multidisciplinario de desarrollo necesita para ejecutar el trabajo, dejando fuera los costos que representan para la organización el uso de los distintos equipos de cómputo, equipos periféricos, de comunicación, de impresión y toda suerte de consumibles asociados a ellos.

Lo que se observa en la técnica de Precios Unitarios de la Ingeniería Industrial, es que cualquier cotización considera estos tres elementos; haciendo la analogía descrita en la introducción, se aprecia completamente factible adaptar esta técnica a proyectos de desarrollo de software.

Adaptación de materiales

Se inicia por este apartado por ser el más sencillo. Los materiales en la parte informática contemplan:

Un valor unitario se deberá dar a cada uno de estos elementos, incluyendo, si la organización así lo definiera, un porcentaje de ganancia o costo extra por manejo interno.

Adaptación de la maquinaria

Los costos de maquinaria aplicados a la Ingeniería Informática corresponden a:
Costo de depreciación de los equipos de cómputo que se utilizan. Normalmente un equipo de cómputo de escritorio/laptop tiene una vida útil de 3 a 5 años. Se tomarán 5 para este caso. El equipo perderá su costo de reventa en 3 años y en 5 años bajará a un estimado de mil pesos. Luego del 5to año se considera ya no revendible y su costo se amortizará a 1.

Para fines de la generación del modelo simplificado se usará la siguiente cifra:
Costo promedio del equipo de cómputo: 13 000 pesos
Depreciación mensual a 3 años: 13 000 pesos/36 meses = 362 pesos/mes
Depreciación por hora de uso (20 días hábiles de 8 horas) = 362 pesos/160 horas  = 3 pesos/hr

Equipos de comunicación. Si se utilizan y son proporcionados por la empresa se contemplará un costo de depreciación a los equipos de red (router, switch), equipos de telefonía (celular, fijo, voz ip).

Equipos de impresión, escaneo y fotocopiado. Se contempla un periodo de 5 años de depreciación a impresoras láser y de inyección de tinta, escáneres y fotocopiadoras.

Equipos de almacenamiento externo. Se contempla un periodo de 5 años de depreciación a dispositivos de almacenamiento externo, como discos duros externos.

Adaptación del costo de la mano de obra

Para este caso se consideran únicamente tres rangos de desarrollador:

Se utilizarán sueldos promedio mensuales para cada rango:

Se calcula el costo promedio por hora de cada recurso con la siguiente fórmula:
Costo promedio por hora = (costo mensual x 12) / (total de días hábiles al año x 8).

Cifras simplificadas:
12 meses de 20 días hábiles en promedio por mes

Principiante: 180 000/1920 = 93.74 pesos/hora - se redondea a 94 pesos/hora
Intermedio: 240 000 / 1920 = 125 pesos/hora
Avanzado: 300 000 / 1920 = 156.25 - se redondea a 157 pesos/hora

Tiempo promedio de la ejecución de cada tarea

Para poder dimensionar el costo de un determinado desarrollo, se categorizaron las actividades que comúnmente son necesarias en la instrumentación del aplicativo y la personalización de una pantalla o un formato impreso. Las tareas son:

Cada tarea es valorada en un tiempo estándar, que puede variar según la complejidad. Para fines prácticos y por estándar en el mercado, se categorizan las tareas en sencilla, media y compleja. Es necesario que cualquier desarrollo se exprese en tareas que puedan categorizarse así para poder realizar el cálculo en turno.

De acuerdo con el tipo de tarea y su categorización, tendremos los siguientes tiempos estándar:

Tarea

Complejidad

Tiempo

Agregar/eliminar/modificar un campo en pantalla.

Baja
Media
Alta

1hr
2hr
4hr

Agregar/eliminar/modificar un campo en formato impreso.

Baja
Media
Alta

2hr
4hr
8hr

Obtener un dato de base de datos.

Baja
Media
Alta

2hr
6hr
12hr

Insertar un dato en base de datos.

Baja
Media
Alta

1hr
3hr
6hr

Actualizar un dato en base de datos.

Baja
Media
Alta

1hr
2hr
4hr

A estas tareas se debe agregar un tiempo estimado de pruebas. En general, se estila calcular 30 % del tiempo de desarrollo como el tiempo necesario para verificar la funcionalidad de un componente. Tomando los tiempos estimados, los tiempos de prueba resultarían (cerrando a medias horas):

Tarea

Complejidad

Tiempo

Agregar/eliminar/modificar un campo en pantalla.

Baja
Media
Alta

0.5hr
1hr
1.5hr

Agregar/eliminar/modificar un campo en formato impreso.

Baja
Media
Alta

0.5hr
1.5hr
2.5hr

Obtener un dato de base de datos.

Baja
Media
Alta

0.5hr
2hr
4hr

Insertar un dato en base de datos.

Baja
Media
Alta

0.5hr
1hr
2hr

Actualizar un dato en base de datos.

Baja
Media
Alta

0.5hr
1hr
1.5hr

Prueba del modelo

Para realizar una prueba de la exactitud del cálculo con el modelo de Precios Unitarios, comparado con el modelo de estimación basado únicamente en el tiempo de desarrollo, se tomará el siguiente caso, realizando el cálculo del costo con los parámetros descritos y luego compararlo con el costo que se estimó para el desarrollo y finalmente contra el costo real que supuso el mismo.

Caso de prueba:
Cuando un usuario desea emitir una factura, el sistema verifica si ya existen los datos de facturación del receptor. Cuando existen, el usuario los puede modificar en caso de que haya habido un error en la captura. Se emite un mensaje en pantalla cuando el usuario desea cambiar los datos y el mismo mensaje cuando ya los ha modificado y procede a actualizar dichos datos en base de datos. Adicionalmente se necesita que el botón que permite modificar los datos sea más grande, en fondo de color azul y cambie el texto que despliega por “modificar” en lugar de “cambiar”. Como productos del desarrollo se entregan impresos los resultados de las pruebas ejecutadas.

Se realiza la división de tareas con respecto a la definición del modelo para obtener el número total de horas estimadas:

Eliminar el mensaje cuando se haga clic en el botón modificar
Tarea estándar: eliminar campo en pantalla
Complejidad: Baja
Tiempo estimado: 1 hr
Tiempo pruebas: 30 min
Cambiar el botón para modificar los datos, para ponerlo con fondo azul y cambiar la leyenda que muestra el mismo:
Tarea estándar: modificar campo en pantalla
Complejidad: Baja
Tiempo estimado: 1 hr
Tiempo pruebas: 30 min

El trabajo contemplaría 3 horas de desarrollo calculadas con las tablas definidas para el modelo de Precios Unitarios.
El mismo trabajo se estimó en 4 horas de desarrollo más 1.5 horas de pruebas con el modelo de estimación general, para un total de 5.5 horas.

Análisis de costos:

Modelo precios unitarios

Costo

Modelo general

Costo

Tiempo de desarrollo con desarrollador principiante

3hr x 94 = 282 pesos

Tiempo de desarrollo con desarrollador principiante

5.5 x 94 = 517

Maquinaria
Depreciación del equipo de cómputo

3hr x 3 = 9 pesos

 

 

Materiales:
3 hojas

3 x 1peso = 3 pesos

 

 

Total

$294 pesos

 

$517 pesos

El tiempo real de ejecución del desarrollo fue de 2 horas. El costo real fue de:
2 horas del desarrollador: $198
3 hojas: $3 pesos

Comparando los costos tenemos:

Costo/Tiempo PU

Costo/tiempo estimación

Costo/tiempo real

$294

$517

$201

3 hr

4.5hr

2hr

El tiempo y el costo calculados con el modelo de Precios Unitarios fueron mucho más cercanos a los datos obtenidos en la ejecución real del proyecto.

Desviaciones en el modelo de estimación

En proyectos y actividades de desarrollo en la industria resulta normal tener desviaciones de hasta 30 % del tiempo/costo derivados de los inconvenientes que se presentan durante la ejecución del trabajo mismo, a veces motivadas por carencia de conocimiento profundo de la materia que se esté trabajando (por ejemplo, un desarrollador programando sistemas de contabilidad sin tener conocimientos básicos de contabilidad) que hace imposible prever necesidades u obstáculos, a veces por desconocimiento del universo de información que una organización posee (por ejemplo, carencia de datos donde según la regla no debería existir).

Es poco común que un equipo de desarrollo se mantenga exclusivamente haciendo un solo desarrollo, es decir, normalmente se tiene más de un proyecto a la vez y asumir que el equipo de trabajo estará 100 % del tiempo enfocado en las tareas planeadas es poco realista.

Los sistemas de información están diseñados y construidos para dar solución a problemas de la vida real de organizaciones y personas. Estos problemas y necesidades de información cambian con el tiempo y los sistemas de información deben evolucionar al mismo tiempo para poder seguir dando respuesta a las necesidades de sus usuarios. Un factor común para la desviación de los tiempos estimados es que durante la construcción de un componente de software ocurra un cambio en el alcance de las necesidades originales que se tenían, bien sea por la aparición de un nuevo requisito de funcionalidad, la necesidad de agregar más componentes a un desarrollo previamente acordado, nuevos requisitos de funcionamiento derivados de definiciones de carácter legal que la autoridad en turno determine, entre otros.

Conclusiones

El modelo de Precios Unitarios de un proyecto de Ingeniería Industrial se acopla perfectamente a un Proyecto de Desarrollo de Software con las adecuaciones presentadas en este artículo.

Independientemente de la forma que se utilice para estimar costos y tiempos de desarrollo, sea mediante precios unitarios o mediante estimación de tiempo de personal, ambos modelos necesitan llevar un registro histórico por tipo de actividad, que permita tener datos reales estadísticos del tiempo que se demora un desarrollador de los tres tipos de experiencia (principiante, medio, avanzado) y obtener un tiempo promedio general por tipo de actividad y complejidad.

El modelo se puede extender y hacer más representativo si además se obtienen tiempos promedio por cantidad de experiencia y tipo de complejidad, es decir, tiempos promedio de un desarrollador principiante, tiempos promedio de un desarrollador intermedio y tiempos promedio de un desarrollador avanzado. De tal suerte que una estimación de tiempo y costo se pueda hacer con diferentes combinaciones de plantillas de trabajo, donde se pueda tener una mezcla de perfiles de experiencia y número de recursos distintos.

El área de informática como experta en materia de información podría destinar una parte de su tiempo y recursos en generar una solución de software que permita llevar el registro de estos datos estadísticos y a su vez obtener los tiempos y costos promedio, así como la generación del cálculo del tiempo y costo estimados por proyecto, con base en la información del desglose de tareas que se alimente al sistema.

Bibliografía

Software estimation techniques. Recuperado de https://en.wikipedia.org/wiki/Software_development_effort_estimation
Estándar IEEE 830-1998 – Recomended Practice For SoftwareRequirements Specifications Software Engineering Standards Committee of the IEEE Computer Society June 1998 ISBN 0-7381-0332-2
Estándar IEEE 1016-2009 Standard for InformationTechnology—Systems Design—Software Design Descriptions Software Engineering Standards Committee of the IEEE Computer Society March 1999 ISBN ISBN 978-0-7381-5926-3
Metodologías Ágiles de Desarrollo. Recuperado de http://agilemethodology.org/
Manifiesto de las metodologías ágiles de desarrollo. Recuperado de  http://www.agilemanifesto.org/
Modelado y documentación de sistemas ágil Agile Model Driven Development (AMDD) Recuperador de http://agilemodeling.com/essays/amdd.htm
2003-2012 Scott W. Ambler Ciclo de vida de desarrollo de software http://www.tutorialspoint.com/sdlc/sdlc_overview.htm
Software Test Estimation: How to estimate testing efforts Recuperado de http://inderpsingh.blogspot.mx/2010/03/how-to-estimate-testing-efforts-6.html Marzo 2010