Software Engineering for Science provides an in-depth collection of peer-reviewed chapters that describe experiences with applying software engineering practices to the development of scientific software. It provides a better understanding of how software engineering is and should be practiced, and which software engineering practices are effective for scientific software.

The book starts with a detailed overview of the Scientific Software Lifecycle, and a general overview of the scientific software development process. It highlights key issues commonly arising during scientific software development, as well as solutions to these problems.

The second part of the book provides examples of the use of testing in scientific software development, including key issues and challenges. The chapters then describe solutions and case studies aimed at applying testing to scientific software development efforts.

The final part of the book provides examples of applying software engineering techniques to scientific software, including not only computational modeling, but also software for data management and analysis. The authors describe their experiences and lessons learned from developing complex scientific software in different domains.

About the Editors

Jeffrey Carver is an Associate Professor in the Department of Computer Science at the University of Alabama. He is one of the primary organizers of the workshop series on Software Engineering for Science (https://www.SE4Science.org/workshops).

Neil P. Chue Hong is Director of the Software Sustainability Institute at the University of Edinburgh. His research interests include barriers and incentives in research software ecosystems and the role of software as a research object.

George K. Thiruvathukal is Professor of Computer Science at Loyola University Chicago and Visiting Faculty at Argonne National Laboratory. His current research is focused on software metrics in open source mathematical and scientific software.

chapter 1|26 pages

Software Process for Multiphysics Multicomponent Codes

ByAnshu Dubey, Katie Antypas, Ethan Coon, Katherine Riley

chapter 2|26 pages

A Rational Document Driven Design Process for Scientific Software

ByW. Spencer Smith

chapter 4|30 pages

Testing of Scientific Software: Impacts on Research Credibility, Development Productivity, Maturation, and Sustainability

ByRoscoe A. Bartlett, Anshu Dubey, Xiaoye Sherry Li, J. David Moulton, James M. Willenbring, Ulrike Meier Yang

chapter 5|16 pages

Preserving Reproducibility through Regression Testing

ByDaniel Hook

chapter 6|14 pages

Building a Function Testing Platform for Complex Scientific Code

ByDali Wang, Zhuo Yao, Frank Winkler

chapter 7|26 pages

Automated Metamorphic Testing of Scientific Software

ByUpulee Kanewala, Anders Lundgren, James M. Bieman

chapter 8|26 pages

Evaluating Hierarchical Domain-Specific Languages for Computational Science: Applying the Sprat Approach to a Marine Ecosystem Model

ByArne N. Johanson, Wilhelm Hasselbring, Andreas Oschlies, Boris Worm

chapter 9|16 pages

Providing Mixed-Language and Legacy Support in a Library: Experiences of Developing PETSc

BySatish Balay, Jed Brown, Matthew Knepley, Lois Curfman McInnes, Barry Smith

chapter 10|18 pages

HydroShare – A Case Study of the Application of Modern Software Engineering to a Large Distributed Federally-Funded Scientific Software Development Project

ByRay Idaszak, David G. Tarboton (Principal Investigator), Hong Yi, Laura Christopherson, Michael J. Stealey, Brian Miles, Pabitra Dash, Alva Couch, Calvin Spealman, Jeffery S. Horsburgh, and Daniel P. Ames