Una Herramienta para la Predicción de Riesgos en Proyectos de Software usando Modelos en Redes Bayesianas



Documentos relacionados
SÍNTESIS Y PERSPECTIVAS

Mantenimiento de Sistemas de Información

Gestión y Desarrollo de Requisitos en Proyectos Software

Elementos requeridos para crearlos (ejemplo: el compilador)

ANÁLISIS DE RIESGOS EN LA GESTIÓN DE PROYECTOS. Los riesgos son eventos o condiciones inciertas que, si se producen, tienen un

CMMI (Capability Maturity Model Integrated)

Metodología básica de gestión de proyectos. Octubre de 2003

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas.

Por qué fracasan los Proyectos?

Capítulo IV. Manejo de Problemas

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

forma de entrenar a la nuerona en su aprendizaje.

GUÍA TÉCNICA PARA LA DEFINICIÓN DE COMPROMISOS DE CALIDAD Y SUS INDICADORES

Tratamiento del Riesgo

Modelos de Ciclo de Vida de Desarrollo de Software en el Contexto de la Industria Colombiana de Software

GANTT, PERT y CPM. Figura 5.3: Carta GANTT 3.

Unidad 1. Fundamentos en Gestión de Riesgos

Introducción. Definición de los presupuestos

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Programación Genética

Modelo para el Aseguramiento de Calidad en el Desarrollo de Software Libre

Planificación de Sistemas de Información

Planificación de Sistemas de Información

Parte I: Introducción

CAPÍTULO 4. FORMA DE EVALUACIÓN CMM. 4.1 Evolución de los métodos de valoración del SEI

Sistema de Gestión de la Seguridad de la Información, UNE-ISO/IEC 27001

Qué es Scrum? Basado en el texto Explicando Scrum a mi abuela de Jorge Serrano - MVP Visual Developer - Visual Basic

El objetivo principal del presente curso es proporcionar a sus alumnos los conocimientos y las herramientas básicas para la gestión de proyectos.

Gestión de proyectos

Gestión de la Configuración

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama.

Administración Colaborativa de Riesgos

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

INTRODUCCIÓN: Una Visión Global del Proceso de Creación de Empresas

Análisis y gestión de riesgo

El modelo de ciclo de vida cascada, captura algunos principios básicos:

Curso: Arquitectura Empresarial basado en TOGAF

3. GESTIÓN DE CONFIGURACIÓN DE SOFTWARE

El análisis consta de cuatro pasos: - Análisis Externo - Análisis Interno - Confección de la matriz FODA - Determinación de la estrategia a emplear

Enginyeria del Software III

CMM - Capability Maturity Model. Estructura de CMM... Componentes de CMM. Estructura de CMM

DE VIDA PARA EL DESARROLLO DE SISTEMAS

Unidad III. Planificación del proyecto de software

ADMINISTRACIÓN DE PROYECTOS

PRODUCTIVIDAD DE PROYECTOS DE DESARROLLO DE SOFTWARE: FACTORES DETERMINANTES E INDICADORES

Guías _SGO. Gestione administradores, usuarios y grupos de su empresa. Sistema de Gestión Online

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

Riesgo es el efecto de incertidumbre potencial en los objetivos de un proyecto.

Directrices para la auto- evaluación A.l Introducción

Es de aplicación a todas aquellas situaciones en las que se necesita desplegar un objetivo para obtener una visión clara de cómo debe ser alcanzado.

Análisis y cuantificación del Riesgo

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes:

Mesa de Ayuda Interna


Este documento enumera los diferentes tipos de Diagramas Matriciales y su proceso de construcción.

Mineria de datos y su aplicación en web mining data Redes de computadores I ELO 322

Usos de los Mapas Conceptuales en Educación

Actividades para mejoras. Actividades donde se evalúa constantemente todo el proceso del proyecto para evitar errores y eficientar los procesos.

1. INTRODUCCIÓN 1.1 INGENIERÍA

Operación 8 Claves para la ISO

Mesa de Ayuda Interna

E-learning: E-learning:

I. Información General del Procedimiento

Su éxito se mide por la pertinencia y la oportunidad de la solución, su eficacia y eficiencia.


Capítulo III. Manejo de Incidentes

Universidad acional Experimental Del Táchira Decanato de Docencia Departamento de Ingeniería en Informática

Preguntas más frecuentes sobre PROPS

INVESTIGACIÓN DE MERCADOS

Master en Dirección Empresarial (MDE)

Bloque I: Conceptos básicos y fundamentos de la Dirección de Proyectos.

Caso práctico de Cuadro de Mando con Tablas Dinámicas

El nivel de Satisfacción Laboral tomado con puntaje de mayor de 3 es lo que denota mayor satisfacción.

Planeación del Proyecto de Software:

1. Introducción al evaluación de proyectos

ADMINISTRACION DE PROYECTOS

REPORTE REGIONAL ARGENTINA Tendencias en Argentina Tercerización del Project Management Por: Ana María Rodríguez, Corresponsal Internacional PMWT

