ANU CECS FEIT DCS
Software Construction COMP2100/2500/6442 in 2013

Lecture 1: Introduction

these notes summarise important administrative matters for the course

Table of contents

Acknowledgement

We acknowledge and celebrate the First Australians on whose traditional lands we meet, and whose cultures are among the oldest continuing cultures in human history.

Prerequisites for this Course

What you need to know before you can start this course (the prerequisite knowledge) is an introductory skill with object oriented programming, such as the course COMP1110, 1510 or COMP6700.
The courses COMP1710 or COMP6720 are not enough!
you need to be able to design and implement programs in a language like Java (or C++ if you insist).
How complicated?

If this description does not fit you — see me at the end of this lecture.

Lecture 2 Tuesday (tomorrow) will include a self-diagnostic quiz - no marks.
Preparation: if you haven't done any programming this year, do a little revision.

Summary

An introduction to the course, including discussion of the proposed assessment scheme, the textbooks, labs and tuts, roles and responsibilities of teachers and students.

Aims

Extra notes for this lecture


Important information

Lecturers:

Associate Prof Chris Johnson(course convener and main lecturer)


Tutors:

Toktam Ebadi  and Yi Lin

Web Site:

The website is in Wattle.

E-mail:

comp2100@cs.anu.edu.au


Three courses together: COMP2100, COMP2500, COMP6442

The three courses will be run together, and all classes are mixed.
There will be some extra content and some extra assessment for software engineers in COMP2500 — as befits your elite status, abilities and responsibilities.

There is no choice as to which course you enrol in.
If you are doing the Bachelor of Software Engineering, you must enrol in COMP2500.
If you are not doing the software engineering degree, you are not allowed to enrol in COMP2500, you must enrol in COMP2100;
if and only if you are a Masters student, you must enrol in COMP6442.

All three courses will do the same homeworks and share the same major assignment project.


Learning outcomes

revised in 2012

The planned learning outcomes for the course are that students should be able

1. construct and modify
to construct and modify small to medium scale computer programs
  1. apply all aspects of software construction for a representative variety of small to medium scale object-oriented programs up to around 300 lines of code containing up to 7 classes;
  2. to make modifications (including source code design, implementation, and testing) within a moderate-sized Java program system (103 (1000) to 104 (10,000) lines of code), given a documented specification, design and implementation of the system
  3. to have elementary or better competence with standard software development tools and methods: text editor, compiler, integrated software development environment, command line scripting, automated build tools, version control, unit test design, code review
  4. to use and analyse a personal software process in constructing small computer programs
2. abstraction
to compare several forms of abstraction in object-oriented software design and construction:
inheritance, generic types, polymorphism, procedural abstraction, abstract recursive data structures (including abstract syntax trees);
and to apply them appropriately in constructing programs.
3. knowledge resources
to be familiar with common programming knowledge resources to find, understand, and apply online manuals and tutorials for software tools, programming language components, and software libraries
4. principles and practice of software construction tools
to describe the underlying principles of three major aspects of software construction and to apply the appropriate tools:
  1. version control (using the Subversion tool)
  2. unit testing (using the JUnit tool)
  3. automatic build process (using the Make or Ant tool)
5. Reading knowledge of UML class diagrams as a design notation.

Proposed assessment

See the Wattle-linked Assessment Page for details.

The assessment items for comp2100, comp2500, comp6442 are

  1. assignment x 2
    tests learning objectives 1, 2, 3, 4, 5

  2. selected homework tasks (10 of 12)
    test learning objectives 1, 2, 3,4, 5

  3. midsemester theory exam
    tests learning objectives 2, 4 and 5

  4. final practical lab exam
    tests learning objectives 1, 2, 3

  5. final theory exam
    tests learning objectives 2, 4, 5

COMP2500 also has assessments

  1. team research topic presentation
    tests learning objective XX (research and verbal and visual presentation)

  2. individual report on another presentation
    tests learning objective YY (written report)

Only a selection of the homework programs will be assessed: your best 10.

Midsemester Test

currently planned for Wednesday week 6, 27 March 2013
in John Dedman 102, 12 noon—same place and time as the normal lecture class.
not 28 March at 9am in the Physics Lecture Theatre


