Current postgraduate taught students
COMP61511: Software Engineering Overview (2012-2013)
Software Engineering is a discipline concerned with all aspects of software production. The goals of software engineering are to produce software products are maintainable, dependable, efficient and meet their users? needs.
These goals are not easily realisable; many software engineering projects fail in some way. The goal of this course is to provide an introduction to important topics in the field of software that assist in the production of systems. Particularly these can be grouped under two broad banners: software design and teamworking.
The standard diagrammatic notation in use for software design is the Unified Modeling Language (UML). UML is also used to abstract and describe patterns that re-occur in well-implemented systems, the topic for COMP61532. However, only a small subset of UML notation is required in the vast majority of situations, and only this subset will be used in this course.
In the practical part of the course we are essentially concerned with two major challenges in software engineering: dealing with the fact that requirements change substantially and frequently, often during development, and the actual business of producing reliable and maintainable systems in an efficient way. Doing this requires effective teamworking as well as technical skills. We will use some ideas from Agile development to facilitate this; Agile methods will be covered much more deeply in period 4.
Software Engineering is inherently a collective activity, with project teams ranging from a handful of software developers to hundreds of professionals with specialised skills. Ethical and other social issues must frequently be addressed as well as technical ones.
Essentially the course unit aims to introduce students to current best practice in Software Engineering. It is designed to be useful to students who have Software Engineering experience and those who have none (with the expectation that the former will help the latter).
Specifically, the aims are for students to:
? Think about systems at multiple levels of abstraction and from multipe perspectives.
? Implement systems which, due to good design, are easy to change and mantain.
? Learn teamwork skills in a multilingual and multicultural environment.
These topics will stand students in good stead in the entire ACS course and beyond in professional practice.
|Programme outcome||Unit learning outcomes||Assessment|
|B2 C1 D1||Work in a team to solve a non-trivial software development problem.|
|B3||Use Unified Modeling Language (UML) notation to help describe requirements and to construct and evaluate software designs.|
|A2 B2||Apply modern software development methods, including aspects of Agile methods to software development.|
|C3||Use software tools for software production and testing.|
Introduce Software Engineering, comparing and contrasting it with other Engineering disciplines. Explain the fundamental problem of requirements change, and the problems this causes for traditional software development processes. Introduce the Agile approach to software development, and some of the main characteristics of agile methods, e.g. continuous stakeholder involvement, iterative and incremental development and Physicality. The Agile UP will be used as an example of a traditonal process applied in an Agile way.
Explain (and advocate!) the Object Oriented approach to software development, particularly Responsibility Driven Design. Introduce a minimal subset of UML notation that covers most practical cases, and illustrate its use in requirements capture and software design. The GRASP (General Responsibility Assignment Software Patterns) principles will be used as the basis for discussing software design. These are also the underlying principles on which design patterns are based.
Explain the basics of software testing, in particular unit testing with JUnit. In this course a traditional approach to testing will be taken, where tests are typically written after the code to be tested, but by a different person. The alternative, Test-driven development, will be explored in the Agile course.
Discuss some of the wider context of software engineering, for example user and stakeholder considerations, standards, and the role of software, and software engineers, in large organisations.
Core TextTitle: Applying UML and patterns: an introduction to Object-Oriented analysis and design and iterative development (3rd edition)
Author: Larman, Craig
Publisher: Prentice Hall
Also useful for COMP61532