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