10 research outputs found
Introducing programming skills in children through toys (robot) to enhance their cognitive skills and critical thinking
Applied project submitted to the Department of Computer Science, Ashesi University, in partial fulfillment of Bachelor of Science degree in Computer Science, April 2018As decade after decade passes, the world has proved extremely progressive especially in
technology. As the world goes completely digital and most people become computer savvy,
it is pivotal to have programming skills to avoid becoming redundant. In creating a world
where programming skills is a culture, it is necessary to instil such skills right from the start
with children. Therefore, teaching programming in schools is just as necessary as other core
subjects. Nevertheless, in many schools in Africa, programming is a skill that many meet
while in university if and only if the school in which they attend has a curriculum that forces
them to do so otherwise it remains a gap in the education.
Programming is core in developing critical thinking, computational thinking, and problem
solving skills among children. Besides programming being taught, it is ideal that the method
used to impart knowledge is fun, easier and the best in aiding understanding. This project
proposes the use of the Safari (robot) developed using Arduino and Dual Tone Multiple
Frequency (DTMF) to teach programming concepts to children using a phone as a controller
to move the robot in four main directions; right, left, forward, backwards and repetitively.
This will be useful both in schools and homes to teach young children programming
concepts for its ease of use and enhancing fun.Ashesi Universit
Energy Consumption of Automated Program Repair
Automated program repair (APR) aims to automatize the process of repairing
software bugs in order to reduce the cost of maintaining software programs.
Moreover, the success (given by the accuracy metric) of APR approaches has been
increasing in recent years. However, no previous work has considered the energy
impact of repairing bugs automatically using APR. The field of green software
research aims to measure the energy consumption required to develop, maintain
and use software products. This paper combines, for the first time, the APR and
Green software research fields. We have as main goal to define the foundation
for measuring the energy consumption of the APR activity. For that, we present
a set of metrics specially crafted to measure the energy consumption of APR
tools and a generic methodology to calculate them. We instantiate the
methodology in the context of Java program repair. We measure the energy
consumption of 10 program repair tools trying to repair real bugs from
Defects4J, a set of real buggy programs. The initial results from this
experiment show the existing trade-off between energy consumption and the
ability to correctly repair bugs: Some APR tools are capable of achieving
higher accuracy by spending less energy than other tools
Understanding Counterexamples for Relational Properties with DIbugger
Software verification is a tedious process that involves the analysis of multiple failed verification
attempts, and adjustments of the program or specification. This is especially the case for complex
requirements, e.g., regarding security or fairness, when one needs to compare multiple related runs
of the same software. Verification tools often provide counterexamples consisting of program inputs
when a proof attempt fails, however it is often not clear why the reported counterexample leads to
a violation of the checked property. In this paper, we enhance this aspect of the software
verification process by providing \emph{DIbugger}, a tool for analyzing counterexamples of relational
properties, allowing the user to debug multiple related programs simultaneously
DDC: un depurador declarativo para C++
Trabajo Fin de Máster en Métodos Formales en Ingeniería Informática, Facultad de Informática UCM, Departamento de Sistemas Informáticos y Computación, Curso 2021/2022.A declarative debugger for C++ is presented, called DDC. A declarative debugger receives as input an incorrect computation, builds a debugging tree based on the execution of the program and, after asking questions to an oracle (typically the user), points out a fragment of code that is the cause of the failure. We present the debugger’s main features, such as three different navigation strategies, using test cases as oracles, support for nonterminating programs and a tree transformation.Presentamos un depurador declarativo para C++, llamado DDC. Un depurador declarativo recibe como argumento de entrada una computación incorrecta, construye un árbol de depuración basado en la ejecución del programa y, después de preguntar a un oráculo (típicamente el usuario), indica el fragmento de código causante del fallo. Presentamos las principales características del depurador, tales como tres estrategias de navegación, el uso de casos de prueba como oráculo, capacidad de depurar programas que no terminan y una transformación de árbol.Depto. de Sistemas Informáticos y ComputaciónFac. de InformáticaTRUEunpu
MetaAPR
Department of Computer Science and EngineeringAutomated Program Repair (APR) aims to help developers automatically fix software bugs. However, current traditional and learning-based APR techniques suffer from the problem of limited fixes, although the candidates of patches contain relevant approaches(patterns) to fix the buggy program. In recent years, researchers leveraged the idea of using Deep Learning Models for efficient bug fixing with trained models, which determines relevant bug fixing patterns. Also, the idea of using Large Language Models, which is trained on a large amount of data, is gaining more acceptance in the Program Repair field. Deriving out of that, it is possible to combine both approaches for efficient bug fixing. In this work, we perform a program repair technique that consists of a two-step approach that makes use of existing learning-based APR techniques and Large Language Models. Firstly, we acquire relevant patterns for bug fixing the particular program from any arbitrary learning-based models by performing template extraction. Secondly, after extracting templates we feed them into LLM models to generate concrete patches by filling the template with some tokens.clos
Time-Traveling Debugging Queries: Faster Program Exploration
International audienceEfficiently debugging a program requires program comprehension. To acquire it, developers explore the program execution, a task often performed using interactive debuggers. Unfortunately, exploring a program execution through standard interactive debuggers is a tedious and costly task. In this paper, we propose Time-Traveling Queries (TTQs) to ease program exploration. TTQs is a mechanism that automatically explores program executions to collect execution data. This data is used to time-travel through execution states, facilitating the exploration of program executions. We built a set of key TTQs based on typical questions developers ask when trying to understand programs. We conducted a user study with 34 participants to evaluate the impact of our queries on program comprehension activities. Results show that, compared to traditional debugging tools, TTQs significantly improve developers' precision, while reducing required time and efforts when performing program comprehension tasks
Automating telemetry- and trace-based analytics on large-scale distributed systems
Large-scale distributed systems---such as supercomputers, cloud computing platforms,
and distributed applications---routinely suffer from slowdowns and crashes due to
software and hardware problems, resulting in reduced efficiency and wasted
resources. These large-scale systems typically deploy monitoring or tracing
systems that gather a variety of statistics about the state of the hardware
and the software. State-of-the-art methods either analyze this data manually,
or design unique automated methods for each specific problem. This thesis
builds on the vision that generalized automated analytics methods on the data
sets collected from these complex computing systems provide critical
information about the causes of the problems, and this analysis can then enable
proactive management to improve performance, resilience, efficiency, or security
significantly beyond current limits.
This thesis seeks to design scalable, automated analytics methods and frameworks
for large-scale distributed systems that minimize dependency on expert
knowledge, automate parts of the solution process, and help make systems more
resilient. In addition to analyzing data that is already collected from systems,
our frameworks also identify what to collect from where in the system, such that
the collected data would be concise and useful for manual analytics. We focus on
two data sources for conducting analytics: numeric telemetry data, which is
typically collected from operating system or hardware counters, and end-to-end
traces collected from distributed applications.
This thesis makes the following contributions in large-scale distributed
systems: (1) Designing a framework for accurately diagnosing previously
encountered performance variations, (2) designing a technique for detecting
(unwanted) applications running on the systems, (3) developing a suite for
reproducing performance variations that can be used to systematically develop
analytics methods, (4) designing a method to explain predictions of black-box
machine learning frameworks, and (5) constructing an end-to-end tracing
framework that can dynamically adjust instrumentation for effective diagnosis of
performance problems.2021-09-28T00:00:00