Estol Conrado - Las Estimaciones Por Conrado Estol 61p PDF
Estol Conrado - Las Estimaciones Por Conrado Estol 61p PDF
ÍNDICE
ANEXOS
1. Antecedentes
La realización de estimaciones adecuadas sobre el tamaño y esfuerzo requerido es una
de las características fundamentales de un proyecto de desarrollo de software exitoso
(de hecho, de cualquier proyecto). Como contrapartida, las malas estimaciones o más
comúnmente las no estimaciones, son posiblemente una de las principales causas de
los fracasos. Por lo menos, del ya clásico” incumplimiento de plazos y presupuestos en
la entrega de aplicaciones de computador. En muchas organizaciones (o en la
mayoría...) la no existencia de un proceso estructurado para la preparación de
estimaciones de tamaño, de esfuerzo, de costo, de calidad, hace imposible, o por lo
menos muy difícil, llegar a definir equipos de trabajo de magnitud adecuada, y plazos de
cumplimiento razonables. Además, la no existencia de registros de proyectos realizados
en el pasado contribuye fuertemente a esa situación de descontrol en cuanto a la
determinación del esfuerzo y plazo requerido para cumplir con un determinado proyecto.
Como decía Santayana (1), “los que no conocen el pasado están condenados a
repetirlo...”.
Pero la situación es aun peor. Me explico: Lo que uno percibe en ese momento no es
sólo que no existe documentación de las mediciones que uno pide, sino que no existe un
proceso de medición. ¿Cómo se pudo haber pretendido estimar algo si al mismo tiempo
no se estaba midiendo? El proceso de medición está inextricablemente unido al proceso
de estimación. Sólo en la actividad de desarrollo de software es posible que haya gente
que se haga la fantasía de que puede estimar algo del futuro aunque nunca haya medido
nada en el pasado (2)
Como también dice DeMarco (3), la estimación de tiempos y personal requerido para el
desarrollo de sistemas es el elemento esencial de las dificultades que se presentan en
el control de los proyectos de software. Los "ingenieros" de software, y en general los
profesionales de sistemas, son notorios por sus malas dotes de estimación.
2. Definiciones
Para nuestro uso usaremos la palabra estimación en el sentido del "proceso de llegar a
una idea de una cantidad o magnitud sin realizar una enumeración o medición detallada"
(5).
A qué se deben los serios problemas que se presentan con las estimaciones en el
desarrollo de sistemas? Se pueden enumerar los siguientes (8, 9) :
También es común ver que se suponga una relación lineal entre el tamaño del proyecto
entre manos y la cantidad de recursos humanos requeridos. Se ignora, por ejemplo, los
importantes requerimientos adicionales de comunicación que se presentan en los
proyectos de mayor magnitud, y que hacen que disminuya la productividad de los
equipos de trabajo.
Los que estiman muchas veces basan sus cálculos de productividad en personal ideal y
no en la realidad del personal realmente disponible.
Debe tenerse en cuenta que contar con "personal apto" no es lo mismo que contar con
"el mejor personal disponible". Es sabido que la gente difiere enormemente en su
productividad.
Brooks decía hace más de veinte años (10) que era bien reconocida la existencia de
amplias variaciones entre los buenos y los malos programadores. Comentaba, no
obstante, que las experiencias que se habían realizado mostraban resultados aun más
extraordinarios de los que se había imaginado. En ese sentido, cita estudios en los que
la relación entre mayor y menor productividad era de 10 a 1 (También se pueden
encontrar citas similares en otros muchos autores). Estudios más recientes (11) indican
que las diferencias promedio en los EE.UU. son del orden de 1 a 4.
Normalmente, existe una fuerte presión sobre el plazo en que se deberá realizar el
proyecto. He formado parte de reuniones en las que un Gerente con mucha autoridad le
decía a su responsable de sistemas que el proyecto XX (y el proyecto quedaba
aparentemente YA totalmente definido por un nombre o descripción genérica) debería
estar listo indefectiblemente para dentro de 10 meses, por ejemplo. Y entonces el
responsable de sistemas rápidamente contestaba que eso era imposible y que no podría
tardarse menos de 18 meses. A lo que el Gerente, luego de un diálogo más o menos
prolongado, contestaba que estaba dispuesto a esperar 12 meses, pero no más. Y
entonces, a su vez, el Gerente de Sistemas bajaba su máximo a 16 meses... Fin de la
historia, una especie de transacción de mercado persa, en la que en sucesivas
“concesiones” se llegaba a un punto intermedio. Lo particularmente interesante de una
Sólo se debe “negociar” un plazo cuando hay elementos que permitan sustentar la
estimación que se está manejando. Y sólo se debe aceptar un compromiso cuando se
ha tenido el tiempo suficiente para llegar a esa estimación razonable en base al estudio
de las variables que son de importancia en esos casos.
Aun en los casos en que se vea como "aceptable" hacer una nueva estimación, mucha
gente puede NO hacer un real esfuerzo o intento para llegar a lo que sería realmente una
NUEVA estimación. Por ejemplo, la revisión de la estimación anterior puede basarse en
lo que se cree o percibe que otros (superiores, usuarios, clientes) QUIEREN oír / ver y
no en un verdaderamente nuevo ejercicio de estimación.
Esa actitud no sólo implica seguir adelante con información errónea (y no tener la
oportunidad de tomar las medidas necesarias para corregir la situación) sino que
además se pierde una oportunidad más para practicar el arte / técnica de la estimación.
Otra posibilidad, también comentada por DeMarco, es que la nueva estimación se hace
de manera tal que con voluntarismo se "estima" un desvío futuro NEGATIVO que
compensará el desvío que se haya podido producir en el lapso desde la estimación o
punto de control anterior.
Es decir, existe una cierta tendencia optimista a suponer que en la siguiente fase del
proyecto se recuperará cualquier retraso que se pueda haber producido en la fase
anterior. Puede decirse a priori que este enfoque NO es el que corresponde a una
verdadera estimación.
Una de las razones por las que la gente hace malas estimaciones es la falta de práctica
y la falta de método y conocimiento con respecto a cómo hacer estimaciones.
Para peor, lo que se denomina "estimación" normalmente no es lo que debería ser sino
que el verdadero proceso de realizar una estimación se reemplaza - por no
disponibilidad de tiempo o por prejuicios o sesgos personales - por distintos substitutos
inadecuados.
Aquí hay una solución que puede ser obvia: Es imprescindible llevar registros adecuados
de todas las estimaciones realizadas y, más tarde, de lo que realmente ha sucedido con
el esfuerzo requerido para la realización del proyecto, con los plazos, con la calidad.
En primer lugar debe tenerse presente que no puede existir un razonable proceso de
estimación si no se cuenta también con un proceso de mediciones. Parece una
perogrullada, pero no obstante me he encontrado muchas veces frente a profesionales
que me hablaban de las técnicas de estimación que se utilizaban en sus
organizaciones, en las cuales – sin embargo – no existían programas de métricas
funcionando. ¿Cómo es posible estimar si al mismo tiempo no se mide para saber cuán
cerca de la realidad están o han estado esas estimaciones?
El planteo, debe decirse, está muy razonablemente respaldado por Tom DeMarco. Pero
es evidente que por lo menos en la generalidad de nuestro medio no sería nada fácil
llegar a esa solución simplemente por el costo que representaría esa especialización,
sólo factible en grupos muy grandes de desarrollo, poco comunes. Si bien, para
DeMarco los estimadores deberían ser los responsables también de todas las
mediciones, lo cual haría ya más factible la implantación práctica de esa alternativa.
Los autores encontraron que la asignación de la estimación inicial a los encargados del
desarrollo estaba asociada con mejores estimaciones. Concretamente, esa
combinación aseguraba una menor cantidad de presupuestos excedidos. Los autores
atribuyen una potencial explicación de ese hecho al compromiso que se genera con la
terminación del proyecto en tiempo. Otra razón para que los estimadores no
involucrados en el desarrollo produzcan estimaciones no tan buenas es que puedan
estar deliberadamente suponiendo que estimaciones más optimistas tienen mayores
probabilidades de ser aprobadas (y ellos no son personalmente responsables por el
cumplimiento de esas estimaciones). De esta conclusión debería surgir la
recomendación de asignar la estimación inicial a quienes serán los responsables finales
del desarrollo.
Otra de las observaciones surgidas del estudio mencionado anteriormente fue que las
sucesivas revisiones de las estimaciones no parecieron tener mucha influencia en su
mejora. La conclusión es que se debe enfatizar la necesidad de que las primeras
estimaciones sean tan exactas como posible. Al mismo tiempo, esto implica que no se
debiera difundir la primera estimación hasta que no se ha ya obtenido suficiente
información válida como para hacerla. Puede ser interesante citar algunos de los datos
relacionados con las causas de estimaciones no exactas, donde el valor asignado a
cada punto surge de una escala que va de 1 a 5 (hemos tomado solamente las causas
con valores superiores a 3,0):
5. Conclusión
Para poder llegar a mejores resultados en la estimación se requiere contar con mejores
datos de entrada al proceso; se requiere contar con métricas (medidas o elementos de
medición). Es decir, indicadores cuantificables de alcance, calidad, complejidad y
rendimiento (Esto, a su vez, permitiría desarrollar un sistema de evaluación de la
productividad).
El objetivo del estimador debería ser utilizar pautas o modelos objetivos y cuantitativos
para estimar el tamaño de una aplicación, el esfuerzo requerido para su desarrollo, y el
plazo necesario para su finalización. Un requerimiento inicial es el de determinar qué
indicadores utilizar en cada etapa o fase del proyecto. El indicador es una variable
objetiva, cuantitativa que se puede usar para predecir el costo que representará elaborar,
por ejemplo, un programa. Por ejemplo, para estimar el tamaño de una aplicación se
podrían citar tres ejemplos de indicador; 1) cantidad de líneas de programa; 2) cantidad
de elementos en una Base de Datos; 3) funciones requeridas.
- Uso de por lo menos dos técnicas que puedan ser verificadas, o contrastadas,
una con otra;
Algunas técnicas o unidades utilizadas comúnmente para realizar estimaciones son las
siguientes:
Las técnica comentadas, o variantes de las mismas, son posiblemente las técnicas
“formales” más usadas en los EE.UU. y Gran Bretaña y las más comentadas en la
literatura, aunque eso no significa que constituyan "estándares" aceptados.
En cuanto a lo que posiblemente se usa más, en general, habría que hacer referencia a
la técnica de la “analogía” (este proyecto que tenemos que desarrollar, ¿a cuál se
parece de los que hayamos realizado antes, o en los que alguno de nosotros haya
intervenido antes?). Los resultados dependerán aquí fundamentalmente de la existencia
de documentación que permita realmente comparar funcionalidad y características del
entorno, y de los ajustes que se realicen para adecuar una o varias situaciones
anteriores a la presente.
Otra técnica muy simple que se ha visto aplicar en el pasado es la estimación del
tiempo-hombre requerido para programación, y en base a ese esfuerzo extrapolarlo a
todo un proyecto mediante los esquemas utilizados en las técnicas que denominamos
de “extrapolación”."
Como base para esa extrapolación se ha utilizado en distintos medios (por ejemplo
algunos consultores y empresas) la fase de entrevistas para el relevamiento inicial. Esa
información esta disponible al comienzo mismo del proyecto y puede resultar de
aplicación relativamente sencilla. Como todas las demás requiere de una "calibración" y
ajuste al ambiente de sistemas específico donde será utilizada.
Es aconsejable automatizar todo lo posible los pasos mencionados e inclusive, una vez
aprobado y probado el proceso, seleccionar alguna de las herramientas de software que
apoyan muchas de las técnicas mencionadas o sus variantes. Por ejemplo, la Ecuación
de Software puede utilizarse manualmente para ciertos casos, pero la herramienta
“SLIM” de Quantitative Software Management, simplifica enormemente el proceso de
cálculo y facilita mucha más información. Comentarios similares podrían hacerse de
software disponible para el método COCOMO, o de Checkpoint, de Software
Productivity Management, o muchas otras herramientas de software existentes en el
mercado.
- Para las fases que quedarán excluidas, identificar claramente las tareas y
productos que no deberán ser realizados o entregados;
- Para las fases que han quedado incorporadas en el plan de trabajo para el
proyecto, revisar las tareas que deberán ser realizadas y los productos que deberán ser
entregados y confirmar que efectivamente son necesarios/requeridos;
- Contrastar la estimación anterior con otra realizada por otra persona o por otro
grupo. Si las estimaciones no son razonablemente cercanas entre sí, se deberá analizar
con mayor detalle la fase o fases sobre las que se ha basado la estimación. En este
caso conviene - si no se lo ha hecho antes - recurrir a un proceso de estimación en
conjunto por un grupo formado por personal experimentado (Grupo de estimación).-
Referencias
1. Introducción.
¿Cuándo un mes hombre es un mes hombre? Es una pregunta que he formulado una
infinidad de veces, con esas palabras o con variantes parecidas (¿Cuántas horas
hombre efectivas hay en un mes hombre?, ¿cuántas horas nominales y cuántas de
trabajo efectivo hay en un mes hombre?, y otras similares).
La mayoría de las respuestas que he recibido – y que todavía recibo – a esa pregunta
me han demostrado que el concepto en general vigente (y debo aclarar que hay
honrosas excepciones, por supuesto) no tiene mucho que ver con la realidad que se vive
cuando se está desarrollando un proyecto de desarrollo de software.
Tomando poco más de 20 días hábiles por mes, digamos 21, y 8 horas por día hábil en
el mes, llegaríamos a un promedio de 168 horas en un mes tipo (poco más de 2000
horas de trabajo nominal en un año). Es decir que un mes hombre tendría 168 horas
hombre en promedio aproximado. Es decir entonces que si consideramos un proyecto
para el que se ha estimado un esfuerzo equivalente a 10 meses hombre de trabajo,
podríamos decir razonablemente que para ese proyecto se requiere aplicar 1680 horas
hombre de esfuerzo.
Ahora bien, ¿es eso equivalente a decir que el trabajo lo puede realizar una persona en
10 meses? La respuesta aquí debería ser un decidido NO. Peor sería aun el caso si
decimos que ese proyecto lo podrían llevar a cabo dos personas en 5 meses de trabajo
(el producto seguiría siendo, aparentemente 10 meses hombre).
Hay diferentes cuestiones que entran en juego y es oportuno tratarlas a continuación por
separado.
Efectivamente, podríamos decir que hay 168 horas “nominales” de trabajo en un mes
tipo, pero ¿cuántas horas hay de trabajo efectivo? La respuesta depende de diversos
factores, pero en general, considerando un régimen normal de trabajo, podremos decir
que habrá que descontar de las horas nominales la parte proporcional de todo el tiempo
dedicado o empleado en actividades que NO tienen que ver con el proyecto en cuestión.
Por ejemplo, podríamos construir una pequeña tabla para dar una idea de los elementos
que afectan el tiempo útil que es posible dedicar al proyecto en cuestión (los valores
citados como ejemplo deberían ser adaptados a cada caso particular):
Si bien existen circunstancias especiales, o proyectos pequeños, en los que por tiempos
cortos pueden obtenerse coeficientes de aplicación de tiempo efectivo superiores – o
muy superiores - al 70 %, como regla general para una organización trabajando en
régimen año tras año, ése parece ser un valor razonable. Quienes vean la tabla incluida
en el Anexo E - Técnica Basada en la Duración de Entrevistas – notarán que la presente
estimación se ha hecho bastante más conservadora a través del agregado de un
“varios” de 10% adicional. En el momento de incluir la tabla del anexo E se trató de hacer
que las horas efectivas finales no fuesen muy distintas de las consideradas por Boehm
en COCOMO (152 horas en un mes). En última instancia, éste será un valor que deberá
ser obtenido para cada ambiente de desarrollo a partir de las “hojas de resúmenes de
tiempo” que el personal técnico debería presentar regularmente como elemento
fundamental para la derivación de métricas de interés.
Aquí aparece entonces uno de los puntos que permitirían explicar por qué es tan difícil
cumplir los plazos estimados. Si el estimador, o estimadores, consideran por ejemplo un
proyecto que requiere un total de 1700 horas de trabajo, pero luego dan por supuesto
que un mes hombre en la organización esta compuesto por 170 horas de trabajo, el
plazo calculado será de diez meses (El esfuerzo recurrido de 1700 horas hombre se
estimará por ejemplo que podrá ser realizado por un hombre trabajando diez meses...).
En cambio, la realidad será, posiblemente, que a un ritmo real de unas 120 horas de
trabajo por mes hombre ese proyecto requerirá más bien algo más de 14 meses para
terminarse (1700 horas hombre / 120 horas hombre / mes = 14,2 meses).
Esto trae a la mente la conocida historia de Frederick Brooks (1) sobre los datos de
Charles Portman, en ese entonces gerente de la División de Software de ICL, la
empresa británica de computadores. Portman encontraba que sus equipos de
programadores tomaban para sus respectivos trabajos aproximadamente siempre el
doble del tiempo estimado (planeado cuidadosamente con cientos de tareas en
diagramas PERT).
Para poder investigar ese problema, Portman comenzó a llevar detallados registros
diarios del uso del tiempo de todo el personal. Esos registros mostraron que los errores
en las estimaciones podían ser totalmente explicados por el hecho de que sus equipos
de trabajo sólo podían cumplir con un 50 % del tiempo nominal de la semana de trabajo
en los temas asignados de programación y depuración de programas. El resto del
tiempo se invertía - o perdía - en esperas por caídas de equipo, otros trabajos cortos que
debían hacerse y que no tenían ninguna relación con el proyecto principal, reuniones,
trabajo administrativo, ausencias por enfermedad, ausencias por problemas personales,
La comunicación entre los miembros del equipo tiene una importante influencia sobre la
productividad. Por otra parte, la comunicación humana tiene también un fuerte impacto
sobre el producto final del desarrollo de software.
Cada persona que trabaja en un proyecto debe ser capacitada en la metodología, los
objetivos del trabajo que se está realizando, la estrategia general, y el plan de trabajo. En
general, puede haber capacitación general, grupal, pero también tendrá que haberla
individual. El esfuerzo que ese tipo de capacitación individual agrega, varía linealmente
con la cantidad de personas en el grupo.
La comunicación entre los miembros del equipo origina un problema más serio (2).
Debido a que las posibles vías de comunicación entre los miembros del equipo de
trabajo se incrementa por un factor de n (n - 1) / 2, donde n es la cantidad de integrantes
del grupo. Esto implica que aumentar el tamaño de un equipo de desarrollo de software
puede incrementar la cantidad de software producido por unidad de tiempo, pero sólo
hasta cierto punto. En un momento determinado, la necesidad (y a veces los problemas)
de comunicación entre los miembros del equipo comienzan a tener mayor influencia
sobre el proyecto y reducen la cantidad de software que está siendo producida por
unidad de tiempo. Cabe aclarar que en medidas razonables esa comunicación es lícita,
o necesaria, ya que al dividir el trabajo entre más personas - al dividir la aplicación en
más módulos - será necesario que exista comunicación entre esas personas. Otro
factor que entra a jugar, es que aumenta el tamaño del producto final, ya que existirán
también más interfaces entre los distintos módulos.
Asimismo, en los casos en que se incorpora más gente a un equipo de trabajo, esos
nuevos miembros del grupo deben ser capacitados en la aplicación entre manos, y son
justamente los integrantes del equipo de trabajo original quienes, por conocer bien el
proyecto, deben cumplir con esa tarea. De manera que mientras que los nuevos
miembros del equipo aun no tienen un rendimiento adecuado, los antiguos miembros del
grupo rinden menos porque parte de su tiempo está dedicada a capacitar a los nuevos
integrantes del equipo.
Un corolario de esto es la Ley de Brooks: “Agregar mano de obra a un proyecto
atrasado lo demora aún más” (1) -.
A continuación introducimos una tabla donde se puede ver claramente para algunos
valores el incremento muy rápido que se produce en la cantidad de posibles vías de
comunicación a medida que aumenta el n, el número de integrantes de un equipo.
Referencias
- Barry W. Boehm, Software Engineering Economics, Prentice-Hall, Inc., 1981 (p. 190
“des” economías de escala en proyectos grandes, “gold plating”).
- Frederick P. Brooks, Jr., The Mythical Man-Month, Addison-Wesley, 1982 (página 16 y
siguientes, The Man-Month).
- Tom DeMarco, Controlling Software Projects, Prentice-Hall, Inc., 1982 (páginas 171,
183).
- James R. Johnson, Managing for Productivity in Data Processing, QED Information
Sciences, Inc., 1980, pp. 90, 164.
- Dick B. Simmons y otros, Software Measurement, Prentice Hall, PTR, 1998 (p. 185).
1. Caveat Emptor!
"Que se cuide el comprador!", es decir, que compre a su propio riesgo, donde "comprar"
puede referirse a una idea, una técnica. Esta admonición debe tenerse n cuenta en todo
lo relacionado con las técnicas de estimación. Queremos decir con esto que es preciso
considerar cuidadosamente todos los supuestos y aproximaciones contenidos en las
técnicas expuestas antes de utilizarlas.
Distintos autores citan experiencias que relacionan Puntos de Función con 1Horas-
Hombre de trabajo. El problema es que existen amplias diferencias entre valores
mínimos y máximos. Las horas-hombre por PF varían además con el tamaño de los
proyectos; se requiere un mayor esfuerzo para proyectos más grandes (Recordar que la
estimación se refiere a TODAS las etapas en el ciclo de desarrollo; es lógico entonces
esperar que proyectos más grandes, que requieren mayor cantidad de personal y por lo
tanto más intercomunicación, necesiten un mayor esfuerzo).
Fenton (Fenton, Norman: Software Metrics: A Rigorous Approach, Chapman & Hall,
London, First Edition, 1991) cita dos días hombre promedio para obtener un Punto de
Función (sin aclarar el rendimiento diario o la cantidad de horas de trabajo efectivo). A su
vez, Johnson (Johnson, James R., The Software Factory, QED Information Sciences,
Inc., 1991) cita una referencia que da un rango de 0,31 a 0,57 Puntos de Función por día-
hombre (el tiempo es el directo informado por el personal del proyecto y aplicado a todas
las fases del mismo). Agrega, no obstante que sus propios números son más altos, y
procede a mencionar 0,9 PF por día-hombre como un objetivo específico que se puede
Por su parte Capers Jones (Applied Software Measurement, McGraw Hill, Inc, New York,
1997) menciona para EE.UU. rangos que pueden ir desde un mínimo de 0,35 PF por
mes-hombre hasta un máximo de 200 (para prototipos y aplicaciones pequeñas de
usuarios finales) y da como promedio (para el año 1995) 8,45 PF por mes-hombreOp.
Cit, p. 142). Advierte al lector, no obstante, sobre los peligros del uso de “promedios”,
que – dice ese autor – no deberían utilizarse para la realización de estimaciones de
costo o para contratos.
Se debe poner énfasis sobre el problema que se presenta con la necesidad de definir
qué es realmente una “instrucción”. ¿Se trata de una instrucción física o una lógica?
Además, en una misma línea puede haber varias instrucciones, o sólo parte de una
instrucción. No existe un estándar internacional (o nacional) que defina qué debe
considerarse UNA línea de código. Por lo tanto es esencial contar con una definición
muy clara para contar en forma consistente las líneas - o instrucciones - de una
aplicación. Existen organizaciones que así lo hacen (lo DEBEN hacer). Inclusive, ciertas
empresas - por ejemplo así lo hacía Motorola en los EE.UU. - no sólo aplicaban
estándares para contar las instrucciones de sus aplicaciones, sino que normalizaban
todas esas medidas usando como base el Assembler. De esa manera podían comparar
distintos sistemas - programados en distintos lenguajes - entre sí (consultar también
Capers Jones, Applied Software Measurement, McGraw Hill, Inc, 1997., p. 77).
Hay muchas empresas que usan esa medida de tamaño, y existen grandes bases de
datos de proyectos medidos en KLOC, como para realizar comparaciones
(“Benchmarking”). Una explicación de ese uso bastante común es que es muy fácil
contar “líneas de código” en forma automática, cuando un programa pasa de la
Biblioteca de Desarrollo a la de Producción (pueden desarrollarse distintos programas
para contar instrucciones en distintos lenguajes).
Como referencia sobre modelos de normas para contar instrucciones fuente, consultar
el Apéndice A, página 403, de Capers Jones, Op. Cit.).
Debe visualizarse claramente que el uso de LOC presenta en muchos casos serios
problemas. Por ejemplo, cuando se pretende usarlo como medida en cálculos
económicos (por ejemplo, $ por KLOC). En primer lugar, en muchos grandes proyectos
de software la cantidad de esfuerzo que se aplica a la programación puede ser sólo un
20% del total del proyecto o aun menos. Pero además, cuando se usan LOC para
calcular productividad, resulta que se penaliza a los lenguajes de alto nivel, que
justamente son los más productivos. Esto se puede ver también con referencia a las
métricas en general, con la denominada “paradoja del costo por defecto” (una aplicación
con muchos defectos tendrá normalmente un costo por defecto MENOR que una de alta
calidad, con pocos defectos. Eso debido, como en el caso del uso de costo por KLOC, a
la influencia de los costos fijos).
Para aquellos interesados especialmente en este tema les recomiendo como referencia
a Capers Jones, obra citada, páginas 10, 53-60). Por ejemplo, para dos programas con
idéntica funcionalidad:
Versión
Assembler Versión Ada
Esfuerzo de programación, en meses hombre 3 1
Esfuerzo en OTRAS actividades de proyecto, m-h 3 3
Esfuerzo total del Proyecto, en meses hombre 6 4
Instrucciones fuente por mes hombre 1250 625
4. Puntos de Función:
Con la suma de los valores obtenidos de las respuestas a 1 y 2, se entra en una tabla
que da el factor de ajuste por complejidad (multiplicador que varía entre 0,5 y 1,5):
Complejidad Multiplicador
1 0,5
2 0,6
3 0,7
4 0,8
5 0,9
6 1,0
7 1,1
8 1,2
9 1,3
10 1,4
11 1,5
5. “Backfiring”.
Existen tablas publicadas (por ejemplo en Jones, op. cit., páginas 80 a 92) que dan la
equivalencia promedio entre un Punto de Función y centenares de lenguajes de
programación (464 lenguajes y sus variantes en el caso de Capers Jones). Por ejemplo
(sólo para algunos casos; ver también tabla al final del Anexo A):
Para dar una idea más específica de lo que significan los Puntos de Función en cuanto a
tamaño de aplicaciones, puede comentarse que un banco pequeño en los EE.UU. tiene
una cartera de aplicaciones que se puede estimar en unos 125.000 Puntos de Función
(Capers Jones, op. cit., página 51).
Referencias:
- Fenton, Norman: Software Metrics: A Rigorous Approach, Chapman & Hall, London,
First Edition, 1991
- Johnson, James R., The Software Factory, QED Information Sciences, Inc., Wellesley
(MA,US), 1991
- Jones, Capers: Applied Software Measurement, McGraw Hill, Inc, New York, 1997.
1. Introducción:
Esta ecuación ha sido utilizada - según Putnam & Myers (2) - por cientos de
organizaciones para proyectar plazos y esfuerzos de desarrollo. Según esos mismos
autores, la variación en los plazos reales con respecto a los estimados con la ecuación
ha estado típicamente en un rango de más / menos un 10%. Con respecto al esfuerzo,
la variación ha sido mayor pero en general menor a un 20%.
La ecuación indica que el esfuerzo (que figura en la fórmula como una raíz cúbica) tiene
un impacto menor que el tiempo de desarrollo (que figura elevado a 4/3). En la práctica,
el efecto de que en la ecuación el esfuerzo figure como una raíz cúbica es que se puede
aumentar el esfuerzo realizado agregando más y más gente a un proyecto, pero el
impacto de ese aumento se diluye al extraer la raíz cúbica de ese mayor esfuerzo. Es
decir, la cantidad de producto desarrollado sólo aumentará en forma proporcional a la
raíz cúbica del esfuerzo:
1/3
Q f(E )
Q2 / Q1 = 5 / 4 = 1,25
Es decir, para los valores específicos del ejemplo considerado, para una variación con
un factor prácticamente igual a 2 en el esfuerzo (125 en Q2 sobre 64 en Q1) se ha
obtenido una variación de 25 % (Q2 / Q1, o 5 / 4) en la cantidad de producto
desarrollado. En resumen, uno puede agregar mucha gente a un proyecto - y aumentar
Por otra parte, si se mantiene constante la cantidad de producto (Q), esa duplicación
del esfuerzo - siempre para los valores específicos de este ejemplo - representará
solamente una pequeña disminución en el tiempo de desarrollo (una disminución de un
20% en ese valor). Evidentemente, el esfuerzo de desarrollo no es independiente del
tiempo, o plazo, del proyecto, por lo que ambos deben ser considerados -. planeados -
en conjunto.
Aun en proyectos con plazos muy acotados, pero factibles, la gente trabaja con
ansiedad, tiene mayor cantidad de conflictos personales, se cansa más fácilmente y -
muy importante - comete más errores.
La unidad de tamaño utilizada por Putnam y Myers es SLOC (Source Lines of Code).
Los autores sin embargo mencionan otras unidades, y en particular puntos de función.
Una alternativa, si se utilizan puntos de función como métrica de tamaño, es reemplazar
esos puntos de función por el equivalente aproximado de cantidad de instrucciones
según el lenguaje, o lenguajes, usados en la aplicación.
Es decir,
Por supuesto, esto parte de la base de que en la organización existen datos registrados
para los proyectos realizados en el pasado.
Otro supuesto fundamental es que el pasado sirve para predecir el futuro. Es decir, que
el proceso de desarrollo es razonablemente “repetible” (para usar un término que nos
puede hacer pensar en el CMM). (5)
El “Factor de Complejidad”, que Putnam y Myers designan con la letra B, tiene los
siguientes valores empíricos para distintos tamaños de software (1):
5-15 L 0,16
20K 0,18
30K 0.28
40K 0,34
50K 0,37
>70 K 0,39
Veamos ahora el cálculo de ese valor de la “productividad del proceso” que se obtiene
en forma empírica, usando datos de proyectos anteriores.
Con los valores calculados para un rango de proyectos (y la empresa de Putnam tienen
una base de datos con más de 4.000 proyectos) se obtienen valores de la productividad
del proceso, y de allí, agrupando rangos de esos valores, Putnam y Myers han derivado
los que denominan “Índice de Productividad”, IP.
Por ejemplo, 3
MB = Esfuerzo Total / (Plazo de Desarrollo)
t = tiempo de desarrollo
Las relaciones existentes entre tamaño, plazo, esfuerzo, y defectos no son lineales
(Esa es una más de las razones de la debilidad de la utilización de LOC por mes-
hombre como una medida de la tasa de producción de software).
Por ejemplo, para una aplicación de tamaño mediano (unos 500 puntos de función),
desarrollada por una organización con un Índice de Productividad promedio (IP de 16 y
tasa de crecimiento de aplicación de recursos humanos - MB - de 5), Putnam (6, p. 102)
da los siguientes valores:
En la tabla anterior, el valor final de 10 meses para el plazo corresponde a algo más de
130% (131%) del valor inicial de 7,62 meses. Es importante notar que el esfuerzo
correspondiente al mayor plazo es sólo un 34 % del requerido para el plazo mínimo... Y
algo muy importante, la calidad (representada por los valores de la última columna)
mejora en casi cuatro veces!
Aquí tropezamos con un primer problema que no es nada trivial: Aunque pueda llamar la
atención, lamentablemente no son muchas las organizaciones en las que se pueden
encontrar esos datos (que muchos de nosotros consideramos elementales para poder
haber tenido un mínimo control sobre los proyectos desarrollados). Y cuando existen, el
grado de precisión, o la confiabilidad misma de esa información, puede dejar mucho que
desear.
Si encontramos datos de tamaño, éstos estarán dados muchas veces sólo en términos
de cantidad de programas, o de módulos. Si tenemos suerte, podrá existir algún rango
razonablemente acotado de la cantidad de instrucciones que tienen en promedio los
programas o los módulos. Si seguimos teniendo suerte puede ser que encontremos
datos sobre cantidad de instrucciones (LOC -Lines of Code -, o SLOC - Source Lines of
Code -). Tendremos que realizar algunas indagaciones sobre qué se define como
“LOC” en esa organización, y con qué grado de precisión se ha medido la cantidad de
instrucciones. Cuando encontremos esa situación veremos normalmente que ha
existido un redondeo al millar más cercano, o a la decena de miles más cercana... Y,
desde ya, no pongamos muchas esperanzas en encontrar alguna organización que
tenga información de tamaños de proyectos medida en puntos de función (Hay algunas).
En cuanto al esfuerzo requerido para el desarrollo, el problema puede ser aun mayor. No
son muchos los que hacen que su personal técnico mantenga registros sistemáticos de
la aplicación de su tiempo a proyectos, en base a algún - podríamos decir - “plan de
cuentas” pre establecido. Se nos presentarán seguramente dudas sobre el grado de
control y verificación aplicado para asegurar la confiabilidad de esos registros. Además,
qué seguridad existe sobre cuán completos son esos registros: ¿incluyen todas las
horas de supervisión y administración del proyecto? ¿hasta qué momento se siguieron
registrando esas horas? Es decir, ¿en qué momento, fecha, se consideró que el
proyecto estaba finalizado? ¿Qué unidades se utilizaron para los registros y para los
informes de tiempo acumulado? ¿Horas-hombre, meses-hombre,...? ¿Cómo se ha
redondeado? La esperanza es que existan algunos datos y que se haya utilizado un
sistema razonablemente consistente, de manera que se puedan usar esa información
para distintos proyectos.
Por último, el plazo puede ser el más sencillo de determinar. Normalmente se contará
con una fecha de inicio del proyecto y una fecha en que pasó a “Producción.” No
Inicialmente, Putnam y Myers (1) realizaron cálculos basados en la gran base de datos
de proyectos que poseían, y definieron valores del parámetro de productividad que iban
desde un valor menor a 1.000 hasta un valor superior a 46.000. Para mayor facilidad,
asociaron a rangos de esos valores lo que denominaron “Índices de Productividad.” En
particular 18 índices para cubrir el rango desde poco menos de 1.000 hasta poco más
de 46.000. Cuando se grafica este Índice contra el Parámetro de productividad, éste
último en una escala logarítmica, se obtendrá una línea recta.
Posteriormente, Putnam y Myers extendieron dos veces ese rango del parámetro de
productividad (debido a mejoras identificadas en los proyectos de sus clientes incluidos
en la Base de Datos). Finalmente, los números que utilizan actualmente (6, pág. 45) van
desde 754 (asociado a un Índice de Productividad de 1, hasta un valor de 9.227.465,
asociado a un Índice de Productividad de 40. En realidad, como aclaran ellos mismos (6,
pág. 46), el Índice lo calculan con un decimal, de manera que el rango total de
incrementos en su Índice, desde 0 hasta 40, abarca 410 escalones.
El valor más alto de Índice de Productividad que Putnam y Myers han encontrado es 34.
Es interesante notar que el factor multiplicador entre un Índice de Productividad (IP) de 1
y IP de 34 es nada menos que 2.889 (6). Es fácil comprender entonces el importante
peso que tiene una variación de sólo un punto en el IP.-
Referencias:
(1) Putnam, Lawrence H. & Ware Myers, Measures for Excellence - Reliable Software on
Time, Within Budget, Prentice-Hall, Inc., Englewood Cliffs, NJ 07632, EE.UU.,1992.
(2) Putnam, Lawrence H. & Ware Myers, Controlling Software Development - Executive
Briefing, IEEE Computer Society Press, Los Alamitos, CA, EE.UU., 1996.
(3) Brooks, F.P., The Mythical Man-Month, Addison Wesley, Reading, Massachusetts,
1975. Reprinted 1982.
(5) Humphrey, Watts S., Managing the Software Process, Addison-Wesley Publishing
Company, Inc., EE.UU., 1989.
(7) Putnam, L.H., A General Empirical Solution to the Macro Software Sizing and
Estimating Problem, IEEE Transactions of Software Engineering, Vol. SE-4, No. 4, July
1978.
Parámetro de Índice de
Productividad Productividad Tipo de Aplicación a que se aplica
754 1
987 2 Microcódigo
1220 3
1597 4 “Firmware” (ROM)
1974 5 Tiempo real “embebido” / Avionics
2584 6
3194 7 Sistemas de Radar
4181 8 Comando y Control
5186 9 Control de Procesos
6765 10
8362 11 Telecomunicaciones
10946 12
13530 13 Software de Sistemas / Sistemas científicos
17711 14
21892 15
28657 16 Sistemas empresariales
35422 17
46368 18
57314 19
75025 20
92736 21
121393 22
150050 23
196418 24
242786 25 Valor más alto encontrado hasta ÷ 1990
317811 26
392836 27
514229 28
635622 29
832040 30
1028458 31
1346269 32
1664080 33
2178309 34
2692538 35
3524578 36
En sus términos más elementales, la gerencia necesitará cuatro tipos de datos básicos
- cuatro métricas - para poder planear y controlar el trabajo asignado:
3. La definición del plazo necesario para cumplir con el proyecto, o la definición del
cronograma del proyecto. Es decir, la cantidad de meses calendario (o semanas,
o días, u horas) necesarios para el desarrollo del proyecto para una cierta
disponibilidad - o posibilidad - de asignación de gente al trabajo.
Al comienzo de este punto se decía que esos cuatro datos eran "elementales." De ellos
podemos derivar, por ejemplo, el esfuerzo requerido para el desarrollo. De la relación
entre el tamaño y la productividad promedio se podrá calcular el esfuerzo requerido:
Esfuerzo = Tamaño (´X´ LOC) / Productividad (´Y´ LOC / m-h) = ´X´ / ´Y´ m-h
O, Esfuerzo = Tamaño (´X´ PF) / Productividad (PF / m-h) = ´X´ / ´Y´ m-h
Y del esfuerzo, contando con el costo promedio por mes hombre y agregándole las
cargas sociales, podremos llegar al costo total del proyecto (suponiendo - como es
normalmente válido suponer - que el costo del personal es el principal costo del
desarrollo).
Al llegar a este punto se habrá presentado una pregunta fundamental. Una pregunta que
no siempre aparece cuando se está estimando el tamaño, esfuerzo, o plazo para un
proyecto de desarrollo de software. Esa pregunta es ¿cuál es la calidad estimada para el
producto final? La respuesta a esta pregunta es de esencial importancia, aunque no
siempre figure entre la información de los proyectos nuevos. La métrica "calidad" del
producto a desarrollar, como valor estimado al comienzo del proyecto y como valor
calculado durante el desarrollo y a su finalización, debería ser una preocupación
importante del equipo de trabajo y de su líder. Esta métrica estará representada
normalmente por la cantidad de defectos por unidad de tamaño (defectos por KLOC, o
defectos por Punto de Función). Debemos entonces tener presente que, como se dice
antes, son cuatro los datos básicos (estimaciones) que se necesitarán para planificar y
controlar el trabajo de desarrollo de software:
1. Tamaño y esfuerzo
2. Productividad
3. Plazo
4. Calidad.
El siguiente material ha sido extractado (salvo la nota sobre COCOMO II) de anexos de
un documento preparado por Conrado Estol y publicado en el año 1993 por la
Universidad de Belgrano (Estimación de Tiempos y Esfuerzo para Proyectos de
Software, Documento de Trabajo, Serie Tecnología No. 2 – Agosto 1993).
-Entradas, que proporcionan la comunicación del usuario con la aplicación; por ejemplo,
nombres de archivos y selecciones de menús.
-Consultas externas, que son entradas interactivas que requieren una respuesta.
-Archivos internos, que son archivos maestros lógicos dentro del sistema.
Para el uso de esta técnica es necesario tener en cuenta los siguientes elementos:
Los factores de ponderación para distintas funciones según se las califique como
simples, promedio y complejas se incluyen en una tabla (ver a continuación). El valor
dado en la tabla para una determinada función, con un determinado nivel de complejidad,
se multiplica por el número de ocurrencias. De esa manera si la ponderación para
entradas (inputs) complejas, por ejemplo, es "6", y se han contado 5 de esas entradas,
el puntaje ponderado en ese caso sería "30".
A. Entrada 3 4 6
B. Salida 4 5 7
C. Consulta 3 4 6
D. Archivo Externo 5 7 10
E. Archivo Interno 7 10 15
La suma de los puntajes parciales da un puntaje total inicial (PTI), que es ajustado por el
efecto que 14 factores de complejidad tienen sobre el sistema. Cada uno de esos
factores es evaluado de acuerdo con la asignación de un cierto nivel de influencia que se
califica como 0, 1, 2, 3, 4, o 5. El 0 indica que ese factor no está presente y el 5 indica
que es esencial. Los factores que contribuyen a la complejidad son los siguientes:
-Comunicación de datos
-Procesamiento distribuido
-Procesamiento complejo
-Facilidad de operación
-Cantidad de ubicaciones
Después de haber calificado a cada uno de esos factores se suman todos los puntajes.
Finalmente, ese puntaje total se procesa para que proporcione un coeficiente de ajuste
(CA), o ponderación, de más / menos 35 por ciento (de 0,65 a 1,35).
3. Obtener el puntaje funcional inicial (PFI) como la suma de todos los productos del
punto anterior;
4. Tomar la suma total de los factores de complejidad, fc(i), y multiplicarla por "0,01":
(El factor de complejidad técnica toma un valor que va desde 0,65 si cada fc(i) = 0 a
1,35 si cada fc(i) = 5).
Hay otras críticas a este método. Sin embargo, si se registran y archivan para referencia
futura los datos relacionados con los distintos esfuerzos de desarrollo que se van
realizando, ese método - como así también los basados en LOC - son importantes para
la estimación del esfuerzo requerido en proyectos de desarrollo.
NOTA:
Es interesante notar que esa medida no sólo podría reflejar el valor del producto
resultante sino que también podría en teoría ser utilizada para evaluar la productividad
del personal de desarrollo de sistemas. Por ejemplo, para medir la productividad de la
persona encargada de la Fase X de una aplicación sólo (sólo?) bastaría con calcular la
cantidad de puntos de función para las partes del sistema incluidas en la Fase X.
Un estudio empírico de C. A. Behrens publicado en 1987 y citado por Fenton (14) indica
la cantidad promedio de instrucciones fuente por PF para distintos lenguajes de
programación.
1. Introducción.
Un indicador de costo es una variable objetiva, cuantificable que puede utilizarse para
predecir el costo final (o esfuerzo total requerido) de un programa o de un desarrollo. De
todos los indicadores el más utilizado es el de "líneas de código" (LOC: Lines of Code).
- Es imprescindible definir un criterio homogéneo sobre qué debe contarse como una
línea (JCL, comentarios, múltiples comandos lógicos en una línea física, definiciones de
datos, encabezamientos);
- El costo total puede en cierto casos no ser función directa de la cantidad de líneas (en
lenguajes de alto nivel, para una menor cantidad de líneas puede ser mayor la tasa de
error, con lo que aumenta el costo).
2. COCOMO 81.
Los modelos Cocomo básicos para la predicción del esfuerzo requerido para el
desarrollo de sistemas tienen la siguiente forma general:
b
Esfuerzo = a (tamaño)
"Una línea de código es cualquier línea de un programa que no sea un comentario o una
línea en blanco, sin importar la cantidad de instrucciones o porciones de instrucción en
la línea. Se incluyen específicamente todas las líneas que contienen encabezamientos
de programa, declaraciones y sentencias ejecutables y no ejecutables."
Por ejemplo, si podemos estimar (y aquí tenemos otra estimación!) que para una
determinada aplicación sería razonable esperar (en base a aplicaciones similares de
que tenemos conocimiento) que el total de instrucciones fuentes finales podría ser de
aproximadamente unas 15.000, y el proyecto es de complejidad intermedia, entonces
a = 3,0
b = 1,12 , y
1,12 1,12
KLOC = 15 = 20,8
Debe mencionarse que si bien estudios empíricos han demostrado que existe una
relación proporcional entre esfuerzo y tamaño, existe poca evidencia de que el término
exponencial no pueda llegar a ser igual a 1. Es decir, como una aproximación razonable
podría aceptarse una relación lineal en ciertos ambientes.
De todas maneras, la experiencia nos dice que el elemento predictivo que se utiliza en
estas técnicas (ya sea DSI o LOC) es tan difícil de estimar como el costo mismo de los
programas. En definitiva se corre el riesgo de estar prácticamente "adivinando" la
cantidad de líneas de programa para poder llegar a lo que se denomina un cálculo (que
en realidad no es tal!) del costo de los programas y del proyecto.
Fenton (2) cita un estudio no publicado de Yourdon Inc. sobre la exactitud de las
estimaciones de tamaño producidas por gerentes experimentados. En un experimento
se les pidió a esos gerentes que estimaran el tamaño en LOC de 16 proyectos ya
terminados, basándose solamente en las especificaciones de esos proyectos. Los
promedios de esas estimaciones fueron comparados luego con los tamaños reales (era
proyectos ya finalizados). La desviación promedio entre tamaño real y estimado resultó
ser 64 % del valor real; sólo un 25 % de las estimaciones estuvieron dentro de un rango
de
desvío de 25 % del tamaño real.
Es interesante mencionar, asimismo, que existe consenso entre los especialistas que
han investigado estos temas en que la duración óptima para un proyecto es
aproximadamente proporcional al esfuerzo elevado a una potencia de 1/3 .
Por último debe agregarse que COCOMO consiste en realidad de tres modelos, que
corresponden a la información disponible en distintas etapas del ciclo de vida del
desarrollo de sistemas. El modelo básico se aplica para obtener estimaciones globales
iniciales; el modelo intermedio, cuando se han identificado los componentes principales
del sistema; el modelo detallado, cuando se cuenta con información sobre componentes
individuales (módulos). El modelo básico es el ya comentado; en el caso de las
estimaciones de los modelos intermedio y detallado, Boehm propone el uso de 15
variables de ajuste para la corrección del modelo básico.
COCOMO II es el último modelo de Boehm desarrollado para tener en cuenta nuevos procesos y
procedimientos. La fórmula general es la siguiente:
Son cinco y reflejan todos los elementos que afectan el tiempo de desarrollo de una aplicación de
tamaño estándar. El modelo incluye una larga lista de reglas para llegar a cada valor.
Similitud con otros proyectos
Flexibilidad en requerimientos
Riesgo
Integración del Equipo
Madurez del Proceso
“Effort Multipliers”
Confiabilidad requerida
Tamaño de la Base de Datos
Complejidad de la programación
Reusabilidad
Documentación
Tiempo de ejecución
Almacenamiento
Volatilidad de la plataforma
Capacidad de los analistas
Capacidad de los programadores
Rotación del personal
Experiencia en el tipo de aplicación
Experiencia con la plataforma
Experiencia en el lenguaje y herramientas
Uso de herramientas de software
Distribución geográfica del equipo
Cronograma requerido.
Factores en COCOMO II – Resumen de las siglas utilizadas en inglés:
PREC - Precedentedness
FLEX - Development Flexibility
RESL - Architecture/Risk Resolution
TEAM - Team Cohesion
PMAT - Process Maturity
RELY - Required Software Reliability
DATA - Database Size
CPLX - Product Complexity
RUSE - Required Reusability
DOCU - Documentation
TIME - Execution Time Constraint
STOR - Main Storage Constraint
PVOL - Platform Volatility
Tiempo de desarrollo:
TDEV = C x PM (D+0,2x(E-B))
C y D son factores de “afinación” y sus valores “nominales” son 3,67 y 0,28, respectivamente.
Ejemplo para un proyecto “nominal” con un tamaño de 100.000 LOC (con valores “nominales” de los
factores de ajuste):
SF = 0,91 + (0,01 x 18,97) = 1,0997
0,91 0,91
M = KDSI = 15 = 11,8
Walston y Felix determinaron en su estudio una muy buena correlación con los
resultados reales de proyectos desarrollados en la Federal Systems Division de IBM.
Debe destacarse que esos investigadores realizaron su estudio en un único ambiente
homogéneo de desarrollo, y aplicando estrictos estándares para el tratamiento de los
datos.
Referencias:
(1) Boehm, Barry W., Software Engineering Economics, Prentice-Hall, New Jersey,
1981.
(2) Fenton, Norman E., Software Metrics, Chapman & Hall, London, 1991.
(3) Walston, C.E. y Felix, C.P., "A Method of Programming Measurement and
Estimation," IBM Systems Journal, Vol. 16, No.1, January 1977.
1. Calibración.
5-15 L 0,16
20K 0,18
30K 0.28
40K 0,34
50K 0,37
>70 K 0,39
Pasando al valor discreto más cercano de la Tabla, dicen Putnam y Myers, se aplica un
modesto valor de corrección para tener en cuenta una cantidad de incertidumbres
(probablemente NO se siguió perfectamente una curva Raleigh - se puede haber
nivelado la cantidad de personal, lo cual produce por lo menos un 10 a 15 % de gasto
de más en esfuerzo -; posiblemente ha habido interrupciones y otros problemas en el
desarrollo del proyecto).
2. Tamaño.
T e = (a + b ) / 2
En la etapa de Diseño Funcional, se hace que la gente más conocedora del tipo de
sistema divida a aplicación en sub sistemas (de 3 a 10) y que de una estimación de
tamaño ”de tres puntos” para cada subsistema:
El desvío estándar :
DE = (b - a) / 6 SLOC
3. Estimaciones
c) Costo:
COSTO $ = ( $ / MH ) * E E en meses-hombre
Referencia:
(1) Putnam, Lawrence H. & Ware Myers, Measures for Excellence - RelIable Software
on Time, Within Budget, Prentice-Hall, Inc., 1992, Englewood Cliffs, NJ 07632, EE.UU.,
Cap. 14, p. 215.
Como primer paso, los programas de cada subsistema se clasifican en distintos tipos.
Por ejemplo, esos tipos podrían ser los caracterizados por los siguientes elementos:
-En línea
-Batch
-Listados
-Menúes.
-Simples
-Promedio
-Complejos.
Debería definirse, con ejemplos, lo que debe entenderse por cada nivel de complejidad
(Por ejemplo, para programas "En Línea" se considerarán como "Simples" los que
manejan una sola pantalla, aceptan y despliegan información, tienen no más de unas
200 líneas de instrucciones; serán "Complejos" los que manejan varias pantallas,
realizan una validación compleja y múltiples actualizaciones.
Se agrupan los programas de similar dificultad y similar tipo y se usan los estándares
por tipo y dificultad que se hayan definido para obtener un total de horas para
programación (incluidas las pruebas unitarias).
En Línea 11 28 56
Batch 11 28 56
Menúes 7 14 28
En Línea 35 56 70
Menúes 21 49 70
NOTAS:
1. Las horas que se indican como estándares deben tomarse sólo como ejemplos y
deben ser calibradas para cada ambiente de desarrollo específico..
4. Para aquellos programas que tengan una estructura muy similar a la de otros que se
puedan tomar como modelo, los tiempos deberían reducirse apreciablemente.-
5. Debe tenerse en cuenta que éste es un “método” muy aproximado y muy fácilmente
sujeto a errores.
1 - Promedio porcentual definido para cada una de las fases del desarrollo
- Análisis
- Diseño
- Construcción
- Implantación
ANÁLISIS 20
A. Estudio de Factibilidad y
B. Resumen General del Sistema 2
C. Definición de Procesos 8
D. Prototipo de Requerimientos 3
E. Definición de Datos 4
F. Definición de Tecnología 1
G. Verificación de Análisis 2
DISEÑO 20
H. Diseño de Procesos 9
I. Diseño de Datos 7
J. Diseño de Tecnología 2
K. Verificación del Diseño 2
CONSTRUCCIÓN 46
L. Procedimientos de Usuario 9
M. Generación de Programas y/o
N. Diseño de Programas 4
O. Codificación de Programas 9
P. Pruebas Unitarias 9
Q. Prueba del Sistema 15
IMPLANTACIÓN 14
R. Entrenamiento 5
S. Conversión de Datos 5
T. Implant. y Recep. del Sistema 3
U. Revisión Post-implantación 1
100% 100%
NOTA: Los porcentajes deben ser calibrados para cada ambiente específico.
Usuarios Primarios
Son los más importante del sistema, se supone que son los que pueden definir con
seguridad y autoridad sus características fundamentales. Generalmente son
funcionarios de un nivel medio-alto dentro de la organización.
Usuarios Secundarios
Son personas que utilizan regularmente el sistema en un nivel operativo y por lo tanto no
tienen una visión global de éste, pero suministran aportes importantes en el nivel de
detalle en los procesos más comúnmente utilizados por ellos. Generalmente son
funcionarios de un nivel medio-bajo dentro de la organización.
Entrevistas
Para cada uno de estos usuarios se debe preparar un tipo de entrevista diferente,
asignando una mayor cantidad de tiempo a los usuarios primarios.
A las entrevistas con los usuarios primarios se les puede definir, por ejemplo, una
duración de 16 horas y a los usuarios secundarios una duración de 4 horas.
Adicionalmente, se supone que a cada entrevista asisten 2 personas del grupo
encargado de realizar el proyecto, lo cual implica que la estimación real es de 32 horas
para entrevistas a usuarios primarios y 8 horas a usuarios secundarios. Estas
duraciones estándar se deberán ir ajustando en base a la experiencia que se vaya
recogiendo en el uso de esta técnica.
Donde:
"8" = Horas-hombre estimadas para personal de sistemas (no incluye horas-hombre del
usuario) por entrevista secundaria
Esta fórmula permite calcular una primera estimación del esfuerzo de desarrollo que
deberá luego ser sometido a ajustes de acuerdo con las características del proyecto.
En este primer ajuste se identifica la relación que la aplicación va a tener con otros
sistemas; esta relación implica un esfuerzo adicional de desarrollo dependiendo de si la
aplicación es independiente, con interface o integrada.
Las características del lenguaje de programación usado es un factor que puede acelerar
o retrasar el desarrollo de una aplicación.
Como todos los otros coeficientes mencionados aquí, los factores específicos en cada
caso deberán ser ajustados con el tiempo. De allí la importancia de mantener registros
adecuados y una "base de datos" sobre los desarrollos realizados.
Los dos puntos anteriores contienen factores de corrección con los que se trata de
ajustar el esfuerzo de implementación basado en su integración con otras aplicaciones y
el lenguaje a utilizar para su desarrollo. En el caso del ajuste por "complejidad", se trata
de ajustar de acuerdo con las características y procesos de las funciones que cubrirá el
nuevo sistema.
Se considera que el esfuerzo requerido para llevar a cabo una migración y mejoras a
una aplicación, es un porcentaje del necesario para desarrollarlo como sistema nuevo.
Lo anterior indica que las estimaciones del esfuerzo requerido en un proyecto tipo
migración y mejoras, se hacen normalmente como si se fuera a desarrollar
completamente la aplicación y posteriormente se le aplica el ajuste definido en este
punto.
6. Cantidad de personal
La tabla que se muestra a continuación podría servir como referencia para definir el
tamaño del equipo del proyecto y la duración del desarrollo en meses (donde el tamaño
de la aplicación, de pequeña a muy grande, se ha representado con números del 1 al 5)
1 1200 4 2
2 3400 8 3
3 7000 12 4
4 13000 18 5
5 24000 24 7
Para conformar esta tabla se supuso que la cantidad de horas efectivas trabajadas por
un integrante del grupo es de 145 por mes. Esta cantidad deberá ser ajustada en función
de la experiencia que se obtenga en la instalación y en conjunto con el punto 7.
- El tamaño del equipo del proyecto se mantiene constante a partir del esfuerzo en horas
del renglón en que aparece, hasta el esfuerzo del siguiente renglón de la tabla. Por
ejemplo, a un proyecto que tenga un esfuerzo comprendido entre el rango de 3.400 a
7.000 horas se le asignarán tres personas.
Esta duración se calcula teniendo en cuenta que una persona trabajará en promedio
unas 145 horas al mes y por lo tanto el grupo de tres personas podrá trabajar 435 horas
mensuales. Por lo tanto, la diferencia entre 3.400 y 5.000 la ejecutarán en 4 meses,
aproximadamente.
Con respecto al plazo de ejecución o duración del proyecto, se debería aplicar un factor
de ajuste de por ejemplo 1,2 para tener en cuenta la incidencia de una potencial rotación
de personal y asignaciones transitorias a otras actividades, particularmente al
mantenimiento de aplicaciones.
Por ejemplo, si para pasar de las horas nominales ( 8 horas diarias por 21 días promedio
en el mes, es decir 170 horas aproximadamente) a las horas "efectivas" consideramos
los siguientes elementos:
Hs. "promedio"
Elemento a considerar % Promedio mensuales
Llegamos así a las 145 horas "efectivas" mensuales (170-25 = 145). En el caso de que
para el cálculo de las horas "efectivas" no se tome en cuenta alguno de los elementos
indicados, o se agregue otro, deberá entonces verificarse si no corresponde modificar el
factor de ajuste utilizado para corregir la duración del proyecto.-
Esta técnica puede ser considerada como una generalización de la técnica "E" y como
una aproximación simplificada a la estimación de tiempos y personal requerido para el
desarrollo de una aplicación.
Para la estimación en particular, los grandes pasos a seguir son los siguientes:
2. Identificar las tareas que puedan haber sido modificadas o que requieran un distinto
nivel de esfuerzo para su realización;
6. Consultar los valores de las pautas de estimación porcentual que existan para las
distintas fases del proyecto y obtener, extrapolando, un total general para el proyecto
(representa el total de Meses-Hombre u Horas-Hombre y puede utilizarse para calcular
costos totales para el proyecto);
7. Aplicar al total de Horas-Hombre los recursos realmente disponibles (es decir, los
grupos de desarrollo con que se cuenta) para obtener los plazos calendario en que
Los pasos mencionados permitirán llegar a una estimación inicial del esfuerzo requerido
para llevar a cabo el proyecto.
Una empresa cuenta con la siguiente información, producto del promedio histórico para
10 proyectos anteriores, relacionada con el porcentaje de esfuerzo requerido para cada
una de las fases en que se divide el ciclo de vida de sistemas en la metodología utilizada
para desarrollo de sistemas:
FASE 1 2 3 4 5 6 7
Porcentaje 4 8 18 20 25 15 10 = 100 %
Ajuste de 15 %:
Según citada por Fenton (1), la estimación por Grupos puede ser realizada con una
técnica Délfica. En resumen el procedimiento indicado es el de distribuir entre
especialistas las especificaciones del proyecto y toda otra información que pueda existir.
Luego se reúne a esos expertos para discutir el tema y hacer que cada uno, en forma
anónima, presente sus estimaciones, dando un valor más probable y un valor extremo
superior e inferior. El coordinador del grupo reúne las estimaciones y las vuelve a
distribuir (dando un promedio y las estimaciones individuales). Y así sucesivamente
hasta llegar a un razonable consenso.
Es interesante mencionar que se ha sugerido que las estimaciones promedio del grupo
no deberían ser un simple promedio de las estimaciones individuales. Se propone que
sean calculadas según una ponderación basada en la siguiente fórmula (aproximación a
la distribución Beta, también usada en PERT):
Aquellos que estén familiarizados con las estimaciones y cálculos del PERT notarán que
las fórmulas dadas aquí son las mismas que las utilizadas en ese método (una
simplificación de la fórmula para la distribución Beta).
NOTA:
Conrado Estol es ingeniero aeronáutico (Master, New York University. EE.UU.) y Doctor en Ciencias de la Administración
por la Universidad de Belgrano, Buenos Aires, Argentina). Profesor Distinguido de la Universidad Católica Argentina
(UCA).