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

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.

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)

Dr Elisa Baniassad (lecturer, weeks 3–6)

Tutors:

not yet final as at 18/2/12

Web Site:

The website is in Wattle.

E-mail:

comp2100@cs.anu.edu.au


Three courses together: COMP2100, COMP2500, COMP6442

COMP6442 has the same content as COMP2100, in the same shared classes. COMP2500 will be mostly the same as COMP2100 and the three courses will be run together.
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 instead; if yo 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 2011

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
    tests learning objectives 1, 2, 3, 4, 5

  2. selected homework tasks
    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, 28 March at 9am in the Physics Lecture Theatre - same place and time as the normal lecture class.


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 (7th edition)
    Herbert Schildt
    McGraw-Hill 2007

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

    Horstmann is not as good for reference as Schildt

  3. Introduction to the Personal Software Process
    Watts S. Humphrey
    Addison Wesley, 1997.

  4. The Pragmatic Programmer
    Andrew Hunt & David Thomas
    Addison Wesley, 2000.

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

  6. Code Complete
    Steve McConnell
    Microsoft Press, 1993.

  7. 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

  8. 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.
  2. Object-Oriented Software Construction (second edition)
    Bertrand Meyer
    Prentice-Hall, 1997.

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.

  1. Monday 1 pm, Physics Lecture Theatre

  2. Tuesday 4 pm, Physics Lecture Theatre

  3. Wednesday 9 am, Physics Lecture Theatre

As there are 13 weeks and 3 lecture times per week, that would give 39 lecture times in all. At the moment I plan to have 33 lectures including review lectures. Some of the 33 are reserved for COMP2500 communications skills and presentations. Week 9 (30 April) will be free of lectures - this date to be confirmed.
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 one of the homework exercises will be on the final exam, only slightly modified.

Each homework exercise consists of a small Java program that you have to write. Once you have started learning the PSP (that is, starting next week), you should follow the prescribed process carefully while you write the program, recording the time you spend in each phase of development, and also recording all the errors you make. This will make you a much better programmer— guaranteed. For more information, see the Homework Page.

There is a Wattle activity each of the early weeks that asks you to note your estimates of size and time needed, and the actual size and time, and the defects (errors) for that week's homework. This activity does not count towards your final mark, but it's a reminder to estimate and log to help you improve yourself.


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 2012 is to continue the development of a prototype preview system for users of SVG, 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 renbdered 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.

We will do this using some pre-existing software and some software written specially for this purpose. 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, but instead working on some crucial stages in the development.

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 prototype performs some of the functions of the finished program, but lots of features are missing. Your task in the Assignment will be to expand the program in some major way. This will certainly mean grappling with the parse tree used to represent the document's structure. The parse tree is an example of a recursive data structure, one of the key ideas in this course.


The Personal Software Process

The PSP is a recommended part of COMP2100/2500/6442, but it will not be assessed.


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 Franciso 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
[which means 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

There is only one of me, and 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 DCS office.

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 –2011 Ian Barnes, Alexei Khorev, and Chris Johnson, The Australian National University
Version 2011 $Revision: 2.12 $ $Date: 2011/02/16 $
Feedback & Queries to comp2100@cs.anu.edu.au