Graduate Student Positions in Object-Oriented Programming Systems

We're seeking applications from prospective graduate students who are interested in pursuing a Ph.D. in the area of object-oriented languages, analysis, and software engineering.

Graduate students will join an active and growing research program in object-oriented technology at Carnegie Mellon University.  Current research projects include:

MODULAR REASONING ABOUT OBJECTS

Modular reasoning about the correctness properties of object-oriented systems is challenging due to the coupling introduced by the inheritance mechanism as well as the references and aliasing between objects.  We intend to address these challenges by decoupling a class from its subclasses using a richer notion of protected interface, and by reasoning about multi-object systems using new techniques in ownership type systems and separation logic.  Our long-term goal is to develop a comprehensive proof theory for object-oriented systems, along with tools and type systems that aid in both lightweight reasoning and full verification of programs.

FLUID

The Fluid Project is developing tools to assist software developers in creating analytic assurances regarding dependability-related program properties that defy traditional testing and inspection approaches. These are properties that are non-local in character, in that there may not be a single place in code where they are manifest. Techniques for modeling and assurance have been developed for a variety of properties related to race conditions (including lock-based and non-lock-based concurrency), unshared references to objects, effects, appropriate typing, realtime threading policies, and other properties. A principal design concern is adoptability by software developers. Unlike other approaches based on expressing models through annotation, a strict principle of incrementality is respected, in which any increment of effort requested of a programmer must almost immediately yield some increment of value. Scalability is also a principal concern -- the analyses used in the Fluid tool all support composability, in some cases through the use of annotations as cutpoints.

ARCHJAVA

The ArchJava programming language integrates a specification of software architecture into Java implementation code, and uses a type system to ensure that all run-time communication conforms to architectural constraints.  Preliminary experience with ArchJava suggests that the language is practical and can aid in software evolution tasks.

Current ArchJava research focuses on providing tools for reverse-engineering the architecture of Java programs, modeling dynamic and distributed architectures, and checking architectural properties such as architectural style and sequences of architectural events.

ASPECT-ORIENTED SOFTWARE

The initial focus of this new project has been on formally modeling the semantics of aspect-oriented programming languages and developing a module system that provides strong encapsulation guarantees for aspect-oriented programs.  In the future, the group's research will also include developing new aspect-oriented language features, evaluating aspects in practical systems, and analyzing aspect-oriented
software.

APPLICATION INFORMATION

Interested applicants should apply to the Ph.D. program in either computer science or software engineering, or both.  Applicants with significant experience in industry will find that experience is particularly valued in the software engineering program, while applicants with a primary interest in language theory may find the computer science program more appropriate.  All applications are due by December 15th, 2004.

Further information:
Contact Jonathan Aldrich (jonathan.aldrich@cs.cmu.edu)