University of Toronto, Department of Computer Science

CSC444 Software Engineering I   Fall 2002

 

books and readings

last updated: Sept 9, 2002

 

There is one required text:

 

Hans van Vliet, ÒSoftware Engineering: Principles and PracticeÓ, 2nd edition, John Wiley & Sons, 2000.

 

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.

á       Bruce Blum, ÒSoftware Engineering: A Holistic ViewÓ, Oxford Press. 1992. This was the text used in previous years for this course.

 

Also, you should also read some of the newsgroup comp.risks

 

In previous years, collected readings were provided for CSC444F. This was used mainly to supplement the previous text, 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, or 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), January 1984.

á       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.

 

 

Background Reading:

 

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. These cover some subject material somewhat lightly.

 

á       Shari Pfleeger, ÒSoftware Engineering: Theory and PracticeÓ. Prentice Hall.

á       Roger Pressman, (1987) Software Engineering: A Practitioner's Approach (3rd Edition). McGraw-Hill.

á       Ian Sommerville (1995) Software Engineering (5th Edition). Addison Wesley.

á       Merlin Dorfman and Richard Thayer (eds.) ÒSoftware EngineeringÓ IEEE Computer Society Press, 1997.

 

Program Design

 

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 material:

 

á       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 Wesley.

 

One other useful book if you feel you are weak on programming is:

 

á       Bornat, R. (1987) Programming from First Principles. Prentice Hall.

 

You'll also (probably) need a reference book for the programming language you are using, but you may still have one around from when you first learnt to program.

 

Software Verification and Validation

 

á       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 House Publishing.

 

Software Requirements Engineering

 

á       Davis, A. M. ÒSoftware Requirements: analysis and specificationÓ. Prentice Hall, 1990.

á       Roberston, S. and Robertson J. ÒMastering the Requirements ProcessÓ. Addison-Wesley, 1999

á       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.

 

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.

 

Software Design

 

á       Budgen, D. (1994) Software Design. Addison-Wesley.

á       Shaw, M. & Garlan, D. ÒSoftware Architecture: Perspectives on an Emerging DisciplineÓ. Prentice Hall, 1996.

 

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.

 

Formal Methods

 

If you need to brush up on your logic, and also come to grips with how it is used in software verification, there is no book better than:

 

á       Huth, M. and Ryan, M. "Logic in Computer Science: Modelling and Reasoning about Systems". Cambridge University Press. 1999.

 

Another good introduction is:

 

á       Heitmeyer, C. and Mandrioli, D. ÒFormal Methods for Real-time ComputingÓ Wiley, 1996.

 

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.

 

 

See Also...

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