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.
|