Version: $Id: sc0910.text 5437 2010-03-11 13:36:03Z storm $
This documents aims to cover all information concerning the course Software Construction 2009-2010.
Lectures and workshops will be from 9:00-11:00 on Mondays. Lectures will be given by Paul Klint, Jurgen Vinju and/or Tijs van der Storm.
Primary contact for this course is .
Required skills:
Required knowledge:
Pre conditions for getting a grade:
You will be graded on the following course assignments:
The grade is computed using the following formula: 0.7 * L + 0.3 * P. For all assignments a minimum grade of 5.5 is required to pass the course.
Date: 22nd of March, 13:00 - 17:00.
Location: lab room.
The goal of the code review workshop is to encourage critical thinking with respect to code quality and low level design. Important questions are: what is code quality? What are relevant quality attributes? How about code smells? How can you improve the design of existing code? Etc.
The structure of the workshop will be as follows:
13:00 The first hour, we will collectively make a list of code attributes that you deem important for code quality.
14:00 short break/formation of teams of two persons.
14:15 Each team member will review the other team member's Logo implementation, guided by the list of quality attributes. Make notes so that you will be able to provide constructive feedback later. Teacher(s) will be around for assistance and discussion.
15:15: short break
15:30: Provide feedback on the design and code quality to your team member. Be criticial, but constructive: your team member should be able to use your comments to improve his code.
16:30: Closing.
NB Participation is mandatory!
During the course you will be tested on understanding the concepts and ideas of McConnell's Code Complete. Every week (6 weeks in a row) there will be an on-line test on Monday or Tuesday, according the following schedule:
Each workshop, two topics will be presented by two teams each. The topics are centered around a thesis concerning the advantage or disadvantage of a certain technique or approach in the domain of software construction. The first team will argue for the thesis. Then, the second team acts as opposition and will give a presentation arguing against the thesis.
Each team consists of two members. Topics are to be selected from the list at the end of this document. The references listed there are required reading for EVERYONE. It is, moreover, required to find at least two other papers related to the position you are defending.
Guidelines for giving the presentation:
Presence during the workshops is required. The presentations will be graded by teachers present.
The assignment to develop an interpreter for the programming language Logo. You are required to develop this interpreter in Java, and you are required to use Eclipse as IDE.
Logo is a language primarily known for its turtle graphics. See e.g., Logo for more information.
Required user interface features:
Required Logo language features
As a reference for these commands and features, see the UCB Logo. You may implement more language features at will.
Required components
You are encouraged to use a parser generator for the parser component (e.g. ANTLR, JavaCup, JavaCC, Rats! etc.).
Procedure calls as Expressions
You may assume that procedure calls with one or more arguments within infix expressions are surrounded by parentheses. E.g.:
f :x + 3 // ast = [f, +(x, 3)]
3 + f :x // ast = [+(3,f), f]
f :x :y :z + 3 // ast = [f, x, y, +(z, 3)]
3 + (f :x) // ast = +(3, f(x))
Procedure calls without arguments do not require parentheses:
3 + f // ast = +(3, f())
So, a list of arguments is a list of expressions and a procedure call with arguments is only an expression if surrounded by parentheses.
NB: don't forget that other (infix) expression can be nested without parentheses and that you have to think about operator associativity and precendence:
1 - 2 - 3 - 4 // ast = -(-(-(1, 2), 3), 4)
I.e. Subtraction is left associative.
Optional parameters
UCB Logo allows optional and rest arguments in procedure definitions; you do not have to support this.
Unparsed Lists
In Logo, instructions like "if", "ifelse" and "repeat" reparse the contents within brackets ([]) at runtime. You are allowed to parse these lists as code up-front.
We take the principles laid down in Code Complete as guidelines when grading your solutions. More specifically, the following aspects of quality code will be our focus:
In addition, you are yourself required to review someone else's implementation on exactly these matters. This code review will be performed on-line using Blackboard and will be graded (as indicated above).
NB: high performance and fancy GUIs will not contribute to your grade, so you are advised not to waste time on those aspects.
The (tentative) deadline for the lab assignment is: 31st of March 2010.
IMPORTANT: You are required to complete the lab assignment individually.