Software Systems Development
Overview
- Credit value: 15 credits at Level 5
- Convenor and tutor: Professor George Roussos
- Assessment: a mini-project (50%) and two-hour open-book examination (50%)
Module description
In this module you will focus on developing your intermediate-level programming skills using the C programming language specifically as employed for the development of systems software. You will learn essential concepts such as data structures, pointers, memory management and secure coding practices. Through a combination of abstract knowledge and practical application, you will gain the skills necessary to design, implement and debug robust and secure software systems. Emphasis is placed on understanding and mitigating common security vulnerabilities, preparing you for advanced topics in cybersecurity.
Indicative syllabus
- Introduction
- Fundamentals of C programming
- Functions and modular programming
- Pointers and memory management
- Structures and unions
- File handling in C
- Advanced pointers and dynamic data structures
- Concurrency and multithreading
- Error handling and debugging
- Introduction to C++ for systems development
Learning objectives
By the end of this module, you will be able to:
- understand the C programming language and its application in software systems development
- apply knowledge of data structures, pointers and memory management to develop efficient and secure software systems
- analyse and evaluate common security vulnerabilities in C programs, such as buffer overflows and dangling pointers, and implement strategies to mitigate these risks
- critically evaluate software design and implementation strategies, applying theoretical concepts to practical scenarios
- formulate and test hypotheses related to software performance and security, using analytical skills to identify and resolve issues
- synthesise information from various sources to develop robust and secure software solutions
- develop and debug complex C programs, utilising appropriate tools and techniques to ensure code quality and security
- implement secure file handling and memory management practices in software development projects
- conduct thorough testing and debugging of software systems to identify and rectify errors, ensuring reliability and security.