Estimación de costos de software [cerrado]

10

He visto en mi lugar de trabajo (una universidad) a la mayoría de los estudiantes que hacen que el costo de estimación del software de su diploma final trabaje con COCOMO . Supongo que esta forma de estimar los costos es algo antigua (fechas de COCOMO de 1981), de ahí mi pregunta:

How do you estimate costs in your software?

He visto cosas como:

Costo = (HoursOfWork + EstimatedIddle) * HourlyRate

Eso no es lo que quiero, estoy buscando un modelo de costos adecuadamente definido (científicamente)

EDITAR He encontrado algunas preguntas relacionadas sobre SO:

David Conde
fuente
30
"¿Cómo calcula los costos en su software?" Mal, como todos los demás.
Rein Henrichs
1
Esto es, de hecho, dos preguntas. Le sugiero que lo reescriba como una pregunta principal que no depende del software esotérico. Dudo que obtenga muchas respuestas si el requisito es conocimiento con Cocomo
Eran Galperin
@Eran, tomaré tu consejo y volveré a escribir la pregunta entonces ...
David Conde
44
Steve McConnell es considerado un líder de pensamiento en este espacio por muchas personas en TI. Deberías echar un vistazo a su libro. stevemcconnell.com/est.htm
Jeff
55
Estoy votando para cerrar esta pregunta como fuera de tema porque no se trata de un problema de programación conceptual dentro del alcance definido en el centro de ayuda .
durron597

Respuestas:

16

En caso de que esté atascado en el modo Cascada, el único método bastante preciso que he usado es:

  1. Crear una estructura de desglose de trabajo
  2. Asegúrate de que sea lo suficientemente detallado para que puedas relacionar la magnitud de cada tarea con algo que tú (o alguien con quien puedas hablar) haya hecho antes.
  3. Para cada tarea, invente los números de mejor caso, caso probable y peor caso según la experiencia. El mejor de los casos es si todo salió a la perfección, el peor de los casos es si tuviera que volver a hacerlo (tal vez dos veces) y es probable que haya algún lugar allí.
  4. Use alguna fórmula de ponderación como (1 * mejor + 4 * probable + 1 * peor) / 6 para obtener una estimación para cada tarea que tenga en cuenta el rango.
  5. También he visto variantes en las que puede agregar un componente de "riesgo" a cada tarea. Los tres niveles de riesgo son 0, 1 y 2. Un riesgo de 0 significa que lo ha hecho antes (o algo muy cercano), 1 significa que no lo ha hecho antes, pero se hace regularmente en su industria, 2 significa que probablemente nunca se haya hecho antes en la industria. Usted toma el número de riesgo y lo multiplica por una aproximación de la "desviación estándar" de su estimación. Agregue eso a su estimación ponderada. Por lo tanto, un riesgo de 0 no lo mueve, pero un riesgo de 2 lo mueve bastante cerca de su peor número de caso.
  6. Suma todas las tareas.
  7. Agregue una contingencia (algún%) para "incógnitas desconocidas".

Terminarás con un número muy preciso. No digo que sea precisa, pero será precisa.

La precisión depende completamente de poder llegar a un número para cada tarea basado en la experiencia pasada, o de encontrar a alguien que lo haya hecho antes. Cuanta más experiencia tenga, mejores serán sus estimaciones.

Cuando ejecute el proyecto, haga un seguimiento de su tiempo en cada tarea y escriba las que perdió, para que pueda comparar. Esto te hará mejor con el tiempo.

Scott Whitlock
fuente
Gracias @Scott, recomendaré algo como tu idea ..
David Conde
1
Haga su estimación de esta manera, luego estimar independientemente una segunda forma (y / o una segunda persona hace las estimaciones). Compara los resultados. Cualquier cosa lejos o significativamente diferente al "presentimiento" necesita revisión. Mi experiencia (25 años o más) es que el "presentimiento" a menudo es más preciso que cualquier fórmula elegante, ignórelo bajo su propio riesgo.
mattnz
@mattnz: el presentimiento tiene la misma advertencia: solo funciona si tienes mucha experiencia. Cada cliente tiene un "presentimiento" de que va a costar mucho menos de lo que cuesta, porque no entienden la cantidad de trabajo involucrado en los casos de esquina.
Scott Whitlock
3
Otro consejo: "No negocio estimaciones. <Pausa larga>" es una frase muy útil en reuniones con jefes / clientes. Después de todo, ¿lo hace su mecánico de automóviles o cirujano? Puede negociar el precio, puede negociar qué trabajo se hace o cómo se hace, pero nunca he visto a un comerciante profesional en ningún otro campo que no sea el software negociar cuánto tiempo llevará un trabajo.
mattnz
@mattnz - Negocié con un mecánico de automóviles la semana pasada sobre cuánto tiempo tomaría reparar la puerta de mi automóvil dependiendo de cómo se hizo.
sixtyfootersdude
3

