- Docente: Alessandro Ricci
- Credits: 6
- SSD: IINF-05/A
- Language: English
- Teaching Mode: In-person learning (entirely or partially)
- Campus: Cesena
-
Corso:
Second cycle degree programme (LM) in
Computer Science and Engineering (cod. 6699)
Also valid for Second cycle degree programme (LM) in Computer Science and Engineering (cod. 6699)
Learning outcomes
The goal of this course is to introduces the essential concepts of software architecture and related abilities expected for a software architect in the practice of software engineering, including the application of modern architectures (e.g. Service-Oriented Architectures and REST, microservices, event-driven Architectures, cloud-computing architectures) to concrete application contexts, including cyber-physical systems and the IoT. The student will learn to: - analyze how a software architecture relates to an organization and identify its quality attributes; - design software architectures using fundamental principles, patterns, and styles; - implement, deploy and manage software architectures using proper software platforms; - document and evaluate software architectures, using standard languages (e.g. UML) and tools.
Course contents
Software Architecture introduction
-- What do we mean for Software Architecture and Architectural Thinking
-- The Role of Software Architect
- Software Architecture foundations
-- Basic Concepts and Design Principles
-- Architectural Styles and Patterns
--- main examples including Layered Architecture, Clean Architecture, Service-Oriented Architecture, Microservices, Event-Driven Architecture
- Software Architecture in the Software Engineering Process
-- Architectural Significant Requirements
-- Designing, implementing, evaluating, documenting, evolving a software architecture
-- Software Architectures and Domain-Driven Design
-- Software Architectures and DevOps
- Software Architectures in Practice - selected domains and case studies
-- Pervasive Computing, Internet of Things and Web of Things - with a focus on Digital Twins
-- Enterprise Applications and Cloud Computing
-- Autonomous/Intelligent Systems - with a focus on Intelligent Agents and Cognitive Architectures
Readings/Bibliography
Mark Richardson and Neal Ford. Fundamental of Software Architecture - An Engineering Approach O'Reilly (2020)
Richard N. Taylor et al. Software Architecture - Foundations, Theory, and Practice. Wiley (2010)
Robert C. Martin. Clean Architecture. Addison Wesley (2018)
Len Bas et al. Software Architecture in Practice. Addison Wesley (2022, 4th ed.)
Martin Fowler. Patterns of Enterprise Application Architecture. Addison Wesley (2003)
Gregor Hohpe. The Software Architect Elevator. O'Reilly (2020)
Eric Evans. Domain-Driven Design: Mark Richardson and Neal Ford. Fundamental of Software Architecture - An Engineering Approach O'Reilly (2020)
Vlad Khononov. Domain-Driven Design: Aligning Software Architecture and Business Strategy (2022)
Teaching methods
Half of the course is devoted to theory and activities in the classroom and half to practice and lab activities.
Assessment methods
The assessment is an oral exam, in which we will discuss the topics of the course, starting from the material (code + documentation) developed and delivered by the student.
The material consists either (alternatively) in:
- The solution to three practical assignments, assigned during the course. These assignments are meant to be done during the course, but this is not mandatory. They can be done in groups, from 1 to 3 members (exceptions are possible). They should be delivered 2 days before the date planned for the oral exam.
- The development of a single project. The project can be proposed by the student (possibly refined, by the teacher), or can be chosen from a set proposed by the teacher at the beginning of the course.
The oral exam is individual, even when the material has been developed in group.
The evaluation (assessment) takes into account:
- the level of understanding of the course topics, of main concepts and techniques;
- the quality of the material delivered, including correctness and completeness;
- the capability to describe and discuss the material, from the general idea to the details.
Teaching tools
- Slides projected during the lectures, available on the course web site
- Scientific papers and articles
Office hours
See the website of Alessandro Ricci