domingo, 27 de septiembre de 2009

CAPÍTULO 2




CAPÍTULO 2

ESTIMACIÓN DE LOS COSTE DEL PROYECTO SOFTWARE

La estimación de costes es una de las primeras tareas que deben realizarse en la planificación de un proyecto software y se trata de una difícil tarea puesto que no se posee información suficiente acerca del mismo.

Para intentar solventar este problema se realizan varias estimaciones a lo largo del desarrollo de un proyecto, acercándose cada vez más al coste final del mismo puesto que cada estimación se realiza sobre una etapa en la que éste está más refinado.

2.1. FACTORES QUE DETERMINAN EL COSTE DEL PROYECTO

Otro problema que se presenta en la estimación del coste de un proyecto software es la determinación del coste de los factores, generalmente no cuantitativos y por tanto difícil de medir.

2.1.1. CAPACIDAD DE LOS PROGRAMADORES

Tiene una relación directa con la duración y coste del proyecto. Es una medida del nivel de conocimientos y experiencia de las personas dedicadas a la programación de software así como la experiencia con el tema en concreto con el que se esté tratando.

Tras haber estudiado el rendimiento de grupos de desarrollo se llega a la conclusión de que un grupo ideal sería aquel lo más homogéneo y elevado en cuanto a su capacidad.

2.1.2. COMPLEJIDAD DEL PRODUCTO

En una primera aproximación se pueden considerar tres categorías principales de productos software:

1. Software de aplicación.

2. Software científico y de apoyo.

3. Software de sistemas.

Brook considera que el software de apoyo es tres veces más difícil de construir que el de aplicación, y que el de sistemas, a su vez, es tres veces mas difícil de construir que el de apoyo.

Boehm utiliza también tres niveles de complejidad que caracterizan el desarrollo de un producto software:

1. Productos desarrollados en modo orgánico (similar a software de aplicación).

2. Productos desarrollados en modo semiacoplado (similar a software de apoyo).

3. Productos desarrollados en modo empotrado (similar a software de sistemas).

Un error muy común es subestimar la cantidad de código no teniendo en cuenta el código relativo a entrada/salida, comunicación con el usuario, control de errores. . . siendo ´este, a veces, el 50% del total del código del programa.

2.1.3. TAMAÑO DEL PRODUCTO

Un proyecto será más costoso cuanto más grande sea. Se puede realizar una medición atendiendo al número de líneas de código que necesita un programa así como al número de personas al mes necesarias para llevarlo a cabo.

2.1.4. TIEMPO DISPONIBLE

Se busca calcular el tiempo nominal de desarrollo de un proyecto, bien mediante técnicas de programación lineal o bien mediante la proposición de expresiones matemáticas como la propuesta por Putnam:

Se ha estudiado el factor del tiempo ´optimo de desarrollo de un proyecto y se ha llegado a la conclusión de que los proyectos de programación requieren más esfuerzo si el tiempo de desarrollo se reduce o incrementa más de su valor óptimo.

Otro estudio ha demostrado también que no por asignarle más recursos a una tarea se va a reducir el tiempo de duración de la misma. Boehm lo describe así:

“Existe un límite más allá del cual un proyecto de programación no puede reducir su calendario mediante la adquisición de más personal o más equipo.”

2.1.5. NIVEL DE CONFIABILIDAD REQUERIDO

La confiabilidad de un producto de programación se define como:

La probabilidad de que un programa desempeñe una función requerida bajo ciertas condiciones específicas durante un cierto tiempo. La confiabilidad puede expresarse en términos de exactitud, firmeza, cobertura y consistencia del código fuente.

Boehm considera que hay cinco niveles de confiabilidad y que a cada uno se le puede asignar un factor multiplicador.

NIVEL

CONSECUENCIA

FACTOR

Muy baja

Baja

Nominal

Alta

Muy alta

Alguna molestia menor

Las pérdidas son fáciles de recuperar

Dificultad relativa en a recuperación

Gran pérdida financiera

Riesgo de pérdida de vida

0.75

0.88

1.00

1.15

1.40

2.1.6. NIVEL TECNOLÓGICO

El nivel tecnológico empleado en un proyecto de programación se refleja en el lenguaje utilizado, la máquina abstracta, las prácticas y las herramientas de programación.

El nivel tecnológico va a depender de cuatro factores:

§ Lenguaje de programación:

El uso de un lenguaje de alto nivel simplifica el número de líneas de código y aumenta la confiabilidad, capacidad de modificación y mantenimiento del mismo.

§ Máquina abstracta:

Hace referencia al software y al hardware.

§ Prácticas modernas de programación:

Afectarán al esfuerzo empleado en el desarrollo.

§ Aplicaciones de apoyo:

Editores, compiladores… y herramientas de manejo de configuración y verificación automática.

Boehm introduce tres factores más:

§ La experiencia en programación.

§ Cómo se utilizan las prácticas modernas de programación (si se utilizan mucho se produce una disminución considerable del esfuerzo).

