1,421 research outputs found
Segunda carta pastoral que el Ilmo. y Rmo. señor Dr. don Leonidas Medina Obispo de Pasto con ocasión de la fiesta de la Inmaculada Concepción
Documento mediante el que el obispo de Pasto Leonidas Medina explica a los fieles el misterio de la Inmaculada Concepción de María y los medios para obetener su gracia, además de exponer las diversas celebraciones que se han organizado en torno a la conmemoración de esta fiesta religiosa
Aplicación de la prueba de mutaciones a composiciones de servicios web en WS-BPEL para la generación de casos de prueba de calidad
La prueba de mutaciones ha sido objeto de múltiples trabajos de
investigación durante los últimos 30 años; sin embargo, aún hoy día
sigue presentando algunos problemas que no están resueltos, como la
determinación de los programas semánticamente equivalentes, el coste
computacional implicado en la generación y ejecución del gran número
de mutantes producidos frente a los casos de prueba, la generación de
casos de prueba, etc.
Durante estas tres décadas se han propuesto técnicas para intentar
vencer estos problemas. Esta tesis aborda el problema de la generación
automática de los casos de prueba, empleando para ello una técnica
evolutiva. Los algoritmos genéticos han sido ampliamente utilizados en
la generación de casos de prueba empleándose principalmente un
criterio estructural, pero también han sido aplicados a los sistemas
de mutaciones. A estos últimos también se han aplicado variantes de
los algoritmos genéticos conocidas como algoritmos bacteriológicos y
algoritmos inmunológicos. El enfoque que se propone en esta tesis está
basado en un algoritmo genético que adopta algunas de las
características de los algoritmos bacteriológicos.
Como objeto de esta investigación se han escogido las composiciones de
servicios web en el lenguaje WS-BPEL~2.0. Las arquitecturas orientadas
a servicios, los servicios web y el lenguaje WS-BPEL permiten
automatizar los procesos de negocio; además, el impacto
económico de las composiciones de servicios web en WS-BPEL ha crecido
de forma considerable en los últimos años, por lo que se considera
imprescindible profundizar en la prueba de este tipo de aplicaciones.
Todas las razones anteriores nos han llevado a aplicar la prueba de
mutaciones, una técnica que ha sido previamente aplicada a multitud de
lenguajes, al lenguaje WS-BPEL y a definir una técnica de generación
de casos de prueba que tengan como objetivo matar a los mutantes
producidos para una composición WS-BPEL.
Dado que la prueba de mutaciones no había sido aplicada anteriormente
a este lenguaje, esta tesis afronta el proceso completo de aplicación
de esta técnica a un lenguaje: definición de los operadores de
mutación, desarrollo de una herramienta de generación y ejecución
automática de los mutantes, evaluación y mejora de los operadores
definidos y, por último, definición de la técnica de generación de
casos de prueba y desarrollo de un generador de casos de prueba que
nos permita aplicarla a las composiciones WS-BPEL. Para la evaluación
de los operadores de mutación se han propuesto unas métricas de
calidad que nos pueden permitir, además, definir una técnica de
reducción del coste computacional de la prueba de mutaciones de
composiciones WS-BPEL mediante la disminución del número de operadores
aplicados, descartando aquellos que obtengan valores bajos para las
métricas de calidad propuestas.
El trabajo de investigación desarrollado ha permitido
alcanzar todos los objetivos propuestos
Implementación de operadores de mutación para WS-BPEL 2.0
En este proyecto fin de carrera se completa una herramienta real denominada GAmera desarrollada en el grupo de investigación SPI&FM. GAmera es una herramienta de generación de mutantes para WS-BPEL que en vez de generarlos todos genera sólo un subconjunto de ellos. Dicha herramienta se divide en dos partes: un algoritmo genético que dirige todo el proceso y un entorno que compara los mutantes con el proceso original, para comprobar si su comportamiento varía o no. Este PFC se enmarca dentro de esta segunda parte
Model-Driven Development of Domain-Specific Interfaces for Complex Event Processing in Service-Oriented Architectures
Juan Boubeta-Puig has been honoured with the Extraordinary PhD Award.En la actualidad, las empresas y organizaciones de todo el planeta necesitan gestionar cada día una ingente cantidad de datos provenientes de fuentes muy diversas, tales como aplicaciones propias y de terceros, servicios web, sensores, plataformas de Internet de las cosas o redes sociales, con el fin de llevar a cabo la toma de decisiones.
Un buen proceso de toma de decisiones requiere, entre otros factores, conocer tan pronto como sea posible cuál es el valor que tienen dichos datos para el negocio empresarial. La realización de un exhaustivo análisis de datos, así como una actuación temprana en relación a las situaciones críticas o relevantes que supongan una amenaza para la empresa, permitirá que esta se posicione por encima de sus competidores. No obstante, se trata de un proceso bastante complejo, debido, entre otras razones, a que gran parte de estos datos son heterogéneos - no comparten un formato común - y además deberían procesarse en tiempo real.
En este contexto, el procesamiento de eventos complejos o CEP (Complex Event Processing) es una de las tecnologías software que permite analizar y correlacionar grandes volúmenes de datos en forma de eventos con el propósito de detectar situaciones de una mayor complejidad semántica, así como inferir conocimiento valioso que ayudará en el proceso de toma de decisiones. Para ello, se hace uso de los denominados patrones de eventos en los que se especifican las condiciones que han de cumplirse para detectar dichas situaciones de interés.
A pesar de las grandes ventajas que CEP puede aportar en el ámbito empresarial, supone un gran reto para los usuarios que son expertos en el negocio, pero que carecen de la experiencia y los conocimientos necesarios para el uso de esta tecnología. Uno de los principales problemas a los que deben enfrentarse estos usuarios es precisamente la definición de dichos patrones usando algún lenguaje concreto, los denominados lenguajes de procesamiento de eventos o EPL (Event Processing Language). Aunque algunas soluciones software actuales ofrecen herramientas gráficas con la finalidad de solventar este problema, estas no son lo suficientemente amigables, puesto que requieren que el usuario escriba manualmente, al menos, una parte del código necesario para la definición de los patrones.
Por otra parte, los sistemas de información actuales tienden a estar basados en arquitecturas orientadas a servicios o SOA (Service-Oriented Architecture), debido a que este tipo de arquitectura software permite desarrollar sistemas distribuidos altamente escalables e integrables con otros sistemas propios o de terceros. Recientemente, estas se están combinando con las arquitecturas dirigidas por eventos o EDA (Event-Driven Architecture) dando como resultado las denominadas arquitecturas orientadas a servicios y dirigidas por eventos - ED-SOA (Event-Driven Service-Oriented Architecture) o SOA 2.0, que se caracterizan porque las comunicaciones entre los usuarios, las aplicaciones y los servicios se realizan por medio de eventos de una forma totalmente desacoplada. Para detectar, en tiempo real, situaciones críticas o relevantes en estos sistemas complejos y heterogéneos, así como de ejecutar las acciones pertinentes, se hace necesaria la integración de CEP con SOA 2.0.
Con el fin de dar respuesta a estas necesidades, la investigación llevada a cabo en esta tesis doctoral se ha centrado en el desarrollo dirigido por modelos de interfaces específicas de dominio para CEP en SOA 2.0, con el objeto de facilitar a los expertos en el negocio la definición tanto de los patrones que necesiten detectar en sus sistemas de información, como de las alertas que deban notificarse en tiempo real. Para lograrlo, se ha propuesto un enfoque dirigido por modelos para CEP en SOA 2.0, un lenguaje de modelado y un editor gráfico para la definición de dominios CEP, un lenguaje de modelado y un editor gráfico reconfigurable para la definición y la generación de código de patrones de eventos, así como una solución tecnológica que integra CEP con SOA 2.0. Para la evaluación del enfoque se han desarrollado dos casos de estudio que confirman que este es independiente del dominio donde se aplique. Asimismo, se concluye que los lenguajes definidos son independientes del código que implemente los patrones de eventos y las acciones a llevar a cabo, así como que los editores gráficos facilitan todo esto de una forma amigable e intuitiva, y haciendo los detalles de implementación totalmente transparentes para los expertos en el negocio. Se trata, por tanto, de un enfoque novedoso que pone la tecnología CEP al alcance de cualquier usuario, repercutiendo beneficiosamente en el proceso de toma de decisiones.Nowadays, companies and organizations all around the world need to manage huge amounts of data from heterogeneous sources - such as own and third-party applications, web services, sensors, Internet of things platforms or social networks - every day in order to conduct the decision-making process.
To be successful, a decision-making process requires, among other factors, prompt information regarding what the value of such data is for the business in question. A thorough analysis of data, as well as early action for critical or relevant situations considered as threats for an organization, will allow the organization to be positioned above its competitors. Nevertheless, it is a complex process since, among other reasons, data are heterogeneous - they do not share a common format - and they should be processed in real time.
In this context, Complex Event Processing (CEP) is a technology that allows the analysis and correlation of large volumes of data with the aim of detecting complex and meaningful events, and of inferring valuable knowledge for end users. This knowledge will be really helpful in the decision-making process. To do this, so-called event patterns are used. These patterns specify which conditions must be met in order to detect such situations of interest.
Despite the great advantages that CEP can bring to a business, it is a substantial challenge for users who are business experts, but do not have the necessary experience and knowledge for the use of this technology. One of the main problems these users have to face is precisely the definition of these event patterns using particular languages, those called Event Processing Languages (EPLs). Although some current software solutions provide graphical tools in order to solve this problem, none of them are user-friendly enough, since they require users to hand-write at least a portion of the code for the pattern definition.
On the other hand, current information systems tend to be based on Service-Oriented Architectures (SOAs) due to the fact that this type of software architecture allows the development of highly scalable distributed systems as well as their integration with own and third-party systems. Recently, these are being combined with Event-Driven Architectures (EDAs), what is known as Event-Driven Service-Oriented Architectures (ED-SOAs or SOAs 2.0). The latter enable us to establish decoupled communications between users, applications and services. The integration of CEP with SOA 2.0 is a requirement to be able to detect real-time, relevant or critical situations in these complex and heterogeneous systems, as well as for the execution of the appropriate actions.
In order to respond to these needs, the research carried out in this thesis has focused on the model-driven development of domain-specific interfaces for CEP in SOAs 2.0, with the aim of facilitating the task of defining both event patterns to be detected and alerts for real time notification for domain experts. To reach this goal, the following contributions have been supplied: a model-driven approach for CEP in SOA 2.0, a modeling language and a graphical editor for CEP domain definition, a modeling language and a reconfigurable graphical editor for event pattern definition and code generation, as well as a technological solution integrating CEP with SOA 2.0. The approach has been evaluated through the development of two case studies that have confirmed independence of the approach from the application domain. Besides, we can assert that the proposed languages are independent of event patterns and actions implementation code and that user-friendly and intuitive graphical editors hide all the implementation details from end users. This is therefore a novel approach for bringing CEP technology closer to any user, positively impacting the decision making process
Búsquedas Genéticas: Métodos de optimización global y optimización combinatoria
Esta tesis se enmarca en la aplicación de AGs a la optimización de funciones
tanto en el ámbito de variables continuas como en los problemas de
optimización combinatoria. En particular, se establecerán diversas estrategias
basadas en sucesivas búsquedas acotadas, que permitan evolucionar
al algoritmo hacia el óptimo de la función a optimizar.
Por tanto, los objetivos a conseguir en esta tesis son diseñar y validar
diversas estrategias de resolución de problemas de optimización continua,
por un lado, y de optimización combinatoria, por otro, mediante métodos
evolutivos diversos, que toman como base los AGs.
Las aportaciones de la tesis consiste en el desarrollo de cuatro estrategias
de optimización:
En el ámbito de variables continuas:
Búsqueda Lineal Genética trata de extender los tradicionales métodos
de optimización que usan Búsqueda Lineal, permitiendo explorar
la dirección de búsqueda en un intervalo mucho más amplio
y que incluye incluso la rama de valores negativos. Dicha
Búsqueda Lineal Extendida se realiza mediante un sencillo AG
unidimensional.
Búsqueda Genética en Cajas corresponde a una estrategia de resolución
de sucesivos problemas acotados, centrados en torno a
óptimos locales obtenidos mediante un AG multidimensional y
que usa una función de evaluación con memoria.
En el ámbito de variables combinatorias:Búsqueda Genética en Vecindades es una adaptación de la Búsqueda
Genética en Cajas al problema combinatorio. De modo que, se
desarrollarían sucesivos problemas acotados, centrándonos en
torno a la búsqueda de un óptimo local dentro de la vecindad
del punto inicial.
Búsqueda Genética deMutantes permite generar de forma automática
mutantes de programas originales en el ámbito de las pruebas
del software, y más en concreto en la técnica de mutaciones.
Este algoritmo se integra dentro de la herramienta GAmera que
permite automatizar el proceso de pruebas de mutaciones para
composiciones de servicios enWS-BPEL 2.0 mediante el empleo
de un AG. Una de las características de esta propuesta es la optimización
del número de mutantes a generar, de manera que no
se generarán todos los posibles mutantes
Evolutionary Mutation Testing in Object-Oriented Environments
La prueba de mutaciones es reconocida como un potente método para evaluar la fortaleza
de un conjunto de casos de prueba en la detección de posibles fallos en el código. No
obstante, la aplicación de esta técnica es costosa, lo cual ha supuesto normalmente un
obstáculo para una mayor acogida de la misma por parte de la industria. Varias técnicas
han mostrado ser capaces de reducir ampliamente su coste sin mucha pérdida de efectividad,
pero también es cierto que estas técnicas solo han sido evaluadas en determinados
contextos, especialmente en el ámbito de los operadores de mutación tradicionales para
programas procedurales. Por ejemplo, la Prueba de Mutación Evolutiva ha sido aplicada
únicamente a composiciones WS-BPEL, a pesar de que se obtuvo un resultado positivo
al seleccionar un subconjunto de mutantes a través de un algoritmo evolutivo a fin de
mejorar el conjunto de casos de prueba. Como resultado, se desconoce a día de hoy si
los mismos beneficios pueden extrapolarse a otros niveles y dominios.
En particular, en esta tesis nos preguntamos hasta qué punto la Prueba de Mutación
Evolutiva es también útil para reducir el número de mutantes en sistemas orientados a
objetos. Más específicamente, nos enfocamos en el lenguaje de programación C++, ya
que la prueba de mutaciones casi no se ha desarrollado respecto a este popular lenguaje a
juzgar por la falta de artículos de investigación en este campo que se dirigen este lenguaje.
Dado que C++ ha sido apenas abordado en cuanto a investigación y en cuanto a la
práctica, en esta tesis nos ocupamos de todas las fases de la prueba de mutaciones: desde
la definición e implementación de operadores de mutación en un sistema de mutaciones,
hasta la evaluación de esos operadores y la aplicación de la Prueba de Mutación Evolutiva
entre otras técnicas de reducción del coste.
En esta tesis definimos e implementamos un conjunto de operadores de mutación de
clase para C++ en MuCPP, herramienta de mutaciones que nos permite llevar a cabo
experimentos con programas reales gracias a las características incorporadas a la misma.
Estos operadores de mutación son automatizados siguiendo un conjunto de reglas para
que produzcan los mutantes que se esperan de los mismos. En términos generales, los
operadores de clase generan bastantes menos mutantes que los operadores tradicionales,
un porcentaje mayor de mutantes equivalentes y se aplican con diversa frecuencia dependiendo
de las características del programa analizado. El desarrollo de reglas de mejora
en la implementación de los operadores permite reducir incluso más el número de
mutantes, evitando generar mutantes que no son interesantes para el propósito de la
prueba de mutaciones. Otro descubrimiento interesante es que el conjunto de mutantes
de clase y el de mutantes tradicionales se complementan, ayudando a diseñar un conjunto
de casos de prueba más efectivo.
También desarrollamos GiGAn, un nuevo sistema para conectar MuCPP y un algoritmo
genético para aplicar la Prueba de Mutación Evolutiva a sistemas orientados a objetos en
C++. El algoritmo genético permite reducir el número de mutantes que sería generado
por MuCPP ya que guía la búsqueda a la selección de aquellos mutantes que pueden
inducir a la generación de nuevos casos de prueba (mutantes fuertes). El rendimiento de
esta técnica se muestra mejor que el de un algoritmo aleatorio, tanto cuando se buscan
diferentes porcentajes de mutantes fuertes como cuando se simula el refinamiento del
conjunto de casos de prueba mediante los mutantes seleccionados por ambas técnicas.
La estabilidad de la Prueba de Mutación Evolutiva en los diferentes programas analizados
y los buenos resultados en aquellos programas de los que se deriva un mayor número de
mutantes son observaciones adicionales.
Finalmente, realizamos experimentos para evaluar de forma individual a estos operadores
de mutación desde una doble perspectiva: cómo de útiles son para la evaluación (TSE)
y para la mejora (TSR) de un conjunto de casos de prueba. Para ello clasificamos
a los operadores usando dos métricas distintas: el grado de redundancia (TSE) y la
calidad para guiar a la generación de casos de prueba de alta calidad (TSR). Siguiendo
estas clasificaciones, ponemos en práctica un estudio selectivo teniendo en cuenta que
los operadores menos valiosos están en las últimas posiciones. Este enfoque selectivo
revela que los operadores no son necesariamente igual de útiles para TSE y TSR, y que
estas clasificaciones son apropiadas para llevar a cabo una estrategia selectiva cuando
lo comparamos con la aplicación de otras clasificaciones de operadores o la selección
aleatoria de mutantes. Sin embargo, favorecer la generación de mutantes individuales a
partir de los operadores mejor valorados es mucha mejor opción que descartar operadores
al completo debido a que cada uno de estos operadores se centra en una característica
concreta del paradigma de orientación a objetos. En conjunto, todas estas evaluaciones
en torno a estos operadores de clase sugieren que la naturaleza de los mismos puede
limitar los beneficios de aplicar cualquier técnica de reducción del coste.Mutation testing is acknowledged as a powerful method to evaluate the strength of test
suites in detecting possible faults in the code. However, its application is expensive,
which has traditionally been an obstacle for a broader use in the industry. While it is
true that several techniques have shown to greatly reduce the cost without losing much
effectiveness, it is also true that those techniques have been evaluated in limited contexts,
especially in the scope of traditional operators for procedural programs. To illustrate this
fact, Evolutionary Mutation Testing has only been applied to WS-BPEL compositions,
despite the positive outcome when selecting a subset of mutants through an evolutionary
algorithm with the aim of improving a test suite. As a result, it is unknown whether the
same benefits can be extrapolated to other levels and domains.
In particular, we wonder in this thesis to what extent Evolutionary Mutation Testing is
also useful to reduce the number of mutants generated by class mutation operators in
object-oriented systems. More specifically, we focus on the C++ programming language,
since the development of mutation testing with regard to this widely-used language is
clearly immature judging from the lack of papers in the literature tackling this language.
Given that C++ has been hardly addressed in research and practice, we deal with all
the phases of mutation testing: from the definition and implementation of mutation
operators in a mutation system to the evaluation of those operators and the application
of Evolutionary Mutation Testing among other cost reduction techniques.
We define a set of class mutation operators for C++ and implement them in MuCPP,
which allows us to perform experiments with real programs thanks to the facilities incorporated
into this mutation tool. These mutation operators are automated following
a set of guidelines so that they produce the expected mutations. In general, class-level
operators generate far fewer mutants than traditional operators, a higher equivalence
percentage and they are applied with varying frequency depending on the features of
the tested program. Developing improvement rules in the implementation of several
mutation operators help further reduce the number of mutants, avoiding the creation
of uninteresting mutants. Another interesting finding is that the set of class mutants
and the set of traditional mutants complement each other to help the tester design more
effective test suites.
We also develop GiGAn, a new system to connect the mutation tool MuCPP and a genetic
algorithm to apply Evolutionary Mutation Testing to C++ object-oriented systems.
The genetic algorithm allows reducing the number of mutants that would be generated
by MuCPP as it guides to the selection of those mutants that can induce the generation
of new test cases (strong mutants). The performance of this technique shows to be
better than the application of a random algorithm, both when trying to find different
percentages of strong mutants and also when simulating the refinement of the test suite
through the mutants selected by each of these techniques. The stability of EMT among
different case studies and the good results of the simulation in the programs that lead to
the largest set of mutants are additional observations.
Finally, we conduct an experiment to assess individually these mutation operators from a
double perspective: how useful they are for the evaluation of the test suite (TSE) and its
refinement (TSR). To that end, we rank the operators using two different metrics: degree
of redundancy (TSE) and quality to guide on the generation of high-quality test cases
(TSR). Based on these rankings, we perform a selective study taking into account that
the less valuable operators are at the bottom of the classification. This selective approach
reveals that an operator is not necessarily as useful for TSE as for TSR, and that these
rankings are appropriate for a selective strategy when compared to other rankings or the
selection of mutants randomly. However, favouring the generation of individual mutants
from the best-valued operators is much better than discarding operators completely because
each of the operators targets a particular object-oriented feature. Altogether, these
evaluations about class operators suggest that their nature can limit the benefits of any
cost reduction technique.Este trabajo fue financiado por la beca de investigación PU-EPIF-FPI-PPI-BC 2012-
037 de la Universidad de Cádiz, por el proyecto DArDOS (TIN2015-65845-C3-3-R) del
Programa Estatal de Investigación, Desarrollo e Innovación Orientada a los Retos de
la Sociedad del Ministerio de Economía y Competitividad, y por la Red de Excelencia
SEBASENET (TIN2015-71841-REDT) del Programa Estatal de Fomento de la Investigación
Científica y Técnica de Excelencia del Ministerio de Economía y Competitividad.Número de páginas: 23
Generación dinámica de invariantes para composiciones de servicios web en WS-BPEL
En los últimos años, las arquitecturas orientadas a servicios están cambiando la filosofía de desarrollo de software en muchos entornos. El uso de servicios web facilita significativamente la interoperabilidad entre sistemas, permitiendo programar sistemas de gran tamaño usando otros más simples de manera sencilla. El principal lenguaje para componer servicios es WS-BPEL 2.0, que ha sido estandarizado por OASIS con la participación de las grandes empresas del sector informático. Sin embargo, las principales técnicas de prueba no han sido adaptadas a WS-BPEL, quedando como uno de los principales retos para su adopción.
El objetivo de esta tesis es estudiar la validez de la generación dinámica de invariantes (también conocida como generación de invariantes potenciales) para apoyar la prueba de caja blanca de composiciones de servicios web en WS-BPEL. En primer lugar, la tesis comprueba la viabilidad de la generación dinámica de invariantes para WS-BPEL. Para ello se presenta una arquitectura basada en el generador dinámico de invariantes Daikon, que ha demostrado ser útil para lenguajes imperativos como C/C++, Java y Perl. Daikon es software libre, y se ha integrado con código propio y otros dos sistemas libres: el motor de ejecución compatible WS-BPEL 2.0 ActiveBPEL y la biblioteca de prueba unitaria para WS-BPEL BPELUnit, que incorpora un mecanismo de simulación de servicios web (pues puede haber servicios no disponibles para pruebas). Los tres sistemas han sido adaptados para crear Takuan, el único generador dinámico de invariantes para WS-BPEL hasta la fecha.
Tras implementar Takuan se realizaron pruebas para comprobar la utilidad de los invariantes que generaba. En ellas se observaron diversas mejoras específicas de WS-BPEL que permitirían optimizar su rendimiento. Tras implementarlas y evaluarlas, se obtuvo una mejora sustancial tanto en el tiempo de ejecución de Takuan como en la cantidad de invariantes que produce, descartando muchos invariantes no informativos y redundantes. Una vez estuvieron dichas mejoras implementadas se demostró la estabilidad de los invariantes generados por Takuan, permitiendo asegurar su correcto funcionamiento con un conjunto soporte adecuado. Los resultados obtenidos permiten afirmar la validez de la generación dinámica de invariantes para apoyar la prueba de caja blanca de composiciones WS-BPEL
Generación de calendario de exámenes mediante coloreo de grafos
La memoria del PFC describe el proceso de desarrollo del mismo. Se realiza una descripción general del proyecto: perspectivas, funciones del producto, usuarios a los que va dirigido, restricciones, suposiciones y dependencias del mismo, requisitos para futuras versiones... Finalmente se expondrá el desarrollo del proyecto en el que, al estar hablando de un Proyecto de Desarrollo de Aplicaciones Software, se incluirán los siguientes apartados: metodología de desarrollo, especificación de los requisitos del sistema, análisis del sistema, diseño del sistema, la codificación, las pruebas y la validación, el resumen, las conclusiones, el manual de usuario, el manual de instalación, las referencias y los anexos necesarios.Proyecto Fin de Carrera sobre una aplicación que genera un calendario de exámenes para diferentes titulaciones, obteniéndose un calendario en el que no coinciden los exámenes de las asignaturas que tienen alumnos matriculados en común. De esta forma nos podemos evitar “la segunda vuelta” de los mismos, consiguiendo así que sólo se realice un único examen, que no existan disputas por la dificultad de las diferentes vueltas y que los profesores sólo elaboren un examen. La elaboración de los calendarios de exámenes será menos costosa, y además se facilitan tres opciones dependiendo de las necesidades del usuario: la más óptima (algoritmo BackTracking), la más rápida (algoritmo devorador), la más rápida mejorada (algoritmo devorador mejorado)
Dominous: simulador libre de dominó
Dominous es un simulador libre de dominó internacional (por parejas y a 300 puntos). Permite participar a un jugador y busca fomentar el aprendizaje y la renovación de un juego clásico y con mucha profundidad. Para ello, Dominous implementa la inteligencia artificial de los jugadores controlados por la máquina mediante sistemas expertos. El programa está disponible tanto para Windows como para GNU/Linux, no tiene grandes requerimientos técnicos para funcionar y está liberado con licencia GNU GPL. Dominous es fácilmente extensible y permite efectuar pruebas de rendimiento masivas sobre sistemas expertos
- …
