Bertrand Meyer: Catalogue data in Autumn Semester 2015
Name | Prof. Dr. Bertrand Meyer |
Field | Software Engineering |
Address | Dep. Informatik ETH Zürich, CAB E 88 Universitätstrasse 6 8092 Zürich SWITZERLAND |
bertrand.meyer@inf.ethz.ch | |
URL | http://se.ethz.ch/~meyer |
Department | Computer Science |
Relationship | Professor Emeritus |
Number | Title | ECTS | Hours | Lecturers | |
---|---|---|---|---|---|
252-0021-00L | Introduction to Programming ![]() | 7 credits | 4V + 2U | B. Meyer | |
Abstract | Introduction 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. | ||||
Objective | Many 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. | ||||
Content | Basics 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 notes | Textbook: "Touch of Class" (see under "Literatur") The lecture slides are available for download on the course page. | ||||
Literature | Bertrand 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 / Notice | The 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-00L | Software Verification | 6 credits | 3V + 2U | B. Meyer, C. A. Furia, S. Nanz | |
Abstract | This course surveys some of the main approaches to software verification, including axiomatic semantics, abstract interpretation, model checking, and testing. | ||||
Objective | After 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. | ||||
Content | The 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. | ||||
Literature | Axiomatic 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-01L | Distributed Software Engineering Laboratory ![]() 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 credits | 2V + 2U + 3A | B. Meyer, P. Kolb, D. M. Nordio | |
Abstract | The 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. | ||||
Objective | Modern 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. | ||||
Content | Basics 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 notes | The course page includes the full set of slides and links to supplementary documentation. | ||||
Prerequisites / Notice | Prerequisites: Basic understanding of programming. | ||||
252-2601-02L | Software Engineering Laboratory: Open-Source EiffelStudio ![]() | 4 credits | 3P | B. Meyer, C. A. Furia, D. M. Nordio | |
Abstract | This 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. | ||||
Objective | This 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. | ||||
Content | The 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-00L | Robotics Programming Laboratory ![]() ![]() 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 credits | 7P | B. Meyer, J. W. Shin | |
Abstract | This 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 / Notice | Combination 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 |