§ Características de las aplicaciones de apoyo.

2.2. MÉTRICAS DE PRODUCTIVIDAD DEL SOFTWARE

El software se mide por varias razones:

1. Indicar la calidad del producto.

2. Evaluar la productividad de la gente que lo desarrolla.

3. Asegurar los beneficios en términos de productividad y calidad.

4. Ayudar a justificar el uso de nuevas herramientas de formación adicional.

Se pueden realizar dos tipos de mediciones:

1. Medidas directas:

Coste de producción, velocidad de cómputo, tamaño de memoria requerido…

2. Medidas indirectas:

Funcionalidad, eficiencia, calidad, fiabilidad, complejidad…

Se puede realizar una nueva clasificación en base a la productividad, calidad y medidas técnicas del producto software en la fase de desarrollo, son:

§ Métricas de productividad.

§ Métricas de calidad.

§ Métricas técnicas.

§ Métricas orientadas al tamaño.

§ Métricas orientadas a la función.

§ Métricas orientadas a las personas.

2.2.1. MÉTRICAS ORIENTADAS AL TAMAÑO

Se obtienen tras aplicar una serie de operaciones. No están demasiado aceptadas puesto que no es el mejor modo de medir un proyecto de desarrollo software debido a la relatividad de lo que estamos midiendo. Las operaciones aplicables son:



2.2.2. MÉTRICAS ORIENTADAS A LA FUNCIÓN

Se centran en la funcionalidad o utilidad del programa. Los puntos de función se obtienen utilizando una relación empírica basada en medidas contables del dominio de la información del software y valoraciones subjetivas de la complejidad del mismo.

Los puntos de función se pueden calcular atendiendo a cinco características de la información:

§ Número de entradas de usuario: Se cuenta cada entrada de usuario que proporciona al software diferentes datos orientados ala aplicación.

§ Número de salidas al usuario: Número de informes, pantallas, mensajes de error…

§ Número de peticiones de usuario: Es el número de entradas generadas por la interacción del usuario con el programa que se pueden producir.

§ Número de archivos: Se cuenta cada archivo maestro lógico.

§ Número de interfaces externas: Número de interfaces que son utilizadas para transmitir información a otro sistema.

Elemento del dominio de la información

Valor

FP Simple

FP Medio

FP Complejo

CP

Entradas de usuario


x3

x4

x6


Salidas de usuario


x4

x5

x7


Peticiones de usuario


x3

x4

x6


Número de archivos


x7

x10

x15


Interfaces externas


x5

x7

x10


Cuando estos datos son calculados se asocia un valor de complejidad a cada cuenta y se calculan los puntos de función de la siguiente forma:

Una vez calculados los puntos de función, se usan de forma análoga a las LCD, como medida de productividad, calidad y otros atributos del software en base a las siguientes expresiones:

Las medidas de los puntos de función se diseñaron inicialmente para ser utilizadas en aplicaciones de sistemas de información de gestión pero Jones ha realizado una serie de ampliaciones en las que los denomina Puntos de Características del software, en las que se tiene en cuenta la complejidad algorítmica, que permiten realizar medidas en software de ingeniería y sistemas.

Para aplicaciones convencionales de cálculo de ingeniería de sistemas de información los PF y los PC dan valores muy similares. No ocurre lo mismo para sistemas más complejos, en los que el PC es del orden de entre un 20% y un 35% mayor que el PF.

2.2.3. RECONCILIACIÓN DE LAS DIFERENTES MÉTRICAS

La relación entre las LDC y los PF depende del lenguaje de programación utilizado y de la calidad del diseño, y dicha relación nos va a proporcionar una medida de productividad del software evaluado, medida que está sometida evidentemente a errores debidos a la subjetividad con que se realice además de otros factores que afectan directamente al software. Son los siguientes:

§ Factores humanos: tamaño y experiencia de la organización de desarrollo.

§ Factores del problema: complejidad del problema a resolver y el número de cambios en las restricciones o requisitos del diseño.

§ Factores del proceso: técnicas de análisis y diseño utilizadas.

§ Factores del producto: fiabilidad y rendimiento del sistema basado en la computadora.

§ Factores de los recursos: disponibilidad de herramientas CASE y recursos hardware y software.

Una estimación va a ser más precisa si tiene una base histórica lo más amplia y consolidada posible.

2.3. TÉCNICAS DE ESTIMACIÓN DE COSTES

Dentro de la mayoría de las organizaciones la estimación de costes se basa en experiencias pasadas. Estas estimaciones se pueden llevar acabo de forma jerárquica hacia abajo (top down) donde el punto de referencia es el coste del sistema, manejo de la configuración, control de calidad. . . o hacia arriba (bottom-up) donde se considera el coste de los distintos subsistemas para estimar el coste total de sistema.

2.3.1. JUICIO DEL EXPERTO

