Implementación de un Manejador Gráfico de Decisiones para ...

86
Implementación de un Manejador Gráfico de Decisiones para un Simulador de Juego Empresarial Daniel Tovar Mikan 200521454 Jesús Alfonso Vargas Sánchez 200621838 Universidad de los Andes Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación Bogotá D.C. 2010

Transcript of Implementación de un Manejador Gráfico de Decisiones para ...

Page 1: Implementación de un Manejador Gráfico de Decisiones para ...

Implementación de un Manejador Gráfico de

Decisiones para un Simulador de Juego

Empresarial

Daniel Tovar Mikan 200521454

Jesús Alfonso Vargas Sánchez 200621838

Universidad de los Andes

Facultad de Ingeniería

Departamento de Ingeniería de Sistemas y Computación

Bogotá D.C.

2010

Page 2: Implementación de un Manejador Gráfico de Decisiones para ...

ii

PROYECTO DE GRADO Trabajo de grado para optar por el título de Ingenieros de Sistemas y Computación

Por:

Daniel Tovar Mikan 200521454

Jesús Alfonso Vargas Sánchez 200621838

Asesores:

Rubby Casallas Gutiérrez PhD. Profesora Asociada

Rafael Gustavo Meneses Ramírez M.Sc. Instructor

Page 3: Implementación de un Manejador Gráfico de Decisiones para ...

iii

Listado de Figuras

Figura 3-1: QtDesigner para construcción de un dialogo 10

Figura 3-2: Opciones de visualización del QtDesigner 10 Figura 3-3: Qt Widgets 11 Figura 5-1: Parámetros de una Decisión 14

Figura 5-2: Filtro de un Parámetro 15 Figura 5-3: Fórmula 16 Figura 5-4: Transacciones Contables y Operativas 17

Figura 5-5: Casos de Uso 18 Figura 6-1: Patrón Observador del manejador de decisiones 28 Figura 6-2: Modelo de propiedades BaseModel aplicado a la clase Parameter 29

Figura 6-3: DecisionManager con manejadores específicos 30 Figura 6-4: Diseño Manejador de Parámetros 31 Figura 6-5: Diseño Manejador de Fórmulas 32

Figura 6-6: Diseño Manejador de Cómputos 33 Figura 6-7: Diseño Manejador de transacciones contables 34 Figura 6-8: Diseño Manejador de transacciones operativas 35

Figura 6-9: Diseño Generador de archivos MAGES 36 Figura 6-10: Diseño Lector de Metamodelo Entidad-Relación 37 Figura 6-11: Diagrama de Componentes Manejador de Decisiones 38

Figura 6-12: Diseño de QWidgets extendidos 39 Figura 6-13: Panel genérico para manejo de tablas 40 Figura 6-14: Diseño panel genérico para el manejo de tablas 41

Figura 6-15: Diseño GUI Manejador de Decisiones 42 Figura 6-16: Diseño panel contenedor de parámetros 43 Figura 6-17: Diseño panel contenedor de fórmulas 44

Figura 6-18: Diseño panel contenedor de cómputos 45 Figura 6-19: Diseño panel de transacciones contables 46 Figura 6-20: Diseño panel de transacciones operativas 47

Figura 6-21: Diseño diálogo para navegación del modelo del Juego Gerencial 48 Figura 6-22: Diseño de diálogo para crear y modificar filtros 49 Figura 6-23: Diseño de diálogo para selección de parámetros 50

Figura 6-24: Diseño diálogo para selección de cuentas 51 Figura 7-1: Introducir datos básicos de una decisión 52 Figura 7-2: Creación de un parámetro simple 53

Figura 7-3: Configuración de un parámetro simple ya creado 54 Figura 7-4: Configuración de un parámetro tipo filtro 54 Figura 7-5: Diálogo de navegación del modelo del Juego Gerencial 55

Figura 7-6: Definición de un Filtro 55 Figura 7-7: Configuración de una fórmula tipo search 56 Figura 7-8: Creación de cómputos para una decisión 57 Figura 7-9: Adición de transacciones contables 58

Figura 7-10: Diálogo para seleccionar una cuenta 58 Figura 7-11: Creación de movimientos operativos 59

Page 4: Implementación de un Manejador Gráfico de Decisiones para ...

iv

Figura 7-12: Generar archivos con sintaxis Mages 60 Figura 7-13: Guardar una decisión para su futura modificación 61 Figura 7-14: Selección de archivo con extensión .decis 61

Figura 7-15: Tiempo dedicado a la implementación 64

Page 5: Implementación de un Manejador Gráfico de Decisiones para ...

v

Resumen

En el marco del Juego Gerencial los estudiantes del curso toman una serie de decisiones

para guiar la evolución de una empresa. Cada decisión es previamente definida por un

profesor que las pone a disposición de los estudiantes. Tanto el profesor como los

estudiantes utilizan una herramienta que sirve como apoyo al curso. En ella, los estudiantes

pueden monitorear el estado de sus organizaciones y tomar las decisiones sobre éstas que

consideren necesarias. Para incorporar una decisión a dicha herramienta, se requiere de

varios interlocutores, entre los que se incluyen programadores encargados de hacer la

traducción a código de los requerimientos que exige el profesor. Esto presenta una

complicación y a la vez una oportunidad para plantear una solución. Es sobre esta

problemática que se basa el desarrollo del manejador de decisiones.

La solución que se propuso fue la implementación de una aplicación stand-alone encargada

de optimizar la manera en que se define una decisión. Ésta debía ser modificable, fácil de

comprender, amigable al usuario y manejarse de forma similar a las herramientas ya

conocidas por los usuarios. Teniendo en cuenta los anteriores requerimientos se planteó

para este proyecto la creación de una interfaz gráfica que guíe al usuario en la definición de

los conceptos de una decisión. Para que el usuario tenga un cierto grado de afinidad con la

aplicación se desarrolló una interfaz gráfica con tablas similares a las hojas de cálculo de

MS Excel. Ésta es empleada a diario por los profesores del curso del Juego Gerencial;

potenciales usuarios de este programa. Para ello, en las fases iniciales del proyecto se

investigó una librería que permite la creación de tablas con múltiples funcionalidades y

elementos gráficos agradables a la vista.

Durante el proceso de desarrollo se toman diferentes decisiones de diseño con el fin de

favorecer la usabilidad y modificabilidad de la aplicación. Las cuales, se tienen en cuenta

tanto en la lógica del manejador de decisiones como en la interfaz gráfica. Esta última se

diseñó presentándole al usuario la definición de una decisión en diferentes secciones. Cada

una de éstas se encarga de mostrar una serie de elementos relacionados, con el fin de

brindarle la mayor comodidad al usuario a la hora de plantear su definición. Una vez la

decisión se haya construido, la aplicación se encarga del procesamiento de estos datos para

generar los archivos de salida. Estos archivos se basan en el MAGES-DL: lenguaje de

dominio específico que puede ser transformado para ser utilizado por la herramienta del

juego gerencial. Así se agregaría directamente una decisión a ésta, sin necesidad de los

intermediarios antes descritos.

Page 6: Implementación de un Manejador Gráfico de Decisiones para ...

vi

Contenido

1 INTRODUCCIÓN 1

1.1 DESCRIPCIÓN DEL PROBLEMA 1 1.2 MOTIVACIÓN 2 1.3 ORGANIZACIÓN DEL DOCUMENTO 3

2 OBJETIVOS 4

2.1 OBJETIVOS GENERALES 4 2.2 OBJETIVOS ESPECÍFICOS 4

3 MARCO TEÓRICO 6

3.1 METAMODELOS Y MODELOS 6 3.1.1 ¿QUÉ ES UN MODELO? 6 3.1.2 METAMODELOS Y SU RELACIÓN CON LOS MODELOS 7 3.2 QT JAMBI 8 3.2.1 HERRAMIENTA DE DESARROLLO QT 8 3.2.2 GUI TOOLKITS 9

3.2.3 ¿QUÉ SON LOS QWIDGETS? 11 3.2.4 MANEJO DE EVENTOS EN QT JAMBI 11

4 METODOLOGÍA DE TRABAJO 13

5 ANÁLISIS DE REQUERIMIENTOS 14

5.1 ESTRUCTURA DE UNA DECISIÓN 14 5.2 REQUERIMIENTOS FUNCIONALES 18 5.2.1 CREAR UNA DECISIÓN 18 5.2.2 GUARDAR UNA DECISIÓN 19

5.2.3 ABRIR UNA DECISIÓN 19 5.2.4 MODIFICAR UNA DECISIÓN 19 5.2.5 GENERAR ARCHIVO MAGES 19 5.3 ATRIBUTOS DE CALIDAD 20 5.3.1 USABILIDAD 20 5.3.2 MODIFICABILIDAD 21 5.4 ESCENARIOS DE CALIDAD 22

5.4.1 ESCENARIOS DE USABILIDAD 22 5.4.2 ESCENARIOS DE MODIFICABILIDAD 23

6 DISEÑO 27

Page 7: Implementación de un Manejador Gráfico de Decisiones para ...

vii

6.1 JUSTIFICACIONES DE DISEÑO 27 6.1.1 SEPARACIÓN EN MANEJADORES DE MENOR TAMAÑO 27 6.1.2 IMPLEMENTACIÓN CLASES OBSERVABLES Y OBSERVADORES 28 6.1.3 MODELO DE PROPIEDADES 28 6.2 DIAGRAMAS DE CLASE 29 6.2.1 MANEJADOR DE DECISIONES Y MANEJADORES SUBORDINADOS 29

6.2.2 MANEJADOR DE PARÁMETROS 31 6.2.3 MANEJADOR DE FÓRMULAS 32 6.2.4 MANEJADOR DE CÓMPUTOS 33 6.2.5 MANEJADOR DE TRANSACCIONES CONTABLES 34 6.2.6 MANEJADOR DE TRANSACCIONES OPERATIVAS 35 6.2.7 GENERADOR ARCHIVOS MAGES 36 6.2.8 LECTOR DE METAMODELO ENTIDAD-RELACIÓN 37

6.3 MODELO DE COMPONENTES 37 6.4 JUSTIFICACIONES DE DISEÑO INTERFAZ GRÁFICA 38 6.4.1 EXTENSIÓN DE COMPONENTES GRÁFICOS QT JAMBI 38 6.4.2 PANEL GENÉRICO PARA USO DE TABLAS 40 6.5 DIAGRAMAS DE CLASE INTERFAZ DE USUARIO 42 6.5.1 INTERFAZ DE USUARIO MANEJADOR DE DECISIONES 42 6.5.2 PANEL DE PARÁMETROS 43

6.5.3 PANEL DE FÓRMULAS 44 6.5.4 PANEL DE CÓMPUTOS 45 6.5.5 PANEL DE TRANSACCIONES CONTABLES 46 6.5.6 PANEL DE TRANSACCIONES OPERATIVAS 47 6.5.7 DIALOGO PARA NAVEGACIÓN DEL MODELO DEL JUEGO GERENCIAL 48 6.5.8 DIÁLOGO PARA CREACIÓN Y MODIFICACIÓN DE FILTROS 49 6.5.9 DIÁLOGO PARA SELECCIÓN DE PARÁMETROS 49 6.5.10 DIÁLOGO PARA SELECCIÓN DE CUENTAS 50

7 PRODUCTO DESARROLLADO 52

7.1 ALCANCE OBTENIDO 52 7.1.1 DATOS BÁSICOS DE UNA DECISIÓN 52 7.1.2 CREACIÓN DE PARÁMETROS SIMPLES 53 7.1.3 CREACIÓN DE PARÁMETROS FILTRO 53 7.1.4 DECLARACIÓN DE FÓRMULAS 56 7.1.5 ORDENAMIENTO DE CÓMPUTOS 56

7.1.6 DEFINICIÓN DE TRANSACCIONES CONTABLES 57 7.1.7 DEFINICIÓN DE TRANSACCIONES OPERATIVAS 59 7.1.8 GENERAR ARCHIVOS MAGES 59 7.1.9 GUARDAR LA DECISIÓN 60 7.1.10 ABRIR LA DECISIÓN 60 7.2 MÉTRICAS 62 7.2.1 TAMAÑO DEL PRODUCTO 62

7.2.2 MÉTRICAS DE PRODUCTIVIDAD 63 7.2.3 COMPLEJIDAD CICLOMÁTICA 64

8 PRUEBAS 66

Page 8: Implementación de un Manejador Gráfico de Decisiones para ...

viii

8.1 DESCRIPCIÓN DE PRUEBAS 66 8.1.1 PRUEBAS UNITARIAS: MANEJADORES DE PARÁMETROS Y FÓRMULAS 66 8.1.2 PRUEBAS DE INTEGRACIÓN: MANEJADOR DE CÓMPUTOS 68 8.1.3 PRUEBAS VARIAS: MANEJADOR DE TRANSACCIONES CONTABLES 70 8.1.4 PRUEBAS DE INTEGRACIÓN: MANEJADOR DE TRANSACCIONES OPERATIVAS 71 8.1.5 PRUEBAS DE SISTEMA 72

8.2 EJECUCIÓN DE PRUEBAS 73

9 CONCLUSIONES 74

9.1 DISCUSIÓN 74 9.2 TRABAJO FUTURO 75

10 REFERENCIAS 77

Page 9: Implementación de un Manejador Gráfico de Decisiones para ...

1 Introducción

En el contexto del curso de Juego Gerencial se propone un marco de experimentación para

la toma de decisiones en un entorno simulado. En él se establece un espacio en que los

estudiantes experimentan la toma de decisiones, el respectivo análisis de sus resultados y la

dirección de las diferentes áreas funcionales de una organización. El desarrollo del curso se

divide en dos momentos: en primer lugar se da una etapa de concepción y especificación de

la empresa en la que se establece su estrategia global y funcional. La segunda etapa hace

referencia a la toma de decisiones cada cierto tiempo para simular la evolución de la

empresa en un ambiente de competencia [Fac10]. En esta segunda etapa del curso se

definen periodos en que los grupos corporativos toman decisiones de negocio que impactan

su participación en el mercado. Dichas decisiones son simuladas en un entorno de negocio

y al final del respectivo periodo el profesor evalúa las decisiones planeadas por cada uno de

los grupos corporativos. Así él establece la participación en el mercado de cada grupo

causada por las acciones tomadas durante el periodo [Jug10].

El curso utiliza una herramienta que apoya el proceso de simulación de las acciones

tomadas y que facilita el seguimiento de los grupos corporativos. En esta herramienta se le

facilita al profesor la definición del entorno de negocio y de las participaciones de mercado

de cada grupo al final de cada periodo. Por otra parte, los estudiantes que lo utilizan tienen

la posibilidad de obtener información sobre el estado de su grupo corporativo, su entorno

competitivo, y los resultados de su toma de decisiones, reflejados en los estados financiero

y operativo, al finalizar cada periodo [Jug10].

Esta herramienta ha sido desarrollada de forma incremental y posee oportunidades de

mejora en cuanto a la definición de las decisiones que se toman en el juego. En este aspecto

del Juego Gerencial se centra el actual documento como se verá a continuación.

1.1 Descripción del problema

En la actualidad, el profesor del curso concibe las decisiones que se podrán tomar en el

juego, pero el proceso de incorporarlas a la herramienta que se utiliza en el curso no es

totalmente automatizado. Existe un intermediario entre el profesor y el sistema del Juego

Gerencial, que posee los conocimientos para transformar la información sobre la decisión

definida por el profesor, en un formato de entrada compatible con el sistema. Esta

transformación se hace manualmente recibiendo los datos de la decisión en un archivo de

MS Excel que se acordaron en presencia del profesor, y transformándolos a un formato

XML. Este último sirve como entrada al sistema para que posteriormente los estudiantes

planeen la decisión que será ejecutada por el simulador del Juego Gerencial.

La oportunidad que surge como consecuencia de esto es definir un mecanismo en que el

mismo profesor pueda definir la decisión e incorporarla al sistema del Juego Gerencial sin

mayor necesidad de intermediarios. El producto a desarrollar debe cumplir con dos

necesidades cruciales: (1) Permitir modelar todos los conceptos de una decisión de tal

Page 10: Implementación de un Manejador Gráfico de Decisiones para ...

2

forma que se preserve la lógica que el profesor utiliza para definirla; (2) El producto

terminado debe ser amigable para el usuario, en el sentido de que utilizarlo sea

efectivamente más cómodo a como se ha venido realizando el proceso.

La solución a plantear debe afrontar esas dos situaciones y permitirle una adaptación

efectiva al profesor del curso. Para aplicar los conceptos y el proceso de definición de una

decisión a la aplicación que se busca desarrollar, se debería plantear una construcción

incremental de la decisión. En esta, se establecerían los elementos más básicos de la

decisión primero e ir construyendo elementos más complejos que los utilicen. En lo

referente a la visualización de la herramienta a desarrollar, se considera que la utilización

de tablas para los elementos de la decisión es lo más adecuado. Esto se debe a la

familiaridad del profesor con herramientas basadas en hojas de cálculo como MS Excel.

Así, se busca que el proceso para definir una decisión sea lo más similar a medios que el

profesor ha utilizado hasta el momento.

Una vez definida la decisión, debe ser posible exportarla de diferentes formas. Se espera

que esto se pueda hacer de dos maneras dependiendo del momento en el proceso de

