Current postgraduate taught students
COMP61511: Software Engineering Overview (2010-2011)
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? need.
These goals are not easily realisable; most 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: Structure and agile practices.
In the structure part of the course we are concerned with a tool for thinking about, expressing communicating the design of systems considering system structure it is useful to have a notation that can be used at many levels of description, from describing aspects of user interaction, to system architecture, including distributed architectures, to selected aspects of system implementation. The standard diagrammatic notation in use for this is Unified Modeling Language (UML). UML is also used to abstract and describe patterns that re-occur in well-implemented systems, the topic for COMP61532
In the agile 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. In response to these and other constraints, Agile development methods concentrate on producing working code quickly, but in a disciplined way, in order that parts of a working system can be shown to stakeholders early and often. The correspondence between the actual functionality of the software and the customer's requirements can then be continually reassessed.
Software Engineering is inherently a collective activity, with project teams ranging from a handful of software developers to hundreds of professionals with specialised skills. Being able to work effectively in teams is a key skill. A large part of the course is concerned with developing this sill.
A major challenge in Software Engineering is to deal with the fact that requirements change sunstantially and frequently. In response to this, modern Agile development methods concetrate on producing working code quickly, but in a disciplined way, in order that parts of a working system can be shown to stakeholders early and often. The correspondence between the actual functionality of the software and the customer's requirements can then be continually reassessed.
Software engineers use many tools including diagrammatic notations (now standardised in the Unversal Modelling Language, UML) and software tools to facilitate all aspects of software developent.
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 considerable 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 detail.
? Implement systems in an agile test-driven fashion
? Learn teamwork skills
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 agile software development methods to software development.|
|C3||Use software tools for the production and automated testing in software projects.|
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 the main characteristics of agile methods, e.g. continuous stakeholder involvement, iterative and incremental development; behavior and test driven development and machine support for test automation. Introduce Agile management methods.
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.
Explain the concepts of software verification and validation, and ways of performing them. Outline the use of software tools to aid the process (practical experience of tools will be provided in the labs). 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.
Briefly discuss some of the wider context of Software engineering, for example ethical considerations, standards, and the role of software amd 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