Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: THEend8_
1. General Course Information
1.1 Course Details
Course Description: Software systems are often composed of a heterogeneous network of inter-related systems. In this course you will build upon the knowledge and skills you have developed so far to learn how to design complex systems. This will include how these systems communicate and coordinate their responsibilities. You will learn design techniques to manage the complexity of large systems. You will learn how to assess and manage software risks (e.g.security, scalability, availability, resilience, robustness). You will apply these techniques to build a system composed of heterogeneous computing devices (e.g. mobile devices, servers, cloud-hosted services). You will learn how to apply systems thinking to design large-scale cyber-physical systems.
Assumed Background:
You are assumed to have a strong background in software development. You are expected to have worked on at least one substantial software project, involving a team of members and thousands of lines of code. You should be able to design a software application consisting of several interoperating classes.
1.2 Course Introduction
Large software systems are composed of interacting components. This is the case even if the system is only a single executable running on one computer. More sophisticated systems take advantage of the ability to distribute processing behaviour across hardware optimised for different parts of the system. In this course you will learn how to design "in the large". You will learn how to design components and their interfaces so that you can build complex systems. You will learn how to choose appropriate architectual patterns to structure systems that meet both functional and non-functional requirements of a system.
You can view this course as a capstone of your program. It integrates and extends the knowledge and skills you have developed so far.
Course Changes in Response to Previous Student Feedback
Assessment has been redesigned based on feedback and observation of student engagement with the course. The cloud infrastructure assignment has been staged to make progressive development towards the final solution easier.
Practical work has been turned into a streamed example of building a cloud-based application.
Course material has been updated to provide better coverage of some topics.
2.1 Course Aims
Upon successful completion of this course you will be able design complex software systems. You will understand how different architectural patterns support delivery of different design goals, and how to choose a pattern that is appropriate in your system's context. You will be able to evaluate the architecture of an existing system to assess how well it achieves its design goals. You will know how to apply security principles to deliver secure systems.
2.2 Learning Objectives
After successfully completing this course you should be able to:
1 Design and build a software system that delivers specifi ed functional and non-functional requirements (e.g. security, scalability, reliability, ...) by evaluating and selecting an appropriate architectural pattern and designing the components, interfaces and communication protocols to work within the pattern's structure.
2 Apply systems thinking within a team, debating and negotiating options, to design an architecturally complex software system that delivers a coherent set of functional and non-functional requirements.
3 Evaluate security risks for a software system architecture and implement security principles to minimise those risks.