Shoot the programmer
June 13, 2012 —
(Page 1 of 2)
Related Search Term(s): testing
A friend of mine, who is an experienced venture capitalist in the tech sector, once stunned me by claiming, “You need two people to write great code. One to program, and one to shoot the programmer when he thinks that he is done.”
At the time, this seemed to be a little extreme... but...
Today’s software, particularly business software, is fundamentally complex. Enterprises have wide-ranging requirements, demand many different features, and require constantly evolving functionality. On top of this, businesses need their systems to be flexible, and to provide their users with a host of options.
Hasso Plattner, the former CEO of SAP, once responded to the question posed by one of his clients, “Why is your software so complex?” with the remark, “If you were prepared to make your business less complex, then I could make my software simpler.”
It is challenging to construct software that supports all the features desired by businesses, spanning multiple functions, industries and geographies, in one product. When you add in the need to refine and refactor code, as well as to keep up with changing regulations, technology and trends, it is sometimes surprising that any usable business software ever gets shipped. Hence the sentiment behind my friend’s observation: The job of a programmer is never-ending, and to ship a product, there needs to be some external mandate.
Of course, it is one thing to finish development, but it is quite another to release finished software. There is not a developer alive who writes flawless code, so the completed code needs to be tested, which prompts the question: Just how much testing is needed? When I was once a pup programmer working for a U.K. defense contractor, the government auditors would check our code by counting up the number of conditions (i.e., the “if” statements), and check that at least one formal test condition existed for each one.
Today, at iBE.net, with our codebase extending toward 1,000,000 lines of code, applying such a rigid test methodology is both impractical and inconsistent with agile. Just within our mobile app (50,000 lines of code), there are some 3,500 conditions (“if” or “case” statements). Assuming a rate of 1 test per second, it would take 23,500 seconds to exhaustively test all conditions just within our mobile app. To test all the code, with all its combinations and permutations, would take a longer time than the universe has currently been in existence (which, incidentally, is estimated to be approximately 4 x 10^17 seconds).