999 resultados para lógica simbólica


Relevância:

20.00% 20.00%

Publicador:

Resumo:

Un método habitual de formarse una idea del futuro de la tecnología es leer a un reducido grupo de personajes, tales como Gates o Negroponte. Estos también confunden sus deseos con la realidad, tienden a ver el mundo en colorines y yerran, pero tienen sobre nosotros la ventaja de que sus palabras son las palabras de un selecto y denso colectivo de superespecialistas a sus órdenes. En parte, ellos son los dueños del futuro, lo están diseñando, construyendo o comprando en sus laboratorios o empresas. Tienen poder.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

Las pruebas de software (Testing) son en la actualidad la técnica más utilizada para la validación y la evaluación de la calidad de un programa. El testing está integrado en todas las metodologías prácticas de desarrollo de software y juega un papel crucial en el éxito de cualquier proyecto de software. Desde las unidades de código más pequeñas a los componentes más complejos, su integración en un sistema de software y su despliegue a producción, todas las piezas de un producto de software deben ser probadas a fondo antes de que el producto de software pueda ser liberado a un entorno de producción. La mayor limitación del testing de software es que continúa siendo un conjunto de tareas manuales, representando una buena parte del coste total de desarrollo. En este escenario, la automatización resulta fundamental para aliviar estos altos costes. La generación automática de casos de pruebas (TCG, del inglés test case generation) es el proceso de generar automáticamente casos de prueba que logren un alto recubrimiento del programa. Entre la gran variedad de enfoques hacia la TCG, esta tesis se centra en un enfoque estructural de caja blanca, y más concretamente en una de las técnicas más utilizadas actualmente, la ejecución simbólica. En ejecución simbólica, el programa bajo pruebas es ejecutado con expresiones simbólicas como argumentos de entrada en lugar de valores concretos. Esta tesis se basa en un marco general para la generación automática de casos de prueba dirigido a programas imperativos orientados a objetos (Java, por ejemplo) y basado en programación lógica con restricciones (CLP, del inglés constraint logic programming). En este marco general, el programa imperativo bajo pruebas es primeramente traducido a un programa CLP equivalente, y luego dicho programa CLP es ejecutado simbólicamente utilizando los mecanismos de evaluación estándar de CLP, extendidos con operaciones especiales para el tratamiento de estructuras de datos dinámicas. Mejorar la escalabilidad y la eficiencia de la ejecución simbólica constituye un reto muy importante. Es bien sabido que la ejecución simbólica resulta impracticable debido al gran número de caminos de ejecución que deben ser explorados y a tamaño de las restricciones que se deben manipular. Además, la generación de casos de prueba mediante ejecución simbólica tiende a producir un número innecesariamente grande de casos de prueba cuando es aplicada a programas de tamaño medio o grande. Las contribuciones de esta tesis pueden ser resumidas como sigue. (1) Se desarrolla un enfoque composicional basado en CLP para la generación de casos de prueba, el cual busca aliviar el problema de la explosión de caminos interprocedimiento analizando de forma separada cada componente (p.ej. método) del programa bajo pruebas, almacenando los resultados y reutilizándolos incrementalmente hasta obtener resultados para el programa completo. También se ha desarrollado un enfoque composicional basado en especialización de programas (evaluación parcial) para la herramienta de ejecución simbólica Symbolic PathFinder (SPF). (2) Se propone una metodología para usar información del consumo de recursos del programa bajo pruebas para guiar la ejecución simbólica hacia aquellas partes del programa que satisfacen una determinada política de recursos, evitando la exploración de aquellas partes del programa que violan dicha política. (3) Se propone una metodología genérica para guiar la ejecución simbólica hacia las partes más interesantes del programa, la cual utiliza abstracciones como generadores de trazas para guiar la ejecución de acuerdo a criterios de selección estructurales. (4) Se propone un nuevo resolutor de restricciones, el cual maneja eficientemente restricciones sobre el uso de la memoria dinámica global (heap) durante ejecución simbólica, el cual mejora considerablemente el rendimiento de la técnica estándar utilizada para este propósito, la \lazy initialization". (5) Todas las técnicas propuestas han sido implementadas en el sistema PET (el enfoque composicional ha sido también implementado en la herramienta SPF). Mediante evaluación experimental se ha confirmado que todas ellas mejoran considerablemente la escalabilidad y eficiencia de la ejecución simbólica y la generación de casos de prueba. ABSTRACT Testing is nowadays the most used technique to validate software and assess its quality. It is integrated into all practical software development methodologies and plays a crucial role towards the success of any software project. From the smallest units of code to the most complex components and their integration into a software system and later deployment; all pieces of a software product must be tested thoroughly before a software product can be released. The main limitation of software testing is that it remains a mostly manual task, representing a large fraction of the total development cost. In this scenario, test automation is paramount to alleviate such high costs. Test case generation (TCG) is the process of automatically generating test inputs that achieve high coverage of the system under test. Among a wide variety of approaches to TCG, this thesis focuses on structural (white-box) TCG, where one of the most successful enabling techniques is symbolic execution. In symbolic execution, the program under test is executed with its input arguments being symbolic expressions rather than concrete values. This thesis relies on a previously developed constraint-based TCG framework for imperative object-oriented programs (e.g., Java), in which the imperative program under test is first translated into an equivalent constraint logic program, and then such translated program is symbolically executed by relying on standard evaluation mechanisms of Constraint Logic Programming (CLP), extended with special treatment for dynamically allocated data structures. Improving the scalability and efficiency of symbolic execution constitutes a major challenge. It is well known that symbolic execution quickly becomes impractical due to the large number of paths that must be explored and the size of the constraints that must be handled. Moreover, symbolic execution-based TCG tends to produce an unnecessarily large number of test cases when applied to medium or large programs. The contributions of this dissertation can be summarized as follows. (1) A compositional approach to CLP-based TCG is developed which overcomes the inter-procedural path explosion by separately analyzing each component (method) in a program under test, stowing the results as method summaries and incrementally reusing them to obtain whole-program results. A similar compositional strategy that relies on program specialization is also developed for the state-of-the-art symbolic execution tool Symbolic PathFinder (SPF). (2) Resource-driven TCG is proposed as a methodology to use resource consumption information to drive symbolic execution towards those parts of the program under test that comply with a user-provided resource policy, avoiding the exploration of those parts of the program that violate such policy. (3) A generic methodology to guide symbolic execution towards the most interesting parts of a program is proposed, which uses abstractions as oracles to steer symbolic execution through those parts of the program under test that interest the programmer/tester most. (4) A new heap-constraint solver is proposed, which efficiently handles heap-related constraints and aliasing of references during symbolic execution and greatly outperforms the state-of-the-art standard technique known as lazy initialization. (5) All techniques above have been implemented in the PET system (and some of them in the SPF tool). Experimental evaluation has confirmed that they considerably help towards a more scalable and efficient symbolic execution and TCG.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