definición de una decisión. Por un lado, se debe poder guardar una decisión de tal forma

que en un futuro pueda volver a ser abierta por el manejador de decisiones para su

consecuente edición. Esto solamente implica serializar todo el contenido que se tenga hasta

cierto punto y al momento de abrirla, que se despliegue el mismo contenido nuevamente en

la interfaz de usuario. Por otra parte, se generaría un archivo de texto con una sintaxis

específicamente diseñada para manejar información de una decisión. Este archivo

atravesaría una serie de transformaciones para luego procesarse directamente en la

herramienta del Juego Gerencial para incorporar la nueva decisión. Dicha sintaxis, parte del

lenguaje MAGES-DL, se definió en [Tel10], un proceso realizado paralelamente al del

manejador de decisiones que se trata en este documento.

1.2 Motivación

Desde la primera versión del sistema del Juego Gerencial se estableció que su diseño debía

favorecer la evolución del mismo. Inicialmente, se tenía un conjunto limitado de

decisiones, pero a futuro se debía contar con la flexibilidad adecuada para que un usuario

final pudiese definir nuevas decisiones y modelar la forma en que estas afectan los estados

de los grupos corporativos [Jug10]. En posteriores desarrollos del sistema se incorporó la

capacidad de especificar decisiones en un formato establecido e interpretable por los

componentes del sistema. Sin embargo este mecanismo, como se explicó anteriormente,

requiere de un intermediario que en principio puede evitarse. Así se aceleraría el proceso de

definición de una decisión, resultando en una menor dedicación en actividades

administrativas de un Juego Gerencial.

El manejador de decisiones forma parte de este proceso de crecimiento y mejora del

sistema de Juego Gerencial. Esta es una primera aproximación a la necesidad de proveer

herramientas para la definición de una decisión y su consecuente incorporación al sistema.

Page 11: Implementación de un Manejador Gráfico de Decisiones para ...

3

Como primera propuesta para solucionar dicha problemática, se busca que el producto

pueda evolucionar a futuro y que encapsule la lógica de una decisión de tal forma que

pueda ser modificada fácilmente. Así, se espera que otros desarrolladores puedan retomar el

producto y continuar realizando mejoras según las observaciones de profesores y personas

involucradas en el proyecto del Juego Gerencial.

1.3 Organización del documento

Este trabajo se enfoca en fundamentar y documentar el desarrollo de la aplicación para la

definición de decisiones. La secuencia de secciones de este documento viene definida por el

proceso que se siguió para llegar a una aplicación funcional, desde su especificación hasta

las pruebas realizadas. En la siguiente sección se presenta un marco teórico que comprende

algunas de las tecnologías y conceptos más notables en los que se basan el sistema del

Juego Gerencial, la construcción del manejador de decisiones y su visión a futuro. Por

medio de éste es más fácil comprender algunas de las situaciones que se enfrentaron en las

etapas de diseño e implementación del producto. Seguidamente, se expone la metodología

de desarrollo que se planteó para esta aplicación.

En posteriores secciones se encuentran las diferentes etapas que se llevaron a cabo para

llegar a un producto terminado. En primera medida, se presenta el análisis de

requerimientos de la aplicación. En ésta se documentan los requerimientos con los que

debía cumplir el programa, teniendo en cuenta ciertos atributos de calidad que también se

especifican en esta sección. Luego se presenta el diseño de la aplicación que documenta la

estructura de la lógica y de la interfaz gráfica que se buscaba lograr. A su vez, se presentan

las justificaciones más importantes de las decisiones tomadas sobre la interacción entre los

diferentes elementos del modelo desarrollado.

Una vez expuesto el diseño de la aplicación, se presentan los resultados del proceso de

implementación. En esta sección se exhibe el alcance obtenido y se discuten las

funcionalidades alcanzadas por el grupo de desarrollo. También se presentan estadísticas

del producto terminado que incluyen métricas sobre el tamaño del programa. Seguido se

encuentra la sección de pruebas realizadas sobre la aplicación. En ella se exponen y

justifican los tipos de validaciones que se realizaron sobre los componentes de la

aplicación, junto con los resultados obtenidos. Por último, se presentan las conclusiones

correspondientes del trabajo realizado, oportunidades de mejora y el trabajo a futuro que

puede llevarse a cabo como parte de este desarrollo incremental.

Page 12: Implementación de un Manejador Gráfico de Decisiones para ...

4

2 Objetivos

En esta sección se exponen los objetivos generales y específicos que se establecieron en

cuanto al proceso de desarrollo y al producto deseado.

2.1 Objetivos Generales

Desarrollar una aplicación para la definición completa de una decisión

Se pretende construir un medio a través del cual se pueda crear una decisión con todos

los elementos que la componen. Para ello se debía comprender el papel de cada

elemento de una decisión, sus relaciones y dependencias. Así, se establecería claramente

el proceso de definición que debe ser apoyado por el manejador de decisiones.

Implementar una interfaz gráfica altamente usable por el usuario

Buena parte del cambio que se espera causar con este proyecto viene dado por la

facilidad de adaptarlo al proceso de definición de decisiones con el que ya cuentan en el

proyecto del Juego Gerencial. Una faceta crucial de dicha labor es presentar una interfaz

gráfica que sea intuitiva para el usuario y que aprender a utilizarla no implique mayor

dedicación. Por ello, se considera que una opción adecuada es utilizar tablas similares a

las que se observan en las hojas de cálculo que se han utilizado en el proyecto para

definir las decisiones. Así, se esperaría proponer una experiencia más familiar para el

usuario y que promueva la usabilidad de la aplicación.

Proponer un diseño que favorezca la modificabilidad y evolución del manejador

Por tratarse de una aplicación que va a estar sujeta a cambios en el futuro, debe estar en

capacidad de soportar dichas modificaciones con relativa facilidad. Estas pueden tratarse

de corrección de fallas, mejorar el desempeño o adaptarlo a algún cambio en las reglas

de negocio. Esto implica que, en lo posible, el manejador de decisiones debería poderse

mantener en, o cambiar a, un estado en el que pueda cumplir las funciones requeridas sin

incurrir en modificaciones de todos sus componentes [Bar03].

2.2 Objetivos Específicos

Identificar una librería para interfaces gráficas

La escogencia de esta librería se basa en sus funcionalidades respecto a las tablas y en la

variedad de componentes gráficos que se puedan utilizar. Se busca crear una interfaz

llamativa a la vista y que incorporar múltiples tablas en la aplicación genere una

experiencia similar a usar hojas de cálculo.

Page 13: Implementación de un Manejador Gráfico de Decisiones para ...

5

Comprender el proceso de definición de una decisión y su uso en el sistema del

Juego Gerencial

Se deben identificar los puntos de mejora en el proceso de definición de una decisión.

Para ello, se estudiará la forma en que éstas se construyen actualmente y el impacto que

pueda causar esta aplicación en el Juego Gerencial.

Estudiar los elementos que componen una decisión y las relaciones entre ellos

Con el fin de establecer un diseño consecuente con la realidad de una decisión, se deben

comprender qué elementos la componen y cómo se relacionan entre ellos. De esta forma,

los conceptos que se presenten en el producto terminado serán fácilmente identificados

por los usuarios finales.

Definir un esquema para la interfaz gráfica que siga el orden en que se definen los

elementos de una decisión

Se propone una interfaz en la que a medida que se avanza en la construcción de la

decisión, sus elementos más complejos hacen uso de elementos definidos previamente.

Este debe ser un orden que se haga evidente al momento de interactuar con la interfaz

gráfica.

Diseñar la representación de los elementos de una decisión en la aplicación y la

lógica completa para el manejo de estos

Cada entidad que compone una decisión debe verse definida en el modelo de una

decisión que utilice la aplicación. Se deben establecer componentes que se encarguen de

administrar cada elemento de este modelo y la forma en que estos se asocian para

construir la decisión.

Utilizar una decisión ya definida en el Juego Gerencial para ejemplificar y validar

el uso del programa

Al intentar introducir una decisión completa en la aplicación desarrollada es posible

identificar puntos fuertes y puntos por mejorar en esta. Así se evidencia la utilidad del

producto y es posible también reconocer mejoras potenciales en la definición de una

decisión.

Generar un archivo de texto con la gramática MAGES para su futura

incorporación al sistema del Juego Gerencial

Después de definir una decisión, debe existir una forma de incorporarla al Juego

Gerencial. Para ello, se debe implementar un generador MAGES que basado en los datos

introducidos sobre una decisión genere una serie de archivos establecidos. Los cuales,

serán posteriormente leídos por un interpretador y transformado finalmente en una

decisión disponible en el juego.

Page 14: Implementación de un Manejador Gráfico de Decisiones para ...

6

3 Marco Teórico

El sistema del Juego Gerencial y el manejador de decisiones se basan en uno o más de los

elementos que se tratan a continuación. El sistema del Juego Gerencial que utilizan en el

curso se ha construido con base en el uso de tecnologías que permiten transformar modelos

a código que puede ser ejecutado. La idea fundamental detrás de esto es disminuir los

tiempos de desarrollo en la medida que no se tenga que programar directamente, sino

creando modelos a partir de los cuales se genere automáticamente el código. En la primera

sección de este marco teórico se presenta una descripción de esta tecnología y de su

relevancia tanto en la herramienta del Juego Gerencial, como en la aplicación desarrollada

para definir decisiones.

La siguiente sección introduce la librería gráfica que se utilizó en el manejador de

decisiones. Se presentan sus diferentes características y limitantes con el fin de comprender

en mayor medida las posteriores decisiones de diseño e implementación que se tomaron.

3.1 Metamodelos y modelos

A continuación se presenta una introducción a una serie de conceptos y tecnologías

fundamentales para la herramienta del Juego Gerencial y el manejador de decisiones. Los

modelos, y las transformaciones de estos a código ejecutable, son utilizados ampliamente

en el Juego Gerencial para generar tanto la lógica del sistema como la interfaz gráfica Web.

A su vez, en el manejador de decisiones se leen datos a partir de modelos y se generan

archivos de texto con una sintaxis conforme al metamodelo de una decisión. Las siguientes

secciones contribuyen a crear conceptos comunes sobre modelos, meta-modelos y su

relación.

3.1.1 ¿Qué es un modelo?

Si se piensa en un modelo como una entidad ajena a la construcción de software, se puede

establecer que es una manera de describir a un sistema o a un proceso para estudiar parte de

su comportamiento ante diferentes situaciones y comunicarlo posteriormente. Lo cual, no

es complejo de asimilar si se trata de un modelo de un automóvil por ejemplo. Éste se crea

para analizar el funcionamiento y características puntuales del mismo, como tolerancia a

choques, o la manera que el viento afecta su desempeño. Se crean de tal forma que

representen un comportamiento lo más cercano a lo que sería en la realidad, sin necesidad

de incurrir en todos los costos de fabricación necesarios para producir la copia real del

automóvil, entre otros objetivos [Küh05]. Lo mismo ocurre en otras áreas de la ingeniería

como la construcción de edificaciones, de componentes electrónicos, por nombrar algunos.

Ahora bien, extrapolar esta noción de modelo al área de la construcción de software puede

ser algo más compleja.

Existe cierta diferencia entre la noción tradicional de modelos en ingeniería, y lo que se

entiende como modelos para el desarrollo de software. En general, los modelos que se

Page 15: Implementación de un Manejador Gráfico de Decisiones para ...

7

utilizan en diferentes estudios son simulaciones de objetos que siguen una serie de reglas

físicas. En cambio, los modelos de software se centran más en una descripción y un

esquema de construcción para algo que finalmente no se convertirá en algo tan material

como un automóvil o una casa. Esto se debe a que en el centro del desarrollo de software,

se encuentra una inherente abstracción del mundo real, la cual se representa por medio de

modelos. Los cuales, pueden ser utilizados para dos fines: describir un sistema ya existente,

o especificar un sistema a construir [Sei03]. En el primer caso, el modelo se evalúa respecto

a una serie de leyes y propiedades que exhibe el sistema. La validez del modelo en este

caso es relativa a qué tan bien represente el comportamiento del sistema en cuestión. En el

segundo caso, el sistema desarrollado es el que no se debería desviar de las especificaciones

del modelo, y en caso de hacerlo es el sistema lo que es inválido respecto al modelo mismo.

Para el manejador de decisiones son importantes estas dos funciones, puesto que por un

lado, se tiene un modelo describe el sistema del Juego Gerencial y que sirve de entrada para

crear una decisión. Por otro lado, se busca definir un modelo que especifique las

propiedades ya conocidas de una decisión.

En lo referente al Juego Gerencial, se tiene un modelo que representa las diferentes

entidades que componen al juego mismo. Elementos como “Unidad de negocio”,

“Periodo”, “Estado Operativo” y “Región” forman parte de este modelo. El manejador de

decisiones recurre a este modelo para asociar elementos del mismo a la decisión que se esté

creando. Por otra parte, se tiene un modelo que representa una decisión y que contiene los

elementos que la conforman y la relación que existe entre cada uno de ellos. El manejador

de decisiones genera un archivo, que a partir de una sintaxis específica expresa las

características de la decisión que se esté definiendo en el momento. Esta sintaxis se basa en

los elementos del modelo de una decisión para lograr dicha labor. Sin embargo, esta

sintaxis no se definió para este trabajo en concreto, sino uno que se realizó en paralelo.

Información sobre este proyecto se puede obtener en [Tel10].

Lo importante a resaltar en los modelos es que el enfoque del desarrollo de software pueden

ser ellos mismos. En la programación orientada a objetos, los modelos realizados en las

etapas de análisis y diseño se limitan a ser guías para que un grupo de programadores

tengan un soporte al momento de implementar la solución. Si vamos más allá de ese

esquema, podría considerarse la posibilidad de generar directamente parte del código del

sistema deseado basándose en la información que contengan los modelos creados. Lo cual

aportaría a la constante búsqueda de disminución de costos y tiempos del lanzamiento del

producto al mercado, junto con una mejoría en la calidad del software mismo. Sin embargo,

para acercarse a este objetivo es necesario definir una serie de reglas respecto a la forma de

hacer los modelos, lo cual se tratará a continuación.

3.1.2 Metamodelos y su relación con los modelos

Se busca un lenguaje, unas reglas y unas restricciones para poder expresar los modelos

mismos como abstracciones de la realidad. En ese sentido, cualquier modelo que se realice

debe ser conforme a un metamodelo [Bez04]. Este último establece los elementos que se

pueden utilizar en un modelo, las relaciones estructurales entre estos elementos y una serie

de restricciones que quizás no se puedan expresar gráficamente. Así, un modelo debe ser

Page 16: Implementación de un Manejador Gráfico de Decisiones para ...

8

creado en términos del lenguaje que presente su respectivo metamodelo, por medio de una

sintaxis, semántica y reglas de inferencia claramente establecidas. Se dice entonces, que un

modelo es conforme a un metamodelo en la medida que el primero utilice los elementos

gráficos y textuales, junto con las reglas establecidas para crearlos y relacionarlos entre sí,

que especifica el metamodelo.

Sin embargo, surge la problemática de que pueden darse una gran cantidad de metamodelos

incompatibles e individuales que responden solo por el contexto en el que fueron creados y

que evolucionan de forma separada. Por lo cual, se hizo necesario establecer un modelo

más allá de los metamodelos (un meta-metamodelo), llamado “Meta Object Facility”

(MOF) y concebido por la OMG (Object Management Group). Todo metamodelo debe ser

conforme a éste ya que establece el lenguaje y propiedades estandarizadas para que haya un

consenso respecto a la construcción de metamodelos. De esta forma se nota la diferencia

entre un modelo y un metamodelo, en la medida que el modelo solo responde ante algún

metamodelo creado por los desarrolladores mismos. En cambio, un metamodelo debe

responder solo ante el meta-metamodelo, que en este caso se refiere a MOF [OMG06].

Aplicando dicha noción al caso del Juego Gerencial, se pueden observar dos metamodelos

y la forma en que se utilizan modelos conformes a ellos. En primera medida, se tiene un

modelo anterior a la realización del manejador de decisiones, que como se explicó

anteriormente, contiene los elementos que se utilizan en un Juego Gerencial. Este modelo

es conforme a un metamodelo EA (Entidad-Relación por sus siglas en inglés). Este

metamodelo contiene elementos como Entidad, que poseen asociaciones o relaciones con

otras entidades. Las entidades también tienen atributos y operaciones. El modelo del Juego

Gerencial fue creado a partir de dichos elementos y así, se crean entidades como “Unidad

de Negocio” que posee atributos como “nombre” y asociaciones a otras entidades como

“Estado Operativo”. En segunda medida, el MAGES-DL [Tel10] definió un metamodelo

para una decisión. En este se tienen elementos como “Transacción Operativa” y “Parámetro

Simple” que son genéricos a toda decisión. Luego, el manejador de decisiones convertirá

los datos de la decisión que se desee crear, en un modelo que instancia los elementos del

metamodelo de una decisión para su caso específico. Este modelo se representa por medio

de la sintaxis específica para el metamodelo de una decisión.

3.2 Qt Jambi

En esta sección se presenta la herramienta seleccionada para el desarrollo de la interfaz

gráfica de este proyecto. Ésta fue elegida por su versatilidad para crear interfaces graficas

amigables y por las diferentes capacidades ofrecidas para el manejo de tablas.

