The Development and Use of Scientific Software
Scientific software, by which we mean application software that has a large computational component, models physical phenomena and provides data for decision support. This can be software that calculates loads on bridges, provides predictions for weather systems, images bone structures for surgical procedures, models subsystems at nuclear generating stations, or processes images from ground-based telescopes. There is no consensus on what the best practices for the development of scientific software are. We carried out a study at two Canadian universities in which we interviewed scientists and engineers who develop or use scientific software to identify characteristics of current development and usage. Through qualitative analysis, I identified key characteristics of scientific software development and usage and observed correlations between these characteristics. The results are a collection of observations about how scientific software is documented and designed; the nature of the scientific software lifecycle; the selection of development languages; approaches to testing, especially validation testing; and sources of risk. I also examine concerns scientists have with commercial software they use to determine what quality factors are of interest to them and also which seem to require special trade-offs. I find that scientific software development and use differs fundamentally from development in most other domains.