Contexto


Una empresa de software desea saber cuánto esfuerzo en horas-hombre requerirá el nuevo proyecto para un cliente importante. Dado que es un proyecto estratégico para el cliente, la empresa desea planear muy bien sus recursos, cumpliendo con las expectativas del desarrollo.

Roberto, el gerente del proyecto, ha recopilado toda la información en relación con los requerimientos generales del desarrollo, de tal manera que puedan ser la base para que los gerentes de las diferentes áreas de sistemas puedan estimar el tiempo y la cantidad de recursos necesarios. Los gerentes han estado acostumbrados a dar estimaciones basadas en su intuición y experiencia, sin embargo, han provocado que subestimen los recursos necesarios o sobreestimen demasiado en el tiempo requerido en proyectos pasados. Para este proyecto, Roberto les ha solicitado que ofrezcan una estimación basada en datos históricos y en algún método de estimación de software, de tal manera que puedan compararlo con la estimación que ellos hacen.

¿Cómo se estima el esfuerzo y el tamaño del software?, ¿cuáles son los métodos de estimación del software que pueden utilizar los gerentes?, ¿existirá algún método estadístico que puedan utilizar para precisar su estimación?

Explicación


5.1 Fundamentos de la estimación del software

Según Chemuturi (2009), en la estimación en los proyectos de software intervienen los siguientes elementos:

  • Cantidad y tamaño de los componentes necesarios.
  • Esfuerzo para desarrollar el software
  • Costo monetario que debe cubrirse.
  • Duración o plan de ejecución.

Estas variables permiten revisar las fuentes de donde se obtendrán estos recursos y establecer un presupuesto al cual apegarse para mantener el control de la correcta asignación y uso de recursos.

Una buena administración de proyectos de software debe establecer una estimación antes de dar inicio oficial al proyecto, debe revisarla durante el desarrollo y finalmente comparar el estimado vs el presupuesto real una vez desarrollado y entregado. Esto aplica ya sea si es un desarrollo interno o bien si se ha contratado a un tercero para desarrollarlo.

Principios de la estimación:

El PSP-Bok (2009) nos ofrece los siguientes principios de la estimación:

  • La estimación es incierta: nadie sabe qué tan grande será el producto, ni mucho menos cuando se encuentra en etapas tempranas del proceso de desarrollo. La estimación puede sesgarse debido a las necesidades del negocio o a presiones de diversa índole.
  • La estimación es un proceso de aprendizaje: existe una mejora en la estimación con forme se adquiere experiencia y con datos.
  • La estimación es una habilidad: es un hecho que algunas personas tiene mejores habilidades para estimar que otros. La mayoría de las personas puede mejorar su habilidad de estimar el software con la práctica.
  • Trabaja por ser consistente: la meta en el proceso de estimación es establecer un proceso que ofrezca resultados de manera consistente, manteniendo un balance entre la sobreestimación y subestimación.
  • Utiliza un método definido para generar estimaciones: este método permite establecer con claridad los pasos a seguir para estimar, facilita que otras personas puedan utilizarlo y es una base para poder mejorar.
  • La estimación está sujeta al error: es posible que las estimaciones no reflejen con exactitud lo que vaya a suceder en realidad, aunque sus variaciones se acercarán al promedio.
  • Realice estimaciones al detalle: al estimar por partes se evita omitir algún elemento importante. Los posibles errores que pueden aparecer al estimar por partes de forma independiente serán mejores que una estimación general.
  • Utilice datos al hacer estimaciones: basarse en datos históricos de otros proyectos es una buena base para realizar ajustes a las nuevas estimaciones, al igual que una buena descripción de los requerimientos del cliente.

La idea general del proceso PSP es que un programador tenga la habilidad de estimar su propio trabajo y así pueda utilizar esa experiencia al estimar proyectos más complejos.

5.2 Métodos de estimación del esfuerzo

Existen varios métodos para estimar el tamaño del software y el esfuerzo requerido para completar un sistema, a continuación, se describen algunos.

Haz clic en cada método para conocer más detalle

5.3 Método de estimación PROBE

El método PROBE (Proxy Based Estimating) es utilizado para estimar el tamaño y el esfuerzo de desarrollo. Se considera como parte del proceso PSP y se basa principalmente en información histórica que puede ser recopilada para la estimación. Este método utiliza el concepto de “representante” o proxy, que es una unidad de medida que ayuda a estimar las partes que componen el software. Los proxies pueden ser las pantallas, elementos de bases de datos (campos, tablas, consultas, registros), las clases en programación orientada a objetos, o incluso Puntos de Función (PF).


