Software Engineering for Computational Science and Engineering

Project Description

An important type of software that has received little attention from software engineering researchers is software developed for computational science and engineering (CS&E) applications. This software is vital for the study of many important topics from diverse application domains. A list of the Top 500 supercomputers, for which many CS&E applications are written, provides an example of the diversity of government, scientific, and commercial organizations that use CS&E and highlights its growing prevalence and impact on modern society. Some examples of the important topics addressed by CS&E include designing and maintaining nuclear weapons, defense against radiological attacks, crash simulation, and satellite data processing. Because many of these domains are complex and involve advanced scientific or engineering concepts, much of the CS&E software is written by domain experts rather than by software engineers. Another indication of the importance of CS&E is the High Productivity Computing Systems (HPCS) project (http://www.highproductivity.org), a large project sponsored by DARPA, NSF and other agencies. The overall goal of the HPCS project is to develop the next generation of viable supercomputers and ensure their programmability to maintain the competitiveness of the United States.

This work began as part of the High Productivity Computing Systems project sponsored by DARPA and other agencies. The main focus of my portion of the work has been to conduct case studies of large scale scientific and engineering codes (typically using high performance supercomputers). These codes often take 10 to 20 years to develop and then are used for another 10 to 20 years. The issues encountered during this type of development are different than those encountered in more traditional software development.

As another indication of the growing importance of better integration of software engineering into CS&E, three workshops have been held on this topic. I was the organizer of the Third Workshop on Software Engineering for High Performance Computing Applications (SE-HPC) held at ICSE07. This workshop provided an opportunity for software engineering researchers to interact with researchers and practitioners from the CS&E application community. A significant portion of the workshop was devoted to discussion of position papers with the goal of generating a research agenda to improve the tools, techniques and experimental methods for CS&E software development. An important aspect of the research agenda was that CS&E researchers and developers need techniques that are tailored to the specific needs of their environment. Therefore, it is important for software engineering researchers to spend time understanding their environment.

Research Findings

My colleagues and I recently conducted case studies of five CS&E projects with the goal of understanding the software development process. The results of these case studies produced two important insights into CS&E software development that require further research. The first insight is the identification of important characteristics of the CS&E environment that affect the types of software engineering processes and techniques that are useful. One characteristic is the way that the requirements gathering and discovery process must be conducted. Often, because researchers are writing CS&E software to support new scientific investigations, detailed requirements cannot be known in advance. While the underlying laws of nature are fixed requirements, their specific application to the problem being studied is unknown. Another important characteristic is that the main driver for CS&E projects is the investigation of science or engineering, not necessarily the use of sound software engineering principles. The main reasons for the lack of focus on software engineering is that projects are staffed largely by scientists or engineers who lack formal software engineering training and project sponsors provide little funding to support traditional software engineering processes. The last characteristic is that the developers tend to avoid the use of process, partially as a result of the lack of formal software engineering training. In addition, long project lifecycles, prompting multiple requirement changes, cause developers to avoid any processes they view as too rigid or restrictive.

The second insight is the documentation of eight important lessons learned that lay the foundation for much of the future work in this area. These lessons learned are:
  1. Verification and validation are very difficult on CS&E projects;
  2. Higher-level development languages are rarely used, and once chosen, do not vary over time;
  3. Developers prefer the flexibility of the UNIX command line over a graphical IDE;
  4. Externally developed software is viewed as a risk;
  5. Execution performance (speed) is not always the most important goal;
  6. Agile methods are more accepted (and a better fit) than traditional methodologies;
  7. Multi-disciplinary teams are important to project success; and
  8. Success or failure depends on keeping customers (and sponsors) satisfied.

Publications supported by this project

(Note: Blue = Journal; Red = Refereed Conference; Green = Workshop/Tech Report)

Collaborators

Funding

This work has been funded by as part of the DARPA High Productivity Computing Systems (HPCS) grant and NSF..

Projects Front Page    |     Homepage    |     List of Publications


Last Updated on December 13, 2012 by Jeffrey Carver