The aim of this course is to learn students how to design and realize software systems while considering software quality-related characteristics (ISO). As structural aspects are addressed in the previous course INFO641, the focus here is on the behavior of software systems. We address in particular non functional characteristics like maintainability and evolvability of software systems through design patterns. At the end of the course, students must be able to: 

  • analyse and design  software behavior using UML (sequence, collaboration and state diagrams),
  • design software while taking into account functional and non functional characteristics (ISO/CEI 9126, SquaRE),
  • design and implement software behavior using suitable design patterns.


 This course provides the fundamental concepts needed to understand computer networks and the deployment of applications and distributed systems. The course begins with an introduction to the archictecture of the Internet and to the notions of application protocols. The transport protocols will be presented as well as the structure of IP addressing. The sockets interface will be presented as well as the notion of middleware. Distributed algorithms will be introduced with concrete application examples. This will provide the essential bases for application deployment in networks and distributions. 


This course aims to teach, through manipulation, the management of data streams. The manipulation of large data streams requires a good knowledge of inputs/ouputs, network programming and concurrent programming.