Software Engineering

Main page ||
Lecture ||
Exercises ||
Project
News
- Reminder: as advertised in the course catalog, the exam will take place on August 5th in room HG F1 from 9:00 to 12:00 (180 mn), withouth documentation.
- May 27: question and answer session scheduled on the 28th.
- May 27: updated slides.
- May 7: Next exercise session cancelled (May 8th, 9th and 12th).
- May 7: Updated slides.
- April 22: Updated lectures schedule, added guest lecture by Dr. Matthias Zenger.
- April 18: Updated the sample data to fix a (stupid) bug in valid_easy.gen. Please download the file again.
- April 16: Added sample data for Assignment 2.
- April 10: Posted clarificaitons to Assignment 2.
- April 9: To use CDD on the student network, please remove the environment variable ISE_EIFFEL. This is a temporary solution to a problem that should be fixed in a few days.
- April 9: Bring your laptop at the next exercise session.
- April 9: Deadline for assignment 2 is pushed to April 23rd.
- April 2: New version of CDD EiffelStudio (Final 6) available. Download from http://dev.eiffel.com/CddBranch.
- March 30: No excercise sessions on Monday, March 31st to stay synchronized with Thursday and Friday exercise sessions.
- March 20: Bugfix for Assignment 2: I class SIMPLE_PARSER, line 130 should compare the string to ????, not just ??. The source file in genealogy.zip has been updated. Thanks for the hint.
- March 19: Added link to CDD EiffelStudio.
- March 18: handed out assignment 2.
- March 7: added the cover sheet for assignment 1.
- March 5: handed out assignment 1.
- March 5: updated exercises page.
- February 27: added the IEEE 830 standard.
- February 26: updated exercise page with assistants, time slots and rooms. Updated literature.
- February 21: The address for the Software Engineering staff is up and running: softeng-assi@se.inf.ethz.ch.
- February 15: Page up and running.
Note to students
A key component of this course, as explained below, is the
project. Because of the time constraints imposed by the semester the
project will be handed out on the first lecture and will start in
the first week. As a result it will be difficult to join the course
later. Please make sure you attend from the beginning.
What this
course is about
Software engineering is the construction of production software
systems satisfying standards of quality.
Software engineering encompasses programming, but programming is
only a part of it. One may describe the discipline as consisting of
five main threads (D.I.A.M.O.):
- Describe: specify (systems, designs,
implementations...) and document.
- Implement: build the products; this includes design as
well as programming.
- Assess: verify, validate, analyze, test, measure (both
products and processes).
- Manage: organize the work, communicate, collaborate
- Operate: deploy systems and oversee their proper
functioning.
In a university environment it is common to practice the second of
these aspects, learn a bit of the third, and sometimes get a glimpse
of the first. But in industry all five are equally important. This
course covers all of them, with approximately equal weights.
An engineering discipline is defined in part by the tools of the
trade. Software engineering has developed particularly interesting
tools over the past decades; the course gives a central place to
presentations of state-of-the-art tools for such tasks as project
management, configuration management, static analysis, testing etc.
The course is built for a large part around a
project.
This is a challenging course in which you may expect to learn a lot,
both from the lectures and your own directed work on the project,
about what it takes to build real software that serves the needs of
real people.
Lecturer
Bertrand Meyer,
Manuel Oriol,
Bernd Schoeller
Assistants
- Hermann Lehner
- Roman Mitin
- Arsenii Rudich
- Joseph Ruskiewicz
- Wolfgang Schwedler
CDD EiffelStudio
For assignment 2 and 3 you will need to use CDD EiffelStudio.
Download it from http://dev.eiffel.com/CddBranch
and don't forget to submit your logs.
Type of course
3V2U (three weekly lecture hours, two weekly exercise hours)
Language
Lectures: English
Exercises: German and English
Compact Literature
- Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli:
Fundamentals of Software Engineering. Prentice Hall, 2002.
- Shari Lawrence Pfleeger and Joan M. Atlee: Software Engineering,
third edition. Prentice Hall, 2005.
- Ian Sommerville: Software Engineering. Addison Wesley, 2004.
Complete Literature
- General
- Craig Larman: Applying UML and Patterns, An Introduction to Object-Oriented Analysis and Design and Iterative Development Prentice Hall, 3rd Edition 2004
This book helps newcomers to OOA/D to "think in objects", introducing the most frequently used UML diagramming notation, while emphasizing that OOA/D is much more than knowing UML notation and the Java language. It incrementally introduces the requirements and OOA/D activities, principles, and patterns that are most critical to success through two very complete case studies. (MPIC)
- Watts S. Humphrey: A Self-Improvement Process for Software Engineers
Addison-Wesley Professional, 2005
- Watts S. Humphrey: TSP(SM)-Leading a Development Team
Addison-Wesley Professional, 2005
- Watts S. Humphrey: A Discipline for Software Engineering
Addison-Wesley Professional, 1994
- Alain Abran, James W. Moore (Eds.): Guide to the Software Engineering
Body of Knowledge (SWEBOK). IEEE Computer Society, 2004.
- Boehm et.al.: Software Cost Estimation with COCOMO II. Prentice
Hall, 2000.
- William J. Brown, Raphael C. Malveau, Hays W. McCormick III,
Thomas J. Mowbray:
Anti Patterns: Refactoring Software, Architectures and Projects in
Crisis. Wiley Computer Publishing, 1998.
- Martin Fowler: Refactoring: Improving the Design of Existing Code.
Addison Wesley, 1999.
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides:
Design Patterns. Addison-Wesley, 1995.
- Steve McConnell: Code Complete. Microsoft Press, 2004.
- John D. Musa: Software Reliability Engineering: More Reliable
Software Faster and Cheaper. AuthorHouse, 2004.
- Mary Shaw, David Garlan: Software Architecture. Prentice Hall, 1996.
- Joel Spolsky: Joel on Software. Apress, 2004.
- Clemens Szyperski: Component Software. Addison-Wesley, 1997.
- Requirements
- Karl E. Wiegers: Software Requirements, Second Edition
Microsoft Press, 2003
- O-O software engineering
- Bernd Bruegge, Allen H. Dutoit: Object-Oriented Software Engineering.
Prentice Hall, 2004.
- Bertrand Meyer: Object-Oriented Software Construction. Prentice Hall,
1997.
- Agile methods
- Kent Beck: Extreme Programming Explained: Embrace Change. Addison-Wesley, 1999
An overview of XP by one of the movement's founder.
A bit too much a manifesto (this is not the place
for critical, balanced assessments), but provides
a good insight into the founding principles of
the approach. (BM)
- Craig Larman: Balancing Agility and Discipline. Addison-Wesley, 1993
A concrete presentation of the most important
agile practices. (BM)
- Matt Stephens and Doug Rosenberg: Extreme Programming Refactored: The Case Against XP. APress, 2003.
A pamphlet against the XP and what the authors see
as the substitution of hype for successful practices.
Funny at times, as extreme as its target at the risk
of not being taken seriously, but provides a sound
antidote for anyone overdosing in XP or just XP
literature. (BM)
- Pete McBreen: Questioning Extreme Programming. Addison-Wesley, 2002.
Much more respectful than Stephens-Rosenberg, and prefaced
by Kent Beck; provides a critical analysis of XP. (BM)
- Craig Larman: Agile & Iterative Development, a Manager's Guide Addison-Wesley, 2004
A concise, information-packed summary of the key ideas that drive all agile and iterative processes, with the details of four noteworthy
methods: Scrum, XP, Rup and Evo. Explicitly targeted to managers and students. Uses statistically significant research and large-scale case studies. (MPIC)
- Robert Cecil Martin: Agile Software Development, Principles, Patterns, and Practices Prentice Hall, 2003
This book is crammed with sensible advice for software development.
Weaves agile methods, design patterns and the fundamentals of modern software development in a coherent whole.
Contains three case studies with useful C++ and Java code. (MPIC)
- UML
- Martin Fowler: UML Distilled: A Brief Guide to the Standard Object
Modeling Language. Addison-Wesley, 2004.
- Perdita Stevens, Rob Pooley: Using UML: Software Engineering with
Objects and Components. Addison-Wesley, 2000.
- Testing
- Robert V. Binder: Testing Object-Oriented Systems: Models, Patterns, and Tools,
Addison-Wesley, 1999
- Glenford J. Myers: The Art of Software Testing, Wiley, 1979
- Correctness
- Java Modeling Language
- G. T. Leavens and A. L. Baker. JML: A Notation for Detailed Design
- Main website of JML
- ESC/Java and ESC/Java2
- C. Flanagan, K.R.M.Leino, and M. Lillibridge. Extended Static Checking for Java
- Main website of ESC/Java2
- Spec#
- Barnett et al.: Verification of object-oriented programs with invariants
- Barnett et al.: Boogie: A Modular Reusable Verifier for Object-Oriented Programs
- M. Fähndrich and K. R. M. Leino: Declaring and checking non-null types in an object-oriented language
- Main website of Spec#
- Rustan Leino's lectures
|