Principles of Software Engineering

Module summary

Module code: COMP1821
Level: 4
Credits: 15
School: Liberal Arts and Sciences
Department: Computing and Mathematical Sci.
Module Coordinator(s): Elena Popa


Pre and co requisites

Some coding experience in any language (Paradigms of Prog. (T1))


Distinguishing between software programming and an engineering approach to the development of software systems is crucial to producing quality software. Software Engineering is at the core of any software development project and to succeed in this domain requires an understanding of the fundamental software engineering models and methods used, and an appreciation of the challenges involved in applied practice. Specialist knowledge and practical skills in this area are therefore in high demand.
This module aims to introduce disciplined approaches to software development and provide solid foundation in the concepts, practices and management of software engineering. You will gain an appreciation of the intrinsic challenges of greenfield and brownfield software development and will develop an understanding of the core concepts that underpin current software engineering practice. Strong emphasis is on the practical application of these principles to the development of a significant software system within a team. You will gain hands-on experience using tools and techniques commonly used in the industry, and dealing with the reality of team- based software development. The module prepares you for future work within multi-functional teams and will help broaden your employability prospects by building the core skill set needed by software engineers and
members of development projects.

Learning outcomes

On successful completion of this course a student will be able to:
1 Describe and compare different software process models and explain the merits and constraints of the various approaches (e.g. plan-based vs. agile-based).
2 Describe the software lifecycle and the activities associated with each phase.
3 Critically evaluate and apply choice of model for given real-world specifications and requirements.
4 Justify and use appropriate tools and techniques to enhance productivity and quality of software development.

Indicative content

This module will cover full-cycle software engineering, including but not limited to:
• Software Engineering Key Practices and Challenges
(The project, the people, the process, the product and the problem. The multidisciplinary nature of software design, Team work, Productivity, Legal, Ethical and Professional issues, etc.)
• Software Process Models (Traditional and contemporary processes. eg. Waterfall; VModel; Iterative models: RAD, Prototyping, Agile; CMM, RUP, etc.)
• Software Product Life Cycle (Requirements analysis. Feasibility. Specifying requirements. Designing principles (S/W reuse and evolution). Testing. Product maintenance. Documentation.)
• Validation and Verification
• Tools and Environments (eg. Upper/Lower CASE tools, shared repositories to support collaborative and incremental development)
• Project Management (introduction to project estimating and planning, cost modelling, basic project/product
risk management, quality assurance)