3.2.1 Herramienta de Desarrollo Qt

Qt es una librería multiplataforma desarrollada desde 1991 y publicada en 1995 por la

empresa noruega Trolltech. Desde su primera versión, fue diseñada con el objetivo de

proveer un entorno de interacción gráfico compatible con Unix, Macintosh y Windows. Ya

Page 17: Implementación de un Manejador Gráfico de Decisiones para ...

9

en 1993 sus creadores habían desarrollado el primer kernel Qt a partir del lenguaje C++ y

se encontraban en capacidad de implementar sus propios componentes gráficos. Con el

paso de los años fueron adquiriendo un mayor número de clientes y en 1997 adquirió

mayor auge gracias a su utilización en el proyecto KDE para la construcción de interfaces

gráficas en Linux [BS04].

La reputación de Qt viene dada no solo por ser una herramienta multi-plataforma, sino

porproveer un API intuitivo y ordenado. Esto le presenta a los desarrolladores la posibilidad

de trabajar en un sistema operativo y ampliar su mercado a otros de estos teniendo

solamente que volver a compilar su código Qt. A su vez, los programas desarrollados en Qt

tienden a ser rápidos gracias a la optimización de su implementación [BS04]. Gracias a

estas características Qt extendió su dominio a las plataformas móviles y presentó librerías

adicionales para adaptarse a varios lenguajes de programación. Entre ellas, se encuentra Qt

Jambi como adaptador para Java. Así, se presenta una alternativa a otras herramientas

disponibles en este lenguaje como Swing [RV04] o SWT [NW04], y que cuenta con una

serie de componentes más atractivos a la vista y al momento de programar.

3.2.2 GUI Toolkits

Las herramientas para desarrollar interfaces gráficas, o GUI toolkits, no son muy conocidas

en MS Windows o Macintosh, pero son ampliamente difundidas en Unix. En el caso de

Unix, y a diferencia de los otros dos sistemas operativos, éste no cuenta con una serie de

primitivas como botones o cuadros de texto a partir de los cuales diseñar una interfaz. Unix

ofrece una cantidad muy limitada de funciones gráficas y construir una aplicación con éstas

resulta ser una labor sumamente extenuante. Por lo cual, han surgido múltiples toolkits para

apoyar a los desarrolladores en esta labor y facilitar la creación de elementos gráficos más

complejos. Windows por su parte provee un API con funciones para crear diversos

elementos gráficos, manipular colores, entre otras. Sin embargo, estas funciones no son lo

suficientemente sencillas de utilizar como para facilitar la creación de interfaces gráficas

sofisticadas. Razón por la cual, aparecen frameworks como Qt.

Como framework, Qt es más que una librería de elementos gráficos como botones y menús.

Esta plataforma aísla al desarrollador delos detalles de implementación de bajo nivel y le

proporciona una serie de herramientas para responder ante la interacción del usuario con

sus componentes gráficos [Kal02]. Esta es una razón importante por la cual se utiliza Qt, y

más específicamente Qt Jambi, en el desarrollo del manejador de decisiones. Es una librería

que provee una diversidad de medios para interactuar con el usuario y cuenta con un

catálogo de elementos gráficos que contribuyen a la creación de una interfaz llamativa.

Entre una de sus herramientas se encuentra el QtDesigner. Éste permite definir la relación

entre los componentes gráficos al interior de la interfaz y cuenta con la capacidad de

mostrar cómo se vería la interfaz gráfica en diferentes entornos de ejecución. La Figura 3-1

presenta el espacio de trabajo en que se construye la interfaz gráfica y algunas de las

opciones con las que se pueden configurar. La Figura 3-2 ilustra las diferentes opciones que

provee el QtDesigner para visualizar la interfaz.

Page 18: Implementación de un Manejador Gráfico de Decisiones para ...

10

Figura 3-1: QtDesigner para construcción de un dialogo

Figura 3-2: Opciones de visualización del QtDesigner

Page 19: Implementación de un Manejador Gráfico de Decisiones para ...

11

3.2.3 ¿Qué son los QWidgets?

Los QWidgets son elementos gráficos que sirven de bloques para una aplicación. Los

widgets se pueden dividir en dos categorías: de tipo simple y compuesto. En Qt, son

widgets simples aquellos como etiquetas (labels), botones y cuadros de texto. El

desarrollador al momento de crear su interfaz puede unir diferentes widgets simples para

formar un widget compuesto. Este nuevo widget puede ser usado en diferentes puntos de la

aplicación y es una característica de la cual se aprovecha el manejador de decisiones para

reutilizar paneles con tablas como se verá más adelante. La Figura 3-3 presenta la lista de

widgets predefinidos por Qt.

Figura 3-3: Qt Widgets

3.2.4 Manejo de eventos en Qt Jambi

Qt introduce los conceptos de slots y signals para manejar los eventos que se presentan en

los widgets.

Signals: Son declaraciones para expresar eventos producidos por la interacción entre el

usuario y algún widget. Estos pueden ser un click del mouse o la entrada del teclado, los

cuales generan el lanzamiento de un evento dependiendo del tipo de widget [Kal02].

Cada widget tiene asociada una serie de eventos que el desarrollador puede utilizar para

que su aplicación responda ante la ocurrencia de los mismos. Un botón por ejemplo,

cuenta con las señales clicked, pressed y released, que son lanzadas dependiendo de la

forma en que éste interactúe con el mouse.

Slots: Son los receptores de las señales y definen la forma en que se responderá al

evento en cuestión. Los slots en el caso de Qt Jambi son métodos implementados en

Java. Estos pueden ser de tipo privado, protegido o público dependiendo de la situación

Page 20: Implementación de un Manejador Gráfico de Decisiones para ...

12

que se desee manejar y pueden encontrarse en instancias de cualquier objeto de la

aplicación.

Para lograr esto, cada señal cuenta con un método connect que recibe dos parámetros: la

instancia del objeto que responde a la señal, y el método de este que será invocado (slot)

[Kal02]. Este slot debe cumplir con una lista de parámetros que se determinan a partir de la

señal con la que esté conectada. En el caso de la señal clicked de un botón, se seguiría un

esquema como el siguiente:

QPushButton button;

… button.clicked.connect(this,"testSlot(Boolean)");

… private void testSlot(Boolean b)

{

button.setText("Hello Qt");

}

La señal clicked exige que el slot receptor tenga como parámetro un objeto de tipo Boolean.

De lo contrario, la aplicación fallaría en ejecución. Como se puede observar en el ejemplo

anterior, este esquema de signals y slots puede presenta inconvenientes en la

modificabilidad del manejador de decisiones. Esto se debe a que eventualmente se podrían

asociar métodos de cualquier objeto a una señal, y en caso de modificar la declaración del

slot, sería necesario hacer cambios en múltiples puntos. A su vez, es un sistema susceptible

a errores por tener que mantener establecidos los nombres de los métodos slot a invocar y

porque un error en un parámetro de un slot no se identifica al momento de compilar el

código, sino solo en ejecución. Por lo cual, en la sección de diseño del manejador de

decisiones se plantean alternativas a este sistema.

Page 21: Implementación de un Manejador Gráfico de Decisiones para ...

13

4 Metodología de Trabajo

El desarrollo del manejador de decisiones debió tener en cuenta múltiples características del

proyecto para realizarlo de la forma más efectiva posible. Como primera medida, el grupo

de desarrollo constaba de sólo dos personas. Por lo que si bien la comunicación se

facilitaba, se hacía necesaria una correcta distribución de labores y un seguimiento

constante de actividades realizadas. En segundo lugar, la comprensión de los

requerimientos y el entendimiento de lo que compone a una decisión se dieron a la par del

proceso de análisis, diseño e implementación del producto. Esto implicaba que en cualquier

momento podía ser necesario reestructurar algún entregable de la aplicación. Así, en tercer

lugar, se requerían reuniones cada cierto periodo de tiempo con diferentes personas para

comprender mejor la problemática a resolver, adaptarse a los cambios presentados y

redefinir la construcción incremental de la aplicación.

Ante el tamaño del grupo se debió buscar una estrategia que tuviese en cuenta la rápida

adaptación a nuevas tecnologías como Qt Jambi, y cambios frecuentes en las actividades de

análisis, diseño e implementación. Por ello, se decidió utilizar algunos principios del

método Extreme Programming (XP). Principalmente se utilizaron las reglas de este método

sobre desarrollo iterativo, programación por pares, frecuente integración y soluciones spike

[Bec00]. Este último elemento es importante en la medida que se resuelve un problema

puntual de forma aislada para comprender cómo se soluciona y luego se aplican estos

conocimientos concretamente al manejador de decisiones. Eso se utilizó principalmente con

Qt Jambi, puesto que no había mayor conocimiento de la herramienta previo al inicio de

este proyecto. Luego para aprender a utilizar sus diferentes componentes gráficos, se

crearon varios proyectos simples y desechables a lo largo de la construcción de la

aplicación que se centraran solo en el uso de esta librería.

Cada una o dos semanas se realizaban reuniones con diferentes personas involucradas en el

proyecto del Juego Gerencial. En estas se presentaban los avances de la aplicación que

fuesen adecuados para cada reunión. Junto con el grupo asesor y en algunas ocasiones con

desarrolladores del Juego Gerencial se realizaban recomendaciones y correcciones sobre la

versión del manejador de decisiones que se tuviese en ese momento. Basado en estas

reuniones se procedía a realizar el análisis de nuevas labores, de elementos de la aplicación

que tuviesen que ser modificadas y se distribuían rápidamente estas tareas para responder

ágilmente a los cambios deseados. Como consecuencia de esto se tienen cinco mayores

iteraciones del manejador de decisiones. Cada una con una serie notable de cambios

respecto a su versión anterior.

Se realizaban reuniones del grupo de desarrollo con buena frecuencia debido al tiempo

limitado y a la facilidad con la que cambiaban las reglas para definir una decisión. En éstas,

realizadas mínimo una vez a la semana, se buscaba lograr un conocimiento común al

interior del grupo, sobre lo que se quería lograr y en algunos casos hasta se rediseñaban

elementos de la aplicación. Además se revisaba lo que se había logrado hasta ese momento,

qué había que corregir, qué faltaba agregar y quien sería el responsable de esto.

Page 22: Implementación de un Manejador Gráfico de Decisiones para ...

14

5 Análisis de Requerimientos

Habiendo establecido el problema que se busca resolver y el marco teórico que sirve como

fundamento para las próximas secciones, se procede a detallar la solución que se busca

alcanzar. En esta sección se identifican los objetos que forman parte de la solución a

desarrollar, las asociaciones que existen entre ellos y sus respectivos atributos. Se

consideran las necesidades del profesor que utilizará el producto terminado para definir las

decisiones junto con las expectativas de calidad de la aplicación. En primera medida se

define claramente qué es una decisión a partir de los elementos que la componen. A su vez,

se explican los principales componentes de la misma. Una vez establecido ese lenguaje

común para expresar los elementos de la solución, se exponen los casos de uso que hacen

referencia a las interacciones que se desean lograr entre el profesor y el manejador de

decisiones. Posteriormente, se documentan los requerimientos en términos de dicha

interacción, sus entradas y sus resultados. Por último, se exponen los principales atributos

de calidad que se buscan favorecer en el diseño e implementación de esta herramienta.

5.1 Estructura de una Decisión

El desarrollo de esta herramienta parte de una correcta comprensión de los elementos que

se busca modelar. Para lograr esto, se estudiaron los archivos de MS Excel donde se definía

inicialmente una decisión. Luego, se analizaron los archivos XML donde se especificaba de

forma definitiva los elementos que componen una decisión y la relación existente entre

ellos. A partir de estos, se pudo establecer un proceso de construcción de una decisión que

debía ser modelado en la aplicación.

El proceso de construcción inicia con una Decisión como elemento central. A este se le

atribuyen propiedades como un nombre, un tipo y una descripción. Los elementos más

básicos de una decisión son, adicionalmente, los parámetros que serán utilizados por otros

componentes. Se identificaron dos tipos iniciales de parámetros que se describen a

continuación y se muestran en la Figura 5-1.

Figura 5-1: Parámetros de una Decisión

Page 23: Implementación de un Manejador Gráfico de Decisiones para ...

15

Parámetro Tipo Simple: Es el tipo más básico de parámetro que se puede incluir en una

decisión. Solamente pueden manejar datos de tipos básicos como enteros, reales o cadenas

de texto. A su vez, tiene un valor inicial dependiendo del tipo de dato de dicho parámetro.

Parámetro Tipo Filtro: Este tipo de parámetros tiene como objetivo acceder a la base de

datos del Juego Gerencial para extraer información que servirá como parámetro de entrada

en la ejecución de la decisión. Por ello, tiene asociada una entidad del modelo que es el

resultado de ejecutar la consulta del filtro. El resultado de la consulta también puede ser un

tipo básico como un entero o una cadena de texto. La consulta de este parámetro se define a

partir de otras entidades como se muestra en la Figura 5-2.

Figura 5-2: Filtro de un Parámetro

Filtro: Elemento central para una consulta a la base de datos del Juego Gerencial. Éste

administra a un elemento Query que es el encargado de contener la expresión de la consulta

y saber en qué lenguaje está escrita. A su vez, el Filtro contiene una serie de parámetros

según sean necesarios para realizar la consulta.

Continuando con el orden de los componentes de una decisión encontramos las fórmulas.

Estas son las encargadas de definir en qué orden se realizan los cómputos de una decisión y

cuáles parámetros intervienen en cada uno de estos cálculos. Los resultados de las fórmulas

pueden ser utilizados por otras fórmulas para construir una cadena de dependencias en la

computación de la decisión. Por esta razón, el resultado de una fórmula se considera

también como un parámetro.

Las fórmulas de una decisión se clasifican en cuatro categorías. Las de tipo Access retornan

un atributo especificado de un objeto. Este objeto puede ser obtenido a partir de otra

fórmula, o de un parámetro tipo filtro. El segundo tipo de fórmula es Operation y retorna el

resultado de una expresión matemática cuyos operandos son los parámetros de la función.

El tercer tipo es Service, el cual define la localización de un servicio externo que debe ser

Page 24: Implementación de un Manejador Gráfico de Decisiones para ...

16

invocado por el simulador. Por último, las fórmulas Search realizan una consulta a partir de

un Filtro asociado. Este es del mismo tipo que los utilizados por los parámetros tipo filtro.

Fórmula: Elemento central para los cómputos de una decisión que toma como argumentos

a parámetros tipo simple, tipo filtro o los resultados de otras fórmulas. Los parámetros de

una fórmula se declaran por medio de un elemento denominado

FormulaParameterAssociation. Dependiendo del tipo de fórmula, contarán con otra serie

de elementos asociados como filtros o proveedores de servicios. Se consideran parámetros

en la medida que sus resultados pueden ser utilizados como argumentos en la invocación de

otras fórmulas en la cadena de cómputos de una decisión.

Figura 5-3: Fórmula

Los elementos que finalmente requieren de todos los anteriores son las transacciones. Hay

dos tipos de transacciones en una decisión: Contables y Operativas. Cada transacción

contiene una serie de movimientos. Los movimientos operativos contienen atributos que

tienen asociado un parámetro que es el encargado de proporcionarle el valor a dicho

atributo. Como se definió anteriormente, un parámetro puede estar definido en términos de

un parámetro simple, filtro o del resultado de la invocación de una fórmula. La Figura 5-4

presenta la relación entre estos elementos y los diferentes parámetros.

Transacción: Es el medio a través del cual la decisión afecta el estado operativo y contable

de una unidad de un grupo corporativo. En el caso de una transacción operativa, el efecto

de sus movimientos se ven reflejados en una unidad de negocio. Esta unidad de negocio se

Page 25: Implementación de un Manejador Gráfico de Decisiones para ...

17

obtiene a partir de un parámetro tipo filtro que con base en su consulta retorna la unidad

deseada. Por otra parte, en caso de que haya un movimiento cuya operación sea eliminar o

modificar un estado operativo, se haría sobre un ítem concreto. Este ítem se obtiene

también a partir de un parámetro tipo filtro, de forma análoga a como se hace con la unidad

de negocio.

Figura 5-4: Transacciones Contables y Operativas

Page 26: Implementación de un Manejador Gráfico de Decisiones para ...

18

5.2 Requerimientos Funcionales

Teniendo en cuenta los elementos que componen una decisión y la relación existente entre

ellos, se consideran las actividades que deben poderse realizar en el manejador de

decisiones. La Figura 5-5 ilustra los casos de uso definidos para un usuario de la aplicación.

Cada uno de estos es luego dividido en actividades más específicas que finalmente se

refieren a los requerimientos funcionales.

Figura 5-5: Casos de Uso

5.2.1 Crear una decisión

El usuario puede crear una nueva decisión para ser editada. Esta se encuentra inicialmente

vacía con el fin de que el usuario diligencie los formularios propuestos.

A continuación se detallas las actividades específicas que componen la tarea de crear una

decisión:

Definir las propiedades de la decisión. Asignarle un nombre, un tipo y una descripción

a la decisión que se esté construyendo.

Definir parámetros. Se especifican cuales son los parámetros tipo simple y tipo filtro

que utilizará la decisión

Declarar fórmulas. Se crean funciones con un tipo de retorno y una serie de

parámetros.

