Official course description:
Full info last published 15/11-19

DevOps, Software Evolution and Software Maintenance, BSc

Course info
Language:
English
ECTS points:
7.5
Course code:
BSDSESM1KU
Participants max:
40
Offered to guest students:
yes
Offered as a single subject:
yes
Price (single subject):
10625 DKK (incl. vat)
Programme
Level:
Bachelor
Programme:
Bachelor of Science in Software Development
Staff
Course manager
Assistant Professor
Teacher
Associate Professor
Teacher
Associate Professor
Course semester
Semester
Forår 2020
Start
27 January 2020
End
31 August 2020
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 a BSc 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  bi-weekly 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.
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 as 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 (7-trinsskala)
Exam variation:
D2G: Submission of written work for groups with following oral exam supplemented by the work submitted.
Exam submisson 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.
Group submission:
Group
  • 4-6 (preferred 5)
Exam duration per student for the oral exam:
15 minutes
Group exam form:
Group exam


reexam
Exam type:
D: Submission of written work with following oral, internal (7-trinsskala)
Exam variation:
D22: Submission of written work with following oral exam supplemented by the work submitted.
Exam submisson 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.
Exam duration per student for the oral exam:
20 minutes