This is the repository of the MIAGE C3P lectures done by S. Ducasse and G. Polito
contact: stephane.ducasse@inria.fr / guillermo.polito@inria.fr
In this course, you will learn the following topics.
- Module 01: Test introduction. Unit testing. Fixtures, stimuli, assertions. Test-driven development (TDD). Extreme TDD.
- Module 02: OOP refresh. Classes and methods. Method lookup. Polymorphism.
self
andsuper
. - Module 03: Reverse engineering. Exploring an existing code base. Analysing source code. Abstracting details. Looking for documentation outside and inside the project. Tests as documentation.
- Module 04: Test Quality. Mutation Analysis. Mutation Score. Equivalent mutants. Analysing surviving mutants.
- Module 05: Hook and templates. Hooking behavior using inheritance. Template methods. Overrides and
super
sends. - Module 06: Double dispatch. Single vs. multiple dispatch. Message sends as choices. Double choices. Symmetrical and non-symmetrical double dispatch.
- Module 07: Visitor. Extracting operations from class hierarchies. Double dispatch as extension mechanisms. Recursion revisited.
- Module 08: Composite. Modelling complex tree-like structures using classes. Recursion revisited 2.
- Module 09: Inheritance. Subclassing vs. subtyping. Inheritance vs. composition.
- Module 10: Types. Dynamic vs. static message binding. Overrides vs. overwrites. The role of inheritance and interfaces in polymorphism.
All slides, videos, and tutorials are available in (or linked from) this repository.
- Pdfs are hosted under https://rmod-files.lille.inria.fr/DesignCoffeeClub/
- Videos are hosted http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/.
They will also be soon available on the official website https://advanced-design-mooc.pharo.org
This course proposes a series of teorical lectures and practical exercises. Modules are divided in weeks, each in a different folder, and you will find the theory and practice in that folder. To pass this course you will need to:
- pass the exams (see Calendar.md)
- make a presentation (see Calendar.md)
- do at minimum all the homework in the exercises (file Exercises.md in each folder) => Each week will feature mini quizzes about the homework of the past week
- watch all the videos of the lectures not done during the lectures (yes there are videos for 99% of the support)
- write (short) weekly reports to tell us your activity. Remember, focus on the important things, and show us that you are learning.
Some of the activities during the course require group organization. For example, this is the case for reporting and presentations.
Make your groups and create a folder inside the Groups directory. Choose a name for your group and use that as folder name. Put inside your group folder
- a file with your full names and emails
- all your activity and reports
make recurrent pull requests to update it.
For example, imagine that Jeanne D'arc and Tintin LeBelge are together in a group called RevolutionX. They create a directory RevolutionX
Groups
- RevolutionX
- members.md (names and emails)>
- report-week01.md (one section for Jeanne, one for Tintin)
- report-week02.md (one section for Jeanne, one for Tintin)
Make sure you have correct configured you authentication setup
- If you want to use SSH authentication
- set up your SSH keys with a recent encryption, check github's instructions
- upload your public keys to github