Según Humphrey (2005), esta unidad de medida debe tener las siguientes características:

  • Debe permitir contabilizar el esfuerzo requerido para desarrollar el software.
  • Es preferible utilizar un proxy que pueda ser contabilizado de forma automática.
  • Debe ser una unidad que aparezca desde el inicio del proyecto.
  • Tener la posibilidad de adaptarse a las necesidades de cada proyecto y desarrollador.
  • Debe ser sensible a las variaciones de implementación que afectan al costo o al esfuerzo.

Ejemplo del método PROBE
Humphrey (2005) ofrece el siguiente ejemplo para mostrar el método PROBE:

Suponiendo que en tamaño de la unidad representativa (Proxy) es de 126 líneas de código, entonces: E = 126 LOC (dato estimado tomado de información histórica).

Tabla de ejemplo de datos históricos

Número del programa

Tamaño estimado del Proxy

Tamaño del código añadido o modificado

Horas totals reales

1

 

83

11.2

2

 

116

9.3

3

 

186

21.6

4

97

81

6.9

5

81

114

10.2

Totals

178

580

59.2

Número del programa

Tamaño estimado del Proxy (Size) – x

Horas reales y

Size*Size x*x

Size*Hours x*y

Hours*Hours y*y

1

83

11.20

6,889

929.6

125.44

2

116

9.30

13,456

1,078.8

86.49

3

186

21.60

34,596

4,017.6

466.56

4

81

6.90

6,561

558.9

47.61

5

114

10.20

12,498

1,162.8

104.04

Total

580

59.20

74,498

7,747.7

830.14

Promedio

116

11.84

 

 

Se obtiene el coeficiente de correlación entre el tamaño y las horas:

Dato que el coeficiente de correlación se acerca a 1 podemos decir que existe una correlación entre el tamaño y el tiempo. El método PROBE sugiere que el valor de r sea mayor o igual a 0.7.

Se procede a calcular los valores de los parámetros de regresión β0 y β1:

El tiempo estimado de desarrollo para este caso sería = β0 + β1 * E

Tiempo Estimado = -2.31046 + 126 * 0.121987

Tiempo Estimado = 13.060 horas

Para calcular el intervalo de predicción se utiliza una distribución t.

Donde:
p es la probabilidad de encontrar un valor en la distribución t de student. El valor típico de p es 0.7 o 0.9 (70% o 90%). El número de grados de libertad es n-2.
Xk = El tamaño o tiempo estimado.
σ es la varianza (el cuadrado de la desviación estándar).

El valor de t para 0.70 con 3 grados de libertad es 0.58439

El intervalo de predicción superior es 13.060+5.4252 = 18.49 y el inferior es 13.606-5.4252 = 7.63
Es decir que el 70% de los valores estimados caerán entre 6.13 y 19.99 horas

Cierre


En cualquier proyecto en el que participes, será necesario utilizar la estimación como herramienta básica para conocer de antemano la cantidad de recursos necesarios. La estimación se fundamenta en la información que se tiene a la mano, si la información es suficiente y correcta, la estimación será de mejor calidad. Si, por lo contrario, no se tiene suficiente información o tiene errores, la estimación que se haga seguramente no se acercará a los datos reales.  
Estimar el tamaño el software es una actividad que requiere de un proceso iterativo en el que se realicen ajustes para que la estimación sea más precisa. Esto requiere de la disciplina de los programadores para poder documentar con precisión el trabajo que realizan, y para ello será muy útil las recomendaciones que se tengan del proceso PSP. Cada nuevo proyecto será una nueva oportunidad para mejorar el proceso de estimación anterior.

Debes tener presente que rara vez las estimaciones se cumplen en los proyectos de software, debido a que es difícil predecir los problemas a los que se enfrentará el equipo de desarrollo. Existirán muchos imponderables que provocan que el proyecto se salga de control, sin embargo, si el proyecto cuenta con un buen equipo de trabajo, se podrán solucionar los problemas y cumplir con las fechas estimadas de entrega sin mermar la calidad del producto.

Checkpoint


Asegúrate de poder:

  • Reconocer los elementos y los principios que intervienen en una adecuada estimación como parte del proceso de planeación de un proyecto de desarrollo.
  • Identificar algunos métodos de modificación de software que puede utilizar cuando esté asignado a un proyecto de software.
  • Practicar el método PROBE como parte de la metodología PSP para realizar mediciones del tamaño del software y el tiempo requerido.  

Referencias


  • Chemuturi, M. (2009). Software estimation best practices, tools & techniques. EE. UU: J. Ross Publishing.
  • Pomeroy-Huff, M, Cannon, R., Chick, T., Mullaney, J. y Nichols, W. (2010). The Personal Software Process (PSP) Body of Knowledge, Version 2.0. Recuperado de http://repository.cmu.edu/cgi/viewcontent.cgi?article=1034&context=sei