Ordenar cómputos. Se define un orden de ejecución para los cómputos de una decisión

a partir de invocaciones de las fórmulas antes declaradas.

Definir transacciones contables. Se detallan cuales serán los efectos contables de la

decisión asignándole a cada movimiento los resultados de cómputos específicos.

Page 27: Implementación de un Manejador Gráfico de Decisiones para ...

19

Definir transacciones operativas. Se realizan operaciones sobre unidades de negocio

asignándole resultados de cómputos específicos a los atributos de un estado operativo.

5.2.2 Guardar una decisión

El usuario puede guardar la decisión que esté modificando, permitiendo que este pueda

volver a cargarla con fines de edición y generación de archivos.

Actividades específicas

Indicar la ubicación en la máquina donde se almacenará el archivo con extensión .decis.

5.2.3 Abrir una decisión

Se puede abrir una decisión previamente guardada con el fin de continuar su edición.

Actividades específicas

Seleccionar un archivo previamente guardado con la extensión .decis para que los datos

puedan ser procesados por la aplicación y desplegados por medio de la interfaz grafica al

usuario.

5.2.4 Modificar una decisión

Después de abrir una decisión, el usuario debe poder aplicar cambios sobre la información

ya existente de la decisión. Estas modificaciones deben hacerse visibles en la interfaz

gráfica.

Actividades específicas

Modificar cada elemento antes creado de una decisión. Dichos cambios son

efectivamente validados y desplegados en la interfaz gráfica.

5.2.5 Generar archivo MAGES

El usuario puede exportar la decisión en un formato con sintaxis MAGES que será

posteriormente interpretado y transformado en una decisión disponible en el Juego

Gerencial.

Actividades específicas

Generar archivo principal MAGES: Este contiene los parámetros, el orden de cómputos

y las transacciones de la decisión.

Generar archivo fórmulas y filtros MAGES: Este contiene la declaración de las fórmulas

y de los filtros que utiliza la decisión.

Page 28: Implementación de un Manejador Gráfico de Decisiones para ...

20

5.3 Atributos de Calidad

En la sección anterior se trataron las necesidades que debe suplir el manejador de

decisiones. Ahora bien, paralelo a ese grupo de tareas se deben tener en cuenta una serie de

restricciones y prioridades sobre el funcionamiento de la aplicación. Estas vienen dadas por

la motivación inicial y conducen al proyecto a través de las etapas de diseño e

implementación. A continuación se tratan los principales atributos de calidad que se buscó

favorecer durante la construcción del manejador de decisiones.

5.3.1 Usabilidad

Este atributo de calidad se refiere a la facilidad con la que un usuario es capaz de aprender a

operar un sistema. Con esto se busca que los usuarios finales puedan sacar el mayor

provecho posible de la aplicación desarrollada [RW05].

5.3.1.1 Calidad Deseada

Se desea proveer un medio intuitivo a través del cual sea más eficiente la definición de

decisiones. Los usuarios de la aplicación deberían poderse adaptar rápidamente al

manejador de decisiones para así involucrar una menor cantidad de intermediarios en el

proceso. La interfaz gráfica debería presentar un orden claramente establecido y

aprehensible para la configuración de una nueva decisión.

5.3.1.2 Preocupaciones

Incluir todos los elementos de una decisión en un entorno gráfico de tal forma que se

comprenda la estructura y el orden en el que se construye la misma.

Una vez se haya aprendido a utilizar la herramienta, un experto en ella debería poseer un

alto nivel de productividad definiendo decisiones.

El uso del manejador de decisiones genera satisfacción y aceptación en los usuarios

5.3.1.3 Actividades de potenciación

Comprender la forma en la que se definen las decisiones en el Juego Gerencial.

Proponer una interfaz gráfica de usuario basada en tablas que se asemejen a las que han

venido utilizando en hojas de cálculo para disminuir el impacto del cambio.

Proponer un proceso de definición ordenado que sea fácil de memorizar y comprender.

Page 29: Implementación de un Manejador Gráfico de Decisiones para ...

21

5.3.2 Modificabilidad

Favoreciendo este atributo de calidad se busca que el manejador de decisiones pueda ser

modificado con relativa facilidad para corregir errores, mejorar su desempeño y adaptarlo a

cambios en las reglas del negocio [Bar03]. Para identificar puntos donde se pueda potenciar

este atributo es importante comprender: quién hace el cambio, en qué momento lo hace, qué

puede modificarse y cómo se debería medir el costo de dicha modificación [BBN07].

5.3.2.1 Calidad Deseada

El manejador de decisiones es una aplicación que en el futuro estará sujeta a cambios y

estos no serán necesariamente realizados por los desarrolladores iniciales. Por consecuente,

sin importar en qué modulo de la aplicación se desee hacer el cambio, este módulo debe ser

fácilmente identificable y el cambio debe afectar la menor cantidad de módulos adicionales

en el manejador. Esto se justifica en la medida que los cambios pueden originarse en

cualquier punto de la aplicación, ya sea en la interfaz de usuario, en la lógica para asociar

los componentes de una decisión, en el acceso de datos externos a la aplicación, o en la

generación de archivos de salida. A su vez, estos cambios pueden ocurrir en diferentes

etapas como pueden ser la de diseño, la de despliegue o la de ejecución de la aplicación y

pueden venir motivados por comentarios de los usuarios finales, o por los mismos

desarrolladores que identificaron puntos de mejora.

5.3.2.2 Preocupaciones

Extender, agregar o reparar funcionalidades del manejador de decisiones implica

identificar componentes concretos de la aplicación. Estas modificaciones pueden

involucrar a la interfaz gráfica, la lógica del manejo de la decisión, o la forma en que se

manejan archivos de entrada y salida de la aplicación.

Futuros desarrolladores pueden verse en la necesidad de realizar cambios en diferentes

secciones del programa bajo ciertas expectativas de tiempo para volver realidad dichos

cambios.

5.3.2.3 Actividades de potenciación

Dividir la lógica de la aplicación en diferentes módulos o manejadores más específicos

para administrar los componentes de la decisión que se esté creando.

Independizar la interfaz gráfica de la lógica de la aplicación. La interfaz gráfica

solamente se comunica por medio de interfaces de servicios que exponen los módulos de

la aplicación. A su vez, que los módulos lancen eventos que sean atrapados por los

diferentes elementos de la interfaz gráfica para actualizar las diferentes vistas.

Diseñar e implementar componentes gráficos reutilizables que se valgan de una

arquitectura modelo-vista-controlador.

Page 30: Implementación de un Manejador Gráfico de Decisiones para ...

22

Buscar una baja complejidad ciclomática [MCC76] de todos los módulos en la

aplicación para hacer que el código sea más fácil de comprender y que

consecuentemente, realizar una modificación sea menos extenuante.

5.4 Escenarios de Calidad

Dada la inherente dificultad que implica evaluar cuán efectivamente la aplicación cumple

las necesidades que expresan los atributos de calidad, se hace necesario presentar

situaciones específicas en las que se establezca una medida de satisfacción. Cada uno de

estos escenarios de calidad plantea dicha situación a partir de las cuales se puede evaluar el

cumplimiento de los atributos de calidad antes planteados.

5.4.1 Escenarios de Usabilidad

5.4.1.1 Comprensión de la interfaz gráfica

Descripción

Se desea que un nuevo usuario de la aplicación esté en capacidad de comprender fácilmente

el orden en el que debe definir una decisión y qué espacio de la interfaz gráfica está

destinado a cada elemento de una decisión. Esta persona debería poder asociar sus

conocimientos previos de una decisión a la manera en que se plantea la construcción de la

misma, a través de la interfaz propuesta.

Fuente

Nuevo usuario del manejador de decisiones.

Estímulo

El nuevo usuario desea familiarizarse con la interfaz gráfica que se propone para crear una

decisión.

Artefacto

La aplicación terminada.

Ambiente

Tiempo de ejecución.

Respuesta

El usuario busca conocer la aplicación estudiando los diferentes paneles y ventanas que en

ella se exponen, junto con la finalidad de cada uno de estos elementos gráficos.

Page 31: Implementación de un Manejador Gráfico de Decisiones para ...

23

Medida de la respuesta

El usuario relaciona sus conocimientos de una decisión con lo planteado en la interfaz

gráfica en un tiempo de una hora.

5.4.1.2 Creación de una decisión

Descripción

Un usuario que ya se ha familiarizado con la herramienta desea definir una nueva decisión.

En este caso se asume que el usuario ha definido previamente su decisión y que solo

requiere introducir dicha información a la aplicación.

Fuente

Usuario familiarizado con el manejador de decisiones.

Estímulo

El usuario desea plasmar en la aplicación, la decisión que ha concebido previamente y que

está correctamente construida.

Artefacto

La aplicación terminada.

Ambiente

Tiempo de ejecución.

Respuesta

El usuario utiliza los diferentes elementos gráficos de la aplicación para introducir la

información de su nueva decisión.

Medida de la respuesta

Al usuario no le toma más de noventa minutos introducir completamente la información de

la decisión en la aplicación.

5.4.2 Escenarios de Modificabilidad

5.4.2.1 Adicionar el manejo de parámetros complejos a la lógica de la aplicación

Descripción

Otro de los elementos que se manejan en una decisión son los parámetros complejos. Estos

contienen una referencia a un servicio externo que debe ser invocado al momento de

ejecutar la decisión en el simulador del Juego Gerencial. En lo que respecta al manejador de

decisiones, se buscaría que la aplicación permita declarar parámetros de este tipo,

especificando su servicio externo, y que otros elementos como fórmulas o transacciones

puedan utilizar el resultado de dicho servicio.

Page 32: Implementación de un Manejador Gráfico de Decisiones para ...

24

Fuente

El grupo de desarrolladores encargados de adicionar el manejo de estos parámetros al

manejador

Estímulo

Los desarrolladores desean que en la lógica de la aplicación se manejen parámetros de tipo

complejo

Artefacto

El conjunto de componentes de la lógica del manejador de decisiones que requieran utilizar

parámetros complejos

Ambiente

Etapa de diseño y desarrollo. Se tiene una versión estable del manejador de decisiones a la

cual se le quiere adicionar el uso de parámetros complejos.

Respuesta

Los desarrolladores diseñan e implementan el uso de parámetros complejos en la lógica de

negocio de la aplicación. También se realizan pruebas sobre la modificación de estos

parámetros y sobre las referencias que otros elementos de la decisión puedan crear, hacia

estos parámetros.

Medida de la respuesta

El diseño, la implementación y las pruebas toman un tiempo máximo de seis horas.

5.4.2.2 Adicionar el manejo de parámetros complejos a la interfaz gráfica

Descripción

Una vez definida la lógica de negocio para el manejo de parámetros complejos, se busca

representar gráficamente la creación, modificación y eliminación de estos en la interfaz

gráfica. Se debe tener en cuenta que otros elementos de la decisión como fórmulas o

transacciones pueden referenciar dichos parámetros para utilizarlos en sus cálculos.

Fuente

El grupo de desarrolladores encargados de adicionar el manejo de estos parámetros al

manejador

Estímulo

Los desarrolladores desean que en la interfaz gráfica de la aplicación se manejen

parámetros de tipo complejo

Artefacto

Los componentes gráficos del manejador de decisiones encargados de desplegar la

información de un parámetro.

Page 33: Implementación de un Manejador Gráfico de Decisiones para ...

25

Ambiente

Etapa de diseño y desarrollo. Se tiene una versión estable del manejador de decisiones a la

cual se le quiere adicionar el uso de parámetros complejos.

Respuesta

Los desarrolladores diseñan e implementan el uso de parámetros complejos en la interfaz

gráfica de la aplicación. Adicionan una tabla donde se crean, modifican y eliminan estos

parámetros. Se aseguran que fórmulas y transacciones puedan hacer uso de los parámetros

complejos definidos. A su vez, se encargan de unir los servicios de la lógica de negocio con

la interfaz gráfica y de realizar las pruebas correspondientes.

Medida de la respuesta

El diseño, la implementación y las pruebas toman un tiempo máximo de ocho horas.

5.4.2.3 Comprensión de la estructura de la aplicación desarrollada

Descripción

Un desarrollador que ya está familiarizado con el Juego Gerencial busca agregar

funcionalidades o realizar modificaciones sobre la aplicación. Adicionalmente, este

desarrollador no tiene experiencia con el código o el diseño del manejador de decisiones. Él

debería poder, estudiar la estructura del código de la aplicación, junto con los diagramas de

clase tanto de la interfaz como de la lógica de negocio, y lograr comprender cuál es la

función de cada componente y cuáles de estos son los lugares indicados para realizar su

tarea.

Fuente

El desarrollador que no posee conocimientos sobre el diseño e implementación del

manejador de decisiones

Estímulo

El nuevo desarrollador busca familiarizarse con el diseño e implementación del manejador

de decisiones.

Artefacto

Diagramas de clase de la interfaz y la lógica de negocio, estructura de paquetes del

manejador de decisiones y las clases que en estos se encuentren.

Ambiente

Etapa de diseño y desarrollo. Se tiene una versión estable del manejador de decisiones a la

cual se le quieren adicionar o modificar funcionalidades.

Respuesta

El desarrollador inicia analizando los diagramas de clase de la lógica del mundo para

identificar qué componentes están presentes en la aplicación. Luego, se estudia cómo los

componentes gráficos se encuentran estructurados y la forma en que consumen los servicios

Page 34: Implementación de un Manejador Gráfico de Decisiones para ...

26

expuestos por la lógica de negocio. Por último, se analiza la estructura de paquetes para

saber qué clases componen cada uno de estos, y se revisan detalles puntuales del código

como la forma en que los componentes lanzan notificaciones para ser atrapadas por la

interfaz gráfica.

Medida de la respuesta

Al desarrollador no le toma más de dos horas tener una noción completa de la estructura del

manejador de decisiones.

Page 35: Implementación de un Manejador Gráfico de Decisiones para ...

27

6 Diseño

En esta sección del documento se plantea la estructura de los elementos implementados y la

interacción que hay entre ellos. En ella se busca producir una especificación lo más precisa

posible de la construcción del producto y una clara distribución de responsabilidades entre

sus partes. Se presentan inicialmente las principales decisiones de diseño con su respectiva

justificación para soportar los atributos de calidad que se desean favorecer. Posteriormente

se exponen los diagramas de clase de las diferentes secciones de la aplicación desarrollada,

seguido por otros diagramas que explican la estructura del manejador de decisiones. Por

último, se presentan las decisiones más importantes que se tomaron respecto al diseño de la

interfaz y la forma en que se desarrollaron los diferentes componentes gráficos.

6.1 Justificaciones de Diseño

A continuación se presentan las decisiones más importantes que se tomaron respecto al

diseño de la lógica del manejador.

6.1.1 Separación en manejadores de menor tamaño

Descripción

El manejador de decisiones se divide en componentes más pequeños para una mejor

distribución de responsabilidades. Estos exponen una o más interfaces de servicios que

pueden ser usadas por los demás manejadores. Se establecen los siguientes componentes:

ParameterManager. Encargado de administrar los parámetros de tipos simple y

filtro.

FormulaManager. Maneja la lógica para declarar las diferentes fórmulas y sus

respectivos parámetros

ComputationManager. Estructura el orden de ejecución de las fórmulas de la

decisión. Es el encargado de manejar las invocaciones de cada fórmula y los valores

de los parámetros que se le pasan a cada una.

AccountingTransactionsManager. Permite manejar las transacciones contables de

la decisión. Este toma los resultados necesarios de los cómputos realizados para

asociárselos a cada movimiento de una transacción.

OperativeTransactionsManager. Se encarga de administrar las transacciones

operativas y sus respectivos movimientos y atributos. Al igual que el manejador de

transacciones contables, requiere de los cómputos realizados por el manejador de

cómputos para asociarle valores a los atributos de un movimiento.

MagesGenerator. Centraliza las tareas de generar los archivos con la gramática

MAGES a partir de los datos que le provean los demás manejadores.

Justificación

Al separar la creación de una decisión en componentes más pequeños se favorece la

modificabilidad de la aplicación. Cada componente tiene unas responsabilidades claramente

Page 36: Implementación de un Manejador Gráfico de Decisiones para ...

28

definidas y un cambio en la lógica de dichas responsabilidades no debe afectar los demás

componentes en mayor medida. Esta separación se realiza basándose en áreas funcionales

que pueden variar relativamente independiente y así encapsular dicha funcionalidad para

limitar los efectos de estos cambios en otros módulos.

6.1.2 Implementación clases observables y observadores

Descripción

Se implementarán dos clases encargadas de materializar el patrón observador [FRB04] en

el manejador de decisiones. Es un modelo similar al patrón que implementa internamente

Java y se basa en una clase abstracta DecisionObservable que tiene la capacidad de

notificar cambios a otras clases que implementen la interfaz DecisionObserver.

Figura 6-1: Patrón Observador del manejador de decisiones

Justificación

Es una táctica utilizada ante la incompatibilidad de Qt Jambi para manejar el patrón

observador interno de Java. La implementación de estas dos clases no requiere mayor

esfuerzo y representa un elemento importante para la posterior comunicación entre los

mismos componentes de la lógica del manejador, y de estos, a las diferentes vistas de la

interfaz. Esto promueve el desacoplamiento entre el sujeto y el observador, logrando que

