20875 - SOFTWARE ENGINEERING
Department of Computing Sciences
Course taught in English
LAURENT POIRRIER
Mission & Content Summary
MISSION
CONTENT SUMMARY
- How computers work
- Boolean logic & gates, integers (signed and unsigned), characters and text
- Structure of computer hardware, instructions, memory
- Compilation, operating systems, virtual memory
- Software development
- Compiler invocations, IDEs, shell scripts, build systems
- Programming languages
- Portability, dependencies and packaging
- Regular expressions
- Version control systems
- Software licenses
- Development methodologies
- Correctness
- Specifications
- Undefined behavior
- Floating-point arithmetic
- Software engineering practices (documentation, tests, static analysis, fuzzing)
- Debugging
- Performance
- Code optimization
- Pipelined CPUs, memory caches
- Benchmarking and static instrumentation
- Stochastic instrumentation
- Data structures in memory
- arrays, linked lists, stacks, queues, tries, hash tables, spatial data structures
- Parallel computation (SIMD, threads, distributed computing, hardware acceleration
- Code optimization
Intended Learning Outcomes (ILO)
KNOWLEDGE AND UNDERSTANDING
- Understand the different aspects of software development
- Recognize the trade-offs at stake when making design decisions
- Know the tools at our disposal to ensure the correctness of our code
- Identify performance issues in large-scale projects and propose mitigations
APPLYING KNOWLEDGE AND UNDERSTANDING
- Establish the basic infrastructure and perform design decisions for a new project
- Apply the concepts seen in class to develop correct and highly performant software
- Contribute to an existing large-scale project
- Find and/or fix correctness issues in a software project
- Find bottlenecks and improve the performance of a software project
Teaching methods
- Lectures
- Guest speaker's talks (in class or in distance)
- Practical Exercises
- Individual works / Assignments
- Collaborative Works / Assignments
DETAILS
Theoretical lectures will introduce the concepts, and will be accompanied by hands-on tutorials in which we will use the tools presented in class.
In addition, the students will have in-class exercises, individual homework assignments, and a larger project (either individual or in groups of two) in which they will be tasked with applying the concepts seen in class, on practical open-source projects.
Assessment methods
| Continuous assessment | Partial exams | General exam | |
|---|---|---|---|
|
x | ||
|
x | ||
|
x |
ATTENDING STUDENTS
Assessment will be based on (i) a general theory exam, (ii) in-class and homework assignments, and (iii) one large-scale open-ended project. The students will be allowed some freedom regarding the topic and scope of this project (subject to the lecturer's approval). There will be an in-class presentation for the project.
The exam will test the students' understanding of tools and concepts covered in the course, such has how to find and fix correctness or performance issues. The assignments and project will test their ability to write high-quality code and contribute to large-scale projects.
The weights for the final grade will be: 20% for the assignments, (at least) 20% for the project, and the remainder for the written exam. However, upon evaluation, projects that are outstanding in their scope can earn, accordingly, a larger overall weight.
NOT ATTENDING STUDENTS
For non-attending students, in-class exercises will be replaced with homework exercises. They will complete their project individually, and will present them remotely.
Teaching materials
ATTENDING AND NOT ATTENDING STUDENTS
Lecture slides will be published before each lecture. In addition, links will be provided whenever relevant material is available.