This is the live page of the MPRI 1-31 course, by David Baelde and Charlie Jacomme.
Agenda
All sessions take place in C321. Please bring your laptops when exercises are planned.
- 09/21 course organization, introduction to SE and presentation of project proposals
- 09/28 lecture on methodology and tools, git tutorial and exercises
- 10/05 lecture and exercises on testing
- 10/12 project meeting, infrastructure setup + intro to django
- 10/19 project meeting
- 10/26 lecture on design (1/2)
- 11/02 holidays
- 11/09 short project meeting (mid-term exams)
- 11/16 networking exam + unsupervised meeting
- 11/23 project meeting
- 11/30 end of first dev phase, second phase requirements
- 12/07 advanced git guidelines + design exercise for 12/21
- 12/14 project meeting
- 12/21 advanced git tuto + exercises
- 12/28 holidays
- 01/04 holidays
- 01/11 end of second phase, defense preparation
- 01/18 defenses and demos
Material
- Two modularizations for a KWIC index generator
- Some buggy code for binary heaps: bheap.py
Git guidelines
Projects
In 2018, six students are developping a multiplanner web application in Django, following this special project description (now updated for second phase).
Students had the possibility to form groups and choose among five project proposals.
Hall of fame:
- Tim Dodge (2018)
- Accounting for Friends (2018)
- Paint 1 and 2 (2018)
- Rogue (2018)
- Dungeon (2015)
- Ocawai (2014)
- Geriatric Terrorist Anarchy (2013)
Requirements
Projects have to satisfy the following requirements, which will be the basis for grading. All requirements but the first one must have a corresponding issue on the development platform, where discussion will take place between students and evaluators, and evaluators will indicate when the requirement is satisfied. Note that satisfaction is not monotonic: a satisfied requirement may become unsatisfied later on.
- Platform: You must use a complete and modern development platform such as github, gitlab, etc. and continuous integration should be used to systematically build and test your software at least after each commit in master. The project must be accessible by teachers and other students. The evaluation of your project will be based on group meetings and content from the development platform: commits, issues, pull requests, comments, continuous integration.
- Standard structure:
You must adopt a standard layout for your source code and build system.
The build system should provide targets for building, installing,
testing and generating the documentation.
We also expect reasonable coding conventions regarding:
- the naming of files, classes, variables, etc.;
- the presentation of the code, including line length, spacing, markup in comments;
- the promotion or avoidance of specific programming constructs or APIs;
- other language- or technology-specific aspects.
- Functional correctness: Your software must satisfy the requirements from the project proposals. Every aspect must be unit tested; exceptions must be appropriately justified and approved by instructors.
The second phase imposes additional requirements:
- Tests: For each test, the property being tested must be clearly stated in natural language, and the test's code must correspond to that property.
- Commits: Every second-phase commit in master must be atomic and have a properly formatted commit message that accurately describes the change, indicating whether it's a new feature, a fix, etc. and referencing issues and other commits when relevant.
Optional requirements may bring extra points:
- Systematic use of issues: A high proportion (say 90%) of second-phase commits is explicitly linked to an issue where the relevant feature or bug is properly discussed. Using branches (and pull requests) is the best way to achieve this, to avoid having to link each commit separately.
- Outstanding contribution: To satisfy this requirement you must do something exceptional: deliver software that is particularly cool/reactive/efficient, implements additional features, or carry out your development in an interesting way (automation, debugging, etc.).