Introduction to Software Systems COMP1110
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.
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.
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, 4th Edition, 2010 - recommended reading
Workload
Thirty one-hour lectures and nine two-hour tutorial/laboratory sessions


