72939 - Software Systems Engineering M

Academic Year 2022/2023

  • Docente: Antonio Natali
  • Credits: 8
  • SSD: ING-INF/05
  • Language: Italian
  • Teaching Mode: Traditional lectures
  • Campus: Bologna
  • Corso: Second cycle degree programme (LM) in Computer Engineering (cod. 5826)

Learning outcomes

Detailed knowledge about languages, models and technologies for the analysis, the development, the documentation, the deployment and the maintenance of (distributed) software systems.

Course contents

At the end of the course, the student:

  • is able to set-up cooperative software production processes, based on agile (SCRUM) development that exploit also executable models exprressed using custom meta-models;
  • is able to design and develop software systems with related testing plans, in an incremental and evolutive way, by starting from the problem and from the application domain rather than from the implementation technology, also by using executable models of requirement and problem analysis;
  • is able to critically evaluate the continuos evolution of software technologies, both as regars the computational aspects and the software development process, by operationally acquiring knowledge on languages, methodologies and tools such as Kotlin, Gradle, SCRUM, SpringBoot, DevOps, Docker, etc.
  • is able to understand the role of the different styles of software architectures (layers, client-server, pipeline, microkernel, service-based, event-driven, space-based, microservices) and how to select the most appropriate architectural style for each different sub-system;
  • is able to face the analysis, the design and development of distributed, heterogeneous proactive-reactive applications (together with related development platforms and run-time supports) with particular reference to computational models based on message-passing and event-driven paradigms;
  • is able to realize message-based interactions among distributed software components by using high-level logical models and implementations based on different protocols (TCP, UDP, HTTP, CoAP, MQTT);
  • is able to understand how it is possible to design and build software development environments able to automatic code generation (Sofware Factories in ecosystems like Eclipse and IntelliJ) based on Model Driven Software Development (MDSD) and on Domain Specific Languages (DSL);
  • is able to develop application able to combine high-level aspects (with particular reference to AI) with low-level aspects related to Internet of Things (IOT) devices, in the context of both virtual and real environments, built by using low-cost computers like RaspberryPi and Arduino;
  • is able to apply the concepts, the devices and the tools developed in the course for the design and development of a final application that exploits one or more IOT devices - in particular Differental Drive Robots (DDR) with sensors - that can operate in relatively autonomous way in different virtual or real enviroments, without modifying the software that does express the business logic of the problem.

Readings/Bibliography

The teacher provides lerning material as a reference guide for the reading of more detailed papers and books

More spefically, each case-study discussed in the course is furnished with HTML documents that can be used as documention, as learning material and also as a starting point for more specialized versions built by the student.

Teaching methods

The course is based on a strong interaction between theory and practice, and on the cooperative work (teacher-students and student-student) related to a set of case-studies.

The case studies are proposed in an incremental way, with increasing complexity, with the goal to build reusable software, useful for the final application

The work of the students will be discussed during specifc 'review' phases (in the SCRUM style) related both to the product and to the develpment process, with the goal to better understand the motivation for the modern evolution of computational paradigms and of software production processes.

Assessment methods

The activites are naturally related to the continuos self-evaluation of the work of each student.

The final examination will performed in two-phases.

  • The first phase starts by publishing a set of requirements and ends with the production of a prototype
    of a software system satisfying the requirements, The goal of this phase is to evaluate the achievement of practical skills and can be performed both in individual way or in a team composed of at most 3 students.
  • The second phase consists of an individual discussion of the work. The goal is to evaluate the degrre of theorectical knowldege, awarness and autonomy of each specific student. In this phase, the student should highlight the essential aspects of the work done amd the choices made with reference to what exposed in the course.

Teaching tools

The course makes use of widespread environments and tools (e.g. Eclipse, IntelliJ, Git) software production with the intent to promote cooperative work between the teacher and the students and between the students.

The GIT repository of the course provides material related both to theory and coding.

Each case-study discussed in the course is furnished with HTML documents that can be used as documention, as learning material and also as a starting point for more specialized versions built by the student.

Office hours

See the website of Antonio Natali