6 points, SCA Band 2, 0.125 EFTSL
Undergraduate - Unit
Refer to the specific census and withdrawal dates for the semester(s) in which this unit is offered.
This unit develops the students' ability to design, implement and maintain moderately complex, realistically-sized programs using an Agile software development methodology. It builds upon the basic programming techniques introduced in introductory programming unit and offers the first introduction to the implementation of more complex real-world programs. Examples of such systems include compilers and interpreters, simulations, visualisation tools, drawing packages, database systems, graphical games. Such systems may be implemented in the context of non-traditional computing environments such as smartphone "apps". The unit may offer students the opportunity to get acquainted with a second programming language within the procedural-object oriented paradigm, such as C++, Python or one of their cousins, depending on the scope of the project chosen in a particular semester.
The unit bridges between core programming knowledge and the large-scale software engineering context. It will emphasise the implementation and use of intermediate to advanced data structures (such as search trees, hash structures, graphs and graph algorithms etc.) and the embedding into an actual computing system (i.e. interacting with the O/S, networking components etc).
At the completion of this unit, students should be able to:
- analyse a proposed software project, taking into account client, product, and team characteristics, and determine whether an Agile development approach is suitable for the project;
- design a moderately complex software system, using good object-oriented design. practices, and implement, test, and package this design for client deployment using a modern object-oriented development toolchain;
- apply appropriate Agile practices to manage a moderately-sized development project in a small team;
- identify and describe requirements, including non-functional and quality properties (such as efficiency and usability), for a software system, and evaluate design alternatives and their impacts on these properties;
- apply unfamiliar technologies in a software system, such as new languages, toolkits, or development tools, without extensive specific instruction in these technologies;
- reflect on a software product and the development process that created it, and identify opportunities for incrementally improving both.
Semester 1: Examination (3 hours): 50%; In-semester assessment: 50%
Semester 2: Examination (2 hours): 50%; In-semester assessment: 50%
Minimum total expected workload equals 12 hours per week comprising:
- Contact hours for on-campus students:
- Two hours of lectures
- One 3-hour laboratory
- Additional requirements (all students):
- A minimum of 7 hours independent study per week for completing lab and assignment work, private study and revision
See also Unit timetable information