estos puedan evolucionar de forma independiente y sólo respondiendo a los eventos

generados por un elemento observable.

6.1.3 Modelo de propiedades

Descripción

Se utiliza un modelo genérico para manejar ciertas propiedades de los objetos de una

decisión. Se tiene una clase abstracta BaseModel que se encarga de almacenar cadenas de

texto que se refieren a propiedades del objeto que extienda dicha clase. Esta última clase

contiene las constantes que sirven como llaves para obtener las respectivas propiedades. A

continuación se ilustra el caso de la clase Parameter que extiende de BaseModel para

almacenar su nombre, identificador, tipo y descripción. Como se verá más adelante, otras

clases del modelo del mundo extienden también de BaseModel con el mismo fin.

Page 37: Implementación de un Manejador Gráfico de Decisiones para ...

29

Figura 6-2: Modelo de propiedades BaseModel aplicado a la clase Parameter

Justificación

En ciertas ocasiones es posible que se desee extraer alguna propiedad de un objeto y donde

no sea importante saber de qué tipo es el objeto en cuestión. Esto permite que otras clases

puedan utilizar las propiedades de algún objeto sin tener que restringirse al manejo de este

tipo específico de objetos. En el caso del manejador de decisiones, como se verá más

adelante, se cuenta con diferentes tablas para desplegar la información de elementos de una

decisión. Sin embargo, para no restringir a dichas tablas para que manejen únicamente un

objeto específico de una decisión, se les pueden asociar objetos que extiendan de

BaseModel, y solo especificar las propiedades que se deseen extraer del mismo. Con esto,

la fuente de datos y el consumidor de datos evolucionan de forma separada y se promueve

la modificabilidad de estos dos. A su vez, la clase que extiende de BaseModel se

despreocupa del almacenamiento de dichas propiedades y solo las solicita o almacena en la

medida que lo necesite.

6.2 Diagramas de Clase

En esta sección se presentan los diagramas de clase más relevantes del manejador de

decisiones. Estos presentan la estructura estática de los componentes de la aplicación.

6.2.1 Manejador de decisiones y manejadores subordinados

El manejador de decisiones es el conector de los demás componentes de la aplicación. Este

se encarga de centralizar a todos los manejadores, al generador de archivos Mages y a las

propiedades básicas de la decisión. Su labor principal es recibir eventos de los demás

manejadores que notifiquen que la decisión ha sido modificada, y llamados desde la

interfaz gráfica que hagan referencia a la persistencia de la decisión o a la generación del

Page 38: Implementación de un Manejador Gráfico de Decisiones para ...

30

archivo MAGES. Los diferentes elementos de la interfaz gráfica se comunican

directamente con cada manejador según la entidad de la decisión que desplieguen.

Figura 6-3: DecisionManager con manejadores específicos

Page 39: Implementación de un Manejador Gráfico de Decisiones para ...

31

6.2.2 Manejador de Parámetros

Figura 6-4: Diseño Manejador de Parámetros

El manejador de parámetros provee las operaciones necesarias para crear, modificar y

eliminar parámetros tipo simple y tipo filtro. También implementa una interfaz para

consultas sobre los parámetros creados que es utilizada por los componentes que requieran

acceso a estos sin necesidad de modificarlos. Por simplicidad en la estructura se decidió

almacenar los parámetros en una lista. En caso de realizar alguna modificación sobre un

parámetro, este notifica al manejador de decisiones.

Page 40: Implementación de un Manejador Gráfico de Decisiones para ...

32

6.2.3 Manejador de Fórmulas

Figura 6-5: Diseño Manejador de Fórmulas

De forma análoga al manejador de parámetros, el manejador de fórmulas expone dos

interfaces de servicios: una encargada de las operaciones de creación, modificación y

eliminación, y otra encargada de operaciones de consulta. Este manejador sólo se encarga

de la declaración de las fórmulas y la especificación de los parámetros que esta requiera.

Dependiendo del tipo de fórmula, esta tendrá asociada otra serie de elementos. Si es de tipo

búsqueda, tendrá un filtro, o si es de tipo servicio, tendrá un proveedor para este.

Page 41: Implementación de un Manejador Gráfico de Decisiones para ...

33

6.2.4 Manejador de Cómputos

Figura 6-6: Diseño Manejador de Cómputos

El manejador de cómputos utiliza los manejadores de parámetros y fórmulas para definir un

orden de ejecución de las fórmulas, y los parámetros que recibirá cada una de estas en el

momento de ser invocadas. Este manejador posee una lista de instrucciones que se

ejecutarán secuencialmente, cada una de las cuales tiene asociada la ejecución de una

fórmula. La cual, se representa por medio de la clase FormulaComputation. Además de

conocer la declaración de la fórmula, esta contiene los parámetros que se utilizarán para

dicha fórmula, por medio de la clase ComputationParameter. El valor de cada parámetro

viene dado por una clase Parameter, que puede ser entonces un parámetro simple, uno tipo

filtro, u otra instrucción ComputationInstruction.

Page 42: Implementación de un Manejador Gráfico de Decisiones para ...

34

6.2.5 Manejador de Transacciones Contables

Figura 6-7: Diseño Manejador de transacciones contables

El manejador de transacciones contables se basa en los mismos principios de los

manejadores anteriores. Almacena en una lista los movimientos que se vayan creando, que

su a vez tienen asociada una cuenta sobre la cual tiene efecto dicho movimiento. Estas

cuentas son almacenadas en otra lista al interior del manejador y se cargan de un archivo de

propiedades con el fin de tener a disposición la totalidad de las cuentas a ser usadas por los

movimientos. Este manejador también cuenta con una interfaz de servicio adicional que se

encarga de las consultas sobre sus transacciones y movimientos.

Page 43: Implementación de un Manejador Gráfico de Decisiones para ...

35

6.2.6 Manejador de Transacciones Operativas

Figura 6-8: Diseño Manejador de transacciones operativas

El manejador de transacciones operativas toma los resultados de los cómputos realizados

por el manejador de cómputos para asignarles valores a los atributos de sus movimientos.

Para ello, requiere de la interfaz de consultas IComputationQuery. Este manejador recibe

notificaciones del manejador de cómputos para actualizaciones en caso de que se le haga

algún cambio a una instrucción y este cambio deba ser actualizado en el manejador de

transacciones operativas. La estructura para el manejo de estos datos no es compleja, ya que

solo se manejan listas que contienen las diferentes entidades que requiere este manejador.

Page 44: Implementación de un Manejador Gráfico de Decisiones para ...

36

6.2.7 Generador Archivos MAGES

Figura 6-9: Diseño Generador de archivos MAGES

Este componente expone una interfaz de servicio destinada únicamente a la generación del

archivo con gramática MAGES. Para que la gramática esté completa se deben generar dos

archivos: uno con la información principal de la decisión que incluye los parámetros tipo

simple, tipo filtro, ambos tipos de transacciones y el bloque de cómputos. En el otro

archivo se declaran los filtros y las fórmulas en caso de querer ser reutilizadas por otras

decisiones. Para generar estos archivos, el componente requiere de las interfaces de

consulta expuestas por los demás manejadores.

Page 45: Implementación de un Manejador Gráfico de Decisiones para ...

37

6.2.8 Lector de Metamodelo Entidad-Relación

Figura 6-10: Diseño Lector de Metamodelo Entidad-Relación

Este componente del manejador de decisiones se encarga de cargar las entidades de un

modelo que sea conforme a un metamodelo entidad-relación (EA por sus siglas en inglés).

En este caso, se obtienen las entidades del Juego Gerencial a partir de uno de estos

modelos. La clase principal MetaModelLoader cuenta con las operaciones estáticas para

que cualquier manejador de la aplicación tenga acceso a los elementos del modelo. Se

decidió hacerlo de esta forma ya que los elementos del modelo (EAModelElement) se

utilizan de forma transversal en la aplicación y no son propiedad de alguno de los demás

manejadores. Cada EAModelElement contiene una serie de atributos que son equivalentes a

los atributos que se presenten en el modelo de entrada. Además de los elementos del

modelo del Juego Gerencial, el MetaModelLoader también genera EAModelElements que

hacen referencia a los tipos de datos básicos.

6.3 Modelo de Componentes

Con los diagramas de clases se presentó la estructura interna de cada componente del

manejador de decisiones. En este modelo se presenta una abstracción a más alto nivel de la

estructura de la lógica de la aplicación. En este se presenta cada manejador como un

componente que expone sus respectivas interfaces, algunas de las cuales son requeridas por

otros componentes. Se tiene un componente DecisionManager que encapsula los demás

manejadores y es el encargado de exponer las interfaces de estos componentes internos a

otros componentes que puedan requerirlas, como será el caso de la interfaz gráfica que se

verá más adelante.

Page 46: Implementación de un Manejador Gráfico de Decisiones para ...

38

Figura 6-11: Diagrama de Componentes Manejador de Decisiones

En este diagrama se puede observar la secuencia en que los componentes requieren

servicios de otros. El ComputationManager es el encargado de tomar los parámetros y

fórmulas que se hayan definido, y al utilizarlos en el orden de ejecución de la decisión, le

permite a los componentes encargados de las transacciones utilizar los resultados de dichos

cómputos para concretar el efecto de la decisión. Por último, el MagesGenerator hace uso

de los servicios de consulta expuestos por los manejadores para generar el archivo con la

gramática deseada.

6.4 Justificaciones de Diseño Interfaz Gráfica

La interfaz gráfica es otro componente de vital importancia para el manejador de

decisiones. Sobre esta se toman una serie de decisiones que buscan favorecer los atributos

de calidad antes planteados.

6.4.1 Extensión de Componentes Gráficos Qt Jambi

Descripción

Se crearon widgets que extienden de los widgets de Qt Jambi con el fin de incorporarles el

manejo de eventos y evitar el uso del modelo signals-slots que incorporan originalmente.

Se busca implementar una variación del patrón publicador-suscriptor, en que el widget

Page 47: Implementación de un Manejador Gráfico de Decisiones para ...

39

como publicador lanza eventos y algún otro elemento en calidad de suscriptor, recibe dicho

mensaje. Esto se hace utilizando un modelo similar al manejado en Java Swing y haciendo

uso de algunas de las clases de dicha librería. La conexión entre un evento (signal) ocurrido

en un QWidget y el método (slot) que se invoca, se sigue utilizando al interior del QWidget

modificado, pero queda aislado en el mismo. De tal forma, que al utilizar posteriormente el

QWidget modificado ya se cuenta con la posibilidad de incluir suscriptores (listeners) a un

evento.

A continuación se ilustran algunos de los QWidgets extendidos:

Figura 6-12: Diseño de QWidgets extendidos

En la Figura 6-12 se presentan los widgets QPushButtonMod, QComboBoxMod y

QTableWidgetMod. Cada uno de estos extiende de su respectivo QWidget e incorpora el

uso de suscriptores para sus eventos. QPushButtonMod tiene asociada una lista de

ActionListener que es la interfaz que Swing utiliza en sus botones. Este componente gráfico

invoca el método actionPerformed de dichos listeners pasando por parámetro un

ActionEvent que contiene el comando (actionCommand) que se le especificó al botón.

Page 48: Implementación de un Manejador Gráfico de Decisiones para ...

40

QComboBoxMod, QTableWidgetMod y los demás widgets modificados funcionan de

forma similar. Estos asocian internamente un método (slot) al evento (signal) del widget, y

este es el encargado de hacer los llamados a los suscriptores. En el caso de

QComboBoxMod, el evento que lanza originalmente este QWidget invoca al método

currentIndexChanged, que luego llama a todos sus suscriptores ListSelectionListener

pasando por parámetro un ListSelectionEvent.

Justificación

El modelo signal-slots que incorporan los widgets de Qt Jambi no promueve el nivel de

modificabilidad que se desea favorecer en esta aplicación. Como se vio anteriormente, este

sistema de eventos se presta para errores en la sintaxis de los métodos que se desean

invocar. Crea una relación muy fuerte entre el que publica y el que se recibe un evento,

para lo cual, existe la alternativa planteada que les permiten a estos dos elementos

evolucionar con mayor independencia.

6.4.2 Panel genérico para uso de tablas

Descripción

Se creó un panel genérico que contiene una tabla y botones para agregar y eliminar

elementos de esta. Este hace uso exclusivo de widgets extendidos como los que se

presentaron anteriormente y en él se concentran todas las operaciones necesarias para

desplegar información de un BaseModel en una tabla. Este panel aprovecha la genericidad

de un BaseModel para mostrar las propiedades del mismo en cada columna de la tabla

según se desee. De esta forma, este panel genérico puede ser reutilizado en múltiples puntos

de la aplicación.

Figura 6-13: Panel genérico para manejo de tablas

Para configurar este panel se le debe asociar un modelo que establece las propiedades de

cada columna a desplegar. En este modelo se especifica el texto que se desea mostrar en el

título de cada columna de la tabla, junto con el tipo de celda de cada columna. Se manejan

tres tipos de columnas: texto simple, una lista de opciones por medio de un

QComboBoxMod, o un botón QToolButtonMod para diferentes tareas como desplegar

algún dialogo con opciones. Este modelo se materializa en la clase ParameterTableModel

Page 49: Implementación de un Manejador Gráfico de Decisiones para ...

41

que hace uso de la clase ParameterTableCellDataType para especificar uno de los 3 tipos

de columnas antes mencionados.

Figura 6-14: Diseño panel genérico para el manejo de tablas

Justificación

Gran parte de la interfaz gráfica de la aplicación se basa en tablas para proponer un medio

similar al que se ha venido utilizando para definir las decisiones. Para evitar implementar

múltiples paneles que tengan la misma funcionalidad de desplegar diferentes elementos de

una decisión, es preferible utilizar un único panel genérico del cual extiendan otros paneles

que implementen la funcionalidad específica del elemento de una decisión que se desee

mostrar. A su vez, se aprovecha el uso de BaseModel para proveer un elemento genérico

que se despliega en la tabla. Esto favorece la modificabilidad puesto que es un único punto

para realizar cambios en la interfaz.

Page 50: Implementación de un Manejador Gráfico de Decisiones para ...

42

6.5 Diagramas de Clase Interfaz de Usuario

A continuación se presentan los principales diagramas de clase de la interfaz de usuario. Se

tiene una clase principal llamada DecisionManagerUI que se encarga de agrupar los demás

paneles por medio de pestañas. Cada uno de estos paneles es un contenedor de otros

paneles más específicos dependiendo del elemento de la decisión al que corresponda a cada

panel.

6.5.1 Interfaz de Usuario Manejador de Decisiones

Figura 6-15: Diseño GUI Manejador de Decisiones

Esta es la clase principal de la interfaz que tiene una asociación a la clase DecisionManager

que se trató anteriormente. De esta última extrae las interfaces de servicio de los diferentes

manejadores para asociárselos a los paneles contenidos. Así, estos paneles se comunican

directamente con los manejadores y no por medio del DecisionManagerUI.

Page 51: Implementación de un Manejador Gráfico de Decisiones para ...

43

6.5.2 Panel de Parámetros

Figura 6-16: Diseño panel contenedor de parámetros

El panel contenedor de parámetros se encarga de agrupar otros tres paneles. El primero de

ellos es un panel donde se presenta información general para todo tipo de parámetro. En él

se despliega el nombre, el tipo y la descripción de estos. La intención detrás de este panel

general es centralizar la información común a todo tipo de parámetro y permitir agregar y

eliminarlos en un mismo lugar sin importar si son de tipo simple, filtro o complejo, de ser

agregados.

Los otros dos paneles hacen referencia cada uno a un tipo específico de parámetro. En el

caso de los parámetros simples, se presenta el nombre, el tipo de este, ya sea entero, real o

cadena de texto, y un posible valor inicial. Para los parámetros filtro, se presenta el nombre,

el tipo de retorno de su filtro, un atributo de este tipo de objeto que se desee mostrar y el

filtro escogido. Para escoger al filtro, se despliega un dialogo que permite crear y

Page 52: Implementación de un Manejador Gráfico de Decisiones para ...

44

configurar un filtro con todas sus propiedades y asociárselo al parámetro que se esté

editando.

6.5.3 Panel de Fórmulas

Figura 6-17: Diseño panel contenedor de fórmulas

El panel contenedor de fórmulas presenta tres sub-paneles, de los cuales uno varía según el

tipo de parámetro que se esté editando. Existe un panel llamado PanelFormulaDeclaration

que le permite al usuario definir una fórmula por cada fila de la tabla. En esta se especifica

el nombre, el tipo de fórmula, una descripción y el tipo de objeto que esta retorna. El

segundo panel llamado PanelFormulaParameterAssociation permite declarar parámetros a

cada fórmula antes creada. Para cada uno de estos se escribe un nombre y se especifica el

tipo, que puede ser un tipo básico o cualquier objeto del modelo del Juego Gerencial.

Page 53: Implementación de un Manejador Gráfico de Decisiones para ...

45

El tercer panel depende del tipo de fórmula que se esté editando. Dependiendo de esto, se

desplegará un panel para las fórmulas tipo Access, Search, Operation o Service. Las

fórmulas tipo Operation requieren una expresión que será calculada a partir de sus

parámetros. En su caso, se utiliza el PanelEquation para que el usuario pueda introducir

esta información. Este panel también es válido para las fórmulas tipo Access ya que para

