A white paper on directions I think software engineering research needs to take can be found here .

The following topics are currently being pursued. Research opportunities exist at the undergrad (UROP), masters's, and doctoral level. There is also a list of specific topics .

Modeling and Analysis

Models provide a means of understanding complex phenomena and systems and recording that understanding in a way that can be communicated to others. We are working on two very different types of models:

Model-Based System Engineering:

PROBLEM: Many of the systems we are building today are too complex to simply prototype and get errors out. Models can be used to enhance the intellectual manageability of complex systems and ensure important properties early in the design process.

RESEARCH: Design appropriate models and analysis methods to allow system execution, animation (visualization), and analysis early in the system engineering process when alternative designs are validated and subjected to design trade analysis. The models and analysis techniques must include analog (continuous), digital (discrete), and human components.

Accident modeling:

PROBLEM: Accident models are used (1) to understand past accidents and incidents and (2) to prevent future ones. Most classic models focus on chains of events and conditions, thus not handling well many of the most important factors in today's complex systems such as software error, human error, and organizational factors.

RESEARCH: Devise and validate new accident models that are more appropriate for today's complex and heterogenerous systems.

Software and System Safety

PROBLEM: Traditional system safety engineering techniques must be extended to handle the new types of accident causes and failure modes that arise with digital system components and the more cognitively complex roles human operators are assuming in high-tech systems.

RESEARCH: (1) Create a methodology for building safety-critical systems that include software components (particularly controllers). (2) Determine how to use metrics to provide operational feedback in critical systems.

Software Requirements

PROBLEM: Most errors in operational software (and most accidents) can be traced to errors in requirements. But most software engineering methods focus on software design and coding and few techniques exist for validating requirements. In addition, changes in requirements during development have been found to be a particular problem in terms of schedule, budget, and quality.

RESEARCH: (1) Devise modeling and analysis methods for blackbox software requirements that assist in finding errors early and in validating requirements specifications. (2) Define new types of specification (and design) coupling and traceability to reduce the impact of requirements changes. (3) Determine how specification language design and analysis tools can be used to improve specification completeness with respect to common omissions and flaws often associated with serious accidents and losses.

Human-Computer Interaction

PROBLEM: Control in high-tech systems is often shared between the computer and humans or the humans simply monitor and control the computer (rather than the process or plant itself). Recent accidents in commercial aircraft and other complex systems have resulted from difficulties in integrating computer and human control.

RESEARCH: (1) Determine how to use system and software models and specifications, analysis techniques, and the results of hazard analysis to design and verify interfaces, procedures, and training programs. (2) Identify software features with the potential to induce human error and devise analysis methods to analyze software for these "predictable error forms."

Software Assurance

PROBLEM: Software is increasingly being used to handle critical system functions previously controlled by humans or by simple and easily proven hardware. It is extremely difficult, costly and time-consuming to provide high assurance of software correctness and safety.

RESEARCH: (1) Determine how to generate test cases and define coverage criteria for blackbox functional requirements specifications. (2) Define algorithms to generate provably correct code from blackbox requirements models. (3) Evaluate the effectiveness of IV&V and determine how it can be accomplished in the most cost-effective manner.

Software Evolution

PROBLEM: Software is not static once it is put into use but requires changes throughout its lifetime. Changing or upgrading software, however, is extremely costly, time consuming, and error-prone. The problems are most extreme for critical software that needs to be revalidated each time it is changed.

RESEARCH TOPICS: (1) Specification methods to assist in changing software and minimizing the cost of revalidation. (2) Evaluation of the U.S. Air Force Operational Flight program to find ways to reduce cycle time.

Other miscellaneous topics currently being supported

Critical Information Survivability (DARPA)

The Role of Human Error in Security (NSF)