9 research outputs found
Understanding object-oriented source code from the behavioural perspective
Comprehension is a key activity that underpins a variety of software maintenance and engineering tasks. The task of understanding object-oriented systems is hampered by the fact that the code segments that are related to a user-level function tend to be distributed across the system. We introduce a tool-supported code extraction technique that addresses this issue. Given a minimal amount of information about a behavioural element of the system that is of interest (such as a use-case), it extracts a trail of the methods (and method invocations) through the system that are needed in order to achieve an understanding of the implementation of the element of interest. We demonstrate the feasibility of our approach by implementing it as part of a code extraction tool, presenting a case study and evaluating the approach and tool against a set of established criteria for program comprehension tools
Disassembler and Analyser of Binary Code
Tato práce se zabývá problematikou zpětného překladu binárního kódu do jazyka symbolických instrukcí. Věnuje se popisu architektur ARM a AVR a průzkumu existujících řešení. Na základě získaných informací zpracovává návrh a implementaci aplikace typu disassembler. Poskytuje grafické uživatelské rozhraní usnadňující spuštění zpětného překladu a zobrazení jeho výsledku. Navržené prostředí je snadno rozšířitelné o disassemblery dalších architektur, algoritmy řízení zpětného překladu a analýzy kódu.This thesis is focused on binary code disassembly. It describes the design of ARM and AVR architectures and does a research into existing solutions. Based on this knowledge, we designed and implemented a disassembler-like application. The application provides a graphical user interface to facilitate the starting of disassembly and displays the result. The designed environment is extensible to more disassemblers, disassembly algorithms, and code analysis.
Evidence-based Software Process Recovery
Developing a large software system involves many complicated, varied, and
inter-dependent tasks, and these tasks are typically implemented using a
combination of defined processes, semi-automated tools, and ad hoc
practices. Stakeholders in the development process --- including software
developers, managers, and customers --- often want to be able to track the
actual practices being employed within a project. For example, a customer
may wish to be sure that the process is ISO 9000 compliant, a manager may
wish to track the amount of testing that has been done in the current
iteration, and a developer may wish to determine who has recently been
working on a subsystem that has had several major bugs appear in it.
However, extracting the software development processes from an existing
project is expensive if one must rely upon manual inspection of artifacts
and interviews of developers and their managers. Previously, researchers
have suggested the live observation and instrumentation of a project to
allow for more measurement, but this is costly, invasive, and also requires
a live running project.
In this work, we propose an approach that we call software process
recovery that is based on after-the-fact analysis of various kinds of
software development artifacts. We use a variety of supervised and
unsupervised techniques from machine learning, topic analysis, natural
language processing, and statistics on software repositories such as version
control systems, bug trackers, and mailing list archives. We show how we can
combine all of these methods to recover process signals that we map back to
software development processes such as the Unified Process. The Unified
Process has been visualized using a time-line view that shows effort per
parallel discipline occurring across time. This visualization is called the
Unified Process diagram. We use this diagram as inspiration to produce
Recovered Unified Process Views (RUPV) that are a concrete version of this
theoretical Unified Process diagram. We then validate these methods using
case studies of multiple open source software systems