éstas sus parámetros son una entidad del modelo del Juego Gerencial y el nombre de un

atributo de ésta que se desee extraer. La expresión utiliza la notación

<entidad>.<atributo> en este caso. El PanelFormulaSearch le permite al usuario

especificar un filtro para ese tipo de fórmulas. Por último, el PanelFormulasProvider se

utiliza para el caso de las fórmulas Service que requieren información para la localización y

llamado a un servicio externo.

6.5.4 Panel de Cómputos

Figura 6-18: Diseño panel contenedor de cómputos

Para especificar el orden de los cómputos de la decisión se requieren dos paneles. El

primero es el PanelComputationInstructions donde por cada fila de la tabla se crea una

variable. A esta variable se le asociará el resultado de invocar una fórmula con unos

parámetros específicos. La selección de estos parámetros por cada invocación se hace en el

PanelComputationInstructionsParameters. Dependiendo de la fórmula que se invoque para

Page 54: Implementación de un Manejador Gráfico de Decisiones para ...

46

una variable, en este panel se mostraran los parámetros esperados y el usuario podrá

escoger qué valores asignarles a partir de parámetros tipo simple, tipo filtro, o una variable

declarada anteriormente.

En este contenedor de cómputos se crean las variables donde se almacenan los valores que

luego se asignarán a los movimientos contables o a los atributos operativos de los

movimientos de la decisión. Cada fila de la tabla en PanelComputationInstructions

representa una asignación a una variable que puede ser referenciada como parámetro en

posteriores invocaciones de fórmulas. Así, se utilizan estas variables para asignarle un valor

a diferentes elementos de las transacciones que lo requieran.

6.5.5 Panel de Transacciones Contables

Figura 6-19: Diseño panel de transacciones contables

Para agregar transacciones contables a la decisión se utilizan dos paneles. El primero es el

PanelAccountingTransactions y en su tabla se agregan transacciones especificando su

nombre y la unidad de negocio sobre la que esta se realizará. Cada transacción contiene una

serie de movimientos y es lo que se despliega en el

PanelAccountingTransactionsAttributes. En este se pueden agregar filas que representan

los movimientos de la transacción seleccionada en el primer panel. En las columnas de la

tabla se especifica la cuenta que afectará el movimiento, la operación a realizarse, la

cantidad de la operación y el tipo de operación. Para escoger la cuenta se despliega un

diálogo con una lista de estas, y para especificar la cantidad que se debitará o acreditará

según el tipo de operación, se despliega un diálogo que permite escoger las variables

definidas en la sección de cómputos. Estos diálogos se presentan más adelante y son el

DialogAccountSelection y el DialogParameterValue, respectivamente.

Page 55: Implementación de un Manejador Gráfico de Decisiones para ...

47

6.5.6 Panel de Transacciones Operativas

Figura 6-20: Diseño panel de transacciones operativas

Para crear transacciones operativas se utilizan tres paneles. El primero,

PanelMainOpTransactions, no cuenta con una tabla y es donde se agregan y eliminan estas

transacciones. Se específica su nombre y una unidad de negocio sobre la que actuará la

transacción. Para agregarle movimientos a una transacción se utiliza el

PanelMovementsOpTransactions. A cada movimiento en una fila se le asigna un nombre,

un estado operativo y la operación que se realizará. A su vez, cada atributo de un

movimiento se define en el PanelOpTransactionAttributes. En este se despliegan los

atributos del estado operativo escogido para el movimiento al cual pertenece. Solo se

modifica la columna del valor, escogiendo el resultado de un cómputo, un parámetro filtro

o un parámetro simple, a través del DialogParameterValue.

Page 56: Implementación de un Manejador Gráfico de Decisiones para ...

48

6.5.7 Dialogo para navegación del modelo del Juego Gerencial

Figura 6-21: Diseño diálogo para navegación del modelo del Juego Gerencial

En diferentes puntos de la aplicación es necesario especificar de qué tipo es un filtro o el

retorno de una fórmula. Estos pueden ser cualquier entidad del modelo del Juego Gerencial

como una unidad de negocio, un ítem, entre otros. Para escogerlos, se utiliza un diálogo que

permite navegar la jerarquía de elementos en el Juego Gerencial, y adicionalmente, escoger

tipos básicos como números enteros, reales o cadenas de texto. La navegación se hace por

medio de un árbol en el que hay elementos raíz. Por ejemplo, el elemento Juego es uno de

estos, y contiene una serie de grupos corporativos, el cual a su vez tiene un grupo de

unidades de negocio. El usuario puede también consultar a partir de un nombre y el diálogo

despliega los elementos filtrados.

El diseño de este y los demás diálogos presenta una serie de características importantes.

Todos utilizan el patrón singleton para manejar una única instancia de cada diálogo

[FRB04]. Para que estos aparezcan en pantalla se invocan métodos estáticos que mínimo

reciben como parámetros un QWidget padre, y un DialogInvoker. Este último elemento es

una interfaz que implementan los paneles que despliegan un diálogo. Se utiliza para recibir

la respuesta de este. Así es más flexible la interacción con el diálogo y se permite

intercambiar una mayor cantidad de datos comparado a esperar por el retorno del método

invocado. La interfaz DialogInvoker también incluye un método que se invoca cuando el

diálogo se está cerrando para cualquier necesidad de procesamiento en ese momento.

Page 57: Implementación de un Manejador Gráfico de Decisiones para ...

49

6.5.8 Diálogo para creación y modificación de filtros

Figura 6-22: Diseño de diálogo para crear y modificar filtros

Este dialogo se despliega cada vez que se requiera crear o modificar el filtro de un

parámetro tipo filtro o de una fórmula tipo search. Cuenta con un único método estático

que entre otros parámetros, tiene el filtro que se desea mostrar en los campos de este. El

diálogo cuenta con campos para especificar o cambiar el nombre del filtro, la consulta y el

lenguaje en que esta se encuentra, y con un panel para los parámetros de la consulta. Este

panel al igual que otros anteriores utiliza una tabla para presentar los valores.

6.5.9 Diálogo para selección de parámetros

El objetivo de este dialogo es asociarle valores a diferentes elementos de una decisión. Se

requiere al momento de asignar un parámetro a una función en la sección de cómputos. En

este caso el diálogo despliega una lista con los parámetros tipo simple, tipo filtro, o

variables declaradas en cómputos anteriores, que sean del mismo tipo que el parámetro de

la función. Cuando se están creando movimientos contables, se utiliza para encontrar un

valor y asignárselo a la cantidad que será agregada o extraída de una cuenta. Para este tipo

de consulta, se filtran los parámetros para que se visualicen solo los que sean números

Page 58: Implementación de un Manejador Gráfico de Decisiones para ...

50

enteros o reales. De forma similar, al momento de asignarle valores a los atributos de un

movimiento contable, se requiere filtrar según el tipo del atributo.

Figura 6-23: Diseño de diálogo para selección de parámetros

Para cumplir su labor, este diálogo requiere de las interfaces de consulta de varios

manejadores. Dependiendo del método estático que se invoque, el diálogo desplegará una

lista de parámetros extraídos de los manejadores. El parámetro escogido es retornado a

través del método dialogCallback del DialogInvoker asignado.

6.5.10 Diálogo para selección de cuentas

Como se explicó anteriormente, es necesario especificar una cuenta sobre la cual se

realizará un movimiento contable. Este diálogo se encarga de desplegar la lista de cuentas

y de proveer opciones para filtrarlas según sus características. Para ello, utiliza la interfaz

de consulta de cuentas que implementa el manejador de movimientos contables. Es posible

también buscar por el nombre de la cuenta sobre la lista que se presente en un momento

dado.

Page 59: Implementación de un Manejador Gráfico de Decisiones para ...

51

Figura 6-24: Diseño diálogo para selección de cuentas

Page 60: Implementación de un Manejador Gráfico de Decisiones para ...

52

7 Producto Desarrollado

El proceso de diseño conlleva finalmente a la implementación del manejador de decisiones.

Para esto se utilizó Eclipse 3.5 como entorno de desarrollo, junto con el plug-in para Qt

Jambi. En esta sección se presentan las funcionalidades de la aplicación que se lograron

materializar y lo que se alcanzó en términos de métricas. En primera medida se presentan

los requerimientos más importantes y la forma en que estos se cumplen en la interfaz

gráfica. Luego se presentan diferentes métricas sobre tamaño del producto y características

del código implementado.

7.1 Alcance Obtenido

A continuación se demuestra la implementación de los requerimientos más importantes a

partir de la definición de una decisión ya existente. Se presentan las diferentes etapas a

través de las cuales el usuario pasa para crear la decisión “BuyAsset” del Juego Gerencial.

Al momento de iniciar la aplicación, todos los campos se encuentran vacíos y el usuario irá

completándolos según sea necesario en el caso de esta decisión.

7.1.1 Datos básicos de una decisión

Las propiedades de una decisión son: el nombre, la descripción la acción y el tipo. Con

estas propiedades se define el cuerpo de la decisión para ser identificada dentro del sistema.

Figura 7-1: Introducir datos básicos de una decisión

Page 61: Implementación de un Manejador Gráfico de Decisiones para ...

53

Tanto las acciones como el tipo son campos de selección predeterminados que ayudan al

usuario a definir una definición. Dichos campos son: Decisión y compromiso, producción y

mercadeo respectivamente.

7.1.2 Creación de parámetros simples

La creación de los parámetros simples consiste principalmente en tres partes mostradas a

continuación. La primera es una ventana que ayuda al cliente a determinar si el parámetro

que se desea crear es un tipo Simple, o un tipo Filtro. Esto se realiza por medio de un

cuadro de selección tipo Combo box con el fin de restringir y guiar al usuario como se

ilustra en la Figura 7-2. El manejo de las ventanas de selección se hace modal, de tal

manera el usuario debe seleccionar una opción antes de proseguir con el siguiente paso.

Figura 7-2: Creación de un parámetro simple

Luego de tener el parámetro creado se procede a asignar un identificador (nombre), y una

descripción de dicho parámetro. La tercera parte, consiste en asignar las características

específicas como un tipo y en algunos casos especiales un valor inicial. Esto se demuestra

en la Figura 7-3.

7.1.3 Creación de parámetros filtro

Un parámetro de tipo filtro se crea de una manera similar a como se crea uno tipo simple.

Consiste también en tres actividades distintas: La primera es seleccionar el tipo de

parámetro por medio del mismo dialogo de selección. Una vez se haya creado el parámetro,

Page 62: Implementación de un Manejador Gráfico de Decisiones para ...

54

se procede a definir los campos de nombre y descripción, de igual manera que pasa en el

caso de los parámetros de tipo simple. La Figura 7-4 ilustra este caso.

Figura 7-3: Configuración de un parámetro simple ya creado

Figura 7-4: Configuración de un parámetro tipo filtro

Page 63: Implementación de un Manejador Gráfico de Decisiones para ...

55

Teniendo los campos anteriores se procede a definir un tipo de filtro. Esto se refiere al tipo

de objeto que retorna el parámetro. El cual, proviene del modelo del Juego Gerencial y

puede ser un elemento cualquiera dependiendo de los requerimientos de la decisión. De

dicho elemento se escoge un atributo (show) que será utilizado por la interfaz gráfica del

Juego Gerencial.

El diálogo de selección DialogModelNavigation introducido anteriormente se despliega

como un navegador del modelo del Juego Gerencial El modelo está mostrado a manera de

árbol así como lo ilustra la Figura 7-5. La idea de esta clasificación es permitirle al usuario

navegar por las raíces, y llegando al elemento buscado. Adicionalmente se le presenta un

filtro de palabras en caso de que el usuario conozca el elemento de interés.

Figura 7-5: Diálogo de navegación del modelo del Juego Gerencial

Teniendo la definición básica del filtro se procede a asociarle una consulta, parte central del

parámetro de tipo filtro. Esto se hace por medio del DialogFilterDefinition como se explicó

en la etapa de diseño. En él se define un nombre, una consulta escrita en el lenguaje EJBQL

o SQL y una serie de parámetros para esta, como se observa en la Figura 7-6.

Figura 7-6: Definición de un Filtro

Page 64: Implementación de un Manejador Gráfico de Decisiones para ...

56

El usuario debe encargarse de introducir la consulta, alcance propuesto para este proyecto.

La definición de parámetros para esta consulta se hace manualmente en esta versión del

manejador.

7.1.4 Declaración de fórmulas

En el orden de definición de una decisión sigue la declaración de las fórmulas. Estas tienen

una definición general al igual que el caso de parámetros. Esta consiste en establecer un

nombre, tipo, descripción y tipo de retorno. Una vez se hayan definido estas propiedades

generales se procede a establecer las propiedades puntuales para cada tipo diferente de

fórmula. Dependiendo del tipo seleccionado, la fórmula tiene asociada a ella un servicio, un

filtro o una expresión según sea el caso.

Figura 7-7: Configuración de una fórmula tipo search

Las fórmulas pueden tener parámetros asociados para realizar su operación, y serán

profundizados en la siguiente sección. La Figura 7-7 presenta una fórmula

f_TerrainAssetType con un parámetro pf_TerrainName.

7.1.5 Ordenamiento de cómputos

Computations es una sección de la definición de una decisión en la cual el usuario define el

orden de ejecución de las formulas. La aplicación por defecto crea variables en orden

numérico. Sin embargo, el usuario puede modificar este campo para brindar un

identificador personalizado. La expresión consiste en la invocación de una fórmula o un

Page 65: Implementación de un Manejador Gráfico de Decisiones para ...

57

filtro. Esta selección define el campo del tipo de computación. Es en este punto donde se le

asignan a los valores usador por las formula y filtros dentro de la aplicación.

Figura 7-8: Creación de cómputos para una decisión

En la definición de los cómputos de la decisión se invocan (se le da valor a los parámetros

que se encuentren asociados a la función), los diferentes parámetros con el fin de permitirle

a la función realizar los cálculos definidos. Una variable de cómputo puede ser invocada en

uno de los parámetros de otra variable de cómputo, permitiendo que las formulas se

invoquen de manera secuencial.

7.1.6 Definición de transacciones contables

Las transacciones contables son transacciones que tienen movimientos asociados. Una

transacción contable está definida por medio de un identificador y una unidad sobre la cual

se realiza la transacción. Por otra parte un movimiento asociado a una transacción, tiene

una cuenta sobre la cual se realiza el movimiento, una cantidad, una operación y un tipo. La

operación indica si es un tipo de movimiento, es un uso o una fuente, para ejecutar el

movimiento sobre dicha cuenta. Por otra parte existe el tipo de operación, el cual indica si

el movimiento que se desea realizar es de tipo adición o sustracción.

Page 66: Implementación de un Manejador Gráfico de Decisiones para ...

58

Figura 7-9: Adición de transacciones contables

La transacción TF1 que se presenta en la Figura 7-9 posee dos movimientos. A cada uno de

estos se le debe asociar una cuenta. La cual, se selecciona en el diálogo de la Figura 7-10.

Esta cuenta se obtiene a partir de un archivo de propiedades, preestablecido en los datos de

la aplicación. El diálogo de selección de cuentas (DialogAccountSelection) permite al

usuario tener a disposición la totalidad de cuentas existentes en el Juego Gerencial. Estas

cuentas pueden ser filtradas por: nombre de la cuenta, reporte (El reporte es el asociado en

el reporte: balance general, flujo de caja y flujo de entrada) y tipo. Dentro de cada reporte

existe otro filtro, que permite buscar por cada una de las categorías del reporte.

Figura 7-10: Diálogo para seleccionar una cuenta

Page 67: Implementación de un Manejador Gráfico de Decisiones para ...

59

7.1.7 Definición de transacciones operativas

Las transacciones operativas estas compuestas por un identificador o nombre definido por

el usuario, y por una unidad sobre la cual se realiza la transacción. Por cada transacción se

definen unos movimientos en su respectiva fila de la tabla. Hay una columna donde definen

un estado operativo y otra columna para la operación. Al escoger el estado operativo de un

movimiento se actualiza la tabla de atributos. En ella el usuario puede escoger qué valor de

un cómputo le asigna a cada atributo. En el caso de la Figura 7-11, al atributo serialNumber

se le asigna el valor de la variable var1 definida anteriormente.

Figura 7-11: Creación de movimientos operativos

La aplicación en su totalidad maneja unos filtros de tipo, estos filtros ayudan a guiar al

usuario en el manejo de la aplicación, desplegándole solamente la información que le sirve.

7.1.8 Generar archivos MAGES

La generación de la decisión usando la gramática MAGES consiste en producir dos

archivos. El primero contiene la definición de parámetros, de cómputos y de ambos tipos de

transacciones. El segundo archivo contiene la definición de filtros y fórmulas. El generador

de archivos MAGES toma todos los datos de los diferentes manejadores de la aplicación y

siguiendo las reglas específicas de sintaxis escribe los dos archivos con extensión .mages.

Antes de empezar la generación de los archivos, la aplicación verifica que cada uno de los

elementos que participa en la decisión se encuentre correctamente definido. De presentar un

error en alguno de estos, la aplicación se lo comunica al usuario indicando dónde se

encuentra error y qué propiedad del elemento se encuentra mal definida.

Page 68: Implementación de un Manejador Gráfico de Decisiones para ...

60

Figura 7-12: Generar archivos con sintaxis Mages

