Software Quality for Scientific Codes
Practices that keep a research code correct and maintainable over years: version control, review, testing, and documentation.
Beyond Getting an Answer
Scientific software is often written to answer a question, then reused for a decade by people who did not write it. Software quality is the set of practices that keep such a code correct, understandable, and safe to change over that lifetime. Neglecting it produces codes that work by accident, break silently, and cannot be trusted for decisions.
Core Practices
- Version control, so every result traces to an exact code state.
- Code review, so a second person checks changes before they land.
- Automated testing, so regressions are caught immediately.
- Documentation, so the code's assumptions and use are recoverable.
- Modular structure, so components can be tested and reasoned about in isolation.
The Special Burden of Science
Scientific code carries a burden ordinary software does not: the correctness criterion is often a physics result no one can independently check by inspection. A web form either submits or it does not; a transport solver can produce a plausible but wrong number that looks fine. This is why verification testing, not just functional testing, is essential, and why software quality and verification are intertwined for scientific codes.
Sustainable Development
Quality practices also protect against the loss of knowledge as people leave. A code that only its original author understands is a liability; one with tests, documentation, and a clean structure can be maintained by successors. Continuous integration enforces the practices automatically, so quality does not depend on everyone remembering to run the tests.
None of this replaces verification and validation; it enables them. A well-structured, version-controlled, tested code is one where a manufactured-solution test can be added, a regression can be caught, and a result can be reproduced. Software quality is the substrate on which credible scientific computing is built.