Supporting Source Code Feature Analysis Using Execution Trace Mining
dc.contributor.advisor | Schneider, Kevin | en_US |
dc.contributor.advisor | Roy, Chanchal | en_US |
dc.contributor.advisor | Chowdhury, Nurul | en_US |
dc.contributor.committeeMember | Deters, Ralph | en_US |
dc.contributor.committeeMember | McCalla, Gord | en_US |
dc.creator | Khan, Mohammad | en_US |
dc.date.accessioned | 2013-11-09T12:00:12Z | |
dc.date.available | 2013-11-09T12:00:12Z | |
dc.date.created | 2013-10 | en_US |
dc.date.issued | 2013-11-08 | en_US |
dc.date.submitted | October 2013 | en_US |
dc.description.abstract | Software maintenance is a significant phase of a software life-cycle. Once a system is developed the main focus shifts to maintenance to keep the system up to date. A system may be changed for various reasons such as fulfilling customer requirements, fixing bugs or optimizing existing code. Code needs to be studied and understood before any modification is done to it. Understanding code is a time intensive and often complicated part of software maintenance that is supported by documentation and various tools such as profilers, debuggers and source code analysis techniques. However, most of the tools fail to assist in locating the portions of the code that implement the functionality the software developer is focusing. Mining execution traces can help developers identify parts of the source code specific to the functionality of interest and at the same time help them understand the behaviour of the code. We propose a use-driven hybrid framework of static and dynamic analyses to mine and manage execution traces to support software developers in understanding how the system's functionality is implemented through feature analysis. We express a system's use as a set of tests. In our approach, we develop a set of uses that represents how a system is used or how a user uses some specific functionality. Each use set describes a user's interaction with the system. To manage large and complex traces we organize them by system use and segment them by user interface events. The segmented traces are also clustered based on internal and external method types. The clusters are further categorized into groups based on application programming interfaces and active clones. To further support comprehension we propose a taxonomy of metrics which are used to quantify the trace. To validate the framework we built a tool called TrAM that implements trace mining and provides visualization features. It can quantify the trace method information, mine similar code fragments called active clones, cluster methods based on types, categorise them based on groups and quantify their behavioural aspects using a set of metrics. The tool also lets the users visualize the design and implementation of a system using images, filtering, grouping, event and system use, and present them with values calculated using trace, group, clone and method metrics. We also conducted a case study on five different subject systems using the tool to determine the dynamic properties of the source code clones at runtime and answer three research questions using our findings. We compared our tool with trace mining tools and profilers in terms of features, and scenarios. Finally, we evaluated TrAM by conducting a user study on its effectiveness, usability and information management. | en_US |
dc.identifier.uri | http://hdl.handle.net/10388/ETD-2013-10-1266 | en_US |
dc.language.iso | eng | en_US |
dc.subject | static, dynamic, instrumentation, execution trace, program comprehension | en_US |
dc.title | Supporting Source Code Feature Analysis Using Execution Trace Mining | en_US |
dc.type.genre | Thesis | en_US |
dc.type.material | text | en_US |
thesis.degree.department | Computer Science | en_US |
thesis.degree.discipline | Computer Science | en_US |
thesis.degree.grantor | University of Saskatchewan | en_US |
thesis.degree.level | Masters | en_US |
thesis.degree.name | Master of Science (M.Sc.) | en_US |