Escuela Politécnica Superior. El Riesgo. Capítulo 9. Dr. Daniel Tapias Curso 2014 / 15 PROYECTOS

GESTIÓN Y CONTROL DEL DESARROLLO E IMPLANTACIÓN DE APLICACIONES

DESCRIPCIÓN DEL PROCESO DE RIESGO OPERACIONAL

Administración del conocimiento y aprendizaje organizacional.

PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE Escuela de Ingeniería

ISO 9001:2000 DOCUMENTO INFORMATIVO DOCUMENTO ELABORADO POR CHRISTIAN NARBARTE PARA EL IVECE

ANÁLISIS Y DISEÑO DE SISTEMAS DEPARTAMENTO DE CIENCIAS E INGENIERÍA DE LA COMPUTACIÓN

1. Construcción de Planes de Acción Sectoriales (PAS)

CONSTRUCCIÓN DEL PROCESO MESA DE AYUDA INTERNA. BizAgi Process Modeler

Procesos Críticos en el Desarrollo de Software

Además, se recomienda su uso como herramienta de trabajo dentro de las actividades habituales de gestión.

Ingeniería de Software

GeneXus BPM Suite X. Última actualización: 01 de Setiembre de 2008

3.1 Qué es la investigación de mercados?

PLAN DE MEJORAS. Herramienta de trabajo. Agencia Nacional de Evaluación de la Calidad y Acreditación

Qué es el Modelo CMMI?

Mejores prácticas para el éxito de un sistema de información. Uno de los problemas de información dentro de las empresas es contar con datos

Guía de Planificación Estratégica de la Informática Educativa

Capítulo 2. Metodologías de selección de personal

MARCO METODOLÓGICO CAPITULO III

7. Conclusiones. 7.1 Resultados

Transcripción:

UNIVERSIDAD DE TALCA FACULTAD DE INGENIERIA ESCUELA INGENIERÍA CIVIL EN COMPUTACIÓN Una Herramienta para la Predicción de Riesgos en Proyectos de Software usando Modelos en Redes Bayesianas FRANCISCO GABRIEL REYES MATUS Profesor Guía: NARCISO CERPA TORRES Memoria para optar al Título de Ingeniero Civil en Computación Marzo de 2006

UNIVERSIDAD DE TALCA FACULTAD DE INGENIERIA ESCUELA INGENIERÍA CIVIL EN COMPUTACIÓN Una Herramienta para la Predicción de Riesgos en Proyectos de Software usando Modelos en Redes Bayesianas FRANCISCO GABRIEL REYES MATUS Profesor Guía: NARCISO CERPA TORRES Profesor Informante: ALFREDO CANDIA VEJAR Profesor Informante: FEDERICO MEZA MONTOYA Memoria para optar al Título de Ingeniero Civil en Computación Marzo de 2006

DEDICATORIA A mi madre y mi familia I

AGRADECIMIENTOS A quienes me apoyaron y me dieron fuerzas cuando lo necesitaba. A mi familia, mi polola, mis amigos, mis compañeros, los profesores y el centro de alumnos. En forma especial a mi papá II

TABLA DE CONTENIDOS DEDICATORIA...I AGRADECIMIENTOS...II TABLA DE CONTENIDOS... III ÍNDICE DE FIGURAS... V RESUMEN...VI ABSTRACT... VII CAPÍTULO I: INTRODUCCIÓN... 1 1.1 DESCRIPCIÓN DEL CONTEXTO... 1 1.2 DESCRIPCIÓN DEL PROBLEMA... 3 1.3 OBJETIVOS... 4 1.3.1 Objetivo General... 4 1.3.2 Objetivos Específicos... 4 1.4 ALCANCES DEL PROYECTO... 5 CAPÍTULO II: MARCO TEÓRICO... 6 2.1 GESTIÓN DE RIESGOS... 6 2.1.1 Riesgos en Proyectos de Software... 6 2.1.2 Factores y Categorías de Riesgos... 7 2.1.3 La Gestión de Riesgos en Proyectos de Software... 10 2.2 REDES BAYESIANAS... 13 2.2.1 Definición... 13 2.2.2 Construcción de una red bayesiana... 15 2.2.3 Evidencias y Propagación de Probabilidades... 15 2.2.4 Clasificadores Bayesianos... 18 2.3 ALGORITMOS DE OPTIMIZACIÓN... 20 2.3.1 Algoritmos de Fuerza Bruta... 20 2.3.2 Optimización Codiciosa... 21 2.3.3 Algoritmos Genéticos... 22 CAPÍTULO III: CONSTRUCCIÓN DE MODELOS... 25 3.1 MODELOS EN REDES BAYESIANAS... 25 3.2 CLASIFICADORES BAYESIANOS... 27 3.2.1 Clasificador Bayesiano usando SBC... 27 3.2.2 Clasificador Bayesiano usando Weka... 30 CAPÍTULO IV: CONSTRUCCIÓN DE HERRAMIENTA SOFTWARE... 33 4.1 METODOLOGÍA... 33 4.2 PROCESO DE DESARROLLO... 35 4.3 DISEÑO... 41 4.3.1 Modelo Conceptual Orientado a objetos... 41 4.3.2 Formatos de Entrada y Salida... 47 4.4 PRUEBAS DEL SOFTWARE... 48 III

