Q:

Citable references for software best practices

I'm currently writing up my PhD thesis. I spent a significant fraction of my PhD cleaning up and extending existing scientific code, applying software engineering best practices which were previously not used, and would like to write about this in my thesis. Rather than simply saying "I added unit tests", I want to be able to write something like this:

J. Doe invented unit tests in 1975$^{[23]}$.
  A recent study by Bloggs et al$^{[24]}$ showed that unit tests reduce the incidence of software errors by 73%...
  234 separate unit tests were added to the code base, managed by the xUnit framework created by Timpkins et al$^{[25]}$ 

I'm looking for citable academic references (preferably articles in peer-reviewed journals where I can get DOIs, BibTeX etc) to widely accepted software engineering best practices, specifically:

unit tests
version control
modularisation / separation of concerns
performance profiling / optimisation based on profiling information
bug/issue tracking

I'm looking for information both about the initial invention and on subsequent evaluations of effectiveness. If there's a review article that lists all of this stuff in one place then so much the better.

A:

Steve McConnell's book Code Complete, 2nd edition has an extensive bibliography discussing these issues from more of the standpoint of software developers than computational scientists. The book is starting to become a little dated, in that it's approaching a decade old, so it doesn't cover more recent testing methodologies like behavior-driven development. Nevertheless, it is the closest thing to a comprehensive review article on software construction that I am aware of. You could also look for articles in IEEE Software.
On the computational science side of things, I think the best article is probably the PLoS version of the arXiv preprint DavidKetcheson cited on "Best Practices for Scientific Computing". I say this coming from an engineering background, where fewer people cite arXiv references or post arXiv preprints, and thus, citing a "real journal article" (setting aside, of course, all of the issues about scientific publishing that are being debated right now) is looked upon more favorably (and I get the impression that is why those authors chose to publish it in a journal).
The authors of the PLoS paper that DavidKetcheson and I cited are part of an organization called Software Carpentry that puts on (usually 2 day) "boot camps" to teach scientists about some best practices for software development and useful computational skills for scientists (not just computational scientists). The Software Carpentry web site has an extensive bibliography related to software development in science. If you're interested in these issues, I encourage you to reach out to them; they're always looking for more advocates of best practices in software development to do volunteering in various capacities. (Disclaimer: I volunteer with Software Carpentry.)
Another common justification for engaging in software development best practices is reproducibility. Victoria Stodden has curated a long list of reproducible research references that may be of interest, depending on what you want to say.

A:

I don't have references for the origin of each of these ideas/practices.  But here are some very recent, relevant references:

What makes computational open source software
libraries successful?
Best Practices for Scientific Computing