7.1.9 Guardar la decisión

Una definición de una decisión se puede guardar en cualquier momento según lo requiera el

usuario. Para mejorar la interactividad con el usuario la aplicación maneja un control de

cambios. Este le permite proteger su trabajo, alertándolo ante posibles pérdidas de

información. La decisión se guarda con la extensión .decis. La Figura 7-13 ilustra la opción

en la interfaz gráfica para almacenar este archivo.

7.1.10 Abrir la decisión

Una decisión que ha sido guardada por medio de este manejador de decisiones, puede ser

cargada para editar sus propiedades o generar los archivos Mages. Cuando se desea abrir

una decisión, durante la edición de otra, el control de cambios informa al usuario si es

necesario guardar de nuevo la decisión para no perder los datos que se están editando en ese

momento. La Figura 7-14 demuestra el uso de la aplicación para seleccionar el archivo con

extensión .decis de la decisión que luego será modificada.

Page 69: Implementación de un Manejador Gráfico de Decisiones para ...

61

Figura 7-13: Guardar una decisión para su futura modificación

Figura 7-14: Selección de archivo con extensión .decis

Page 70: Implementación de un Manejador Gráfico de Decisiones para ...

62

7.2 Métricas

En esta sección se presenta el producto terminado en términos de su tamaño y tiempo

invertido. Se expone también la complejidad ciclomática de diferentes partes del manejador

de decisiones con el fin de evaluar su modificabilidad.

7.2.1 Tamaño del producto

A continuación se presentan el número de paquetes, clases y líneas de código

implementadas. Se debe tener en cuenta que la librería Qt Jambi genera código de forma

automática para los diferentes componentes gráficos que se utilizan. En las siguientes tablas

se presentan solo aquellos elementos totalmente implementados por el grupo de desarrollo.

7.2.1.1 Paquetes implementados

Fuente Número de paquetes

Lógica de negocio 16 Interfaz gráfica 14

TOTAL 30

Paquetes generados por Qt Jambi: 11

Total paquetes aplicación: 41

7.2.1.2 Clases implementadas

Fuente – Lógica de Negocio Número de clases LOCs

Manejador de Parámetros 4 520 Manejador de Fórmulas 4 536 Manejador de Cómputos 4 435

Transacciones 3 106 Manejador de Transacciones Contables 4 362 Manejador de Transacciones Operativas 4 641 Generador MAGES 2 350 Manejador de Decisiones 2 160 Lector de modelos Entidad-Relación 3 287 Filtros 3 169

Eventos de Notificación y Excepciones 5 100 BaseModel y observadores 2 50 Constantes de tipos 15 153 Utilitarios 2 181

TOTAL 57 4050

Page 71: Implementación de un Manejador Gráfico de Decisiones para ...

63

Fuente – Interfaz Gráfica Número de clases LOCs

Panel de Parámetros 4 563 Panel de Fórmulas 10 1627 Panel de Cómputos 3 390

Panel de Transacciones Contables 5 1026 Panel de Transacciones Operativas 4 677 Interfaz principal DecisionManagerUI 2 685 Diálogos 7 1616 Panel Genérico para manejo de tablas 1 491 Widgets extendidos 9 374 Modelo de tabla genérica 2 92

TOTAL 47 7541

Clases implementadas: 104

Clases generadas por Qt Jambi: 33

Total Clases aplicación: 137

7.2.1.3 Líneas de Código

Fuente LOCs

Lógica de negocio 4218 Interfaz gráfica 7561

TOTAL 11779

Líneas de código generadas por Qt Jambi: 1828

Total líneas de código de la aplicación: 13607

7.2.2 Métricas de Productividad

En esta sección se presenta la información sobre el tiempo invertido en la implementación y

el cálculo de la productividad del grupo de trabajo. Se expone la cantidad de horas que se

trabajó durante cada semana del proyecto y por último se realizan los cálculos de

productividad con base en la cantidad de líneas de código presentes en el producto final.

7.2.2.1 Tiempo de implementación

La Figura 7-15 presenta la cantidad de horas dedicadas a la implementación. En cada

semana se señala el número de horas que el grupo de trabajo invirtió en la respectiva

implementación del momento. El tiempo dedicado a cada actividad es muy influenciado

por los constantes cambios en la aplicación debido a la progresiva comprensión del

problema que se buscaba resolver. Se presenta el caso específico de la semana catorce en

que se realizaron modificaciones importantes respecto a la sección de cómputos de la

decisión que se esté construyendo.

Page 72: Implementación de un Manejador Gráfico de Decisiones para ...

64

Figura 7-15: Tiempo dedicado a la implementación

7.2.2.2 Cálculo de productividad

Para determinar la productividad del grupo de trabajo se toma el número total de líneas de

código (LOC) que implementó cada integrante y se divide entre el número de horas que

cada uno dedicó a esta labor. Luego se obtiene el promedio de estos valores para establecer

la productividad del grupo.

Integrante LOC

implementadas

Horas

trabajadas

Productividad

(LOC/ hora)

Daniel Tovar 5579 341 16.36

Jesús Vargas 6200 349 17.76

Total 11779 690 ---

Productividad del grupo de trabajo: 17 LOC / hora hombre

Esta métrica servirá como referencia en futuros proyectos para estimar cuánto tiempo se

requerirá para desarrollarlo. Así se cuenta con un dato histórico para contribuir a una mejor

evaluación del tiempo de desarrollo, con base en una estimación de las líneas de código a

implementar.

7.2.3 Complejidad Ciclomática

La complejidad ciclomática es una métrica de cuántos caminos de ejecución posee una

porción de código [MCC76]. Esto afecta directamente la facilidad de comprender el código

y por consecuente, afecta la modificabilidad de la aplicación. En general, se considera que

55 52

40

31

51 48

20

50 53 55 57

4236

68

32

0

10

20

30

40

50

60

70

80

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Semana

Horas Dedicadas

Page 73: Implementación de un Manejador Gráfico de Decisiones para ...

65

una complejidad menor a 10 es adecuada. Sin embargo, puede haber excepciones que

tengan razones comprensibles. A continuación se presentan los resultados obtenidos.

Fuente –

Lógica de Negocio

Complejidad

Promedio

Desviación

Estándar

Máxima

Complejidad

Manejador de Parámetros 1.80 3.37 23 Manejador de Fórmulas 2.11 6.14 33

Manejador de Cómputos 1.56 1.21 6 Manejador de Transacciones Contables 1.51 1.17 6 Manejador de Transacciones Operativas 1.67 1.33 7 Generador MAGES 2.20 1.64 6 Manejador de Decisiones 1.08 0.39 3 Lector de modelos Entidad-Relación 3.00 3.70 12 Filtros 1.19 0.55 3

Fuente –

Interfaz Gráfica

Complejidad Promedio

Desviación Estándar

Máxima Complejidad

Panel de Parámetros 2.54 3.49 14 Panel de Fórmulas 2.68 3.05 14

Panel de Cómputos 2.46 3.39 14 Panel de Transacciones Contables 2.17 2.99 12 Panel de Transacciones Operativas 2.51 3.56 18

Interfaz principal DecisionManagerUI 1.88 1.58 7 Diálogos 4.27 12.93 85

Panel Genérico para manejo de tablas 3.38 3.70 14 Widgets extendidos 1 0 1

Modelo de tabla genérica 1.38 0.62 3

La complejidad máxima se obtiene a partir del método que tenga el valor más alto de esta

métrica, al interior de cada componente o grupo de clases antes presentados. En la sección

de conclusiones se hace la discusión sobre estos valores y sus implicaciones en la

aplicación.

Page 74: Implementación de un Manejador Gráfico de Decisiones para ...

66

8 Pruebas

Esta sección presenta la estrategia de validación de los diferentes componentes del

manejador de decisiones.

8.1 Descripción de Pruebas

Para hacer las verificaciones sobre los componentes de la aplicación se utilizaron diversas

aproximaciones. Como se vio previamente en el modelo de componentes de la aplicación,

algunos de estos requieren de interfaces de servicios expuestas por otros componentes. Por

esto, se decidió realizar una combinación de pruebas unitarias y pruebas de integración para

validar los componentes y su interacción. A su vez, y de forma paralela al desarrollo de la

aplicación se realizaron pruebas de sistema que se detallan más adelante.

8.1.1 Pruebas Unitarias: Manejadores de Parámetros y Fórmulas

Los manejadores de parámetros y fórmulas se probaron de forma aislada para asegurar su

correcto funcionamiento. Sobre estos se realizaron pruebas unitarias de sus operaciones

más relevantes. Por ser componentes independientes y que no requieren servicios de otros

componentes, una correcta verificación aseguraría que al momento de integrarlos con otros

elementos de la aplicación se lograse tener una base ya probada.

Manejador de Parámetros

Para este manejador se decidió enfocar la atención de las pruebas en la actualización de las

propiedades de los parámetros tipo simple y filtro. Hay una variedad de restricciones

respecto a las actualizaciones válidas para estos parámetros. Por lo cual, se evalúa que el

componente sea capaz de responder adecuadamente a estos casos. Inicialmente se tienen

dos parámetros: uno de tipo simple con identificador idSimpleParam y otro de tipo filtro

con identificador idFilterParam.

1. Pruebas de actualizaciones básicas – todos los datos válidos

Acción Resultado Esperado

Modificar nombre de idSimpleParam

Al consultar por sus respectivos identificadores, los parámetros retornados poseen los valores que se modificaron

Modificar descripción de idSimpleParam

Modificar el tipo de idSimpleParam

Modificar el valor inicial de idSimpleParam

Modificar el nombre de idFilterParam

Modificar el tipo de retorno de idFilterParam

Modificar el atributo a mostrar de idFilterParam

Asignarle un filtro a idFilterParam

Page 75: Implementación de un Manejador Gráfico de Decisiones para ...

67

2. Pruebas de actualizaciones sobre el tipo de un parámetro simple

Los siguientes casos se ejecutan de forma secuencial:

Caso 1

Acción Resultado Esperado

Modificar idSimpleParam para que maneje números reales.

No le lanza ninguna excepción Asignarle a idSimpleParam un número real como valor inicial

Caso 2

Acción Resultado Esperado

Asignarle a idSimpleParam una cadena de caracteres como valor inicial

Se lanza una excepción y se conserva el valor inicial de número real asignado previamente

Caso 3

Acción Resultado Esperado

Modificar idSimpleParam para que su valor inicial sea nulo

No le lanza ninguna excepción Modificar idSimpleParam para que maneje

cadenas de caracteres

Asignarle a idSimpleParam una cadena de caracteres como valor inicial

3. Pruebas de asignación de nombres

Acción Resultado Esperado

Asignarle a idSimpleParam un nombre X Se lanza una excepción y se conserva el nombre Y de idFilterParam asignado previamente

Asignarle a idFilterParam un nombre Y

Asignarle a idFilterParam el mismo nombre X

Manejador de Fórmulas

Para este manejador se decidió enfocar la atención de las pruebas en la actualización de las

propiedades de las formulas de tipo service, search y de operación. Además de eso, se

probaron las acciones de eliminar una formula seleccionada. Se probó también la

actualización de atributos específicos asociados a formulas con tipo definido.

Page 76: Implementación de un Manejador Gráfico de Decisiones para ...

68

1. Pruebas de actualizaciones básicas – todos los datos válidos

Acción Resultado Esperado

Modificar el nombre de formula operative

Al consultar por sus respectivos

identificadores, los parámetros retornados poseen los valores que se modificaron

Modificar el nombre de formula search

Modificar el nombre de formula service

Modificar el tipo de formula operative

Modificar el tipo de formula search

Modificar el tipo de formula service

Modificar el atributo descripción de formula operative

2. Pruebas especificas

Los siguientes casos se ejecutan de forma secuencial

Caso 1

Acción Resultado Esperado

Modificar atributo nombre de una fórmula Si el valor del atributo es true entonces se elimina el valor y no se asigna el nombre

Asigna el valor al atributo

Caso 2

Acción Resultado Esperado

Modificar la expresión de una fórmula Lanza una excepción en caso que la fórmula no deba contener una expresión.

Caso 3

Acción Resultado Esperado

Borrar la fórmula que se está editando Lanza una excepción, en caso que la cuenta de referencias sea mayor a cero

8.1.2 Pruebas de Integración: Manejador de Cómputos

Ya probados individualmente los manejadores de parámetros y fórmulas, se puede

continuar construyendo la jerarquía de componentes para sus respectivas pruebas. El

manejador de cómputos es el encargado de crear el orden de la invocación de fórmulas

tomando valores obtenidos de los parámetros simples, filtro y el resultado de otros

Page 77: Implementación de un Manejador Gráfico de Decisiones para ...

69

cómputos. Así, se definieron pruebas de descomposición funcional siguiendo la estrategia

Bottom-Up [ZTW03]. Con esta, se evalúa su función de integrar parámetros a las variables

de cómputo que se vayan creando. En general, el modelo de pruebas para la aplicación es

basado en esta aproximación puesto que los próximos componentes requieren de resultados

obtenidos a partir del manejador de cómputos.

A continuación se presentan las pruebas realizadas sobre la integración del manejador de

cómputos con los manejadores de parámetros y fórmulas. Todo esto se hace teniendo en

cuenta que se ha definido lo siguiente:

Parámetros:

- Simple1 : Real

- Simple2 : Real

- Filtro1: Unidad de Negocio

- SimpleStr : String

Fórmulas:

- F1( p1_1: Real, p1_2: Real) : Real

- F2( p2_1: Unidad de Negocio, p2_2: String): Real

- F3( p3_1: Real): Real

- F4(p4_1: String): String

1. Asociación de una fórmula a una instrucción de cómputo

Acción Resultado Esperado

Creación de una instrucción var1 Var1 tiene el mismo tipo de retorno que F1 Asociación de F1 a var1

Eliminar F1desde el manejador de fórmulas No es posible eliminar la fórmula porque var1 la está referenciando

2. Asignar parámetros simple y filtro a los parámetros de una función

Acción Resultado Esperado

Asignar simple1 a parámetro p1_1 de F1 Var1 tiene tantos parámetros de cómputo, como parámetros tiene F1 Asignar simple2 a p1_2 de F1

Eliminar simple1 desde el manejador de parámetros

No es posible eliminar a simple1: F1 lo requiere

Creación de instrucción var2 y asociarle fórmula F2

Se probó en el caso anterior

Asignarle filter1 a p2_1 de F2

No es posible eliminar a filter1 desde el manejador de parámetros: F2 lo requiere

Asignar simpleStr a p2_2 de F2

Eliminar filter1 desde el manejador de parámetros

Page 78: Implementación de un Manejador Gráfico de Decisiones para ...

70

3. Asignar una instrucción de cómputo a un parámetro de una fórmula

Acción Resultado Esperado

Creación de instrucción var3 y asociación de F3

a var3 Se probó en casos anteriores

Asignar var2 a p3_1 de F3 No es posible eliminar la instrucción var2 porque var3 la está referenciando Eliminar var2 desde el manejador de cómputos

4. Eliminar instrucciones y actualización en manejadores

Acción Resultado Esperado

Eliminar var3 en el manejador de cómputos En este orden se deben poder eliminar

todos ya que se pierden las referencias antes existentes

Eliminar F3 en el manejador de fórmulas

Eliminar var2 en el manejador de cómputos

Eliminar filter1 en el manejador de parámetros

8.1.3 Pruebas varias: Manejador de transacciones contables

El manejador de transacciones contables se prueba en dos etapas. Esto quiere decir que

dentro de sus métodos de prueba se incluyen tanto: Pruebas unitarias sobre la modificación

de sus atributos y pruebas de integración con el manejador de cómputos. Estos con el fin

de, además de probar sus método, probar la integración entre estos dos manejadores.

1. Pruebas de actualizaciones sobre las transacciones

Acción Resultado Esperado

Modificar nombre Al consultar por sus respectivos identificadores, se verifica que la transacción se actualice correctamente.

Modificar unit

2. Pruebas de actualizaciones sobre los movimientos

Acción Resultado Esperado

Asociar un movimiento La lista de movimientos se incrementa en 1

Acción Resultado Esperado

Modificar la cuenta Los valores se actualizan, correctamente al modificar los atributos de los movimientos.

Modificar el tipo de la operación

Modificar el OP

Modificar la cantidad

En la prueba de modificar la cantidad, vale la pena mencionar que se restringe a que tome

valores de tipo filtro y valores de tipo instrucciones de cómputo.

Page 79: Implementación de un Manejador Gráfico de Decisiones para ...

71

8.1.4 Pruebas de integración: Manejador de transacciones operativas

Para el manejador de transacciones operativas se construyen los casos de prueba a partir de

los parámetros, fórmulas y cómputos definidos en las pruebas del manejador de cómputos.

Habiendo probado este manejador, se puede proceder en la jerarquía de componentes y

evaluar ahora la integración con el manejador de transacciones operativas. Se busca

asegurar que la interacción entre estos dos componentes sea correcta. Para ello, se valida

que al momento de asignar, modificar o eliminar elementos de una transacción operativa, se

vean los cambios adecuados en los cómputos que se puedan referenciar.

En este caso se tiene el siguiente escenario:

Hay una transacción operativa OT1 con un movimiento OM1. Este movimiento tiene varios

atributos, entre ellos: OA1 de tipo Real y OA2 de tipo String. Las pruebas realizadas son:

