Evolizer, our platform for software evolution research and analysis, stems from the idea of having a Release History Database (RHDB) that integrates information originating from various repositories, such as CVS and Bugzilla, in a single database.
Evolizer has come a long way and advanced from a set of data importers and preprocessors to a platform for various tools that aid developers during their daily maintenance and development tasks. Realized as Eclipse plug-ins, the functionality of Evolizer is available at developers' fingertips in a state-of-the-art IDE and incorporates applications that emerged from ideas of the software evolution research community, as well as more classical approaches to support, for example, program understanding. Some of the tools that are built upon Evolizer, such as ChangeDistiller, follow the original idea of leveraging historical data. Others do not make use of any evolutionary data at all. Instead, for example in case of DA4Java, they analyze source code that is currently under development within the IDE.
We have many open theses in the context of our Evolizer platform!
If you have a general interest in developing tools and methodologies to make a developer's life easier we might have the perfect topic for you. The range of technologies that you can dig into is huge: Available theses involve the development of stand-alone applications, Eclipse plug-ins, simple web-front-ends, as well as full-blown service-oriented architectures.
We would be glad to give you an overview and help you individually to select a topic that suits you best. Please contact Michael Würsch for an appointment.
Below you will find a non-exclusive list of topics where we have open theses/ongoing work:
Supporting Developers with Natural Language
Many common software development activities are ultimately question-driven: Where can I find a suitable sorting algorithm? Which of my colleagues is the expert for this piece of code? What will happen if I change this method? What was the class with most bugs before the last release? Are there any subclasses for this class?
Modern IDEs can fulfill many of such information needs but, as their feature list is growing, mastering these tools becomes more and more demanding, especially for novice programmers. Composing the answers often requires navigating through multiple menus and information is scattered over several windows or views.
New approaches to deal with such issues involve natural language interfaces, so that developers can formulate their queries in plain english.
Let's take an example: Consider you were on holiday for the last two weeks and your back in the office for the first day. Now your co-worker is gone kite-surfing for a week and he did not leave you any message about what he has been working on recently and, especially, whether he has fixed the nasty bug that both of you were discussing a few weeks ago. Usually, you would now search through the bug entries in your issue management system and browse the change logs, as well as the source code, to find the changes he has made to the system. Using a natural language interface, you could just enter: "What changes concerning bug 123 were made during the last two weeks?"
Wouldn't it be great if you could be a part of the team of researchers that are working towards this vision?
Software Analysis as a Service
Have you ever looked at your code and asked yourself whether the system you are writing on is in a good shape; how it compares to other software out there in terms of quality?
Imagine you could go to a Web portal, open an account, enter the URL of your source code repository and bug tracker...and few hours later you'll find a link pointing to a thorough report on your software and in your email inbox. Quality metrics, source code documentation, error proneness and occurring bug patterns, an assessment of maintainability and evolvability of your code - all put into relation with a huge quantity of other projects.
This is what Software Analysis as a Service is all about. And you can participate by writing a thesis in that domain.
Software Systems vs Ecological Systems
Ever thought of developers as hunters competing for prey? Sounds crazy? Ask for an appointment and we will explain you our ideas.
Pictures say more than a thousand (key-)words (of a programming language).
Software is getting more and more complex, with applications having more than 50 million lines of code and growing. Grasping this tremendous amount of code puts up completely new challenges on software development teams. Maintaining such a large code base, e.g., finding the two lines of code among the other 50 millions that are responsible a bug, demands approaches that provide abstraction while maintaining context. Software visualization aims at providing both.
Are you the visual kind of person? Do you have a good feeling for aesthetics and usability? Then we can provide you the perfect playground to try out your ideas.
Fine-grained Change Analysis
Nowadays, development rarely starts from a blank sheet of editor screen. Instead, it is common to adapt large code bases to changing requirements over decades. Changeability is therefore crucial for a software system.
However, we research only started to investigate what changeability exactly means, i.e., what makes a system easy to be adapted. To gain a better understanding, we need to look at change information on a finer-grained level than it is currently provided by common version control systems.
Thanks to our ChangeDistiller tool, we can not only tell that a particular line in a file has changed but we are able to reason about changes on the syntactic level - whether an if-statement was inserted into a method or whether a parameter type has changed between two versions of a system.
We have just begun to discover how this information can be exploited for the benefit of programmers. There is plenty of opportunity for exciting research and you can be part of it.
Augmenting Software Development with Multitouch Tables
Multitouch tables, such as the Microsoft Surface open up completely new ways of collaboration in software engineering - be it during conception or a reengineering phase.
Build up your thesis around this topic and you will be among the first working with this exciting new technology.