4.5 CARACTERÍSTICAS DE LA IMPLEMENTACIÓN... 55 4.5.1 Herramientas utilizadas... 55 4.5.2 Interfaz Gráfica... 56 4.5.3 Gráficos Kiviat... 57 4.5.4 Otras Características... 60 4.5.5 Despliegue... 62 CAPÍTULO V: OPTIMIZACIÓN DE LA PROBABILIDAD DE ÉXITO... 63 5.1 PROBLEMÁTICA... 63 5.2 OPTIMIZACIÓN POR FUERZA BRUTA... 65 5.3 OPTIMIZACIÓN CODICIOSA... 67 5.4 OPTIMIZACIÓN POR ALGORITMOS GENÉTICOS... 69 CAPÍTULO VI: RESULTADOS... 71 6.1 PREDICCIÓN DE MODELOS... 71 6.2 ALGORITMO DE OPTIMIZACIÓN... 76 CAPÍTULO VII: CONCLUSIONES... 79 REFERENCIAS... 82 ANEXOS... 85 IV

ÍNDICE DE FIGURAS FIGURA 1: ETAPAS DE LA GESTIÓN DE RIESGOS...10 FIGURA 2: EJEMPLO DE LA ESTRUCTURA DE UNA RED BAYESIANA QUE REPRESENTA EL FUNCIONAMIENTO DE UN AUTOMÓVIL...13 FIGURA 3: EJEMPLO DE TRES NODOS CONECTADOS EN SERIE...16 FIGURA 4: EJEMPLO DE UNA CONEXIÓN DIVERGENTE...16 FIGURA 5: EJEMPLO DE UNA CONEXIÓN CONVERGENTE...17 FIGURA 6: MARKOV BLANKET DE UN NODO A...17 FIGURA 7: ESTRUCTURA DE UN CLASIFICADOR NAIVE BAYES...19 FIGURA 8: ESTRUCTURA DE UN CLASIFICADOR TAN...19 FIGURA 9: ESTRUCTURA DE UN CLASIFICADOR BAN...19 FIGURA 10: MODELO EN REDES BAYESIANAS PARA EL ÉXITO SEGÚN ORGANIZACIÓN GENERADO POR HUGIN.26 FIGURA 11: MODELO EN REDES BAYESIANAS PARA EL ÉXITO SEGÚN LÍDER DE PROYECTO GENERADO POR HUGIN...26 FIGURA 12: MODELO PARA EL ÉXITO SEGÚN ORGANIZACIÓN GENERADO CON EL ALGORITMO SBC...28 FIGURA 13: MODELO PARA EL ÉXITO SEGÚN LÍDER PROYECTO GENERADO CON EL ALGORITMO SBC...29 FIGURA 14: CLASIFICADOR BAYESIANO PARA EL ÉXITO SEGÚN ORGANIZACIÓN GENERADO POR WEKA...31 FIGURA 15: CLASIFICADOR BAYESIANO PARA EL ÉXITO SEGÚN LÍDER DE PROYECTO GENERADO POR WEKA...31 FIGURA 16: MODELO DE DESARROLLO EVOLUTIVO...33 FIGURA 17: DISEÑO POR CAPAS DE LA APLICACIÓN...41 FIGURA 18: DIAGRAMA DE CLASES DEL SISTEMA...44 FIGURA 19: DIAGRAMA DE ESTADOS DEL SISTEMA...45 FIGURA 20: DIAGRAMA DE SECUENCIA PARA INGRESAR UNA EVIDENCIA...46 FIGURA 21: INTERFAZ GRÁFICA DEL SOFTWARE...56 FIGURA 22: GRÁFICO KIVIAT POR CATEGORÍAS...58 FIGURA 23: GRÁFICO KIVIAT POR FACTORES DE RIESGO...59 FIGURA 24: CAPTURA DE PANTALLA DE HELPMAKER...60 FIGURA 25: SISTEMA DE AYUDA EN LÍNEA DE SP-RP...60 FIGURA 26: DIALOGO IMPRIMIR...61 FIGURA 27: CAPTURA DE PANTALLA DEL SOFTWARE INNO SETUP...62 FIGURA 28: ÁRBOL DE RECORRIDO DE ALGORITMO DE FUERZA BRUTA...65 FIGURA 29: ÁRBOL DE RECORRIDO DEL ALGORITMO CODICIOSO...67 FIGURA 30: ÁRBOL DE RECORRIDO DEL ALGORITMO MULTI ITERATIVO...68 FIGURA 31: GRÁFICO DE TIEMPO DE EJECUCIÓN DE LOS DISTINTOS ALGORITMOS...77 FIGURA 32: GRÁFICO DE PORCENTAJE DE EFICIENCIA DE CADA ALGORITMO...78 V

