Software Engineering Principles.  Sean Macken, Craig Davies, Scott Thompson