The module is intended to develop an understanding of the problems associated with the development of significant computing systems (that is, systems that are too large to be designed and developed by a single person,and are designed to be used by many users) and to appreciate the techniques and tools necessary to develop such systems efficiently, in a cost-effective manner.
- Introduction (1 lecture)
- What is software engineering; the goals of software engineering;
- Why is software engineering important
- commercial considerations
- Waterfall Model, Evolutionary development, Formal systems development, Reuse oriented development, risk analysis
- what are requirements and why are they important
- requirements elicitation and validation
- user and system requirements
- functional/nonfunctional requirements
- security analysis and requirements
- techniques for describing system requirements
- Behavioural modelling, data modelling, and object modelling
- formal specification in the software process
- formal specification languages
- abstract state machine language
- design of software components and devices
- modularity as a tool for handling complexity
- unit versus system design
- properties of good design (cohesion, loose coupling,...)
- top-down design and its problems
- safety, correctness and security
- objects and classes
- public and private aspects of objects
- inheritance, aggregation and composition
- what is UML? - brief history
- object oriented analysis with UML : use cases
- object oriented analysis with UML : concept diagrams
- object oriented design with UML : collaboration diagrams
- object oriented design with UML : object models
- object oriented design with UML : state charts
- black box testing
- generating test cases: boundary analysis, equivalence partitioning
- white box testing
- security testing
- Overview of project stages, areas of risk in each stage
- Establishing a business case; establishing project objectives, goals, and measures of success
- Project planning and estimation; critical path analysis, risk identification
- Project monitoring; monitor and control finances; control, assure, and manage quality
- Ian Sommerville: Software Engineering (7th Edn). Addison-Wesley (2004).
- Perdita Stevens with Rob Pooley: Using UML: Software Engineering with Objects and Components. Addison-Wesley (1999).
- Martyn A. Ould: Managing Software Quality and Business Risk. Wiley (1999).
- Introducing AsmL: A Tutorial for the Abstract State Machine Language, Microsoft Corporation (2002)
- RS Pressman: Software Engineering: A Practitioner''s Approach. McGraw-Hill (2005).
- G Booch, J Rumbaugh, and I Jacobson: The Unified Modelling Language User Guide. Addison Wesley (1999).
At the end of the module, the student is expected to
- realise the problems in designing and building significant computer systems;
- understand the need to design systems that fully meet the requirements of the intended users including functional and non functional elements
- appreciate the need to ensure that the implementation of a design is adequately tested to ensure that the completed system meets the specifications
- be fully aware of the principles and practice of an O-O approach to the design and development of computer systems
be able to apply these principles in practice.
Students will be expected to attend three hours of formal lectures as well as to participate in one hour of supervised practical classes in a typical week. In addition, students will be expected to devote six hours of unsupervised time to private study: private study will provide time for reflection and consideration of lecture material and background reading.