Estimación de Costes del Software Carlos Castillo Diestra Propósito Es propósito es mostrar como generar estimaciones fiables del esfuerzo, duración y costes para la producción de software. Objetivos o Comprender los fundamentos del coste del software o Entender los principios del modelo de estimación COCOMO o Estimar el esfuerzo, duración y coste de un software Contenido o o o o Estimación de software Técnicas de estimación Modelo de costes algorítmicos Modelo COCOMO Algunos proyectos famosos • La Opera House en Sydney, que se estimó que su construcción llevaría alrededor de cinco años y tendría un coste aproximado de 7 millones de dólares. Finalmente, el costo fue de 102 millones de dólares y se demoró 14 años. (1959 – 1973) Algunos proyectos famosos El túnel bajo el Canal de la Mancha (Eurotúnel), con una estimación de costo de 7500 millones de dólares y plazo de entrega 1992, se terminó en 1994 con un costo de 17500 millones de dólares. Algunos proyectos famosos Tacoma Narrows Suspension Bridge (“Galloping Gertie”) el tercer puente más largo del mundo (tras el Golden Gate y el George Washington), que se hundió en 1940 cuatro meses y siete días después de su apertura. Algunos proyectos famosos En 1995 errores en el sistema del aeropuerto de Denver hicieron que el aeropuerto abra con un retraso de 16 meses y un exceso de gasto de 3500 millones de dólares. Algunos proyectos famosos o En 1988, la Westpac Banking Corporation decidió redefinir sus sistemas de información. o Planificaron un proyecto de 85 millones de dólares para cinco años. o Tres años más tarde, después de gastar 150 millones con poco éxito, asumió sus pérdidas, canceló el proyecto y elimino 500 empleados de desarrollo. Otros Proyectos o2004. Ford Motor Co. El sistema de compras es abandonado tras gastarse en él unos 400 millones. o2004. J. Sainsbury PLC (UK): Sistema de SCM (Supply-change management) abandonado tras su instalación, y tras un gasto de 527 millones. o2002. McDonald’s Corp.: Sistema de gestión de compras cancelado tras gastarse 170 millones. o2001. Kmart Corp.: Sistema SCM cancelado tras gastar en él unos 130 millones. o1993. Bolsa de Londres (UK): Systema Taurus es cancelado tras gasto de 600 millones. o1993. Allstate Insurance Co.: Sistema de automatización de tareas es abandonado tras su instalación. Coste: 130 millones. o1992. Budget Rent-A-Car, Hoteles Hilton, Marriott International y American Airlines: Sistema integrado de reservas cancelado tras un gasto de 165 millones Interrogantes Fundamentales de la estimación o ¿Cuánto esfuerzo se requiere para terminar una actividad? o ¿Cuánto tiempo se necesita para terminar una actividad? o ¿Cuál es el coste total de una actividad? Estimación Predicción cuantitativa de duración, esfuerzo y costes requeridos para realizar todas las actividades y constituir todos los productos asociados con un proyecto de software. Elementos que hay que estimar ELEMENTO UNIDAD Duración Tiempo (meses, años, etc) Esfuerzo Unidad de esfuerzo (personas.mes,personas.año, etc) Coste Dólares, euros, soles, etc. Componentes del coste del software o Costes de Hardware y software. o Costes de viajes y entrenamiento. o Gastos Generales • Gastos de edificios, energía eléctrica, aire acondicionado, etc. • Gastos de redes y comunicaciones. • Gastos de instalaciones compartidas (e.g biblioteca, personal de restaurante, etc.). o Costes de esfuerzo (Factor dominante en la mayoria de los proyectos) • Los sueldos del personal involucrado en el proyecto • Costes sociales y seguros. Métodos utilizados para la estimación de proyectos. o o o o Basados en la experiencia. Basado exclusivamente en los recursos. Método basado exclusivamente en el mercado. Basado en los componentes del producto o en el proceso de desarrollo. o Métodos algorítmicos Métodos basados exclusivamente en la experiencia o Juicio experto • Puro, • Delphi o Analogía o Distribución de la utilización de recursos en el ciclo de vida Juicio experto: Puro o Un experto estudia las especificaciones y hace su estimación. o Se basa fundamentalmente en los conocimientos del experto. o Si desaparece el experto, la empresa deja de estimar Juicio experto: Wideband Delphi o Se dan las especificaciones a un grupo de expertos. o Se les reúne para que discutan tanto el producto como la estimación. o Remiten sus estimaciones individuales al coordinador. o Cada estimador recibe información sobre su estimación, y las ajenas pero de forma anónima. o Se reúnen de nuevo para discutir las estimaciones. o Cada uno revisa su propia estimación y la envía al coordinador. o Se repite el proceso hasta que la estimación converge de forma razonable. Analogía o El coste del proyecto se estima en base a otros proyectos análogos que se han terminado previamente. o Analogía, pueden variar los siguientes factores: • Tamaño: ¿mayor o menor? • Complejidad: ¿Más complejo de lo usual? • Usuarios: Si hay más usuarios habrán más complicaciones. • Otros factores: o Sistema Operativo, entornos (la primera vez más). o Hardware, ¿Es la primera vez que se va a utilizar? o Personal del proyecto, ¿nuevos en la organización? Método basado exclusivamente en los recursos: Parkinson o En la estimación consiste en ver de cuanto personal y durante cuanto tiempo se dispone de el, haciendo esa estimación. o En la realización: “El trabajo se expande hasta consumir todos los recursos disponibles” (Ley de Parkinson) Método basado exclusivamente en el mercado: precio para vender. o Lo importante es conseguir el contrato. o El precio se fija en función de lo que creemos que esta dispuesto a pagar el cliente. Basado en los componentes del producto o proceso de desarrollo: o Bottom-up • Se descompone el proyecto en las unidades lo menores posibles. • Se estima cada unidad y se calcula el coste total. o Top-Down • Se ve todo el proyecto, se descompone en grandes bloques o fases. • Se estima el coste de cada componente. Modelo de costes algorítmico o Se basan en la utilización de fórmulas que aplicadas sobre modelos top-down o bottom-up producen una estimación de coste del proyecto o El coste se estima como una función matemática de los atributos del personal, producto, proyecto y plataforma. o Tienen la siguiente estructura: • Esfuerzo = A + B x TamañoC x M • A, B y C son constantes que se obtienen empíricamente • M es un multiplicador que refleja los atributos del personal, producto, proyecto y plataforma. • Tamaño es la variable de estimación (LDC o PF) Modelo de costes algorítmico o Entre orientados a LDC propuestos se tienen: • Modelo de Walston-Felix: E = 5,2 (KLDC)0,91 • Modelo de Bailey-Basisli: E = 5,5 + 0,73 (KLDC)1,16 • Modelo de Doty: E = 5,288 (KLDC)1,047 • Modelo simple de Boehm: E = 3,2 (KLDC)1,05 o Entre los modelos orientados a PF se tienen: • Modelo de Albretch y Gaffney: E = -13,39 + 0,054PF • Modelo de Kemerer: E = 60,62 x 7,728 x 10-8PF3 • Modelo de Matson, Barnett y Mellichamp: E = 585,7 + 15,12PF El Modelo COCOMO o COCOMO = COnstructive COst MOdel o Basado en la experiencia de proyectos reales o Modelo “Independiente”: no está ligado a un vendedor de software específico o Larga historia: desde la versión inicial publicada en 1981 (COCOMO-81), pasando por varias instancias hasta COCOMO II. COCOMO-81 Basado en el estudio de 63 proyectos Jerarquía de Modelos: o Modelo 1: Modelo básico Calcula el esfuerzo del desarrollo en función del tamaño del programa, expresado en las líneas estimadas de código o Modelo 2: Modelo intermedio Calcula el esfuezo del desarrollo en función del tamaño del programa y de un conjunto de “conductores de coste”. o Modelo 3: Modelo avanzado Incorpora todas las características de le versión intermedia y lleva a cabo una evaluación del impacto de los conductores de coste en cada fase (análisis, diseño, etc.) del proceso de ingeniería de software COCOMO-81 Modos de Proyectos de Software o Modo Orgánico Proyectos de software pequeños y sencillos en los que trabajan pequenos equipos, con buena experiencia en la aplicación, sobre un conjunto de requisitos poco rígidos o Modo Moderado (semi-acoplado, semi-rígido) Proyectos de software intermedios en tamaño y complejidad en los que equipos, con variados niveles de experiencia, deben satisfacer requisitos medio rigidos. o Modo Empotrado (embebido, rígido) Proyectos de software complejos que deben ser desarrollados en un conjunto de hardware, software y restricciones operativas muy restringido. COCOMO-81 COCOMO-81 - Básico MODO ESFUERZO (personas-mes) TIEMPO DE DESARROLLO (meses) Orgánico ESF = 2,4 (KLDC)1,05 TDES= 2,5 (ESF)0,38 Moderado ESF= 3,0 (KLDC)1,12 Embebido ESF = 3,6 (KLDC)1,20 TDES= 2,5 (ESF)0,32 TDES= 2,5 (ESF)0,35 COCOMO 81 - Intermedio MODO ESFUERZO (personas-mes) TIEMPO DE DESARROLLO (meses) Orgánico ESF = 3,2 (KLDC)1,05 FEC TDES= 2,5 (ESF)0,38 Moderado ESF= 3,0 (KLDC)1,12 FEC Embebido ESF = 2,8 (KLDC)1,20 FEC TDES= 2,5 (ESF)0,32 TDES= 2,5 (ESF)0,35 Se considera un conjunto de atributos denominados conductores de coste: FEC = п FEi COCOMO 81 - Intermedio Conductores de Coste: o Producto • Requerimientos de confiabilidad • Tamaño de la base de datos • Complejidad o Computador usado • Restricciones de tiempo de ejecución • Restricciones de memoria principal • Velocidad con que cambian los medios de cómputo • Tiempo de respuesta del computador COCOMO 81 - Intermedio Conductores de Coste: o Personal • Capacidad de los analistas • Experiencia de los analistas • Capacidad de los programadores • Experiencia en el sistema operativo • Experiencia en el lenguaje de programación o Proyecto • Uso de técnicas modernas de programación • Uso de herramientas de software • Requisitos de planificación COCOMO 81 - Intermedio Conductores de Coste: Ejemplo Requerimientos de Seguridad del Software Descripción Leves inconvenientes Pérdidas fácilmente recuperables Pérdidas moderadas Grandes Perdidas Financieras Perdidas Humanas Nivel Muy Bajo Bajo Nominal Alto Muy alto Multiplicador 0.75 0.88 1.00 1.15 Extra Alto 1.40 Tamaño de la Base de Datos Descripción Nivel Muy Bajo KB/KLDC <=10 KB/KLDC >10 y <=100 KB/KLDC >100 y <=1000 KB/KLDC >1000 Bajo Nominal Alto Muy alto Multiplicador 0.94 1.00 1.08 Extra Alto 1.16 Experiencia de los Analistas Descripción 4 meses 1 año 3 años 6 años 12 años Nivel Muy Bajo Bajo Nominal Alto Muy alto Multiplicador 1.29 1.13 1.00 0.91 0.82 Extra Alto Guía para usar el Modelo COCOMO o o o Si no sabe como configurar un conductor de coste (factor de esfuerzo) entonces usar los valores nominales. Si no puede decidir entre dos configuraciones tomar la más cercana a la nominal. No es obligatorio configurar todos los factores de coste. En un ambiente de desarrollo de un Software particular solamente algunos conductores de coste pueden ser importantes. Ejemplo 1 El Banco ABC encarga a la Empresa Radja S.A. el desarrollo de un sistema para que sus clientes realicen transacciones financieras vía web. Los clientes podrán consultar sus movimientos, consultar el estado de sus cuentas y realizar transferencias a terceros y pagos a cuenta. Si se estima que el software tendrá 100000 líneas de código, se usará la herramienta CASE Poseidon ¿cuál es el costo del proyecto? si el costo persona mes es el siguiente: FASE % ESFUERZO COSTO PERSONA MES (soles) Análisis y Diseño 40% 5000 Programación 30% 4000 Pruebas 30% 6000 Ejemplo 1 - Solución • Modelo: Intermedio • Modo: Semiacoplado (Moderado) ESF=3 x (KLDC)1,12 • Conductores de coste: 1. Requerimentos de Seguridad del Software (Confiabilidad): FRSS = 1,15 (Perdidas financieras) 2. Uso de Herramientas Software : FUHS = 0,83 (Herramienta CASE) • Costo persona mes promedio: CPM = 0,4 * 5000 + 0,30 * 4000 + 0,3 * 6000 = 5000 soles. • Esfuerzo Nominal (sin los conductores de coste): ESF=3 x (KLDC)1,12 = 3 x (100)1,12 = 521,34 personas mes • Esfuerzo Real (con los conductores de coste): ESFreal = ESF x FRSS x FUHS = 521,34 x 1,15 x 0,83 = 497,62 personas mes • Costo del Proyecto: C = ESFreal x CPM = 497,62 x 5000 = 2 488 100 soles. Ejemplo 2 La empresa WTR S.A. desea desarrollar un software para controlar máquinas de fabricación de autopartes. Se estima que el software tendrá aproximadamente 120 000 líneas de código y el costo promedio de un desarrollador será de 4000 soles mensuales. El proyecto se desarrollará bajo Linux, por lo que se contratará gente con al menos 3 años de experiencia en Linux. Bajo las condiciones descritas, la empresa CCD Data garantiza que el factor multiplicador del esfuerzo (conductores de coste) puede reducirse de 1.2 a 0.9 por medio del uso de un paquete para desarrollar software, cuyo costo es de 200 000 soles. ¿Desde el punto de vista económico, valdría la pena comprar dicho paquete? . Ejemplo 2 - Solución • Modelo: Intermedio • Modo: Empotrado (Control máquinas) ESF=2,8 x (KLDC)1,20 • Conductores de coste: 1. Experiencia en el Sistema Operativo: FESO = 0,96 (Más de 3 años en linux) • Costo persona mes promedio: 4000 soles Ejemplo 2 - Solución Alternativa 1: Sin compra del paquete para desarrollar software • Esfuerzo Nominal (sin los conductores de coste): ESF=2,8 x (KLDC)1,20 = 2,8 x (120)1,20 = 875,33 personas mes • Esfuerzo Real (con los conductores de coste): ESFreal = ESF x FESO = 875,33 x 0,96 = 840,3168 personas mes • Costo del Proyecto: C = ESFreal x CPM = 840,3168 x 4000 = 3 361267,2 soles. Ejemplo 2 - Solución Alternativa 2: Comprando el paquete para desarrollar software • El esfuerzo se reduce en proporción de 1,2 a 0,9, por lo que se tiene el nuevo esfuerzo: ESF =( ESFreal x 0,9 )/1,2 = (840,3168 x 0,9)/1,2 = 630,23 • Con lo cual el costo total seria: C = Costo de desarrollo + costo del paquete C = ESF x 4000 + 200 000 C = 630,23 x 4000 + 200 000 soles C = 2 720 920 soles Por lo tanto, comparando los costos de las alternativas, conviene comprar el paquete para desarrollar software. Conclusiones o Para obtener buenas estimaciones para un proyecto, se deberían utilizar al menos dos o tres técnicas diferentes. Mediante la comparación y la conciliación de las estimaciones obtenidas con las diferentes técnicas, se puede obtener una estimación más exacta. o La estimación del proyecto de software nunca será una ciencia exacta, pero la combinación de buenos datos históricos y de técnicas sistemáticas pueden mejorar la precisión de la estimación. Referencias 1. Boehm, B., Abts, C., Brown, W., Chulani, S. y Clark, B. (2009). Software Cost Estimation With Cocomo II. USA: Ed. PrenticeHall. 2. Boehm, B. (1981). Software Engineering Economics. USA: Ed. Prentice-Hall. 3. Charette, R. (2 Setiembre 2005). Why Software Fails. Recuperado el 1 de julio de 2013, de http://spectrum.ieee.org/computing/software/whysoftware-fails 4. Opera House de Sidney. Recuperado el 12 de junio de 2013, de http://www.cairnsunlimited.com/es/opera_sidney.htm [email protected] [email protected]