ESTIMACIONES DE
SOFTWARE
Rogelio Francisco Ramírez Ramírez
[Email address]
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Contenido
1. Introducción ......................................................................................................................................................................... 2
2. Fundamentos ....................................................................................................................................................................... 3
2.1 Conceptos clave .............................................................................................................................................................. 3
2.2 Porque las palabras importan .......................................................................................................................................... 3
2.3 La crisis del software........................................................................................................................................................ 6
2.4 El software como negocio ................................................................................................................................................ 9
2.5 Bibliografía recomendada .............................................................................................................................................. 15
3. Estimaciones de software................................................................................................................................................. 16
3.1 Introducción ................................................................................................................................................................... 16
3.2 El tamaño del software................................................................................................................................................... 29
3.3 Clasificación de las estimaciones .................................................................................................................................. 32
3.4 Técnica de juicio de experto .......................................................................................................................................... 35
3.5 Técnica Delphi ............................................................................................................................................................... 36
3.6 Método de contar, calcular, juzgar ................................................................................................................................. 37
3.7 Método de análisis de puntos de función ....................................................................................................................... 38
3.8 Uso de información histórica para mejorar las estimaciones ......................................................................................... 47
4. Glosario .............................................................................................................................................................................. 52
5. Referencias ........................................................................................................................................................................ 58
1
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
1. Introducción
En el entorno mexicano actual, el desarrollo de software se ha vuelto un motor importante para el crecimiento de la economía
del país (Villalobos Hernández & Gutiérrez Tornés, 2001), (Secretaría de economía, 2012). El número de empresas que
desarrollan software creció en un 54% del 2002 al 2011 (Secretaría de economía, 2012) y hoy México ocupa ya el cuarto lugar
de importancia en desarrollo de software en el mundo (IVEX, 2007), (Secretaría de economía, 2012). Sin embargo, y a pesar
de este crecimiento, la industria del software en el país aún se encuentra en una etapa de poca madurez y en desarrollo (IVEX,
2007).
Aun cuando en nuestro país ya existen más de trescientas empresas que cuentan con una o más certificaciones en algún
modelo de procesos (Secretaría de economía, 2012) la realidad es que en el día a día muchos de los proyectos de software
fracasan (The Standish Group, 1995) o las empresas tienen que invertir grandes sumas económicas (The Standish Group,
1995) para mantener aplicaciones que no cumplen con los estándares de calidad necesarios.
De acuerdo a un estudio realizado por la ANIEI-ILCE1 con el apoyo de la Secretaría de Economía, para determinar la cantidad
y calidad de recursos humanos necesarios para el desarrollo de la industria del software en México (Secretaría de economía,
2012), se detectaron 2 problemáticas fundamentales:
La disparidad que existe entre los conocimientos adquiridos en las instituciones educativas y las competencias
demandadas por la industria.
El costoso y extenso período de transición adaptativa, esto es, el tiempo entre el egreso de las instituciones
educativas y el momento en que son productivos.
Por lo anterior, este curso fue diseñado con el objetivo de incrementar las habilidades profesionales de las personas que
participan en los procesos de software, a través de la aplicación de la ingeniería.
Si el objetivo anterior se cumple, se espera que la madurez de los procesos de software incremente en las empresas para
que así, puedan tener mayor eficiencia, empleados y clientes más satisfechos, para que por consecuencia obtengan mayores
ingresos. En la mayoría de las economías, cerca de una tercera parte del crecimiento del PIB real es atribuible a mejoras en
la eficiencia con la que se utilizan los insumos o factores de la producción (Secretaría de economía, 2012).
El presente trabajo representa una combinación de lecciones aprendidas y mejores prácticas ya implementadas y mejoradas
por equipos de desarrollo de software en México, además de información recopilada de diversas fuentes de información
respetadas y reconocidas en la industria del software en el mundo.
1 Asociación Nacional de Instituciones de Educación en Tecnologías de la Información, A.C. y el Instituto Latinoamericano de la Comunicación Educativa
2
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
2. Fundamentos
Tal como se mostrará más delante en este mismo documento, es importante comprender y distinguir los siguientes:
2.1 Conceptos clave
2.1.1 Software
Es el conjunto de programas de computadora, procedimientos, datos y documentación asociada pertenecientes a la operación
de un sistema computacional. (IEEE, 1990)
2.1.2 Programa de computadora
Una combinación de instrucciones de computadora y definiciones de datos que permiten al hardware de computadora llevar
a cabo funciones computacionales o de control. (IEEE, 1990)
2.1.3 Proyecto
Es un esfuerzo temporal realizado para crear un producto, servicio o resultado únicos. (PMI, 2008)
2.1.4 Proceso
Un conjunto definido de actividades o comportamientos llevados a cabo por humanos o máquinas para alcanzar uno o más
objetivos. (ABPMP, 2009)
Para mayor información acerca de estos conceptos ver el Glosario.
2.2 Porque las palabras importan
En nuestra industria es muy común que se empleen términos o conceptos, que tienen significados diferentes, de forma
indistinta, como si significaran lo mismo. Aparentemente podría no haber mayor problema con esto, pero conforme una
empresa madura sus procesos de software el lenguaje técnico y el significado de las palabras se vuelven relevantes para
mejorar la comunicación y, por lo tanto la efectividad y la eficiencia en la organización y sus proyectos.
2.2.1 Diferencia entre sistema, software, aplicación y programa
Uno de los elementos que más comúnmente es llamado de diferentes formas, aunque los nombres con los que se le llama
signifiquen cosas diferentes, es el software mismo. Para comprender las diferencias hay que comprender los significados de
cada palabra, de ahí entonces que es importante comprender primero que:
3
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Un sistema es un conjunto de cosas que relacionadas entre sí ordenadamente contribuyen a determinado objeto
(RAE, 2012), es decir, muchas cosas pueden ser un sistema, entre ellas el software, pero no es lo único.
Luego entonces, se puede decir que un sistema computacional es un sistema que contiene una o más computadoras
y software asociado (IEEE, 1990), es decir, un sistema computacional no solamente está conformado por un
programa computacional.
De lo anterior entonces es importante comprender que un programa computacional no necesariamente es igual a un
programa, es decir, un programa puede significar varias cosas (RAE, 2012), la mayoría de ellas no relacionadas con
la computación. Por otro lado, un programa computacional es una combinación de instrucciones de computadora y
definiciones de datos que permiten al hardware de computadora llevar a cabo funciones computacionales o de control
(IEEE, 1990).
Por otro lado, el software es un conjunto, que está conformado por programas de computadora, procedimientos,
datos y documentación asociada pertenecientes a la operación de un sistema computacional (IEEE, 1990).
Y finalmente, pero no por eso menos importante, una aplicación o software de aplicación es un software diseñado
para cumplir con necesidades específicas de un usuario, por ejemplo, software de nómina, recursos humanos o
ventas (IEEE, 1990).
2.2.2 Diferencia entre programa computacional y proyecto
Otra de las confusiones más comunes es la que se da cuando a un programa computacional se le llama proyecto. Aunque es
muy común que en otros ámbitos se emplee la palabra proyecto como sinónimo del producto, servicio o resultado que se está
generando, se considera que en la industria del software se vuelve relevante hacer la distinción para que el concepto de la
administración de proyectos se adopte más rápido y de forma más efectiva y eficiente. De lo anterior entonces se puede decir
que:
Un proyecto es un esfuerzo temporal realizado para crear un producto, servicio o resultado únicos (PMI, 2008), es
decir, el proyecto, para el ámbito de este documento, es el conjunto de actividades que se realizan para crear un
programa computacional.
Como ya se explicó antes, un programa computacional es una combinación de instrucciones de computadora y
definiciones de datos que permiten al hardware de computadora llevar a cabo funciones computacionales o de control
(IEEE, 1990).
2.2.3 Diferencia entre error, defecto y falla
Cuando se comienzan a medir los resultados obtenidos en procesos relacionados con la calidad del software se vuelve
relevante poder comprender la diferencia entre error, defecto y falla. De ahí que es importante que se comprenda que:
Un error es una acción desacertada o equivocada (RAE, 2012) o una acción humana que produce un resultado
incorrecto (IEEE, 1990). Cuando un humano participa en el desarrollo de un producto y comete un error, puede
insertar un defecto en el producto.
4
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Por lo tanto, se puede decir que un defecto es una imperfección o deficiencia en un componente de un proyecto en
la cual dicho componente no cumple sus requerimientos o especificaciones y necesita ser corregido o reemplazado
(PMI, 2008).
Finalmente, una falla es la acción y el efecto de que algo salga fallido, por ejemplo, el programa computacional.
En resumen se puede decir que, el humano (programador(a) de software) puede insertar defectos en el programa
computacional cuando comete errores. Posteriormente y debido a uno varios defectos, el programa computacional puede
fallar.
2.2.4 Diferencia entre costo y precio
Durante la administración de un proyecto es importante controlar los costos y, dependiendo de la organización que esté
ejecutando el proyecto, podría estar manejándose el precio en lugar del costo, de ahí la importancia de distinguirlos. Por lo
tanto:
El costo es la cantidad que se da o se paga por algo (RAE, 2012), es decir, desde el punto de vista del que compra
o crea un proyecto o producto de forma interna, el costo es la cantidad pagada o invertida por dicho proyecto o
producto, aunque desde el punto de vista de quien vende, el costo representa lo que le cuesta ejecutar el proyecto
aunque después le agregue una utilidad y el total se convierta en el precio.
Visto de otra forma, desde el punto de vista de quien vende un proyecto o producto y lo ofrece como un servicio a un
cliente, el precio representa lo que le cuesta ejecutar el proyecto más la ganancia que desea obtener por la venta de
dicho servicio (proyecto o producto). En este caso, desde el punto de vista de quien compra, lo que le cuesta el
proyecto representa un costo, como ya se mencionó anteriormente.
En resumen, el precio es la suma del costo más la utilidad. El costo puede descomponerse en varias cosas, sin embargo, esa
descomposición está fuera del alcance de este documento.
En la administración de un proyecto debe controlarse el costo, no el precio, ya que si se controla el precio se corre el riesgo
de tomar la utilidad como parte de la inversión disponible dentro del proyecto.
2.2.5 Diferencia entre duración y esfuerzo
Es muy común que en los proyectos se mida el esfuerzo en función del tiempo, por ejemplo, en horas, días o semanas. Lo
anterior puede provocar una confusión cuando existe comunicación relacionada con esfuerzo y duración, de tal forma que
durante una conversación o mensaje, una de las partes puede estar expresando algún valor en función del esfuerzo y la otra
parte podría interpretar dicho valor en función de la duración, por ejemplo: Juan le dice a María que realizar la actividad A le
tomará 16 horas y María podría interpretar que Juan realizará dicha actividad en 2 días, puesto que calcula 8 horas laborales
por día, sin embargo, quizá Juan contemplaba dedicar 4 horas diarias a dicha actividad, por lo que la duración en realidad
sería de 4 días y no 2, como lo pensó María. Si no existe la comunicación adecuada entre Juan y María, podría haber una
confusión importante posteriormente. La confusión anterior es muy común y de ahí que sea importante distinguir la diferencia
entre ambos conceptos. Por lo tanto:
5
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
El esfuerzo es el número de unidades de trabajo requeridas para completar una actividad programada o un
componente de una estructura de desglose de trabajo. Usualmente expresado como horas/hombre, días/hombre o
semanas/hombre (PMI, 2008). El esfuerzo es igual a la duración de una actividad multiplicada por el número de
personas que participan en ella.
La duración es el número total de periodos de trabajo (sin incluir días festivos u otros periodos no laborables)
requerido para completar una actividad programada o un componente de una estructura de desglose de trabajo.
Usualmente expresada como días o semanas laborables (PMI, 2008).
2.3 La crisis del software
2.3.1 Hacer software no es lo mismo que programar
Es muy común que quienes se gradúan de alguna carrera relacionada con las tecnologías de información y que eligen el
camino del software comiencen programando. También es muy común que quienes inician nuevas empresas de software sean
los mismos ingenieros o licenciados surgidos de las carreras de tecnologías de información y que alguna vez iniciaron
programando. Lo anterior ha provocado que muchas empresas de software enfoquen sus esfuerzos a la programación del
mismo, probablemente y, porque lo consideran necesario, también dediquen tiempo a la recopilación de los requerimientos
del software que van a desarrollar o mantener. Es muy probable que muchas de esas empresas comiencen con ninguna o
pocas prácticas de administración de proyectos, de arquitectura y diseño, de pruebas y qué pensar de prácticas de
aseguramiento de la calidad.
Por lo mencionado anteriormente es importante comprender que hacer software no es lo mismo que programar, es decir,
hacer software implica llevar a cabo, preferentemente de una forma estandarizada, actividades de estimaciones,
recopilación de requerimientos, arquitectura y diseño de software, pruebas de software, revisiones del código y la
documentación generada, administración de la configuración del software, administración de proyectos, medición
del desempeño, aseguramiento de la calidad entre otras, ah y por cierto, también de programación.
2.3.2 Reporte del caos
En el año de 1986 Fred Brooks publicó un ensayo titulado “No Silver Bullet — Essence and Accidents of Software Engineering”
en el cual argumentaba que: “no existe un solo desarrollo, en cualquier tecnología o técnica de administración, que por sí
misma prometa una mejora en al menos un orden de magnitud dentro de una década en productividad, confiabilidad o
simplicidad”. Y pareciera que Brooks tenía razón, pero su predicción pareciera aplicar no solamente para la siguiente década
después de que publicó su ensayo, sino que aparentemente sigue siendo válida hasta nuestros días.
En 1985 fue formado The Standish Group, con la visión de recolectar información de casos de la vida real de fallas y ambientes
de tecnologías de información. En 1995 este grupo publicó el reporte del caos en el cual, entre otros hallazgos, encontraron
que:
El 31% de los proyectos sería cancelado antes de ser terminado. (The Standish Group, 1995)
6
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
El 52.7% de los proyectos costarían 189% más que en sus estimaciones originales. (The Standish Group, 1995)
La falla para producir software confiable para manejar las maletas en el aeropuerto de Denver le estaba costando a
la ciudad $1.1 millones de dólares por día. (The Standish Group, 1995)
Las compañías estadounidenses y las agencias de gobierno gastarían $81 billones de dólares por proyectos de
software cancelados. Estas mismas compañías pagarían $59 billones de dólares adicionales por proyectos de
software que serán terminados pero excederán sus estimaciones originales de duración. (The Standish Group, 1995)
El promedio de proyectos de software que fueron terminados a tiempo y dentro de su presupuesto fue de 16.2%, sin
embargo, en compañías grandes el número de proyectos terminados a tiempo y dentro de su presupuesto
representaba solamente el 9% del total. (The Standish Group, 1995)
Los proyectos terminados por grandes compañías estadounidenses contenían solamente el 42% de las funciones y
características que fueron propuestas originalmente. Sin embargo, en compañías pequeñas este porcentaje era
diferente, un total de 78.4% de sus proyectos de software fueron entregados con al menos el 74.2% de sus funciones
y características originales. (The Standish Group, 1995)
En años recientes, el reporte del caos muestra que la ejecución de proyectos ha mejorado, pero no por mucho:
Tabla 1 Indicadores de proyectos de software de acuerdo al reporte del caos del Standish Group.
Proyectos
1994
1996
1998
2000
2002
2004
2006
2009
Exitosos
16%
27%
26%
28%
34%
29%
35%
32%
Desafiados
53%
33%
46%
49%
51%
53%
46%
44%
Fallidos
31%
40%
28%
23%
15%
18%
19%
24%
Fuente: (Domínguez, 2012)
Exitosos: terminaron a tiempo, dentro del presupuesto planeado y cumplieron los requerimientos de sus usuarios.
Desafiados: excedieron sus presupuestos, su duración planeada o no cumplieron completamente con las necesidades de
sus usuarios.
Fallidos: fueron cancelados y no terminaron.
Jim Johnson, presidente del Standish Group mencionó en el 2007 (Rubinstein, 2007) que la mejoría con respecto a años
anteriores principalmente se debió a:
Mejor administración de proyectos
Desarrollo iterativo
Emergente infraestructura Web
7
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
2.3.3 Casos de estudio
2.3.3.1 Software de manejo de equipaje del aeropuerto de Denver
Originalmente facturado como el sistema más avanzado del mundo, el sistema de manejo de equipaje del nuevo aeropuerto
internacional de Denver se convirtió en uno de los más notorios ejemplos de proyectos fallidos.
Originalmente fue planeado para automatizar el manejo de equipaje a través del aeropuerto entero, el sistema probó ser más
complejo que lo que algunos creyeron originalmente. Los problemas para construir el sistema resultaron en una espera
en la apertura del nuevo aeropuerto de 16 meses mientras los ingenieros trabajaban para hacer que el sistema funcionara.
El retraso agregó aproximadamente $560 millones de dólares al costo del aeropuerto. Al final del día, el sistema que fue
finalmente implementado fue una sombra de lo que estaba originalmente planeado. En lugar de integrar las tres salas en un
sólo sistema, el sistema soportaba vuelos de salida solamente en una de las salas. Todo el equipaje adicional era manejado
por un remolcador manual y un sistema de carretillas que fue construido a la carrera cuando se hizo claro que el sistema
automatizado nunca cumpliría sus metas.
Inclusive la porción del sistema que fue implementada nunca funcionó apropiadamente y en agosto de 2005 el sistema fue
desechado por completo. El costo de un millón de dólares mensuales empleados para mantener el sistema fue contrarrestando
el valor que ofrecían las partes restantes del sistema además de que el uso de un sistema manual realmente ayudó a reducir
costos.
Los factores reportados a la prensa y que contribuyeron al fracaso fueron: subestimación de la complejidad, una arquitectura
compleja, cambios en los requerimientos, subestimación de la duración y el presupuesto, despido del consejo de expertos,
entre otros.
(Calleam Consulting Ltd, 2012)
2.3.3.2 El colapso de la red de AT&T
En 1990, 75 millones de llamadas de teléfono en todo Estados Unidos no fueron respondidas después de que un simple switch
en uno de los 114 centros de AT&T sufrió un problema mecánico menor, el cuál apagó todo el centro. Cuando el centro volvió
a funcionar, envió un mensaje a otros centros, lo cual provocó que se apagaran y resetearan.
El culpable resultó ser un error en una sola línea de código, nada de hackers como se especuló en aquel entonces, que había
sido agregada durante una actualización altamente compleja del software. American Airlines estimó que este pequeño error
le costó $200,000 dólares en reservaciones.
(Barker, 2007)
8
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
2.3.3.3 La explosión de Ariane 5
En 1996, el cohete de lanzamiento de satélites más nuevo y no tripulado, el Ariane 5, fue intencionalmente explotado apenas
algunos segundos después de haber despegado en su vuelo inaugural en Kouru, en la Guyana francesa. La agencia espacial
europea estimó que el desarrollo total de Ariane 5 costó más de 8 billones de dólares. A bordo había cuatro satélites científicos
con un costo de $500 millones de dólares creados para estudiar cómo el campo magnético de la tierra interactúa con los
vientos solares.
De acuerdo a una pieza en la revista New York Times, la autodestrucción fue disparada por el software que intentaba llenar
un espacio de 16 bits con un número de 64 bits.
"Este apagón ocurrió 36.7 segundos después del lanzamiento, cuando la computadora del sistema de navegación intentó
convertir un dato, el de la velocidad lateral del cohete, de un formato de 64 bits a un formato de 16 bits. El número era
demasiado grande y resultó en un error de sobre flujo (overflow). Cuando el sistema de navegación se apagó, pasó el control
a una unidad idéntica, redundante, la cual estaba ahí para proveer respaldo en caso de que hubiera alguna falla. Pero la
segunda unidad había fallado de forma idéntica unos milisegundos antes. ¿Y por qué no? estaba ejecutando el mismo
software." mencionó el artículo.
(Barker, 2007)
2.4 El software como negocio
2.4.1 Programar vs hacer dinero
Uno de los principales conflictos que existen en la industria del software es el que tiene que ver con la visión que tiene un
programador de software promedio y la que tiene un empresario, de software o de cualquier industria que emplee software.
Es muy común que una persona que recién egresa de una carrera relacionada con el software decida comenzar su carrera
profesional programando software y que inicialmente busque crecimiento profesional adquiriendo la mayor cantidad de
conocimiento técnico posible, por otro lado, el empresario promedio enfocará sus esfuerzos en la obtención de mayores
ingresos económicos. Aunque estas dos visiones no necesariamente son mutuamente excluyentes, al final de cuentas si
representan visiones diferentes que si no son alineadas pueden provocar insatisfacción a ambas partes.
Para explicar de una manera más detallada lo anterior se presentan algunos de los intereses comunes de cada parte. Es
importante aclarar que las siguientes listas no son estáticas y los intereses mostrados no son los únicos que existen e inclusive
es probable que ni siquiera representen los intereses más importantes de cada una de las partes:
Intereses de un programador de software:
Adquisición de nuevo conocimiento técnico.
Mayores ingresos económicos.
Reconocimiento por su trabajo.
Flexibilidad y libertad laboral.
9
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
o
Entiéndase flexibilidad y libertad como la posibilidad de tener un horario flexible de trabajo, respeto por sus
estimaciones, comprensión de sus jefes del hecho de que como humanos no pueden estar sentados ocho
horas diarias programando y como la posibilidad de realizar otras actividades de esparcimiento en horas
laborales, entre otras.
Trabajar en proyectos con nueva tecnología.
Otros.
Intereses de un empresario:
Incrementar ingresos.
Reducir costos.
Reducir riesgos de negocio.
Satisfacer a clientes.
Satisfacer a empleados.
Mejorar procesos (optimizarlos).
Mayor efectividad y eficiencia del negocio.
Otros.
Como puede observarse, algunos de estos intereses pueden estar en conflicto, por ejemplo, mientras un programador de
software busca mayor flexibilidad y libertad en el trabajo, el empresario está ocupado por obtener mayor eficiencia, que implica
entre otras cosas, la posibilidad de optimizar al máximo los recursos disponibles, entre ellos las horas productivas de un
programador de software. Otro ejemplo es el que tiene que ver con el hecho de que los programadores buscan trabajar en
proyectos que involucren nueva tecnología, sin embargo, hacer esto incrementa los riesgos del negocio desde el momento
que la nueva tecnología puede no tener la madurez necesaria para ser empleada en nuevas aplicaciones de software.
En resumen y para finalizar esta sección, en la medida que los programadores de software comprendan que los programas
computacionales que generan tienen un impacto económico (positivo o negativo) importante en las empresas que los utilizan
y en la medida que el empresario que desarrolla o emplea software comprenda que el software es hecho por personas y no
por máquinas, la madurez de la industria del software incrementará y podrán tenerse programadores y empresarios más
satisfechos.
2.4.2 Desperdicio relacionado al software
En la industria de la manufactura es muy común escuchar de la implementación de prácticas de mejora continua, tales como
la administración de la calidad total, y esfuerzos de optimización de la producción asociados a conceptos como la manufactura
esbelta, reducción de defectos, administración de la capacidad de la producción entre otros. Muchos de estos conceptos o
filosofías han sido adoptados y adaptados de empresas japonesas de manufactura.
Aunque como ya se mencionó, dichas prácticas o filosofías han sido adoptadas ampliamente en empresas de manufactura,
no es muy común que dichas prácticas sean empleadas en empresas de servicios o productos de software. Efectivamente
dichas prácticas pueden ser adoptadas a empresas de servicios y específicamente empresas de software, un ejemplo de ello
10
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
es la emergente disciplina conocida como Lean IT, en la que el principal objetivo es la eliminación del desperdicio, desperdicio
entendido como el trabajo que no agrega valor a un producto o servicio (Wikipedia, 2012).
Lean IT promete identificar y erradicar el desperdicio que contribuye a un pobre servicio al cliente, pérdida de negocio, costos
de negocio más altos de lo necesario y pérdida de productividad de los empleados. Para estos fines, Lean IT se enfoca en
ocho elementos de la operación de TI que no agregan valor al producto, servicio terminado o a la organización que los genera:
Tabla 2 Objetivos de desperdicio en Lean IT
Desperdicio
Ejemplo
En qué se traduce en el negocio
Defectos
No cumplimiento de un requerimiento
Insatisfacción del cliente
Cálculo mal realizado por un programa computacional
Costos adicionales de corrección
Sobreproducción (sobre Generación de características (funciones) adicionales
Incremento en los costos de producción
aprovisionamiento)
no solicitadas por el cliente.
Espera
Tiempo que un equipo de desarrollo de software debe
Costos no planeados (asociados al
esperar para instalar una aplicación cuando el servidor
tiempo de espera, tiempo no
(hardware) requerido para hacerlo no está disponible.
productivo)
No aprovechamiento de los recursos en
otros proyectos en los que pueden ser
productivos.
Procesamiento que no
Recopilación manual de información para obtención de Incremento de costos para la
agrega valor
indicadores de desempeño de un proyecto
organización
No aprovechamiento de los recursos en
otras actividades que generen valor.
Transportación
Tiempo de traslado empleado para visitar las oficinas
No aprovechamiento de recursos en
de un cliente para recopilar requerimientos.
actividades que generen valor
Posible incremento de costos (por
gastos de transportación)
Inventario
Programadores de software que no están asignados a
Costos devengados por la empresa
algún proyecto productivo.
mientras no exista un cliente que
pague, a través de un proyecto, por las
horas disponibles de dichos
programadores.
Movimiento
Asistencia a reuniones para llegar a acuerdos.
Pérdida de productividad
11
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Desplazamientos necesarios (para ir al baño, para
fumar, para conversar, etc.) para el esparcimiento
durante horas laborales.
Conocimiento no
No existencia de una base de conocimiento
Baja satisfacción con el trabajo
empleado
Procesos no documentados
Incremento en los costos de
Comisión de los mismos errores de forma recurrente
mantenimiento y soporte
Fuente: (Wikipedia, 2012)
2.4.3 Costo y precio
Para empresas que ofrecen servicios relacionados con productos de software y que lo hacen a través de la ejecución de
proyectos es muy importante distinguir la diferencia entre costo y precio al momento de planear, monitorear y controlar sus
proyectos. Quizá lo anterior no sea tan relevante para empresas cuyos proyectos de software se ejecutan de manera interna,
es decir, no venden servicios relacionados con la ejecución de dichos proyectos.
El costo es la cantidad que se da o se paga por algo (RAE, 2012). La definición anterior se establece desde el punto
de vista de quien compra, pero desde el punto de vista de quien vende se puede decir que el costo es lo que cuesta
ejecutar un proyecto.
El precio representa lo que cuesta (el costo) ejecutar un proyecto más la ganancia que desea obtener por la venta
de dicho proyecto.
Al igual que la premisa que se emplea en México para el IVA (Impuesto al valor agregado) cuando se dice que el IVA solamente
se traslada y no le pertenece a quien lo cobra, podría pensarse del precio, es decir, la utilidad no le pertenece a un proyecto,
por lo tanto, cuando un proyecto que fue vendido se planea, monitorea y controla, solamente debe considerar el costo como
su presupuesto y no el precio, ya que este último incluye la utilidad.
Para mayor información de las diferencias entre el precio y el costo ver la sección Diferencia entre costo y precio en este
mismo documento.
2.4.4 Reducción de costos mediante la prevención
El siguiente texto fue tomado del libro Software Project Survival Guide. (McConnell, Software Project Survival Guide, 1998)
“Upstream, Downstream
Los buenos procesos de software están diseñados para resolver problemas de forma temprana en un proyecto. Este concepto
es lo suficientemente importante para discutirlo con algo de detalle.
12
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Algunas veces habrás escuchado a los desarrolladores experimentados hablar acerca de las partes "upstream" (ir contra la
corriente) y "downstream" (ir en el sentido que va la corriente) de un proyecto. La palabra "upstream" simplemente se refiere
a las partes tempranas de un proyecto tales como el desarrollo de requerimientos y la arquitectura, mientras que "downstream"
se refiere a las últimas partes tales como construcción y pruebas del sistema.
He encontrado que esta distinción entre "upstream" y "downstream" es una forma fundamentalmente útil de pensar acerca de
un proyecto de software. El trabajo que los desarrolladores hacen en las etapas tempranas del proyecto es colocado en un
flujo y tiene que ser "pescado" más delante en el proyecto. Si el trabajo que se hizo al inicio es bien hecho, el trabajo que
es "pescado" más tarde es saludable y contribuye al éxito del proyecto. Si el trabajo que se hizo al inicio es hecho
pobremente, el trabajo que es "pescado" más tarde puede perjudicar severamente al proyecto. En circunstancias
extremas, inclusive puede evitar que el proyecto sea terminado.
Investigadores han encontrado que un defecto insertado en el flujo del proyecto de forma temprana, por ejemplo, un
defecto en la especificación de requerimientos o arquitectura, tiende a costar de 50 a 200 veces más para ser
corregido hacía el final del proyecto que si hubiera sido corregido lo más cercano al punto en el que fue originalmente
colocado en el flujo. La siguiente figura ilustra dicho efecto:
Ilustración 1 Costo de corrección de un defecto de acuerdo a la fase en que es corregido
Una sentencia en una especificación de requerimientos puede fácilmente convertirse en varios diagramas de diseño. Más
tarde en el proyecto, esos diagramas pueden convertirse en cientos de líneas de código fuente, docenas de casos de pruebas,
muchas páginas de documentación de usuario, pantallas de ayudas, instrucciones para el personal de soporte técnico, entre
otras.
13
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Si el equipo del proyecto tiene una oportunidad de corregir una equivocación en la etapa en la que se están recolectando los
requerimientos, cuando el único trabajo que ha sido hecho es la creación de una sentencia de requerimientos, hace sentido
que el equipo corrija dicha sentencia en lugar de corregir todas las diferentes manifestaciones de dicha sentencia inadecuada
hacía el final del proyecto. Esta idea algunas veces es llamada "contención de fase" y se refiere a la detección y corrección
de los defectos en la misma fase en la cual los defectos fueron introducidos.
Puesto que ningún código fuente es generado mientras las actividades "upstream" son ejecutadas, dichas
actividades pueden hacer parecer que están retrasando "el verdadero trabajo" del proyecto. En realidad, están
haciendo exactamente lo contrario. Están estableciendo las bases para el éxito del proyecto.
Equivocarse del lado de demasiado proceso marginalmente incrementará la sobrecarga del proyecto, pero equivocarse del
lado de demasiado poco permite que los defectos se deslicen y entonces deberán ser corregidos con un costo de 50 a 200
veces mayor que el costo de corrección más eficiente. Por esta razón, el "dinero inteligente" reside del lado de demasiado
proceso en lugar del lado de muy poco.”
2.4.5 Costeo del software
Es muy común, al menos en la industria del software mexicana, que los costos de una aplicación de software sean establecidos
de acuerdo al número de horas invertidas en el desarrollo de dicha aplicación. Esta forma de costear las aplicaciones no
necesariamente es inadecuada, sin embargo, existe un método que permite estandarizar y comparar los costos de varias
aplicaciones y que es independiente de la complejidad de cada aplicación, a diferencia del costeo por horas que no
necesariamente es efectivo cuando se trata de hacer comparaciones, ya que la complejidad entre las diferentes aplicaciones
que se están comparando varía. Dicho método está relacionado con la medición del tamaño del software.
Es muy común también que cuando se realizan estimaciones en un proyecto de software se estime la duración, el esfuerzo 2
y el costo de dicho proyecto con base en el esfuerzo que debe realizarse en cada actividad del proyecto, sin embargo, pocas
veces se estima el tamaño del software. Estimar el tamaño del software permite estimar también la duración, el esfuerzo y el
costo de un proyecto y se pueden calcular con base en la duración, esfuerzo y costo que deben invertirse para generar una
unidad de software. Una unidad de software es la unidad de medida del tamaño de software, las unidades de medida del
tamaño del software más comunes son los puntos de función y las líneas de código.
Entonces, para poder costear el software con base en su tamaño se requiere primero estimar el tamaño del software y
posteriormente establecer la duración, esfuerzo y costo unitario de cada unidad de tamaño. Existen diferentes métodos para
medir el tamaño del software, uno de los más aceptados y reconocido como estándar a nivel mundial es el análisis de puntos
de función (IFPUG, 2012).
Para comprender mejor el concepto del tamaño del software vea la sección Tamaño del software en este mismo documento.
2 Entiéndase esfuerzo como el número de horas, días, meses o años que se requieren para realizar una actividad, multiplicados por el número de personas que participan en dicha
actividad.
14
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
2.5 Bibliografía recomendada
Ver Referencias.
15
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3. Estimaciones de software
3.1 Introducción
“Es muy difícil defender una estimación de forma vigorosa, plausible y arriesgando el trabajo cuando ésta fue derivada por un
método no cuantitativo, soportada con muy pocos datos y certificada principalmente por las corazonadas de los gerentes”.
-Fred Brooks
3.1.1 ¿Qué es una estimación?
Existen diferentes definiciones de estimación, a continuación se presentan algunas:
1.
Una evaluación tentativa o cálculo bruto (McConnell, Software Estimation (Demystifying the Black Art), 2006).
2.
Un cálculo preliminar del costo de un proyecto (McConnell, Software Estimation (Demystifying the Black Art), 2006).
3.
Aprecio y valor que se da y en que se tasa y considera algo (RAE, 2012).
4.
Una evaluación cuantitativa de la probable cantidad o salida. Usualmente aplicada a los costos del proyecto, recursos,
esfuerzo y duraciones. Siempre debe incluir alguna indicación de precisión (ej. +- x por ciento) (PMI, 2008).
Es muy importante recalcar que una estimación siempre será una aproximación, no un dato exacto.
3.1.2 Empleo y utilidad de una estimación
Las estimaciones pueden emplearse y ser útiles para diferentes actividades durante un proyecto y en una organización:
En proyectos:
o
Para determinar el tamaño del software que se va a construir o modificar.
o
Para determinar la duración del proyecto.
o
Para determinar el esfuerzo que requieren las actividades del proyecto.
o
Para determinar el costo del proyecto.
o
Para determinar la cantidad de recursos, humanos y materiales, necesarios para el proyecto.
o
Para determinar el avance de la aplicación, en términos de cuánto software se ha construido.
o
Para determinar parte del tamaño del proyecto.
o
Para determinar parte del avance del proyecto, en función del avance de la aplicación.
o
Para determinar la cantidad de defectos que se han encontrado o que pueden llegar a encontrarse en la
aplicación.
En una organización:
o
Para poder comparar aplicaciones.
o
Para poder comparar proyectos.
o
Para determinar la productividad de los desarrolladores del software.
o
Para establecer precios de venta del software.
16
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
o
Para comparar las cotizaciones de proyectos de desarrollo de software de diferentes proveedores.
3.1.3 Diferencia entre estimar y planear
Es muy común que en la industria del software se confunda el concepto de estimación por el de programación (de actividades),
es decir, cuando se solicita una estimación algunas personas elaboran un cronograma de las actividades que se van a realizar.
Aunque elaborar un cronograma de actividades para posteriormente asignar esfuerzo, costo o duración es una forma de
estimar, la programación de actividades es más una actividad de planeación y no es la única forma de estimar.
Por lo anterior, es importante distinguir claramente las principales diferencias entre una planeación y una estimación:
Planeación
o
Prever el futuro,
o
Escritura en que sumariamente se precisan los detalles para realizar una obra.
Estimación
o
Aproximación,
o
Evaluación tentativa,
o
Cálculo bruto,
o
Cálculo preliminar,
o
Evaluación cuantitativa.
La estimación y la planeación son tópicos relacionados, pero estimar no es planear y planear no es estimar. La estimación
debe ser tratada como un proceso imparcial y analítico; la planeación debe ser tratada como un proceso parcial que busca
alcanzar objetivos. Con la estimación, es peligroso querer que el estimado salga ante cualquier respuesta particular. La meta
es la precisión; la meta no es buscar un resultado particular. Pero la meta de la planeación es buscar un resultado particular.
Deliberada y apropiadamente parcializamos nuestros planes para conseguir salidas específicas. Planeamos significados
específicos para alcanzar un fin específico.
Los estimados forman la base para los planes, pero los planes no tienen que ser los mismos que los estimados. Si los
estimados son dramáticamente diferentes de los objetivos, los planes del proyecto necesitan reconocer esas diferencias y
atenderlas con un alto nivel de riesgo. Si los estimados son cercanos a los objetivos, entonces los planes pueden asumir
menos riesgo.
En conclusión, estimar puede ser una actividad de planeación, estimar es calcular algún valor necesario para la planeación o
para la toma de alguna decisión, valor tal como el esfuerzo, costo, duración o tamaño (del software). Mientras que planear
consiste en establecer las estrategias, actividades, objetivos, recursos, procesos, etc. de forma anticipada con la intención de
actuar a futuro acorde a lo definido.
17
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.1.3.1 La relación entre las estimaciones y la planeación
Planeación de proyectos
1.1 Establezca el alcance de la aplicación
1.2 Estime el tamaño de la aplicación
1.3 Defina los procesos que seguirá
1.4 Seleccione un ciclo de vida
1.5 Estime el esfuerzo requerido
1.6 Identifique los recursos necesarios
1.7 Identifique capacitación requerida, entregables, hitos, involucrados, responsabilidades, restricciones y
riesgos
1.8 Estime la duración del proyecto
1.9 Establezca el costo de la aplicación
18
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.1.4 Diferencia entre estimación, objetivo, compromiso
Estrictamente hablando, la definición del diccionario de estimación es correcta: una estimación es una predicción de cuánto
durará un proyecto o cuánto costará. Pero la estimación en los proyectos de software interactúa con objetivos de negocio,
compromisos y el control.
Un objetivo es un enunciado de un objetivo de negocio deseable.
Las empresas tienen razones importantes para establecer objetivos independientemente de las estimaciones de software.
Pero el hecho de que un objetivo es deseable o incluso aún, obligatorio, esto no necesariamente significa que es alcanzable.
Mientras que un objetivo es una descripción de un objetivo de negocio deseable, un compromiso es una promesa para entregar
una funcionalidad deseada con un nivel específico de calidad en una cierta fecha. Un compromiso puede ser lo mismo que un
estimado, o puede ser más agresivo o más conservador que el estimado. En otras palabras, no supongas que el compromiso
tiene que ser lo mismo que el estimado; no lo es.
3.1.5 El cono de la incertidumbre
El desarrollo de software consiste en realizar literalmente cientos de decisiones acerca de todos los temas relacionados con
las características del mismo. La incertidumbre en una estimación de software resulta de la incertidumbre de cómo se
resolverán las decisiones tomadas. Conforme se toman un gran porcentaje de dichas decisiones, se reduce la incertidumbre
de la estimación.
Como un resultado de este proceso de resolución de decisiones, los investigadores han encontrado que las estimaciones de
proyecto están sujetos a cantidades predecibles de incertidumbre en varias etapas. El cono de la incertidumbre muestra como
las estimaciones se vuelven más precisas conforme el proyecto avanza.
19
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Ilustración 2 - El cono de la incertidumbre basado en hitos comunes de proyecto.
El eje horizontal contiene hitos comunes de proyecto, tales como el concepto inicial, la definición aprobada del producto, los
requerimientos completos, entre otros. Debido a sus orígenes, esta terminología suena de alguna forma orientada a productos.
La “definición de producto” se refiere simplemente a la visión acordada del software, o el concepto de software, y aplica
igualmente a servicios web, sistemas de negocio internos y la mayoría de tipos de proyectos de software.
El eje vertical contiene el grado de error que ha sido encontrado en estimaciones creadas por estimadores habilidosos en
varios puntos del proyecto. Las estimaciones podrían ser por cuánto costará una característica particular y cuánto esfuerzo
será requerido para entregar el conjunto de características, o podría ser por cuántas características pueden ser entregadas
para una cantidad particular de esfuerzo o tiempo.
Como se puede observar en la gráfica, las estimaciones creadas muy temprano en el proyecto están sujetas a un alto grado
de error. Las estimaciones creadas en el tiempo del concepto inicial pueden ser imprecisas por un factor de 4x en el extremo
más alto o 4x en el extremo más bajo (también expresada como 0.25x, que es simplemente 1 dividido entre 4). El rango total
de estimación del extremo alto al bajo es 4x dividido entre 0.25x, o 16X.
Una pregunta que los gerentes y los clientes se hacen es: "¿Si te doy otra semana de trabajo en tu estimación, puedes refinarla
para que contenga menos incertidumbre?” Esa es una pregunta razonable, pero desafortunadamente no es posible cumplir
esa petición. Investigaciones realizadas por Luiz Laranjeira sugieren que la precisión de la estimación de software depende
del nivel de refinamiento de la definición del software (Laranjeira, 1990). Entre más refinada sea la definición, más precisa
será la estimación, La razón por la que una estimación contiene variabilidad es que el proyecto de software en sí mismo
contiene variabilidad. La única forma de reducir la variabilidad en la estimación es reducir la variabilidad en el proyecto.
20
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Una implicación engañosa de esta representación común del cono de la incertidumbre es que parece que tomará para siempre
que el cono adelgace – como si no se pudiera tener una muy buena precisión en la estimación hasta que el proyecto esté casi
terminado. Afortunadamente, esa impresión es creada porque los hitos en el eje horizontal están igualmente espaciado y
naturalmente suponemos que el eje horizontal es tiempo de calendario.
En realidad, los hitos enlistados tienden a estar cargados al frente en el cronograma del proyecto. Cuando el cono es redibujado sobre una base de tiempo calendario, se parece a la siguiente figura:
Ilustración 3 - El cono de la incertidumbre basado en tiempo calendario. El cono se adelgaza mucho más rápido que en la
representación previa mostrada.
Como se puede observar en esta versión del cono, la precisión de la estimación mejora rápidamente para el primer 30% del
proyecto, mejorando de +-4x a +-1.25x.
Un concepto importante, y difícil, es que el cono de la incertidumbre representa la mejor precisión que es posible tener en
estimaciones de software en diferentes puntos del proyecto. El cono representa el error en estimaciones creadas por
estimadores habilidosos. Es fácilmente posible estimar de peor forma. No es posible ser más preciso; solamente es posible
tener más suerte.
3.1.5.1 El cono no adelgaza por sí mismo
Otra forma en la cual el cono de la incertidumbre representa el mejor caso en una estimación es que si el proyecto no está
bien controlado, o si los estimadores no son muy hábiles, las estimaciones no podrán mejorar. La siguiente figura muestra lo
que pasa cuando el proyecto no se enfoca en reducir la variabilidad – la incertidumbre no es un cono, sino una nube que
persiste hasta el final del proyecto. El problema no es realmente que las estimaciones no converjan; el problema es que el
proyecto en sí mismo no converge – esto es, no expulsa suficiente variabilidad para soportar más estimaciones precisas.
21
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Ilustración 4 - Si un proyecto no es bien controlado o bien estimado, se puede terminar con una nube de incertidumbre que
contiene aún más error de estimación que el representado por el cono.
El cono adelgaza solo si se toman las decisiones que eliminan la variabilidad. Como lo muestra la figura siguiente, definir la
visión del producto (incluyendo el compromiso de lo que no se hará) reduce la variabilidad. Definir los requerimientos –
nuevamente, incluyendo lo que no se va a hacer – elimina la variabilidad posterior. Diseñar la interfaz de usuario ayuda a
reducir el riesgo de creciente variabilidad por requerimientos mal comprendidos. Por supuesto, si el producto no está realmente
definido, o si la definición del producto se redefine más adelante, el cono se hará más ancho y la precisión de la estimación
será más pobre.
Ilustración 5 - El cono de la incertidumbre no adelgaza por sí mismo. Se adelgaza tomando decisiones que remuevan las
fuentes de variabilidad del proyecto.
22
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.1.5.2 Consideraciones para el cono de incertidumbre en las estimaciones de software
Estudios de estimaciones de software han encontrado que los estimadores que inician con estimaciones de un solo punto y
crean rangos basados en sus números originales de un solo punto usualmente no ajustan sus valores mínimos y máximos lo
suficiente como para contabilizar la incertidumbre en sus estimaciones, especialmente en circunstancias que contienen alta
incertidumbre. Esta tendencia a usar rangos que son muy angostos puede ser atendida de dos maneras. La primera es
comenzar con una estimación de “lo más probable” y luego computar los rangos usando multiplicadores predefinidos, tal como
se muestra en la siguiente tabla:
Tabla 3 - Error de estimación por actividad de desarrollo de software
Error de alcance
Error posible en el Error posible en el
Rango de estimaciones
Fase
lado inferior
lado superior
Concepto inicial
0.25x (-75%)
4x (+300%)
16x
Definición del producto aprobada
0.50x (-50%)
2x (+100%)
4x
Requerimientos completos
0.67x (-33%)
1.5x (+50%)
2.25x
Diseño de interfaz de usuario completo
0.80x (-20%)
1.25x (+25%)
1.6x
0.90x (-10%)
1.10x (+10%)
1.2x
Diseño detallado completo (para proyectos
secuenciales)
inferiores y superiores
Fuente: Adaptado de Software Estimation with Cocomo II (Boehm, 2000).
Si se usan los valores de esta tabla, debe reconocerse que en el punto en el que se crea la estimación se desconoce si la
salida actual del proyecto caerá en el límite superior o en el límite inferior del rango.
Una segunda estrategia está basada en el hallazgo de que la habilidad para “saber cuánto” y la habilidad para “saber qué tan
incierto” son dos habilidades diferentes. Se puede tener una persona que estime el mejor y peor caso del rango y una segunda
persona que estime la probabilidad de que el resultado actual caiga en dicho rango.
3.1.5.3 Relación entre el cono de incertidumbre y el compromiso
Las organizaciones de software rutinariamente sabotean sus propios proyectos haciendo compromisos demasiado pronto en
el cono de incertidumbre. Si se realiza un compromiso en las fases del concepto inicial o la definición del producto, se tendrá
un factor de error de 2x a 4x en las estimaciones. Un administrador de proyectos habilidoso puede navegar el proyecto hasta
terminarlo si la estimación está dentro del 20% de la realidad del proyecto. Pero ningún administrador puede llevar a buen
puerto un proyecto cuando las estimaciones son erróneas por un porcentaje de cientos.
23
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
No es posible realizar compromisos significativos en la parte temprana y ancha del cono. Las organizaciones efectivas
retrasan sus compromisos hasta que han realizado el trabajo necesario para forzar que el cono se haga más angosto. Los
compromisos significativos en la parte media del proyecto (cerca del 30% del camino recorrido) son posibles y apropiados.
3.1.5.4 El cono de la incertidumbre y el desarrollo iterativo
El cono de incertidumbre está más relacionado con proyectos iterativos que lo que puede estar con proyectos secuenciales.
Si se está trabajando en un proyecto que realiza un ciclo completo de desarrollo en cada iteración se tendrá un cono “miniatura”
en cada iteración. Antes de que se realice el trabajo de requerimientos para la iteración, se estará en el punto de la definición
del producto aprobada en el cono, sujeto a una variabilidad de 4x en las estimaciones del extremo bajo al alto del cono. Con
iteraciones cortas (menos de un mes), se puede mover de la definición del producto aprobada a los requerimientos completos
y diseño terminado de interfaz de usuarios en unos pocos días, reduciendo la variabilidad de 4x a 1.6x. Si el cronograma es
inmovible, la variabilidad de 1.6x aplicará para las características que se pueden entregar en el tiempo disponible, en lugar
del esfuerzo o duración.
Lo que se sacrifica con estrategias que dejan los requerimientos sin definir hasta el inicio de cada iteración es la certeza y
precisión acerca de la combinación de costo, duración y características que se entregarán en las iteraciones que están por
delante.
La alternativa a iteración total no es no tener iteraciones. Se ha encontrado que es casi universalmente inefectiva. Las
alternativas son menos iteraciones o diferentes iteraciones.
Muchos equipos de desarrollo han encontrado un término medio en el cual la mayoría de los requerimientos son definidos al
inicio del proyecto, pero el diseño, la construcción, pruebas y liberación son llevados a cabo en cortas iteraciones. En otras
palabras, el proyecto se mueve secuencialmente a través del hito de diseño terminado de interfaz de usuario (cerca del 30%
del tiempo del calendario del proyecto) y luego se cambian a una estrategia iterativa desde ese punto en delante. Esto reduce
la variabilidad existente en el cono cerca de +-25%, lo que permite controlar el proyecto lo suficiente para conseguir el objetivo
mientras se obtienen beneficios del desarrollo iterativo. Los equipos de proyecto pueden dejar alguna cantidad de tiempo
planeado para requerimientos por definir al final del proyecto. Lo anterior introduce algo de variabilidad relacionada con el
conjunto de funciones, lo cual, en este caso, es positivo porque se empleará solamente si se identifican funciones deseables
para implementar. Este término medio soporta un amplio rango de predictibilidad de costo y duración así como una cantidad
moderada de flexibilidad en requerimientos.
3.1.6 Las estimaciones y el control de proyectos
Algunas veces cuando la gente discute la estimación de software se trata a la estimación como una actividad puramente
predictiva. La gente se comporta como si el estimado fuera hecho por un estimador imparcial, sentado en algún lugar en el
espacio exterior, desconectado de la planeación del proyecto y la priorización de actividades.
24
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
En realidad, hay muy poco de pureza en una estimación de software. Si alguna vez ha querido un ejemplo del principio de
incertidumbre de Heisenberg aplicado a software, sería la estimación. El principio de incertidumbre de Heisenberg es la idea
de que el mero acto de observar una cosa la cambia, de tal forma que nunca se estará seguro de cómo se hubiera comportado
esa cosa si no se le hubiere estado observando). Una vez que hacemos una estimación y, sobre las bases de dicho estimado,
hacemos un compromiso para entregar funcionalidad y calidad en una fecha determinada, entonces controlamos el proyecto
para alcanzar el objetivo. Las actividades típicas de control del proyecto incluyen la remoción de requerimientos no críticos, la
redefinición de requerimientos, el reemplazo de personal menos experimentado con personal más experimentado, entre otras.
La siguiente figura ilustra dicha dinámica:
Además de las actividades de control del proyecto, los proyectos a menudo son afectados por eventos externos imprevistos.
El equipo del proyecto podría necesitar crear una liberación intermedia para soportar u cliente clave. El personal podría ser
distraído para soportar una aplicación antigua, entre otras cosas.
Los eventos que ocurren durante un proyecto casi siempre invalidan las suposiciones que fueron empleadas para estimar el
proyecto. Las suposiciones de funcionalidad cambian, las suposiciones de personal cambian y las prioridades cambian. Se
vuelve imposible realizar una evaluación analítica clara de si el proyecto fue estimado de forma precisa, puesto que el proyecto
de software que ha sido entregado no es el proyecto que fue originalmente estimado.
En la práctica, si se entrega un proyecto con el nivel de funcionalidad esperado, usando el nivel de recursos planeado, dentro
del tiempo establecido, entonces típicamente se dice que el proyecto “cumple sus estimados”, a pesar de todas las impurezas
analíticas implícitas en dicho enunciado.
3.1.7 Factores a considerar al realizar estimaciones
Al igual que los ciclos de vida del software, los modelos de procesos y metodologías, la elaboración de una estimación siempre
dependerá del contexto, por lo tanto, siempre será recomendable adaptar cualquier proceso, técnica o método de estimación
25
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
a la situación particular en la que se empleará. Lo anterior significa que es importante tener claro cuál es el propósito de la
estimación, en qué etapa se está realizando, quien o quienes la están elaborando, con qué información se cuenta y qué otros
procesos dependen de la información que se generará.
Algunos proyectos determinan sus características y luego se enfocan en estimar la duración y el esfuerzo requeridos para
entregar dichas características. Otros proyectos determinan sus presupuestos y tiempo de desarrollo y luego se enfocan en
cuántas características pueden entregar.
Muchas técnicas de estimación son aplicables independientemente de lo que se está estimando; algunas pocas técnicas
funcionan mejor para estimar cuánto esfuerzo requerirá un proyecto, cuánto durará un proyecto o cuántas características
pueden ser entregadas.
Al seleccionar un proceso, técnica o método de estimación deben considerarse los siguientes factores:
3.1.7.1 El tamaño del proyecto
El tamaño del proyecto es un factor importante a considerar al elegir una técnica o método de estimación. Debido a que el
dimensionamiento de un proyecto puede variar dependiendo de cada compañía, grupo o persona, en este documento no se
establecen nombres o definiciones puntuales de tamaño, sin embargo, los siguientes son algunos de los criterios que pueden
considerarse para establecer el tamaño de un proyecto y que finalmente tendrán influencia en la decisión de la mejor técnica
o método de estimación:
Duración del proyecto
Número de personas que conformarán el equipo del proyecto
Tamaño del software que se va a construir o modificar.
Propósito del proyecto, es decir, crear un nuevo programa computacional o modificar uno existente.
3.1.7.2 La forma de medir el tamaño de la aplicación
La forma en que se mida el tamaño de la aplicación tendrá influencia importante en la decisión de qué método o técnica debe
emplearse para estimar, lo anterior debido a que diferentes métodos y técnicas aplican para diferentes unidades de medida
del tamaño, por ejemplo, el método de análisis de puntos de función se emplea para medir las funciones que realizará la
aplicación y no puede ser empleado para contar o estimar el número de líneas de código de la misma.
3.1.7.3 El ciclo de vida
Es muy común que en los proyectos de software se realicen estimaciones al inicio del proyecto, o previo al inicio del proyecto,
sin embargo es importante que durante el proyecto se realicen estimaciones que permitan ir incrementando la certidumbre de
la duración, costos, esfuerzo y tamaño originalmente estimados. Por lo anterior, es importante que, dependiendo del ciclo de
vida seleccionado se determine cuántas estimaciones se realizarán y qué métodos o técnicas se emplearán en cada etapa.
26
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.1.7.4 El propósito del proyecto
El propósito del proyecto es uno de los factores más importantes a considerar al estimar, para términos de este documento
se identifican los siguientes propósitos genéricos para un proyecto de software:
Desarrollar una nueva aplicación (nuevo desarrollo)
Modificar una aplicación existente (mantenimiento)
Implementación de una aplicación (instalación y configuración de la aplicación)
Migración de una aplicación (movimiento de la aplicación de un ambiente a otro)
Actualización de una aplicación (actualización de la aplicación de una versión a otra más nueva)
En cada uno de los casos anteriores el método o técnica de estimación puede, y debe, variar. Por ejemplo, muy probablemente
una estimación de proyecto en los dos primeros casos esté basada en el tamaño de lo que se va a construir, sin embargo, en
los tres últimos casos (implementación, migración y actualización) la estimación tenga que estar basada en los entregables
del proyecto y las actividades que deben realizarse para instalarlos, diseñarlos, construirlos, configurarlos o probarlos.
3.1.7.5 La tecnología empleada
La tecnología empleada siempre será un factor importante a considerar sobre todo si se toma en cuenta que la selección de
ésta puede facilitar o hacer más complejo el diseño, la construcción, las pruebas o la liberación de la aplicación. Las decisiones
arquitectónicas relacionadas con la tecnología siempre afectarán a la aplicación y al proyecto mismo, ya sea generando más
problemas que deben resolverse o reduciéndolos.
3.1.8 El proceso de estimar
Es importante comprender que cuando se realiza una estimación, las actividades asociadas a ésta se realizan como parte de
procesos o funciones de negocio que integran varios procesos. Siendo así, elaborar una estimación requerirá elementos de
entrada (insumos) y generará productos (salidas) que probablemente sean requeridos para otros procesos. En dicho contexto
se presenta el siguiente:
3.1.8.1 Proceso de estimación
A continuación se presenta un proceso de estimación propuesto, este proceso puede, y muy seguramente debe, ser
adaptado a las necesidades particulares de cada organización:
Insumos (entradas)
Actividades
Productos
- Alcance de la aplicación
1.
Identificar el propósito de la estimación
Estimación:
2.
Identificar el propósito del proyecto
Identificar el tamaño del proyecto
- Tamaño
3.
27
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
- Requerimientos de la
4.
Identificar el ciclo de vida
- Duración
aplicación
5.
Identificar la tecnología
- Restricciones de la
Seleccionar una o varias técnicas o métodos de estimación
- Esfuerzo
6.
aplicación y/o del proyecto
7.
Adaptar la(s) técnica(s) o método(s) de estimación (en caso de ser
8.
- Costo
necesario) seleccionado(s)
- Precio
Aplicar la(s) técnica(s) o método(s) de estimación seleccionado(s) y
- Recursos
adaptado(s)
9.
Validar la estimación
Herramientas
- Técnicas de estimación
- Métodos de estimación
- Información histórica
- Software de estimación
Roles
Estimador
El siguiente diagrama presenta algunos de los componentes del proceso de estimación.
Ilustración 6 – Algunos de los componentes del proceso de estimación
28
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.2 El tamaño del software
3.2.1 Introducción
En la industria de software mexicana es muy común hablar de la duración de un proyecto o de una actividad, inclusive se han
generalizado los conceptos de esfuerzo y costo, sin embargo, aunque estos parámetros son válidos y están relacionados con
las estimaciones de proyectos, podrían no ser muy útiles en proyectos de software si se estiman y emplean de forma aislada
sin considerar el tamaño del software que se va a construir.
¿Pero a qué se refiere entonces el tamaño de software y qué relación tiene con las estimaciones? El tamaño de software es
el atributo que permite determinar cuánto mide éste. Dicho atributo está estrechamente ligado con las estimaciones puesto
que representa la entrada principal requerida para determinar el esfuerzo, duración y costo de diseñarlo, construirlo, probarlo
y liberarlo.
Dado que el software es un bien intangible, puede llegar a ser complicado determinar cuál es su tamaño. Las dos unidades
de medida más comunes, generalmente empleadas y aceptadas para medir el tamaño del software son:
Las líneas de código
Los puntos de función, que no se refiere a otra cosa más que a las funciones del software.
Identificar el tamaño del software a través de cada una de estas unidades de medida tiene sus ventajas y desventajas, sin
embargo, si una organización logra estandarizar el método y la unidad de medida empleada para determinar el tamaño del
software a través de sus proyectos, la unidad de medida en sí misma será menos relevante que la información que podrá
obtenerse y que podrá ser de gran utilidad para estimar proyectos futuros, aplicaciones futuras, aplicaciones compradas,
productividad de los desarrolladores de software, entre otras cosas.
El tamaño del producto es el más grande contribuyente en el cronograma de un desarrollo. Los productos más grandes toman
más tiempo. Los productos más pequeños toman menos tiempo. Características adicionales requieren especificación, diseño,
construcción, pruebas e integración adicionales. Requieren coordinación adicional con otras características y requieren que
se coordinen otras características con ellas. Puesto que el esfuerzo requerido para construir software se incrementa
desproporcionadamente más rápido que el tamaño del software, una reducción en tamaño mejorará la velocidad de desarrollo
desproporcionadamente. Reducir el tamaño de un programa de tamaño medio a la mitad típicamente reducirá el esfuerzo
requerido en casi dos tercios.
Se puede reducir el tamaño del producto dejando para desarrollo solamente las características esenciales o se puede reducir
temporalmente desarrollando un producto en etapas. También se puede reducir desarrollando en un lenguaje o herramienta
de alto nivel de tal forma que cada característica requiera menos código.
29
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.2.2 Los componentes del software
Ya se habló del tamaño del software y cómo puede medirse, sin embargo, es muy importante comprender que no siempre los
métodos o modelos empleados por la mayoría funcionan para todo y para todos. Por lo anterior, es muy importante tener muy
claro cuáles son los componentes del software para que, en caso de ser necesario, puedan establecerse nuevos métodos de
medición del tamaño que funcionen para las necesidades de cada organización.
Dicho lo anterior, podríamos decir que los siguientes son algunos de los componentes más comunes e importante del software,
entendiendo software como un sistema compuesto por una aplicación y su documentación. El siguiente modelo, aunque es
extenso, no es limitativo:
Software
Aplicación
Pantallas
Controles
Etiquetas
Documentación
Componentes
Base de datos
Clases
Tablas
Archivos
De
requerimientos
De datos
De arquitectura
De configuración
De diseño
Métodos
Campos
Atributos
Registros
De pruebas
Variables
Índices
De liberación
Constantes
Interfaces
Procedimientos
almancenados
De usuario
Vistas
De instalación
Funciones
De configuración
Reglas
Disparadores
30
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Otros factores que deben considerarse y que están asociados con la aplicación son los siguientes:
Complejidad
Funcionalidad
Reglas de negocio
Algoritmos
Diseño (gráfico)
Atributos de calidad
o
Precisión
o
Escalabilidad
o
Extensibilidad
o
Seguridad
o
Usabilidad
o
Desempeño
o
Otros
Documentación (del código fuente)
Estándares de nomenclatura
Patrones de arquitectura y diseño empleados
Interfaces con otras aplicaciones
En conclusión, es muy importante conocer cómo está conformado un programa computacional y el software en general,
para poder determinar cómo puede medirse su tamaño.
3.2.3 Utilidad de la medición del tamaño del software
Medir el tamaño del software tiene muchas utilidades tales como:
Establecer nuevas estimaciones - Comparando la estimación del tamaño de una aplicación con el tamaño de
aplicaciones construidas previamente para determinar la duración, esfuerzo y costo de diseñarla y construirla.
Medir la densidad de defectos - Estableciendo la cantidad de defectos contenidos por unidad de medida del
tamaño.
Medir la productividad - Determinando la cantidad de producto (la aplicación) que puede generar un desarrollador
por unidad de tiempo (horas, por ejemplo).
Determinar el avance de construcción de la aplicación – Identificando el tamaño de producto (aplicación) que ya se
ha construido.
Seleccionar proveedores – Entregando el tamaño del software a construir, se pueden solicitar cotizaciones a
diferentes proveedores para seleccionar uno.
Establecer el precio del software – Se puede definir un precio por unidad de medida y con base en el tamaño
determinar el precio total de la aplicación.
31
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.3 Clasificación de las estimaciones
3.3.1 Introducción
Con la finalidad de comprender mejor las estimaciones, se presenta la siguiente clasificación:
Ilustración 7 - Clasificación de las estimaciones
3.3.2 Enfoques de estimación
Ilustración 8 – Clasificación de enfoques de estimación
Las estimaciones pueden clasificarse por su enfoque en:
De lo general a lo particular (Top-down)
De lo particular a lo general (Bottom-up)
3.3.1.1 Enfoque de lo general a lo particular (Top-down)
El enfoque de lo general a lo particular, también conocido como el modelo macro, se basa en dividir el alcance del proyecto y
el uso de promedios (ya sea específicos a la organización o a la industria) para estimar el costo y la complejidad asociados
con la implementación de las partes y sus interconexiones.
La característica distintiva del enfoque de lo general a lo particular es que se centra en las propiedades generales del sistema,
tales como la integración, gestión del cambio, y la entrega gradual, combinada con su relativa facilidad de aplicación. Sin
32
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
embargo, como se mencionó anteriormente, por su naturaleza, este enfoque no es tan bueno como el enfoque de lo particular
a lo general en la captura de los factores de menor nivel, como las cuestiones específicas de cada proyecto, las características
de diseño de aplicaciones, y detalles específicos de la implementación, que tienden a acumularse rápidamente y puede afectar
en gran medida la estimación.
3.3.1.2 Enfoque de lo particular a lo general (Bottom-up)
En los primeros días de la programación informática, la mayoría de las estimaciones de software se producían de forma
ascendente. Se contaban las líneas de código fuente escritas manualmente, que actuaban como una variable clave en las
estimaciones, para calcular el tamaño total del proyecto. La otra variable clave, que era igual de fácil de cuantificar, era la
productividad del desarrollador. La situación empezó a cambiar con la introducción de los diversos lenguajes de programación
(C, Pascal, Ada, Lisp, etc.), los paradigmas de programación (orientado a objetos, basado en plantillas, etc.), las arquitecturas
de hardware, plataformas y la capacidad de generación de código.
El enfoque de lo particular a lo general es generalmente considerado como más intuitivo y menos propenso a errores que el
enfoque de lo general a lo particular. En el caso de componentes bien aislados puede producir estimaciones muy precisas.
Sin embargo, usar solamente el enfoque de lo particular a lo general puede provocar que se pasen por alto limitaciones y
costos significativos a nivel sistema, especialmente cuando se emplea este enfoque en ausencia de suficientes datos de
requerimientos.
3.3.3 Técnicas de estimación
Ilustración 9 - Clasificación de técnicas de estimación
Las técnicas de estimación pueden categorizarse en:
Basadas en experiencia
Orientadas al aprendizaje
3.3.3.1 Técnicas de estimación basadas en experiencia
Las técnicas basadas en la experiencia o conocimiento se fundamentan en el juicio subjetivo de un experto, o grupo de
expertos, en la materia.
33
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
A diferencia de modelos paramétricos más estrictos, estas técnicas se basan principalmente en la experiencia y conocimiento
de los seres humanos, lo cual constituye su principal debilidad. Esta debilidad puede ser mitigada mediante la expansión del
tamaño del grupo de los estimadores.
3.3.3.2 Técnicas de estimación orientadas al aprendizaje
Diversos estudios indican que más de tres cuartas partes de las estimaciones de software se construyen utilizando algún tipo
de analogía o comparación con las soluciones previamente completadas, es decir, utilizan técnicas conocidas como orientadas
al aprendizaje. Aunque intuitivamente similares a las técnicas basadas en la experiencia, las técnicas orientadas al aprendizaje
toman un ángulo diferente. Su objetivo es encontrar un sistema similar producido en otros lugares y, a través de determinar
cómo las propiedades del nuevo sistema pueden variar con respecto al existente, extrapolar la estimación.
La ventaja más evidente de las técnicas de aprendizaje orientado es que la estimación se basa en las características probadas
y no sólo la evidencia empírica, como en el caso de la estimación basada en la experiencia. Una limitación de esta técnica es
la necesidad de determinar las variables más importantes que se utilizan para describir la solución, incluidas las que la
distinguen de la línea de base. Estos objetivos pueden ser difíciles o pueden consumir mucho tiempo para lograrse.
3.3.4 Métodos de estimación
Ilustración 10 - Clasificación de métodos de estimación
Las estimaciones pueden clasificarse por sus métodos en:
Algorítmicos
o
Matemáticos
o
Estadísticos
3.3.4.1 Métodos de estimación algorítmicos
Los métodos algorítmicos emplean modelos matemáticos (dirigidos por fórmulas). Toman métricas históricas, calculadas o
estadísticas, tales como líneas de código y el número de funciones, así como factores ambientales conocidos, tales como la
plataforma de programación, el marco de trabajo, la plataforma de hardware y la metodología de diseño, como sus insumos
34
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
para producir una estimación con un grado o rango conocido de precisión. Por su capacidad de aceptar diferentes métricas
estos métodos son también llamados a veces basados en métricas.
A diferencia de las técnicas no algorítmicas, los métodos algorítmicos pueden producir estimaciones repetibles, y son
relativamente fáciles de ajustar. Estos métodos, sin embargo, son también más sensibles a los datos de entrada inexactos y
pueden llegar a producir estimaciones muy pobres si no se calibran y validan correctamente. Además, estos métodos no
pueden abordar eficazmente circunstancias excepcionales, tales como personal altamente creativo o perezoso, o trabajo en
equipo excepcionalmente fuerte o pobre.
3.4 Técnica de juicio de experto
3.4.1 Introducción
La elaboración de estimaciones mediante el juicio de experto es una de las técnicas más empleadas en nuestra industria,
principalmente cuando se emplean enfoques que van de lo particular a lo general. En este documento se propone el uso del
juicio de experto en combinación con algunas técnicas de descomposición del alcance que permiten identificar los elementos
que van a ser estimados.
3.4.2 Descripción de la técnica
Técnica de estimación
Nombre:
Juicio de experto
Propósito:
Estimar empleando la experiencia de quien estima.
Enfoque:
De lo particular a lo general (Bottom-Up)
Qué estima:
Tamaño, duración, esfuerzo, costo, recursos
Procedimiento:
1.
Identificar qué se está solicitando o buscando (cumplir un objetivo, establecer un compromiso o
estimar)
2.
Identificar, de forma general, cuál es el entregable y/o actividades que se realizarán
(descomponer en caso de ser necesario)
3.
Identificar el propósito de la estimación (planear, re-planear, cotizar, otro)
4.
Identificar qué se está solicitando estimar (tamaño, duración, esfuerzo, costo o recursos)
5.
Solicitar información adicional en caso de ser necesario
6.
Resolver dudas en caso de ser necesario
7.
Revisar registros de estimaciones previas (para seleccionar alguna en caso de que pueda ser
comparable con la actual)
8.
Estimar
9.
Registrar y almacenar valores estimados
35
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
10. Registrar y almacenar suposiciones y razonamientos hechos al estimar
11. Validar estimación
12. Presentar estimación (preferentemente como un rango)
3.5 Técnica Delphi
3.5.1 Introducción
En la técnica Delphi, a un grupo de expertos en la materia se le pide que haga la evaluación de un problema. Durante la ronda
inicial de estimación, cada experto ofrece su evaluación individual y sin consultar a los demás. Después de los resultados de
la ronda inicial se recogen y se clasifican, los participantes se involucran en una segunda ronda de análisis, esta vez con la
información sobre las evaluaciones realizadas por otros participantes. Durante esta ronda se espera reducir la amplitud de los
números, mientras que algunos elementos son considerados para obtener mayor detalle, otros son descartados. Después de
unas cuantas rondas, el equipo llega a una estimación mutuamente acordada.
3.5.2 Descripción de la técnica
Técnica de estimación
Nombre:
Delphi
Propósito:
Estimar empleando la experiencia varios estimadores.
Enfoque:
De lo particular a lo general (Bottom-Up)
Qué estima:
Tamaño, duración, esfuerzo, costo, recursos
Procedimiento:
1.
Reunir a los estimadores
2.
Establecer / comunicar el propósito de la estimación (planear, re-planear, cotizar, otro)
3.
Establecer / comunicar el entregable o actividades que se estimarán
4.
Establecer / comunicar qué se está solicitando estimar (tamaño, duración, esfuerzo, costo o
recursos)
5.
Proporcionar a los estimadores cualquier información que sea relevante
6.
Resolver dudas de los estimadores
7.
Estimar (cada estimador es responsable de hacerlo)
8.
Solicitar a cada estimador su estimación, sin mostrarla a los demás
36
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
9.
Clasificar las estimaciones
10. Entregar la información recolectada y clasificada
11. Detallar información que sea necesaria y descartar la que no
12. Repetir los pasos del 7 al 11 hasta llegar a una estimación mutuamente acordada
13. Registrar y almacenar valores estimados
14. Registrar y almacenar suposiciones y razonamientos hechos al estimar
3.6 Método de contar, calcular, juzgar
3.6.1 Introducción
Este método consiste en encontrar algún elemento que se pueda contar y que esté altamente relacionado con el tamaño de
la aplicación que se está estimando. Una vez que se hayan contado los elementos de la aplicación multiplíquelos por una
medida de tiempo unitaria. En caso de que no se puedan contar elementos entonces emplee el juicio de experto.
3.6.2 Descripción del método
Método de estimación
Nombre:
Contar, calcular, juzgar
Propósito:
Estimar descomponiendo el objeto que se va a estimar
Enfoque:
De lo particular a lo general (Bottom-Up)
Qué estima:
Tamaño, duración, esfuerzo, costo, recursos
Procedimiento:
1.
Identificar qué se está solicitando o buscando (cumplir un objetivo, establecer un compromiso o
estimar)
2.
Identificar, de forma general, cuál es el entregable y/o actividades que se realizarán
(descomponer en caso de ser necesario)
3.
Identificar el propósito de la estimación (planear, re-planear, cotizar, otro)
4.
Identificar qué se está solicitando estimar (tamaño, duración, esfuerzo, costo o recursos)
5.
Solicitar información adicional en caso de ser necesario
6.
Resolver dudas en caso de ser necesario
7.
Revisar registros de estimaciones previas (para seleccionar alguna en caso de que pueda ser
comparable con la actual)
8.
Identificar y contar los elementos que van a generarse (pantallas, reportes, tablas, etc.)
37
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
9.
Establecer un valor unitario para cada elemento con base en información histórica (duración,
esfuerzo, costo, recursos) (emplear juicio de experto como último recurso)
10. Calcular los valores totales para cada elemento
11. Registrar y almacenar valores estimados
12. Registrar y almacenar suposiciones y razonamientos hechos al estimar
13. Validar estimación
14. Presentar estimación (preferentemente como un rango)
3.7 Método de análisis de puntos de función
3.7.1 Introducción
Un punto de función es una medida sintética del tamaño de un programa computacional que es a menudo usada en las etapas
tempranas de un proyecto. Los puntos de función son más fáciles de determinar de una especificación de requerimientos que
las líneas de código y proveen una medida más exacta del tamaño de un programa. Existen diferentes métodos para contar
puntos de función.
El análisis de puntos de función es un método estándar para medir el desarrollo de software desde el punto de vista del
usuario. Mide el software cuantificando la funcionalidad que provee al usuario con base en el diseño lógico.
El número de puntos de función en un programa está basado en el número y complejidad de cada uno de los siguientes
elementos:
Entradas – Pantallas, formas, cajas de dialogo, controles o mensajes a través de los cuales un usuario final u otro
programa agrega, elimina o cambia datos del programa. Esto incluye cualquier entrada que tiene un formato único o
una lógica de procesamiento única.
Salidas – Pantallas, reportes, gráficas o mensajes que el programa genera para ser usado por un usuario final u otro
programa. Esto incluye cualquier salida que tenga un formato diferente o requiera una lógica de procesamiento
diferente que otros tipos de salidas.
Consultas – Combinaciones de entrada / salida en las cuales una entrada resulta en una salida simple e inmediata.
El término se originó en el mundo de bases de datos y se refiere a la búsqueda directa de datos específicos,
usualmente empleando una llave única. En las aplicaciones modernas con interfaces gráficas de usuario (GUI –
Graphic User Interface por sus siglas en inglés), la línea entre las consultas y las salidas es borrosa; generalmente,
sin embargo, las consultas regresan datos directamente de una base de datos y proveen formato rudimentario,
mientras que las salidas pueden procesar, combinar o resumir datos complejos y pueden ser altamente formateadas.
38
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Archivos lógicos internos – Grupos lógicos más importantes de datos de usuario final o información de control que
está completamente controlada por el programa. Un archivo lógico puede estar compuesto de un archivo plano o una
tabla de una base de datos relacional.
Archivos lógicos externos – Archivos controlados por otros programas con los cuales el programa que está siendo
contado interactúa. Esto incluye cada grupo lógico importante de datos o información de control que entra o deja el
programa.
La terminología empleada en el análisis de puntos de función está muy orientada a las bases de datos. El método básico
funciona bien para todos los tipos de software, pero se tendrá que adaptar a cada ambiente si es que no se están construyendo
sistemas con uso intensivo de base de datos.
El procedimiento para contar el tamaño de un programa mediante el análisis de puntos de función se muestra a continuación.
3.7.2 Procedimiento
1.
Determinar el tipo de conteo.
2.
Identificar el alcance, propósito y límites de la aplicación.
2.1. Identificar el alcance (pantallas, descripciones, necesidades de negocio, casos de uso de negocio, requerimientos
de negocio, etc.).
2.2. Identificar el propósito del conteo (opcional. Ayuda a enfocar y entender el objetivo del conteo)
2.3. Identificar los límites (identificar y diferenciar otras aplicaciones, actores).
3.
Contar las funciones de datos.
3.1. Identificar y contar los almacenamientos lógicos (ILF o EIF). ILF si es mantenido por la aplicación, EIF si no es
mantenido por la aplicación. (no incluir tablas temporales, índices o catálogos que solo tienen un identificador y
una descripción).
3.1.1. Determinar la complejidad de cada almacenamiento lógico contando los elementos de datos (DETs y RETs).
3.2. Determinar la contribución de cada almacenamiento lógico, medida en puntos de función con base en la tabla 1 y
tabla 2 (usar ambas tablas solo para nuevos desarrollos).
4.
Contar las funciones transaccionales.
4.1. Identificar y contar los procesos elementales clasificándolos en funciones transaccionales (EI, EQ, EO).
4.1.1. Determinar la complejidad de cada función transaccional contando los elementos de datos (DETs FTRs).
4.1.2. Determinar la contribución de cada función transaccional, medida en puntos de función con base en la tabla
3, tabla 4 y tabla 5 (usar las 3 tablas solo para nuevos desarrollos). Ver los criterios de conteo en la
definición de DETs para funciones transaccionales.
5.
Determinar los puntos de función no ajustados.
5.1. Sumar los puntos de función de las funciones de datos y funciones transaccionales.
6.
Determinar el valor del factor de ajuste. Ver también la tabla 6.
39
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
7.
Determinar los puntos de función ajustados. (Puntos de función ajustados = Puntos de función no ajustados x valor del
factor de ajuste).
El siguiente diagrama presenta algunos de los componentes del método:
Ilustración 11 - Algunos de los componentes del método de análisis de puntos de función
3.7.3 Tablas
3.6.3.1 Tabla 1 - Complejidad de funciones de datos
Tabla para determinar la complejidad de las funciones de datos.
RET\DET
1-19
20-50
50+
1
Baja
Baja
Media
2-5
Baja
Media
Alta
6+
Media
Alta
Alta
3.6.3.2 Tabla 2 – Puntos de función para datos
Puntos de función correspondientes a funciones de datos de acuerdo a su complejidad.
Función de
Baja
Media
Alta
datos
40
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
ILF
7
10
15
EIF
5
7
10
3.6.3.3 Tabla 3 – Complejidad de entradas externas
Tabla para determinar complejidad de External Input (EI).
FTR\DET
1-4
5-15
16+
0-1
Baja
Baja
Media
2
Baja
Media
Alta
Media
Alta
Alta
3+
3.6.3.4 Tabla 4 – Complejidad de consultas y salidas externas
Tabla para determinar complejidad de External Inquiry (EQ) y External Output (EO).
FTR\DET
1-4
5-15
16+
0-1
Baja
Baja
Media
2-3
Baja
Media
Alta
4+
Media
Alta
Alta
3.6.3.5 Tabla 5 – Puntos de función para transacciones
Puntos de función correspondientes a funciones transaccionales.
Función
Baja
Media
Alta
transaccional
EI
3
4
6
EQ
3
4
6
EO
4
5
7
3.6.3.6 Tabla 6 – Características generales del sistema
Cada característica tiene descripciones asociadas que ayudan a determinar los grados de influencia de dichas características.
Los grados de influencia varían en una escala de cero a cinco, desde "ninguna influencia" hasta "fuerte influencia".
Característica general del sistema
1
Comunicaciones de datos
Descripción
¿Qué tanta infraestructura de comunicación existe para ayudar en la
transferencia o intercambio de información con la aplicación o
sistema?
41
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
2
Procesamiento de datos distribuido
¿Cómo son manejados los datos y funciones de procesamiento
distribuidos?
3
Desempeño
¿Algún valor de tiempo de respuesta o desempeño del procesamiento
fue requerido por el usuario?
4
Configuración intensa de uso
¿Qué tan intensamente es usada la plataforma de hardware actual en
dónde será ejecutada la aplicación?
5
Promedio de transacciones
¿Qué tan frecuentemente son ejecutadas las transacciones?
(diariamente, semanalmente, diariamente, etc.)
6
Entrada de datos en línea
¿Qué porcentaje de la información es introducida en línea?
7
Eficiencia del usuario final
La aplicación fue diseñada para tener eficiencia del usuario final?
8
Actualización en línea
¿Qué tantos ILFs son actualizados por transacciones en línea?
9
Procesamiento complejo
¿La aplicación tiene procesamiento lógico y matemático intensivo?
Reusabilidad
¿La aplicación fue desarrollada para cumplir una o más necesidades
10
de usuario?
11
Facilidad de instalación
¿Qué tan difícil es la instalación?
12
Facilidad de operación
¿Qué tan efectivos y/o automatizados son los procedimientos de
arranque, respaldo y recuperación?
13
Sitios múltiples
¿La aplicación fue diseñada, desarrollada y soportada para ser
instalada en múltiples sitios para múltiples organizaciones?
14
Facilidad de cambio
¿La aplicación fue diseñada, desarrollada y soportada para facilitar los
cambios?
42
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.7.4 Diagramas de UML
3.7.4.1 Diagrama 1 – Elementos considerados para el conteo
43
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.7.5 Catálogos
37.5.1 Tipo de conteo
Nuevo desarrollo y mejoras.
Implementación y adquisición de paquetes de software (productos comerciales ya hechos).
Mantenimientos.
3.7.5.2 Propósitos del conteo
Estimar (esfuerzo, duración, tamaño, costo, etc.).
Controlar el crecimiento del tamaño durante el desarrollo del producto.
Evaluar productividad.
Controlar la cantidad de producto que es fabricado a lo largo del proyecto.
3.7.5.3 Almacenamientos lógicos (funciones de datos)
ILF – Internal Logical File.
EIF – External Interface File.
3.7.5.4 Elementos de datos
DET – Data Element Type
RET – Record Element Type
3.7.5.5 Funciones transaccionales
EI (External Input)
EQ (External Inquiry)
EO (External Output)
44
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.7.6 Términos asociados con el método
3.7.6.1 Almacenamientos lógicos (funciones de datos)
Se clasifican en ILF (Internal Logical File) y EIF (External Interface File).
También conocidos como entidades de información, deben identificarse en cuanto a que sean totalmente independientes y
que tengan un significado para el usuario. Por ejemplo, índices, tablas temporales son considerados almacenamientos
técnicos creados con propósitos de implementación y no contribuyen al tamaño funcional de la aplicación. Así mismo,
catálogos que contienen sólo un ID y una descripción, son almacenamientos considerados como “Code Table” y tampoco
tendrán una contribución en el tamaño funcional. El punto clave para agrupar los almacenamientos lógicos, es verificando la
dependencia entre ellos. Una pregunta clave, es respondernos si dicho almacenamiento puede existir de manera aislada, o si
para tener significado debe formar parte de otro almacenamiento. Por ejemplo: Si se define la tabla de empleado, y la tabla
telefonos_empleado, ambas son consideradas como un solo almacenamiento lógico, ya que telefonos_empleado no tiene
significado por sí sola.
Otra forma de ver esta independencia, por ejemplo, es reflexionando lo siguiente, si desaparece un registro de la tabla de
empleado ¿tiene sentido para el negocio conservar el registro asociado en telefonos_empleado?. Si la respuesta es positiva,
entonces se considera que cada entidad puede existir de manera independiente y por lo tanto serán dos almacenamientos
lógicos. Por el contrario, si la respuesta es negativa, los almacenamientos no existen de manera independiente, y por lo tanto
son un solo almacenamiento lógico.
3.7.6.2 ILF – Internal Logical File.
Es un tipo de almacenamiento lógico. Será ILF si dicho almacenamiento es mantenido por al menos una función transaccional
dentro de la aplicación se está contando.
3.7.6.3 EIF – External Interface File.
Es un tipo de almacenamiento lógico. Será un EIF si dicho almacenamiento es UNICAMENTE referenciado y no mantenido
por la aplicación que se está contando.
3.7.6.4 DETs (Data Element Types) (para funciones de datos)
Esta definición aplica para las funciones de datos.
Son los campos de datos únicos e identificables por el usuario. Ayudan a identificar la complejidad de un almacenamiento
lógico.
3.7.6.5 DETs (Data Element Types) (para funciones transaccionales)
Esta definición aplica para las funciones transaccionales.
Son los campos únicos de información que son identificables por el usuario y que entran o salen de la función transaccional.
Ayudan a identificar la complejidad de una función transaccional. A continuación se presentan algunos criterios para contar
los DETs en funciones transaccionales:
45
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Para ser contado, el DET debe entrar o salir de la aplicación, es decir, un campo que sea utilizado internamente y
que no entre o salga de la aplicación no es contado como DET.
Las etiquetas, nombres de campo, nombres de columna y variables de sistema como (fecha de sistema, número de
página, número de columna, etc.) no son contados.
En aplicaciones on-line, se cuenta 1 DET para la capacidad de ejecución sin importar de cuantas formas distintas se
pueda ejecutar el proceso elemental. Por ejemplo, si se puede ejecutar la función de “Insertar empleado” presionando
el botón “Guardar” o presionando Ctrl-G o dando clic en una opción de menú, sólo se cuenta un DET por la capacidad
para ejecutar dicha función.
En aplicaciones on-line, se cuenta 1 DET para la capacidad de envío de mensajes, sin importar cuantos mensajes
sean enviados dentro de la misma función transaccional. Por ejemplo, en la función “Insertar empleado”, por ejemplo,
podrían hacerse diversas validaciones sobre cada uno de los datos capturados (longitud del campo, formato de la
fecha, etc.), sin importar cuantas validaciones sean realizadas, sólo se contará un DET por la capacidad de generar
mensajes en dicha función transaccional.
Contar los drop-downs (combo boxes) como procesos elementales. Contar 1 DET por la capacidad de ejecución
(cuando se presiona la flechita y se despliega el combo box) y un DET por dato mostrado en el combo (se cuentan
los campos, no los registros. Normalmente será un DET – campo por combo box).
3.7.6.6 RETs (Record Element Types)
Son los subgrupos de datos en el mismo almacenamiento y que son identificables por el usuario, cuando en el almacenamiento
no hay subgrupos de datos, se considera que el almacenamiento tiene un solo RET. Ayudan a identificar la complejidad de un
almacenamiento lógico.
3.7.6.7 FTRs (File Type Referenced)
Son las funciones de datos que son mantenidas y/o referenciadas por una función transaccional.
3.7.6.8 Proceso elemental
Es la unidad mínima de actividad significativa al usuario, que deja al negocio en un estado consistente y es autocontenido.
3.7.6.9 Función transaccional
Es un tipo particular de proceso elemental que se define con base en las responsabilidades que le son asignadas. La
complejidad de las funciones transaccionales depende del número de DETs y FTRs.
3.7.6.10 EI (External Input)
Es un tipo de función transaccional. Si el propósito principal de la función es recibir información para administrar (crear,
modificar, eliminar) un almacenamiento, el tipo de función será EI.
46
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.7.6.11 EQ (External Inquiry)
Es un tipo de función transaccional. Si el propósito principal fuera sólo presentar información y no realizar algún
procesamiento adicional, la función es clasificada como EQ.
3.7.6.12 EO (External Output)
Es un tipo de función transaccional. Si el propósito principal es presentar información y además realizar algún
procesamiento adicional (como cálculos matemáticos, derivación de datos, etc.) entonces la función se clasifica como un
EO.
3.7.6.13 Factor de ajuste
El factor de ajuste (VAF - value adjustment factor) puede aumentar o disminuir el valor de los puntos de función en un +/- 35%.
Las características evaluadas para determinar el valor de ajuste se refieren a requerimientos o restricciones no funcionales,
como: comunicaciones de datos, actualización online, complejidad de procesamiento, facilidad de instalación, etc.
Si la calificación de estos factores ambientales es el mínimo, el valor de ajuste será 0.65. Por el contrario, si los factores
ambientales son los más complicados, el valor de ajuste será 1.35.
El valor del factor de ajuste está basado en 14 características generales del sistema (GSCs - General System Characteristics)
que califican la funcionalidad general de la aplicación que se está contando. Cada característica tiene descripciones asociadas
que ayudan a determinar los grados de influencia de dichas características. Los grados de influencia varían en una escala de
cero a 5, desde "ninguna influencia" hasta "fuerte influencia".
3.8 Uso de información histórica para mejorar las estimaciones
3.8.1 Introducción
Un elemento clave para mejorar las estimaciones siempre será la información histórica real que represente el desempeño de
un proyecto. Para poder emplear información histórica y mejorar las estimaciones se vuelve imperante recolectar la
información necesaria durante un proyecto. Dicha información no solamente servirá como entrada al proceso de estimaciones,
sino que muy seguramente representará información útil para medir el desempeño de un proyecto durante sus procesos de
monitoreo y control.
Aunque un objetivo inicial pudiera ser mejorar las estimaciones a nivel individual, en algún momento será necesario contar
con información a nivel proyecto, e inclusive a nivel de cartera de proyectos con el objetivo de monitorear y controlar los costos
(duración y esfuerzo) de dichos proyectos. Es aquí cuando la estandarización, de procesos y herramientas, se vuelve relevante
y otro elemento clave en la ecuación.
Esta sección presenta un modelo ya probado que permite la recolección y almacenamiento de información en proyectos para
que pueda ser empleada como entrada para nuevas estimaciones.
47
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
3.8.2 Un modelo para obtener información histórica en proyectos de software
3.8.2.1 Introducción
Como ya se mencionó anteriormente, el uso de información histórica es clave para mejorar las estimaciones de proyectos de
software. En esta sección se presenta un modelo probado que permite la recolección y uso de información de tamaño,
duración, esfuerzo y costo de aplicaciones y proyectos para que, además de ser usada como información histórica, permita
incrementar el conocimiento de la organización, principalmente en el desempeño de sus proyectos.
3.8.2.2 Modelo
A continuación se presenta el modelo propuesto para recolectar, almacenar y emplear información histórica de proyectos:
Ilustración 12 - Modelo de recolección, almacenamiento y uso de información histórica para estimaciones
A continuación se describen algunos de los elementos clave del modelo:
Estimación
o
Representa la información de tamaño, duración, esfuerzo y costo aproximados de un nuevo proyecto o
aplicación.
o
Emplea, para fines comparativos o de generación de nueva información, la información histórica
almacenada en el repositorio organizacional de métricas.
Proyecto
48
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
o
Durante éste se recolecta la información necesaria real acerca de su duración, esfuerzo y costo, así como
del tamaño de la aplicación.
o
esfuerzo y costo, comparado con lo originalmente estimado.
Registro de métricas del proyecto
o
Este registro contiene la información consolidada, y probablemente detallada, de la duración, esfuerzo y
costo del proyecto, así como del tamaño de la aplicación.
Repositorio organizacional de métricas
o
Durante el proyecto también se genera la planeación, que permite tener mayor detalle acerca de la duración,
Contiene la información consolidada de duración, esfuerzo y costo de todos los proyectos de la organización,
así como el tamaño de todas las aplicaciones generadas o modificadas.
Herramienta de registro de horas (timesheet)
o
Permite el registro de las horas dedicadas a alguna actividad, que a su vez, una vez que se sumen,
representarán las horas dedicadas a un entregable y, estas a su vez, representarán las horas dedicadas a
una fase; así entonces, la suma de las horas dedicadas a una fase representarán las horas dedicadas al
proyecto. Para comprender mejor lo anteriormente mencionado, vea la siguiente figura.
Cronograma (y su estructura jerárquica)
o
Además de que contiene la programación de actividades del proyecto, al final del mismo contendrá la
información real de avance, duración y probablemente esfuerzo y costo de todo el proyecto (siempre y
cuando se haya mantenido actualizado).
o
Para poder asegurar el uso de la información de duración, esfuerzo y costo en futuras estimaciones, se
sugiere que se estandarice la estructura jerárquica (WBS – Work Breakdown Structure) de los cronogramas,
tal y como se muestra en la siguiente ilustración.
Aplicación
o
La aplicación construida o modificada aportará el tamaño real de la misma al finalizar el proyecto. Para
poder conocer el tamaño de la aplicación habrá que emplear algún método como por ejemplo el análisis de
puntos de función.
Sistema de costos estándar
o
El sistema de costos estándar, contablemente hablando, es el sistema empleado por la organización para
determinar los costos originados por la producción (desarrollo) del software o de cualquier otro producto o
servicio que ofrezca la empresa.
El siguiente diagrama representa la estructura jerárquica propuesta para estandarizar los cronogramas, así como la
herramienta de registro de actividades (timesheet). Es importante que ambas herramientas (cronograma y timesheet) estén
construidos bajo la misma estructura para asegurar la integridad y homogeneidad de la información a lo largo del ciclo de vida
de los proyectos y la organización en sí.
49
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Ilustración 13 - Estructura jerárquica propuesta para estandarización de cronogramas y timesheet
3.8.2.3 Proceso de implementación del modelo
A continuación se presenta un proceso que permite implementar un modelo que facilita la recolección, almacenamiento y uso
de información del desempeño de proyectos y aplicaciones.
Insumos (entradas)
Actividades
- Procesos de desarrollo de
1.
Estandarizar 3 los procesos relacionados con el desarrollo de software Información de
software de la empresa
2.
Estandarizar la herramienta para recolección de horas en proyectos
tamaño,
(timesheet)
duración,
3.
Estandarizar la estructura jerárquica de los cronogramas
esfuerzo y costo
4.
Elaborar cronogramas con base en la estructura jerárquica
del proyecto
- Estructura jerárquica de
cronogramas
Productos
estandarizada
5.
Recolectar información de horas en la herramienta estandarizada de
recolección de horas (timesheet)
Para efectos de este proceso, estandarizar significa definir e implementar, a nivel organización, y luego usar, a nivel proyecto, el elemento
mencionado.
3
50
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
6.
Registrar, durante o al finalizar cada proyecto, la información
consolidada real de tamaño (de la aplicación), duración (del proyecto),
esfuerzo y costo.
7.
Almacenar la información consolidada real de tamaño, duración,
esfuerzo y costo.
8.
Analizar y emplear la información consolidada real de proyectos.
Herramientas
- Herramienta de registro de horas (timesheet)
Roles
Responsables de procesos
Administradores de proyectos
Miembros de equipos de proyectos
Gerente de desarrollo u oficina de proyectos
51
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
4. Glosario
Actividad
(1) Serie de pasos llevados a cabo para ejecutar un proceso. (ABPMP, 2009)
(2) Un componente de trabajo llevado a cabo durante el curso de un proyecto. (PMI, 2008)
(3) Trabajo que una compañía u organización lleva a cabo usando procesos de negocio. Una actividad puede ser atómica o
no atómica (compuesta). Los tipos de actividades que son parte de un modelo de procesos son: procesos, subprocesos y
tareas. (OMG, 2011)
(4) Unidad tangible de trabajo realizada por un trabajador en un flujo de trabajo, de forma que implica una responsabilidad
bien definida para el trabajador, produce un resultado bien definido (un conjunto de artefactos) basado en una entrada bien
definida (otro conjunto de artefactos), y representa una unidad de trabajo con límites bien definidos a la que, probablemente
se refiera el plan de proyecto al asignar tareas a los individuos. También puede verse como la ejecución de una operación por
un trabajador. (Jacobson, Booch, & Rumbaugh, 2000)
Aplicación
Ver Software de aplicación.
Ciclo de vida (de proyecto)
(1) Una colección de fases de proyecto, generalmente secuenciales, cuyo nombre y número son determinados por las
necesidades de control de la organización u organizaciones involucradas en el proyecto. Un ciclo de vida puede ser
documentado con una metodología. (PMI, 2008)
(2) Una partición de la vida de un producto, servicio, proyecto, grupo de trabajo o conjunto de actividades de trabajo en fases.
(SEI, 2010)
Ciclo de vida (del software)
(1) El periodo que comienza cuando un producto de software es concebido y concluye cuando el software ya no está disponible
para su uso. El ciclo de vida del software típicamente incluye las siguientes fases: concepto, requerimientos, diseño,
implementación, pruebas, instalación, operación y mantenimiento, en algunas ocasiones se incluye una fase de
descontinuación. Estas fases pueden traslaparse o ser ejecutadas iterativamente. (IEEE, 1990)
(2) Ciclo que cubre cuatro fases en el siguiente orden: inicio, elaboración, construcción y transición. (Jacobson, Booch, &
Rumbaugh, 2000)
Cliente
(1) Persona que utiliza con asiduidad los servicios de un profesional o empresa. (RAE, 2012)
(2) La parte responsable de aceptar el producto o autorizar un pago. El cliente es externo al proyecto o grupo de trabajo pero
no necesariamente externo a la organización. El cliente puede ser un proyecto o grupo de trabajo de más alto nivel. Los
clientes son un subconjunto del grupo de interesados en el proyecto. (SEI, 2010)
52
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
(3) Persona, organización o grupo de personas que encarga la construcción de un sistema, ya sea empezando desde cero, o
mediante el refinamiento de versiones sucesivas. (Jacobson, Booch, & Rumbaugh, 2000)
Componente
Una parte física y reemplazable de un sistema que se ajusta a, y proporciona la realización de, un conjunto de interfaces.
(Jacobson, Booch, & Rumbaugh, 2000)
Costo
El costo es la cantidad que se da o se paga por algo. (RAE, 2012)
Defecto
(1) Imperfección en algo o en alguien. (RAE, 2012)
(2) Carencia de alguna cualidad propia de algo. (RAE, 2012)
(3) Una imperfección o deficiencia en un componente de un proyecto en la cual dicho componente no cumple sus
requerimientos o especificaciones y necesita ser corregido o reemplazado. (PMI, 2008)
(4) Anomalía del sistema, por ejemplo un síntoma de un error en el software descubierto durante las pruebas, o un problema
descubierto durante una reunión de revisión. (Jacobson, Booch, & Rumbaugh, 2000)
Duración
El número total de periodos de trabajo (sin incluir días festivos u otros periodos no laborables) requerido para completar una
actividad programada o un componente de una estructura de desglose de trabajo. Usualmente expresada como días o
semanas laborables. (PMI, 2008)
Entrada
Cualquier elemento, interno o externo al proyecto que es requerido por un proceso antes de que el proceso proceda. Puede
ser una salida de un proceso predecesor. (PMI, 2008)
Ver también: Insumo.
Entregable
Cualquier producto único y verificable, resultado o capacidad para llevar a cabo un servicio que debe ser producido para
completar un proceso, fase o proyecto. A menudo usado más estrechamente en referencia a un entregable externo, que es
un entregable que está sujeto a aprobación del patrocinador o cliente del proyecto. (PMI, 2008)
Un elemento que será provisto a un adquiriente u cualquier otro recipiente designado tal como fue especificado en un acuerdo.
El elemento puede ser un documento, elemento de hardware, elemento de software, servicio o cualquier tipo de producto de
trabajo. (SEI, 2010)
53
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Error
(1) Acción desacertada o equivocada. (RAE, 2012)
(2) Una acción humana que produce un resultado incorrecto. (IEEE, 1990)
(3) La diferencia entre un valor o condición computado, observado o medido y la condición o valor verdadero, especificado o
teóricamente correcto. Por ejemplo, una diferencia de 30 metros entre un resultado computado y el resultado correcto. (IEEE,
1990)
(4) Un resultado incorrecto. Por ejemplo, un resultado computado de 12 cuando el resultado correcto es 10. (IEEE, 1990)
Esfuerzo
El número de unidades de trabajo requeridas para completar una actividad programada o un componente de una estructura
de desglose de trabajo. Usualmente expresado como horas/hombre, días/hombre o semanas/hombre. (PMI, 2008)
Fase (de proyecto)
(1) Una colección de actividades de un proyecto relacionadas lógicamente, usualmente culminando en la conclusión de un
entregable importante. Las fases de un proyecto son concluidas principalmente de forma secuencial, pero pueden empalmarse
en algunas situaciones del proyecto. Una fase de proyecto es un componente del ciclo de vida del proyecto. (PMI, 2008)
(2) Periodo de tiempo entre dos hitos principales de un proceso de desarrollo. (Jacobson, Booch, & Rumbaugh, 2000)
Hito
(1) Un punto o evento significativo en el proyecto. (PMI, 2008)
(2) Punto en el que han de tomarse importantes decisiones de negocio. Punto de sincronización en el que coinciden una serie
de objetivos bien definidos, se completan artefactos, se toman decisiones de pasar o no a la fase siguiente, y en el que las
esferas técnica y de gestión entran en conjunción. (Jacobson, Booch, & Rumbaugh, 2000)
Indicador
Un dispositivo o variable que puede ser configurada con un estado prescrito con base en los resultados de un proceso o la
ocurrencia de una condición especificada. Por ejemplo, una bandera o semáforo. (IEEE, 1990)
Instrumento o herramienta
Producto que facilita el trabajo durante la ejecución de un proceso.
Insumo
Producto requerido para ejecutar un proceso.
Ver también: Entrada.
54
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Interfaz
(1) Un límite compartido a través del cual la información es pasada. (IEEE, 1990)
(2) Un componente de hardware o software que conecta dos o más componentes con el propósito de pasar información de
uno a otro. (IEEE, 1990)
(3) Conectar dos o más componentes con el propósito de pasar información de uno a otro. (IEEE, 1990)
(4) Servir como un componente conectado o para conectar tal como se especifica en (2). (IEEE, 1990)
Iteración
(1) El proceso de llevar a cabo una secuencia de pasos repetidamente. (IEEE, 1990)
(2) Una sola ejecución de la secuencia de pasos en (1). (IEEE, 1990)
(3) Conjunto de actividades llevadas a cabo de acuerdo a un plan (de iteración) y unos criterios de evaluación, que lleva a
producir una versión, ya sea interna o externa. (Jacobson, Booch, & Rumbaugh, 2000)
Medición
Acción y efecto de medir. (RAE, 2012)
Un conjunto de operaciones para determinar el valor de una medida. (SEI, 2010)
Medida
Expresión del resultado de una medición. (RAE, 2012)
Variable a la cual se le asigna un valor como resultado de una medición. (SEI, 2010)
Métrica
(1) Una medida cuantitativa del grado en el cuál un sistema, componente o proceso posee un determinado atributo. (IEEE,
1990)
(2) Perteneciente o relativo al metro. (RAE, 2012)
Modelo
(1) Arquetipo o punto de referencia para imitarlo o reproducirlo. (RAE, 2012)
(2) Representación en pequeño de alguna cosa. (RAE, 2012)
(3) Esquema teórico, generalmente en forma matemática, de un sistema o de una realidad compleja, como la evolución
económica de un país, que se elabora para facilitar su comprensión y el estudio de su comportamiento. (RAE, 2012)
(3) Una abstracción de un sistema cerrada semánticamente. (Jacobson, Booch, & Rumbaugh, 2000)
55
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Patrón
Solución a un problema común de un determinado contexto. (Jacobson, Booch, & Rumbaugh, 2000)
Proceso
(1) Un conjunto definido de actividades o comportamientos llevados a cabo por humanos o máquinas para alcanzar uno o
más objetivos. (ABPMP, 2009)
(2) Una secuencia de pasos llevados a cabo para un propósito dado. (IEEE, 1990)
(3) Una secuencia o flujo de actividades en una organización con el objetivo de llevar a cabo trabajo. (OMG, 2011)
(4) Un conjunto de actividades interrelacionadas, las cuales transforman salidas en entradas, para cumplir un propósito dado.
(SEI, 2010)
(5) Un flujo de control pesado que puede ejecutarse concurrentemente con otros procesos.
Proceso de negocio
(1) Trabajo llevado a cabo de principio a fin que entrega valor a los clientes. (ABPMP, 2009)
(2) Un conjunto definido de actividades de negocio que representa los pasos requeridos para alcanzar un objetivo de negocio.
Incluye el flujo, uso de información y recursos. (OMG, 2011)
(3) Conjunto total de actividades necesarias para producir un resultado de valor percibido y medible para un cliente individual
de un negocio. (Jacobson, Booch, & Rumbaugh, 2000)
Producto
(1) Cosa producida. (RAE, 2012)
(2) Un artefacto que es producido, es cuantificable y puede ser un elemento final o un componente. (PMI, 2008)
Ver también: Salida.
Programa de computadora
Una combinación de instrucciones de computadora y definiciones de datos que permiten al hardware de computadora llevar
a cabo funciones computacionales o de control. (IEEE, 1990)
Proyecto
(1) Es un esfuerzo temporal realizado para crear un producto, servicio o resultado únicos. (PMI, 2008)
(2) Esfuerzo de desarrollo para llevar un sistema a lo largo de un ciclo de vida. (Jacobson, Booch, & Rumbaugh, 2000)
La naturaleza temporal de los proyectos indica un inicio y un fin definidos. El fin es alcanzado cuando los objetivos del proyecto
han sido alcanzados o cuando el proyecto es terminado puesto que sus objetivos no pueden o no podrán ser cumplidos, o
cuando la necesidad de continuar el proyecto ya no exista. (PMI, 2008)
56
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Riesgo
Variable de un proyecto que pone en peligro o impide su éxito. (Jacobson, Booch, & Rumbaugh, 2000)
Rol
(1) Una función definida para ser llevada a cabo por el miembro de un equipo de proyecto, tal como prueba, inspección,
codificación. (PMI, 2008)
(2) El comportamiento específico de una entidad que participa en un contexto particular.
Salida
Un producto, resultado o servicio generado por un proceso. Puede ser una entrada para un proceso sucesor. (PMI, 2008)
Ver también: Producto.
Servicio
Un producto que es intangible y no almacenable. (SEI, 2010)
Los servicios son entregados a través del uso de sistemas de servicios que han sido diseñados para satisfacer requerimientos
de servicio. (SEI, 2010)
Muchos proveedores de servicios entregan combinaciones de servicios y bienes. Un sistema de servicios puede entregar
ambos tipos de productos. (SEI, 2010)
Los servicios pueden ser entregados a través de combinaciones de procesos manuales y automatizados. (SEI, 2010)
Sistema
(1) Conjunto de cosas que relacionadas entre sí ordenadamente contribuyen a determinado objeto. (RAE, 2012)
(2) Una colección de subsistemas organizados para llevar a cabo un propósito específico y descritos por un conjunto de
modelos, posiblemente desde distintos puntos de vista.
Sistema computacional
Un sistema que contiene una o más computadoras y software asociado. (IEEE, 1990)
Software
Es el conjunto de programas de computadora, procedimientos, datos y documentación asociada pertenecientes a la operación
de un sistema computacional. (IEEE, 1990)
57
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
Software de aplicación
(1) Software diseñado para cumplir con necesidades específicas de un usuario, por ejemplo, software de nómina, recursos
humanos o ventas. (IEEE, 1990)
(2) Sistema que ofrece a un usuario final un conjunto coherente de casos de uso. (Jacobson, Booch, & Rumbaugh, 2000)
También conocido como LOB, Line of Business Application.
Subproceso
Un proceso que está incluido dentro de otro proceso. (OMG, 2011)
Tarea
(1) Actividad con inicio y fin definidos.
(2) Una actividad atómica que está incluida dentro de un proceso. Una tarea es usada cuando el trabajo en el proceso no es
descompuesto para obtener un nivel más fino de detalle en el modelado del proceso. Generalmente, un usuario final, una
aplicación o ambos llevarán a cabo la tarea. (OMG, 2011)
Patrocinador
La persona o grupo que provee los recursos financieros, en efectivo o especie, para el proyecto. (PMI, 2008)
Usuario (final)
(1) Una de las partes que emplea un producto entregado o que recibe el beneficio de un servicio entregado. Los usuarios
finales también pueden, o no, ser clientes. (SEI, 2010)
(2) Humano que interactúa con un sistema. (Jacobson, Booch, & Rumbaugh, 2000)
5. Referencias
ABPMP. (2009). Guide to the Business Process Management Common Body of Knowledge (BPM CBOK) Version 2.0.
Chicago: Association of Business Process Management Professionals.
Barker, C. (2007, 11 22). The top 10 IT disasters of all time. Retrieved from ZDNet: http://www.zdnet.com/the-top-10-itdisasters-of-all-time-3039290976/
Booch, G., Rumbaugh, J., & Jacobson, I. (2006). El lenguaje unificado de modelado. Pearson Education.
Calleam Consulting Ltd. (2012, 11 20). Denver Airport Baggage System Case Study. Retrieved from Why Projects Fail:
http://calleam.com/WTPF/?page_id=2086
Domínguez, J. (2012, 11 16). The Curious Case of the CHAOS Report 2009. Retrieved from ProjectSmart.co.uk:
http://www.projectsmart.co.uk/the-curious-case-of-the-chaos-report-2009.html
Gary, K. P. (2003). Fundamentos de Marketing, Sexta Edición. Prentice Hall.
58
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
IBM. (2013, 04 16). RUP: Best practices for design, implementation and effective project management. Retrieved from IBM
Web Site: http://www-01.ibm.com/software/rational/rup/
IEEE. (1990). IEEE Standard Glossary of Software Engineering Terminology. New York: The Institute of Electrical and
Electronics Ehgineers.
IFPUG. (2012, 11 22). About Function Point Analysis. Retrieved from International Function Point Users Group:
http://www.ifpug.org/?page_id=10
IVEX. (2007). El mercado del software en México. Ciudad de México: Instituto Valenciano de la exportación.
Jacobson, I., Booch, G., & Rumbaugh, J. (2000). El proceso unificado de desarrollo de software. Madrid, España: Addison
Wesley.
Karl T. Ulrich, S. D. (2009). Diseño y desarrollo de productos, cuarta edición. Mc Graw Hill.
KUALI-KAANS. (2013, 04 04). KUALI-BEH. Retrieved from KUALI-KAANS: http://www.kuali-kaans.mx/proyectos/kuali-beh
Lamb Charles, H. J. (2002). Marketing, Sexta Edición. International Thomson Editores S.A.
McConnell, S. (1996). Chapter 2: Rapid-Development Strategy. In S. McConnell, Rapid Development (Taming Wild Software
Schedules) (p. 22). Redmond, Washington: Microsoft Press.
McConnell, S. (1996). Rapid Development (Taming Wild Software Schedules). Redmond, Washington: Microsoft Press.
McConnell, S. (1998). Software Project Survival Guide. Redmond, Washington: Microsoft Press.
McConnell, S. (2006). Software Estimation (Demystifying the Black Art). Redmond, Washington: Microsoft Press.
Oktaba, H. (2010, 03 07). Historia estándar ISO/IEC 29110. Retrieved from ISO/IEC 29110: http://iso29110.kualikaans.mx/iso29110/index.php?option=com_content&view=section&layout=blog&id=3&Itemid=8&lang=es
OMG. (2011). A Foundation for the Agile Creation and Enactment of Software Engineering Methods. Needham, MA: OMG.
OMG. (2011). Business Process Model and Notation (BPMN). Needham, MA: Object Management Group.
Pareja Quinaluisa, J. F. (2012, 02 08). Evaluación de procesos de software utilizando EvalProSoft aplicado a un caso de
estudio. Retrieved from Escuela Politécnica Nacional: http://bibdigital.epn.edu.ec/handle/15000/4491
PMI. (2008). A Guide to the Project Management Body of Knowledge (PMBOK Guide) Fourth Edition. Pennsylvania: Project
Management Institute, Inc.
RAE. (2012, 11 08). Diccionario de la lengua española. Retrieved from Real Academia Española: http://www.rae.es
Richard, S. L. (2002). Mercadotecnia, Primera Edición. Compañía Editorial Continental.
Rubinstein, D. (2007, 3 1). Standish Group Report: There's Less Development Chaos Today. Retrieved from SD Times:
http://www.sdtimes.com/content/article.aspx?ArticleID=30247
Secretaría de economía. (2012, 11 13). Capital humano - estimación del capital humano de las personas. Retrieved from
Sistema nacional de indicadores de la industria de tecnologías de información:
http://www.edigital.economia.gob.mx/capital%20humano.htm
Secretaría de economía. (2012). Ejercicio de Rendición de Cuentas a la Sociedad PROSOFT 2012. Ciudad de México:
Secretaría de economía.
Secretaría de economía. (2012, 11 13). Mercado nacional. Retrieved from Sistema nacional de indicadores de la industria de
tecnologías de información: http://www.edigital.economia.gob.mx/MNACIONAL.htm
59
Este material es propiedad de Rogelio Francisco Ramírez Ramírez y no puede ser distribuido, reproducido o comercializado sin el consentimiento expreso de su
autor. Registro de obra en trámite.
SEI - Software Engineering Institute. (2013, 04 16). Team Software Process - A Performance Framework for Software
Development. Retrieved from SEI Web Site: http://www.sei.cmu.edu/library/upload/TSPoverview.pdf
SEI - Software Engineering Institute. (2013, 04 16). The Personal Software Process (PSP). Retrieved from SEI Web Site:
http://www.sei.cmu.edu/library/abstracts/reports/00tr022.cfm
SEI. (2010). CMMI for Acquisition, Version 1.3 (CMU/SEI-2010-TR-032). Hanscom AFB, MA: Software Engineering Institute.
SEI. (2010). CMMI for Development, Version 1.3 (CMU/SEI-2010-TR-033). Hanscom AFB, MA: Software Engineering
Institute.
SEI. (2010). CMMI for Services, Version 1.3 (CMU/SEI-2010-TR-034). Hanscom AFB, MA: Software Engineering Institute.
Stanton William, E. M. (2004). Fundamentos de Marketing, 13va. Edición. Mc Graw Hill.
The Standish Group. (1995). Chaos Report. The Standish Group.
Villalobos Hernández, M., & Gutiérrez Tornés, A. (2001). Investigación sobre las prácticas de ingeniería de software. Ciudad
de México: CIC-IPN.
Wikipedia. (2012, 10 24). Lean IT. Retrieved from Wikipedia: http://en.wikipedia.org/wiki/Lean_IT
60