A Software Repository for Live Software Development Environments - Gil Manuel Oliveira de Almeida Domingues (2018)
The concept of Live Programming exists since the genesis of some of the first programming environments such as Lisp machines , SmallTalk, amongst others. There are multiple characteristics that can be associated with it, specifically liveness, that is, the almost instantaneous nature of the feedback, as well as reflection, which allows for the software to modify its own implementation at run-time. For the new concept Live Software Development to be possible, the environment needs to allow for the modification of the running software. One way to facilitate Live Software Development would be to provide a visualization interface through which the developers could see and directly manipulate the running system. For this to work, the visualization engine would have to receive detailed information about the system, in order to generate the visual representation of the system. As the required information is not only present in the static representation of the system - in source code files - but also generated dynamically at run-time, it becomes necessary to have an accessible software repository to store and allow the access to this information. There have been many examples described in literature of software analysis techniques to improve software comprehension. These either analyze the structure of the software at several levels of abstraction or analyze the behavior of the software, ideally at run-time. There are also several works in literature comparing different database technologies, such as SQL, graph based databases and time series databases, the difference in performance between them and what data fits best fits what database type. The goal of this thesis is threefold. The first goal is to determine which metrics best represent a running software system. Secondly, it is to find and adapt software mining tools most useful for the context of Live Software Development, and apply them. The third goal is to implement a software repository which would be capable of storing the information obtained via these tools and provide access to that data, enabling its use for Live Software Development tools and environments.