1. Asignar una variable de cómputo a un atributo operativo

Acción Resultado Esperado

Asignar var3 al atributo operativo OA1 Var3 no puede ser eliminado por estar en uso. Eliminar var3 en el manejador de cómputos

Cambiar la fórmula asociada a var3, de F3 a F1. No es posible realizar el cambio porque var3 está referenciada por OA1

2. Reemplazar una variable de cómputo asociada a un atributo operativo

Acción Resultado Esperado

Asignar var3 al atributo operativo OA1 El cambio es permitido pues ambas variables son del mismo tipo (reales).

Después de la operación nadie referencia a var3 y a var2 se le adiciona una referencia.

Asignar var2 a OA1

3. Evaluar referencias después de remover un movimiento operativo

Acción Resultado Esperado

Asignar var2 al atributo operativo OA1 La operación es permitida y var2 debe tener una referencia menos al final de la

operación. Eliminar el movimiento OM1

4. Evaluar referencias después de remover una transacción operativo

Acción Resultado Esperado

Asignar var2 al atributo operativo OA1 La operación es permitida. Las variables var2 y var4 deben tener una referencia menos al final de la operación.

Asignar var4 al atributo operativo OA2

Eliminar la transacción OT1

Page 80: Implementación de un Manejador Gráfico de Decisiones para ...

72

8.1.5 Pruebas de Sistema

A medida que se agregaban funcionalidades se realizaban pruebas sobre toda la aplicación

para asegurar que se cumplieran las expectativas. Fue un proceso de construcción

incremental en el que hubo momentos en que se debían reformular aspectos de la lógica

para manejar los datos de una decisión. Adicionalmente, la forma en que se presentaba esta

información en la interfaz de usuario debió modificarse en varias ocasiones. Estos cambios

fueron causados por el constante proceso de aprendizaje sobre la definición de una decisión

y por las reuniones de seguimiento. Así, se plantearon esta serie de pruebas que se debían

realizar después de cada mayor modificación para asegurar que la aplicación resolviera el

problema deseado:

1. Se inicia la aplicación y el cliente debe editar las propiedades de la decisión. Se

selecciona la opción en el menú y se abre el dialogo correspondiente. La información es

introducida y aceptada por el usuario. Se verifica que la información haya sido

almacenada abriendo de nuevo estas propiedades y verificando que los cambios

persistan.

2. Se crea un nuevo parámetro, seleccionando la opción de tipo simple. Se verifica que la

interfaz se actualice de manera correcta creando una nueva fila en la tabla para la

definición de dicho parámetro.

3. Se crea un nuevo parámetro de tipo filtro. Se introduce el mismo nombre del parámetro

anterior y se verifica que la aplicación prohíba la repetición de nombres.

4. Se realiza la corrección del nombre y se definen sus propiedades básicas, las cuales

incluyen la definición de un filtro asociado el cual debe ser definido en su totalidad. Una

vez asociado se accede nuevamente y se verifica la información que se encuentra en

dicho dialogo.

5. Se crea una fórmula de tipo operación. La interfaz actualiza los campos ofreciendo al

usuario campos para introducir la expresión y hacer uso del editor y del validador de

expresiones.

6. Se crea una fórmula de tipo búsqueda. La interfaz debe proveer un acceso al dialogo de

definición de filtros para asociarle una consulta a la fórmula.

7. Se crea una fórmula de tipo servicio y se verifica que los campos para introducir un

proveedor de servicio sean desplegados en la interfaz.

8. Se crean parámetros sobre las fórmulas existentes, cambiando la selección de las mismas

para verificar que las vistas en las tablas se actualicen dependiendo de la fórmula

escogida.

9. Se procede a definir el segmento de cómputos, donde se crea una nueva instrucción.

Dicha instrucción debe desplegar la información a definir y se le asocia una expresión.

La expresión asociada se selecciona del diálogo de parámetros. Este puede desplegar

fórmulas, parámetros simples y filtro, y otras instrucciones de cómputo. Para este caso

debería filtrar solo por fórmulas.

10. Sobre cada instrucción se verifican parámetros involucrados y se procede a realizar

asociaciones de valor. Se utiliza el diálogo de parámetros que filtra elementos por el

tipo del parámetro que se desea asociar.

11. Se procede a crear una transacción contable. Se verifica que el campo de unidad de

negocio solamente permita seleccionar elementos que tengan ese tipo de retorno.

Page 81: Implementación de un Manejador Gráfico de Decisiones para ...

73

12. Se crea un movimiento asociado a la transacción creada, sobre la cual se presentan los

campos que permiten su edición. La cuenta es seleccionada de una lista de cuentas,

desplegada en un dialogo que permite realizar búsquedas. Se prueban búsquedas sobre

las cuentas para verificar que el filtro esté funcionando correctamente y finalmente se

selecciona una.

13. La definición de las transacciones operativas implica la creación de una transacción y

asociarle un número de movimientos. Se verifica que las vistas se actualicen

desplegando los atributos del movimiento cada vez que se cambia la selección de este.

Para asociarle valores a los atributos, solamente deben mostrarse instrucciones de

cómputo en el diálogo de selección de parámetros.

14. Una vez definidos los campos de la definición de la decisión, se procede a guardarla.

Se selecciona la opción de guardar y se introducen los datos pedidos por el sistema.

15. Se selecciona la opción “Nueva Decisión” en el menú de opciones verificando que los

datos anteriores se borren de la interfaz. En caso de haber realizado modificaciones

después de guardarla, debe desplegarse un mensaje manifestando los cambios.

16. Se realiza la carga de la decisión seleccionando “Abrir Decisión” y ubicando el archivo

guardado anteriormente. Se verifican que los datos se hayan cargado de manera

exitosa, ubicando datos específicos.

17. Finalmente la última prueba consiste en generar el archivo MAGES. Se verifican que

los diálogos para la generación de los archivos se despliegan de manera correcta. Se

identifican las rutas y nombre de los archivos. Una vez creados los archivos, se verifica

que estos tengan la información correspondiente en el lenguaje de dominio específico

indicado.

8.2 Ejecución de Pruebas

Todas las pruebas se ejecutan de forma correcta y se obtienen los resultados esperados.

Estas pruebas sirvieron para señalar algunas fallas que pudieron ser corregidas

adecuadamente en tiempo de implementación. Las pruebas unitarias y de integración

contribuyeron a asegurar una correcta dependencia entre los diferentes componentes de la

aplicación. Si bien no se probaron todas las posibilidades al interior de cada componente, se

asegura que las interacciones de mayor importancia funcionan adecuadamente. Esto se

refiere a la capacidad de asociar elementos que administran un componente con elementos

administrados por otros componentes. En la medida que se asegure que las relaciones entre

estos elementos sean consistentes, se puede decir que la decisión se ha construido de forma

adecuada.

Las pruebas de sistema a diferencia de las otras dos, se realizaron a la par de la etapa de

implementación. Esto permitió que se hicieran evidentes ciertos errores de la interfaz de

usuario y la forma en que esta interactúa con la lógica de negocio. A su vez, fueron de gran

utilidad en la medida que las diferentes personas que asesoraban el proyecto pudieron dar

su opinión y sugerencias de mejora sobre la forma en que se manejan los datos de una

decisión. Como se pudo observar, estas pruebas se realizaron enfocándose en los

requerimientos funcionales antes planteados buscando al mismo tiempo la usabilidad

deseada para la aplicación.

Page 82: Implementación de un Manejador Gráfico de Decisiones para ...

74

9 Conclusiones

En esta sección se presenta el resumen del trabajo realizado, discutiendo la forma en que se

cumplieron los objetivos del manejador de decisiones. A su vez se presentan las

oportunidades de mejora y de trabajo para futuros desarrollos.

9.1 Discusión

A continuación se analizan diferentes características de la aplicación y su efecto en los

resultados esperados. También se establecen problemáticas relacionadas con las decisiones

tomadas en diferentes etapas del proceso de desarrollo.

1. Se identificó una librería para interfaces gráficas que provee las funcionalidades

adecuadas para el manejo de tablas. Se buscaba presentar en la interfaz gráfica

elementos similares a los encontrados en aplicaciones de hojas de cálculo y que fuesen

agradables a la vista. Las pruebas realizadas para familiarizarse con Qt Jambi

demostraron que es una librería con una variedad de widgets que soportaban la

usabilidad deseada para la aplicación. Se debían buscar tácticas para resolver la

problemática de modificabilidad causada por el modelo signal-slots que incorpora esta

librería.

2. Se estudiaron los componentes de una decisión y la forma en que esta es construida y

luego incorporada en el Juego Gerencial. Este proceso no se dio en un solo momento

puesto que al iniciar el proyecto no se tenía total comprensión de los elementos de una

decisión al ser representados en los archivo XML. A medida que se fueron

comprendiendo sus respectivos papeles y relaciones, se construían diferentes elementos

de la aplicación. Por esta razón se buscaba plantear un diseño que favoreciera la

modificabilidad con el fin de agilizar el proceso de desarrollo y futuros cambios.

3. Las diferentes personas que conocen sobre el tema de las decisiones de este juego

lograron comprender satisfactoriamente la función de cada panel y ventana de la

aplicación. Solamente se necesitaron ciertas aclaraciones sobre elementos muy puntuales

de una decisión. Por lo cual, se considera que el proyecto logró plasmar los conceptos de

una decisión de forma adecuada en una interfaz de usuario. Cumpliendo en buena

medida el escenario de calidad sobre la comprensión de la interfaz gráfica por parte de

un nuevo usuario.

4. La división de la lógica de la aplicación en manejadores específicos demostró ser una

medida adecuada para favorecer la modificabilidad de la aplicación. Gracias a esta

estrategia fue posible una mejor distribución del trabajo del grupo de desarrollo. A su

vez, el proceso de pruebas puede ser dividido en elementos más puntuales al interior de

cada componente. La integración de estos componentes debió ser claramente establecida

a través de las interfaces de servicio expuesta por cada uno de ellos. Sin embargo, se

Page 83: Implementación de un Manejador Gráfico de Decisiones para ...

75

debió realizar un mejor trabajo en la especificación de estas interfaces para evitar

constantes modificaciones.

5. Qt Jambi presentaba una serie de limitantes en cuanto a la modificabilidad que se

deseaba para la aplicación. Por esta razón se tomaron una serie de decisiones que

potenciaran este atributo de calidad. Las que tuvieron mayor utilidad fueron la

implementación de clases obervables-observador y la creación de widgets extendidos. El

primer caso no requirió mayor tiempo de implementación puesto que es muy similar al

modelo que maneja Java Swing. Sin embargo, su utilidad es claramente visible al

momento de desacoplar la lógica de negocio y la interfaz de usuario. Los diferentes

manejadores solo lanzaban eventos de notificación sin ser conscientes de que algún

panel de la interfaz lo recibiera. En cuanto a los widgets modificados, la adición del

modelo publicador-suscriptor presentó una mejoría en la modificabilidad ya que no

debían tenerse preocupaciones sobre mantener consistentes los nombres de los slots.

6. La utilización del panel genérico para el manejo de tablas demostró ser de gran utilidad

cuando se debían crear nuevos paneles. Es el caso del panel de cómputos que tuvo que

someterse a una gran cantidad de cambios debido a una mejor comprensión de la lógica

de una decisión. Ante este tipo de situaciones que se podían dar en cualquier momento,

utilizar este panel genérico logró reducir el tiempo de dichos cambios y proporcionaba la

lógica necesaria para agregar y eliminar elementos a la tabla. Con esto, cualquier cambio

deseado se puede realizar únicamente en este panel y verse reflejado en diferentes

puntos del programa. La limitante sobre este panel es su capacidad de configuración

visual. En el futuro se le pueden agregar otros elementos que pueden ser desplegados en

la tabla.

7. Una de las actividades para potenciar la modificabilidad de este producto era alcanzar

una baja complejidad ciclomática. En términos generales se logró el objetivo, sin

embargo, hay casos puntuales que causan elevados niveles de esta métrica. El caso más

notorio es uno encontrado en el diálogo de selección de cuentas. Este es el causante de la

complejidad de 85 debido a la gran cantidad de puntos de decisión implementados para

filtrar la lista de cuentas. De igual forma, las mayores complejidades se observan en

métodos que se encargan de las verificaciones de porciones de una decisión. Esto era de

esperarse debido a los múltiples caminos de ejecución que tiene evaluar cada caso.

Elevados niveles de complejidad ciclomática afectan la modificabilidad de la aplicación

ya que se requiere más tiempo para comprender la función de una sección de código.

9.2 Trabajo Futuro

A continuación se listan características que pueden tenerse en cuenta a futuro:

1. El objetivo principal de la aplicación es que el profesor sea capaz de introducir toda una

decisión e incorporarla a la herramienta del Juego Gerencial. Para ello, no debería poseer

conocimiento sobre consultas SQL o EJBQL. Se propone entonces la inclusión de un

Page 84: Implementación de un Manejador Gráfico de Decisiones para ...

76

medio interactivo para crear las consultas de los filtros en el manejador de decisiones.

Debería ser una herramienta visual e intuitiva que le facilite la labor al usuario.

2. Implementar un componente que almacene la información de la decisión que vaya

introduciendo el usuario. Así se tiene un registro del proceso de definición y brinda la

facilidad de retroceder a un estado previo de la decisión en caso de que se quieran

descartar cambios.

3. Adicionar un validador para los nombres de los elementos que se declaren en la

decisión. Los nombres que se le asignan a los parámetros, fórmulas y demás elementos

deben seguir un estándar para asegurar una mejor comprensión por parte de otros

usuarios. Este componente se encargaría de manejar la lógica para asignarlos

adecuadamente según el tipo de elemento.

4. Incluir el manejo de parámetros complejos tanto en la lógica de negocio como en la

interfaz gráfica. Este tipo de parámetros no se tuvo en cuenta durante el desarrollo de

este proyecto para dedicar más tiempo en la comprensión e implementación de los

demás conceptos. Al momento de incluirlos, es posible evaluar la modificabilidad de la

aplicación basándose en dos escenarios de calidad antes propuestos.

5. Realizar pruebas de aceptación con un usuario final del Juego Gerencial. Para ello, se

debe contar con una versión estable de Mages-DL y que el generador de archivos con

esta gramática tenga las modificaciones necesarias para esta versión.

Page 85: Implementación de un Manejador Gráfico de Decisiones para ...

77

10 Referencias

[Bar03] Barbacci, M. Software Quality Attributes Tutorial: Modifiability and Usability.

Software Engineering Institute – Carnegie Mellon University (2004)

[BBN07] Bachman, F., Bass, L., Nord, R. Modifiability Tactics. (CMU/SEI-2007-TR-

002). Software Engineering Institute – Carnegie Mellon University (2007)

[Bec00] Beck, K. Extreme Programming Explained: Embrace Change, Addison

Wesley. (2000)

[Bez04] Bezivin, J. In Search of a Basic Principle for Model-Driven Engineering.

Novatica – Special Issue on UML (Unified Modeling Language) pp 21-24.

(2004)

[BS04]

Blanchette, J. Summerfield, M. C++ GUI Programming with Qt 3 – Prentice

Hall (2004)

[Fac10]

Facultad de Administración - Universidad de los Andes. Plan de Estudios -

Pregrado en Administración - Juego Gerencial. Recuperado Noviembre de

2010, de

http://administracion.uniandes.edu.co/pregrado_en_administracion/aspectos_a

cademicos/plan_de_estudios

[FRB04] Freeman, E., Robson, E., Bates, B., Sierra, K. Head First Design Patterns.

O’Reilly Media. (2004).

[Jug10] Departamento de Ingeniería de Sistemas y Computación – Universidad de los

Andes. Proyecto Juego Gerencial –

http://sistemas.uniandes.edu.co/~gerencial/wikijuego/doku.php?id=informacio

n_general

[Kal02] Kalle Dalheimer, M. Programing with Qt. O’Reilly Media; 2da Edición.

(2002)

[Küh05] Kühne, T. What is a Model? Language Engineering for Model-Driven

Software Development. Dagstuhl Seminar Proceedings 04101. (2005)

[MCC76] McCabe, T. A Complexity Measure. IEE Transactions On Software

Engineering, Vol SE-2. No. 4 (1976)

[NW04] Northover, S., Wilson, M. SWT: The Standard Widget Toolkit, Volume 1.

Addison-Wesley. (2004)

Page 86: Implementación de un Manejador Gráfico de Decisiones para ...

78

[OMG06] Object Management Group. Meta Object Facility (MOF) Core Specification.

The Object Management Group. Version 2. (2006)

[RV04] Robinson, M., Vorobiev, P. Swing (Second Edition). Dreamtech Press. (2004)

[RW05] Rozanski, N., Woods, E. Software Systems Architecture: Working with

stakeholders using viewpoints and perspectives. Addison Wesley. (2005)

[Sei03] Seidewitz, E.: What Models Mean. IEEE Software. Vol 20, No. 5, pp 26-32

(2003)

[Tel10] Téllez, L. MAGES-DL: Un lenguaje de Dominio Específico para un

Simulador Financiero. (2010)

[ZTW03] Zayu Gao, J., Tsao, J., Wu, Y., H.-S. Jacob, T. Testing and Quality Assurance

for Component-Based Software. Artech House Computer Library. (2003)