-- Main.jens - 24 Feb 2019

Times and Venues (Updated 27 April)

Lectures will be prerecorded and made available early enough so that they can be watched before the office hours during the original lecture slots. Office hours can then be used to ask questions about the current lectures. Office hours are open-ended, i.e. will be extended as needed. Please make appointments if you want to talk in private by email, or request a private zoom conversation during office hours.

When Where What
Monday 11 AM - 1 PM Zoom Helpdesk / Lab Orlando
Monday 2 PM-3 PM Zoom Office Hours / Lecture Q & A Jens
Tuesday 11 AM - 1 PM Zoom Helpdesk / Lab Lana
Wednesday 11 AM - 1 PM Zoom Helpdesk / Lab Sherif
Thursday 11 AM - 1 PM Zoom Helpdesk / Lab Ben
Thursday 2 PM- 3 PM Zoom Office Hours / Lecture Q & A Jens
Friday 11 AM -12 PM Zoom Helpdesk / Lab Lana
Friday 12 PM - 1 PM Zoom Helpdesk / Lab Orlando

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 use the PDF files in the attachment section at the bottom of the page.

Introduction: The Problem with Software (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 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. A case study on the impedance mismatch between relational databases and object-oriented programs illustrates the complexity of interfaces between parts of a 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

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

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

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

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

Tutorials / Labs (tentative)

Recorded Tutorials Walk-Throughs

Week 3: JDBC details
Week 4: Maven details
Week 5: Assignment 1 Helpdesk
Week 6: Assignment 1 Helpdesk
Week 7: Assignment 1 Helpdesk
Week 8: Servlets details
Week 9: HTTP Services details
Week 10: Assignment 2 Helpdesk
Week 11: Assignment 2 Helpdesk
Week 12: Assignment 2 Helpdesk
Topic attachments
I Attachment Action Size Date Who Comment
SWEN301 - Introduction - The Problem with Software.pdfpdf SWEN301 - Introduction - The Problem with Software.pdf manage 3 MB 02 Mar 2020 - 14:26 Main.jens  
SWEN301 - Log4J Primer.pdfpdf SWEN301 - Log4J Primer.pdf manage 480 K 23 Mar 2020 - 18:41 Main.jens  
SWEN301 - Process Automation.pdfpdf SWEN301 - Process Automation.pdf manage 493 K 23 Mar 2020 - 18:40 Main.jens  
SWEN301 - Software Architecture.pdfpdf SWEN301 - Software Architecture.pdf manage 601 K 10 Mar 2020 - 12:07 Main.jens