RESUMEN El desarrollo de sistemas de software es un proceso costoso, difícil y con altas tasas de fracaso. Siempre está presente la posibilidad de ocurrencia de ciertos eventos que se traducen en complicaciones para su realización a los cuales se les denomina riesgos. La habilidad del jefe de proyecto de detectar y mitigar en etapa temprana las potenciales fuentes de riesgos puede reducir costos, mejorar relación del equipo y reducir en definitiva la posibilidad de fracaso del proyecto [29]. Las redes bayesianas, por su parte, permiten representar el conocimiento experto y son una excelente herramienta en la representación de la incerteza frente a ciertos eventos [14]. Etapas anteriores a este proyecto caracterizaron los factores que afectan el proceso de desarrollo de software y se identificaron siete categorías potenciales fuentes de riesgos. Con ésta información se confeccionaron encuestas repartidas a nivel nacional en empresas de desarrollo de software y tecnologías de información. La información obtenida en las encuestas, junto con la clasificación de éxito/fracaso dada a los proyectos, permitió definir modelos probabilísticos para la predicción del nivel de riesgos de un proyecto de software. En este proyecto he construido un software que toma los modelos en redes bayesianas, permite el ingreso de evidencias que representan un proyecto nuevo y entrega la probabilidad de éxito de éste. La herramienta puede también aconsejar al jefe de proyecto un conjunto de factores que deben ser atendidos de manera especial con el fin de aumentar la probabilidad de éxito. Para esto se basa en las evidencias del proyecto, las características del modelo y en la información ingresada por el usuario en cuanto a los costos de mejorar cada factor de riesgo. Nuevos modelos han sido creados, valiéndose de nuevas herramientas de aprendizaje y selección de atributos y orientando los modelos hacia clasificadores bayesianos. Un conjunto de 14 proyectos reales han sido sometidos a la evaluación de los modelos, a través del uso de la herramienta, en promedio 12 de ellos fueron correctamente clasificados. Palabras Claves Gestión Riesgos de Software, Redes Bayesianas, Herramienta Predicción, Algoritmos Genéticos VI

ABSTRACT The software development is an expensive and difficult process and with high rates of failure. The possibility of occurrence of certain events is always present that are translated in complications for their accomplishment to which it denominates risks. The ability of the project managers to detect and to mitigate in early stage the potential sources of risks can reduce costs, improve relation of the equipment and reduce the possibility of failure of the project [29]. The bayesian networks, on the other hand, allow represent the expert knowledge and are an excellent tool in the representation of the uncertainty as opposed to certain events [14]. Previous stages to this project characterized the factors that affect the software development process and seven potential categories were identified as sources of risks. With this information surveys were made and distributed at national level in companies of software development and information technologies. The data obtained in the surveys, with the classification of success/failure given to the projects, allowed defining probabilistic models for the prediction of the risk level of a software project. In this project, a software has been developed for takes as input the bayesian networks models, it allows the entrance of evidences representing a new project and it output the probability of success of this one. The tool can also advise to the project manager a set of factors that must be taken care in a special way with the purpose of increasing the success probability. For this, it is based on the project evidences, the characteristics of the model and in the information entered by the user as the costs of improving each risk factor. New models has been creates, using new tools for learning and selection of attributes and orienting the models towards bayesian classifiers. A set of 14 real projects have been put under the evaluation of the models, through the use of the tool, in average 12 of them were correctly classified. Keywords Software Risk Management, Bayesian Networks, Prediction Tool, Genetic Algorithm VII

CAPÍTULO I: INTRODUCCIÓN 1.1 Descripción del Contexto Los proyectos de desarrollo de software se ven enfrentados a una gran variedad de problemas que no se pueden ignorar, tales como incompetencia en gestión de proyectos, planificaciones y la falta de motivación en los desarrolladores. El gerente de un proyecto de desarrollo de software y su equipo humano deben enfrentar muchas presiones de aquellas áreas e individuos interesados en el proyecto (nivel gerencial, marketing, costos, clientes, y usuarios), durante el desarrollo de éste. Esta situación tiene un impacto en el costo y la calidad del software producido. Estas presiones pueden incluir entre otras, planificaciones apretadas en tiempo, cambios en los requerimientos, y cambios en las necesidades del negocio. Los fracasos en los proyectos de desarrollo de software y la mala calidad del software desarrollado se traducen en una falta de credibilidad y problemas de comunicación entre los desarrolladores, gerentes, clientes, y usuarios, haciendo incluso más difícil el proceso de desarrollo de software. Los factores que afectan el éxito o fracaso de un proyecto, pueden ser clasificados como riesgos, factores críticos de éxito, y mitigantes. Los riesgos pueden incluir eventos del proceso de desarrollo de software o situaciones en el entorno que amenazan el éxito del proyecto. Los factores críticos de éxito son un grupo reducido de factores que el equipo de desarrollo debe asegurarse que estén presentes, ya que con su ausencia existe una alta posibilidad de que el proyecto fracase. Los mitigantes son acciones o actividades que un equipo de desarrollo puede realizar cuando un riesgo requiere ser eliminado o mitigado. Los factores críticos de éxito, riesgos y mitigantes están relacionados al éxito y fracaso de los proyectos, en una forma muy compleja. 1

