Course 2023-2024 a.y.

20875 - SOFTWARE ENGINEERING

Department of Computing Sciences

Course taught in English
Go to class group/s: 29
AI (8 credits - I sem. - OB  |  INF/01)
Course Director:
LAURENT POIRRIER

Classes: 29 (I sem.)
Instructors:
Class 29: LAURENT POIRRIER


Mission & Content Summary

MISSION

With our growing reliance on digital services and devices, the ways in which their software is developed and maintained takes an increasing importance. Software engineering covers all aspects of the life cycle of computer software. This course is an introduction to current software engineering techniques. We will focus on the three fundamental aspects of software development: productivity (software development tools and aids), safety (correctness), and efficiency (resource utilization and performance).

CONTENT SUMMARY

  1. Productivity
    • Programming languages
      • Compiled vs interpreted
      • Strong-vs-weak and static-vs-dynamic typing
      • Memory management: manual vs automatic
    •  Software development
      • Version control systems
      • Continuous integration
      • Dependencies
      • Portability, API and ABI
  2. Correctness
    • Machine and language specifications
      • Unspecified behavior, implementation-defined behavior, undefined behavior
      • Memory ordering and barriers
      • Floating-point arithmetic
    • Software engineering practices
      • Documentation
      • Testing
      • Static analysis and refactoring tools
      • Dynamic analysis tools
      • Assertions
  3. Performance
    • Algorithmic performance
    • Code optimization
      • Out-of-order execution, CPU pipelines
      • Cache, memory, storage and network: throughput and latency
      • Benchmarking and static instrumentation
      • Stochastic instrumentation
      • SIMD instructions
      • Thread-level concurrency
      • Distributed computing
      • Hardware acceleration

Intended Learning Outcomes (ILO)

KNOWLEDGE AND UNDERSTANDING

At the end of the course student will be able to...
  • Understand the different aspects of software development
  • Recognize the trade-offs at stake when making design decisions
  • Know the tools at their disposal to ensure the correctness of their code
  • Identify performance issues in large-scale projects and propose mitigations

APPLYING KNOWLEDGE AND UNDERSTANDING

At the end of the course student will be able to...
  • 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

  • Face-to-face lectures
  • Guest speaker's talks (in class or in distance)
  • Exercises (exercises, database, software etc.)
  • Individual assignments
  • Group 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 assignments (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.

 

If available, guest speakers working on large software projects will be invited to present their work.


Assessment methods

  Continuous assessment Partial exams General exam
  • Written individual exam (traditional/online)
    x
  • Individual assignment (report, exercise, presentation, project work etc.)
x    
  • Group assignment (report, exercise, presentation, project work etc.)
x    
  • Active class participation (virtual, attendance)
x    

ATTENDING STUDENTS

Assessment will be based on a general theory exam, one or more assignments, and 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).

 

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

Non attending students will complete their assignments individually.


Teaching materials


ATTENDING AND NOT ATTENDING STUDENTS

Links to course materials will be provided after each lecture.

Last change 23/05/2023 18:34