Practical Software Engineering Strategies for Scientific Computing
Christopher J. Roy · 19th AIAA Computational Fluid Dynamics · 2009
Software engineering is a formal set of tools and procedures for the efficient development of reliable software. Scientific computing software differs from other types of software because the “correct ” outputs for a given set of software inputs are generally not known. Since scientific computing relies on approximate numerical solutions to partial differential or integral equations, the answers produced by the software will depend on the mesh employed, the time step chosen, the iterative convergence tolerance used, the number of significant figures used in the floating point computations, etc. The goal of this paper is to provide a broad overview of modern software engineering practices, with a focus on tools and methods that are particularly relevant to scientific computing. Specific topics that are emphasized include software development models, choice of programming language, version control systems, static analysis tools, dynamic testing procedures, and the quantitative assessment of software quality and reliability. I.