Software engineering is a broad set of techniques that aim to analyze user requirements, and then facilitate the design, building, and testing of software applications. This course aims to give an overview and insight into real world software engineering techniques, combined with a thorough overview of the Cloud technologies and infrastructures that underpin most modern applications and their development.
Software Engineering:
- (Learning outcomes) Fundamentals of version control systems, test automation, and refactoring.
- (Course content) Introduction to versioning, testing, and refactoring through close interactions with the students and questions related to their own software context.
Cloud Computing:
- (Learning outcomes) This course intends to provide a basic knowledge of Cloud Computing terminology, infrastructure and architectures. You will understand how to process data in a distributed environment. You will learn some of the economic considerations related to Cloud computing, and understand modern Cloud technologies including Serverless and Edge computing. You will have a basic understanding of DevOps in the Cloud, and hear experiences in Cloud from Industry.
- (Course content) The course will include interactive lectures, industry keynotes, and practical sessions using a real Cloud system – OpenStack running in the Ericsson Research Data Center.
Course type:
- AS track: mandatory
- AI track: elective
- Joint curriculum: foundational
Time: Given yearly, Spring
Teachers: Paul Townend (UmU), Robert Feldt (CTH)
Examiner: Paul Townend (UmU)
The students are expected to have a background in computer science, computer engineering, electrical engineering or similar. The students are expected to have basic programming skills.
Software engineering:
Have a basic understanding of Software Engineering terminology, in particular the differences between process-, product-, business-, and human-related concerns during software development. Understanding that building and deploying modern software systems, including machine learning (ML) models, is more than finding, creating, and tuning an ML algorithm on relevant data. Have basic knowledge about human factors in software systems development and use. Learn about tools used in software development and be able to apply them in their own projects, e.g. (code) repositories, test design and automation, and refactoring. Understand differences between AI and ML for Software Engineering (AI4SE) and SE for AI/ML (SE4AI), i.e. AI Engineering, and be able to give examples of recent research of each type.
Cloud computing:
Have a basic knowledge of Cloud terminology, infrastructure, and architectures. Understand distributed processing of data on the cloud. Learn about the economic arguments for/against using Cloud. Have basic knowledge of Serverless and Edge computing, as well as performing DevOps in the Cloud. Learn about use of Cloud from an industry perspective.
- Virtualisation and container technologies
- Serverless computing
- Edge computing
- Cloud orchestration (e.g. Kubernetes)
- Distributed processing
- Cloud economics
- Technical Debt in ML Software Systems
- AI4SE and SE4AI
- Behavioral Software Engineering
- AI/ML Engineering
- Industrial SE; V model, reviews, test automation
- Agile processes
- Understanding version control systems
- Introduction to software testing
- Refactoring: Improving the Design of Existing Code (online catalogue or ISBN-10: 0134757599)
Practical Assignments
Syllabus (Kursplan)
Course page
If you are not a student at KTH you must login via https://canvas.kth.se/login/canvas