Conceção e Implementação de Aplicações para a Internet

Objectivos

Saber

1. Aspetos fundamentais dos padrões arquiteturais e arquiteturas de software para aplicações para a Internet

2. Princípios do desenvolvimento de progressive web applications

3. Métodos de especificação e implementação de web services e orquestrações de web services

4. Estrutura interna de um browser como cliente para aplicações para a Internet

5. Princípios do desenvolvimento de aplicações centradas nos dados e aplicações centradas no utilizador

6. Mecanismos de abstração utilizados em aplicações para a Internet

7. Principais ameaças à performance das aplicações para a Internet e como as evitar

8. Mecanismos de especificação e implementação de políticas de segurança em Aplicações para a Internet

Fazer

9. Utilização de frameworks para implementar arquiteturas e estilos arquiteturais

10. Especificar e construir aplicações para a Internet e para a Nuvem

11. Especificar e construir aplicações cliente com comportamentos rico e reativo

12. Implementar mecanismos de autenticação e especificação de regras de segurança nucleares

13. Especificar e usar de forma eficiente os níveis de abstração de dados como os providenciados por frameworks de Object Relational Mapping

Caracterização geral

Código

11554

Créditos

6.0

Professor responsável

João Ricardo Viegas da Costa Seco, Luís Manuel Marques da Costa Caires

Horas

Semanais - 6

Totais - 58

Idioma de ensino

Português

Pré-requisitos

Os estudantes devem ser programadores proficientes, ter conhecimentos de Engenharia de Software, desenho de bases de dados relacionais e sistemas distribuídos.

O projeto desenvolvido nesta unidade curricular é nesta altura baseada numa stack de tecnologias baseada em Kotlin, Spring, Hibernate e MySQL no caso do servidor, e React e TypeScript no desenvolvimento das aplicações cliente. O desenvolvimento faz também uso de ferramentas de desenvolvimento para controlo de versões (git), gestão de projeto (maven), e desenvolvimento integrado (Eclipse ou InteliJ), browsers e debuggers.

Bibliografia

Martin Fowler. Patterns of Enterprise Application Architecture. USA: Addison-Wesley Longman Publishing Co., Inc., 2002. isbn: 0321127420.

Esta referência apresenta um trabalho clássico e seminal que explora padrões arquitecturais que inspira os desenvolvimentos desta unidade curricular, que é complementada pelas referências seguintes no domínio das aplicações na Internet.

Len Bass, Paul Clements, and Rick Kazman. Software architecture in practice, 3rd Edition. Addison-Wesley Professional, 2015. isbn: 0321815734.

Chris Richardson. Microservices Patterns. Manning Publications, 2018. isbn: 9781617294549.

Marco Brambilla and Piero Fraternali. Interaction flow modeling language: Model-driven UI engineering of web and mobile apps with IFML. Morgan Kaufmann, 2014. isbn: 0128001089.

Robert C. Martin. 2017. Clean Architecture: A Craftsman''s Guide to Software Structure and Design (1st. ed.). Prentice Hall Press, USA. 

Método de ensino

Esta unidade curricular introduz os diferentes tópicos realçando boas práticas de desenvolvimento, e métodos de especificação e implementação. As metodologias e tecnologias são apresentadas de uma forma integrada para mostrar as especificidades no domínio do desenvolvimento de aplicações para a internet.

As aulas de laboratório são compostas por um crescendo de desafios de programação e de suporte ao desenvolvimento de um projeto. É fornecido código de exemplo para começar o processo de desenvolvimento. O desenvolvimento desse projeto segue técnicas mainstream de desenvolvimento ágil fazendo uso das técnicas mais avançadas de controlo de versões, de desenvolvimento, e ferramentas de automatização de construção de software.

Método de avaliação

A avaliação desta unidade curricular é bipartida:

  • A avaliação escrita (valorizada em 50% da nota final) é composta por dois testes com pesos iguais. Os testes avaliam a aquisição de conhecimentos em termos dos conceitos fundamentais, dos métodos de desenvolvimento e das boas práticas transmitidas nas aulas teóricas. A componente teórico-prática também pode ser realizada por exame (na época de recurso).
  • A componente prática (valorizada em 50% da nota final) consiste no desenvolvimento de um projeto de dimensão média por equipas de 3 elementos, entregue em quatro fases com pesos iguais. O projeto tem por objetivo o desenvolvimento de uma aplicação para a internet e inclui o desenvolvimento de uma aplicação cliente (single page application)  num método centrado no utilizador, e uma aplicação fornecedora de serviços. A avaliação é concluída com um relatório escrito e uma apresentação do projeto.
  • Não há nota mínima em nenhuma das componentes, nem a noção de frequência.

Conteúdo

Programa

Arquiteturas de Software para Aplicações para a Internet. Padrões arquiteturais de inversão de controlo. Arquiteturas simples e compostas para apresentação controlo e abstração. Software como serviço (SaaS). Arquiteturas Web e baseadas em serviços. Aplicações de página única, plugins e mash-ups de dados. O browser como uma máquina virtual.

Especificação de webservices e aplicações baseadas em serviços. Aplicações centrada nos dados (baseada em recursos). Aplicações centradas nos utilizadores (baseada em operações) e no fluxo de interação (IFML). Modelação de processos (e.g. BPMN). Orquestração de serviços (e.g. BPEL).

Abstrações de controlo e de dados para aplicações web e baseadas em serviços. REST (baseada em recursos) e SOAP (baseada em operações). Object Relational Mappings (ActiveRecord, Hibernate). Modelos de abstração de dados Relacional e NoSQL. Linguagens de manipulação de dados (e.g., LINQ, XQuery, linguagens NoSQL). Modelos de programação reativa (e.g. Atmosphere, BaconJS, AngularJS, MeteorJS), Linguagens unificadas para aplicações para a Internet (e.g., GWT, Go, Node.JS). Validação de software baseada em arquiteturas de objetos.

Desempenho, escalabilidade e monitorização de aplicações. Ameaças ao desempenho em ORMs. Balanceamento de carga. Filas de espera. Cache. Pesquisa e indexação. Logging e monitorização.

Segurança de aplicações para a Internet. Modelos de controlo de acessos (RBAC e suas extensões). Autenticação por terceiros. Ataques mais comuns (SQL Injection, XSS-scripting attacks). 

Plano de Aulas

1.      Introdução. Arquiteturas de Software. Frameworks de desenvolvimento.

2.      Tecnologias Cliente (HTML, CSS, JS)

3.      Bibliotecas, Frameworks, Linguagens e dialetos (from JQuery to TS)

4.      Especificação e implementação de aplicações cliente. (IFML+REACT)

5.      De IFML para React: um exemplo desde user stories até código

6.      React, Flux e Redux: Gestão de Estado

7.      Arquiteturas baseadas em serviços (REST)

8.      Arquiteturas de software para aplicações do lado do servidor (MVC)

9.      Abstração de Dados

10.    Abstração de Dados (Cont.)

11.    Segurança (Autenticação, Controlo de Acessos)

12.    Desempenho e Escalabilidade

13.    Frameworks de programação reativa

Cursos

Cursos onde a unidade curricular é leccionada: