From 2 November 2020, the autumn semester 2020 will take place online. Exceptions: Courses that can only be carried out with on-site presence. Please note the information provided by the lecturers via e-mail.

Bertrand Meyer: Catalogue data in Autumn Semester 2015

Name Prof. Dr. Bertrand Meyer
FieldSoftware Engineering
Address
Dep. Informatik
ETH Zürich, CAB E 88
Universitätstrasse 6
8092 Zürich
SWITZERLAND
E-mailbertrand.meyer@inf.ethz.ch
URLhttp://se.ethz.ch/~meyer
DepartmentComputer Science
RelationshipProfessor Emeritus

NumberTitleECTSHoursLecturers
252-0021-00LIntroduction to Programming Information 7 credits4V + 2UB. Meyer
AbstractIntroduction to fundamental concepts of modern programming and operational skills for developing high-quality programs, including large programs as in industry. The course introduces software engineering principles with an object-oriented approach based on Design by Contract as present in Eiffel. For the second time we offer a supporting MOOC (online) version with more exercises and a hint system.
ObjectiveMany people can write programs. The "Introduction to Programming" course goes beyond that basic goal: it teaches the fundamental concepts and skills necessary to perform programming at a professional level. As a result of successfully completing the course, students master the fundamental control structures, data structures, reasoning patterns and programming language mechanisms characterizing modern programming, as well as the fundamental rules of producing high-quality software. They have the necessary programming background for later courses introducing programming skills in specialized application areas.
ContentBasics of object-oriented programming. Objects and classes. Pre- and postconditions, class invariants, Design by Contract. Fundamental control structures. Assignment and References. Basic hardware concepts. Fundamental data structures and algorithms. Recursion. Inheritance and deferred classes, introduction into event-driven design and concurrent programming. Basic concepts of Software Engineering such as the software process, specification and documentation, reuse and quality assurance.
Lecture notesTextbook: "Touch of Class" (see under "Literatur")
The lecture slides are available for download on the course page.
LiteratureBertrand Meyer: Touch of Class: Learning to Program Well Using Objects and Contracts, Springer Verlag, 2009; new printing, 2012. This is the official textbook for the course. See http://www.polybuchhandlung.ch/100/con_liste.asp
Prerequisites / NoticeThe course uses an "Outside-In" approach enabling students, right from the beginning, to use an advanced graphical library and produce significant applications. Students then learn step by step how the library is built, as a source of imitation and inspiration.

The course covers not only basic concepts of programming but also some advanced topics seldom encountered in introductory courses, such as recursion, undecidability, event-driven programming, multiple inheritance and others.
252-0239-00LSoftware Verification6 credits3V + 2UB. Meyer, C. A. Furia, S. Nanz
AbstractThis course surveys some of the main approaches to software verification, including axiomatic semantics, abstract interpretation, model checking, and testing.
ObjectiveAfter successfully taking this course, students will have a theoretical and practical understanding of:
* The principles behind fundamental software verification techniques, including Hoare-style axiomatic semantics, abstract interpretation, model checking, and testing.
* Application of the principles to the construction of verification tools, in particular program provers.
* Research challenges in these areas.
ContentThe idea of software verification has been around for decades, but only recently have the techniques become mature enough to be implemented and be applicable in practice. Progress has been made possible by the convergence of different techniques, originally developed in isolation.

This course embraces this diversity of approaches, by surveying some of the main ideas, techniques, and results in software verification. These include in particular:


* Axiomatic semantics, which provides a foundation of program correctness proofs by supplying a rigorous semantics of programs.
* Abstract interpretation, which provides a general framework to express and design static techniques for program analysis.
* Model checking, which provides efficient techniques for the exhaustive exploration of state-based models of programs and reactive systems.
* Testing, which provides the counterpart to exhaustive techniques by defining dynamic analyses to detect programming mistakes and correct them.

To demonstrate some of the techniques in practice, the course will offer a practical project requiring the application of verification tools to illustrative examples.
LiteratureAxiomatic semantics:

* Michael Huth and Mark Ryan. Logic in Computer Science: Modelling and Reasoning about Systems, second edition. Cambridge University Press, 2004
* Aaron Bradley and Zohar Manna. The Calculus of Computation. Springer, 2007.
* David Gries. The Science of Programming. Springer, 1981.
* Bertrand Meyer. Introduction to the Theory of Programming Languages. Prentice Hall, 1990.
* Flemming Nielson and Hanne Riis Nielson. Semantics with Applications: An Appetizer. Springer, 2007.
* Krzysztof R. Apt, Frank S. de Boer, Ernst-Rüdiger Olderog. Verification of Sequential and Concurrent Programs. Springer, 2009.


Abstract interpretation:

* Flemming Nielson, Hanne Riis Nielson, Chris Hankin: Principles of Program Analysis, Springer, ISBN 3-540-65410-0.
* Neil D. Jones, Flemming Nielson: Abstract Interpretation: a Semantic-Based Tool for Program Analysis


Model checking and real-time:

* Edmund M. Clarke, Orna Grumberg, and Doron A. Peled. Model Checking. MIT Press, 2000.
* Carlo A. Furia, Dino Mandrioli, Angelo Morzenti, and Matteo Rossi. Modeling Time in Computing. Monographs in Theoretical Computer Science. An EATCS series. Springer, 2012.


Testing:

* Mauro Pezzè and Michal Young: Software Testing and Analysis: Process, Principles and Techniques, Wiley, 2007.
* Paul Ammann and Jeff Offutt: Introduction to Software Testing, Cambridge University Press, 2008.
252-0273-01LDistributed Software Engineering Laboratory Information
In the Master Programme max. 10 credits can be accounted by Labs
on top of the Interfocus Courses. Additional Labs will be listed on the Addendum.
8 credits2V + 2U + 3AB. Meyer, P. Kolb, D. M. Nordio
AbstractThe Distributed Software Engineering Laboratory introduces the software engineering principles and techniques appropriate for the increasingly prevalent style of modern software development, involving teams spread across teams, companies and countries.

The course involves a distributed project conducted in cooperation with student teams from other universities.
ObjectiveModern software development is increasingly *distributed*: projects are developed by different groups collaborating across teams, companies, countries, timezones. This setup radically alters the assumptions underlying many of the traditional views of software engineering.

The Distributed Software Engineering Laboratory introduces the principles and techniques for this new paradigm. In line with the "distributed" nature of the topic, the project is performed in collaboration with student teams from other universities in various countries.This course provides students with a clear view of distributed software development, enabling them to participate successfully in distributed projects, and also helping them to devise their own career strategies in the context of the continued trend towards outsourcing.
ContentBasics of distributed development

The outsourcing phenomenon; country review.

Requirements engineering for distributed projects

Quality assurance for distributed projects.

Process models (especially CMMI) and agile methods

Supplier assessment and qualification.

Negotiating a contract for a distributed project.

Software project management for distributed projects.

Role of interfaces and other technical issues of distributed development.


A key part of the Laboratory is the course project, performed in groups involving teams from other universities. Students get to practice distributed developmemt directly, experiencing issues and applying techniques presented in the course.

The exercise sessions usually start at 9am.
Lecture notesThe course page includes the full set of slides and links to supplementary documentation.
Prerequisites / NoticePrerequisites: Basic understanding of programming.
252-2601-02LSoftware Engineering Laboratory: Open-Source EiffelStudio Restricted registration - show details 4 credits3PB. Meyer, C. A. Furia, D. M. Nordio
AbstractThis course is an opportunity to take part in leading-edge software construction and gain academic credit for it. The EiffelStudio environment provides a rich basis of extensions and new developments.
The course will be held in laboratory-style: students choose a project and meet regularly with assistants. The best developments are candidate for inclusion in actual software releases.
ObjectiveThis course is an opportunity to take part in leading-edge software construction and gain academic credit for it. The EiffelStudio environment provides a rich basis of extensions and new developments.
The course will be held in laboratory-style: students choose a project and meet regularly with assistants. The best developments are candidate for inclusion in actual software releases.
ContentThe growing popularity of open-source projects provides a fertile ground for creative software developers to demonstrate and hone their design and implementation skills. This course is an opportunity to take part in leading-edge software construction and gain academic credit for it. The EiffelStudio environment (in 2006, 2 million lines of open-source code) provides a rich basis of potential extensions and new developments. The course is not structured as a traditional set of lectures but is laboratory-style: students choose a project and meet regularly with assistants to report progress and obtain guidance. The results produced should meet standards of quality software engineering; the best developments are candidate for inclusion in actual software releases. This is an opportunity to learn by doing and to encounter the challenges of large, production-grade software development.
263-2600-00LRobotics Programming Laboratory Information Restricted registration - show details
Number of participants limited to 18.
The course is open to students of computer science, electrical engineering, and mechanical engineering background (although students from other departments will be considered).

In the Master Programme max. 10 credits can be accounted by Labs on top of the Interfocus Courses. Additional Labs will be listed on the Addendum.
8 credits7PB. Meyer, J. W. Shin
AbstractThis course is a hands-on laboratory course in which participants program Thymio II robot that will play in a competition. Students will learn software engineering skills and robotics concepts and apply them in practice.
Objective- Knowledge of basic software engineering principles and methods
- Knowledge of how software engineering applies to robotics
- Knowledge of the most common architectures, coordination and synchronization methods
- Experience in design of a small robotics system with aspects of sensing, planning and control
Content- Software engineering tools
- Design patterns
- Software architecture
- ROS and Roboscoop
- Perception
- Mapping and localization
- Path planning and obstacle avoidance

Students will program Thymio II educational robot with a Carmine 1.09 RGBD camera as the sensor.
Prerequisites / NoticeCombination of lectures and a semester-long project.

Prior programming experience required. Object-oriented programming (especially Eiffel and C++) strongly recommended. Experience with Linux helpful.

Limited to 18 students.
- Expected to work both individually and in teams of 2-3 students