Course syllabus

Course Prescription

Developing maintainable software has been an ongoing challenge in the software industry. This course presents the principles and practices that have been proposed for developing maintainable software systems. It will evaluate and critique these principles and practices through examining their application in practice and through understanding the research on their effectiveness.

Course Overview

Software maintainability is the quality of how much effort is required to keep a software product useful. A challenge in the software industry is that the majority of the lifetime cost of software product comes after it is first deployed. The better the maintainability of the software the lower the future costs, so understanding how to develop maintainable software is crucial.

This course provides an in-depth look as to what it means for software to be maintainable. It presents the principles and practices that have been proposed for developing maintainable software. Students will learn to evaluate and critique these principles and practices through examining their application in practice and through understanding the research on their effectiveness. This will prepare students for developing high-quality software products in industry.

Course Requirements

Prerequisite: Approval of Academic Head or nominee

Capabilities Developed in this Course

Capability 1: Disciplinary Knowledge and Practice
Capability 2: Critical Thinking
Capability 3: Solution Seeking
Capability 4: Communication and Engagement
Capability 5: Independence and Integrity
Capability 6: Social and Environmental Responsibilities

Learning Outcomes

  1. Explain the importance of software quality to a successful software system(Capability 1 and 2)
  2. Explain the fundamental concepts and processes for developing maintainable software(Capability 1 and 2)
  3. Critically assess and communicate the maintainability of software systems according to standard or well-known criteria(Capability 1, 2 and 4)
  4. Independently apply appropriate principles and techniques to develop software that is maintainable or improve the maintainability of existing software(Capability 2, 3 and 5)
  5. Explain and critically evaluate some of the proposed criteria, principles, and techniques associated with software maintainability.(Capability 2)
  6. Develop and demonstrate a responsibility for creating maintainable software(Capability 1 and 6)

Assessment

Your final grade will consist of 100% coursework. There are 4 assignments worth a total of 50%, a Learning Journal worth 10%, and 2 tests worth 20% each.

Assignment 1 (10%):
  • Development of a tiny Java application
  • A short report explaining some of the decisions you made in the development of your application.
  • Due around the middle of week 2.
Assignment 2 (10%)
  • Details to be announced, likely to involve reading code written by other people
  • Due around the end of week 5.
Assignment 3 (10%)
  • Details to be announced, likely to be maintaining the code submitted for Assignment 1
  • Due around the end of week 7.
Assignment 4 (20%)
  • Details to be announced, likely to be maintaining the code submitted for Assignments 1 and 3
  • Due around the end of week 12.
Learning Journal (10%)
  • Keep a record of what you have learned, what you have done, and a reflection of how you are performing.
  • Details will be provided in lecture 1.
  • To encourage you to keep your journal up-to-date you are to submit your journal every 2 weeks (1% each) and then at the end of the course (5%)
Test 1 (20%)
  • During week 6
Test 2 (20%)
  • During week 12

Instructors

Course Coordinator
Yu-Cheng Tu, Room 303-517, yu-cheng.tu@auckland.ac.nz

Lecturers
  Yu-Cheng Tu, Room 303-517, yu-cheng.tu@auckland.ac.nz
  Ewan Tempero, Room 303-533, e.tempero@auckland.ac.nz

Lecture timetable:
Monday 10-11am, Rm: 303-B05
Tuesday 11-12pm, Rm: 303-B05
Wednesday 11-12pm, Rm: 303-B09

Topics

This is a graduate course, and so the specific material covered will depend on what the current research is to some extent. But the kinds of topics that might be covered include:

  • Program Comprehension
  • Testability
  • Modifiability
  • Code quality
  • Design quality
  • Code smells
  • Design patterns
  • Antipatterns
  • Clean Code
  • Clean Architecture
  • Refactoring
  • SOLID principles
  • Test-driven development

While students may have encountered some of these topics before, the course will take a critical look at their effectiveness, and the research that supports them.

Course summary:

Course Summary
Date Details Due