The failures that bugs in software lead to can sometimes be bypassed by the so called workarounds: when a (faulty) routine fails, alternative routines that the system offers can be used in place of the failing one, to circumvent the failure. Previous works have exploited this workarounds notion to automatically recover from runtime failures in some application domains. However, existing approaches that compute workarounds automatically either require the user to manually build an abstract model of the software under consideration, or to provide equivalent sequences of operations from which workarounds are computed, diminishing the automation of workaround-based system recovery. In this paper, we present two techniques that automatically compute workarounds from Java code equipped with formal specifications, avoiding abstract software models and user provided equivalences. These techniques employ SAT solving to compute workarounds on concrete program state characterizations. The first employs SAT solving to compute traditional workarounds, while the second directly exploits SAT solving to circumvent a failing method, building a state that mimics the (correct) behaviour of this failing routine. Our experiments, based on case studies involving implementations of collections and a library for date arithmetic, enable us to show that the techniques can effectively compute workarounds from complex contracts in an important number of cases, in time that makes them feasible to be used for run time repairs.
The failures that bugs in software lead to can sometimes be bypassed by the so called workarounds: when a (faulty) routine fails, alternative routines that the system offers can be used in place of the failing one, to circumvent the failure. Previous works have exploited this workarounds notion to automatically recover from runtime failures in some application domains. However, existing approaches that compute workarounds automatically either require the user to manually build an abstract model of the software under consideration, or to provide equivalent sequences of operations from which workarounds are computed, diminishing the automation of workaround-based system recovery. In this paper, we present two techniques that automatically compute workarounds from Java code equipped with formal specifications, avoiding abstract software models and user provided equivalences. These techniques employ SAT solving to compute workarounds on concrete program state characterizations. The first employs SAT solving to compute traditional workarounds, while the second directly exploits SAT solving to circumvent a failing method, building a state that mimics the (correct) behaviour of this failing routine. Our experiments, based on case studies involving implementations of collections and a library for date arithmetic, enable us to show that the techniques can effectively compute workarounds from complex contracts in an important number of cases, in time that makes them feasible to be used for run time repairs.
The software development methodologies and modeling techniques simplify the complexity of the software construction. The management of a software project wants to get a quality product, planning, organizing, supervising and controlling the evolution of this project throughout its life cycle. This work stems from a Research and Innovation Project for Improvement of Undergraduate Education that involves four courses of the last year of the course grade Computer Analyst, including the Final Project. This paper intends to address, investigate and identify the causes which make having the methodological tools and training, more teachers with years of experience in delivering these courses and personal monitoring of each group of students who made the Final Project, many cases fail to complete the project within the established planning. I. INTRODUCCIÓNEl surgimiento de la Ingeniería de Software, define la necesidad de ver a un producto de software como el desarrollo de algo complejo que requiere planificación, análisis, diseño, implementación, prueba y mantenimiento, con un proceso de construcción basado en un trabajo ingenieril, apoyado por metodologías, técnicas, teorías y herramientas. Sin este concepto del desarrollo de software, se construían productos de software con grandes problemas tales como carencia de fiabilidad, necesidad de mantenimiento permanente, retrasos en las entregas, presupuestos irreales, entre otros. En 1979, DeMarco [1] propone la Ingeniería de Software basada en modelos, compara la construcción de un sistema de software con la construcción de cualquier tipo de sistema ingenieril, y propone la realización de modelos del sistema antes de la construcción del sistema mismo. De esta forma, el modelo de un sistema provee un medio de comunicación entre todos los participantes en el proyecto, cliente, usuarios y desarrolladores. La mayoría de los métodos de desarrollo de software que se usan en la actualidad adoptaron esta filosofía, con el agregado de sus particularidades.Un proceso o metodología de software, indica la secuencia de actividades a seguir para completar el ciclo de vida de desarrollo de un software. Como en cualquier tipo de proyecto, es necesaria una adecuada gestión del proyecto para que el mismo resulte exitoso. La gerencia de un proyecto de software plantea la obtención de un producto de calidad, planificando, organizando, supervisando y controlando la evolución de dicho proyecto durante todo su ciclo de vida [2]. Para ello debe gestionar adecuadamente al personal, el proceso y el problema, seleccionar indicadores adecuados para la medición del proyecto y el logro de estimaciones confiables en cuanto a costos, duración y recursos permitiendo una correcta planificación temporal para cada una de las tareas.Además, el gerente de proyectos debe evaluar formalmente los riesgos del proyecto y planificar y controlar adecuadamente los cambios y la evolución. El uso de herramientas es fundamental porque brindan el soporte automático que facilita el gerenciamiento de estos proyectos.En el pr...
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.
hi@scite.ai
10624 S. Eastern Ave., Ste. A-614
Henderson, NV 89052, USA
Copyright © 2024 scite LLC. All rights reserved.
Made with 💙 for researchers
Part of the Research Solutions Family.