Note: This module is only available to students in the second year of their degree and is not available as an unusual option to students in other years of study.
The aim of the module is to provide students with a theoretical understanding and practical experience of current best practice in software engineering. The module concentrates on the application of software engineering principles to the development of a significant software system, with an emphasis on design quality, technical evaluation, team working and project management.
On completion of the module the student will be able to:
Understand the importance of the stages in the software life cycle, including a range of software development methodologies.
- Design object oriented software using with the aid of a formal system modelling notation.
- Understand the principles of graphical user interface design.
- Understand the principles of user-centred design.
- Critically evaluate their experience of practical software development with regard to project management, software processes and technical accomplishment.
- Understand, though experience, the practical challenges associated with the development of a significant software system, including a graphical user interface.
- Understand, though experience, the practical challenges associated with working as a member of a software development team.
Topic areas addressed are software development processes, feasibility and requirements analysis, modelling and design, implementation and design patterns, testing and analysis, maintenance and evolution. Each area will be covered from a theoretical and practical perspective, with a particular emphasis on concepts such as:
- Object oriented modelling and design: objects, classes, inheritance, polymorphism, aggregation, abstract classes.
- Formal notations for expressing issues relating to the analysis, design and implementation of systems, including classes, objects, sequences, packages, collaborations, activities, system states and components.
- Classical software engineering principles, including software processes, waterfall model, software life cycles, cost-estimation, safety critical systems, software testing and maintenance.
- Human computer interaction: human information processing models and memory, learning and skill acquisition; interaction styles; the graphical user interface; task analysis and user centred design; evaluation techniques.
- Techniques relating to the elicitation of requirements, including issues in process engineering, user-centred design and customer management.
- Architectural design and implementation technology selection, including the application of design patterns and frameworks for system design.
- Levels of system and performance testing, including unit, integration, system and user / acceptance testing.
Software process issues relating system documentation, evolution and maintenance.