Devops, Containers, & the Cloud

Fall 2020

1 Introduction

Overview

This module introduces you to the course organization, policies, and mechanics. We’ll review the structure of the course website and give you an opportunity to get set up for the semester to come.

We’ll take a brief look at the major themes and areas of emphasis that you can expect to hear more about through the coming semester.

Objectives

  1. Identify the requirements, protocols, and policies for the online course

  2. Use the selected technology tools for communication and collaboration

  3. Discuss the course themes and their relation to software development.

Relevance

An understanding of the tools used in an online course is fundamental in becoming a successful online learner. It is also important to identify the expectations for participation, assignment submission, and the time management skills required in the online format.

You can expect that professional software development will be quite different from typical academic programming assignments. This course will emphasize the tools and techniques that developers use on a daily basis, with an emphasis on automating best practices of software engineering.


  1. Read the syllabus.
  2. Read the communications policy.
  3. Introduction
  4. Take the Survey of Software Engineering Techniques, on Blackboard Due: 09/02/2020

2 Software Architectures


  1. Software Architecture Guide, Fowler, 2019
  2. Software Architecture: A Case Based Approach, Varma, ch 1
  3. 10 Common Software Architectural Patterns in a nutshell, Mallawaarachchi, 2017
  4. The top 5 software architecture patterns, Wayner, 2017
  5. Projects & Architectures
  6. Take the Demonstration Project Survey, on Blackboard Due: 09/12/2020

3 Agile Methods

Overview

Agile development is a set of practices centered on an incremental development model.

We will review the principles of agile, with particular emphasis on the skillset expected of agile developers.

Objectives

  1. Assess the impact of incremental models on a development project
  2. Discuss the philosophy and components of agile models

Relevance

Agile development is one of the dominant approaches to software development for moderately sized projects developed by small (4–12 people) teams.

Agile presumes a skilled development team, familiar with a variety of standard tools and practices, which we will also need to assume that students in this course are familiar with:


  1. The Agile Manifesto & Twelve principles
  2. Scrum Guide
  3. Incremental development
  4. Agile Development

4 Modern Software Construction

4.1 Unit Testing

Overview

In this section we will review the basic principles of unit testing, and then we will look at the problem of automating the testing oracle, the procedure of determining when our code has passed or failed each test.

This will lead us to the world of modern Unit test frameworks, which seek to make running tests so effortless that there is no longer any excuse to defer testing.


  1. Unit Testing Frameworks
  2. JUnit 5 Tutorial, HowToDoInJava
  3. Hamcrest Tutorial
  4. Martin, ch 9

  5. Wambler, Introduction to Test-Driven Development

  6. Test-Driven Development

4.2 Build Management 09/15/2020 - 09/21/2020

Overview

A build manager has the task of performing any automated steps required to rebuild a software project after programmers have made changes. We will look at the primary models for build management, file dependencies and task dependencies, and the most commonly used managers for each model. We’ll also look at how to replace an IDE’s built-in builder with a more flexible manager.

Modern projects now rely on build managers for much more than just the basic operations of compiling and linking. Build managers are also called upon to run tests, to prepare software packages for deployment, to deploy them, and to prepare project reports and post those reports to project web sites. These demands go far beyond the capabilities of the simple manager included in your IDE. Used properly, a build manger can save a team a lot of tedious work.


  1. Build Managers

  2. Gradle guide: Creating a New Gradle Build

  3. Gradle guide: Building Java Applications
  4. Gradle guide: Building C++ Executables
  5. Task Dependencies: Gradle

4.3 Software Configuration Mgmt 09/23/2020 - 09/30/2020

Overview

Software Configuration Management (SCM) addresses a wide variety of issues in the development of software. These include version control, studied earlier, but also the problems of coping with portability to multiple target platforms and the incorporation of externally developed code libraries into a project.

Version control is concerned with managing the history of changes made to the software by the development team. A good version control system offers a team control over the history, exploration, and collaboration on a project. We’ll look at the issues and approaches to local, centralized, and distributed version control, and explore how to work with a distributed version control system from an IDE.


Version Control

  1. Version Control
  2. Understanding Git Conceptually
  3. git -- Distributed Version Control
  4. Change Management
  5. Optional Lab: working with git
  6. Optional Lab: working with GitLab
  7. Installing a GitLab CI Runner on AWS

Continuous Integration

  1. Continuous Integration
  2. Optional Lab: Continuous Integration in GitLab

5 Devops

Overview

The merger of Development and Operations.


  1. DevOps
  2. What is DevOps?
  3. Virtualization
  4. System Testing

6 Presentations 11/09/2020 - 12/09/2020

Individual student presentations will take place over the final 5 weeks of the semester.

The order of student presentations will be based upon topics chosen – I will arrange them to provide as coherent an ordering as possible.


  1. Controlling Virtual Machines Programmatically: Perry 11/09/2020
  2. CI/CD Deployment to Docker Containers: Hallak 11/11/2020
  3. Alternative CI Services (e.g., Travis): Launi 11/16/2020
  4. System Testing of Web Applications: Gavindya Jayawardena 11/18/2020
  5. System Testing of GUI Applications: Tsalikis 11/23/2020
  6. Kubernetes and CI/CD: Yasith Jayawardena 11/30/2020
  7. The Default CI Pipeline for Gitlab: Mahanama 12/02/2020
  8. The Default CI Pipeline for GitHub: Garner 12/07/2020
  9. AWS Serverless Access: Siddique 12/09/2020

7 Assignments

  1. Sign-up for Lesson Plan topics, in Blackboard under “Lesson Plan Groups”, starting 09/21/2020
  2. Schedule individual meetings to review initial state of demonstration project with instructor. 10/12/2020 - 10/21/2020
  3. 1st draft of Lesson Plan Due: 11/02/2020
  4. Lesson Plan reviews: Due: 11/16/2020
  5. Revised Lesson Plan Due: 11/30/2020
  6. Schedule individual meetings to demonstrate project to instructor. 11/01/2020 - 11/30/2020
  7. Report on demo project Due: 12/11/2020

8 Preamble

This outline is under perpetual evolution.

8 Postscript

All times in this schedule are given in Eastern Time.

Symbol Key
lecture Lecture:
slides Slides :
event Event or important date
text Read
lab Do lab:
asst Assignment:
exam Take the
activity Do:
recitation In your recitation section:
construct Under construction:

9 Presentation

Topics Lectures Readings Assignments & Other Activities
topics lecture slides event exam video project construct text exam asst selfassess exam activity lab recitation
Document Kind Prefix
lecture Read lecture notes:
event
exam Take the exam:
lab Do:
asst Do assignment:
reading Read (optional):