Los lenguajes de programación son el idioma que los programadores usamos para comunicar a los computadores qué queremos que hagan. Desde el lenguaje ensamblador, que traduce una a una las instrucciones que interpreta un computador hasta lenguajes de alto nivel, se ha buscado desarrollar lenguajes más cercanos a la forma de pensar y expresarse de los humanos. Los lenguajes de programación lógicos como Prolog utilizan a su vez el lenguaje de la lógica de 1er orden de modo que el programador puede expresar las premisas del problema que se quiere resolver sin preocuparse del cómo se va a resolver dicho problema. La resolución del problema se equipara a encontrar una deducción del objetivo a alcanzar a partir de las premisas y equivale a lo que entendemos por la ejecución de un programa. Ciao es una implementación de Prolog (http://www.ciao-lang.org) y utiliza el método de resolución SLD, que realiza el recorrido de los árboles de decisión en profundidad(depth-first) lo que puede derivar en la ejecución de una rama de busqueda infinita (en un bucle infinito) sin llegar a dar respuestas. Ciao, al ser un sistema modular, permite la utilización de extensiones para implementar estrategias de resolución alternativas como la tabulación (OLDT). La tabulación es un método alternativo que se basa en memorizar las llamadas realizadas y sus respuestas para no repetir llamadas y poder usar las respuestas sin recomputar las llamadas. Algunos programas que con SLD entran en un bucle infinito, gracias a la tabulación dán todas las respuestas y termina. El modulo tabling es una implementación de tabulación mediante el algoritmo CHAT. Esta implementación es una versión beta que no tiene implementado un manejador de memoria. Entendemos que la gestión de memoria en el módulo de tabling tiene gran importancia, dado que la resolución con tabulación permite reducir el tiempo de computación (al no repetir llamadas), aumentando los requerimientos de memoria (para guardar las llamadas y las respuestas). Por lo tanto, el objetivo de este trabajo es implementar un mecanismo de gestión de la memoria en Ciao con el módulo tabling cargado. Para ello se ha realizado la implementación de: Un mecanismo de captura de errores que: detecta cuando el computador se queda sin memoria y activa la reinicialización del sitema. Un procedimiento que ajusta los punteros del modulo de tabling que apuntan a la WAM tras un proceso de realojo de algunas de las áreas de memoria de la WAM. Un gestor de memoria del modulo de tabling que detecta c realizar una ampliación de las áreas de memoria del modulo de tabling, realiza la solicitud de más memoria y realiza el ajuste de los punteros. Para ayudar al lector no familiarizado con este tema, describimos los datos que Ciao y el módulo de tabling alojan en las áreas de memoria dinámicas que queremos gestionar. Los casos de pruebas desarrollados para evaluar la implementación del gestor de memoria, ponen de manifiesto que: Disponer de un gestor de memoria dinámica permite la ejecución de programas en un mayor número de casos. La política de gestión de memoria incide en la velocidad de ejecución de los programas. ---ABSTRACT---Programming languages are the language that programmers use in order to communicate to computers what we want them to do. Starting from the assembly language, which translates one by one the instructions to the computer, and arriving to highly complex languages, programmers have tried to develop programming languages that resemble more closely the way of thinking and communicating of human beings. Logical programming languages, such as Prolog, use the language of logic of the first order so that programmers can express the premise of the problem that they want to solve without having to solve the problem itself. The solution to the problem is equal to finding a deduction of the objective to reach starting from the premises and corresponds to what is usually meant as the execution of a program. Ciao is an implementation of Prolog (http://www.ciao-lang.org) and uses the method of resolution SLD that carries out the path of the decision trees in depth (depth-frist). This can cause the execution of an infinite searching branch (an infinite loop) without getting to an answer. Since Ciao is a modular system, it allows the use of extensions to implement alternative resolution strategies, such as tabulation (OLDT). Tabulation is an alternative method that is based on the memorization of executions and their answers, in order to avoid the repetition of executions and to be able to use the answers without reexecutions. Some programs that get into an infinite loop with SLD are able to give all the answers and to finish thanks to tabulation. The tabling package is an implementation of tabulation through the algorithm CHAT. This implementation is a beta version which does not present a memory handler. The management of memory in the tabling package is highly important, since the solution with tabulation allows to reduce the system time (because it does not repeat executions) and increases the memory requirements (in order to save executions and answers). Therefore, the objective of this work is to implement a memory management mechanism in Ciao with the tabling package loaded. To achieve this goal, the following implementation were made: An error detection system that reveals when the computer is left without memory and activate the reinizialitation of the system. A procedure that adjusts the pointers of the tabling package which points to the WAM after a process of realloc of some of the WAM memory stacks. A memory manager of the tabling package that detects when it is necessary to expand the memory stacks of the tabling package, requests more memory, and adjusts the pointers. In order to help the readers who are not familiar with this topic, we described the data which Ciao and the tabling package host in the dynamic memory stacks that we want to manage. The test cases developed to evaluate the implementation of the memory manager show that: A manager for the dynamic memory allows the execution of programs in a larger number of cases. Memory management policy influences the program execution speed.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

Este trabajo trata de la aplicación de los códigos detectores y correctores de error al diseño de los Computadores Tolerantes a Fallos, planteando varias estrategias óptimas de detección y corrección para algunos subsistemas. En primer lugar,"se justifica la necesidad de aplicar técnicas de Tolerancia a Fallos. A continuación se hacen previsiones de evolución de la tecnología de Integración, así como una tipificación de los fallos en circuitos Integrados. Partiendo de una recopilación y revisión de la teoría de códigos, se hace un desarrollo teórico cuya aplicación permite obligar a que algunos de estos códigos sean cerrados respecto de las operaciones elementales que se ejecutan en un computador. Se plantean estrategias óptimas de detección y corrección de error para sus subsistemas mas Importantes, culminando en el diseño, realización y prueba de una unidad de memoria y una unidad de proceso de datos con amplias posibilidades de detección y corrección de errores.---ABSTRACT---The present work deals with the application of error detecting and correctíng codes to the désign of Fault Tolerant Computers. Several óptimo» detection and correction strategies are presented to be applied in some subsystems. First of all, the necessity of applying Fault Tolerant techniques is explained. Later, a study on íntegration technology evolution and typification of Integrated circuit faults 1s developed. Based on a compilation and revisión of Coding Theory, a theoretical study is carried out. It allows us to force some of these codes to be closed over elementary operations. Optimum detection and correction techniques are presented for the raost important subsystems. Flnally, the design, building and testing of a memory unit and a processing unit provided with wlde error detection and correction posibilities 1s shown.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

Uno de los campos de investigación más activos hoy en dia dentro del terreno de la inteligencia artificial (I.A.) es el de la representación del conocimiento. Actualmente es usual el clasificar los esquemas de representación del conocimiento en tres grandes grupos [Mylos 82]: Lógicos, de redes semánticas y procedimentales. Ponemos en primer lugar las representaciones lógicas porque es precisamente dentro de ellas donde el presente trabajo se puede encuadrar.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

En el contexto de las técnicas de validación de programas, de las estructuras de axiomatización de la programación planteadas por Hoare y del desarrollo de la Lógica de la Programación que Dijkstra realiza con el operador wp, hemos dotado a los elementos esenciales que intervienen en dicho desarrollo de una estructura que permite su estudio en el ámbito de las categorias. En este trabajo se demuestra que el conjunto de precondiciones de un fragmento de programa anotado tiene estructura de N-categoría y que sucede lo mismo con el conjunto de postcondiciones. Más aún, se ha puesto de manifiesto (y probado) que el operador wp actúa como un funtor entre estos pares de N-categorías. Además, los conjuntos de guardas surgen de un modo natural en la lógica de la programación, han sido tratados desde el punto de vista de la semántica denotacional (Wlrth para el PASCAL y Scott y otros, después, en un enfoque más general) y presentados por Manes y Arbib en su semántica parcialmente aditiva. Pues bien, en este trabajo se demuestra que los conjuntos de guardas tienen también estructura de N-categoría y gue cualguier N-categoría dotada de una suma definida adecuadamente tiene estructura de conjunto de guardas, de tal modo, además, gue el preorden inducido por la suma en el conjunto de guardas coincide con la flecha de la N-categoría. Esta suma es, en concreto, la disyunción exclusiva, lo que adicionalmente supone una sorprendentemente sencilla definición alternativa a la suma de las categorías parcialmente aditivas definida por Manes y Arbib. Con todo esto, se aportan herramientas conceptuales para entender mejor y resolver más eficientemente los problemas que tiene planteados la lógica de la programación, pues se dispone de un punto de vista distinto y nuevo y de toda una familia de instrumentos adicionales.---ABSTRACT---In the context of program validation techniques, Hoare's systems for programming and Dijkstra's development of the logic of programming, based on the operator wp, we have endowed the essential features of this development with a structure that permits to study them in the frame of category theory. In this thesis we show that the set of preconditions of an annotated program segment is an N-category, and the same happens for the set of postconditions. Even more, it is shown that the operator wp acts as a functor between those pairs of Ncategories. Furthermore, guard sets come out in a natural way in the logic of programming, they have been considered from a denotational semantics point of view (Wirth for Pascal and afterwards Scott and al. in a more general setting) and they have been embodied by Manes and Arbib in their partially additive semantics. Then, it is shown in this thesis that the above mentioned guard sets also have the structure of an N-category and that any N-category with an appropiately defined sum has the structure of a guard set in such a way that, besides, the preorder defined in the guard set by the sum operation coincides with the arrows of the N-category. This sum is just the exclusive or of Boolean Logic and this fact adds a surprisingly simple alternative definition for the sum operation in Manes and Arbib partially additive categories. The present work, in summary, makes a contribution of conceptual tools for a better understanding and a more efficient solution of the problems posed to the logic of programming and it does so by providing a new different point of view and a whole family of additional techniques.

Relevância:

20.00% 20.00%

Publicador:

Resumo:

A Dissertação busca compreender e julgar criticamente a hermenêutica teológica de Paul Tillich, a partir do estudo de sua interpretação simbólica da doutrina cristã clássica do pecado, em sua forma protestante-agostiniana. O trabalho se desenvolve em três etapas: primeiramente é apresentada a teoria do símbolo religioso de Paul Tillich. Em seguida, a sua interpretação da doutrina do pecado, presente no complexo de símbolos míticos e conceptuais que foram reunidos sob o nome simbólica da Queda . Na terceira e última parte, a partir de uma avaliação da prática hermenêutica de Tillich seguida de uma discussão com seus críticos, especialmente William Alston e Reinhold Niebuhr, e de um diálogo especial com Paul Ricoeur, o autor conclui: tanto a teoria do símbolo de Tillich como o seu enfoque hermenêutico, que vai principalmente da analítica existencial ao símbolo, necessitam de aperfeiçoamento; e a teoria simbólica de Ricoeur, associada à sua proposta indutiva de reflexão hermenêutica fornece uma importante contribuição. Ao mesmo tempo, o sucesso de Tillich na interpretação da simbólica da Queda parece refutar a tese de Ricoeur de que uma abordagem que parte da ontologia para o símbolo é inadequada por princípio. Conclui-se, portanto, que a abordagem de Tillich é válida, mas que precisa ser complementada; é necessário pensaruma hermenêutica de mão dupla , que dê igual voz aos símbolos religiosos e à ontologia existencial.(AU)

Relevância:

20.00% 20.00%

Publicador:

Resumo:

A Dissertação busca compreender e julgar criticamente a hermenêutica teológica de Paul Tillich, a partir do estudo de sua interpretação simbólica da doutrina cristã clássica do pecado, em sua forma protestante-agostiniana. O trabalho se desenvolve em três etapas: primeiramente é apresentada a teoria do símbolo religioso de Paul Tillich. Em seguida, a sua interpretação da doutrina do pecado, presente no complexo de símbolos míticos e conceptuais que foram reunidos sob o nome simbólica da Queda . Na terceira e última parte, a partir de uma avaliação da prática hermenêutica de Tillich seguida de uma discussão com seus críticos, especialmente William Alston e Reinhold Niebuhr, e de um diálogo especial com Paul Ricoeur, o autor conclui: tanto a teoria do símbolo de Tillich como o seu enfoque hermenêutico, que vai principalmente da analítica existencial ao símbolo, necessitam de aperfeiçoamento; e a teoria simbólica de Ricoeur, associada à sua proposta indutiva de reflexão hermenêutica fornece uma importante contribuição. Ao mesmo tempo, o sucesso de Tillich na interpretação da simbólica da Queda parece refutar a tese de Ricoeur de que uma abordagem que parte da ontologia para o símbolo é inadequada por princípio. Conclui-se, portanto, que a abordagem de Tillich é válida, mas que precisa ser complementada; é necessário pensaruma hermenêutica de mão dupla , que dê igual voz aos símbolos religiosos e à ontologia existencial.(AU)

Relevância:

20.00% 20.00%

Publicador:

Relevância:

20.00% 20.00%

Publicador:

Relevância:

20.00% 20.00%

Publicador:

Relevância:

20.00% 20.00%

Publicador:

Relevância:

20.00% 20.00%

Publicador:

Resumo:

Trata das mudanças da constituição que resultam diretamente da modificação do texto constitucional ou resultam de ruptura com o ordenamento jurídico constitucional.