Textbooks

There will be no required texts for Software Construction in 2012. None of the available books covers everything we are going to do, so you would have to buy several. Instead the course web site will contain comprehensive lecture notes, and you will be introduced to the common working software developers' resources: online tutorials and software documentation.

If you want to buy a book consider one or more of the following recommended books:

  1. Java the Complete Reference (8th edition)
    Herbert Schildt
    McGraw-Hill

  2. Big Java (3rd edition or later )
    Cay Horstmann
    Wiley

    Horstmann is not as good for reference as Schildt

For further reading or your own development:
  1. The Pragmatic Programmer
    Andrew Hunt & David Thomas
    Addison Wesley, 2000.

  2. Beautiful Code
    Andy Oram and Greg Wilson
    O'Reilly 2007

  3. Code Complete
    Steve McConnell
    Microsoft Press, 1993.

  4. The Pragmatic Starter Kit Series.
    Volume I: Pragmatic Version Control (Subversion) by M. Mason
    Volume II: Pragmatic Unit Testing (JUnit) by  A. Hunt &D. Thomas
    Volume III: Pragmatic Project Automation (Ant) by M. Clark
    The Pragmatic Bookshelf, 2004-2005

  5. or see The Pragmatic Programmer web site.

Other references:

  1. Extension reading: one or two references each week are linked as Extension readings.
    See the Wattle weekly topics. Reading these industry-related blogs and thought pieces is recommended to get you thinking outside the merely technical, and it's a good preparation for thinking about why we program in abstractions.
    COMP2500 extra task will expect you to have read the extension readings and explored further.

For more information on reading material, names and library codes of other relevant books, see the Lecture Notes by Topic page.


Classes: Lectures and Labs

Class times, topics, and the schedule of the course all come together on the COMP2100/2500/6442 Schedule Page.

Lecture Times

The lectures help you learn all of the theory and the basic ideas of the practice objectives. They contribute most to learning objectives 1, 2, and 4. Note the lecture rooms—the lectures on the ANU timetable site display out of order

  1. Monday 11 am, John Dedman 101

  2. Tuesday 1 pm, John Dedman 101

  3. Wednesday 12 noon, John Dedman 102

As there are 13 weeks and 3 lecture times per week, that would give 39 lecture times in all. I plan to have 33 lectures including review lectures. Two of the 33 are reserved for COMP2500 communications skills and presentations.
See the Schedule Page for the latest up-to-date information which will be updated frequently.


Laboratory Practical Classes

The labs are designed to follow soon after the lectures on the same topic, so that you can develop what you are learning in practice.
You will generally work in small groups, intensively, sharing, learning and presenting your results to the class. These are dynamic, sometimes noisy, creative small group work, for experimenting and learning from each other.

Lab class are 2 hours long, in even numbered weeks of the teaching semester 2,4,6... (odd numbered weeks of the year).


Paced learning programming exercises (Homework)