Técnica jerárquica hacia abajo. Es la más ampliamente utilizada y se basa en la experiencia, conocimiento anterior y sentido comercial de uno o más individuos dentro de la organización.

La experiencia, factor que en principio puede ser una ventaja, puede que se convierta en una desventaja debido a que el experto puede realizar una mala estimación debido a la generalización del caso.

2.3.2. TÉCNICA DELFI

Técnica jerárquica hacia abajo. Intenta eliminar reuniones entre grupos para conseguir efectividad. Forma de ejecución:

1. Un coordinador proporciona a cada experto anónimo una documentación.

2. Cada experto estudia la definición y estima costes.

3. El coordinador realiza un resumen de todas las estimaciones.

4. Si el coordinador ve algún razonamiento extraño, se envía a los expertos el resumen y se realiza una nueva estimación.

5. Se vuelve al paso 3 tantas veces como sea necesario.

TÉCNICA DELFI MODIFICADA

Similar a la anterior sólo que no evita reuniones de grupo, aunque sí se mantiene el anonimato. Si existe discrepancia en las estimaciones se discuten sobre ellas y si no se llega a una solución el coordinador deberá tomar una decisión.

2.3.3. ESTRUCTURAS DE DIVISIÓN DEL TRABAJO

Técnica jerárquica hacia arriba. Hace uso de un organigrama para reflejar las diferentes partes del sistema y las jerarquías de productos o procesos.

Estas técnicas son muy usadas. Pueden clasificarse en dos grupos según realicen división de trabajo por producto o por procesos.

2.4. MODELOS DE ESTIMACIÓN EMPÍRICA

Un modelo de estimación utiliza fórmulas empíricas para predecir los datos que se requieren en la etapa de planificación del proyecto software.

Existen varios modelos de estimación aplicables a unos u otros proyectos según sus características. Atendiendo a las mismas se pueden clasificar en:

1. Modelos univariable estáticos.

2. Modelos multivariable estáticos.

3. Modelos multivariable dinámicos.

4. Modelos teóricos.

Un modelo univariable estático toma la forma:


Un modelo multivariable dinámico toma la forma:

2.4.1. MODELO COCOMO

El Constructive Cost Model fue propuesto por Boem y es uno de los más ampliamente usados. Propone una serie de modelos con distintos grados de complejidad e información utilizada:

§ Modelo Básico:

Modelo estático que sólo tiene en cuenta el tamaño del programa y el coste de desarrollo. Ecuaciones:


Donde a, b, c y d vienen expresados en la siguiente tabla:


CoCoMo Básico

a

b

c

d

Modo Orgánico

Modo Semiacoplado

Modo Empotrado

2.4

3.0

3.6

1.05

1.12

1.20

2.5

2.5

2.5

0.38

0.35

0.32


§ Modelo Intermedio:

Calcula el esfuerzo de desarrollo en función del tamaño del software y un conjunto de “guías de coste” que incluyen una evaluación subjetiva del producto, del software, del personal y de los atributos del proyecto. En base a esta evaluación obtenemos un Factor de Ajuste (FA) que nos va a permitir el cálculo del esfuerzo:


Donde a y b vienen expresados en la siguiente tabla:

CoCoMo Básico

a

b

Modo Orgánico

3.2

1.05

Modo Semiacoplado

3.0

1.12

Modo Empotrado

2.8

1.20

§ Modelo Avanzado:

Incorpora todas las características del modelo intermedio con una evaluación del impacto de las guías de coste en cada fase del proceso de la IS.

El modelo de CoCoMo está definido para tres tipos diferentes de proyectos:

§ Modo Orgánico: Proyectos pequeños y sencillos con equipos pequeños con buena experiencia que trabajan en un conjunto de requisitos poco rígidos.

§ Modo Semiacoplado: Proyecto software intermedio en el que trabajan equipos con distintos niveles de experiencia sobre requisitos poco y medio rígidos.

§ Modo Empotrado: Proyectos software que deben ser desarrollados dentro de un conjunto estricto de hardware, software y restricciones operativas.

2.4.2. MODELO DE PUTNAM

Modelo univariable dinámico que asume una distribución específica del esfuerzo a lo largo del ciclo de vida de un proyecto. Este modelo, aunque deriva de distribuciones de mano de obra de grandes proyectos es extrapolable pequeños y medianos proyectos.

Se puede utilizar la curva de Rayleigh-Norden para obtener una ecuación que relaciona el número de líneas de código esperadas con el esfuerzo y tiempo de desarrollo, en la forma:


Donde Ck es una constante de estado que puede los siguientes valores:

Valor de Ck

Descripción

2000

8000

11000

Para entorno pobre de desarrollo, sin metodología, modo de ejecución no interactivo, documentación y revisiones pobres.

Para un buen entorno de desarrollo.

Para un entorno excelente.

LDC es el número de líneas esperadas de código fuente, PA el esfuerzo de desarrollo y mantenimiento y TDA el tiempo de desarrollo.

La expresión anterior se puede reescribir de la forma: