COMP3141 Software System Design and Implementation

COMP3141: Software System Design and Implementation

Term 2, 2022

Home

1 Welcome to COMP3141

Zoltan A. Kocsis [2022-05-29 Sun 10:00]

Nb. COMP3141 is not running this term, so the course materials are not available.

COMP3141 has a very vague course title, so many of you may be curious as to what this course is actually about, and what it involves. You may have heard that COMP3141 is a "Haskell course". In reality, it is a software engineering course that happens to use Haskell.

Here, software engineering does not refer to the mixture of project management techniques and object-oriented programming. Rather, we mean mathematically structured programming: rigorous software engineering using sound mathematical principles.

The course will cover a variety of programming techniques that make use of semi-formal and formal methods for the design and implementation of real-world software systems. It introduces approaches to testing informed by formal designs, and it covers trade-offs between static and dynamic approaches to improving software correctness.

Some of you may have learnt (or will go on to learn) about formal verification from other UNSW courses such as COMP4161. While this is an admirable pursuit, this course is not about formal verification either. Rather, we investigate the use of mathematically structured programming to deliver software that is more reliable, more verifiable, and more elegant.

Central to the notion of mathematically structured programming is the art of specification. Writing formal specifications and understanding their limitations is a central theme of this course. In the course, we will learn how to translate these specifications into meaningful artefacts that relate to a Haskell implementation, such as logical property-based tests, type-system enforced invariants, or proofs via equational reasoning. We will investigate design patterns based on mathematical ideas, and ways of thinking compositionally to produce working software in a bottom-up fashion.

We will meet online on Wednesdays (1300 - 1500) and Thursdays (0900 - 1100). The Wednesday lecture is a live online stream which introduces new concepts, while the Thursday practical lecture is a live online streams where you will work together with the lecturers to solve problems.

While there are no tutorials, the course involves a significant amount of programming, both during and outside of lectures. There will be weekly multiple-choice quizes (the difficulty of which is no joke: you will not be able to merely copy the answers from the lecture slides), as well as weekly programming exercises. In addition, there will be two substantial programming assignments.

2022-09-19 Mon 15:25

Announcements RSS