This course aims to extend and integrate students' knowledge from earlier engineering subjects in the area of designing distributed and web-based applications with a hands-on approach that will cover the requirements, design, implementation and deployment of both the client and the server applications using cloud services and tools.
It will also serve as an introduction to agile software development as a more apt way to develop software for the web than traditional methods.
Technical Competences of each Specialization
CEE5.1 - Capability to participate in improvement projects or to create service systems, providing in particular: a) innovation and research proposals based on new uses and developments of information technologies, b) application of the most appropriate software engineering and databases principles when developing information systems, c) definition, installation and management of infrastructure / platform necessary for the efficient running of service systems.
CEE5.3 - Capability to work in interdisciplinary engineering services teams and, provided the necessary domain experience, capability to work autonomously in specific service systems.
Generic Technical Competences
CG2 - Capability to lead, plan and supervise multidisciplinary teams.
CG4 - Capacity for general and technical management of research, development and innovation projects, in companies and technology centers in the field of Informatics Engineering.
Sustainability and social commitment
CTR2 - Capability to know and understand the complexity of the typical economic and social phenomena of the welfare society. Capacity for being able to analyze and assess the social and environmental impact.
CB7 - Ability to integrate knowledges and handle the complexity of making judgments based on information which, being incomplete or limited, includes considerations on social and ethical responsibilities linked to the application of their knowledge and judgments.
Introduction to Web Based Systems
The web and Web Based Systems. Core web technologies: DNS, URIs, Internet Media Type. HTTP: Resources, Methods, Headers, Status Codes. Browsers and other clients, Proxies and Servers.
Prototype Object Oriented Programming. Functional Programming. Modularity. Regular Expressions. Error handling. Event Driven Programming. HTML documents. Decoupling semantics and presentation with CSS. Forms. HTML5 and multimedia. HTML5 applications: Offline, data storage and DBs. Geolocation. CSS for mobile devices. Asynchronous server requests (AJAX).
Programming for the Web
Introduction to Web Programming: High Concurrency, High Availability Requirements. Programming Paradigms and the Web: (OO) Procedural Programming, Functional Programming, Logic Programming. Introduction to Functional Programming with Scala.
Development Processes for the Web
The Web: Changing Requirements and Uncertainity. Agile Software Development Values and Principles. Agile Methodologies. Introduction to Scrum. Agile Requirements Management with User Stories. Agile Estimating and Plannig. Agile Tools for Developers: Pair Programming, Test Driven Development, Continuous Integration, Refactoring. Behavior Driven Development.
Server Side Architecture and Design: Layered Architecture and Presentation Patterns
Layered Architecture. Model View Controller. Controller Patterns: Page Controller, Front Controller, Application Controller. View Patterns: Template View, Transform View, Two Step View. Session State Pattern: Client, Server, Database.
Server Side Architecture and Design: Service, Domain and Data Access Layers.
Domain Logic Patterns: Service Layer, Domain Model, Table Module, Transaction Script. Data Source Patterns: Data Gateways, Active Record, Data Mapper. Object-Relational Patterns. Offline Concurrency Patterns.
Security for Web Applications
Foundations of Web Security. Threat and Countermeasures. The Three-Tiered Approach to Security. Network and Host Security Overview. Application Security. Cryptography. SSL.
Testing and Quality
Introduction to Testing and Quality. Web Quality: Reliability, Usability, Security, Availability, Scalability, Maintainability, Performance & Time To Market. Tests and Development: Unit & Integration Test Patterns and Tools. Acceptance Testing. Introduction to Non Functional Requirements Testing. Performance Testing: Load and Stress Tests.
Architecture Patterns: Single Server, Separated Database, Separated Scripting Engine. Replication, Performance and Availability. Caching. Cloud Computing.
The course is divided into 2 differentiated blocks:
# Theory classes: 2h / week
The teacher will give a short introduction to every unit by means of a short lecture at the end of the theory session. Furthermore, he will give references or materials so that students can prepare the content of the unit before the next theory session. Students will prepare the contents at home (aproximately 2 hours / week of dedication) by preparing an artifact that could be a summary, a comment, a cheat sheet or the solution to some exercise. That document will be handed in just to show the content has been prepared, but it will not be graded.
During the first part of the session, students will present the contents they prepared to the teacher and fellow students. Students are expected to be able to present the result of their preparation, discuss the topics prepared, ask questions about things they could not understand completely, etc. The teacher will guide the process and will finally summarize the key aspects.
# Lab sessions and project (lab sessions: 2h / week)
The most important part of the course will be the development of a real web application applying the technologies, principles and practices taught during the course. Theory classes and project requirements will be coordinated so that needed theoretical knowledge is taught before its practical application in the project.
From the 5th session on, the project will be developed in teams of up to 5 people. Teams will be given a product backlog with all the desirable priorized requirements and they will develop a completely usable project (wich will be deployed for real) using 2 week long iterations.
Students will need to solve not only technical problems but also agile management issues like changing requirements, wrong estimations or communication difficulties with business poeple, to name a few.
Therefore, each other lab session (from the 5th on), a given team will deliver an increment of working software doing a demo to the teacher (who will act as a Product Owner) and a retrospective aimed to enhance the quality of both the product and the process. Students will get feedback about the current business value of their solution. The final grade of the project will be an average of the technical quality of the delivered software and the business value of the solution.
Final Mark = 60% Project Individual Mark + 30% Theory Exam + 10% Participation
Project Individual Mark = Project Team Mark * Individual Factor
Project Team Mark = 50% Technical Quality + 50% Business Value Delivered
Individual Factor: Each student will evaluate each team member's participation on each iteration (including his or her own). Those will be averaged in a Individual Factor between 0 (the team member didn't show up) to 1.2 (the team member participated much more than asked to).
Participation: Students will deliver materials they prepared for each theory class. The participation grade will be calculated from the number of theory classes prepared by the student and his or her participation in class.