Our research activity in this area is directed at improving all aspects of software development, and at making software itself more efficient and reliable. The most powerful form of reuse is not code reuse but design reuse . A proven piece of code is less likely to be reusable than a proven design, but a proven design is usually more difficult to develop.
Design patterns promote design reuse by capturing and expounding proven object-oriented designs.
A design pattern characterizes a single problem and its solution, the consequences of that solution, and variations on the solution's implementation. Our interests in this area include mining existing software for patterns, studying pattern application in all phases of development, and devising tools that support pattern perusal and automate their application. We are exploring new programming paradigms and language features that increase the expressiveness of languages. Our ongoing work on supporting multidimensional separation of concerns using hyperspaces is an example. The hyperspaces approach builds on our earlier work on subject-oriented programming to allow modularization according to multiple kinds of concerns simultaneously.