We offer projects to ETH students -- semesterarbeit, diplomarbeit, Master's projects -- across a number of software engineering topics, all related to the same general goal: construction of high-quality software through reuse ("Trusted Components"), object technology, development of formally proved software.
Below is a list of currently available projects in related areas:
The list is indicative and subject to change. If you are an ETH student and interested in one or more of these topics, please contact one of the members of the team and we'll be happy to talk to you.
Library design is a demanding task but also among the most rewarding in software development, since it builds foundations for the long term. Producing a good set of library classes involves both theory (as there is no good library with a clear conceptual framework for the corresponding application domain) and careful implementation work.
Principles of library design, involving both high-level concepts and down-to-earth rules on naming, interface conventions, documentation etc., have been refined for many years in connection with the Eiffel libraries. They yield a uniform style that supports library extension and facilitate reuse.
The projects in this area include developing new libraries, based on sound theory, or extending existing libraries to support new needs. Attention to quality is of the utmost importance; in library design there is no such thing as a detail. It's Formula-1 programming: the place where the best techniques are first tried for later generalization to ordinary development.
Project: multimedia and simulation libraries
We are developing multimedia and simulation libraries, both for their own interest and for their use in introductory programming teaching. To gain access to the basic facilities in a platform-independent way, the SDL libary is of particular interest. If you like powerful graphical and audio effects as well as high-quality programming this is the project for you.
Project: turning patterns into components
Design patterns provide a common vocabulary for discussing and construction the architecture of software systems, but fall short of the goal of software reuse if they must be implemented anew for each application. The aim of this project is to study to what extent patterns can be turned into reusable, off-the shelf components, taking advantage of advanced language features. Although this will clearly not be possible for all patterns, the outcome should be a set of pattern components, covering a subset of the known patterns, and directly pluggable into applications without further effort on the part of application programmers.
Project: data structure and algorithm components
The open-source EiffelBase library is a carefully crafted set of classes covering fundamental data structures and algorithms. New ones need to be added; for example there are currently no B-tree classes, and not enough sorting mechanisms. This is reusable programming at its highest; everything you do has the potential of being reused by many projects, so quality is paramount.
Project: object-oriented numerical components
Scientific computation is one of the most important application areas of computers, but hasn't benefited from object technology as much as some others. This project, part of a more general effort to produce a full O-O library for scientific computation, is devoted to building some components taking full advantage of O-O methods for specific numerical problems. It requires familiarity with both object-oriented methods and numerical computation.
It is now possible to develop industrial-size programs in a completely formal manner, to produce a result that has mathematically proved correctness properties, verified by automatic tools. (For a short introduction to the area see Ken Robinson's slides at UNSW.) Such approaches have so far been applied mostly to the development of systems, in particular for mission-critical developments such as train and car control systems, defense, aerospace. Here we are especially interested in obtaining proven components. This topic is at the same time fairly new, promising, and full of challenges.
We currently focus on the Atelier B development and proof workbench from Clearsy, which presents one of the most complete approaches, and rests on sound theory (The B Book, J-R Abrial, Cambridge University Press). We also look at other popular systems, such as the PVS prover from SRI International.
Project: a new GUI for B
This is a programming project rather than a formal methods project per se, but it implies gaining a thorough understanding of formal development and B. The Atelier B workbench currently uses a simple text-oriented interface. This project is aimed at providing it with a modern Graphical User Interface respecting the needs of "proof engineers" and conforming to today's GUI expectations.
Project: generating Eiffel from B
The Atelier B workbench is currently able to generate final code -- after a fully mathematical development -- in the programming languages C, C++ or Ada. This project is devoted to adding a new output: Eiffel code.
Project: proving classes
This project, or rather series of related projects, aims at producing computer-validated correctness proofs of contract-equipped classes, starting with elementary examples and continuing with more advanced ones.
Project: automatic generation of class tests based on Design by Contract
If contracts -- preconditions, postconditions, class invariants -- are systematically associated with classes, they provide an invaluable source of information for producing systematic tests, directly based on the software's expressly intended semantics. This project is aimed at building a test generator for contract-equipped classes.
Project: Assessment of commercial components
Part of a general effort to develop a Component Quality Model and component validation standards, this project takes a look at some commercially available components -- which may be COM objects, Enterprise Java Beans, .NET assemblies, VBXes, classes or frameworks from O-O libraries -- and performs a critical assessment of their usefulness to programmers, qualities, and possible deficiencies, with the intent of deducing general rules.
Project: automatic contract extraction
Work in progress, initially targeted at .NET libraries (see draft article) suggests that serious libraries include hidden contracts even when the underlying language (such as C#) doesn't allow expressing them formally. There is far more work to do in this area to find such implicit contracts, if possible by automatic analysis, and add them a posteriori.
Project: Contract Wizard
The .NET contract Wizard, of which an earlier version has been described in a TOOLS 2001 paper, takes advantage of the .NET Metadata and Reflection techniques to enable a user to add contracts to an already compled module coming from a language without support for Design by Contract, such as C# or Java. This project expands this tool into a product intended to be released in the public domain.
We have several possible projects involving the .NET framework, ASP.NET, and applications to Web Services.
See also the .NET Contract Wizard project above. Some of the concurrency projects listed next will also involve .NET mechanisms: remoting, multithreading etc.
Project: language translation
The aim here is to build a translator from Java to Eiffel and (separate project) from the .NET intermediate language IL to Eiffel, taking advantage of the analysis to add contracts -- preconditions, postconditions, invariants -- on the way. Some ideas can be gained from DAIKON.
We are starting an extensive development in the area of concurrent, multi-threaded and distributed programming, involving full-fledged application of O-O techniques. There will be a number of student projects available in connection with this development.
In addition to projects directly related to the main themes of our work we have a few of a more general nature.
Project: Studying and fighting spam through software engineering techniques
This project's topic is away from our other centers of interest, but it addresses a specific problem that affects everyone: understanding Internet "spam" and ways to fight it better. In particular, we are interested in how existing anti-spam tools cope with the issue, and whether one can do better.
Note in particular some recent and interesting work by Paul Graham on using Bayesian techniques to identify spam, and the resulting Bogofilter by Eric Raymond.
Project: Computer Science Department history
The ETH Department of Computer Science (Informatik) has a long and prestigious history which, however, has not been fully documented. The project here is to help write this history, through interviews with its participants and a study of the archive. It's potentially of interest to students not only of computer science or electrical engineering but also of history or the humanities (GESS).
Project: A system to support the faculty hiring process
This is an application project, much of whose difficulty resides in understanding the application domain by careful consideration of user needs. Hiring new faculty at ETH is a complex and sometimes long process; some of its aspects are tedious, but no off-the-shelf software is directly applicable to handle them. The project's idea is to study the process in detail to see what parts could benefit from software support, and to build this support. This requires close cooperation with the administrative units involved, an in-depth understanding of the constraints, and observance of strict constraints of confidentiality. Consider this project if you are interested in the challenge of building a system from the ground up -- analysis, design, implementation -- and the intricacies of dealing with users to understand their needs in depth.