-- Main.jens - 24 Feb 2019

Times and Venues

All lectures will be live and in person. The sessions will be recorded, the respective recordings will be available in blackboard. There are regular office hours both in-person in CO261 in the office and via zoom.

We will start with three lectures per week, depending on progress this could change.

When Where What
Monday 12 PM - 2 PM CO219 / zoom Lab / Helpdesk (starting in week 2)
Monday 2 PM - 3 PM LT002, Hugh Mackenzie, Kelburn Lecture
Wednesday 11 AM - 1 PM CO261 (Office Jens) / zoom Office Hours
Wednesday 1 PM - 2 PM CO219 Lab / Helpdesk (starting in week 2)
Wednesday 2 PM - 3 PM LT323, Hunter, Kelburn Lecture
Friday 2 PM - 3 PM LT002, Hugh Mackenzie, Kelburn Lecture

Topics by Week (tentative)

The links next to the topics point to the lecture slides in google docs format. If you cannot access the google docs service, please contact Jens and a PDF version will be made available.

Introduction: The Problem with Software (Week 1)
There will be no labs / help desks in week 1 !
We will discuss some of the challenges the software industry is currently facing, focusing on the need to manage change, and the problems caused by the increasing complexity of software as it does change. This discussion is used as motivation, and to define the scope, for the remainder of this course. [slides]

Architecture (Weeks 2-3)
We will discuss the high-level structure of a software system, the different views stakeholders have, and the models representing those views. The focus will be on the concept of (de)composition: an architecture describes how a system is composed from parts. Component diagrams will be used to document composition. Several popular architectural patterns are discussed, including layered, component-based and service-oriented architectures. Two case studies will explore the impedance mismatch between relational databases and object-oriented programs, and the concept of orthogonality in a real-world system. We will introduce some lightweight tools that can be used to reverse-engineer and assess the architecture of a system. [slides] [log4j case study]
Week 2 Lab: JDBC Primer, Week 3: Help Desk

Process Automation (week 4)
We discuss the automation of processes: automation keeps the per-iteration costs down, and is therefore a key aspect of modern agile software engineering. This part is tool-focused, using Maven. We will discuss how Maven uses a standardised IDE-independent project layout following a “convention over configuration” approach, and how it provides the backbone for additional tools to be used during automated builds via plugins. [slides]
Week 4 Lab: Maven

Web Application Design and Service-Oriented Architecture (weeks 5-8)
We introduce web server programming with Java, using JEE and the Tomcat web server. This serves as a case study for many of the concepts discussed earlier, showing a complex design that uses a contract between an application (“servlet”) and a container component. The template-based JSP domain-specific language to write web applications is introduced. We discuss how modern web applications have evolved to interactive one-page applications (using AJAX and related technologies), and how this has then developed into a modern service-oriented approach where applications both provide and consume web services specified by APIs. Several protocols, data formats and standards used in this technology stack such as HTTP, JSON and OpenAPI are discussed. [slides-part1][slides-part2][slides-part3]
Week 5: Help Desk, Week 6 Lab: Log4, Week 7 Lab: Servlets, Week 8 Lab: HTTP Services

Software Quality Assurance (week 9-10)
We discuss different approaches to software quality assurance, including static and dynamic program analysis methods, and their tradeoffs. The focus is on automated regression testing, but we also discuss static analysis, logging, monitoring and profiling. Metrics to assess test quality (coverage) and approaches to test components within complex dependencies (mocking) are discussed. [slides]
Week 9: Help Desk, Week 10: Help Desk

Components and Evolution (weeks 11-12)
We discuss core ideas of component-based software engineering, and methods how to manage the evolution of software components. This focuses on the notion of incompatible changes, and how this can affect other components. The concepts discussed in this part are illustrated using Maven's repository-based dependencies management. Semantic versioning is introduced as an approach that can be used to optimise dependency management.[slides]
Week 11: Help Desk, Week 12: Help Desk