Homework is designed for practising and developing your programming skills. Not all of the exercises are compulsory (it's only a few marks) but I reckon they are essential.

Students in previous years said that doing the homework was one of the most helpful parts of this course. It improved their skills and confidence enormously. To provide an added incentive for you to do the homework, I guarantee that the final prac exam will be very similar to one or more of the homework tasks.

Each homework exercise consists of a small Java (or bash shell) program that you have to write, or test, or both. But there is more than just writing a program, any old way you can. You will use a Developer's Log to record estimates and activities while you work on the task.
You will log a record of the time you spend in each phase of development, and also all the errors you make. This will make you a much better programmer— guaranteed. For more information, see the Homework Page.

Homework 01 is due before 9am on Monday 25 February (submission through Wattle).
Later homeworks are all due at the same time Monday mornings with submission through Subversion version control system.

FAQ: Why aren't  all the homework specifications released at the start of the course?


Course content - the Technical stuff

The technical matters we'll cover are basically methods and techniques for constructing software, starting from a given high-level design. These methods become more important the larger the software you are working on.


The Project

One of our main aims for this course is to give you an opportunity to develop experience and competence in working with larger programs. To do this we have structured the assignments around a project, to which you will contribute some development.

Since most of the technical topics we have to cover are independent of each other, we have scheduled the lectures and labs so as to give you the information and skills you need for each stage of the project, when you need them.

The project for 2013 comes in two parts. The first is to modify and extend an existing program, which is is a prototype preview system for users of SVG. SVG is the scaled vector graphics format for graphics files. The scenario is that designers prepare their pictures using a drawing application, or by hand. The resulting document describes a picture that can be rendered by many Web browsers and other tools. Our tool called Gaga is a simple renderer, implemented using Java Graphics 2D but you will be adding functionality to transform the pictures in several ways and to add extra effects.

The second assignment has a choice for you. If you do well on the first assignment you can choose to implement a new tool from scratch, to read, visualise and manipulate some other form of XML-formatted data from an existing (public) domain that you get to find and choose. This NewTool option is open only to those who achieve a mark of 70% or better in the first assignment.
The alternative is to continue with further work on the SVG Gaga tool. All students are free to choose this option.

Gaga is built using some pre-existing software and some software written specially for this purpose. The NewTool option for assignment 2 will be built on the same foundations and will be required to use similar methods.
The first step in the processing scans and parses that XML format to produce a data structure called a parse tree, represented in a recursive data structure called an abstract syntax tree. The next step is to manipulate that tree to render the picture, or to produce descriptions of new modified pictures, and to extract information (like structural measures of the SVG source, and metadata). You will be working on a Java program that performs all these steps from the scanning onwards to processing the document structure, analysing it, modifying it, rendering with Java graphics, and converting the document into a different formats.

While this is a fairly small software construction task — the finished program will consist of a few tens of classes and a few thousands of lines of code — it is far beyond what most COMP2100/2500/6442 students could do in a semester. So you will not be building the whole program from scratch, however attractive that challenge might be.

If you like, you can think of this as what might happen if you were a programmer working in a group. The plan for the group is to develop the software in stages. When you join the group, others have already constructed a prototype that performs some of the central functions of the finished program.


The Developer's Log and Personal Development

Lecture 2 will demonstrate the Developer's Log. You will submit a log page with each homework program.


Responsibilities

A course like this cannot work without everyone involved taking responsibility for their part.

Your responsibilities:

Plagiarism in Programming Work

See the Plagiarism and Academic Dishonesty Notes on the Wattle course website. It says in part:

You are expected to work together to study, it's really useful. But it's only OK to go so far, and no further. You have to stop before you work up the solution to the assignment together. How far can you go in a group? Here are some guidelines from the San Francisco State University Dept of Computer Science:

it is acceptable to discuss the meaning of assignments and general approaches and strategies for handling those assignments with other members of the Academic Community
[this means other students, staff, tutors, anywhere in the university or beyond: in residential college, a private paid tutor, another university, on the Internet].

Any cooperation beyond that point, including shared pseudocode or flowcharts, shared code, or shared documentation, is only acceptable if specifically so permitted by the class instructor in written guidelines distributed to the entire class
[in COMP2100/2500/6442 this means:
    only when the assignment specification or conditions say:
    "this is a group or team assignment" and not in any other case].

San Francisco State University Dept of Computer Science Department Policy on Academic Cheating and Plagiarism.
[The explanatory parts in square brackets were added by Chris Johnson ANU]

Our Responsibilities

We (lecturers, tutors, the department, the university as a whole) have responsibilities to you and to the wider community. These are sometimes in tension.

To you:

To the community:


Our expectations

I am only one person, and there are many of you. In order for us to get along this semester, you need to know what I expect of you, not just for assessment, but also in terms of behaviour.


Division of administrative responsibilities

Contact your tutor for all questions about: labs, your assignment marks (in the first instance).

apply for Special Consideration (extensions etc.) using the form at the RSCS office or ANU website: the form is called Application for Special Consideration in assessment and it applies to assignments as well as final exams and midsemesters.

Contact CECS Helpdesk (the technical support group- the sys admins) for anything operational with computers and labs.

Chris Johnson for anything to do with the content of the course and assignments.


Suggested reading for this week

do Homework number 1 this week


Copyright © 2006 –2013 Chris Johnson, Ian Barnes, Alexei Khorev, The Australian National University
Feedback & Queries to comp2100@cs.anu.edu.au