View general information
The subject within the syllabus as a whole
Professional fields to which it applies
Information prior to enrolment
Learning objectives and results
View the learning resources used in the subject
Support tools and learning resources
Guidelines on assessment at the UOC
View the assessment model
|You can use the course plan to plan your enrolment (check to see whether the course is being run this semester in the More UOC / The University / Programmes of study section on Campus). Once teaching starts, you'll be able to find it in the classroom. (The course plan may be subject to change.)
Continuous advances in computing and telecommunications are changing the way software is developed. In particular, the relentless increase in the power of personal computers and mobile devices, the lowering of hardware costs and the emergence of global data networks have made possible a particularly favourable infrastructure for the use of open and distributed systems.
These changes have caused, among other things, traditional software design and development methods (seen in the subjects of Software Engineering and Analysis and pattern design) are insufficient, since, more or less implicitly, they assume that the application to be developed will run in a basically centralized environment. Therefore, traditional methods are unable to naturally manage the complexity of the requirements of this new type of system. On the other hand, the aspects closest to the analysis and specification of requirements studied in the subject Requirements Engineering they do not change with respect to what has been seen in the subjects prior to this and, therefore, they are not repeated here.
This subject serves as an introduction to the software architectures as a framework for the design and development of distributed applications where the fundamentals, techniques and skills applicable in the modern definition of software architectures are studied and put into practice, and the knowledge acquired in the previous subjects are complemented. The design of the architecture of the software systems allows to describe in an abstract and high-level way both the functionality of the system and many other non-functional aspects of it (distribution, reliability, security, adaptability, performance, etc.). This description of the system is usually defined from an architectural style, a classification of software systems into large families that follow a common structural pattern. Among the architectural styles more common for distributed systems are systems organized in microservices, multiple layers, client-server systems or systems peer-tone-peer.
The design of the application in terms of software microservices has to be refined, subsequently, to adapt and implement it in a specific distributed software technology. These architectures can be implemented using any programming paradigm (object-oriented, structured...). In our specific case, the reference language will be Java that allows for developing distributed applications with microservices architectures. These microservices are those that will be used to implement and test the architectural elements described in the system architecture.
Finally, some good practices in the development and production of software in distributed architectures are collected. Some of the key concepts are worked on when developing and putting into production, such as the continuous delivery, DevOps culture and container-based deployment.
This subject is framed within the itinerary of Software Engineering of the degree of Computer Engineering, constituting an extension in several dimensions of the basic knowledge of software engineering included both to the specific itinerary and in the compulsory subjects of the degree.
In order to successfully take this subject, students are required to have prior knowledge of object-oriented technology. Specifically, you have to know the fundamentals of object-oriented programming and the basic notations of UML, as they are studied, for example, in the subjects Software Engineering and Analysis and pattern design of this same degree.
This subject will be especially useful to all future professionals dedicated to software development according to a current conception. The field of software development changes day by day, and as mentioned at the beginning, both distributed systems and microservices systems are becoming more and more important.
On the other hand, it is also important for every computer engineer to acquire the basic skills in the installation, configuration and use of the various support tools very popular in the market for the development, deployment and execution of software applications. In this subject, an intensive task will be carried out in this sense to consolidate these skills through the support of a specialized classroom of Laboratory. Therefore, the use of automatic virtual machines with already configured environments will be avoided as much as possible and instead the use of individual tools that the student will have to learn how to install and configure manually will be encouraged.
To have overcome the subjects Software Engineering and Analysis and design with patterns or having the equivalent knowledge is the precondition to be able to take this subject.
It is also essential that the student has a good level of Java to be able to pass the subject. The subject has a significant part of practical work in Java that assumes an important knowledge and practice in this language. It is not recommended that the student take this subject until a good level of Java has been achieved, since otherwise s/he will be most probably forced to repeat the subject.
It is advisable to have passed the following subjects of the Degree:
Software Engineering and Analysis and design with patterns.
Transversal competences of the Degree in Computer Engineering:
- Ability to communicate in writing in the academic and professional field.
- Use and application of ICT in the academic and professional field.
- Ability to adapt to technologies and future environments by updating professional skills.
- Know how to propose and assess different technological alternatives to solve a specific problem.
- Ability to analyze a problem at the level of abstraction appropriate to each situation and apply the skills and knowledge acquired to address and solve it.
- Know how to build computer applications through development, integration and reuse techniques.
- Application of the specific techniques of Software Engineering to the different stages of the life cycle of a project.
The general objective of the subject is that the student acquires the basic knowledge for the development of distributed applications based on microservices. This objective is specified in the following specific objectives:
- Explain the fundamentals of software architecture and the characteristics of an architecture.
- Present arguments about the strengths and weaknesses of different architectural styles and how these influence the decision of the most suitable architectural style or styles for a given application.
- To place the new emerging paradigms of software engineering within the framework of software architectures.
- Present arguments that show the benefits and also the risks and costs of a microservices architecture to solve a specific problem.
- Propose the design of a microservices architecture and its decomposition from a case study.
- Implement microservices focused on business logic and data access.
- Deploy microservices with own state, synchronous intercom, and data consistency.
- Apply basic concepts of microservices architecture.
- Master the basic technologies necessary for the implementation of microservices.
- Recognize the testing and quality factors of a specification/design.
- Formally assess the testing and quality of an implementation.
- Identify the most important models and software quality standards.
- Recognizing the factors of delivery, deployment, and integration continues.
- Interpret agile culture in software development.
- Implement a pipeline of delivery, deployment and continuous integration.
- Present arguments about the advantages and costs of containers and orchestration platforms.
- Prepare a good final delivery report to a potential client.
The subject is structured in 5 main activities, each with its specific contents:
Activity 1: "Distributed software architectures: a solution for every problem"
- Book "Fundamentals of Software Architecture" (Richards & Ford): Chapter 1. Introduction.
- Book "Fundamentals of Software Architecture" (Richards & Ford): Part I Foundations (Chapters 2 - 8)
- Book "Fundamentals of Software Architecture" (Richards & Ford): Part II Architecture Styles (Chapters 9 - 18).
Activity 2: "Hexagonal architectures and microservices design: a nice relationship"
- Book "Microservices patterns" (Richardson): Chapter 1. Section 6: "The Microservice architecture pattern language".
- Book "Microservices patterns" (Richardson): Chapter 2: "Decomposition strategies".
- Book "Microservices patterns" (Richardson): Chapter 3: "Interprocess communication in a microservice architecture"
- Book "Microservices patterns" (Richardson): Chapter 5: "Designing business logic in a microservice architecture".
Activity 3: "From the creation to the interconnection of microservices"
- Book "Microservices Patterns" (Chris Richardson): Chapter 6: "Developing business logic with event sourcing". Introduction.
- Book "Microservices Patterns" (Chris Richardson): Chapter 6: "Developing business logic with event sourcing".
- Book "Microservices patterns" (Richardson): Chapter 7: "Implementing queries in a microservice architecture"
- Book "Microservices patterns" (Richardson): Chapter 8: "External API patterns".
Activity 4: "Distributed software quality: inherent, transversal and critical"
- Book "Microservices Patterns" (Chris Richardson): Chapter 9. "Testing microservices: Part 1". Introduction.
- Book "Microservices Patterns" (Chris Richardson): Chapter 9. "Testing microservices: Part 1".
- Book "Microservices Patterns" (Chris Richardson): Chapter 10. "Testing microservices: Part 2".
- Book "Fundamentals of Software Architecture" (Richards & Ford): Part I Foundations (Chapters 3 & 6).
Activity 5: "DevOps, CD/CI and Agile Culture: Best Practices for Distributed Software Development"
- Book Microservices Patterns (Chris Richardson) Chapter 12 Deploying microservices. Introduction.
- Book Microservices Patterns (Chris Richardson) Chapter 12 Deploying microservices.
- Book "Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Jez Humble & Dave Farley) Part I: Chapters 1-10.
- Book "The DevOps Handbook" (Patrick Debois, John Willis, Jez Humble & Gene Kim): Chapters 1 - 4.
The main support of the teaching material are the books mentioned above, which will be distributed in digital format according to the usual channels of the UOC (Library) accessible from the classroom. All the books of the subject are original from world-leading authors in the area of distributed software development and therefore are written entirely in English.
On the other hand, the course has a Laboratory classroom with material and software tools, and an instructor with great experience in the technical part of the course, where the student will obtain all the necessary support to carry out the practical assignments. In particular, the Laboratory has software and installation manuals, training courses and solved case studies on installation and implementation, frequently asked questions (FAQs) with answers and references to external sources of information. In addition, it has forums where students can share doubts, queries and problems that the instructor responds as quickly as possible, and that all students can participate.
The assessment process is based on the student's personal work and presupposes authenticity of authorship and originality of the exercises completed.
Lack of authenticity of authorship or originality of assessment tests, copying or plagiarism, the fraudulent attempt to obtain a better academic result, collusion to copy or concealing or abetting copying, use of unauthorized material or devices during assessment, inter alia, are offences that may lead to serious academic or other sanctions.
Firstly, you will fail the course (D/0) if you commit any of these offences when completing activities defined as assessable in the course plan, including the final tests. Offences considered to be misconduct include, among others, the use of unauthorized material or devices during the tests, such as social media or internet search engines, or the copying of text from external sources (internet, class notes, books, articles, other students' essays or tests, etc.) without including the corresponding reference.
And secondly, the UOC's academic regulations state that any misconduct during assessment, in addition to leading to the student failing the course, may also lead to disciplinary procedures and sanctions.
This course can only be passed through continuous assessment (CA), the mark for which is combined with a practical (Pr) mark to give the final course mark. It is not planned to have any final exam or on-site validation test.The formula for accrediting the course is as follows: CA + Pr.The final course marks will be calculated as follows:
- If a pass mark is obtained for both CA and Pr, the final mark is given by the formula.
- If a pass mark is not obtained for CA, the final mark is the CA mark.
- If the CA has not been submitted, the final mark is Absent.
- If a pass mark is obtained for CA but not for Pr, the final mark is the Pr mark.
- If a pass mark is obtained for CA but the Pr mark is Absent, the final mark is Fail (2.5).