 |
Software Engineering is concerned with discovering techniques for improving
the cost, correctness, and usability of software systems. Unfortunately,
these goals are in continual tension with each other. Indeed, most commercial
software systems fail on all counts, threatening the health of the software
companies and the well-being of software users.
A critical component of achieving these three goals is reducing the
complexity of software systems through improved reasoning techniques, system
structures, and analysis. A less complex system is less costly to build
correctly and more predictable in use. The Software Engineering Group's
primary thrust is to cope with the crippling complexity of large systems
and the processes that produce them.
Requirements Engineering. Empirical studies show that most of the
difficulties in producing large complex systems stem from problems with the
requirements, which define what the system is supposed to accomplish.
Consequently, methods for acquiring and analyzing requirements can have
very large economic leverage. Studies also show that social,
political and cultural factors very often lie behind failures in large
system development efforts. Our research in requirements is concerned with
the use of social science methods and video to develop requirements that
will allow the system to succeed in the environment where it will actually
be used.
Software Design and Evolution. In the area of support for
software development and evolution, the focus has been on the automation of
key programming tasks to dramatically lower the bloated costs of software.
To improve the programming task, a new generation of tools is using
knowledge of a program's behavior to automate tasks. One example is a tool
for assisting restructuring (remodularizing) a program without changing the
program behavior, as a precursor to enhancement. Such a restructuring can
localize future changes, hence lowering the cost of those changes. The
current focus of this work is on visualization and user interfaces for
high-level restructuring, and improving tool support for widely used
programming like C, and automating other program enhancement
tasks. These investigations are now pointing to new ways to
think about software modularity.
Testing and Analysis. In the area of software testing and analysis
the focus has been on the development of methods for ensuring the
dependability of software. Previous work involved the development of a
systematic, but informal method for analyzing software that was
successfully used to verify the functional avionics on a Navy airplane.
This project, called the QDA (Quick Defect Analysis) project is now
involved in the analysis of Ada programs. Current work has also resulted in
the development of a new approach to the measurement of software
dependability called trustability. A program has trustability T if we can
be T confident that it is free of faults. The trustability research has
both theoretical and practical aspects, and includes the development of a
trustability measurement support tool.
 |  |