The Master in Software and Data Engineering has been designed to provide students with a strong set of skills needed to become highly specialized software and data engineers.
The study programme comprises 120 ECTS over four semesters (two years) and it is compounded of four modules: Software Engineering, Data Engineering, Electives, and the Master Thesis.
The Software Engineering module embraces 36 ECTS and provides students with a deep knowledge of state-of-the-art techniques used to deal with the implementation, evolution and maintenance of complex software systems. Topics related to this module are software design, software quality and testing, software architecture, software performance, and software analytics. While half of the module is dedicated to classical software engineering topics, the other half is focused on how analytics can be applied to reflect and improve the software process itself.
The Data Engineering module includes three courses (18 ECTS) teaching students techniques and tools to design and modeling data (1st semester), to convert data into information (2nd semester), and to transform information into knowledge useful to support decision making activities (3rd semester).
The topics studied in the Software and the Data Engineering modules are continuously integrated through the whole course of study. This is done by devoting 18 ECTS to deal with both Software and Data Engineering topics with project-based learning.
The Electives module includes 12 ECTS, that students can freely select from a given list of courses offered at the USI Faculty of Informatics based on his/her personal preference.
Finally, the remaining 36 ECTS (the whole 4th semester plus 6 ECTS of the 3rd semester) are dedicated to the Master Thesis. Students will use the 6 ECTS of the 3rd semester to visit the research groups of the Software Institute of the Faculty of Informatics and to prepare a thesis proposal. Then, they will work full time on the thesis in the 4th semester in the research group of their choice.
At the end of the study programme, students will be awarded a Master of Science in Software and Data Engineering. They are expected to possess all the skills needed to pursue a successful career as software engineers and/or data engineers as well as in the context of academic research in software-related fields.
Introduction to Software & Data Engineering 3 ECTS
Software lives in a world of data. Data is the new natural resource to be mined and exploited using software. Data analytics software provides actionable insights at the basis of continuous improvement and decision making processes. Such insights can be found by exploring large quantities of data, by asking the right questions and knowing how to reliably and efficiently find the appropriate answers. This course provides an overview of the Master program in Software and Data engineering, introducing the basic concepts that tie together the rest of the lectures.
Software Design & Modeling 6 ECTS
The focus of this course is on object-oriented design. The course starts with an introduction to object-oriented programming. Java is used as the reference programming language. Then, in the first part of the course students will (i) learn how to assess (both manually and automatically) the design quality of object-oriented systems, and (ii) get a deep understanding of design patterns. The course takes a hands-on, learning-by-doing approach with assignments performed on open source systems. For example, students will be required to run a “design critique” of well-known open source systems, identifying design flaws and refactoring them.
In the second part of the course, students will apply the acquired expertise in the context of a group project.
Engineering of Domain Specific Languages 3 ECTS
Domain-Specific Languages (DSLs) are programming languages that are tailored to a particular application domain. This essential focus of DSLs allows to more concise and understandable programs, with a tight stakeholder integration, and when done properly, to improved code quality.
The course will feature the current state-of-the-art on both the design and implementation of DSLs. The course will emphasize the different design dimensions of DSLs, the involved language paradigms and features, and the drawbacks with respect to simple API modeling. As a student, you will also learn the difference between internal and external DSLs.
In parallel, you will learn how to effectively implement a DSL from scratch, using modern language workbenches and programming languages that enable the construction of expressive and effective DSLs.
Programming Styles 3 ECTS
You are a good programmer. You are fluent in multiple programming languages. But can you program in style?
This course is a journey through the landscape of programming languages and idioms. You will discover a multitude of dramatically different programming styles. A style arises from a set of constraints you impose on your code. Styles are independent of a given programming language. You can use many different programming languages to write code in a given style.
In this course you won’t just hear about and discuss various styles. You will practice those styles. You will look at programming as an art, and like a budding artist—be it a painter, a writer, or a musician—you will practice producing works in multiple artistic styles.
Design 101 3 ECTS
This class teaches students a series of universal design principles that can be used for a number of tasks, such as enhancing the way a design is perceived, help people learning from a design, increase the usability and appeal of a design, and ultimately make better design decisions to create new and ameliorate existing designs. The principles are then put to practice in a series of contexts, such as graph design, table design, slide design, presentation design, etc.
Data Design & Modeling 6 ECTS
Data design and modeling provides the foundation for representing, storing and managing large amounts of structured, semi-structured and unstructured data. Data can be persistent or volatile, it can be processed in batches or in continuous streams.
Students become familiar the main dimensions of analysis of big data (the 4 v’s): volume, velocity, variety and veracity. In terms of volume, students will learn the the CRUD primitives (create, read, update, delete) and how they can be implemented at scale, and the ACID/BASE transactional properties of existing SQL/NOSQL data management technologies. Dealing with large amounts of data requires to determine suitable sharding and replication strategies and understand to trade-off availability against consistency. Data quality and provenance are critical aspects to be considered to determine whether data is worthy of trust, therefore students will the basic techniques of data wrangling and cleansing.
Students learn how to select the most appropriate data management solutions to deal with scalability, availability, consistency, performance and expressiveness requirements. Students learn how to design suitable data representations for a given domain and a given storage and stream processing technology. Students will gain in depth understanding on whether a given data source can be trusted and how to assess and improve the quality of their datasets. Students will understand the main steps of the data analysis pipeline and how this can be implemented: Data Acquisition, Integration, Exploration, Mining, Analytics, Interpretation and Visualization.
The course will provide a recap of the basic SQL technologies and introduce NoSQL Storage: MySQL, PostgreSQL, MongoDB, Redis, Neo4J, Cassandra.
It will also provide the foudational knowledge of data processing technology: R, SPSS, Spark, Storm, Pandas.
Finally, the whole course will be based on strong theoretical foudations, including: relational algebra, normalization, key-value stores, CAP theorem, data provenance, and data quality theory.
Students will have the opportunity to experiment the new big data technologies in practice, with hands-on use cases and practical use of cloud-based big data platforms.
Elective 6 ECTS
Software Engineering 6 ECTS
Advanced Networking 6 ECTS
Software Quality & Testing 6 ECTS
Avoiding failures in software systems by construction is impossible. This course is about methodologies, techniques and tools to check the quality of software systems, identify and remove faults before software deployment to reduce the possibility of runtime failures. Students will see the many facets of the problem and will learn methodologies, approaches and techniques to check the quality of complex software systems. Students will see the different approaches to testing and analysis and will understand the interplay of testing and analysis within the software development process.
Software Architecture 6 ECTS
Architecture is not only necessary as the global blueprint to manage the complexity of large software systems, but should also be seen as the focus of the main design decisions influencing the quality attributes (modularity, maintainability, extensibility, portability, interoperability, reuse, performance, scalability, elasticity) of the resulting system. This class teaches the students to structure complex software systems using components and connectors while keeping track of the rationale behind their design decisions.
Visual Analytics Atelier 6 ECTS
Real world problems more often than not have a fuzzy nature: they are not well defined problems with well defined data where one can just apply a statistical model and/or a machine learning technique. In reality, there is a clear objective (for example improve customer retention, optimize portfolio) and part of the solution is to define the problem by understanding and refining the underlying data, because the problem and the data are strongly interconnected.
Solving these problems, similarly to software development, is an iterative process during which the data is integrated and explored multiple times from different angles, refining the model and understanding of it. Data exploration–the core component of the entire process–exploits a combination of interactive visualization and querying, as a means to understand the “shape” of the data, break down its complexity, and ask questions/test hypotheses.
In this course we will see a number of data exploration and visualization techniques, and how to use them to iteratively solve a given problem by understanding one or multiple datasets. The course will also cover how to explore ultra large datasets, which tools and techniques exist, and what are the challenges and constraints.
The course will have a hands-on nature where students will perform data exploration on real datasets and will apply the techniques discussed in class to solve given problems.
Information Modeling & Analysis 6 ECTS
While the world provides an endless source of data, it does not come with a pre-defined model to understand it. Turning data into information requires to ask the right question and know how to find an answer. This course teaches students to turn data into information by using advanced modeling and analytics techniques based on machine learning. Like programming, teaching a machine to learn requires to design models selecting the most appropriate representation techniques. Unlike programming, teaching a machine to learn requires to select the right amount of training data and evaluate the quality of the predicted outcome. As they work through concrete application case studies, students will also gain a good understanding of the limitations and the assumptions behind each data mining technique so that they can be properly and correctly applied.
Elective 6 ECTS
Compilers 6 ECTS
Information Security 6 ECTS
Software Analytics 6 ECTS
Students will acquire key competences needed to analyze complex software systems and improve their maintenance and evolution.
The first part of the course is focused on the study of techniques related to reverse engineering, defect prediction and analysis, and the mining and analysis of structured and unstructured data in software repositories.
In the second part, students will apply the acquired expertise in the context of a software analytics project.
A solid basis in object-oriented programming and software engineering is required.
Software Performance 6 ECTS
This course teaches how the various layers of a computer system interact and affect the resulting performance. It performs two cuts down the system stack: one about the “state” and the other about the “behavior” of a system. The discussion of “state” investigates memory usage of applications, leak detection, garbage collection, virtual memory management, and cache performance. The discussion of “behavior” investigates call graphs, dynamic class loading, shared libraries and dynamic linking, control flow graphs, exception handling, compiler optimizations, and branch prediction. The course uses Java virtual machines and their internal operation as a running example and teaches basic static and dynamic program analysis techniques. Given the quantitative aspects of performance, the course introduces basic instrumentation and measurement tools, quantitative experimentation and evaluation approaches, and data analysis and visualization techniques.
Knowledge Analysis & Management 6 ECTS
Knowledge — the tacit insights, explicit understandings, practical know-how, and theoretical know-why — is what allows people and organizations to function intelligently. Knowledge Analysis and Management is a broad field that covers the entire lifecycle of knowledge: from identifying, representing, capturing, generating, structuring and sharing valuable intellectual assets. Students will learn to represent knowledge with natural and formal languages, access and integrate knowledge sources on the Web, classify and use knowledge for decision making, transfer and disseminate knowledge within and across organizations. The course will feature examples of case studies, methods and tools that are particularly suitable for managing software-specific knowledge, e.g., pattern languages, design spaces and architectural decision meta-models.
Hacking Project 6 ECTS
The course allows students to put into practice the knowledge they acquired both in software and data engineering. Students will design and develop a complete software product analyzing streams of data in real time for its proper functioning integrating everything they have learned in the rest of the program.
Software & Data Engineering Seminar 6 ECTS
Students will visit one or more of the research groups of the Software Institute of the Faculty of Informatics to define the topic of their MSc thesis. Students are expected to (i) identify the research group in which they would like to work for their thesis, (ii) define, together with the chosen Advisor, the goal of the thesis, (iii) study the state-of-the-art related to the thesis, and (iv) write a detailed thesis proposal.
Master Thesis 30 ECTS
Students are expected to carry out a research project for their Master thesis under the supervision of a Faculty member. The thesis must represent an original contribution to the field of Software & Data Engineering. The specific research project is defined as output of the Software & Data Engineering Seminar.
Software Engineering 6 ECTS
Software engineering is the discipline of building software in a methodical way to ensure that the product satisfies its users’ needs, is correct (or, more generally, dependable) and maintainable. The course teaches the students how to organize software development projects, how to analyze and specify software requirements, and how to verify software. The course will focus on the use of formal models and methods in software development.
Advanced Networking 6 ECTS
This course covers advanced topics in computer networks, with a blend of theoretical and practical topics. On the theoretical side, the syllabus will cover mathematical foundations of networking, including discussions of queuing theory, control theory, information theory, and optimization. On the practical side, the syllabus will cover concepts and designs related to modern network architectures and technologies (e.g., data-center networks, software-defined networks), protocols (e.g., SPDY, HTTP/2, IPSec), and services (e.g., Zookeeper, DHTs). Students will gain hands-on experience with topics discussed in class through a series of exercises using network simulators and emulators.
Compilers 6 ECTS
This course studies the construction of optimizing compilers, focusing on the “backend” of the compiler: techniques for generating efficient code on modern architectures. We will cover dataflow analysis, program optimization, and code generation across basic blocks, procedures, and complete programs. We will look some of the key challenges for modern compilers and runtime systems: optimization of object-oriented languages, dynamic compilation, garbage collection, dependence analysis, and loop transformations.
The bulk of your course grade will come from programming assignments that implement program analysis, intermediate representations, and optimizations.
Information Security 6 ECTS
This class exposes students to the fundamental concepts of cryptography, network security, and computer security. The growing importance of networks and distributed systems, and their use to support safety-critical applications, has made information security a central issue for systems today. The class centers on two main parts: security foundations (which includes security terminology, core cryptograhic principles, and secure protocols) and applied security (which discusses network security, computer security, software security, and web security). Students learn to critically assess the security properties of a system and make informed decisions about implementing secure processes. Most classes feature in-class labs where students are asked to implement a cryptographic primitive or secure protocol, or attack a vulnerable system.