CAPÍTULO I: INTRODUCCIÓN 2 En etapas anteriores de este proyecto se caracterizaron aquellos factores que afectan el proceso de desarrollo de software y el éxito de los proyectos [33][28]. Se definieron categorías y enumeraron factores de riesgo, que permitieron la creación de encuestas repartidas a nivel nacional, en empresas de desarrollo de software y de tecnologías de la información. La recolección de datos permitió la creación de modelos probabilísticas capaces de predecir el nivel de riesgo de proyectos de software en desarrollo. Para ello se utilizaron redes bayesianas con la ayuda del software HUGIN.

CAPÍTULO I: INTRODUCCIÓN 3 1.2 Descripción del Problema La habilidad de un jefe de proyecto para entender las consecuencias de las acciones tomadas durante el proceso de desarrollo, y el efecto que las decisiones tienen en el producto, es crítica para el éxito de un proyecto [11]. Estas decisiones pueden estar apoyadas en una herramienta que cuente con la experiencia de proyectos finalizados. Este conocimiento experto está dado por los modelos probabilísticas creados, sin embargo una herramienta que los manipule y los utilice para la predicción no existe aún en el mercado. Esto se hace necesaria la construcción de una herramienta de software para la utilización de los modelos predictivos y la predicción del nivel de riesgos, cuyas características más importantes de la herramienta son: Debe permitir el ingreso de características de un proyecto para recibir una predicción de la probabilidad de éxito. La representación gráfica debe permitir al usuario visualizar el estado del riesgo en cada categoría y el aporte al nivel de éxito total del proyecto. La mitigación de riesgos tiene siempre costos asociados, ya sea en valores monetarios, de tiempo u otro tipo de recursos. El deseo de llevar a buen término el proyecto hace que el líder quiera maximizar la probabilidad de éxito sujeto a los costos asociados a los cambios entre la situación actual y la óptima. La herramienta de software desarrollada debe permitir optimizar la probabilidad de éxito de un proyecto tomando en cuenta los costos asociados entre los cambios en los valores de los factores de riesgo medidos. La teoría es que existirán menos fracasos en proyectos de desarrollo de software, si los jefes de proyectos mejoran su entendimiento acerca de aquellos factores que determinan el éxito [7]. Esta herramienta debe permitir entonces identificar los factores de riesgo más influyentes en el éxito de un proyecto, para ayudar al jefe de proyecto a tomar acciones conducentes a un control de los riesgos y con esto a evitar fracaso del proyecto.

CAPÍTULO I: INTRODUCCIÓN 4 1.3 Objetivos 1.3.1 Objetivo General El objetivo general del presente trabajo es el diseño y construcción de una herramienta de software que ayude al jefe de proyecto a identificar los factores de riesgo que más afectan a un proyecto de software. Para esto se basa en modelos en redes bayesianas construidos con datos estadísticos recolectados por encuestas. 1.3.2 Objetivos Específicos Los objetivos específicos son: Diseñar y construir una herramienta de gestión de riesgos de proyectos de software con representación gráfica de los resultados obtenidos. Esta herramienta toma como base de conocimientos los modelos en redes bayesianas y permite aplicarla a un caso especifico de proyecto de desarrollo de software, indicando el nivel de riesgo percibido. Definir e implementar un algoritmo de optimización del nivel de riesgos que considere los costos involucrados en pasar de un estado a otro, de manera de sugerir un conjunto de estados de los factores de riesgo que maximicen la probabilidad de éxito. Como objetivo adicional se incluye el construir nuevos modelos probabilísticos para la predicción del nivel de riesgos, a través de la inclusión de nuevas técnicas de aprendizaje y de selección de atributos.

CAPÍTULO I: INTRODUCCIÓN 5 1.4 Alcances del Proyecto El presente trabajo se define como un proyecto de investigación y desarrollo en el área de Ingeniería de Software, que utiliza herramientas y técnicas de minería de datos. Éste se enmarca dentro del proyecto FONDECYT 1 número 1030785, titulado Elaboración de Modelos para la Identificación de Factores Críticos de Éxito, Análisis y Mitigación de Riesgos en Proyectos de Desarrollo de Software a cargo del Dr. Narciso Cerpa Torres. Este proyecto se desarrolla en tres etapas. La primera destinada a la confección de encuestas y la recolección de datos de empresas chilenas de software. La segunda usa estos datos para la construcción de modelos en redes bayesianas. Esta tercera etapa tiene como objetivo global la construcción del software para el uso de los modelos. El presente trabajo toma como base las dos etapas anteriores, éstas describen técnicas para la adquisición y manipulación de datos, la generación de modelos en redes bayesianas, así como para la evaluación de la exactitud de éstos modelos. En este trabajo no se profundiza en los métodos estadísticos relacionados con los datos ni en el funcionamiento interno de las redes bayesianas. Su enfoque central está en el proceso de desarrollo de una herramienta de software, En resumen, este trabajo abarca la implementación de la herramienta software y de un algoritmo para la optimización de la probabilidad de éxito. Además se incluye la creación de nuevos modelos probabilísticos utilizando herramientas distintas a las usadas anteriormente. En este capítulo se ha presentado el proyecto y estableciendo los objetivos que se persiguen con su realización. En el siguiente capítulo se explican los conceptos más relevantes de la teoría sobre la que se basa el proyecto, cuyo entendimiento permitirá comprender más adelante el trabajo realizado. 1 Fondo Nacional de Investigación Científica y Tecnológica

