Official course description:

Full info last published 15/12-22
Course info
Language:
English
ECTS points:
7.5
Course code:
KSDSESM1KU
Participants max:
46
Offered to guest students:
yes
Offered to exchange students:
yes
Offered as a single subject:
yes
Price for EU/EEA citizens (Single Subject):
10625 DKK
Programme
Level:
MSc. Master
Programme:
MSc in Computer Science
Staff
Course manager
Assistant Professor
Teacher
Associate Professor
Course semester
Semester
Forår 2023
Start
30 January 2023
End
25 August 2023
Exam
Exam type
ordinær
Internal/External
intern censur
Grade Scale
7-trinsskala
Exam Language
GB
Abstract

The course "DevOps, Software Evolution and Software Maintenance" is an MSc elective.

In this course, the students will discover all the software engineering activities that take place after an initial software product is delivered or after a legacy system is taken over from a theoretical and practical perspective. Students (in groups) will take over such a system that is live and serving users, they will refactor and migrate it to the languages and technologies of their liking. All subsequent DevOps, software evolution and software maintenance activities will be performed directly on the systems of the students.

Description

In this course, the students will discover all the software engineering activities that take place after an initial software product is delivered or after a legacy system is taken over from a theoretical and practical perspective. Students (in groups) will take over such a system that is live and serving users, refactor and migrate it to the languages and technologies of their liking. All subsequent DevOps, software evolution and software maintenance activities will be performed directly on the systems of the students.

Students will learn DevOps, Software Evolution, and Software Maintenance concepts via:

  • Using Linux/Unix based operating systems via the command line (Bash)
  • Virtualization via containers and virtual machines
  • Continuous integration (CI), continuous delivery, and continuous deployment 
  • Version control systems (Git), various branching strategies, and collaborative development workflows 
  • Coding standards, static analysis, linters, etc. 
  • Collaborative development process with code reviews, pair programming
  • Time-planning and scheduling in software engineering projects
  • Techniques for division of subsystems across multiple platforms
  • Logging and log analysis 
  • Monitoring 
  • Scalability, load balancing
  • Service-level agreements 
  • Security of web-facing applications
  • Deployment strategies
  • Technical Debt & Maintainability 
  • Refactoring and evolution of legacy systems


The course consists of weekly workshop sessions (4h), which include lecture style teaching and interactive lab style exercises.

Additionally, students work in project groups (favorably five persons) together during the entire course. Project milestones, such as setup and configuration of a CI tool, automatic deployment of a software system, inclusion of new features, such as, logging, monitoring, etc. will serve as  assignments.

Since we continuously deploy software on infrastructure as a service (IaaS) or platform as a service (PaaS) services and depending on the chosen services, each group might need some funding. Usually, each group should not use more than $10 per person over the run of the course. Students will not have to buy any books for this course on the other hand. Some of the services that we intend to use offer free credits for new users via the GitHub Student Developer Pack.


Formal prerequisites

  • Familiarity with at least one object-oriented programming language, such as Java, C#, etc.
  • Be able to design, implement, and test medium-sized object-oriented programs. That includes the use of concepts such as classes, encapsulation, inheritance, polymorphism, interfaces, packages, data structures, concurrent programming , IO operations, basic GUI, and basic web programming.
  • Be able to design, create, and use test medium-sized (relational) databases. That includes the use of concepts such as tables, primary, and foreign keys, normalization, etc.


Intended learning outcomes

After the course, the student should be able to:

  • Explain, apply and reflect on the principles of DevOps and its constituents, including application of its concepts for software maintenance and evolution.
  • Describe and apply various methods and strategies for, amongst others, continuous integration, delivery, and deployment, logging, monitoring, scalability, version control with branching, virtualization, maintenance, and handling of technical debt and their role in the context of DevOps.
  • Explain and be able to execute all software engineering activities necessary to operate, evolve, and maintain a minimal-viable-prototype.
  • Document and explain all steps during software maintenance and refactoring, e.g., with developer logs and the design and architecture of web-systems through the use of common standards for documentation including UML and standard documentation tools.
  • Design and implement distributed and/or layered software using a suitable programming language and corresponding tools and frameworks for data storage, logging, monitoring, etc.
  • Continuously maintain and evolve (refactor) a software system through adjustments in its architecture or refinements in its configuration.
  • Analyze, discuss, choose, and relate different technologies and frameworks for their suitability in certain development and production scenarios.
  • Discuss the advantages and disadvantages of different methods and practices for designing and developing software continuously.
  • Identify and present current work practices and discuss potential modifications/improvements of these for adoption of DevOps principles.
Learning activities

The course sessions are organized as follows:

  • weekly 4-hour workshop sessions, which include lecture style teaching and interactive lab style exercises
  • continuous in project group work. The students will work in groups (favorably five persons)  during the entire course
  • project milestones, such as setup and configuration of a CI tool, automatic deployment of a software system, inclusion of new features, such as, logging, monitoring, etc. will serve a bi-weekly assignments

Course literature

The course literature is published in the course page in LearnIT.

Student Activity Budget
Estimated distribution of learning activities for the typical student
  • Project work, supervision included: 60%
  • Exam with preparation: 5%
  • Other: 35%
Ordinary exam
Exam type:
D: Submission of written work with following oral, Internal (Pass / Fail)
Exam variation:
D2G: Submission for groups with following oral exam supplemented by the submission. Shared responsibility for the report.
Exam submission description:
In form of a report, documentation of major steps that the group members took with regards to operation, evolution, maintenance, and refactoring using, amongst other artifacts, the developer logs, system design, system architecture, communication scenarios, and documentation produced throughout the course. Furthermore, reflection, discussion, and comparison of alternatives and choices of technologies, frameworks, and processes.
Group submission:
Group
  • 4-6 (preferred 5)
Exam duration per student for the oral exam:
15 minutes
Group exam form:
Group exam : Joint student presentation followed by a group dialogue. All the students are present in the examination room throughout the examination.


reexam
Exam type:
D: Submission of written work with following oral, Internal (7-point scale)
Exam variation:
D22: Submission with following oral exam supplemented by the submission.
Exam submission description:
In form of a report, documentation of major steps that the group members took with regards to operation, evolution, maintenance, and refactoring using, amongst other artifacts, the developer logs, system design, system architecture, communication scenarios, and documentation produced throughout the course. Furthermore, reflection, discussion, and comparison of alternatives and choices of technologies, frameworks, and processes.
Exam duration per student for the oral exam:
20 minutes

Time and date