Skip navigation
The Australian National University

Introduction to Software Engineering COMP1510

Course overview

Course description

This course introduces students to the tools and techniques for developing software systems of a size and quality of an industrially relevant nature. The course teaches the fundamental strategies of abstraction, decomposition and reuse as methods for constructing such systems. Verification and validation techniques, with an emphasis on testing, are taught as a means to ensure that students are able to deliver software products of the quality required. It also introduces students to the principles and practices of software engineering.

In particular, the course will cover: recursive data structures and algorithms; structured data types, abstract data types and their applications; object-oriented programming; and software life-cycle. The course will also introduce some of the theoretical fundamentals that underpins software engineering, including: reasoning about software and its application to specifications, and verification and validation.

Rationale

Industrially relevant problems typically require programs of a size and complexity that renders undisciplined approaches to their construction destined to failure. This course teaches the fundamental strategies of abstraction, decomposition and reuse as methods for overcoming these problems.

A second course in software construction, this course assumes that students have completed COMP1100 and therefore have already acquired basic programming skills.

Ideas

This course will carry the main responsibility for:

  • introducing the general idea of abstraction as a tool for combating complexity in systems (data abstraction, design by contract)
  • developing a stepwise refinement approach to implementing large programs
  • describing the software development life-cycle as a model of the process of software construction
  • introducing formal systems and notations as a software-engineering tool

Topics

The following topics will be covered:

  • Principles of Object Orientation classes, objects, interfaces, abstract classes, inheritance
  • Basic Data Types and Abstract Data Types floating point numbers, integers, booleans, strings, arrays, lists, tables, and trees; their algebraic properties and use in problem solving
  • Representing Data and Algorithms iteration, big-O notation, serial and binary searching, simple sorting algorithms
  • Recursive Algorithms and Data Structures comparison with iteration, connection with induction
  • Muti-Threading basics of thread creation, and race conditions
  • Formal Languages simple regular expressions, UML
  • Software Quality including software engineering approaches, testing strategies (unit, integration, system), programming by contract, pre- and post-conditions, loop and class invariants

Technical skills

Upon completion of the course the student will be able to use a modern GUI-based computer system (Linux, Ubuntu) to perform the following tasks:

  • manage, transfer, and organize files within a file system,
  • compile and run programs from the command line, and
  • use a development environment, such as eclipse, for software development.

Textbooks

Horstmann, Cay Big Java , Wiley, 4rd Edition, 2010

Workload

Thirty one-hour lectures, nine two-hour tutorial/laboratory sessions and three two-hour seminars.

Responsible Officer:  JavaScript must be enabled to display this email address. / Page Contact:  JavaScript must be enabled to display this email address.