CAPÍTULO II: MARCO TEÓRICO La realización de esta memoria está relacionada con tres tópicos fundamentales: la gestión de riesgos, las redes bayesianas y los algoritmos optimización. En este capítulo se entregan los conceptos generales de estas materias con el fin de facilitar la comprensión del trabajo realizado. 2.1 Gestión de Riesgos 2.1.1 Riesgos en Proyectos de Software Se define el riesgo como la posibilidad que un evento adverso, desgracia o contratiempo pueda manifestarse produciendo una pérdida. [29][39]. El riesgo es una posibilidad futura, por lo tanto una gestión adecuada puede determinar la ocurrencia o no ocurrencia de éstos. El riesgo siempre está relacionado con dos características: [29][39] La incertidumbre, ya que todos los acontecimientos caracterizados como riesgos puede o no ocurrir. La pérdida, si el riesgo llega a ocurrir, este provocará daños o pérdidas en el proyecto. Los proyectos de software son claramente difíciles de administrar y una gran cantidad de ellos terminan en fracaso. En un proyecto de software, éste se puede traducir en una mala calidad del producto, incumplimiento de planes u objetivos y hasta el fracaso del proyecto. La gestión de riesgos en proyectos de software pretende identificar, estudiar y eliminar las fuentes de riesgo antes de que comiencen a amenazar el éxito o la finalización exitosa de un proyecto de desarrollo de software [11] [22] [39]. 6

CAPÍTULO II: MARCO TEÓRICO 7 Los responsables del proyecto pueden tomar dos posturas frente a los riesgos, una es enfrentarlos una vez que ocurran y la otra es identificarlos en una etapa temprana y tomar acciones para mitigarlos [29]. 2.1.2 Factores y Categorías de Riesgos Estudios previos han identificado siete categorías de riesgo en proyectos de software, incluyendo: (1) gestión, (2) clientes y usuarios, (3) requerimientos, (4) estimación y programación de actividades, (5) jefe de proyecto, (6) proceso de desarrollo de software y (7) personal de desarrollo [28]. En los siguientes párrafos se discute en detalle las siete categorías identificadas anteriormente. Gestión Senior / Auspiciador Las prácticas de gestión inadecuadas afectan el éxito de proyectos. Un riesgo serio en proyectos de software es la falta de apoyo de auspiciadores. Las malas prácticas de gestión y la falta de apoyo de auspiciadores pueden resultar en una falta de compromiso y/o disponibilidad por parte del cliente/usuario. Pueden existir serias consecuencias como resultado de la interferencia por parte de la gestión senior, dejando al jefe de proyecto sin la autoridad para gestionar apropiadamente éste. El cambiar al jefe de proyecto en forma arbitraria durante el desarrollo de éste puede también causar serias consecuencias. Clientes / Usuarios La falta de involucramiento del usuario en cualquiera de las fases del ciclo de desarrollo de software, también tendrá un impacto negativo en el éxito del proyecto. Los problemas de clientes/usuarios son una de las mayores fuentes de fracaso de un proyecto. Expectativas realistas de parte del cliente pueden reducir capacidad de conflicto, y esto puede a la vez ayudar en la percepción que el desarrollador y nivel de gestión tienen del éxito del proyecto. Requerimientos El entendimiento de los requerimientos es un factor crítico para el desarrollo de un sistema exitoso. La falta total o parcial de entendimiento de ambos, el problema y su entorno, conduce a requerimientos incompletos o pobres, y por lo tanto causa serios riesgos para el proyecto. Si no existe un acuerdo de parte de los clientes y usuarios con respecto a los requerimientos del proyecto, aparecerán expectativas poco realistas con respecto a éste. La obtención de requerimientos tempranamente en el proceso de desarrollo y el uso de metodologías claramente definidas que ayudan al buen entendimiento de los requerimientos por aquellos involucrados en el proyecto,

