Books and Readings
There is one required text:
- Hans van Vliet, (2000) Software Engineering: Principles and Practice,
2nd edition, John Wiley & Sons, .
Note that this book is new this year. In previous years, we used Blum's book,
“Software Engineering: A Holistic View”. Blum's book is now getting a little
dated, and students regularly complained that they didn't like it. If you happen
to pick up a used copy of Blum, feel free to use it, but be aware that it doesn't
(adequately) cover some important topics (e.g. Software Architectures, Process
Modeling, and Formal Methods)
Other recommended texts:
- Babara Liskov and John Guttag, “Program Development in Java: Abstraction,
Specification and Object Oriented Design. Addison Wesley. Note: Although
this book is geared towards Java, it is the best book on program design ever.
Some of the material for the course was adapted from this book.
- Mary Shaw and David Garlan, “Software Architectures: Perspectives on an
Emerging Discipline”. Prentice Hall. The first ever book on software architectures.
Although a little dated now, it makes excellent reading.
You should also read some of the newsgroup comp.risks
In previous years, we provided a collected readings for CSC444F. This was used
mainly to supplement Blum's book, but also to provide immediate access to some
of the classic papers in software engineering. However, van Vliet surveys much
of this material, and you probably have enough to read already. However, if
you're really energetic, you can probably obtain a copy of this collection from
previous year's students, of find the original papers on the web. The collection
contained the following papers:
- Brooks, Fred. “No Silver Bullet”. IEEE Computer 20(4), April 1987.
- Wasserman, Anthony “Toward a Discipline of Software Engineering”. IEEE
Software 13(6), November 1996.
- Lehman, Meir M. “Programs, Life Cycles and the Laws of Software Evolution”.
Proceedings of the IEEE, 68(9) September 1990.
- Humphrey, Watts “A Software Maturity Framework”. Chapter 1 of "Managing
the Software Process". Addison-Wesley, 1989.
- Fichman, Robert G. & Kemerer, Chris F. “Object Oriented and Conventional
Analysis and Design Methodologies: Comparison and Critique”. IEEE Computer
25(10), October 1992.
- Parnas, David “On the Criteria to be used in Decomposing Systems Into Modules”.
Communications of the ACM 15(12), December 1972.
- Lampson, Butler “Hints for Computer System Design” IEEE Software, 1(1),
- Shaw, Mary & Garlan, David. “Architectural Styles”. Chapter 2 of “Software
Architecture: Perspectives on an Emerging Discipline”. Prentice Hall, 1996.
- Wing, Jeanette M. “A Specifier’s Introduction to Formal Methods”. IEEE
Computer 23(9), September 1990.
- Ackerman, A. Frank “Software Inspections and the Cost Effective Production
of Reliable Software”. In Merlin Dorfman and Richard Thayer (eds.) “Software
Engineering” IEEE Computer Society Press, 1997.
- Liskov, Barbara & Guttag, J. “Testing and Debugging”. Chapter 9 of
“Abstraction and Specification in Program Development”. MIT Press, 1986.
- Leveson, Nancy “Computers and Risk”. Chapter 2 of “Safeware: System Safety
and Computers”, Addison-Wesley, 1995.
General Software Engineering Texts
van Vliet's book is the best general software engineering text I have seen, and
Pfleeger is the second best. Two other commonly used textbooks are listed here.
I find these all too shallow for my liking, but others may find them useful.
There is also an IEEE collection of readings. However, it is expensive, and the
quality of the papers included is variable. The collection of papers I put together
for previous years of this course is much more useful(!):
- Shari Pfleeger, “Software Engineering: Theory and Practice”. Prentice Hall.
- Roger Pressman, (1987) Software Engineering: A Practitioner's Approach (3rd
- Ian Sommerville (1995) Software Engineering (5th Edition). Addison Wesley.
- Merlin Dorfman and Richard Thayer (eds.) “Software Engineering” IEEE Computer
Society Press, 1997.
These two are wonderful books on how to program properly. L & G covers the
theoretical issues more comprehensively. B & L has more detailed case study
One other useful book if you feel you are weak on programming is:
- Babara Liskov and John Guttag, (2000) “Program Development in Java: Abstraction,
Specification and Object Oriented Design. Addison Wesley
- Berzins, V. and Luqi (1991) Software Engineering with Abstractions. Addison
You'll also (probably) need a reference book for the programming language you
are using, but I assume you still have one around from when you first learnt to
- Bornat, R. (1987) Programming from First Principles. Prentice Hall.
Software Verification and Validation
See also the testing handout produced by Prof. Horton: postscript,
- Boris Beizer, Software Testing Techniques, Van Nostrand Reinhold, 1990.
- William C. Hetzel, The Complete Guide to Software Testing, Second edition,
QED Information Services INC, 1988.
- Bryan, W. L. and Siegal, S. G. (1988) Software Product Assurance: Techniques
for Reducing Software Risk. Elsevier.
- Schulmeyer G. C. and McManus, J. I. (1992) Handbook of Software Quality
Assurance (Second Edition). Van Nostrand Reinhold.
- Freedman, D. P. and Weinberg, G. M. (1990) Handbook of Walkthroughs, Inspections
and Technical Reviews: Evaluating Programs, Projects and Products. Dorset
Software Requirements Engineering
The first three are textbooks, offering the best coverage of the field. The other
two are more general reading, but very worthwhile to get a feel for why requirements
engineering is considered the hardest part of software engineering. All these
books are worth dipping into.
- Davis, A. M. “Software Requirements: analysis and specification”. Prentice
- Roberston, S. and Robertson J. “Mastering the Requirements Process”. Addison-Wesley,
- Graham, I. “Requirements Engineering and Rapid Development:
A Rigorous, Object-Oriented Approach”. Addison-Wesley, 1998.
- Gause, D. C. and Weinberg, G. M. “Exploring Requirements: quality before
design”. Dorset House, 1989.
- Jackson, M. “Software Requirements and Specifications: A Lexicon of Practice,
Principles and Prejudices”, Addison-Wesley, 1995.
Budgen is an excellent introduction to the general problems of software design,
including design representations, design quality, and so on. Shaw and Garlan's
book was the first book to describe the emerging field of software architectural
design. I've included chapter 2 of this in the collected reading for the course.
- Budgen, D. (1994) Software Design. Addison-Wesley.
- Shaw, M. & Garlan, D. “Software Architecture: Perspectives on an Emerging
Discipline”. Prentice Hall, 1996.
If you need to brush up on your logic, and also get to grips with how it is used
in software verification, there is no book better than:
Another good introduction is:
- Huth, M. and Ryan, M. "Logic in Computer Science: Modelling and Reasoning
about Systems". Cambridge University Press. 1999.
- Heitmeyer, C. and Mandrioli, D. “Formal Methods for Real-time Computing”
Managing the Software Process
These are all good background texts for understanding the broader picture.
- Glass, R. L. (1988) Software Communication Skills. Prentice Hall.
- Frederick P. Brooks, Jr., (1978) The Mythical Man-Month. Addison Wesley.
- W. S. Humphrey, (1989) Managing the Software Process. Addison-Wesley.
- W. E. Deming, (1982) Out of the Crisis. MIT Press.
- Lee. L. (1992) The Day the Phones Stopped: how people get hurt when computers
go wrong. Primus.
There is also a large collection of suggested reading material collected from
the newsgroup comp.software-eng at http://www.qucis.queensu.ca/Software-Engineering/reading.html