La estimación del software es extremadamente difícil. Un enfoque que he usado es desglosar los requisitos lo más finamente posible y estimar cada pieza por separado. Luego agregue un "factor fudge" que puede ser un multiplicador (duplicarlo) o una cantidad fija (x horas para trabajo no anticipado). Si no tiene buenos requisitos, la estimación es imposible para fines prácticos.

Mark B
fuente
1
Las estimaciones más exitosas que he visto (sin incluir las que utilizan métodos sofisticados) son las que duplicaron aproximadamente la estimación original.
Bernard Dy
1
Sí, doble. Uno de los gerentes con mayor éxito político para el que trabajé tomó estimaciones de los desarrolladores, las triplicó y luego negoció con los usuarios hasta el doble. La mayoría de las veces, las fechas de entrega negociadas se vieron afectadas.
DaveE
0

La industria ha aprendido mucho en los 30 años desde el '81. Estimar así nunca funcionó. Con la locura de Agile haber reescrito básicamente el paisaje, usamos "puntos de historia" que representan alguna "dificultad comparativa" nebulosa. Luego ganamos "velocidad" para que los fangosos puedan hacer sus estimaciones $$ con cierta cantidad de datos empíricos.

Edward extraño
fuente
0

Aprendí algunos enfoques "rigurosos", como las estimaciones de puntos de función y algunas variaciones que fueron diseñadas para aplicaciones modernas. Creo que la parte de estos enfoques que es valiosa es que obliga a un análisis más detallado de los requisitos conocidos que, de lo contrario, podría darle.

Obtener un buen conjunto de datos para trabajar es muy difícil, incluso si tiene un buen modelo. Medir la productividad es difícil. La gente juega casi cualquier métrica.

Dejé de usarlo porque mi organización es demasiado disfuncional para beneficiarse de las estimaciones de software, pero tengo cierta consideración por el grupo Cost Xpert y su herramienta; pero es muy costoso y probablemente no valga el costo y la curva de aprendizaje para la gran mayoría de las organizaciones.

Jeremy
fuente
0

Es muy difícil estimar los esfuerzos y los costos, pero si desea algo más preciso, entonces:

  • dividir el HoursOfWork en 3 componentes:

    1. mejor estimado,
    2. estimación más probable,
    3. peor estimación
  • eliminar EstimatedIddle.

Tome nota de que cualquier cosa que tarde más de 8 horas introducirá un gran error.

BЈовић
fuente
0

Lo que normalmente hacemos es dividir el alcance del trabajo completo en módulos / elementos principales que podrían considerarse como subproyecto. En otras palabras, son aquellas partes de trabajo que el cliente considera como partes separadas del proyecto y que el cliente desea estimar por separado.

Una vez hecho esto, dividimos cada módulo en tareas, subtareas e incluso subtareas más pequeñas para que cada uno pueda estimarse con bastante facilidad y la estimación tome de una a diez horas-hombre. De esa forma obtenemos un desglose detallado del alcance del trabajo para el proyecto.

El último paso es distribuir tareas entre hitos. Lo hacemos de la manera para que después de cada hito el cliente obtenga resultados visibles. Eso ayuda a pasar un hito y pasar a otro. Entonces finalmente obtenemos algo como:

Módulo 1

    <ol>
        <li>
            Primary task 1 - 5 hrs
            <ol>
                <li>Subtask 1.1 – 3 hrs</li>
                <li>Subtask 1.2 – 2 hrs</li>
            </ol>
        </li>
        <li>
            Primary task 2 - 9 hrs
            <ol>
                <li>Subtask 2.1 – 1 hrs</li>
                <li>Subtask 2.2 – 2 hrs</li>
                 <li>Subtask 2.2 – 5 hrs</li>
            </ol>

Inicialmente lo hicimos simplemente usando la hoja de Excel. Pero hace más de dos años comenzamos a usar herramientas de software para eso. Hay pocos productos similares que ayudan con él www.evenflow.com , www.swproposal.com y algunos otros. No recuerdo toda la lista. Investigamos hace mucho tiempo. Espero que pueda ayudar.

Buena pregunta es cómo estimar con precisión. No hay una estimación 100% correcta como creemos. La única forma es dividir el alcance completo del trabajo en tareas tan pequeñas como sea posible. En las tareas más pequeñas, tiene una revisión y análisis más detallados del proyecto que realiza. De modo que de todos modos aumenta la precisión.

Nick Rogozhnikov
fuente