CAPÍTULO II: MARCO TEÓRICO 8 disminuye los riesgos de éste. Además, el uso de procedimientos bien definidos para procesar cambios en los requerimientos ayuda al éxito de un proyecto. Estimación de Esfuerzo y Programación de Actividades Una mala estimación de esfuerzo es frecuentemente uno de los mayores contribuyentes al fracaso de los proyectos de software. Más proyectos de software fracasan por falta de tiempo que por todas las otras causas. Si los jefes de proyectos estuvieran mejor entrenados en técnicas de estimación y metodologías, sus estimaciones de esfuerzo y programación de actividades podrían ser más creíbles. Gestión de Proyecto Un proyecto acéfalo, o con un jefe que no tiene la experiencia apropiada, corre un riesgo serio. Los principales riesgos de proyectos están asociados con el mismo proceso de gestión de proyectos, y muchas de las buenas prácticas de gestión de proyecto están relacionadas al proceso de gestión de riesgos. Por lo tanto, aquellos jefes de proyectos que son exitosos, son buenos en la gestión de riesgo. Estos exitosos jefes de proyectos no aceptan ni tampoco ignoran los riesgos potenciales del proyecto de software que están gestionando. Sin embargo, durante la ejecución de un proyecto, muchos jefes de proyecto están demasiado ocupados y sujetos a presiones propias del proyecto, de modo que ellos olvidan las fases de control de riesgo. Todos aquellos involucrados en el proyecto (nivel de gestión, desarrolladores y clientes/usuarios), y su impacto en éste necesitan ser considerados. Desarrolladores El desempeño de los desarrolladores en el proceso de desarrollo de software es crítico en términos de la actividad que ellos desarrollan, y con quien interactúan. La falta de control de proyecto tiene como resultado que los desarrolladores trabajan horas extras sin recompensa, teniendo efectos negativos en sus vidas personales, y arriesgando el éxito del proyecto. Un mayor entendimiento de lo que contribuye a mantener a estas personas felices y motivadas ayudará a disminuir los riesgos del proyecto. Los desarrolladores tienen una única perspectiva de la noción de éxito que está directamente relacionada a la motivación. Debido a que la más importante recompensa de la motivación es el crecimiento personal, la necesidad de los desarrolladores por otras recompensas, tales como aumentos de sueldos y promociones, puede ser mitigada. El satisfacer las necesidades de los desarrolladores de software contribuye a satisfacer las necesidades de clientes/usuarios como también las necesidades de la organización. Proceso de Desarrollo de Software La gestión de riesgo es solo una faceta del proceso de desarrollo de software que comienza junto con la definición y continúa a través de la planificación, ejecución y control, hasta la completación y clausura del proyecto. Sin embargo, el análisis,

CAPÍTULO II: MARCO TEÓRICO 9 seguimiento y control de riesgos es una de las áreas más débiles del proceso de desarrollo. El riesgo puede ser reducido a través del mejoramiento del proceso de desarrollo. La idea detrás del CMM (Capability Maturity Model), es situar el proceso de desarrollo de software bajo control estadístico y por lo tanto hacerlo más predecible. Metodologías de software inapropiadas, pobre planificación, monitoreo y control, agregan riesgo a un proyecto. Mucho se ha escrito acerca de los efectos negativos de las subestimaciones en la programación de un proceso de desarrollo, lo cual resulta en un acortamiento de las actividades de éste. La definición de estas siete categorías permitió enumerar factores de riesgo, cuyo listado dio origen a la encuesta de percepción de proyecto (Anexo 1). Estas categorías y factores por lo tanto forman parte de los modelos probabilísticos que se generaron más adelante y que se detallan en el Capítulo III.

CAPÍTULO II: MARCO TEÓRICO 10 2.1.3 La Gestión de Riesgos en Proyectos de Software El objetivo central de la gestión de riesgos es evitar en lo posible el efecto negativo que los riesgos pueden tener sobre el proyecto. Para ello se deben identificar los factores de riesgo que pueden provocar la pérdida de control y mitigarlos [27]. La gestión de riesgos se divide en dos etapas, en primera instancia en una estimación de los riesgos y posteriormente, en un control de éstos (Figura 1). [11][13][16][29][40] Gestión de Riesgos Estimación de Riesgos - Identificación - Análisis - Priorización Control de Riesgos - Planificación de la Gestión - Resolución - Monitorización Figura 1: Etapas de la Gestión de Riesgos A continuación se describen las etapas antes mencionadas: 1º Etapa: Estimación de Riesgos En esta etapa se pretende identificar y analizar los riesgos, para así poder asignarles prioridades con el fin de identificar los riesgos más perjudiciales. Identificación de Riesgos, en este paso lo que se desea es identificar la mayor cantidad de riesgos posibles. Análisis de Riesgos, este análisis es útil para poder seleccionar entre varias alternativas de desarrollo, o para gestionar los riesgos asociados a una alternativa que se haya elegido. En este proceso los puntos a avaluar son los siguientes: Exposición a riesgos. Estimación de la magnitud de pérdida. Estimación de la probabilidad de pérdida. Retraso total del proyecto y margen del retraso.

