Leveraging existing software artifacts to support design, development, and testing of mobile applications
MetadataShow full item record
There is an ever growing amount of code available and easily accessible online in public repositories, such as GitHub and Bitbucket. It is therefore not surprising that there has been an increasing interest in analyzing the rich data available in such repositories. Despite the large number of proposed techniques that leverage existing source code, however, these techniques mostly focus on supporting coding and maintenance activities. Other important software engineering tasks, such as software design and testing, have been to a large extent neglected by previous work. To address this limitation of previous work, in this dissertation I defined automated techniques that leverage existing software artifacts to support the design, development, and testing of mobile apps. Specifically, I defined three techniques: GUIFetch, AppTestMigrator, and GUITestGen. GUIFetch is a code-search technique that takes advantage of the growing number of open-source apps in public repositories to support app design and development. Given a sketch of an app's screens and transitions between them, GUIFetch searches for apps in public repositories that are as similar as possible to the provided sketch, ranks them by similarity to the sketch, and then reports them to the user. GUIFetch can provide developers with a starting point for building their GUI-based apps, support early prototyping, and help designers assess whether any existing apps are similar to the one they want to develop. AppTestMigrator is a test migration technique that takes advantage of existing test cases to reduce the cost of testing mobile apps. More precisely, AppTestMigrator considers similarities between apps and migrates test cases across similar apps. Typical examples of this situation are apps that are developed independently by students as part of a class project or an assignment or apps that belong to the same category, such as banking apps, which share much of their functionality and may provide GUIs that are inherently similar. Finally, GUITestGen is a technique that first collects the execution traces generated by one or more apps in a given category when the apps are used by their end-users, and then leverages the collected traces to generate GUI tests for other apps in that same category (i.e., apps that share part of their functionality). To evaluate the effectiveness of the techniques I developed, I implemented them as prototype tools and evaluated them through user studies and empirical investigations on real-world apps. My results provide evidence that the techniques are effective in supporting design, development, and testing of mobile apps.