ABSTRACT

Test Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

6.1 Introduction Complex scientific code is defined as complicated software systems that

have been adopted by specific communities to address scientific questions. Many scientific codes were originally designed and developed by domain scientists without first implementing basic principles of good software engineer-

ing practices. Software complexity has become a barrier that impedes further code development of these scientific codes, including adding new features into the code, validating the knowledge incorporated in the code, and repurposing the code for new and emerging scientific questions. In this chapter, we describe innovative methods to: (1) better understand existing scientific code, (2) modularize complex code, and (3) generate functional testing for key software modules. In the end, we will present our software engineering practices within the Accelerated Climate Modeling for Energy (ACME) and Interoperable Design of Extreme-scale Application Software (IDEAS) projects. We believe our methods can benefit the broad scientific communities that are facing the challenges of complex code.