CAPÍTULO II: MARCO TEÓRICO 11 Priorización de los Riesgos Ya habiéndose creado una lista con los riesgos de la planificación, el paso que sigue es definir una prioridad para los riesgos, de forma que se sepa donde centrar el esfuerzo para la gestión de riesgos. 2º Etapa: Control de Riesgos En esta etapa se formula la planificación de la gestión de riesgos, la resolución y la monitorización de los riesgos durante el desarrollo del proyecto. Planificación de la gestión de Riesgos Se desarrolla un plan que controle cada uno de los riesgos clasificados de prioridad alta. Este plan debería también contener una serie de previsiones para la monitorización de los riesgos, como lo es el describir quién será el responsable para cada riesgo, así como cuándo debe realizar la monitorización y cómo debe ser realizada. Resolución de Riesgos Se generan métodos para tratar de resolver cada uno de los riesgos significativos. Monitorización de Riesgos Los riesgos aparecen y desaparecen en el desarrollo del proyecto, por tal motivo se necesita un monitoreo de éstos para poder comprobar el progreso del control de riesgos e identificar como aparecen los nuevos riesgos. Para poder llevar a cabo esta tarea, se deben definir quienes serán los encargados de esta monitorización y establecer las comprobaciones intermedias de riesgos. Es importante señalar que la gestión de riesgos consta de 5 niveles: 1. Control de crisis: Controlar los riesgos sólo cuando se han convertido en problemas. 2. Arreglar cada error: Detectar y reaccionar rápidamente ante cualquier riesgo, pero sólo después que se haya producido. 3. Mitigación de riesgos: Planificar con antelación el tiempo que necesitaría para cubrir riesgos en el caso de que ocurran, pero no intentar eliminarlos inicialmente.

CAPÍTULO II: MARCO TEÓRICO 12 4. Prevención: Crear y llevar a cabo un plan como parte del proyecto de software para identificar riesgos y evitar que se conviertan en problemas. 5. Eliminación de las causas principales: Identificar y eliminar los factores que pueden hacer posible la presencia de algún tipo de riesgo. Por lo tanto, al realizar la estimación del riesgo se debe determinar qué nivel de la gestión es necesario aplicar. Ahora que hemos mencionado como funciona la gestión de riesgos de proyectos de software, es necesario señalar la cabida de una herramienta como la que se describe en el presente trabajo en este proceso. Se puede señalar que la herramienta que utiliza modelos en redes bayesianas debe ser utilizada en la primera etapa de Estimación de Riesgos como ayuda para identificar y priorizar los riesgos más relevantes del proyecto.

CAPÍTULO II: MARCO TEÓRICO 13 2.2 Redes Bayesianas 2.2.1 Definición Una red bayesiana es un grafo acíclico dirigido en el que cada nodo representa una variable y cada arco una dependencia probabilística. La variable a la que apunta el arco es dependiente (en términos de causa-efecto) de la que está en el origen de éste. En cada variable se especifica la probabilidad condicional dados sus padres en caso de tenerlos. Una red bayesiana tiene al menos una raíz (nodo sin padre alguno) y un nodo terminal (nodo sin hijos)[14]. La topología o estructura de la red nos da información sobre las dependencias probabilísticas entre las variables y sus dependencias condicionales dada otra(s) variable(s). Figura 2: Ejemplo de la estructura de una red bayesiana que representa el funcionamiento de un automóvil En una red bayesiana cualquiera, el cálculo de la probabilidad conjunta de las n variables se puede representar como: n PX ( 1, X2 K, Xn) = PX ( i) PX ( i X j( i) ) i= 1 donde { X, X K, X } es el conjunto de padres de la variable X 1() i 2() i m() i i Las redes bayesianas son utilizadas en diversas áreas de aplicación como por ejemplo el diagnóstico médico [20]. Las mismas proveen una forma compacta de

CAPÍTULO II: MARCO TEÓRICO 14 representar el conocimiento y métodos flexibles de razonamiento, basados en las teorías probabilísticas, capaces de predecir el valor de variables no observadas y explicar las observadas. Entre las características que poseen las redes bayesianas, se puede destacar que permiten aprender sobre relaciones de dependencia y causalidad, permiten combinar conocimiento con datos, evitan el sobre-ajuste de los datos y pueden manejar bases de datos incompletas. En el contexto de este trabajo, las redes bayesianas se utilizan para representar la relación causal entre los distintos factores de riesgo y la condición de éxito o fracaso de un proyecto de desarrollo de software. Las variables o nodos de la red representan factores de riesgo cuyas distribuciones de probabilidad están dadas por los datos obtenidos en las encuestas. Las dependencias condicionales entre las variables están dadas por la relación entre un factor riesgo y otro. Esta dependencia se obtiene de un aprendizaje a través de métodos de minería de datos. El obtener una red bayesiana a partir de datos, es un proceso de aprendizaje que se divide en dos etapas: el aprendizaje estructural y el aprendizaje paramétrico. La primera de ellas, consiste en obtener la estructura de la red bayesiana, es decir, las relaciones de dependencia e independencia entre las variables involucradas. La segunda etapa, tiene como finalidad obtener las probabilidades a priori y condicionales requeridas a partir de una estructura dada [12].