113
Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia Electrotécnica e Computadores Júri Presidente: Professor Nuno Cavaco Gomes Horta Orientador: Professor João Paulo Baptista de Carvalho Vogal: Professor Luís Manuel Antunes Veiga Outubro de 2010

Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Embed Size (px)

Citation preview

Page 1: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Intelligent e-Job Marketplace

Nuno Filipe Grilo Nobre Marques

Dissertação para obtenção do Grau de Mestre em

Engenharia Electrotécnica e Computadores

Júri

Presidente: Professor Nuno Cavaco Gomes Horta

Orientador: Professor João Paulo Baptista de Carvalho

Vogal: Professor Luís Manuel Antunes Veiga

Outubro de 2010

Page 2: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

AGRADECIMENTOS

O presente estudo não poderia ter sido concretizado sem o contributo e auxílio de diversas pessoas a

quem presto os meus agradecimentos

Gostaria em primeiro lugar de agradecer ao orientador, Professor João Paulo Carvalho por toda a

disponibilidade com que sempre me presenteou, auxiliando-me na definição das linhas de desenvolvimento

e na organização do estudo ora apresentado, bem como por todo o apoio prestado na concretização do

presente trabalho.

Os meus mais sinceros agradecimentos.

Em segundo lugar gostaria de agradecer à minha namorada Rita, porque sempre acreditou em mim

e me proporcionou todo o apoio que necessitava sem excepção, sobretudo para a realização do presente

trabalho, bem como minha à minha mãe Maria Benedita que foi incansável no seu apoio, fazendo o possível

e o impossível para que eu beneficiasse de uma disponibilidade permanente para a concretização do

presente estudo.

Gostaria de agradecer ainda à minha irmã Margarida, sempre disponível para o que foi necessário,

bem como ao meu irmão João que auxiliou em tudo o que precisei no decurso do desenvolvimento este

trabalho.

Não poderia deixar de apresentar um profundo agradecimento ao Eng. Rui Alexandre por me ter

concedido a oportunidade de estágio e posteriormente integrado nos quadros da empresa, por toda a

disponibilidade, oportunidade e confiança em mim depositadas.

Um agradecimento ao Eng. Luís Reis por me ter integrado na sua equipe de trabalho, bem como

por me ter proporcionado flexibilidade de horário sempre que necessário.

Aos colegas, amigos e familiares que, embora não tenham contribuído directamente para o trabalho,

estimularam a sua realização com incentivos e compreensão. Para eles o meu Muito Obrigado.

ii

Page 3: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

RESUMO

O presente trabalho tem como objectivo o desenvolvimento de um protótipo de um site de emprego

que utilize computação inteligente de modo a permitir obter uma ordem de classificação de perfis e ofertas

relativamente a um modelo de perfil ou oferta definido.

O trabalho inicia-se com uma análise do estado da arte existente, seguido do conteúdo teórico no

qual é baseado. Em seguida, procede-se a uma análise da arquitectura que permite garantir a tolerância a

falhas e a escalabilidade do protótipo desenvolvido. E depois detalhado qual o modelo de dados que

persiste toda a informação, quer a introduzida pelos utilizadores, quer a necessária ao funcionamento do

protótipo.

São apresentadas as várias funcionalidades implementadas, por forma a que candidatos possam

gerir os seus perfis e visualizar ofertas e que empregadores possam gerir as suas ofertas e visualizar perfis

de candidatos.

Por fim é detalhado o algoritmo desenvolvido e são apresentados resultados que confirmam a sua

validade. O algoritmo utiliza a maior parte da informação introduzida pelos utilizadores, de modo a

estabelecer um critério de semelhança entre um determinado perfil de candidato modelo ou oferta de

empregador modelo relativamente aos existentes, apresentando uma lista ordenada contendo aqueles que

mais se aproximam do modelo desejado e o grau de aproximação.

Este protótipo pretende ser o ponto de partida de um projecto ao qual, acrescentadas algumas

funcionalidades adicionais, poderá ser utilizado como site de emprego em produção.

PALAVAS-CHAVE

emprego, site, classificação, candidato, empregador

iii

Page 4: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

ABSTRACT

The purpose of this work concerns the development of a prototype of a job web site that relies on

intelligent computing to obtain the matching degree of candidate profiles and job offers compared to a model.

The explanation starts with the state of the art analysis on the area followed by its theoretical basis.

Then, the architectural structure of the application is analyzed to ensure that the prototype is fault tolerant

and scalable. After this, we detail the data model that supports all of the data inserted by the users and the

required for the prototype to work properly.

We follow on to detail all of the implemented features, allowing candidates to manage their profiles

and view offers, and employers to manage their job offers and view candidate profiles.

By the end of the document, we explain the developed algorithm and obtain some processed results

to assure its correctness. The developed algorithm uses almost all information provided by the site users to

establish a resemblance criteria between the candidate model profile and existing ones, or company model

offer and existing offers, allowing users to see an ordered list featuring the nearest, as well as their degree of

resemblance.

The prototype intends to be the first step to a more complex web site that can be used in real life,

requiring some other, yet undeveloped, features to be added.

KEY WORDS

job, site, matching, candidate, employer

iv

Page 5: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

ÍNDICEAgradecimentos........................................................................................................................................... ii

Resumo ...................................................................................................................................................... iii

Abstract ...................................................................................................................................................... iv

Lista de Figuras......................................................................................................................................... viii

Lista de Tabelas.......................................................................................................................................... ix

Lista de Palavras não traduzidas................................................................................................................ xi

Lista de Acrónimos.................................................................................................................................... xiii

1 - Introdução.............................................................................................................................................. 1

1.1 - Motivação....................................................................................................................................... 1

1.2 - Objectivos...................................................................................................................................... 1

2 - Breve Abordagem sobre sites existentes...............................................................................................3

3 - Conteúdo Teórico................................................................................................................................. 10

3.1 - Django.......................................................................................................................................... 10

3.1.1 - Introdução ao Django...........................................................................................................10

3.1.2 - Estrutura de um Projecto Django.........................................................................................12

3.1.3 - Linguagem de Programação Python....................................................................................17

3.2 - Desenvolvimento orientado por testes.........................................................................................18

3.2.1 - Descrição e objectivos.........................................................................................................18

3.2.2 - Programação em TDD.........................................................................................................18

3.2.3 - TDD comparado ao Método Tradicional...............................................................................19

3.2.4 - Processo de codificação de testes.......................................................................................20

3.2.5 - Testes como documentação.................................................................................................21

3.2.6 - Testes no Django.................................................................................................................. 21

3.3 - Interacção Cliente – Servidor.......................................................................................................21

3.3.1 - Request - Response.............................................................................................................21

3.3.2 - O protocolo HTTP................................................................................................................22

3.3.3 - O protocolo HTTPS..............................................................................................................25

3.3.4 - REST – Representational State Transfer.............................................................................26

3.3.4.1 - Restrições da arquitectura REST.................................................................................26

3.3.4.2 - Elementos da arquitectura REST.................................................................................27

3.3.4.3 - A interface REST aplicada ao protocolo HTTP.............................................................29

3.3.4.4 - Vantagens do uso de uma interface REST..................................................................30

3.3.5 - Interpretação da Resposta...................................................................................................30

3.3.5.1 - Browser........................................................................................................................ 30

3.3.5.2 - HTML - HyperText Markup Language..........................................................................31

3.3.5.3 - CSS – Cascade Style Sheet........................................................................................31

3.3.5.4 - JavaScript.................................................................................................................... 32

3.3.5.5 - JQuery..........................................................................................................................32

v

Page 6: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

3.3.5.6 - Formulários..................................................................................................................33

3.3.6 - Linguagem de Templating...................................................................................................34

3.3.6.1 - Geração de páginas dinâmicas....................................................................................34

3.3.6.2 - Vantagens do uso de Templating.................................................................................34

3.3.6.3 - Sistema de Templating do Django................................................................................35

3.3.6.4 - Funcionalidades...........................................................................................................35

3.3.6.5 - O Sistema de Herança.................................................................................................36

3.3.6.6 - Notas sobre o uso de templating..................................................................................36

3.4 - Acesso ao SGBD..........................................................................................................................37

3.4.1 - Definição de SGBD..............................................................................................................37

3.4.2 - Modelos de Dados...............................................................................................................37

3.4.3 - Linguagem de Base de Dados Relacional...........................................................................40

3.4.4 - Django – camada de acesso ao SGBD................................................................................40

3.4.5 - Escolha de SGBD................................................................................................................41

4 - Trabalho Desenvolvido.........................................................................................................................42

4.1 - Infra-estrutura............................................................................................................................... 42

4.1.1 - Arquitectura.......................................................................................................................... 42

4.1.2 - Servidor HTTP..................................................................................................................... 44

4.1.3 - Servidor Aplicacional............................................................................................................44

4.1.4 - SGBD................................................................................................................................... 45

4.1.5 - Memcached.......................................................................................................................... 45

4.1.6 - Sistema Operativo................................................................................................................46

4.2 - A Aplicação................................................................................................................................... 46

4.2.1 - Entidades e Relações..........................................................................................................46

4.2.2 - Descrição dos Recursos da Aplicação.................................................................................48

4.2.3 - Registo de utilizadores.........................................................................................................52

4.2.4 - Sessões e Autenticação.......................................................................................................53

4.2.5 - Estrutura dos Documentos HTML Gerados..........................................................................54

4.2.6 - Logging................................................................................................................................ 54

4.2.7 - Internacionalização..............................................................................................................55

4.2.8 - Modelo de Dados Desenvolvido...........................................................................................55

4.2.9 - Visibilidade dos atributos......................................................................................................57

4.2.10 - Opções de campos dependentes de escolhas...................................................................58

4.2.11 - Validação dos Atributos introduzidos..................................................................................59

4.3 - Estrutura de Directorias e ficheiros..............................................................................................60

4.4 - Algoritmo de Classificação de Perfis e Ofertas............................................................................62

4.4.1 - Conceito de Agregação........................................................................................................62

4.4.2 - Critério de Medida................................................................................................................63

4.4.3 - Comparação entre os Critérios de Medida...........................................................................65

4.4.4 - Pesquisas............................................................................................................................. 68

vi

Page 7: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

4.4.5 - Implementação da Operação de Agregação........................................................................69

4.4.6 - Testes Efectuados e Resultados..........................................................................................70

5 - Conclusão............................................................................................................................................ 75

Bibliografia................................................................................................................................................. 80

Anexo A – Operações básicas sobre o SGBD...........................................................................................83

Anexo B – Métodos para obtenção de semelhanças................................................................................84

Anexo C – Modelo Relacional de Dados (Entidades)................................................................................88

Anexo D – Modelo Relacional de Dados (Relações).................................................................................98

vii

Page 8: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

LISTA DE FIGURAS

Figura 1: Página inicial www.netemprego.gov.pt.........................................................................................3

Figura 2: Página inicial www.net-empregos.com.........................................................................................4

Figura 3: Página inicial www.empregos.org.................................................................................................5

Figura 4: Página inicial aeiou.expressoemprego.pt.....................................................................................6

Figura 5: Página inicial www.stepstone.pt...................................................................................................6

Figura 6: Página inicial www.infoemprego.pt...............................................................................................7

Figura 7: Página inicial www.monster.com..................................................................................................8

Figura 8: Página inicial www.totaljobs.com..................................................................................................9

Figura 9: Página inicial www.eurojobs.com.................................................................................................9

Figura 10: Etapas do processo TDD.........................................................................................................19

Figura 11: Arquitectura Cliente-Servidor....................................................................................................22

Figura 12: Componentes REST e interacções..........................................................................................28

Figura 13: Arquitectura de produção da aplicação....................................................................................43

Figura 14: Modelo Relacional de Dados parcial........................................................................................56

viii

Page 9: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

LISTA DE TABELAS

Tabela 1: Exemplo de User.......................................................................................................................10

Tabela 2: Comparação de resultados obtidos com alguns critérios de medida.........................................67

Tabela 3: Perfis Modelo usados em testes................................................................................................71

Tabela 4: Ofertas Modelo usadas em testes.............................................................................................71

Tabela 5: Perfis usados em testes.............................................................................................................72

Tabela 6: Ofertas usadas em testes..........................................................................................................72

Tabela 7: Semelhança de Graus Académicos...........................................................................................73

Tabela 8: Semelhança de Universidades..................................................................................................73

Tabela 9: Semelhança de Cursos Superiores...........................................................................................73

Tabela 10: Semelhança de Áreas Profissionais........................................................................................73

Tabela 11: Semelhança de Empregos.......................................................................................................73

Tabela 12: Resultados da pesquisa pelo Algoritmo de Classificação (Perfis)............................................73

Tabela 13: Resultados da pesquisa pelo Algoritmo de Classificação (Ofertas).........................................73

Tabela 14: Entidade User..........................................................................................................................88

Tabela 15: Entidade Candidate................................................................................................................. 88

Tabela 16: Entidade CandidateBookmarkedOffer......................................................................................88

Tabela 17: Entidade Company..................................................................................................................89

Tabela 18: Entidade AuthenticationTicket..................................................................................................89

Tabela 19: Entidade CandidateAreaMainTechnology................................................................................89

Tabela 20: Entidade CandidateProfile.......................................................................................................90

Tabela 21: Entidade CandidateAppliedOffer..............................................................................................90

Tabela 22: Entidade CompanyOffer...........................................................................................................91

Tabela 23: Entidade Country.....................................................................................................................91

Tabela 24: Entidade CandidateAreaMainFunction....................................................................................92

Tabela 25: Entidade CandidateProfessionalCourse..................................................................................92

Tabela 26: Entidade CandidateOldJob......................................................................................................92

Tabela 27: Entidade CompanyBookmarkedProfile....................................................................................92

Tabela 28: Entidade City............................................................................................................................ 92

Tabela 29: Entidade CandidateModelOffer................................................................................................94

Tabela 30: Entidade CompanyAppliedProfile............................................................................................94

Tabela 31: Entidade University..................................................................................................................94

Tabela 32: Entidade JobSimilarity..............................................................................................................94

Tabela 33: Entidade CompanyModelProfile...............................................................................................96

Tabela 34: Entidade UniversityCourse.......................................................................................................96

Tabela 35: Entidade AcademicDegree.......................................................................................................96

Tabela 36: Entidade JobArea....................................................................................................................97

Tabela 37: Entidade Job............................................................................................................................ 97

Tabela 38: Entidade UniversitySimilarity....................................................................................................97

ix

Page 10: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Tabela 39: Entidade UniversityCourseSimilarity........................................................................................97

Tabela 40: Entidade AcademicDegreeSimilarity........................................................................................97

Tabela 41: Entidade JobAreaSimilarity......................................................................................................97

x

Page 11: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

LISTA DE PALAVRAS NÃO TRADUZIDAS

backoffice

branding

browser

bugs

built-in

cache

checkbox

code-on-demand

company

cookie

create

data-mining

delete

design

dictionary

digest

firewall

fixtures

framework

gateway

host-to-host

hypermedia

interface

ip

java

lazy

load-balancing

log

logging

mailbox

manager

markup

metadata

middleware

network

newsletter

open-source

overhead

xi

Page 12: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

password

provider

proxy

python

query

rails

read

reporting

representation

request

resource

resource identifier

response

release

round-trip

ruby

script

site

snooping

software

stateless

store

template tag

templates

templating

transaction

update

user

user-agent

user-friendly

user-interface

web

widgets

loose-coupled

xii

Page 13: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

LISTA DE ACRÓNIMOS

API – Application Programming Interface

ASP.NET – Active Server Pages

CA – Certificate Authority

CRUD – Create, Read, Update, Delete

DAO – Data Access Object

DDL – Data Definition Language

DML – Data Manipulation Language

DNS – Domain Name System

DRY – Don't Repeat Yourself

DTD – Document Type Definition

DTO – Data Tranfer Object

ERB – Embedded Ruby

HTML – Hyper Text Markup Language

HTTP – Hyper Text Transfer Protocol

HTTPS – Hyper Text Transfer Protocol Secure

IETF – Internet Engineering Task Force

IP – Internet Protocol

JSON – JavaScript Object Notation

JSP – Java Server Pages

MIME – Multipurpose Internet Mail Extensions

MVC – Model, View, Controller

ORB – Object Request Broker

OSI – Open Systems Interconnection

PKI – Public Key Infrastructure

REST – Representational State Transfer

RFC – Request For Comments

S-HTTP – Secure HTTP

SOCKS – Sock-Et-S

SGBD – Sistema de Gestão de Base de Dados

SSL – Secure Socket Layer

SQL – Structured Query Language

TDD – Test Driven Development

TFD – Test First Design

TCP – Transmission Control Protocol

TLS – Transport Layer Security

UDP – User Datagram Protocol

URI – Uniform Resource Identifier

URL – Uniform Resource Locator

xiii

Page 14: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

WAIS – Wide Area Information Server

XML – eXtensible Markup Language

XP – Extreme Programming

YAML – YAML Ain't Markup Language ou Yet Another Markup Language

xiv

Page 15: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

1 - INTRODUÇÃO

1.1 - MOTIVAÇÃO

Actualmente, o recrutamento de pessoas com características profissionais específicas é

objecto de cada vez maior atenção por parte das empresas. É usual existirem nas empresas de uma

certa dimensão departamentos especializados na gestão dos seus recursos humanos, de modo a

agilizarem a prospecção e contratação de novas pessoas para a ocupação de todo o tipo de tarefas

necessárias ao funcionamento da empresa.

A massificação da utilização da internet possibilitou um aumento na rapidez de acesso à

informação de uma forma geral, com um grande impacto nos processos de recrutamento, dado que

passaram a utilizar essa maior quantidade de informação disponível, quer ao nível da informação

disponibilizada pelos empregadores, quer ao nível da informação disponibilizada pelos candidatos.

Assim, surgiram aplicações designadas por sites de emprego que permitem centralizar essa

informação, de modo a disponibilizá-la, quer aos candidatos, quer aos empregadores, usando a

internet como canal preferencial dada a sua facilidade de acesso e ao uso de ferramentas comuns

para as trocas de informação, nomeadamente a utilização da linguagem HTML e a sua interpretação

através de aplicações desenvolvidas para o efeito – browsers.

À medida que os sites de emprego foram sendo desenvolvidos, foi sendo disponibilizado aos

utilizadores cada vez maior detalhe na informação e cada vez mais funcionalidades.

Porém, não só os sites de emprego mas os sites de uma maneira geral permitem apenas

critérios de pesquisa muito básicos, o que implica muito trabalho dos utilizadores, sejam eles

candidatos ou empregadores, na análise dos resultados apresentados. No caso de um empregador

precisar de contratar um empregado para uma determinada função, por exemplo um advogado, é

provável que num determinado site de emprego, o conjunto de resultados possíveis seja de algumas

centenas, tornando o processo de recrutamento, ou num processo moroso e incomportável de

visualização individual de cada um dos resultados, ou aleatório, não estando bem definido o critério

pelo qual foi escolhido um sub-conjunto dos resultados da pesquisa para o prosseguimento do

processo.

1.2 - OBJECTIVOS

Com o presente trabalho pretende-se desenvolver uma aplicação que disponibilize as

funcionalidades habitualmente encontradas noutros sites de emprego, mas que integre uma nova

forma de pesquisa que permita aos utilizadores basearem as suas pesquisas não apenas em critérios

específicos, como por exemplo a lista de todos os candidatos de uma profissão, mas em critérios

mais abstractos que permitam uma melhor tomada de decisão sobre os resultados a apresentar,

como por exemplo a ordenação de perfis de candidatos que melhor correspondem a um determinado

1

Page 16: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

perfil modelo definido pelo empregador.

Para esse efeito será necessário iniciar este trabalho por uma breve análise às

funcionalidades disponibilizadas neste momento por outros sites de emprego. De seguida escolher

ferramentas e metodologias que possibilitem o desenvolvimento da aplicação de uma forma rápida e

eficaz, permitindo a prevenção de erros e a fácil alteração de funcionalidades, bem como a não

repetição do código desenvolvido, por forma a reduzir o tempo de desenvolvimento e a aumentar

centralização de lógica da aplicação.

É necessário também abordar os protocolos de transmissão de dados actualmente utilizados

para este tipo de aplicações, bem como o modo como esses dados são recebidos pelo browser e

apresentados ao utilizador.

Uma vez que a aplicação irá disponibilizar determinada informação de utilizadores para outros

utilizadores, é necessário que os dados sejam persistidos de forma correcta e coerente e que o seu

acesso seja rápido, de modo a que a aplicação seja rápida na apresentação de dados aos

utilizadores. É apresentado o mecanismo disponibilizado pela ferramenta utilizada para a

implementação da lógica de funcionamento da aplicação, por forma a minimizar a repetição do código

da aplicação, permitindo a sua reutilização, sobretudo na geração da linguagem de comunicação

entre o browser e a aplicação.

É discutido o modo de persistência dos dados e a forma de garantir a sua coerência. Dado

que o site vai potencialmente ser acedido por muitos utilizadores, é necessário que exista uma

infraestrutura para garantir robustez e rapidez de execução da aplicação desenvolvida, passando

para as funcionalidades disponibilizadas aos utilizadores, assim como o seu registo como utilizadores

e a sua autenticação e autorização.

Pretende-se ainda que a aplicação seja facilmente transposta para outras linguagens de

modo a poder ser utilizada em vários países e que essa adaptação seja simples de realizar. Como já

foi referido, a aplicação irá potencialmente ser acedida por muitos utilizadores, o que pode levar à

introdução de dados não válidos ou não relevantes. Assim, é necessário que todas as introduções de

dados dos utilizadores sejam correctamente validadas. É natural também que os utilizadores não

queiram disponibilizar toda a informação introduzida de uma forma totalmente aberta. Por isso deve

ser o utilizador a escolher que informação estará visível para outros, podendo ao longo do tempo

modificar as suas preferências.

Finalmente, é necessário que as pesquisas possam funcionar de uma forma eficaz, usando o

máximo de informação possível, quer através da pesquisa por escolha de critérios, quer através da

definição de modelos de perfis (por parte dos empregadores) e de ofertas (por parte dos candidatos),

por forma a permitir que sejam encontrados de entre os perfis e ofertas introduzidos pelos candidatos

e empregadores, aqueles que mais se assemelham aos modelos definidos, por forma a que estes

sejam apresentados por ordem de semelhança.

Os assuntos acima referidos irão ser alvos de abordagem e justificação detalhada ao longo

dos próximos capítulos.

2

Page 17: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

2 - BREVE ABORDAGEM SOBRE SITES EXISTENTES

Com o intuito de obter uma noção do estado da arte no que diz respeito a sites de emprego

existentes, foram consultados alguns dos sites de maior utilização, quer nacionais, quer estrangeiros.

Durante a pesquisa, foi constatado que existem uma série de características comuns a todos

os sites de emprego e outras características apenas apresentadas por um ou alguns. Entre as

características comuns contam-se a introdução de currículos, que designaremos futuramente por

perfis, por parte dos candidatos, bem como a introdução de ofertas de emprego por parte dos

empregadores.

Apresentaremos de seguida as principais características de alguns dos sites de emprego

visitados, quer nacionais, quer internacionais, sendo estes dos mais utilizados por empregadores e

candidatos.

www.netemprego.gov.pt

O site www.netemprego.gov.pt é um site lançado e apoiado pelo IEFP – Instituto de Emprego

e Formação Profissional. Na área de candidatos, é possível a introdução de perfil, a consulta de

ofertas de emprego nacionais, a consulta de ofertas de emprego no espaço económico europeu, a

consulta de concursos de acesso à administração pública, a gestão do perfil e a gestão de uma pasta

pessoal de ofertas de emprego. As pesquisas possíveis por candidato são a pesquisa simples e a

pesquisa avançada. Na pesquisa simples, o candidato pode efectuar pesquisas de ofertas através de

alguns critérios, nomeadamente ofertas inseridas no próprio dia, ofertas inseridas durante a semana,

por área profissional, por emprego, região e concelho. Na pesquisa avançada, além dos critérios

anteriormente enunciados, são acrescentadas as pesquisas por habilitações literárias, tipo de

3

Figura 1: Página inicial www.netemprego.gov.pt

Page 18: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

contrato, idioma, regime de trabalho e número de oferta.

Na área de empregadores, as funcionalidades são a pesquisa de perfis, a gestão das ofertas

inseridas e a gestão de uma pasta pessoal de perfis. Existem também nesta área dois tipos de

pesquisa. Na pesquisa simples, o empregador pode efectuar pesquisas de perfis inseridos no próprio

dia ou durante a semana, por área profissional, por profissão, por região e por concelho. A pesquisa

avançada permite a utilização dos critérios da pesquisa simples, assim como a pesquisa por

habilitações literárias, idiomas e número de perfil.

É ainda possível efectuar a pesquisa por centros de emprego existentes no país.

www.net-empregos.com

O site www.net-empregos.com é um dos sites mais usados no mercado de emprego em

Portugal. As funcionalidades disponíveis para o candidato são a introdução de perfil de candidato, a

pesquisa de ofertas, gestão de pasta de ofertas favoritas, agentes automáticos para envio de email na

introdução de uma oferta de uma determinada categoria profissional pelo empregador, caixa de

correio, sistema de mensagens e visualização de estatísticas.

Os empregadores têm à sua disposição a introdução de ofertas, a pesquisa de perfis, a

gestão de uma pasta de perfis favoritos, agentes automáticos para envio de email na introdução de

um perfil de uma determinada categoria profissional pelo candidato, caixa de correio, sistema de

mensagens, visualização de estatísticas e a introdução de uma página de apresentação da empresa.

As pesquisas, quer para candidatos, quer para empregadores poderão ser efectuadas por

categoria profissional – pesquisa simples – assim como por zona geográfica, área profissional e

palavra chave – pesquisa avançada.

4

Figura 2: Página inicial www.net-empregos.com

Page 19: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

www.empregos.org

O site www.empregos.org é um site bastante simples na sua construção embora possua

totais de candidatos, empregadores, perfis e ofertas da ordem das dezenas de milhares. As

funcionalidades principais são a introdução de perfis e ofertas, bem como pesquisas, quer para

candidatos, quer para empregadores por palavra-chave, área profissional, localização e nível de

experiência.

aeiou.expressoemprego.pt

O site aeiou.expressoemprego.pt é um dos mais visitados em Portugal para a procura de

emprego. Embora seja bastante limitado nas funcionalidades apresenta como vantagem o facto de

estar ligado a um dos semanários de maior tiragem que contém um caderno exclusivo dedicado ao

tema emprego. É possível o registo para candidatos e empregadores bem como a subscrição de uma

newsletter. As pesquisas poderão ser efectuadas utilizando os seguintes critérios: emprego,

referência, formação, empresa, artigo, ofertas mais visitadas, ofertas menos visitadas e ofertas a

expirar. Possui ainda a pesquisa avançada que inclui os critérios entidade, localização, função e

5

Figura 3: Página inicial www.empregos.org

Page 20: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

sector.

www.stepstone.pt

O site www.stepstone.pt é um site derivado do site principal internacional www.stepstone.com,

partilhando algumas das suas funcionalidades. Tem uma apresentação simples e apresenta apenas a

possibilidade de pesquisa de ofertas, podendo empregadores e candidatos efectuar o seu registo. Os

critérios de pesquisa são: categoria, localização, área profissional, estatuto, sector, palavras-chave,

empresa e últimas ofertas.

Possui ainda a possibilidade de visualização de apresentações de empresas, ofertas para

primeiro emprego e ofertas para executivos de vários sectores de actividade.

6

Figura 4: Página inicial aeiou.expressoemprego.pt

Figura 5: Página inicial www.stepstone.pt

Page 21: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

www.infoemprego.pt

O site www.infoemprego.pt é também um dos mais comummente utilizados em Portugal,

embora seja bastante reduzido em termos de funcionalidades. É possível o registo para candidatos e

empregadores assim como a criação de alertas para envio de email se for introduzido um perfil ou

uma oferta que sejam da área profissional pretendida. As pesquisas são por emprego e área

profissional para as pesquisas simples e por área profissional, distrito, salário, tipo de contrato,

experiência, período, data de publicação e palavras chave para as pesquisas avançadas.

www.monster.com

O site www.monster.com é um dos sites de emprego internacionais mais utilizados em todo o

mundo e dos mais completos em termos de funcionalidades apresentadas. As funcionalidades mais

relevantes são a inserção de perfis e ofertas, o envio de newsletters, a existência de gestão de pasta

pessoal de perfis e ofertas, o aviso de oportunidade de emprego por email, a introdução de antigos

empregos assim como um conjunto de ajudas como por exemplo cursos superiores aconselhados e

templates de escrita de perfis.

As pesquisas são bastante completas ao nível dos critérios apresentados. A pesquisa simples

inclui pesquisa por emprego, palavra-chave e localização. A pesquisa avançada permite ainda a

7

Figura 6: Página inicial www.infoemprego.pt

Page 22: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

utilização dos critérios experiência, empresa, área profissional, distância, categoria, grau académico,

tipo de emprego e data da oferta.

As empresas poderão fazer a gestão de perfis de candidatos e efectuar pesquisas por

emprego, experiência, localização, distância e palavra-chave.

A destacar o facto de existir uma aplicação para a utilização em telemóveis.

www.totaljobs.com

O site www.totaljobs.com é um site de emprego do Reino Unido apresentando

funcionalidades bastante interessantes. As principais são o registo de empregadores e candidatos, o

envio de email a candidatos e empregadores se alguma oferta ou perfil são inseridos cumprindo

alguns critérios como área profissional (jobs by email). Tem também à disposição templates de perfis

e ofertas. As pesquisas poderão ser simples ou avançadas.

A pesquisa simples de perfis inclui salário, sector, tipo, categoria, localização e palavras-

chave e a avançada inclui ainda o actual emprego do candidato e o emprego desejado. Para

candidatos, a pesquisa simples de ofertas inclui palavras-chave, localização e distância, enquanto

que a avançada inclui ainda salário, sector de actividade, tipo de emprego, referência e palavras-

chave a excluir da pesquisa.

Outras funcionalidades adicionais são o nível do perfil uma zona para licenciados, uma zona

de aconselhamento em entrevistas e uma zona de vídeos.

8

Figura 7: Página inicial www.monster.com

Page 23: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

www.eurojobs.com

O site www.eurojobs.com é um dos sites de emprego mais utilizados a nível europeu. As suas

funcionalidades mais interessantes são o registo de candidato e empregador, a possibilidade de

visualização de carta de apresentação, a submissão de candidaturas, o contacto por email e a

introdução de fotografia e currículo. As pesquisas podem ser efectuadas por emprego, data, sector,

país e actividade.

Como conclusão, podemos referir que não foi encontrado nenhum site que dispusesse das

características que motivaram o desenvolvimento deste trabalho. Alguns dos sites consultados

possuem funcionalidades interessantes, mas aquém do objectivo pretendido com o resultado final do

protótipo a desenvolver, especialmente no que respeita às pesquisas de perfis e ofertas.

9

Figura 8: Página inicial www.totaljobs.com

Figura 9: Página inicial www.eurojobs.com

Page 24: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

3 - CONTEÚDO TEÓRICO

3.1 - DJANGO

Este capítulo tem como objectivo introduzir a framework sobre a qual foi desenvolvido o

protótipo, apresentando as suas principais potencialidades, detalhando os seus vários componentes e

a forma como um projecto em Django deve ser estruturado. É também analisada a linguagem de

programação Python utilizada.

3.1.1 - INTRODUÇÃO AO DJANGO

O Django é uma framework escrita inteiramente em Python, destinada ao desenvolvimento de

aplicações web que têm por base um Sistema de Gestão de Base de Dados (SGBD).

Esta framework foi estruturada de modo a permitir que a codificação da aplicação siga um

princípio fundamental: o DRY (Don't Repeat Yourself) [35] cap. 2, ou seja o princípio da não repetição

de código. A framework baseia-se no padrão de arquitectura de software MVC [53] cap. 2, consistindo

na separação das várias camadas da aplicação. O 'M' corresponde ao Modelo, o 'V' à Vista e o 'C' ao

Controlador.

MODELO

O Modelo permite obter uma representação de dados de uma tabela na Base de Dados,

embora não seja somente um DTO. Os DTOs são objectos que mapeiam dados persistidos e

permitem algumas operações simples, como por exemplo a representação em String do objecto, sem

expor os detalhes da persistência. Consideremos o seguinte exemplo de uma tabela num SGBD:

Userpk id int(11)

username varchar(30)

name varchar(100)

Tabela 1: Exemplo de User

Para a Tabela “User”, o Modelo correspondente seria um objecto que iria conter os três

campos correspondentes às colunas da Tabela, assim como a lógica de persistência e a lógica de

relação com outros Modelos.

Particularizando a definição de Modelos em Django, tomemos o seguinte exemplo onde são

definidas a classe “Reporter” e a classe “Article”:

10

Page 25: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

class Reporter(models.Model):

full_name = models.CharField(max_length=70)

def __unicode__(self):

return self.full_name

class Article(models.Model):

pub_date = models.DateTimeField()

headline = models.CharField(max_length=200)

content = models.TextField()

reporter = models.ForeignKey(Reporter)

def __unicode__(self):

return self.headline

No exemplo apresentado, são definidos dois Modelos em Django. De salientar o facto de

ambos serem extensões da classe abstracta “models.Model”.

Os atributos correspondentes às colunas das Tabelas do SGBD são os atributos das

instâncias e correspondem a tipos de dados coerentes com as colunas das Tabelas. A lógica de

relação entre as Tabelas é também descrita no Modelo: neste caso “um para muitos” (capítulo 3.4.2).

A lógica de persistência é definida na classe abstracta “models.Model”, a qual é herdada.

A lógica de persistência consiste no acesso e manipulação de dados num SGBD pela

aplicação. O Django disponibiliza uma API criada em run-time para o acesso e manipulação dos

dados, exclusivamente através das definições de Modelos acima exemplificados, assunto que será

detalhado mais à frente.

VISTA

A Vista consiste na camada destinada à manipulação da apresentação, e contém elementos

informativos e de tomada de decisão, ou seja a user-interface. A Vista, numa aplicação web, consiste

na grande maioria das situações, na geração dinâmica de um documento de HTML, baseado em

dados de um Modelo parcial, total ou em vários Modelos. Tomando os exemplos acima indicados,

uma Vista possível para a classe “Reporter” seria a apresentação do atributo “full_name” e uma lista

de “Article” relacionados.

Uma Vista possível para o exemplo referido seria:

My full name is {{ reporter.full_name }}

{% for article in reporter.articles %}

<p>Headline - {{ article.headline }}</p>

<p>PubDate - {{ article.pub_date }}</p>

{% endfor %}

CONTROLADOR

O Controlador recebe pedidos (request) e envia respostas (response), ou seja é nos

Controladores que se encontra toda a lógica da aplicação. Os pedidos e as respostas são detalhadas

11

Page 26: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

no capítulo 3.3.1. O Controlador poderá receber ou não dados e processa as respostas, fazendo

invocações a Modelos e populando os objectos necessários para as Vistas apresentarem.

Por exemplo, para um Controlador que tem como função preparar a apresentação de um

“Reporter”, a sequência de tarefas deste poderia ser a seguinte:

• Receber pedido

• Interpretar dados do pedido (“full_name” do “Reporter”)

• Invocar o Modelo “Reporter” para que retorne o objecto correspondente aos dados

recebidos (“full_name”) e “Article” relacionados, se existir no SGBD

• Se existir popular, a Vista com o objecto “Reporter”

• Retornar o documento HTML gerado pela Vista

• Se não existir, exibir Vista de erro.

Pela descrição de funções de cada um dos componentes, podemos verificar que cada um

tem a sua função específica, o que permite que a aplicação tenha uma estrutura mais clara e bem

definida.

3.1.2 - ESTRUTURA DE UM PROJECTO DJANGO

Uma aplicação web em Django, é pois um conjunto de Modelos, Vistas e Controladores que

constituem a base da aplicação desenvolvida pelo programador.

Quando inicia uma nova aplicação em Django, o programador deve usar o script de criação

de um novo projecto, que cria os ficheiros iniciais do mesmo, nomeadamente “manage.py”,

“settings.py”, “urls.py”, e uma pasta com o nome do projecto. Esta pasta contém o ficheiro de

definição de Modelos: “models.py”, o ficheiro “views.py”, o ficheiro “forms.py”, e o ficheiro “tests.py”, e

tipicamente uma pasta contendo as templates, que são ficheiro contendo a linguagem de templating

do Django de modo a criar páginas dinâmicas em HTML.

Iremos agora abordar o que devem ser os conteúdos de cada um destes ficheiros.

SETTINGS

O ficheiro “settings.py” é o ficheiro onde são definidas todas as configurações necessárias ao

funcionamento da aplicação em Django, devendo ser adaptado pelo programador. Entre as várias

configurações possíveis de definir, temos a definição do SGBD usado (capítulo 3.4.5), a linguagem a

utilizar, as definições horárias, a localização da pasta que contém as templates, a localização dos

vários ficheiros de fixtures e as definições de cache. Por omissão, são colocadas algumas definições

necessárias quando a aplicação é criada, podendo-se posteriormente adicionar outras definições se

assim se justificar, como as definições de cache, ou as definições de logging.

12

Page 27: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

URLS

O ficheiro “urls.py” é onde está definido o mapeamento de URLs. Este consiste na definição

de um tuplo contendo os vários padrões de URLs necessários à interacção do browser com a

aplicação.

VIEWS

O ficheiro “views.py” contém os Controladores do MVC. Estes são definidos através de

métodos e contém a lógica da aplicação.

MODELS

O ficheiro “models.py” é onde deve constar a definição dos modelos. Como já antes referido,

é através deste ficheiro que são definidos em objectos Python as entidades correspondentes às

tabelas no SGBD. Uma das grandes vantagens da utilização de uma framework é a existência de

middleware para gestão dos acessos ao SGBD. Desta forma, definindo um modelo, são

disponibilizados métodos para efectuar acções CRUD (Create, Read, Update, Delete) sobre a Base

de Dados.

O package “models” no Django contém ainda classes que nos permitem definir qual o tipo de

dados de cada campo de um modelo. Por exemplo, se se definir um atributo de um modelo como

“CharField” significa que o tipo de dados corresponde a uma String e se se definir como IntegerField

siginifica que o tipo de dados é inteiro.

Os modelos do Django proporcionam também a manutenção da integridade referencial entre

as várias tabelas do SGBD. Se uma tabela contiver uma chave-estrangeira (capítulo 3.4.2) para outra

tabela, é possível o acesso ao modelo que mapeia a segunda tabela através do modelo que mapeia a

primeira tabela.

O Django é considerado loose-coupled ao SGBD. Isto significa que qualquer alteração aos

modelos não se repercute imediatamente no SGBD. Se for apenas acrescentado um novo atributo a

um objecto Model, essa alteração não se irá repercutir na tabela correspondente. Neste caso é

necessário aceder directamente ao SGBD e acrescentar a coluna à tabela.

O mesmo acontece caso algum modelo seja considerado desnecessário em determinada

altura. É necessário efectuar a remoção da tabela correspondente. Estas alterações aos modelos são

acontecimentos regulares durante o período de vida de uma aplicação, devido à sua própria

evolução, de forma a que esta cumpra mais requisitos e permita mais funcionalidades.

Todavia é disponibilizado pelo Django a possibilidade de se efectuar uma sincronização com

o SGBD, embora esta seja bastante limitada, consistindo em criar no SGBD todas as tabelas com os

correspondentes campos definidos no modelo que ainda não tenham sido criadas.

O objectivo da existência do ficheiro “models.py” contendo todos os modelos definidos pelo

13

Page 28: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

programador é disponibilizar à camada “C”- Controlador do MVC objectos Python que representem os

dados de uma base de dados de um SGBD, bem como funções que permitam a pesquisa e

manipulação desses mesmos dados.

De realçar ainda que são sempre criados pelo Django alguns campos que não são

explicitamente definidos no modelo. Se o objecto não contiver referências a outros objectos (chaves-

estrangeiras), é criado um campo do tipo inteiro de nome “ID” que é uma chave-primária. Caso haja

referências a outros objectos são criadas as chaves-estrangeiras correspondentes, sendo que o

nome da coluna criado é o nome da tabela relacionada seguido de “_id”.

No Anexo A – Operações básicas sobre o SGBD, apresentam-se alguns exemplos de como

realizar algumas operações sobre o SGBD, usando os modelos “Library” e “Book”.

FORMS

O ficheiro “forms.py” é o ficheiro onde estão as definições dos vários formulários, ou seja

objectos que irão conter dados introduzidos pelo utilizador. Estas definições têm um papel

fundamental na arquitectura do Django. Como verificámos anteriormente, podemos facilmente criar

um objecto para introdução de dados no SGBD. Porém os dados introduzidos pelos utilizadores

muitas vezes não estão preparados para essa finalidade. As definições colocadas no ficheiro

“forms.py” vão permitir transformar esses dados “em bruto” em dados prontos a inserir.

Regularmente os campos apresentados numa Vista para a edição ou criação de uma

entidade correspondem aos campos definidos no modelo dessa entidade. Por vezes pode tornar-se

um pouco repetitivo apresentar numa Vista os campos correspondentes a um modelo. Supondo que o

modelo e o formulário correspondente continham muitos campos, poderia tornar-se uma tarefa

morosa construir o formulário na Vista.

Nesse sentido o Django disponibiliza algumas funções que permitem transformar formulários

directamente em HTML. Estas são:− as_p()

− as_ul()

− as_table()

Deste modo, os formulários são transformados em HTML directamente, sem ser necessário

na template a escrita do HTML para a construção do formulário, dado que é gerado através das

funções apresentadas.

Outra das vantagens do uso de formulários no Django prende-se com as validações. É

possível utilizar as validações do Django ou efectuar validações definidas pelo programador.

As validações do Django são baseadas no modelo de dados criado, ou seja são validados o

comprimento máximo dos campos e a sua obrigatoriedade de preenchimento, embora variem com o

tipo de dados. Para um campo inteiro, o Django apenas permite valores que contenham algarismos,

apresentando uma mensagem de erro caso sejam introduzidos outros caracteres.

É possível também fazer transformação de dados de campos. Pense-se porventura em

14

Page 29: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

transformar todas as primeiras letras de campos que correspondam a introdução de nomes próprios

para letra maiúscula seguido de letras minúsculas, ou seja para uma introdução do utilizador de

“mARIa” ou de “maria”, o que seria introduzido no SGBD seria “Maria”.

Os formulários em Django são usados em controladores de uma forma bastante directa. É

passado um parâmetro para o formulário que é um objecto do Django – será analisado

posteriormente – que recolhe todos os parâmetros de submissão de um pedido ao servidor, ou seja

de um request. Caso o formulário seja válido ou não, é efectuada a acção correspondente.

Se o formulário não é válido e se for colocado novamente como parâmetro para a Vista, o

utilizador irá ver os campos com os dados inseridos anteriormente, assim como a lista de erros onde

falharam as validações. Existe ainda a possibilidade de se definirem formulários directamente através

dos modelos, podendo as validações serem redefinidas sobrepondo-se às do modelo. É também

possível redefinir as transformações dos dados dos utilizadores. Podem-se ainda definir quais os

campos a excluir ou a incluir quando se pretende que o formulário contenha apenas alguns dos

campos do modelo. A vantagem da utilização de formulários definidos através de modelos é a

utilização por estes da a informação que já existente no modelo.

TEST

O ficheiro “test.py” é onde devem ser colocados os testes à aplicação. Os testes têm dois

objectivos: validar que, quando se está a realizar o desenvolvimento de uma nova funcionalidade, se

obtém o comportamento esperado, e permitir que, quando se está a reformular uma funcionalidade já

existente, se garanta que não houve alterações de comportamento inesperadas.

Ao conjunto de testes de uma aplicação dá-se o nome de test suite. Justificar-se-á então, que

se testem dois tipos de componentes: os modelos e os controladores, ou seja as classes que

compõem o ficheiro “models.py” e os métodos que compõem o ficheiro “views.py”.

O Django permite que os testes sejam escritos de duas formas distintas: como Doc test ou

como Unit test. Os “Doc test” usam o atributo especial “__doc__” do objecto em causa, ou seja uma

docstring. Dentro desta temos a codificação do teste com alguma semelhança a uma sessão

interactiva de Python. Quando é executado o teste, é verificada a existência do atributo “__doc__” e

se existir é avaliado o código existente dentro da docstring.

A grande vantagem oferecida por este tipo de teste, é permitir que o próprio teste fique dentro

do objecto, podendo este objecto ser um módulo, uma função, uma classe ou um método. Permitem

ainda documentar, quer o objecto, quer o teste, e assim evitar o overhead de escrever classes e

métodos. Apresentam, porém, a desvantagem de aumentar o código presente dentro dos objectos,

bem como a utilização de uma sintaxe menos clara que os Unit test. Quando a test suite é executada

pelo Django é verificada a existência de docstring dentro dos vários objectos que constam nos

ficheiros “models.py” e “test.py”.

Os Unit test são codificados como métodos de uma classe que é sub-classe de

“unittest.TestCase”. São derivados de uma framework de testes unitários existente em Java

15

Page 30: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

denominada JUnit. As vantagem da utilização deste tipo de testes são a clareza do código, já que não

são utilizadas as docstring, bem como a centralização no ficheiro “test.py” de todo o conjunto de

testes de uma aplicação, embora possam também ser declarados no ficheiro “models.py”.

Estas duas formas de realizar testes a uma aplicação em Django poderão ser usadas em

conjunto, não havendo por isso qualquer necessidade de escolha prévia de qual o tipo de testes a

realizar durante o desenvolvimento da aplicação. Todavia, por uma questão de organização, optou-se

por colocar os testes apenas no ficheiro “test.py”, usando apenas Unit test.

Para a realização a testes aos controladores, o Django disponibiliza uma ferramenta muito

útil: o “Test Client”.

Esta ferramenta tem as seguintes funções:

• Simular pedidos GET e POST aos URLs definidos no ficheiro “urls.py” que são mapeados

em métodos definidos no ficheiro “views.py”, e deste modo efectuar testes aos

controladores, observando a resposta recebida, podendo ser testados os códigos de

resposta do protocolo HTTP (capítulo 3.3.2), os cabeçalhos da resposta e o próprio corpo

da resposta, ou seja o conteúdo resultante da renderização do template (capítulo 3.3.6).

• Testar que a template correcta é renderizada e que são colocados no seu contexto os

atributos necessários ao seu processamento.

• Testar que o controlador (método do ficheiro “views.py”) executado é o correcto.

Por último, o Django apresenta ainda a possibilidade de utilização de fixtures. As fixtures são

ficheiros que contêm dados para popular o SGBD antes da realização de testes. Por exemplo, se se

está a efectuar um teste a um modelo que retorna informação de uma tabela no SGBD, é possível

popular essa tabela com dados de teste de modo a verificar se esses valores são retornados. No

início de cada teste são inseridos no SGBD os dados e são novamente retirados no fim do teste.

MANAGE

O ficheiro “manage.py” é um ficheiro que permite realizar uma série de tarefas utilitárias e de

administração através da linha de comando.

As principais funções realizadas são:

• O lançamento de uma shell1 para o SGBD.

• A apresentação de diferenças entre as configurações da aplicação e as configurações

iniciais (no ficheiro “settings.py”).

• O retorno de todos os dados relacionados com a aplicação persistidos no SGBD.

• A criação de um ficheiro “models.py” através de tabelas de uma base de dados do SGBD.

• Popular um SGBD com fixtures.

1 Cliente de uma aplicação por linha de comando

16

Page 31: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

• Executar o servidor aplicacional de desenvolvimento do Django.

• Executar uma “shell” interactiva de Python.

• Iniciar um novo projecto em Django, criando a estrutura de directorias.

• Criar as tabelas no SGBD correspondentes a novos modelos definidos no ficheiro

“models.py”.

• Executar testes.

• Validar os modelos do ficheiro “models.py” com as tabelas no SGBD correspondentes.

Foi apresentada uma breve descrição dos componentes de um projecto em Django, bem

como alguns exemplos muito simples da sua utilização, de modo a que sejam mais claras as funções

de cada um desses componentes e o dinamismo e funcionalidades oferecidos pelo Django na criação

de aplicações, permitindo tornar o desenvolvimento mais organizado e eficiente.

3.1.3 - LINGUAGEM DE PROGRAMAÇÃO PYTHON

A linguagem de programação Python foi a linguagem usada para o desenvolvimento deste

projecto. O Python [45] cap. 1, é uma linguagem de programação open-source usada quer para o

desenvolvimento de aplicações quer para scripting. É portável entre sistemas operativos, a sua

sintaxe é simples, o que torna o código perceptível e fácil de manter, e é orientada à produtividade do

programador dado que o código necessário para desenvolver uma aplicação é menos extenso do que

noutras linguagens, como Java e C, e pelo facto de ser uma linguagem interpretada, ou seja não há a

necessidade de o programador compilar o código sempre que pretende executar a aplicação.

O Python é uma linguagem orientada a objectos [66] cap. 1, ou seja, permite a estruturação

da programação em classes com atributos e comportamentos (métodos) próprios, gozando das

propriedades de herança1 e polimorfismo2, embora possa ser também utilizada como linguagem

procedimental, não usando objectos. Fica ao critério do programador a metodologia de programação

utilizada. No caso deste projecto, foi utilizada programação por objectos, dado que o Django foi

desenvolvido para ser utilizado segundo esse paradigma.

É também uma linguagem dinâmica, não sendo por isso necessário tipificar explicitamente as

variáveis, o que se por um lado requer maior atenção da parte do programador, por outro permite que

o código implementado seja muito menos verboso em comparação com outras linguagens estáticas

como o Java e o C, em que é necessário definir explicitamente os tipos de todas as variáveis.

O Python é distribuído com uma variada colecção de bibliotecas o que permite uma grande

flexibilidade de utilização em domínios tão variados como, por exemplo, aplicações web, sistemas de

integração contínua, sistemas de controlo de versões e media players.

Foi escolhida a utilização de Python versão 2.7 devido a ser a última versão estável e mais

1 Uma classe pode herdar o comportamento de outra.2 Uma classe pode redefinir parte do seu comportamento relativamente a outra classe de onde herda esse comportamento.

17

Page 32: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

completa a nível de bibliotecas. Não foi usada uma nova evolução da linguagem, o Python versão 3.x,

devido a não existir ainda compatibilidade com o Django e com a interface WSGI. A versão 3.x não é

um upgrade à versão 2.x, mas uma evolução diferente da linguagem, não havendo compatibilidade

entre o código desenvolvido para a versão 2.x e 3.x.

Uma solução também possível para este projecto seria o uso da linguagem Ruby e a

framework web Rails desenvolvida em Ruby, concorrente e em muitos aspectos similar ao Django.

Não foi escolhida esta solução devido à maior experiência do autor com Python e Django por

comparação com Ruby e Rails.

3.2 - DESENVOLVIMENTO ORIENTADO POR TESTES

O objectivo deste capítulo é analisar uma metodologia de desenvolvimento de software que

permite, através de uso de regras muito simples mas por vezes difíceis de seguir, que o

desenvolvimento do código de uma aplicação seja sistemático e eficaz.

Dadas as suas características, esta metodologia permite uma grande poupança de tempo na

codificação, dado que é orientada à funcionalidade e foi o método usado no desenvolvimento deste

protótipo.

3.2.1 - DESCRIÇÃO E OBJECTIVOS

O desenvolvimento orientado por testes (Test Driven Development) é uma forma de

desenvolvimento de software que consiste em executar testes antes da escrita do próprio código,

durante o processo de desenvolvimento de uma aplicação.

O objectivo do TDD não é validar o código desenvolvido, mas garantir que as especificações

são cumpridas. Deste modo podemos considerar que o TDD é uma técnica de programação e não

uma forma de efectuar testes funcionais à aplicação. Desta forma, o TDD permite, por um lado, que o

programador reflicta sobre o design do código a desenvolver, e por outro que o código seja limpo,

funcione e cumpra o que é especificado pelos testes.

O TDD foi introduzido em [1], como parte integrante dos conceitos de programação de

Extreme Programming (XP), que define um conjunto de regras simples tendo como objectivo o

melhoramento do desenvolvimento de software. Entre estas contam-se, além do TDD, programação

em pares de programadores, revisão de código desenvolvido, código claro e alterações de requisitos

ao longo do tempo, objectivos de desenvolvimento realistas, planeamento de releases e integração

contínua.

3.2.2 - PROGRAMAÇÃO EM TDD

O TDD é um processo iterativo constituído por três fases:

• Na primeira fase o programador escreve um teste. Como não existe a funcionalidade

18

Page 33: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

desenvolvida na aplicação, o teste irá falhar.

• De seguida efectua-se o desenvolvimento do código necessário até que o teste passe.

Estas duas primeiras fases correspondem ao TFD (Test First Design).

• Na terceira fase é avaliado o código desenvolvido para passar o teste, de forma a que

não haja repetições na aplicação e para que fique o mais “limpo” possível.

A Figura 10 ilustra os vários passos do TDD.

Findo este processo, voltamos novamente à primeira fase, escrevendo um novo teste para

uma nova funcionalidade até que seja terminada a aplicação.

Desta forma o código funcional é sempre escrito depois de um teste sendo, por isso,

completamente distinto do método tradicional em que se escreve código funcional e depois testes a

esse código.

3.2.3 - TDD COMPARADO AO MÉTODO TRADICIONAL

Em comparação com o método tradicional, o TDD apresenta consideráveis vantagens,

embora à primeira vista não pareça. A questão que se coloca é a seguinte: porque é necessário

“perder tempo” a escrever testes? Com o desenrolar do desenvolvimento, a aplicação vai ficando

cada vez mais complexa. Nem sempre existe tempo por parte dos programadores para,

posteriormente à implementação de uma funcionalidade, efectuarem os testes necessários.

Por seu turno, é muito frequente também que um programador não teste todas as

funcionalidades que foram adicionadas, especialmente se desenvolvidas por outro programador. Com

o passar do tempo de desenvolvimento, e sem os testes adequados, o dinamismo com que se

consegue fazer uma alteração na aplicação diminui, porque uma pequena alteração pode provocar

um colapso em várias funcionalidades.

É para suprir estas dificuldades que se torna vantajoso o uso do TDD. Uma das

características é ser o programador a escrever os seus próprios testes. Isto, conjugado com o facto

19

Figura 10: Etapas do processo TDD

Page 34: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

de não se desenvolver código funcional, tem como consequência que todas as funcionalidades estão

antecipadamente testadas, bem como todas as linhas de código desenvolvidas. Caso seja necessário

alguma alteração na aplicação em termos funcionais, depois de efectuada essa alteração, é possível

aferir imediatamente qual o impacto que a alteração vai ter no resto da aplicação, dado que alguns

testes passam a falhar.

Outra das vantagens é o facto de se ter incrementalmente construído um conjunto de testes à

aplicação desenvolvida, que garantem que esta cumpre todas as funcionalidades para a qual foi

planeada, o que traduz um aumento da qualidade do produto final.

Embora inicialmente o tempo despendido em desenvolvimento tenha um acréscimo devido à

codificação dos testes, rapidamente esse tempo é recuperado à medida que a aplicação vai ficando

mais extensa, dado o facto de haver um grande ênfase na qualidade do código produzido, o que

permite que, em comparação com o método tradicional, se consiga reduzir consideravelmente o

tempo de manutenção da aplicação e correcção de bugs, que surgirão com maior frequência usando

o método tradicional.

3.2.4 - PROCESSO DE CODIFICAÇÃO DE TESTES

A correcta codificação de testes é fundamental para que a programação TDD seja eficaz. Se

os testes não corresponderem às funcionalidades desenvolvidas, todo o princípio do TDD não é

respeitado e a qualidade da implementação começa a diminuir.

Assim, enumera-se de seguida alguns princípios a que a codificação de testes deve obedecer

[2] cap. 25:

• Os testes devem ter uma execução rápida.

• Os testes devem ser executados de forma isolada.

• Devem ser usados dados claros.

• Devem ser usados dados o mais próximos dos reais caso seja necessário.

• Cada teste deve contribuir para a conclusão das funcionalidades a desenvolver.

No caso do primeiro ponto, se os testes tiverem uma grande duração a serem executados, a

implicação decorrente será que o conjunto dos testes vai ser executado menos vezes do que o

necessário dado ser uma tarefa morosa, o que impõe grandes tempos de paragem entre a

codificação e o resultado dos testes, tornando todo o processo ineficiente.

Se os testes não puderem ser executados de forma isolada, cada vez que se testa uma

funcionalidade que está a ser desenvolvida, é necessário executar os testes correspondentes,

acrescidos dos testes necessários para que todos possam ter sucesso. Ora, aqui encontramos dois

problemas. Primeiro a falta de eficiência já referida anteriormente. Segundo, executando um teste

dependente de outro de forma isolada, não é claro se a falha no teste é devida ao não cumprimento

das especificações pelo código desenvolvido.

20

Page 35: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

No caso do uso de dados não claros, a maior dificuldade será no diagnóstico ao teste caso

este falhe. Com dados não claros é necessário despender mais tempo para se perceber porque e

como falhou o teste.

A utilização de dados reais é conveniente, dado que quanto mais aproximado do ambiente de

produção se estiver, maior a garantia que os dados de produção são compatíveis com a

funcionalidade desenvolvida.

O último ponto traduz a eficácia que os testes deverão possuir. É contraproducente escrever

um teste e desenvolver código para uma funcionalidade não necessária. Se acontecer de forma

regular, a aplicação poderá tornar-se muito maior do que seria necessário, o que, com o acréscimo de

complexidade correspondente, irá implicar maiores tempos para que os testes sejam executados e

para que a aplicação seja compilada.

3.2.5 - TESTES COMO DOCUMENTAÇÃO

Se os testes seguirem os princípios anteriormente apresentados, podem tornar-se numa parte

importante da documentação técnica de um projecto, dado que induzem a especificação funcional do

código. Estes permitem descrever as características das várias APIs constituintes do projecto,

indicando o seu uso correcto e incorrecto.

3.2.6 - TESTES NO DJANGO

A maior parte das linguagens de programação actuais já têm desenvolvido frameworks para

testes, como por exemplo o PyUnit para Python, os xUnit para Java, ou Test::Unit para Ruby. As web

frameworks, como o Django para Python ou o Rails para Ruby, já têm suporte para frameworks de

testes, possibilitando a programação em TDD sem a instalação de módulos adicionais e fornecendo

um conjunto de funcionalidades de modo a que a integração dos testes no projecto seja de forma fácil

e estruturada.

3.3 - INTERACÇÃO CLIENTE – SERVIDOR

O objectivo deste capítulo é apresentar as bases teóricas sobre as quais irá assentar a troca

de dados entre a aplicação desenvolvida e o utilizador, desde o momento em que este efectua um

pedido até à visualização da resposta obtida. São descritos os protocolos utilizados, é introduzido o

conceito REST e analisada a resposta obtida pelo cliente (browser) e a forma como esta é

processada e visualizada pelo utilizador.

3.3.1 - REQUEST - RESPONSE

O ciclo Request-Response é um padrão de troca de informação habitualmente utilizado por

21

Page 36: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

arquitecturas Cliente-Servidor1. Embora possa ser implementado de forma assíncrona2, em que a

resposta pode ser retornada mais tarde no tempo, a implementação comum é síncrona3. A

arquitectura usada neste projecto é Cliente-Servidor sem estado, com comunicação síncrona.

Desta forma, obtemos melhorias nas seguintes propriedades: Visibilidade, Fiabilidade e

Escalabilidade. Visibilidade melhorada porque é apenas necessário olhar para um request para

determinar a sua essência, Fiabilidade melhorada porque torna mais simples o processo de

recuperação de uma falha parcial e Escalabilidade melhorada porque, sem ter de guardar estado

entre requests, o servidor rapidamente liberta os recursos alocados [21] cap. 5.

Sendo este projecto web, um cliente (tipicamente um browser) efectua pedidos (requests) ao

servidor onde está alojada a aplicação, de modo a obter informação (response) para apresentar ao

utilizador, tipicamente documentos HTML - capítulo 3.3.5.

A Figura 11 mostra a arquitectura Cliente-Servidor:

3.3.2 - O PROTOCOLO HTTP

O protocolo sobre o qual é feita a interacção entre cliente e servidor é o protocolo HTTP –

Hypertext Transfer Protocol, que constitui a base da maioria de transferência de informação neste

projecto entre estas duas entidades. O protocolo HTTP é considerado um protocolo de camada de

aplicação (segundo o modelo OSI4), requerendo uma ligação fiável host-to-host providenciada pelo

protocolo de camada de transporte TCP – Transmission Control Protocol [40] cap. 3.5, embora já

tenha sido usado sobre protocolos não fiáveis como o UDP – User Datagram Protocol [40] cap. 3.3.

Inicialmente o protocolo HTTP foi desenvolvido com o objectivo de transferir documentos

(Hypertext documents) que contém referências a outros documentos, a que o utilizador pode aceder 1 O modelo cliente-servidor em computação é uma estrutura distribuída onde existe uma clara definição entre o requester ou cliente e o provider ou servidor. Neste modelo os clientes iniciam a comunicação e solicitam ao servidor recursos.2 O emissor inicia a comunicação, mas não aguarda pela resposta, que será entregue mais tarde no tempo.3 O emissor inicia a comunicação e aguarda pela resposta o tempo necessário ou até ser atingido o tempo máximo de ligação.4 Open Systems Interconnection [68]

22

Figura 11: Arquitectura Cliente-Servidor

Page 37: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

de imediato, habitualmente por um clique de rato ou por uma sequência de teclas. Estes documentos

ou recursos são identificados por URI – Uniform Resource Identifier, ou mais especificamente por

URL – Uniform Resource Locator. URIs e HTML – Hyper Text Markup Language, formam um sistema

de recursos interligados, que induziram o aparecimento da World Wide Web em 1990 por Tim

Berners-Lee.

A primeira versão do protocolo, posteriormente designada por HTTP/0.9, utilizava apenas um

método (GET), mesmo para o envio de informação para o servidor, e tinha a característica de fechar a

ligação entre cliente e servidor assim que o pedido era satisfeito. O protocolo era muito simples mas

apresentava algumas limitações, como a necessidade de abertura de uma ligação por documento, o

que congestionava os servidores porque a abertura de ligação é um processo pesado [40] cap. 3.7, a

restrição do envio de dados apenas no URI, o envio desses dados em claro e o não tratamento de

erros.

Devido às limitações desta versão, o protocolo foi melhorado e foi introduzida a versão

HTTP/1.0, tendo nesta altura sido nomeada a versão anterior como HTTP/0.9. Esta versão já incluía a

possibilidade de interagir com sistemas de cache, request e response com muito mais informação

como a tipificação de códigos de resposta, o uso de novos métodos (POST e HEAD) e ainda uma

forma de autenticação muito simples (Basic Authentication [24]).

Embora esta versão tenha solucionado alguns dos problemas detectados, mantinha-se com

algumas restrições, nomeadamente a necessidade de continuar a efectuar múltiplas ligações, e

possuir um método de autenticação demasiado simples e pressupondo uma ligação segura entre

cliente e servidor, dado que os dados da autenticação são passados em claro.

A versão HTTP/1.1 vem suprir o que ainda não tinha sido melhorado na versão HTTP/1.0. A

principal característica é a reutilização da ligação, por exemplo para a transmissão de várias imagens

constituintes de um documento. Desta forma a latência diminui, dado que o estabelecimento de uma

comunicação TCP apresenta um significativo overhead. Como a ligação é reutilizada, em comparação

com a versão HTTP/1.0, o overhead de novas ligações é suprimido.

Outra das características é a melhoria da eficiência no tratamento de recursos. O mecanismo

de cache [22] cap. 13, foi significativamente melhorado e a comunicação entre cliente e servidor

tornou-se mais eficiente, sendo apenas transmitido o que é estritamente necessário. O objectivo é

eliminar em alguns casos request supérfluos, bem como noutros casos, response completas. Assim,

são reduzidos os números de network round-trip necessários para muitas operações. Para isso é

usado um mecanismo de expiração e validação.

De modo a melhorar a performance e disponibilidade, o protocolo permite um relaxamento à

transparência semântica quando necessário. As situações em que acontece esse relaxamento são as

seguintes: por um pedido explícito pelo cliente ou pelo servidor de origem ou, existindo um aviso para

o utilizador final quando houve relaxamento pela cache ou pelo cliente.

Uma cache comporta-se de uma forma “semanticamente transparente” relativamente a uma

resposta se o seu uso não afecta o pedido do cliente ou o servidor de origem, ou seja o cliente recebe

exactamente a mesma resposta como se fosse enviada pelo servidor de origem.

23

Page 38: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Assim, o protocolo, a nível de cache, contém os seguintes elementos: permite a transparência

semântica completa quando é requerido por todas as partes, permite que um servidor de origem ou

um cliente explicitamente controlem operações não transparentes e permite que uma cache adicione

avisos às respostas que não preservam transparência semântica.

A autenticação foi também revista, passando a ser usado o método digest [24] cap. 3, que ao

contrário do método basic não envia o segredo comum (password) em claro, o que corresponde à sua

maior fraqueza.

Os dois métodos de autenticação não são os mais seguros, mas uma comparação entre eles

revela a necessidade de se utilizar sempre que possível o digest. A maior ameaça a este tipo de

comunicação é o network snooping. Se, por exemplo, a comunicação envolver o acesso a uma base

de dados restrita a alguns utilizadores, com a autenticação basic é possível que se obtenha a

password do utilizador e, consequentemente, se tenha acesso quer à base de dados, quer a tudo o

que o utilizador tenha protegido com essa mesma password. Com o método digest é apenas possível

o acesso à transacção e não à password do utilizador. Por isso é possível efectuar a repetição do

pedido - replay attack [9], mas apenas do mesmo documento, embora esta situação também possa

ser minorada pela escolha de nonce (number chosen once) do servidor. O método é também

vulnerável ao ataque man-in-the-middle [9] que pode, por exemplo, em vez do uso de digest,

interceptar o pedido e alterá-lo de modo a solicitar a autenticação basic.

São introduzidos também novos estados para o manuseamento de cache e controlo de

tráfego – os estados 1xx, passando os estados 2xx a ser usados para o manuseamento de canais de

transmissão.

São também adicionados novos métodos aos anteriores (GET, HEAD e POST),

nomeadamente OPTIONS, PUT, DELETE, TRACE e CONNECT [22] cap. 9. O método OPTIONS

permite que um cliente saiba quais as opções de comunicação disponíveis, as capacidades do

servidor, ou as opções/requisitos associados a um recurso sem implicar a devolução do recurso ou

qualquer acção. O método PUT solicita que um determinado recurso seja alterado para o URI

indicado. Se não existir, o servidor de origem deve informar o cliente através do estado 201 –

Created. Caso contrário, deve ser enviada uma de duas respostas de sucesso: 200 - OK ou 204 – No

Content. O método DELETE solicita que o servidor de origem apague o recuso identificado pelo URI.

Neste caso as respostas de sucesso são: 200 – OK, 202 – Accepted ou 204 – No Content. O método

TRACE é usado por um cliente para enviar de volta o pedido ao servidor de origem. Este deve

constar na resposta com o estado 200 – OK. O método CONNECT é reservado na especificação para

uso com um proxy [40] cap. 2.2.6, que possa dinamicamente transformar-se num túnel [44].

Outro aspecto importante do protocolo HTTP é o mecanismo de gestão de estado através de

cookies. As cookies são cabeçalhos HTTP cuja sintaxe é definida por [38] cap. 3.2.2 e que permitem

que o cliente mantenha alguma informação de estado entre pedidos HTTP.

Todavia o seu uso viola uma das restrições da arquitectura REST (stateless) [21] cap. 6.3.4.2.

O uso de cookies neste projecto permite uma melhoria significativa de performance dado que reduz

significativamente a quantidade de informação transmitida em alguns request e response, bem como

24

Page 39: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

a carga no SGBD.

As cookies são neste momento usadas por quase todas as aplicações web, e são a única não

conformidade com a arquitectura REST usada em larga escala. A discussão sobre o uso ou não de

cookies e a sua interferência com a arquitectura REST não é aqui aprofundada.

3.3.3 - O PROTOCOLO HTTPS

O protocolo HTTP opera na camada de aplicação do modelo OSI. Já foram anteriormente

referidos os problemas de segurança existentes no protocolo e alguns mecanismos descritos na

especificação que tentam aumentar a sua segurança. O protocolo HTTPS1, difere do protocolo HTTP

essencialmente por usar uma comunicação cifrada. O protocolo de camada de transporte usado pelo

HTTP, como já foi explicitado anteriormente é o TCP que, embora garanta a fiabilidade na

transmissão, permite que os dados sejam transmitidos em claro. Assim, os dados são cifrados e só

depois transportados pelo protocolo TCP, sendo revertidos apenas no receptor.

Deste modo é criada uma camada intermédia destinada à cifra dos dados a transmitir entre a

camada de aplicação e a camada de transporte.

Inicialmente foi usado o standard SSL, criado pela Netscape de modo a garantir a segurança

em transacções comerciais na Internet, nomeadamente pagamentos. Posteriormente a patente foi

comprada pelo IETF (Internet Engineering Task Force) e renomeada de TLS (Transport Layer Security),

tendo o TLS 1.0 descrito por [17], sido desenvolvido com base no SSL 3.0. A versão de TLS 1.1 é

descrita por [18] e a versão mais recente TLS 1.2 é descrita por [19].

A breve descrição aqui apresentada baseia-se em [37], [55] e [19].

O protocolo TLS permite que aplicações cliente-servidor possam comunicar de uma forma

segura, com autenticação e confidencialidade usando criptografia. Em comunicação típica entre

browser e servidor a autenticação é unilateral, ou seja, o servidor está autenticado (o cliente conhece

a sua identidade) mas para o servidor o cliente permanece anónimo. O protocolo TLS permite

também uma comunicação mais segura, usando autenticação bilateral, em que quer cliente quer

servidor se autenticam entre si e onde seriam necessários dois certificados digitais.

O início de ligação compreende um procedimento de hand-shake, ou seja, uma fase de

negociação entre o cliente e servidor onde são definidos vários parâmetros de modo a ser

estabelecida a segurança da ligação. O cliente efectua um pedido de ligação segura, informando o

servidor qual a lista de cypher-suites suportadas [10]. Desta lista o servidor escolhe a mais forte e

notifica o cliente da sua decisão enviando a sua identificação sob a forma de um certificado digital. O

certificado digital contém o nome do servidor, a Certificate Authority2 (CA), e a sua chave pública. O

cliente usualmente contacta o servidor que emitiu o certificado digital de modo a assegurar-se da sua

validade.

Para gerar as chaves da sessão o cliente gera um número aleatório, cifra-o com a chave

1 HTTPS – Hyper Text Transfer Protocol over SSL – Secure Socket Layer2 Entidade que emite certificados digitais, na qual cliente e servidor confiam.

25

Page 40: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

pública do servidor e envia-o cifrado para o servidor. Apenas este com a sua chave privada irá

conseguir decifrar o número. Assim, o cliente conhece o número aleatório gerado e a chave pública

do servidor, e o servidor conhece o número aleatório e a sua chave privada.

A menos que a chave privada do servidor tenha sido descoberta, qualquer outra entidade

nesta comunicação não sabe qual o número aleatório gerado e não conseguirá decifrar as

mensagens transmitidas.

Desta forma, quer cliente quer servidor geram os conteúdos necessários à comunicação

tendo como base o número aleatório e é iniciada a ligação segura. No caso da ligação ser encerrada,

e para o estabelecimento de nova ligação, são necessários novamente cumprir as etapas

enumeradas desde o início e por esta ordem. Caso alguma das etapas falhe, não é iniciada qualquer

ligação.

A menos que negociado de outra forma entre cliente e servidor, o certificado digital deverá ser

do tipo X.509v3. Este standard assume um sistema de CA hierárquicos para a emissão de

certificados – Public Key Infrastructure (PKI) [14].

O tipo X.509v3 é definido em [13].

Existem outros protocolos para comunicações seguras como o S-HTTP, mas nunca foram

largamente adoptados e desta forma o HTTPS tornou-se o mecanismo De facto1 para comunicações

seguras na World Wide Web.

3.3.4 - REST – REPRESENTATIONAL STATE TRANSFER

O conceito REST, introduzido em [21] cap. 5, é um conceito de arquitectura de sistemas

hypermedia2 distribuídos. A arquitectura da web pode ser descrita por um conjunto de restrições

aplicada aos seus elementos, e através da análise do impacto de cada uma destas restrições

conseguimos identificar as suas propriedades.

O REST foi desenvolvido paralelamente ao protocolo HTTP/1.1 e muitas das especificações

existentes nesse protocolo foram introduzidas para que a arquitectura existente na web tivesse em

conta este novo conceito, dado que o autor do REST contribuiu também para o desenvolvimento

desta versão do protocolo HTTP/1.1.

3.3.4.1 - RESTRIÇÕES DA ARQUITECTURA REST

A primeira restrição é a utilização de uma arquitectura Cliente-Servidor em que existe uma

separação de funções. Enquanto que o cliente dará mais relevância à user-interface, o servidor dará

mais importância ao armazenamento de dados. Desta forma é melhorada a portabilidade da user-

interface e é melhorada a escalabilidade pela simplificação dos componentes do servidor, permitindo

1 De facto - expressão latina que significa na prática, mas sem ter sido regulamentado por lei.2 Elementos de texto, dados, gráficos, áudio e vídeo ligados de forma a que o utilizador possa navegar entre eles.

26

Page 41: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

que a evolução destes dois componentes seja independente.

A segunda restrição define que a interacção entre cliente e servidor seja stateless1, o que

implica que cada request do cliente enviado para o servidor contenha toda a informação necessária

para ser entendido e processado, não tirando partido de qualquer informação de contexto existente

no servidor, o que implica que toda a informação de sessão é mantida exclusivamente no cliente. Esta

restrição introduz as propriedades já referidas no capítulo 3.3.5, que são visibilidade, robustez e

escalabilidade.

A terceira restrição é o uso de cache. O uso de cache implica que, implicitamente ou

explicitamente, uma response tem de ser marcada como podendo ser ou não reutilizada para futuros

requests semelhantes. Esta restrição, embora possa diminuir a robustez devido às possíveis

diferenças entre o conteúdo da cache e a response obtida directamente do servidor, melhora a

eficiência, a escalabilidade e o tempo de resposta do ponto de vista do utilizador.

A quarta restrição é o uso de uma interface uniforme entre componentes. Assim a arquitectura

do sistema, bem como a sua visibilidade é melhorada, embora a eficiência seja menor devido à

normalização da transferência de informação, em comparação com a transferência de informação

específica por aplicação. Uma interface REST é definida pelas seguintes propriedades: identificação

de recursos, manipulação de recursos por representações, mensagens auto-descritivas e hypermedia

definindo estado.

A quinta restrição implica um sistema por camadas. Uma hierarquia de camadas impõe que

cada componente só possa aceder a uma determinada camada, diminuindo a complexidade e

permitindo a simplificação de componentes, ao mesmo tempo que aumenta a escalabilidade devido à

distribuição de carga (load-balancing) pela rede e por múltiplos processadores. Esta restrição

aumenta o overhead e latência, com consequências no tempo de resposta do ponto de vista do

utilizador, minimizado pelo uso de caches. O uso de camadas melhora também a segurança dos

dados transmitidos, possibilitando o uso de firewalls2.

A sexta e última restrição é o code-on-demand. Desta forma, é possível que as

funcionalidades do cliente sejam expandidas à medida que se torna necessário. Assim, é aumentada

a extensibilidade do sistema e a simplicidade do cliente, embora a visibilidade diminua e por isso é

uma restrição opcional.

3.3.4.2 - ELEMENTOS DA ARQUITECTURA REST

A arquitectura REST é constituída três tipos de elementos: Elementos de informação,

conectores e componentes.

Os elementos de informação são os seguintes: o recurso (resource), que indica qualquer

informação que possa ter um nome, imagem, documentos, um conjunto de outros recursos, um

serviço temporal. Alguns recursos são estáticos, como por exemplo um documento HTML, que não

1 Sem estado2 Dispositivos desenhados para controlar e monitorizar o acesso a uma rede restrita. [40] cap. 8.1.

27

Page 42: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

varia ao longo do tempo e outros são dinâmicos, como por exemplo a indicação da hora actual. O

único requisito necessário para um recurso existir é a semântica do seu mapeamento. O segundo é o

identificador para o recurso (resource identifier). Tipicamente é utilizado um URL ou um URN [61] e

[46]. O terceiro é a representação do recurso (representation), por exemplo, um documento HTML ou

uma imagem JPEG. O quarto é a metadata da representação do recurso (representation metadata),

que inclui informação como data da última modificação ou MIME type1. O quinto elemento é a

metadata do recurso (resource metadata), ou seja informação sobre o recurso que não é específica,

como, por exemplo, o autor, ou a data da última alteração ao recurso, e o sexto elemento é

informação de controlo (control data), como por exemplo, informação para o manuseamento de

cache.

Os conectores são os elementos que podem estabelecer ligações, nomeadamente o cliente,

o servidor, a cache, o resolver, por exemplo, um DNS [47] e [48], e o túnel (SOCKS [42], SSL após

HTTP CONNECT).

Os componentes são o servidor de origem, a gateway [40] cap. 4.3, a proxy, e o user-agent,

ou seja no nosso caso o browser.

A Figura 12 mostra-nos as interacções que existem entre os vários componentes, os

conectores existentes, com ou sem cache e o fluxo de dados.

O user-agent efectua três pedidos, respectivamente a, b, c. Qualquer dos pedidos não é

satisfeito pela cache do user-agent, e é direccionado pelo identificador de recurso respectivo.

O primeiro pedido é efectuado a uma proxy local que por sua vez o encaminha para uma

gateway descoberta por um pedido de resolução de nomes a um DNS. De seguida, o pedido é

encaminhado para um servidor de origem, cujos recursos encapsulam uma arquitectura ORB [50].

O segundo pedido é enviado directamente para um servidor de origem, que o consegue

satisfazer através da sua cache.

O terceiro pedido é efectuado a uma proxy que consegue aceder directamente a um serviço

WAIS [51] e [32], que é um sistema separado da arquitectura web.

1 Ver [27], [25], [49], [28], [26]

28

Figura 12: Componentes REST e interacções [21] cap. 5

Page 43: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

3.3.4.3 - A INTERFACE REST APLICADA AO PROTOCOLO HTTP

O protocolo HTTP desempenha um papel especial na arquitectura web actual, sendo o

protocolo da camada de aplicação do modelo OSI maioritariamente utilizado para comunicação entre

aplicações, tendo sido desenhado especificamente para a representação de recursos [21] cap. 6.3.

Como já foi apresentado, um dos elementos de informação da arquitectura REST é o recurso.

Este é exposto através do seu identificador de recurso como um objecto. Supondo que é necessário

expor o recurso através do seu URL, e que este recurso é um catálogo de produtos. Em vez de

invocar o recurso através de métodos como getAllProducts ou createNewProduct, este irá ser

invocado através dos métodos HTTP já anteriormente apresentados. São estes o GET, POST, HEAD,

PUT, DELETE e OPTIONS [56].

No exemplo apresentado, catálogo de produtos, o recurso catálogo é constituído por um

conjunto de categorias. Cada categoria é identificada por um nome, por um conjunto de outras

categorias (sub-categorias) e por uma lista de produtos. Cada produto é constituído por um nome e

por uma cor. Tomemos por exemplo uma aplicação que está no seguinte URL: http://myapp.com .

Todos os recurso expõem a mesma interface e têm um funcionamento semelhante. Para

solicitar um determinado recurso, é efectuado um pedido GET para o seu URL.

Para definir uma interface REST que nos permita mapear os nossos recursos, comecemos

pela identificação da estrutura hierárquica. Na base temos um catálogo de produtos que é constituído

por um conjunto de categorias. Se se pretender listar os valores constantes do catálogo de produtos,

ir-se-á obter a lista de categorias. Dessa forma o URL que identifica o recurso catálogo irá retornar a

lista de categorias. Logo invocando o URL http://myapp.com/catalog iremos receber essa lista.

Para aceder aos valores de uma determinada categoria basta, da mesma forma, invocar o

URL http://myapp.com/catalog/paint para ser retornada a lista de sub-categorias, bem como a lista de

produtos para essa categoria. Para se aceder a uma sub-categoria e serem listadas as suas sub-

categorias poder-se-ia, eventualmente, aceder ao URL http://myapp.com/catalog/paint/outside ou

http://myapp.com/catalog/paint/inside. Para, por exemplo, aceder à lista de produtos da categoria “inside”

aceder-se-ia ao URL http://myapp.com/catalog/paint/inside/products e a um produto específico ao URL

http://myapp.com/catalog/paint/inside/products/waterpaint.

Da mesma forma, são utilizados os outros métodos além do GET, exclusivamente usado até

aqui, mas para realizar as outras funcionalidades que não apenas receber informação. Por exemplo,

se for necessário acrescentar mais um produto à categoria “inside”, basta para isso que se efectue

um POST com a informação do objecto no corpo do pedido para o URL

http://myapp.com/catalog/paint/inside/products. Está-se assim a fornecer a informação ao servidor de que é

pretendido adicionar outro produto à categoria “inside”. Da mesma forma, pode-se usar o método

PUT para efectuar alterações a qualquer produto existente, enviando no corpo do pedido os dados a

alterar (por exemplo a cor). O mesmo acontecerá com o método DELETE, que apagará um

determinado produto, podendo apenas retirá-lo da categoria ou retirá-lo de todas as categorias,

removendo-o completamente do sistema (dependendo da implementação). Pode-se ainda usar o

método HEAD para receber a metadata de um recurso e o método OPTIONS para receber quais as

29

Page 44: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

operações disponíveis para um determinado recurso. Não será com certeza razoável eliminar todo o

catálogo disponibilizando o método DELETE para o URL http://myapp.com/ e, dessa forma, é possível

utilizar o método OPTIONS para obter informação sobre os métodos disponíveis para este recurso,

que neste caso seria apenas o método GET.

Os métodos usados anteriormente para a manipulação de produtos poderão também ser

usados para a manipulação das categorias, se a interface assim for implementada.

Claro que também se pode verificar que, se for pedido o URL http://myapp.com/catalog/paint/inside/x

e se não existir o produto “x”, não é obtida a mesma resposta. Dessa forma, deve-se avaliar o código

de resposta do protocolo HTTP. Se for recebido o código de resposta 200 (OK), o cliente é informado

que o pedido foi um sucesso e que deverá apresentar a informação. Para o produto “x”, como não

existe, o servidor deverá indicar um outro código de resposta, na gama 3xx, 4xx ou 5xx. Dessa forma,

é transmitido ao cliente que o recurso por ele solicitado não permite a utilização de um determinado

método ou simplesmente não existe.

3.3.4.4 - VANTAGENS DO USO DE UMA INTERFACE REST

A interface REST do exemplo anterior permite que uma aplicação cliente-servidor apresente

algumas características interessantes. Esta, usa eficazmente o protocolo HTTP, utilizando os seus

vários métodos e os vários códigos de resposta apresentados pelo mesmo. Permite também que os

recursos estejam mapeados de forma hierárquica, sendo por isso mais perceptíveis as suas

dependências. Permite ainda que os clientes da aplicação possam utilizar URLs mais claros e mais

indicativos do recurso, e que o acesso e manipulação dos recursos seja de uma forma sistemática

para os diversos recursos. Neste projecto, o mapeamento de URLs, (capítulo 3.1.2 - mapping.py) foi

feito usando a arquitectura REST.

3.3.5 - INTERPRETAÇÃO DA RESPOSTA

3.3.5.1 - BROWSER

Um browser é uma aplicação que tem como objectivo interpretar e apresentar recursos

disponíveis na World Wide Web (web) ao utilizador, recursos estes tão variados como imagens,

vídeos e páginas HTML. Estes recursos são identificados por um URI (capítulo 3.3.4), cujo prefixo

indica como o recurso irá ser interpretado e que protocolo está a ser utilizado para o pedido de dados.

Alguns dos prefixos mais utilizados são “http:” (capítulo 3.3.2), “https:” (capítulo 3.3.3), “ftp:” -

indicativo de FTP (File Transfer Protocol) [52] - e “file:” para ficheiros locais.

Uma vez recebida a informação correspondente ao pedido (response), o browser utiliza um

motor ou renderer, de modo a transformar a informação recebida num documento que será mostrado

ao utilizador. Actualmente os renderers dos browsers são tão evoluídos que conseguem mostrar

muitos dos tipo de conteúdos que sejam constituintes de páginas web.

30

Page 45: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Entre os browsers mais populares enumeramos o Mozilla Firefox, o Internet Explorer, o

Google Chrome, o Safari e o Opera.

3.3.5.2 - HTML - HYPERTEXT MARKUP LANGUAGE

No início deste capítulo foi dito que um cliente, tipicamente um browser, efectua pedidos

(requests) ao servidor onde está alojada a aplicação, de modo a obter informação ( response) para

apresentar ao utilizador, tipicamente páginas HTML – HyperText Markup Language [64].

Os documentos HTML ou XHTML [65], usualmente designados por páginas web, são

definidos por uma linguagem própria de modo a poderem ser interpretados pelos browsers. O XHTML

é uma restrição do HTML baseada nas regras aplicáveis para a linguagem XML.

O HTML, como o nome indica é uma linguagem de markup [12]. Existem três tipos de

linguagens de markup: de apresentação, procedimental e descritiva. O markup de apresentação é o

usado pelos processadores de texto e consiste em códigos binários inseridos no texto do documento,

de modo a alterar a sua apresentação. O markup procedimental difere do markup de apresentação

pelo facto de consistir em instruções dadas pelo próprio autor do texto, podendo estas ser editadas,

mas com o fim de alterar também a apresentação. É, por exemplo, a linguagem usada por LaTeX [41]

e PostScript [54]. O markup descritivo é usado para assinalar partes do documento, mas sem o

objectivo de serem instruções sobre a forma como deve ser processado. É o tipo do HTML.

A linguagem HTML consiste no uso de vários componentes: elementos e os seus atributos,

tipos de dados, referências de caracteres e entidades e declaração de tipo de documento (document

type declaration), de modo a que formem documentos.

Os elementos são definidos por uma etiqueta (tag) de início e uma etiqueta de fim e podem

conter atributos. O conteúdo do elemento é definido como: tudo o que está entre a etiqueta de início e

a etiqueta de fim. Uma etiqueta é definida por uma palavra reservada constante da gramática da

linguagem [15], rodeada por um sinal de menor “<” e um sinal de maior “>”.

Exemplo de um elemento com atributos: <tag attribute1=”atr1”>text to be rendered</tag>

A linguagem é também recursiva, ou seja, podem existir elementos dentro doutros elementos.

As declarações de tipo de documento indicam qual o modo de rendering que o browser deve adoptar.

No caso de HTML 5.0, é suficiente a declaração <!doctype html>. Para versões anteriores era necessário

usar a declaração em que explicitamente era definido o DTD1 (Document Type Definition), onde era

designada a linguagem.

3.3.5.3 - CSS – CASCADE STYLE SHEET

Outra das componentes do HTML é a definição de tipo de dados. Esta componente é

bastante importante para esta aplicação, dado que permite definir, entre outros, folhas de estilo (CSS

– Cascade Style Sheets [62]) e Scripts que são pequenos blocos de código (habitualmente na

linguagem JavaScript) executados no cliente.

1 Contém as definições gramaticais da linguagem.

31

Page 46: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

A definição de estilo do documento é feita entre as tags <style> e </style>, ou através da

indicação do URL para o ficheiro que contém as definições de estilo <link rel="stylesheet" href="/style.css"

type="text/css">, habitualmente definida dentro das tags <head> e </head>, de forma a que seja

processada inicialmente pelo browser.

O uso de folhas de estilo (CSS) em documentos que sejam em linguagem de markup tem o

objectivo de descrever a semântica de apresentação, por exemplo, definindo o aspecto, cores e

fontes. Desta forma é possível separar o conteúdo do documento do seu aspecto visual.

O CSS é uma linguagem cuja gramática define uma série de regras de estilo e prioridades de

aplicação aos vários elementos constituintes de um documento.

Cada regra consiste em duas partes: selectores e propriedades. Os selectores definem a que

elementos são aplicadas as propriedades [59] cap. 2, pp. 36. Se duas propriedades iguais estiverem

definidas em duas regras diferentes é aplicada a propriedade definida pelos selectores mais

específicos do elemento.

3.3.5.4 - JAVASCRIPT

Tal como a definição de estilo, o HTML permite utilizar outros tipos de dados usados neste

projecto, como scripts. Estes são definidos em tags próprias, tal como a os estilos e poderão ser

definidos explicitamente no documento ou através da referência a um ficheiro externo. A definição no

documento é feita através do código existente entre tags <script> e </script>. A definição por referência a

um ficheiro é feita através de <script type=”text/javascript” src=”/myscript.js”></script>, que referencia o ficheiro

“myscripts.js”.

Embora possam ser codificados em várias linguagens, abordaremos apenas a linguagem

JavaScript usada no projecto para a realização destes scripts.

Como os documentos HTML são estruturados, os browsers, depois de receberem o

documento, constroem em memória uma estrutura de objectos correspondente ao documento

recebido – DOM (Document Object Model) [23], [63]. Esta estrutura de objectos é construída com o

objectivo de poder ser acedida e manipulada através de scripts incluídos nas páginas HTML.

As funcionalidades apresentadas pela linguagem JavaScript são as seguintes [29], pp. 8:

• Permitir que que os documentos respondam rapidamente à interacção do utilizador,

nomeadamente elementos de formulários, não sendo necessário comunicação com o

servidor.

• Processar informação antes desta ser submetida ao servidor.

• Modificar conteúdos e estilos dinamicamente e rapidamente em resposta à interacção

com o utilizador.

3.3.5.5 - JQUERY

O JQuery é uma biblioteca open-source de JavaScript que define uma conjunto de funções de

32

Page 47: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

modo a facilitar as interacções entre o DOM e a linguagem JavaScript [43] cap. 1.

Algumas das funcionalidades do JQuery permitem a manipulação do DOM, gerir eventos do

browser, facilitar animações e interacções AJAX (Asyncronous JavaScript and XML) [33]. Usando

AJAX é possível, assincronamente, efectuar um pedido ao servidor em background, sem interferir

com o comportamento actualmente a ser visualizado.

3.3.5.6 - FORMULÁRIOS

Os formulários permitem a interacção, sem o uso de scripts, entre cliente e servidor [64] cap.

4.10. Estes contêm a informação dada pelo utilizador, de modo a que esta informação seja submetida

ao servidor e seja processada. Por exemplo, quando um utilizador efectua um registo num site, é-lhe

apresentado um formulário contendo vários campos que tem de preencher de modo a efectivar esse

registo.

Os formulários são definidos entre as tags HTML <form> e </form> e contêm alguns elementos

não possíveis de utilização fora dos próprios formulários.

Estes são:

• input

◦ text

◦ password

◦ checkbox

◦ radio

◦ file

◦ reset

◦ submit

• textarea

• select

Os elementos que correspondem a tags HTML são o “input”, “select” e “textarea”. Os outros

são definidos usando atributo type na tag “input”.

Estes elementos são especialmente renderizados pelos browsers, de modo a serem

apresentados de uma forma clara ao utilizador, embora o seu aspecto, como foi anteriormente

referido, seja passível de alteração através do uso de CSS, e os seus valores sejam passíveis de

serem manipulados ou validados por JavaScript.

O elemento “submit” permite que o utilizador efectue a submissão da informação inserida nos

outros elementos, por forma a que estes sejam enviados para servidor. O elemento “reset” permite

que sejam repostos os valores de origem nos vários campos do formulário.

Todos os outros elementos são elementos de recolha de informação do utilizador. Quando um

formulário é submetido pelo utilizador, o browser constrói um pedido (request) com a informação

33

Page 48: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

constante desse formulário (método, URI, parâmetros) e envia-o para o servidor, ficando a aguardar a

resposta, de modo a apresentar o novo documento ao utilizador e todo o ciclo se repetir.

3.3.6 - LINGUAGEM DE TEMPLATING

3.3.6.1 - GERAÇÃO DE PÁGINAS DINÂMICAS

As páginas web actualmente contém uma combinação de conteúdo específico e de conteúdo

partilhado ou template material [29] cap. 1, que se encontra presente em muitas das páginas de uma

aplicação web e cujos objectivos são a formatação, navegação e branding1. Como exemplo, podemos

apresentar barras de navegação contendo links, logótipos de empresa, cabeçalhos, rodapés, menus,

informação de contacto, e cores e estilos comuns.

Não existe um único mecanismo através do qual são gerados os conteúdos partilhados pelas

páginas de um site. Alguns dos mecanismos utilizados são, por exemplo, em sites pessoais a cópia

por todas as páginas de determinados fragmentos de HTML, servidores aplicacionais que

implementam templates no próprio código, gestores de conteúdos CMS (Content Management

System) que organizam templates, como por exemplo o OpenCMS e o LifeRay desenvolvidos para

Java, ou o Django-cms desenvolvido para o Django mas com o objectivo de serem utilizados em

projectos de grande dimensão, e páginas geradas dinamicamente que encapsulam conteúdo num

template, que é o mecanismo utilizado neste projecto.

Para diversas linguagens de programação foram desenvolvidos mecanismos destinados a

gerar páginas web dinâmicas, como por exemplo JSP (Java Server Pages) [4], para Java ou

ASP.NET (Active Server Pages) [7], para a plataforma .NET da Microsoft, assim como a linguagem de

templating do Rails – ERB (Embedded Ruby) [57].

No caso específico da linguagem utilizada – Python – existem algumas linguagens de

templating desenvolvidas como por exemplo Mako, Cheetah, Myghty e Genshi. Estas linguagens de

templating para Python podem ser enquadradas com o Django de uma forma extremamente simples.

Dado que o Django nos fornece uma linguagem de templating própria, foi da nossa preferência utilizá-

la devido às seguintes vantagens apresentadas: está documentada de uma forma mais criteriosa,

será sempre alvo de evolução, dado que o Django está a ter cada vez mais aceitação como

framework web ao contrário das outras que poderão ter a sua evolução estagnada, e a sua utilização

não implicaria qualquer melhoria, quer na performance, quer em termos de clareza do código

desenvolvido.

3.3.6.2 - VANTAGENS DO USO DE TEMPLATING

O uso de uma linguagem de templating apresenta vantagens significativas [34] cap. 4, pp. 59.

É muito mais simples, mais claro e passível de facilmente efectuar manutenções, a existência de uma 1 branding ou brand management – gestão de marcas

34

Page 49: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

separação clara entre o design da página e o código Python da aplicação, separação essa

conseguida pela utilização da arquitectura MVC (capítulo 3.1.1).

O design de uma página tende a ser alterado de forma muito mais frequente do que o código

da aplicação e por isso não seria conveniente alterar o código sempre que é necessário uma

alteração à página.

Implementar código numa aplicação e desenhar páginas HTML são duas tarefas distintas e

atribuídas a pessoas ou departamentos com competências diferentes. Desta forma, os designers não

devem ter necessidade de editar código da aplicação.

É mais eficiente se os programadores e os designers puderem simultaneamente trabalhar em

partes distintas da aplicação, em vez de ser necessário esperar que uma das tarefas esteja concluída

para iniciar outra tarefa, quando estas deviam ser realizadas paralelamente.

3.3.6.3 - SISTEMA DE TEMPLATING DO DJANGO

Uma template é um documento de texto num determinado formato escolhido onde é possível

definir zonas que contenham pequenos fragmentos de lógica ou código [34] cap. 4, pp. 50. Os

formatos poderão ser variados, embora os mais comuns sejam HTML, XML (eXtensible Markup

Language) [58], JSON (JavaScript Object Notation) [16], ou YAML (YAML Ain't Markup Language) [3].

O sistema de templating do Django foi desenhado para o formato HTML e o seu uso é quase

exclusivamente para HTML, embora estejam disponíveis funções de modo a gerar respostas HTTP

que contenham informação nos outros formatos mencionados, usados tipicamente para serializar

modelos (Capítulo 3.1.1).

A invocação de templates é feita de uma forma muito simples e intuitiva, e segue três passos

que têm de ser codificados no controlador. Primeiro, é explicitamente referido qual a template a

utilizar; de seguida são colocadas no contexto da template variáveis (de um modo geral objectos), de

forma a estarem disponíveis na mesma; e é necessário “renderizar” a página. Entende-se por

“renderizar” o processamento da template de modo a gerar a página HTML final.

3.3.6.4 - FUNCIONALIDADES

O sistema de templating do Django permite três tipos de entidades [34] cap. 4, pp. 41:

variáveis ou métodos, template tags, filtros e comentários. Qualquer texto rodeado de duplas

chavetas é avaliado como uma variável ou método.

O sistema de templating consegue, de uma forma elegante, manusear estruturas de dados

complexas e não simplesmente variáveis. Na presença do ponto “.”, é inferido que se está na

presença de uma estrutura de dados complexa. Desta forma é transparente a invocação de métodos

de um objecto (não é possível a invocação de métodos que recebam parâmetros), o uso de um dos

seus atributos, a apresentação de um valor contido num mapa (dictionary em Python) ou numa lista.

O uso de template tags é também extremamente útil. Qualquer texto entre chaveta,

35

Page 50: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

percentagem e percentagem, chaveta é uma template tag. Estas permitem que sejam executada

alguma lógica no template. As template tags mais comuns são: “if/else”, “for”, “ifequal” e a

complementar “ifnotequal”.

Com o uso de filtros, é possível executar a formatação de variáveis dentro do template. Os

casos mais usuais de aplicação são, por exemplo, a transformação em maiúsculas ou minúsculas,

truncar uma variável demasiado extensa, e a formatação de datas. Na presença da barra vertical “|” é

aplicada à variável o filtro indicado. Os filtros podem ser também usados de forma sequencial, ou seja

podem-se aplicar vários filtros consecutivos a uma variável.

É também possível colocar comentários nos templates. Esta funcionalidade permite que o

programador coloque informações no documento, sendo esta ignorada na “renderização”. Textos que

estejam contidos entre “{#” e “#}” são sempre ignorados.

3.3.6.5 - O SISTEMA DE HERANÇA

Uma das grandes vantagens de usar o sistema de templating do Django é a possibilidade de

herança. Desta forma, conseguimos que o sistema cumpra o princípio DRY.

A utilização de herança permite-nos definir apenas partes de conteúdos de uma página, sem

ter de a redefinir múltiplas vezes. Assim é possível construir um esqueleto de página com as partes

comuns a todas as outras e definir um bloco que será redefinido pelas páginas que herdam esse

esqueleto. É também possível, do mesmo modo, na página que redefiniu o bloco anterior, voltar a

definir um novo bloco para que ainda outras páginas possam redefinir este mesmo bloco, ou seja, é

possível existirem tantos níveis de herança quanto se queira.

As vantagens proporcionadas por esta característica são a centralização de partes comuns

apenas num template, e a reutilização dessas partes comuns sem haver duplicação.

Por outro lado o sistema de herança não afecta o contexto, ou seja as variáveis populadas no

controlador estão disponíveis para todos os templates a montante do template “renderizado”.

Este comportamento é conseguido através do uso de três template tags omitidas

anteriormente de forma propositada: “include”, “extends” e “block”.

3.3.6.6 - NOTAS SOBRE O USO DE TEMPLATING

Existem algumas considerações que é necessário ter em conta para o uso adequado de

templating no Django.

A lógica de apresentação deve estar separada da lógica de negócio (modelo MVC). Neste

sentido é propositadamente impossível executar código Python dentro das templates [34] cap. 4, pp.

58.

Por outro lado, as templates são maioritariamente criadas e editadas por designers e é um

princípio o facto de não ser necessário ser programador Python para implementar templates.

O objectivo da linguagem de templating é oferecer apenas estruturas de controlo necessárias

36

Page 51: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

para a apresentação e não ser o desenvolvimento de outra linguagem de programação, e por isso os

tipos das estruturas de controlo e as suas funcionalidades como “for” e “if” são limitadas ao essencial.

3.4 - ACESSO AO SGBD

Neste capítulo é realizada uma abordagem sobre os Sistemas de Gestão de Base de Dados,

apresentando alguns conceitos teóricos sobre como a informação é persistida.

É também abordada a forma como o Django se integra com o SGBD e é apresentada uma

comparação entre os sistemas existentes e a justificação da escolha tomada para o protótipo.

3.4.1 - DEFINIÇÃO DE SGBD

Um SGBD – Sistema de Gestão de Base de Dados – é um conjunto de informação

relacionada e de mecanismos de gestão dessa informação permitindo o seu armazenamento e o

acesso a essa mesma informação de uma uma forma eficiente [60], pp. 1. Ao conjunto de informação

relacionada damos o nome de Base de Dados.

Os principais objectivos de um SGBD são o armazenamento de grandes quantidades de

informação, a garantia de segurança da informação armazenada, quer ao nível de controlo de

acessos, quer ao nível de tolerância a falhas, a garantia de consistência da informação para acessos

concorrenciais e providenciar aos utilizadores uma abstracção para que não seja explícita a forma

como a informação é armazenada e gerida.

Um SGBD é composto por três sistemas [60] cap. 1: o gestor de transacções (transaction

manager) que garante a consistência da informação armazenada; o processador de pedidos (query

processor) que compila e executa os pedidos para gestão da informação; o gestor de armazenamento

(store manager) que proporciona uma interface entre a camada de armazenamento de dados a baixo

nível e os pedidos efectuados ao sistema.

3.4.2 - MODELOS DE DADOS

A informação numa Base de Dados é armazenada segundo um modelo de dados. Um modelo

de dados é um conjunto de ferramentas conceptuais que representam dados, relações entre dados,

semântica dos dados e a sua coerência através de restrições.

Existem vários tipos de modelos de dados como sejam o Modelo Orientado a Objectos [60]

cap. 8, o Modelo Relacional de Objectos [60] cap. 9, o modelo Entidade-Relação [8] e o modelo

Relacional [11] sendo estes dois últimos os usados para o projecto.

No modelo Entidade-Relação os dados são representados por conjuntos de entidades e são

definidas relações entre os conjuntos de entidades. Todas as coisas sobre as quais os utilizadores

pretendam ter informação deverão ser representados por um conjunto de entidades sendo as

37

Page 52: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

relações entre esses conjuntos de entidades relações explícitas [39].

No modelo Relacional os conjuntos de entidades e as relações têm de obedecer a regras

mais restritivas. Assim, é desenvolvido primeiro o modelo Entidade-Relação e posteriormente o

modelo Relacional (capítulo 4.2.8).

Comecemos por definir o modelo Entidade-Relação e alguns dos seus elementos.

Um determinado conjunto de entidades é caracterizado pelo facto de todas as entidades

desse conjunto partilharem os mesmos atributos. Um atributo é uma propriedade descritiva que

caracteriza cada membro de um conjunto de entidades. As relações são associações entre os

conjuntos de entidades.

Determinado atributo ou conjunto de atributos permitem identificar univocamente cada uma

das entidades de um conjunto. Neste caso, o atributo ou conjunto de atributos é nomeado de chave.

Existem vários tipos de chaves. Uma super-chave é um atributo ou conjunto de atributos que nos

permitem identificar univocamente uma entidade. As chaves-candidatas são o sub-conjunto das

super-chaves que têm a propriedade de não conterem nenhum sub-conjunto de atributos que seja

também chave-candidata. Uma chave-primária é a chave-candidata escolhida pelo designer da Base

de Dados como o meio principal de identificação de uma única entidade.

Outro aspecto a ter em conta é a cardinalidade das relações, ou seja, o número de conjuntos

de entidades ao qual um determinado conjunto poderá estar associado.

Definem-se quatro tipos de cardinalidade [60] cap. 2:

• Um para Um (uma entidade A está associada no máximo a uma entidade B)

• Um para Muitos (uma entidade A está associada a nenhuma, uma ou várias entidades B)

• Muitos para Um (uma entidade A está associada no máximo a uma entidade B; esta pode

estar associada por sua vez a nenhuma, uma ou várias entidades A)

• Muitos para Muitos (uma entidade A está associada a nenhuma, uma ou várias entidades

B e uma entidade B está associada a nenhuma uma ou várias entidades A)

Definidos os pressupostos, constrói-se o diagrama Entidade-Relação seguindo os pontos:

1. Definem-se os conjuntos de entidades e os atributos que os compõem.

2. Identificam-se as relações entre os conjuntos de entidades; se necessário poder-se-á

construir uma matriz com os conjuntos de entidades em linhas e colunas de modo a

explicitar os conjuntos relacionados nas intersecções.

3. Definem-se as chaves-primárias dos conjuntos de entidades.

4. Constrói-se um diagrama intermédio contendo os conjuntos de entidades e as relações.

5. Definem-se as cardinalidades das relações.

6. Constrói-se o diagrama final contendo toda a informação anteriormente definida.

Tendo o modelo Entidade-Relação definido, estão reunidas as condições para derivar deste, o

modelo Relacional. O modelo Relacional é o modelo mais utilizado pelas aplicações actuais. Ao

contrário do modelo Entidade-Relação, não é um modelo conceptual, mas um modelo de

38

Page 53: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

implementação. Dadas as semelhanças entre estes modelos e a possibilidade de, para a grande

maioria dos casos, se poder derivar o modelo Relacional do modelo Entidade-Relação, optou-se por

construir primeiro o modelo Entidade-Relação e a partir deste o modelo Relacional, que é o utilizado

neste projecto.

O modelo Relacional permite representar informação de uma forma muito simples, mas muito

poderosa, assente em álgebra relacional [60] cap. 3. A álgebra relacional serve como base para o uso

de linguagens user-friendly como o SQL (Structured Query Language) [6], alvo de análise posterior.

Uma Base de Dados relacional consiste num conjunto de tabelas. Cada tabela representa um

conjunto de entidades, exactamente o mesmo conjunto de entidades definido no modelo Entidade-

Relação. Uma linha numa tabela representa uma relação entre um conjunto de valores. Como uma

tabela é um conjunto dessas relações, há uma correspondência entre o conceito de tabela e o

conceito matemático de relação, donde modelo Relacional herda o nome.

Eis algumas regras do modelo Relacional:

• Uma relação é definida por uma tabela bidimensional em que as linhas representam

entidades (instâncias) e as colunas representam os atributos.

• Não podem existir duas linhas numa tabela com exactamente os mesmos valores em

todas as colunas; porém, a ordem das linhas não é relevante.

• Cada coluna numa tabela deve ter um nome único; a ordem das colunas não é relevante.

• Cada tabela deve ter uma chave, dado que não podem existir duas linhas que contenham

exactamente os mesmos valores em todas as colunas, ou seja não podem existir linhas

repetidas numa tabela.

• Cada coluna da tabela deve apenas depender da sua chave e não de outras colunas da

tabela.

Deve-se ainda definir o que é uma chave-estrangeira. Quando uma tabela “t1” inclui um

atributo que é uma chave-primária de outra tabela “t2”, este atributo tem o nome de chave-estrangeira

de “t1” referenciando “t2”.

Assim, iremos apresentar os passos a seguir de modo a transformar o modelo Entidade-

Relação no modelo Relacional:

1. Identificar os atributos e a chave-primária para cada um dos conjuntos de entidades do

modelo Entidade-Relação, tendo em conta as regras do modelo Relacional anteriormente

apresentadas.

2. Agrupar as tabelas (conjuntos de entidades) e as suas relações, que tenham uma

cardinalidade de Um para Um ou Um para Muitos. A chave-primária da tabela para a qual

a cardinalidade é Um deve tornar-se chave-estrangeira da outra tabela.

3. Nas relações de cardinalidade Muitos para Muitos, é criada uma nova tabela que exprime

a relação. Assim, uma relação com cardinalidade Muitos para Muitos é transformada

numa nova tabela com uma cardinalidade de Um para Muitos de cada um dos lados das

novas relações entre as duas anteriores tabelas e a criada. As chaves-primárias das duas

39

Page 54: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

tabelas da relação de Muitos para Muitos deverão formar a chave-primária composta da

nova tabela.

Desta forma obtemos o modelo Relacional que vai ser o modelo de dados que vai guardar a

informação a persistir na Base de Dados.

Os modelos Entidade-Relação e Relacional do projecto são discutidos no capítulo 4.2.8.

3.4.3 - LINGUAGEM DE BASE DE DADOS RELACIONAL

Para a interacção com o SGBD é necessário utilizar a linguagem SQL. Embora hajam muitas

linguagens de interacção com o SGBD, o SQL é a linguagem especialmente conceptualizada para o

acesso a Bases de Dados Relacionais.

A linguagem SQL pode ser dividida em dois tipos: o DDL (Data Definition Language) e o DML

(Data Manipulation Language).

O DDL define o esquema da Base de Dados. O esquema é o nome dado ao conjunto das

tabelas e restrições para manter a coerência dos dados que definem o modelo Relacional.

O DDL inclui comandos para a manipulação de várias valências da Base de Dados. Poder-se-

ão criar, modificar e apagar esquemas, adicionar, modificar ou apagar relações (através das

restrições de coerência), definir direitos de acesso, vistas e especificar o início e o fim de transacções.

As vistas são definidas por qualquer relação que não faz parte do modelo Relacional, sendo

apresentada ao utilizador como uma relação virtual. Um conjunto de atributos pertencentes a uma ou

várias tabelas é considerado uma vista, ficando o utilizador com a percepção de que se trata de uma

tabela no modelo. Poder-se-ão também definir vistas sobre outras vistas, caso seja necessário.

Uma transacção é uma colecção de operações na Base de Dados que formam uma unidade

lógica de trabalho e que partilham das seguinte propriedades: ou todas as operações são executadas,

ou nenhuma é executada, é sempre preservada a consistência da Base de Dados, cada transacção

não é afectada por outras transacções em execução, e depois de uma transacção ser executada com

sucesso, as alterações devem ser persistidas, mesmo que hajam falhas no sistema. Um SGBD deve

assegurar o correcto processamento de transacções, de forma concorrencial e tolerante a falhas.

O DML é o conjunto de todos os comandos que permitem a pesquisa e manipulação dos

dados numa Base de Dados, ou seja a manipulação de entidades. Entre as operações possíveis

temos a pesquisa, a adição de dados (novas entidades), a alteração de dados (alteração de um ou

mais atributos numa entidade) e a possibilidade de apagar entidades, recordando que cada entidade

corresponde a uma linha de uma tabela e o conjunto de entidades à própria tabela.

3.4.4 - DJANGO – CAMADA DE ACESSO AO SGBD

O Django apresenta um conjunto de ferramentas de acesso ao SGBD e está dotado de

middleware de acesso ao SGBD que permite a abstracção do uso de SQL para executar operações

40

Page 55: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

sobre a Base de Dados. Também são geridos as acessos ao SGBD e é permitida a utilização de

qualquer um dos SGBD mais comummente utilizados para aplicações, como é o caso do Oracle,

MySQL e PostgeSQL, de uma forma transparente e uniforme.

No caso do MySQL (o SGBD escolhido para este projecto), o Django utiliza a biblioteca de

acesso “MySQLdb” para Python que disponibiliza uma interface para executar DDL e DML.

De modo a encapsular as operações necessárias à manipulação da Base de Dados, o

Django, na classe abstracta “model” define uma série de métodos que permitem realizar a quase

totalidade das operações, sendo convertidos para linguagem SQL e depois executados. Caso

porventura seja necessário efectuar alguma operação mais complexa é possível executar

directamente operações em SQL.

O Anexo A – Operações básicas sobre o SGBD contém alguns exemplos de operações sobre

o SGBD.

3.4.5 - ESCOLHA DE SGBD

O Django, como já foi referido está desenhado de modo a possibilitar a utilização de alguns

SGBD. Os SGBD suportados (built-in) são: Oracle, MySQL, PostgreSQL e SQLite. Assim a escolha

teria necessariamente de ser um de entre os apresentados.

O SGBD Oracle seria o SGBD de eleição, dadas as possibilidades de escalabilidade e

segurança dos dados, bem como a sua utilização pelas grandes empresas um pouco por todo o

mundo. Apresenta todavia uma grande desvantagem relativamente aos outros. Foram utilizados para

este projecto componentes gratuitos (freeware). O SGBD Oracle na sua versão limitada Oracle XE

(Express Edition), possui a maior parte das funcionalidades da Standard Edition, mas a sua Base de

Dados está limitada a quatro GigaBytes.

Por seu turno o SQLite não é aconselhado para ambientes de produção, tem um défice de

performance e escalabilidade e não possui gestão de utilizadores. Seria todavia uma alternativa

apropriada como SGBD de testes ou para etapas de desenvolvimento, dado que consome menos

recursos que o MySQL ou o PostgreSQL e o processo de instalação é mais simples.

A escolha entre os SGBD MySQL e PostgreSQL é uma escolha difícil, já que são os dois

SGBD open-source mais usados. O MySQL apresenta a estabilidade e a velocidade como qualidades

principais e o PostgreSQL apresenta o maior número de funcionalidades, sendo que os dois SGBD

convergem nestes parâmetros à medida que são disponibilizadas novas versões de cada um dos

produtos.

A escolha recaiu sobre o SGBD MySQL, apenas devida à maior experiência do autor com

este Sistema de Gestão de Base de Dados.

41

Page 56: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

4 - TRABALHO DESENVOLVIDO

Este capítulo detalha todo o trabalho efectuado para a obtenção do protótipo do site de

emprego. É inicialmente apresentada a infra-estrutura utilizada, seguida da aplicação desenvolvida.

É também abordada a estrutura e localização dos ficheiros do protótipo, e é descrito em

detalhe o algoritmo utilizado para a classificação de perfis e ofertas.

4.1 - INFRA-ESTRUTURA

O objectivo deste capítulo é a apresentar em detalhe todos os componentes necessários para

o processamento dos pedidos e as camadas onde esse processamento é efectuado. No final do

capítulo é ainda abordado o sistema operativo utilizado.

4.1.1 - ARQUITECTURA

O projecto foi desenvolvido por forma a poder escalar com facilidade (scalability), ser

tolerante a falhas (fault-tolerance) e permitir balanceamento de carga (load-balancing). Deste modo,

foi desenvolvida uma arquitectura de componentes que garante os três pressupostos anteriores.

Uma vez em ambiente de produção, existem algumas considerações a ter em conta de modo

a maximizar o tempo de disponibilidade da aplicação, prever a falha de uma máquina e garantir

tempos de resposta aceitáveis para uma aplicação web.

Durante o desenvolvimento foi usado o servidor de desenvolvimento do Django, que é um

servidor web muito simples, disponibilizado com o objectivo único de optimizar o tempo de

desenvolvimento. Algumas das suas características são um tempo de arranque muito reduzido e a

detecção de alterações ao código da aplicação, não sendo por isso necessário parar e recomeçar o

servidor sempre que é efectuada uma alteração. Contudo, este servidor apresenta algumas

limitações, não sendo o seu uso aconselhado em produção. Estas são a fiabilidade, e o facto de

apenas poder servir um pedido de cada vez, ou seja, não suporta pedidos concorrenciais.

A arquitectura para uso da aplicação em produção foi equacionada de modo a haver várias

camadas de servidores, permitindo o uso de clustering [67] em cada camada, por forma a que os

pressupostos anteriormente enumerados fossem cumpridos. Todavia, devido a restrições de ordem

financeira, é natural que a complexidade inicial não seja a que aqui será apresentada, mas com o

aumento de carga decorrente do uso cada vez mais intensivo da aplicação ao longo do tempo, a

arquitectura tenderá a evoluir neste sentido. Todavia esta estrutura foi testada, embora apenas numa

máquina com várias instâncias de cada um dos componentes, por forma a garantir a sua validade.

A arquitectura consiste numa separação em três camadas de servidores, tendo cada camada

a sua função. A camada inicial destina-se a receber os pedidos vindos da internet, ou seja, pedidos

efectuados pelos browsers à aplicação. Haverá um servidor que receberá os pedidos (poderá ser

42

Page 57: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

qualquer um nesta camada), balanceando a carga para si próprio e para os outros servidores da

mesma camada, não efectuando neste passo qualquer tipo de processamento.

Depois do balanceamento, o pedido será então processado. Se for conteúdo estático, como

por exemplo documentos HTML estáticos, imagens, ficheiros JavaScript, folhas de estilo e qualquer

outro tipo de ficheiro de texto ou binário não dinâmico, este deverá ser logo servido e não enviado à

camada seguinte. Será decidido nesta camada, que pedidos serão logo servidos e quais os que

deverão passa à camada seguinte.

Se for decidido que o pedido não é logo servido, este é enviado à camada contendo a

aplicação. Esta camada irá efectuar o processamento do pedido, se necessário usando informação

constante na sua própria instância de cache, e se necessário também, contactando a camada

seguinte, ou seja a camada que contém a Base de Dados. Depois de processado o pedido pela

camada que contém a aplicação, este é devolvido à camada anterior já processado, retornando ao

cliente (browser).

A Figura 13 apresenta o esquema do fluxo tal como explicado.

É apresentada na Figura 13 uma arquitectura com dois servidores em cada camada como

exemplo, mas é possível em qualquer altura acrescentar mais servidores em qualquer das camadas,

dependendo obviamente da carga a que essa camada possa a vir a estar sujeita. Poderá também

43

Figura 13: Arquitectura de produção da aplicação

Page 58: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

acontecer que uma camada contenha apenas um servidor devido a razões de ordem financeira, mas

neste caso perde-se a tolerância a falhas e o balanceamento de carga nessa camada.

Os componentes de cada uma das camadas serão analisados com maior detalhe nos

próximos sub-capítulos.

4.1.2 - SERVIDOR HTTP

O servidor HTTP desempenha um papel fundamental na arquitectura apresentada. É este

servidor que como já foi referido recebe todos os pedidos feitos pelos clientes e os serve

directamente ou os direcciona para o servidor aplicacional.

O servidor escolhido para este efeito foi o servidor HTTP da Apache versão 2.2, por ser a

última versão estável disponível. Em comparação com outros servidores HTTP, como o Lighttp, ou o

Microsoft IIS, o servidor Apache apresenta como vantagens a sua modularidade, facilidade de

configuração e facilidade de integração com o Django, sendo também o servidor HTTP open-source

mais popular. Sendo um servidor vocacionado para ambientes de produção, dado que foi

desenvolvido com o intuito de proporcionar um elevado desempenho, foi a nossa escolha para o

projecto, aliado ao facto de ser o servidor HTTP com o qual o autor está mais familiarizado e ao facto

de haver maior documentação disponível para a integração com o Django.

Outras características importantes deste servidor são a possibilidade de implementação de

segurança, incluindo o uso de certificados digitais conforme discutido nos capítulos 3.3.2 e 3.3.3,

virtual hosting1 e a possibilidade de implementação, através de configuração, de load-balancing entre

várias instâncias do servidor.

4.1.3 - SERVIDOR APLICACIONAL

O servidor aplicacional usado foi também o servidor HTTP Apache 2.2, já anteriormente

referido mas complementado com um dos seus módulos, o “mod_wsgi”, sendo a sua função servir a

aplicação desenvolvida. Este módulo implementa a interface WSGI - Web Server Gateway Interface,

que é uma especificação para servidores web e servidores aplicacionais comunicarem com

aplicações web desenvolvidas em Python [20]. O objectivo do desenvolvimento da WSGI foi

proporcionar uma especificação standard passível de interpretar todas as interacções entre um

servidor e uma framework para aplicações web. Assim foi necessário usar o suporte dado pelo

Django de modo a transformar a aplicação numa aplicação WSGI [34] cap.12, pp. 222.

Poder-se-ia também usar o “mod_python” do servidor HTTP Apache 2.2, embora a

configuração necessária fosse mais complexa, e o uso de memória para a mesma aplicação não seja

tão optimizado.

Outra possibilidade seria o uso de um outro interpretador da linguagem Python, ou seja, o

1 Uso de vários domínios com um único endereço IP.

44

Page 59: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Jython. O Jython [36] é uma implementação de Python que é executada na plataforma Java1. Assim

poder-se-ia usar um servidor aplicacional que fosse um servlet container, como o Apache Tomcat [5].

Todavia não foi escolhida esta opção, devido ao facto do Jython não estar ainda num grau de

desenvolvimento equivalente ao interpretador de Python.

4.1.4 - SGBD

O SGBD, já analisado em detalhe no capítulo 3.4, pertence à camada com a qual o servidor

aplicacional interage e onde é persistida toda a informação do sistema. Assim, é de vital importância,

para uma aplicação a funcionar em ambiente de produção, o uso de um SGBD que permita

clustering, de modo a que também nesta camada sejam cumpridos os pressupostos enunciados no

capítulo 4.1.1. Esta solução é possível de implementar usando o software de clustering específico

para o SGBD MySQL (MySQL Cluster)2.

A escolha do SGBD já foi abordada anteriormente no capítulo 3.4.5.

4.1.5 - MEMCACHED

O Memcached é um software open-source que implementa um sistema de cache distribuída

usando a memória da máquina onde a instância de cache está a ser executada. Esta cache funciona

como um “saco” de pares chave/valor sendo por isso vocacionada para alojar pequenos fragmentos

de informação. Relativamente a outros sistemas de cache, apresenta as seguintes vantagens: o facto

de ser distribuída, permitindo várias instâncias (ver Figura 13) em várias máquinas diferentes sendo a

replicação gerida pela própria aplicação, é facilmente integrável com o Django, dado que este tem já

integrado middleware para gestão de Memcached, e o facto de o armazenamento ser feito em

memória, o que se traduz numa alta rapidez de gestão da informação guardada.

Neste projecto, o sistema de cache distribuída foi usado para partilhar as sessões de

utilizadores entre as várias instâncias dos servidores que alojam a aplicação. Estes servidores não

comunicam entre si, e deste modo não têm a informação de sessão (capítulo 4.2.4) de um utilizador

se uma série de pedidos foi servido por outro servidor que aloja a aplicação.

Dado que a informação de sessão é a única informação que é necessária partilhar no projecto

entre as várias instâncias de servidores que servem a aplicação, usou-se o Memcached para efectuar

essa partilha.

Caso a carga sobre os SGBD, em determinada altura, seja alta pode-se usar também o

Memcached como um sistema de apoio ao SGBD para alojar informação guardada na Base de

Dados que seja pouco alterada ao longo do tempo, mas solicitada em muitos pedidos, de forma a

aliviar o SGBD dessa carga e melhorar o tempo de resposta.

1 Java JVM (Java Virtual Machine)2 O sistema de clustering do MySQL não foi testado neste projecto.

45

Page 60: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

4.1.6 - SISTEMA OPERATIVO

Este projecto foi desenvolvido no sistema operativo Microsoft Windows Vista. Devido à

grande portabilidade da linguagem de programação utilizada, da framework web utilizada (Django), e

dos vários componentes utilizados, anteriormente enumerados, é possível executar a aplicação e

todos os seus componentes em sistemas operativos que não o Windows, como por exemplo qualquer

distribuição recente de Linux, Mac OS ou Solaris, bastando para o efeito algumas alterações na

configuração quer da aplicação em si, quer de alguns dos seus componentes.

Durante o desenvolvimento deste projecto, houve sempre alguma atenção em permitir que

não fosse dependente do sistema operativo, quer no seu desenvolvimento, quer na sua utilização

num ambiente de produção.

4.2 - A APLICAÇÃO

Neste capítulo é abordado em concreto o protótipo desenvolvido, sendo inicialmente

explicada a motivação pela qual foram definidas as entidades do modelo de dados, seguida da

descrição de todas as funcionalidades disponíveis para os utilizadores e a sua implementação. São

também apresentadas algumas particularidades desenvolvidas e são ao longo do capítulo discutidas

as decisões tomadas.

4.2.1 - ENTIDADES E RELAÇÕES

Para que toda a informação necessária ao funcionamento da aplicação seja guardada e

utilizada de uma forma coerente é necessário definir um conjunto de entidades e também as relações

que existem entre essas mesmas entidades.

Sendo uma aplicação web, esta irá ser acedida por um conjunto de utilizadores. A primeira

entidade definida é o user (Tabela 14). Um user é qualquer utilizador que através de um cliente acede

a recursos da aplicação. Um user é definido de forma a que seja possível efectuar a autenticação e

autorização dos utilizadores para que acedam a determinados recursos da aplicação, contendo

também alguma informação sobre o registo, nomeadamente datas relevantes dos seus percursos

como utilizadores e ainda indicadores do seu tipo e estado.

Os vários utilizadores vão ser tipificados segundo o tipo de recursos que terão disponíveis.

Estes podem ser anónimos, candidatos ou empregadores. Um utilizador anónimo é o utilizador que

não é candidato nem empregador e tem apenas acesso a secções muito restritas da aplicação

(capítulo 4.2.2).

Para o utilizador ser candidato ou empregador, terá de efectuar um registo na aplicação

(capítulo 4.2.3), inserindo alguns dados, de modo a que seja tipificado. Assim, foi necessário definir

mais duas entidades que correspondem aos utilizadores tipificados: candidate e company. A entidade

candidate contém informação geral sobre o próprio candidato (Tabela 15), nomeadamente os seus

dados pessoais.

46

Page 61: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Um candidato pode ter perfis, ofertas modelo, ofertas marcadas, ofertas respondidas e

antigos empregos. Assim foram definidas as entidades candidateprofile (Tabela 20),

candidatemodeloffer (Tabela 29), candidatebookmarkedoffer e candidateappliedoffer. O perfil do

candidato contém a informação relevante do seu currículo que irá ser disponibilizada para consulta

pelos empregadores. O candidato pode também definir os seus antigos empregos, ao que

corresponde a entidade candidateoldjob (Tabela 26).

Ao perfil do candidato estão associados cursos profissionais, tecnologias e funções

desempenhadas (Tabela 25, Tabela 24, Tabela 19). Estes correspondem às entidades definidas

candidateprofessionalcourse, candidateareamaintechnology e candidateareamainfunction.

É ainda possível ao candidato, através da consulta de lista de ofertas ou da pesquisa de

ofertas, marcar ofertas existentes que considere relevantes ou responder a essas ou a outras ofertas.

Para esse efeito foram criadas as entidades candidatebookmarkedoffer (Tabela 16) e

candidateappliedoffer (Tabela 21).

O candidato pode ainda definir ofertas modelo para efectuar pesquisas através do algoritmo

de classificação. Para esse efeito foi definida a entidade candidatemodeloffer também associada ao

candidato. Esta entidade é constituída pelos atributos definidos na Tabela 29, semelhante à entidade

companyoffer, com excepção do nome, do endereço, e da descrição de emprego, que são atributos

não necessários para a utilização do algoritmo de classificação.

Um utilizador empregador é definido pela entidade company, que contém os atributos

definidos em Tabela 17. Tal como o candidato, esta entidade contém informação sobre o

empregador, nomeadamente os dados da empresa.

Um empregador pode inserir ofertas, marcar perfis de candidatos, responder a perfis de

candidatos e também definir perfis modelo, de modo a poder efectuar pesquisas através do algoritmo

de classificação de perfis. Nesse sentido foi necessário criar as entidades companyoffer (Tabela 22),

companybookmarkedprofile, companyappliedprofile e companymodelprofile.

A entidade companyoffer contém a informação relevante sobre ofertas de emprego inseridas

pelos empregadores, informação essa que irá ser disponibilizada para consulta dos candidatos. De

modo a que um empregador tenha a possibilidade de marcar perfis de candidatos que considere

relevantes, foi criada a entidade companybookmarkedprofile (Tabela 27), assim como a entidade

companyappliedprofile (Tabela 30), criada para que o empregador possa responder a perfis de

candidatos e consultar a informação de quais os perfis de candidatos respondidos.

A entidade companymodelprofile contém os atributos descritos na Tabela 29, muito

semelhantes aos da entidade candidateprofile, com excepção de nome do perfil e descrição do

emprego oferecido, que são atributos não necessários para procuras através da utilização do

algoritmo de classificação e permite definir perfis modelo, de modo a que sejam efectuadas procuras

através do algoritmo de classificação de perfis.

Foram ainda definidas outras entidades relevantes para a classificação de candidatos, perfis,

empregadores e ofertas. De modo a agilizar as procuras, e a segmentar os perfis e ofertas foi

necessário criar outras entidades, que embora não contenham informação muito relevante, permitem

47

Page 62: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

classificar de uma forma mais eficaz, quer candidatos, quer empregadores, e ainda perfis e ofertas.

Assim foram criadas as entidades país (country) - Tabela 23, cidade (city) - Tabela 28,

emprego (job) - Tabela 37, área profissional (jobarea) - Tabela 36, universidade (university) - Tabela

31, curso superior (academiccourse) - Tabela 34 e grau académico (academicdegree) - Tabela 35.

Estas entidades foram criadas para uniformizar estes atributos, por forma a que não hajam

ambiguidades indesejáveis no preenchimento dos mesmos. Assim quando um candidato está a

efectuar o seu registo ou a alterar os seus dados, terá a hipótese de seleccionar, por exemplo, um de

entre os países definidos, bem como, dependendo do país, uma de entre as cidades apresentadas.

Por outro lado, quando, por exemplo, um empregador está a inserir uma nova oferta, terá a

possibilidade de escolher o grau académico de entre uma lista de graus académicos possíveis,

dependentes do país.

Desta forma, consegue-se, nestes campos muitas vezes ambíguos e, caso fosse dada a

opção aos utilizadores de inserirem textualmente estes elementos, que estes estejam concretamente

definidos, tornando fiável o resultado das procuras através destes elementos.

Dado que alguns dos elementos destas entidades podem ter uma relação de semelhança

entre si, foram criadas entidades que traduzem numericamente essa mesma semelhança, de modo a

que as pesquisas sejam mais aproximadas ao pretendido. Por exemplo, para um empregador que

defina uma oferta contendo um determinado emprego oferecido, seria interessante serem também

apresentados os resultados de empregos que, embora não sejam especificamente o pretendido,

apresentam um elevado grau de semelhança.

Assim, foram criados os seguintes modelos que quantificam graus de semelhança entre

algumas das entidades referidas anteriormente: universitysimilarity (Tabela 38),

academicdegreesimilarity (Tabela 40), universitycoursesimilarity (Tabela 39), jobareasimilarity (Tabela

41) e jobsimilarity (Tabela 32).

Estes contêm a informação da semelhança existente entre as várias instâncias dessas

entidades. Respectivamente, universitysimilarity traduz as semelhanças existentes entre

universidades, academicdegreesimilarity traduz a semelhança existente entre graus académicos,

universitycoursesimilarity traduz a semelhança existente entre dois cursos, jobareasimilarity traduz a

semelhança entre áreas profissionais e jobsimilarity traduz a semelhança entre empregos.

Se não estiver definida a semelhança entre duas das instâncias dessa entidade, é

considerado que não existe qualquer semelhança entre elas.

Por fim, foi também criada a entidade authenticationticket (Tabela 18), destinada a guardar

informação para o correcto desempenho do processo de registo dos vários utilizadores,

nomeadamente para guardar tokens, bem como o seu estado, datas de criação, uso e expiração, se

existirem (capítulo 4.2.3).

4.2.2 - DESCRIÇÃO DOS RECURSOS DA APLICAÇÃO

A aplicação disponibiliza uma página inicial que qualquer utilizador poderá visualizar e onde

48

Page 63: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

são apresentadas as últimas ofertas colocadas pelos empregadores, assim como uma indicação do

total de candidatos, empregadores, perfis inseridos pelos candidatos e ofertas inseridas pelos

empregadores.

Nesta página inicial, os utilizadores poderão efectuar o seu registo, quer como candidatos,

quer como empregadores. Poderão também efectuar a sua autenticação, caso já tenham efectuado o

registo anteriormente.

Se o endereço da aplicação (URL) for http://myapp.com, e o endereço correspondente a um

determinado recurso for http://myapp.com/index, entende-se por caminho relativo do recurso a

componente /index. Assim a página inicial estará disponível no endereço relativo “/”, o que significa que

se um utilizador colocar no browser o endereço http://myapp.com/ ou http://myapp.com, acederá a esta

página inicial. De ora em diante serão apenas referidos os caminhos relativos dos recursos.

Caso o utilizador efectue a sua autenticação correctamente (indicando o seu username e

password), ou efectue um novo registo, será redireccionado para o caminho relativo /candidate ou

/company correspondente ao tipo de utilizador. Caso o utilizador não seja autenticado, permanecerá na

mesma página sendo indicada através de uma mensagem de erro a razão pela qual não foi possível

a autenticação.Se um utilizador pretender aceder a um recurso para o qual não tem autorização, será

também redireccionado para esta página. Como exemplo, podemos apresentar um candidato que

pretenda aceder a um recurso de um empregador.

Se o utilizador for um candidato, será apresentada uma lista resumida das últimas ofertas de

emprego inseridas por empregadores, sendo também apresentada uma lista de acções possíveis de

executar através de um menu com diversas opções.

Na lista resumida de ofertas, o candidato terá, em cada uma das ofertas, a possibilidade de

visualizar a oferta em detalhe, ou guardar a oferta como oferta marcada. As opções disponíveis são:

voltar para esta página, visualização de dados pessoais, editar dados pessoais, alterar password,

inserir novo perfil, listar os perfis já inseridos, listar os perfis respondidos por empregadores, ver as

últimas ofertas (em detalhe), listar as ofertas marcadas, listar as ofertas que respondeu, pesquisar

ofertas, inserir ofertas modelo, listar as ofertas modelo inseridas e listar sub-conjuntos de ofertas

pesquisadas. Cada uma destas acções irá ser abordada em detalhe.

Uma das acções possíveis é a visualização dos seus dados pessoais bem como a

visualização dos empregos exercidos. Se não estiverem especificados nenhuns empregos exercidos,

haverá a possibilidade de inserir novos empregos exercidos. Caso hajam empregos exercidos já

introduzidos, haverá a possibilidade de acrescentar novos empregos exercidos, bem como editar ou

apagar os existentes.

Outra das acções possíveis é a edição dos dados pessoais. Neste caso o candidato poderá

modificar os seus dados pessoais, introduzidos quando é efectuado o seu registo como candidato. O

candidato tem também a possibilidade de efectuar a alteração da sua password, caso assim o

pretenda.

Outra opção disponível é a inserção de um novo perfil. Neste caso é solicitado o

preenchimento de alguns dados necessários para a introdução de um novo perfil, de modo a que

49

Page 64: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

fique disponível para a pesquisa e visualização pelos empregadores. Os dados necessários são os

que constam na Tabela 20. O candidato terá também a possibilidade de seleccionar, para alguns

destes campos, qual a visibilidade que estes terão para o empregador.

Para a visualização dos perfis inseridos, existe uma opção para listar os perfis do candidato.

São apresentados em detalhe os vários perfis inseridos havendo a possibilidade de editar ou apagar

cada um deles. O detalhe dos perfis inseridos inclui também opções para acrescentar a cada um dos

perfis cursos profissionais frequentados, tecnologias que o candidato domine e funções exercidas e,

se existirem alguns destes elementos já inseridos, a possibilidade de editá-los ou apagá-los.

Outra das opções disponíveis para o candidato é a possibilidade de listar quais dos seus

perfis foram respondidos por empregadores. Aqui, o candidato poderá ver por perfil quais os

empregadores que responderam a um determinado perfil, tendo acesso às ofertas inseridas por esse

empregador. Foi criada também uma opção para disponibilizar ao candidato uma listagem detalhada

das últimas ofertas inseridas, podendo o candidato ver o detalhe completo da oferta, marcar a oferta

ou responder à oferta. Neste caso, o empregador será informado através de email da resposta do

candidato a essa oferta.

Outra das opções apresentadas, possibilita ao candidato a visualização da lista de ofertas

marcadas. Aqui haverá a possibilidade de ver o detalhe completo da oferta, desmarcar a oferta ou

ainda responder à oferta, sendo o empregador notificado através de email. Da mesma forma, o

candidato tem a possibilidade de visualizar as ofertas por ele respondidas, podendo ver o detalhe

completo da oferta e remover a resposta dada.

Para efectuar pesquisas o candidato tem duas opções. Ou efectua uma pesquisa de ofertas

por critério, seleccionado a pesquisa de ofertas, ou efectua uma pesquisa usando o algoritmo de

classificação. Ao seleccionar pesquisa de ofertas, são apresentados os critérios de pesquisa através

dos quais é possível efectuar a pesquisa, bem como a possibilidade de seleccionar por que critérios

será efectuada essa pesquisa. Para efectuar a pesquisa basta pressionar o botão para pesquisar e

será apresentada uma lista de ofertas que correspondem aos critérios seleccionados.

Para a pesquisa utilizando o algoritmo de classificação, o candidato deverá através da opção

de inserção de ofertas modelo, definir uma ou mais ofertas que correspondam à oferta procurada. De

seguida, através da opção existente para a listagem das ofertas modelo, poderá, por cada uma,

efectuar uma pesquisa por ofertas de empregadores que tenham maior semelhança com as ofertas

modelo inseridas, sendo apresentada uma listagem com as ofertas existentes possuindo maior

semelhança relativamente à oferta modelo escolhida para efectuar a pesquisa, podendo esta lista ser

guardada para se efectuarem novas pesquisas apenas neste sub-conjunto de resultados. É também

nesta listagem de ofertas modelo que o candidato tem a possibilidade de editar ou apagar cada uma

das ofertas modelo inseridas. O candidato tem também a possibilidade de visualizar os sub-conjuntos

guardados de ofertas pesquisadas.

Se o candidato optar por sair da aplicação, deverá usar a opção logout de modo a invalidar a

sessão e ser redireccionado para a página inicial.

No caso de o utilizador ser um utilizador empregador, depois da devida autenticação é

50

Page 65: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

apresentada uma página contendo uma lista resumida dos últimos perfis inseridos por candidatos,

assim como um menu com diversas opções. Serão apresentadas de seguida em detalhe as várias

opções disponíveis.

A lista resumida de perfis permite que, para cada um dos perfis apresentados, haja a

possibilidade de ver em detalhe cada um dos perfis, bem como marcar os que terão interesse para o

empregador. A primeira opção do menu permite que seja novamente apresentada esta lista de perfis

resumida. O empregador tem também a possibilidade de ver os seus dados, inseridos durante o

processo de registo. Ao visualizar os dados tem a possibilidade de efectuar a sua alteração. Existe

também no menu uma opção para realizar a alteração dos mesmos, assim como a alteração da

password.

O empregador, tal como o candidato tem a opção de inserir novos perfis, pode inserir novas

ofertas. Neste caso tem de preencher alguns campos necessários à introdução da oferta e poderá

seleccionar, em alguns campos, qual a visibilidade para os candidatos dos mesmos.

Para visualizar a lista de ofertas inseridas existe também uma opção no menu. Neste caso é

apresentada uma lista detalhada com essas ofertas e com a possibilidade de, em cada uma, editar ou

apagar. Outra das opções disponíveis é a lista de ofertas respondidas por candidatos. Neste caso são

apresentados, por oferta, quais os candidatos que responderam a cada uma, com a possibilidade de

ver em detalhe os perfis de cada candidato, bem como a possibilidade de efectuar um contacto com o

candidato por email.

O empregador pode também, através de outra opção do menu, listar com maior detalhe os

últimos perfis inseridos por candidatos, tendo, para cada um destes, a possibilidade de ver o detalhe

completo, marcar o perfil ou responder ao perfil.

Existe uma opção para listar todos os perfis marcados, com a possibilidade de, para cada um

dos perfis marcados, ver todos os perfis inseridos por esse candidato, ver o perfil em detalhe,

desmarcar o perfil ou responder ao perfil. Da mesma forma, é possível ver a lista de perfis

respondidos, tendo este as opções de visualização de detalhe completo do perfil e remoção da

resposta dada.

Para efectuar pesquisas, tal como o candidato, o empregador tem duas opções. A pesquisa

por critérios e a pesquisa usando o algoritmo de classificação. Se o empregador efectuar a pesquisa

por critérios, é apresentada uma lista dos critérios pelos quais é possível pesquisar e permitida a

selecção individual desses critérios. Escolhendo a opção de pesquisar, são apresentados os perfis

que correspondem a esses critérios de pesquisa, com a possibilidade de, tal como na lista dos últimos

perfis, efectuar a marcação e responder a cada um dos perfis.

Caso o empregador opte por pesquisar pelo algoritmo de classificação, deverá usar a opção

de inserir perfil modelo do menu de modo a designar um ou mais perfis que sejam muito aproximados

aos perfis procurados. Assim, acedendo à opção para listar os perfis modelo poderá, por cada um dos

perfis modelo inseridos, pesquisar perfis inseridos por candidatos, classificados por ordem de maior

semelhança com o perfil modelo inserido. Na lista resultante da pesquisa é possível marcar perfis,

responder a perfis e guardar o sub-conjunto de perfis apresentado, de modo a efectuar novas

51

Page 66: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

pesquisas nesse sub-conjunto. Na lista apresentada existe também a possibilidade de editar ou

apagar cada um dos perfis modelo inseridos. É ainda apresentada uma opção para listar os

subconjuntos de perfis guardados decorrentes de pesquisas.

Tal como o candidato, o empregador deverá usar a opção logout para sair da aplicação.

4.2.3 - REGISTO DE UTILIZADORES

O registo de utilizadores é habitualmente uma área sensível de uma aplicação, porque exige

algumas regras de segurança de modo a garantir a segurança e confidencialidade dos dados

fornecidos pelo utilizador, isto porque, normalmente neste processo, são transmitidos dados sensíveis

como dados pessoais dos candidatos ou dados de empregadores, bem como a definição das

credenciais de acesso (username e password).

Deste modo, foi usado para esta transferência de dados o protocolo HTTPS (capítulo 3.3.3)

que garante a segurança e confidencialidade na transmissão de dados e foi usado um algoritmo de

transformação de passwords de forma a que estas não sejam guardadas na Base de Dados tal como

foram inseridas pelos utilizadores1.

O registo de utilizadores obedece a um processo de verificação, de modo a que seja

garantida a real intenção de um utilizador em efectuar o seu registo. Desta forma o processo de

registo segue alguns passos de forma a que essa verificação seja efectuada. Este processo é comum

quer a candidatos quer a empregadores.

Quando o utilizador, na página inicial, escolhe uma das opções para efectuar novo registo é

apresentado um formulário contendo informação de preenchimento obrigatório. Caso algum dos

campos não esteja correctamente preenchido, são apresentadas mensagens de erro indicando os

campos que contêm informação incorrecta.

Depois de todos os campos estarem correctamente preenchidos, é criado o utilizador do tipo

correspondente na Base de Dados, mas esse utilizador não é activado e desta forma não consegue

usar as suas credenciais para acesso à aplicação. É gerado um token2, que neste caso identifica o

possível registo, é persistido na Base de Dados (Tabela 18) e é enviado um email ao utilizador com o

recurso ao qual deve aceder, com o token gerado como parâmetro. Será enviado ao utilizador um

URL da forma http://myapp.com/validate/12ab34cd56ef(...).

O utilizador visualiza, entretanto, uma mensagem que indica que irá receber um email

contendo dados necessários à validação do seu registo. Desta forma, é validado que o email que o

utilizador introduziu é um email válido e activo e pode ser usado para notificações posteriores a esse

utilizador.

Uma vez usado o URL enviado ao utilizador, o registo é efectivo e o utilizador é autenticado

na aplicação directamente, para poupar o utilizador de inserir as suas credenciais, dado que o token

também o identifica univocamente, podendo a partir daí autenticar-se normalmente na aplicação.

1 É guardado o hashing da password misturado com uma string de sal, através do algoritmo SHA256 de 32 bits.2 Um token é uma combinação de letras e dígitos único.

52

Page 67: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

O token é mantido na Base de Dados como garantia de que não é gerado outro token com

uma combinação igual, passando ao estado de “usado” e não podendo ser novamente utilizado, dado

que deixou de ser válido para a confirmação do registo ao qual está associado.

Se um utilizador, após ter efectuado um registo não o confirme num prazo que pode ser

definido na aplicação (por exemplo uma semana), terá novamente de efectuar o registo e cumprir os

passos aqui enumerados. Neste caso, o token gerado passará ao estado de “expirado”. Esta

validação é efectuada através do campo “expiration_date”.

O token é criado segundo o seguinte algoritmo: é gerado um número aleatório entre 0 e 1012,

é realizada a operação xor em bits com o tempo actual em micro-segundos desde 01 de Janeiro de

1970 e é feito o hashing desse valor misturado com uma string de sal, através do algoritmo SHA256

de 32 bits.

4.2.4 - SESSÕES E AUTENTICAÇÃO

O processo de autenticação seleccionado foi a autenticação por username e password,

designados por credenciais de autenticação e escolhidos pelo utilizador na altura do registo. Para

garantir a segurança neste envio de dados sensíveis para o utilizador, tal como no registo de

utilizadores, foi utilizado o protocolo HTTPS.

Depois de enviada esta informação, é verificada a validade destes dados. O username é uma

chave-candidata (capítulo 3.4.2) na base de dados e por isso não existe nenhum username repetido.

Desta forma, é garantido não haverem repetições do par username/password. Assim estas

credenciais permitem identificar univocamente o utilizador, seja este candidato ou empregador.

Caso seja identificado o utilizador na Base de Dados, é criada uma sessão. De modo a

melhorar a rapidez e reduzir o número de acessos ao SGBD, é gerado um objecto (“Distributed

Session”) que contém a informação do candidato ou empregador e é colocado na cache (a

serialização é gerida pelo Django). Esta cache de sessões tem a vantagem de estar acessível por

qualquer dos servidores aplicacionais e por isso os próprios servidores não guardam estado, mas sim

a cache distribuída, de forma que qualquer servidor possa receber um pedido de um cliente, verificar

se existe correspondência deste cliente na cache e prosseguir com o pedido, ou informar o utilizador

que este precisa de se autenticar.

Para a identificação da sessão na cache é enviada ao utilizador, na resposta, uma cookie

(capítulo 3.3.2), com um valor gerado da mesma forma que o token, mas sem ser persistido na Base

de Dados e com a validade de sessão do browser (se o utilizador deixar de executar o browser, esta

cookie é perdida). Assim depois de efectuada a autenticação, é sempre enviada a cookie pelo

browser enquanto existir, o que vai permitir identificar o utilizador na cache e possibilitar o acesso ao

resto dos recursos disponíveis para o seu tipo de utilizador.

Caso o utilizador opte pela acção de logout, a cache é invalidada, ou seja o objecto

correspondente é retirado da cache, e é enviado um pedido de invalidação da cookie. Se o utilizador

apenas deixar de executar o browser e não efectuar o logout, poder-se-ia correr o risco de acumular

53

Page 68: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

objectos na cache que nunca mais eram acedidos. É, porém, possível definir nos parâmetros de

configuração qual o tempo de duração máximo de um objecto na cache sem ser acedido, de forma a

prevenir esta situação.

4.2.5 - ESTRUTURA DOS DOCUMENTOS HTML GERADOS

Como já foi abordado no capítulo 3.3.6.5, o Django através da herança de templates permite

definir apenas partes de conteúdos de uma página, que poderão ser utilizados múltiplas vezes, na

mesma, ou em várias páginas. Esta característica foi utilizada na aplicação, de modo a definir uma

estrutura que serve de base a todos os documentos gerados.

A estrutura de todos os documentos é definida por uma template base, “base.html”, da qual

todos os documentos gerados herdam o seu comportamento, redefinindo apenas as componentes

necessárias. Assim foi utilizada uma estrutura com cinco blocos distintos: cabeçalho, rodapé, bloco

esquerdo, bloco central e bloco direito.

O cabeçalho, rodapé e bloco direito, contêm habitualmente informação institucional, ou seja

estática, sendo por isto comuns a todas as paginas e podem facilmente ser alterados, permitindo que

se mude completamente o aspecto da aplicação apenas com alterações mínimas.

Os outros blocos contêm informação dinâmica. O menu com as várias opções que um

candidato ou empregador pode realizar é colocados no bloco esquerdo, enquanto que o resultado

dessas acções é apresentado no bloco do centro. Como os bloco esquerdo e o bloco do centro são

dinâmicos, vai ser necessário colocar no contexto do template os dados necessários ao seu

preenchimento.

É possível porém, que numa evolução futura possa existir conteúdo dinâmico em todos os

blocos, sendo este preenchido com dados do mesmo tipo mas variantes no tempo, como por exemplo

colocar no bloco direito uma lista dos cinco últimos perfis inseridos. Assim, foi desenvolvido um

mecanismo de forma a que, se os blocos não forem explicitamente populados em cada controlador,

estes dados sejam populados por omissão.

De modo a que a apresentação das várias listagens esteja centralizada, foram desenvolvidos

templates que definem exclusivamente essas listagens, de modo a poderem ser incluídos em várias

páginas. Por exemplo, quando um empregador consulta os últimos perfis inseridos ou visualiza os

resultados dos perfis pesquisados, não faria sentido desenvolver duas páginas exactamente com a

mesma aparência, mas apenas com diferentes dados populados.

Desta forma, foi usado o sistema de inclusão de templates do Django (capítulo 3.3.6.5), de

modo a reutilizar as vezes necessárias, mas com dados diferentes, templates parciais que nunca são

apresentadas directamente ao utilizador, mas incluídas noutras templates.

4.2.6 - LOGGING

Uma aplicação deve registar num ficheiro as acções mais importantes realizadas durante a

54

Page 69: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

sua execução, por forma a que seja possível detectar falhas e determinar as razões dessas falhas.

Por outro lado, deve manter um registo das acções realizadas por cada utilizador, para se detectarem

os recursos a que esse utilizador acedeu.

Foi utilizada para este projecto a biblioteca de registo (logging) do Python, configurada de

modo a criar um ficheiro com os registos de cada um dos dias de uso da aplicação. Um dos

parâmetros de configuração é a hora a que é criado um novo ficheiro de log. Definiu-se às 00.00

horas. Quando todos os dias é atingida esta hora, é guardado o ficheiro de registo actual com a data

do dia correspondente e é criado um novo ficheiro de registo [31] cap. 10. Optou-se por esta solução

por uma questão de gestão de espaço, dado que os ficheiros de registo, dependendo do número de

utilizadores da aplicação, podem ter um tamanho bastante considerável.

Foi também incluída, caso o utilizador não seja anónimo, um identificador em cada linha de

registo gerado com o identificador de sessão do utilizador, de modo a que seja possível monitorizar

um utilizador específico.

4.2.7 - INTERNACIONALIZAÇÃO

De modo a ser possível a internacionalização do projecto, ou seja, para que facilmente se

coloque a aplicação noutra linguagem, todos os blocos de texto apresentadas aos utilizadores estão

centralizados num ficheiro, sendo este um dos parâmetros de configuração da aplicação.

Assim, se for necessário que a aplicação esteja inteiramente apresentada em qualquer outra

língua que não o português (que foi a língua escolhida para os textos dos documentos gerados), é

apenas necessário construir um outro ficheiro, com a mesma estrutura, mas com os blocos de texto

traduzidos para outra linguagem e configurar na aplicação qual o ficheiro a utilizar.

4.2.8 - MODELO DE DADOS DESENVOLVIDO

O modelo de dados indica como as várias entidades definidas para esta aplicação irão ser

persistidas na Base de Dados. Já foram referidas no capítulo 4.2.1 as várias entidades que formam o

modelo da aplicação, as relações existentes entre essas entidades e a justificação da sua existência.

Como foi apresentado no capítulo 3.4.2, são necessários definir o modelo Entidade-Relação e

depois, a partir deste, obter o modelo Relacional correspondente que é o modelo através do qual os

dados são persistidos na Base de Dados. São também enumerados os passos necessários de modo

a serem definidos estes modelos.

Seguindo os passos descritos, obtemos primeiro o modelo Entidade-Relação e, através

deste, derivamos o modelo Relacional. Devido ao facto de estes modelos serem um pouco complexos

de apresentar graficamente, são apresentadas todas as entidades e todos os atributos que

constituem essas entidades no Anexo C – Modelo Relacional de Dados (Entidades) e são explicitadas

todas as relações entre essas mesmas entidades no Anexo D – Modelo Relacional de Dados

(Relações), quer ao nível da cardinalidade da relação, quer ao nível da sua obrigatoriedade, definindo

55

Page 70: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

assim o modelo Relacional. As entidades referidas correspondem às tabelas, e os seus atributos às

colunas constituintes das tabelas. Na Figura 14 é apresentado o modelo Relacional parcial, contendo

apenas as entidades que persistem os dados passíveis de serem criados e alterados pelos

candidatos e empregadores.

Todas as entidades referidas possuem uma chave-primária (o atributo id), o que lhes permite

serem univocamente identificadas na Base de Dados. São apresentadas do lado direito as entidades

que contêm as chaves-estrangeiras para as entidades apresentadas do lado esquerdo. São também

apresentadas as obrigatoriedades de participação das entidades nas relações, bem como a

cardinalidade da sua relação. Numa Base de Dados Relacional, como a que foi usada para a

aplicação, a obrigatoriedade de participação na relação, é obtida através da não permissão da chave-

estrangeira de assumir o valor nulo (null). O contrário também é verdade, ou seja, se se permitir que

uma chave-estrangeira possa assumir o valor nulo, deixa de haver obrigatoriedade de participação na

relação.

Como exemplo concreto podemos apresentar um perfil associado a um candidato, sendo que

um candidato pode ter vários perfis. Se a chave-estrangeira desse perfil que referencia o candidato

pudesse ser de valor nulo, poderiam existir perfis de candidato não associados ao candidato. Se por

56

Figura 14: Modelo Relacional de Dados parcial

Page 71: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

outro lado essa chave-estrangeira não pudesse assumir o valor nulo, então não poderiam haver perfis

sem candidato associado.

Porém, tal não tem influência na obrigatoriedade de um candidato poder ou não ter perfis.

Esta obrigatoriedade não é possível de definir no modelo Relacional, e teria de ser validada pela

aplicação. Se, no entanto, a cardinalidade da relação fosse de 1, já seria possível definir a

obrigatoriedade dos dois lados da relação, através da existência de duas chaves-estrangeiras, uma

para cada entidade participante na relação, referenciando cada uma respectivamente a outra

entidade e podendo desta forma definir-se a possibilidade de cada uma das chaves, poderem ou não,

assumirem valores nulos.

4.2.9 - VISIBILIDADE DOS ATRIBUTOS

De forma a que os utilizadores não permitam que todos os dados por eles inseridos sejam

visíveis para outros utilizadores, foi desenvolvida a possibilidade de escolha das visibilidades de

alguns dos atributos.

De entre os vários atributos que constituem as várias entidades, nomeadamente candidatos,

perfis, empregadores e ofertas, existem alguns atributos, que por uma determinada razão, o

candidato ou o empregador não tenham interesse em que sejam visíveis.

A visibilidade dos atributos é classificada de três formas: não visível, visível apenas no

detalhe e visível.

Desta forma fica salvaguardado que o candidato ou o empregador não disponibiliza

informação que possa considerar sensível aos outros utilizadores. Todavia, esta fica persistida na

Base de Dados e pode ser ser usada para as pesquisas.

Tendo em conta os atributos dos modelos apresentados no Anexo C – Modelo Relacional de

Dados (Entidades), para as entidades utilizador, candidato, empregador, perfil e oferta, serão

referidos apenas os atributos que têm um valor pré-definido e não são configuráveis pelo utilizador.

Os atributos da entidade utilizador nunca são visíveis. Para a entidade candidato, os atributos

país e cidade são sempre visíveis. Na entidade empregador, a cidade e o país são sempre visíveis.

Na entidade perfil, os atributos cidade pretendida, país pretendido, grau académico, curso, área

profissional procurada e emprego procurado são sempre visíveis, ao invés de salário mínimo

pretendido que é sempre não visível. Para a entidade oferta, são sempre visíveis o país de trabalho, a

cidade de trabalho, o grau académico pretendido, a universidade pretendida, o curso pretendido, a

área de emprego pretendida e o emprego pretendido.

Todos os outros atributos destas entidades poderão ter as suas visibilidades definidas pelo

utilizador. O candidato pode ainda configurar a visibilidade de cada um dos seus antigos empregos e

dos modelos associados ao perfil, nomeadamente tecnologias, funções desempenhadas e cursos

profissionais desempenhados.

A configuração da visibilidade dos atributos pode ser definida no registo do candidato ou

empregador, para a configuração das visibilidades dos atributos destas mesmas entidades. Caso o

57

Page 72: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

candidato ou o empregador decidam efectuar alguma alteração à visibilidades dos atributos, poderão

fazê-lo através da edição destes dados.

Da mesma forma, na inserção de perfis pelo candidato ou de ofertas pelo empregador, esta

configuração está também disponível para os atributos das entidades correspondentes. Poderão,

também neste caso, efectuar alterações às visibilidades dos atributos destas entidades através da

edição das mesmas.

Para o candidato, a configuração da visibilidade dos antigos empregos exercidos encontra-se

na visualização dos dados pessoais, quer através da criação de um novo emprego exercido, quer

através da sua edição, enquanto que a configuração das visibilidades das tecnologias, funções

desempenhadas e cursos profissionais frequentados poderá ser definida na página de listagem de

perfis, quer na introdução de alguma nova instância destas entidades, quer através da sua edição.

4.2.10 - OPÇÕES DE CAMPOS DEPENDENTES DE ESCOLHAS

Como já foi abordado no capítulo 4.2.1, foram criadas várias entidades de forma a que alguns

atributos, quer dos candidatos e empregadores, quer dos perfis e das ofertas, fossem explicitamente

escolhidos através da utilização de campos de escolha de opções, em vez de preenchidos através de

campos de texto.

Alguns destes campos são dependentes de outros campos. Não faz sentido que sejam

apresentadas ao utilizador todas as opções possíveis para determinados campos depois de um

utilizador ter efectuado uma selecção de um campo do qual estes dependem. Justificar-se-á que o

âmbito de selecção se restrinja apenas aos valores possíveis, dependendo da selecção anterior

realizada.

Concretizando, a escolha de cidades é dependente do país. Se um utilizador selecciona um

dos países, apenas deverão ser visualizadas as opções de cidades correspondentes àquele país.

Também são dependentes do país, as universidades, as áreas profissionais e os graus

académicos. Por sua vez, os cursos são dependentes da universidade e os empregos da área

profissional.

Porém, quando se está a popular uma determinada página onde são apresentados estes

atributos, nomeadamente no registo de candidatos, empregadores, na inserção de perfis e ofertas, ou

em atributos não obrigatórios na edição dos anteriores, ainda não se tem informação sobre as opções

escolhidas pelo utilizador. Apenas quando o utilizador efectua uma determinada escolha ou uma

alteração à escolha anterior se podem, então, restringir as opções de campos que sejam

dependentes dessa opção escolhida.

Assim, quando é efectuada uma selecção de um atributo, é realizado um pedido (request)

assíncrono ao servidor através de AJAX (capítulo 3.3.5.5), de modo a serem modificadas as opções

dos outros atributos dependentes, sendo alterado o DOM (capítulo 3.3.5.4).

Para este efeito foram criados controladores (para efectuar a pesquisa das opções

correspondentes na Base de Dados) e templates específicas, gerando apenas o sub-conjunto das

58

Page 73: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

opções possíveis para a escolha do atributo dependente do anteriormente seleccionado, ou seja, é

apenas alterado esse atributo e não toda a página, que continua a ser visualizada pelo utilizador.

Para todos os atributos dependentes de outros, as escolhas são sempre modificadas em

função das opções seleccionadas nos atributos dos quais estes são dependentes.

4.2.11 - VALIDAÇÃO DOS ATRIBUTOS INTRODUZIDOS

Habitualmente numa aplicação web, é necessário que os utilizadores efectuem a introdução

de dados através de formulários. Qualquer inserção de dados por parte dos utilizadores pode levar a

que seja persistida informação contendo ambiguidades e erros.

Assim, esta aplicação foi desenvolvida de forma a minimizar as ambiguidades de dados

inseridos pelos utilizadores. O Django providencia mecanismos que permitem que os dados inseridos

pelos utilizadores sejam validados, ou seja, que correspondam ao formato pretendido e que, nalguns

casos, existam obrigatoriamente.

Por exemplo, quando um candidato pretende inserir um novo perfil, um dos atributos a

introduzir é o salário pretendido pelo candidato para aceitar um determinado emprego. Esta inserção

é feita através de um campo de texto.

Alguns dos valores possíveis de inserir nesse campo são conjuntos de caracteres,

nomeadamente caracteres não numéricos. Estes valores possíveis de serem inseridos pelos

utilizadores, a serem aceites, ou geravam um erro na introdução destes dados no SGBD, ou eram

inseridos e o seu valor não teria qualquer significado. Por esse motivo, todos os campos introduzidos

pelos utilizadores que correspondam a atributos das várias entidades definidas, são validados de

forma a terem o formato requerido.

No exemplo anteriormente referido, apenas são aceites valores numéricos. Caso sejam

introduzidos valores não aceites, é mostrada na própria página visualizada uma mensagem de erro

indicando os requisitos necessários para que esse campo seja válido.

Entre as várias validações efectuadas, contam-se a existência do preenchimento do campo,

para campos obrigatórios, o tipo de dados aceites (um campo numérico apenas aceita dígitos, um

campo para introdução de datas apenas aceita datas, um campo para introdução de email apenas

aceita emails válidos) e o comprimento máximo aceite para o campo.

Assim, consegue-se garantir alguma fiabilidade, embora não total, dado que não é feita uma

validação semântica na maioria dos campos, dos dados inseridos pelo utilizador.

Em concreto, um candidato tem liberdade para definir um endereço através de um conjunto

arbitrário de caracteres, ou definir um salário pretendido com um valor extremamente baixo, sendo

estes normalmente inseridos na Base de Dados e apresentado aos empregadores,

independentemente de serem valores absurdos.

59

Page 74: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

4.3 - ESTRUTURA DE DIRECTORIAS E FICHEIROS

Como foi referido (capítulo 3.1.2), iniciando um novo projecto Django, são criados à partida

determinados ficheiros e directorias. Porém, embora estes constituam a base para o projecto, é

necessário definir uma estrutura coerente e modular onde são alojados os vários ficheiros

desenvolvidos, os ficheiros de configuração, bem como os ficheiros de monitorização do

funcionamento da aplicação e outros ficheiros informativos e auxiliares.

Assim o projecto apresenta a seguinte estrutura de directorias:

• raiz do projecto – directoria que contém os ficheiros “manage.py”, “urls.py”, “settings.py”,

“__init__.py” , “sandbox.bat” e “.hgignore”; contém também as directorias “docs”, “logs”,

“marketplace”, “misc”, “static” e “templates”.

• “.hg” – directoria criada pela aplicação “hg” que foi a aplicação escolhida para

versionamento do projecto.

• “docs” – directoria que contém alguns documentos informativos da aplicação, este

documento e alguma bibliografia.

• “logs” – directoria que contém os “logs” de funcionamento da aplicação.

• “marketplace” – directoria que contém os ficheiros principais da aplicação que foram

desenvolvidos pelo programador e que contém as directorias “language” e “fixtures”.

• “language” – directoria que contém os dicionários de blocos de texto apresentados, caso

se pretenda estender a aplicação para o uso de várias linguagens.

• “fixtures” – directoria que contém dados para pré-popular a Base de Dados, usados para

testes.

• “misc” – directoria que contém o software necessário para a configuração e execução da

aplicação (capítulo 4.1).

• “static” – directoria que contém os ficheiros estáticos usados pela aplicação, como

imagens, folha de estilos e ficheiros de JavaScript.

• “templates” – directoria que contém os templates desenvolvidos para a aplicação,

contendo esta várias sub-directorias estruturadas de acordo com a lógica hierárquica das

Vistas.

Os principais ficheiros desenvolvidos neste projecto podem ser tipificados em três categorias:

ficheiros de configuração, ficheiros auxiliares e ficheiros de desenvolvimento.

Os ficheiros de configuração do Django são ficheiros em Python que nos permitem efectuar a

configuração de parâmetros específicos da aplicação. São estes o “settings.py” e o “urls.py” e estão

colocados na raiz do projecto, tendo já sido alvo de abordagem detalhada (capítulo 3.1.2).

O ficheiro “manage.py” é um ficheiro copiado pelo Django para a raiz de qualquer novo

projecto e não é alvo de qualquer desenvolvimento; é um ficheiro que permite efectuar um conjunto

de tarefas auxiliares e por isso pertencente à categoria de ficheiros auxiliares. Na raiz do projecto,

60

Page 75: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

encontramos ainda o ficheiro “__init__.py”, que é o primeiro ficheiro executado uma vez iniciada a

aplicação e onde foram colocadas algumas validações iniciais de funcionamento da infra-estrutura,

validando se todos os componentes da aplicação estão em execução, como por exemplo o sistema

de gestão de cache. Está também o ficheiro “sandbox.bat” que é destinado a definir algumas

variáveis de ambiente.

Os ficheiros desenvolvidos com o código da aplicação encontram-se na directoria

“marketplace” e incluem (juntamente com as templates) toda a lógica de execução da aplicação.

O ficheiro “portuguese.py” contém todas as palavras usadas nas interacções com o utilizador,

seja através em emails, seja através dos vários templates de forma a que, para o uso de outra

linguagem, seja apenas necessário efectuar a tradução dessas palavras e indicar no ficheiro de

configuração do Django (“settings.py”) qual o ficheiro que contém as novas palavras a usar.

O ficheiro “classes.py” define algumas classes necessárias à aplicação e, dada a arquitectura

modular do projecto, centraliza as definições de classes auxiliares. Da mesma forma foi incluído o

ficheiro “constants.py”, que define constantes não necessárias ao funcionamento do Django, mas

específicas da aplicação. Todas as constantes usadas foram centralizadas neste ficheiro. O ficheiro

“logconf.py” contém as configurações de logging da aplicação e a forma como os ficheiros de log são

criados e formatados. O ficheiro “utils.py” contém alguns métodos auxiliares, nomeadamente métodos

de conversão de dados e métodos usados de forma recorrente, mas sem interferência na lógica da

aplicação.

Os ficheiros “forms.py”, “views.py” e “models.py” contêm toda a lógica da aplicação e, por

isso, é analisado em detalhe o seu conteúdo no capítulo 3.1.2, e no capítulo 4.2.

O ficheiro “resemblances.py” contém a lógica de semelhanças, entre alguns campos,

necessária ao algoritmo de classificação. O ficheiro “search.py” contêm a implementação das

procuras por critério e através do algoritmo de classificação. O constante nestes ficheiros é detalhado

no capítulo 4.4.4.

O ficheiro “test.py” contém todos os testes efectuados durante o desenvolvimento da

aplicação, assunto que é abordado no capítulo 3.2. O ficheiro “widgets.py” contém algumas definições

de widgets que foram necessárias de implementar, de modo a que fosse possível a apresentação de

campos booleanos através de uma forma que não uma checkbox, que é apresentação normal do

Django para campos booleanos. O ficheiro “ejob.wsgi” contém o código necessário para converter a

aplicação numa aplicação WSGI, de modo a poder ser servida através do módulo “mod_wsgi” do

servidor Apache.

Ainda uma referência para os ficheiros “jquery.js” e “style.css”, ambos na directoria “static”. O

primeiro, é uma biblioteca de JavaScript desenhada para simplificar o client-side scripting e usada

neste projecto. O segundo, é o ficheiro é onde estão definidas as formatações das várias páginas

HTML geradas (capítulo 3.3.5.3).

61

Page 76: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

4.4 - ALGORITMO DE CLASSIFICAÇÃO DE PERFIS E OFERTAS

O objectivo deste capítulo é apresentar o algoritmo de classificação desenvolvido para o

protótipo. É apresentada a sua formulação matemática seguida da sua implementação e integração

na aplicação. São ainda apresentados exemplos de como são efectuados os cálculos e são

discutidos os resultados obtidos.

4.4.1 - CONCEITO DE AGREGAÇÃO

Para esta aplicação, temos o objectivo encontrar uma forma de conseguir classificar perfis de

candidatos relativamente a um perfil ideal proposto pelo empregador, e ofertas de empregadores

relativamente a um ideal de oferta de um candidato.

Temos pois que conseguir quantificar distâncias entre perfis ou entre ofertas, de modo a

conseguir encontrar um sub-conjunto destes, que garanta um determinado grau de satisfação por

forma a que seja um conjunto válido. Este objectivo é atingido através da operação de agregação que

passaremos a detalhar.

Agregação é o conceito de combinação vários valores, numéricos ou não numéricos apenas

num único, de modo a que este se torne uma medida. Em tomadas de decisão, os valores a serem

agregados, usualmente correspondem a um grau de satisfação ou grau de preferência.

Um grau de preferência quantifica o quanto uma alternativa A é preferida relativamente a uma

alternativa B e, desse modo, é uma avaliação relativa. Um grau de satisfação expressa o quanto uma

alternativa é satisfatória relativamente a um determinado critério, ou seja, representa uma distância

relativamente à alternativa ideal para uma tomada de decisão e deste modo é uma avaliação

absoluta.

Os valores deverão pertencer a uma escala numérica ou a uma escala não numérica que

tenha alguma relação de ordem, mesmo que fraca, ou não é possível executar a agregação. Um

exemplo de uma escala não numérica é {muito pequeno, pequeno, médio, grande, muito grande}.

Este tipo de escala não numérica é muitas vezes usada na teoria dos conjuntos imprecisos ( fuzzy set

theory).

Uma vez definidos os valores, estes podem ser agregados e é obtido um novo valor na

mesma escala. Podemos definir três classes de operações de agregação distinguidas pelo seu

comportamento: as conjuntivas, as disjuntivas e normais. As conjuntivas implicam que o valor

agregado é alto caso todos os valores sejam altos e é correspondente ao “e” lógico. As disjuntivas

implicam que o valor agregado é alto se algum dos valores da agregação for alto e corresponde ao

“ou” lógico. As normais têm a propriedade de ser compensativas e o resultado vai corresponder a

uma média.

As propriedades da operação de agregação são impostas pela natureza dos valores a serem

agregados. Em alguns métodos de agregação com múltiplos critérios, o objectivo é encontrar uma

62

Page 77: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

pontuação absoluta para um objecto, dado um conjunto de pontuações parciais que obedecem a

diferentes critérios.

4.4.2 - CRITÉRIO DE MEDIDA

O critério de medida vai permitir descrever como é efectuada a agregação. Para ser definido

o critério de medida utilizado, é necessário introduzir algumas notações.

Definimos um conjunto X de alternativas x1 , ... , xn e um conjunto de critérios

h1 , ... , hn . Um critério h i mapeia um conjunto de alternativas numa escala L . O valor

h ix1 é considerado o valor parcial do critério i para a alternativa x1 . É utilizada uma

escala de medida comum a todos os critérios e considerada a escala definida pelo conjunto [0,1] .

É considerado também, por uma questão de simplicidade, a i=hi x1 e assim, é possível

representar a alternativa x1 como um vector de pontuações parciais [a1…an] em [0,1]n .

Um operador de agregação é um mapeamento de Ln em L que permite calcular a

partir do vector de pontuações parciais a pontuação total da alternativa a .

As propriedades matemáticas podem ser consultadas em [30]. Existe ainda outro tipo de

propriedades que é útil enunciar, que são as propriedades de comportamento, algumas das quais

necessárias para a correcta definição da agregação que são: a possibilidade de definir pesos que

reflectem a importância de cada critério e a possibilidade de definir o comportamento do decisor.

A definição de pesos permite que alguns critérios tenham mais influência do que outros no

resultado da agregação. Por outro lado, o decisor pode pretender que um ou alguns critérios sejam

absolutamente necessários e deste modo pode definir um ou alguns critérios como imprescindíveis

(veto), ou se pretender que apenas um critério ou alguns critérios sejam suficientes, pode definir o

favorecimento.

A maioria das operações de agregação requerem o uso de pesos que reflectem a importância

de cada um dos critérios. A operação de agregação mais usada é a operação de média aritmética

ponderada.

É definido um vector de pesos normalizados [w1 ,... ,w n] tal que:

w i∈[0,1] (1)

∑iw i=1 (2)

e assim, operação média aritmética nas condições enumeradas é definida por:

WM w1 ,.. ,wna1 ,... , an=∑i=1

n

w i a i (3)

63

Page 78: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

O efeito de veto pode ser formalizado da seguinte forma:

1. é a operação de agregação final

2. é a operação de agregação escolhida

3. a i é um veto de

4. ∧ é a operação de mínimo

então, a operação de veto existe se for possível a seguinte decomposição:

a1 , ... , an=a i∧a1 , ... , an (4)

De forma análoga podemos formalizar o efeito de favorecimento:

1. é a operação de agregação final

2. é a operação de agregação escolhida

3. a i é um favorecimento de

4. ∨ é a operação de máximo

então, a operação de favorecimento existe se for possível a seguinte decomposição:

a1 , ... , an=a i∨a1 , ... , an (5)

As operações mínimo e máximo gozam das propriedades comutativa,

a i∨a j=a j∨a i (6)

a i∧a j=a j∧a i (7)Idempotência,

a i∨ai=a i (8)

a i∧ai=a i (9) e associativa entre si:

a i∨a j∧ak =a i∨a j∧a i∨ak=a i∨ak∧a i∨a j (10)

a i∧a j∨ak =a i∧a j∨a i∧ak=a i∧ak∨a i∧a j (11)

Desta forma, a formalização do algoritmo para a agregação será o seguinte:

1. é a operação de agregação final

2. WM w1 ,.. ,wna1 ,... , an é a operação de agregação media aritmética ponderada

3. a x1 , ... , axn são vetos de

4. a y1 ,... , a yn são favorecimentos de

5. a xi≠ayi

64

Page 79: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

6. ∨ é a operação de máximo

7. ∧ é a operação de mínimo

então:

a1 , ... , an=a x1∧...∧axn∧WM w1 ,.. ,wna1 ,... , an∨a y1∨...∨a yn (12)

Porém foram também experimentados outros critérios de medida, embora não tenham sido

utilizados por corresponderem a resultados não tão representativos.

Um dos critérios de medida experimentados foi a média aritmética ponderada mas com uma

ordenação decrescente dos pesos ou seja utilizando o operador OWA (Ordered Weighted Averaging).

Nas condições (1) e (2) é efectuada uma ordenação dos pesos por ordem decrescente dos valores

dos pesos. Assim esta operação é definida por:

OWAw1 , ... , wna1 ,... , an=∑i=1

n

w jb j (13)

em que:

b j≡a n−i1 (14)

Outro critério de medida estudado foi a média geométrica ponderada. Para o mesmo conjunto

de pontuações parciais [a1…an] em [0,1]n e para o mesmo vector de pesos normalizados

[w1 ,... ,w n] a operação média geométrica ponderada é definida da seguinte forma:

WGM w1 ,... ,wn a1 , ... , an=∏i=1

n

aiw i

∑i=1

n

w i

(15)

A operação de agregação utilizada foi a média aritmética ponderada, mas com a possibilidade

do efeito de veto ou favorecimento definida por (12), sendo que cada valor parcial a i não pode ser

simultaneamente veto e favorecimento e vai corresponder ao critério de medida.

4.4.3 - COMPARAÇÃO ENTRE OS CRITÉRIOS DE MEDIDA

Para a demonstração da aplicação dos critérios de medida foram escolhidos dados de

exemplo reduzidos, por uma questão de simplicidade de cálculos. No capítulo 4.4.5 é discutida a

forma de obtenção do critério de medida escolhido (média aritmética ponderada) com dados reais e

utilizando os efeitos de veto e preferência. Para a comparação entre os resultados obtidos pela

aplicação dos critérios de medida apresentados no capítulo 4.4.2 foram utilizados os dados a seguir

indicados.

65

Page 80: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Conjunto de alternativas:

X=[ x1] (16)

Vectores de critérios para um exemplo com 5 critérios:

a x1=[0.5,0.7,1,0.2, 0] (17)

a x2=[0.2,0.5,0.6,0.2,0.8] (18)

a x3=[0.1,0.1, 0.3, 0.3,0.1] (19)

a x4=[0.8,0.7,1,0.3,0.9] (20)

Vector de pesos normalizado:

w=[0.2,0.3,0.3 ,0.1,0.1] (21)

Com a aplicação do critério de medida utilizando a operação média aritmética ponderada (3)

são obtidos os seguintes resultados:

WAM 1=∑i=1

5

wia x1i=0.2×0.50.3×0.70.3×10.1×0.20.1×0=0.63 (22)

WAM 2=∑i=1

5

w iax2 i=0.2×0.20.3×0.50.3×0.60.1×0.20.1×0.8=0.47 (23)

WAM 3=∑i=1

5

wi ax3i=0.2×0.10.3×0.10.3×0.30.1×0.30.1×0.1=0.18 (24)

WAM 4=∑i=1

5

w i ax4 i=0.2×0.80.3×0.70.3×10.1×0.30.1×0.9=0.79 (25)

Na aplicação do critério de medida utilizando o operador OWA foram obtidos os seguintes

resultados:

OWA1=∑i=1

5

w i bx1i=0.3×0.50.3×0.70.2×10.2×0.20.1×0=0.58 (26)

OWA2=∑i=1

5

wi bx2i=0.3×0.20.3×0.50.2×10.2×0.60.1×0.8=0.45 (27)

OWA3=∑i=1

5

w ibx3i=0.3×0.10.3×0.10.2×0.30.2×0.30.1×0.1=0.19 (28)

OWA4=∑i=1

5

wi bx4i=0.3×0.80.3×0.70.2×10.2×0.30.1×0.9=0.80 (29)

Aplicando o critério de medida utilizando a operação média geométrica ponderada ao mesmo

conjunto de dados obtemos:

66

Page 81: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

WGM 1=∏i=1

5

ax1iw i

∑i=1

5

w i

=0.50.2×0.70.3×10.3×0.20.1×00.1

1=0 (30)

WGM 2=∏i=1

5

ax2 iw i

∑i=1

5

wi

=0.20.2×0.50.3×0.60.3×0.20.1×0.80.1

1=0.42 (31)

WGM 3=∏i=1

5

ax3iw i

∑i=1

5

wi

=0.10.2×0.10.3×0.30.3×0.30.1×0.10.1

1=0.16 (32)

WGM 4=∏i=1

5

a x4iw i

∑i=1

5

w i

=0.80.2×0.70.3×10.3×0.30.1×0.90.1

1=0.75 (33)

Para uma melhor comparação entre os resultados obtidos utilizando os vários critérios de

medida construiu-se a Tabela 2 que resume os resultados obtidos.

a x1 a x2 a x3 a x4WAM 0.63 0.47 0.18 0.79

OWA 0.58 0.45 0.19 0.80

WGM 0 0.42 0.16 0.75

Tabela 2: Comparação de resultados obtidos com alguns critérios de medida

Pela análise dos resultados obtidos, constata-se que a utilização do critério de medida média

geométrica ponderada conduz a resultados semelhantes aos obtidos pelos outros critérios com

excepção da existência de um elemento que tenha o valor zero no vector de critérios. Neste caso o

resultado da agregação terá sempre o valor zero mesmo que os outros critérios tenham o valor 1.

Desta forma este critério de medida não poderia ser utilizado.

Na comparação entre o critério de medida média aritmética ponderada e a utilização de OWA,

constata-se que, se os primeiros valores do vector forem altos e se os primeiros pesos forem também

altos, este critério de medida apresenta também valores altos. No caso limite, se um vector de

critérios for [0,0,1 ,0 ,0] e o vector de pesos for [0,0,1 ,0 ,0] , o valor da operação de

agregação será de zero enquanto que o comportamento esperado seria de apresentar o valor 1 .

Porém, se estes vectores forem respectivamente [1,0 ,0 ,0 ,0] e [0,0,0 ,0 ,1] o valor da

67

Page 82: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

operação de agregação será de 1 enquanto que o esperado seria zero. Para vectores de critérios

de medida que sejam semelhantes a estes como por exemplo [1,0.2 ,0.1 ,0.1,0.1] e

[0.1,0.1,0.1 ,0.1,0.6] , a discrepância de valores obtidos na agregação utilizando a média

aritmética ponderada e a utilização de OWA é acentuada e são obtidos valores para a operação

utilizando OWA muito distantes do comportamento esperado.

Assim, foi escolhida a operação de agregação média aritmética ponderada com os efeitos de

veto e preferência que corresponde ao critério de medida que apresenta valores mais coerentes com

os resultados esperados pela sua aplicação.

4.4.4 - PESQUISAS

Como já foi referido anteriormente no capítulo 4.2.2, foram implementados dois tipos de

pesquisas: a pesquisa por critério e a pesquisa através do algoritmo de classificação.

A pesquisa por critério permite ao utilizador, através do preenchimento de campos existentes

no formulário de pesquisa, obter uma lista de ofertas ou perfis, conforme o tipo de utilizador a efectuar

a pesquisa, que cumpram os critérios introduzidos. No caso de o utilizador ser um candidato, os

campos do formulário de pesquisa são os campos correspondentes às ofertas inseridas pelos

empregadores e, no caso de o utilizador ser empregador, os campos do formulário de pesquisa são

os campos correspondentes aos perfis inseridos pelos candidatos.

O utilizador tem a possibilidade de, entre os vários critérios de pesquisa, seleccionar por

quais pretende efectuar a procura. Se a procura retornar um conjunto de resultados demasiado

grande, são apresentados apenas alguns dos resultados e o total de resultados que correspondem

aos critérios de pesquisa, e é solicitado ao utilizador que refine a sua pesquisa.

De entre os vários critérios de pesquisa, existem critérios que implicam que os campos da

pesquisa correspondam exactamente a atributos existentes na Base de Dados como, por exemplo, a

área profissional, enquanto que outros critérios apenas requerem que o critério de pesquisa seja

cumprido como, por exemplo, a média de curso. Ou seja, se se escolher pesquisar por uma

determinada área profissional, apenas serão apresentados os resultados para essa área profissional,

enquanto que, pesquisando pela média de curso, são apresentados todos os perfis que apresentem

uma média de curso igual ou superior à indicada para a pesquisa. Os campos que necessitam

apenas que o critério seja cumprido estão assinalados no formulário de pesquisa.

A outra pesquisa desenvolvida foi a pesquisa através do algoritmo de classificação. Nesta

pesquisa, substancialmente diferente da anterior, o utilizador insere um ou mais modelos, a partir dos

quais pretende que seja efectuada a comparação com os perfis e ofertas existentes.

Se o utilizador for um candidato, tem de inserir uma ou mais ofertas modelo. Se o utilizador

for um empregador, tem de inserir um ou mais perfis modelo. Na inserção de perfis ou ofertas modelo,

os utilizadores têm a possibilidade de definir pesos para cada um dos atributos do perfil modelo, bem

como escolher se determinado atributo é um veto ou um favorecimento.

68

Page 83: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Assim estamos nas condições necessárias para a utilização do algoritmo de classificação

descrito no capítulo 4.2.2. Dependendo do tipo de utilizador, são retornados da Base de Dados todos

os perfis ou todas as ofertas. De seguida, estes são classificados, de modo a que sejam encontrados

os perfis ou ofertas que correspondem a um valor mais elevado do resultado obtido através da

operação de agregação entre o perfil ou oferta e o perfil modelo ou oferta modelo.

Os perfis ou ofertas que tenham obtido um valor mais elevado são apresentados ao utilizador,

ordenados por ordem decrescente do valor obtido, sendo este valor também apresentado. Será

depois possível persistir os resultados obtidos e efectuar nova pesquisa através da utilização de um

modelo diferente inserido, mas restringido apenas a estes resultados obtidos.

De realçar o facto de, em qualquer das pesquisas, serem usados todos os atributos

disponíveis quer nas ofertas quer nos perfis, e não apenas os visíveis, de modo a que as pesquisas

sejam o mais precisas possível.

Para a utilização do algoritmo de classificação, como foi referido, é necessário que sejam

retornados todos os perfis ou todas as ofertas existentes na Base de Dados. A agilização deste

processo é abordada no capítulo 5.

Se o total de perfis existentes ou o total de ofertas existentes for da ordem das dezenas de

milhares ou superior, este processo de cálculo poder-se-ia tornar moroso. Isto porque o maior

constrangimento não está em retornar estes valores da Base de Dados, mas em instanciar os

objectos correspondentes, de modo a mostrá-los ao utilizador.

Nesse sentido, foram usados alguns mecanismos de forma a minimizar este impacto na

aplicação. Todos os pedidos efectuados à Base de Dados que sejam para retornar resultados de

pesquisas, são feitos através da linguagem SQL (capítulo 3.4.3), não usando a camada de

abstracção providenciada pelo Django, minimizando assim os objectos instanciados. Por outro lado,

na pesquisa por critérios, apenas são instanciados os objectos apresentados como resultado ao

utilizador. Na construção das páginas HTML (renderização), são apenas mostrados ao utilizador um

conjunto limitado de resultados pré-definido (dez resultados, mas com a possibilidade deste valor ser

alterado na configuração da aplicação).

Assim, consegue-se tirar partido do facto de a instanciação de objectos do Django ser lazy, ou

seja, só são transformados em objectos os resultados de um pedido à Base de Dados quando

necessário, e não imediatamente quando os resultados são retornados.

A implementação das pesquisas, bem como a implementação da operação de agregação

está no ficheiro “search.py”, por forma a estar centralizada num único ficheiro criado para o efeito.

4.4.5 - IMPLEMENTAÇÃO DA OPERAÇÃO DE AGREGAÇÃO

A operação de agregação permite que se obtenha um resultado que traduz o grau de

semelhança entre várias ofertas ou vários perfis.

Para a aplicação da operação de agregação há que definir previamente os dados

necessários, nomeadamente um conjunto X de alternativas, um vector a de resultado de

69

Page 84: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

aplicação de critérios, uma escala L , um vector de pesos w normalizado, um vector de vetos

v , e um vector de preferências p .

Por uma questão de implementação optou-se por restringir o conjunto X de alternativas

apenas a uma, que corresponde à diferença entre uma oferta e a oferta modelo ou um perfil e o perfil

modelo.

O cálculo do vector a implicou que se tivessem de calcular valores para a semelhança

entre cada um dos atributos do modelo e do perfil ou da oferta, com o qual se efectua a comparação.

Assim, foram definidos no ficheiro “resemblances.py” métodos que permitem obter valores

numéricos para estas semelhanças (Anexo B – Métodos para obtenção de semelhanças) baseados,

quando aplicável, nas entidades que traduzem graus de semelhança entre atributos (capítulo 4.2.1).

A escala L escolhida é o intervalo real [0,1] .

O vector de pesos w é obtido através do peso de cada um dos atributos introduzido pelo

utilizador numa escala inteira entre 0 e 10 , sendo depois normalizado.

O vector de vetos v é obtido a partir da introdução, pelo utilizador, dos atributos indicados

como vetos ( 0 se o atributo não corresponde a um veto e 1 se corresponde), multiplicado pelo

elemento do vector a correspondente.

O vector de preferências p é obtido da mesma forma que o vector de vetos, sendo obtido

através da introdução pelo utilizador dos atributos indicados como preferências.

Aplicando a operação de agregação a estes dados, obtemos o resultado na escala escolhida

para a semelhança entre um perfil ou oferta modelo e o perfil ou oferta alvo do cálculo. Para a

obtenção dos vários valores correspondentes a vários perfis ou ofertas, este processo é repetido

tantas vezes quanto o número de perfis ou ofertas existentes, sendo retidos apenas os perfis ou

ofertas que apresentem valores de semelhança mais elevados.

4.4.6 - TESTES EFECTUADOS E RESULTADOS

Para além dos testes unitários, já referidos em capítulos anteriores, que permitem garantir a

fiabilidade e a eficácia da aplicação, foram realizados testes, de modo a aferir os resultados da

pesquisa utilizando o algoritmo de classificação e testes de carga aos dois tipos de pesquisas, dado

que estas são as funcionalidades que requerem maior performance da infra-estrutura aplicacional.

Para garantir que o algoritmo de classificação retorna os resultados esperados, foram

testadas pesquisas utilizando os dados das tabelas apresentadas de seguida, respectivamente de

perfis (Tabela 5) e ofertas (Tabela 6), usando os perfis e ofertas modelo constantes na Tabela 3 e na

Tabela 4. Foram também inseridos na Base de Dados, dados que definem a semelhança entre as

várias instâncias de cada entidade constantes nas restantes Tabelas. Foram ainda inseridos alguns

dados necessários como países, cidades, graus académicos, universidades, cursos superiores, áreas

profissionais e empregos, de modo a que os identificadores usados nas tabelas anteriores existissem,

70

Page 85: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

embora não seja relevante detalhá-los.

Perfil Modelo 1 Perfil Modelo 2 Perfil Modelo 3Nome do Atributo Valor Peso Veto Pref. Valor Peso Veto Pref. Valor Peso Veto Pref.

appliance_country 1 5 0 0 1 10 0 0 1 10 0 0appliance_city 1 5 0 0 1 10 0 0 1 10 0 0academic_degree 1 0 0 0 8 9 0 0 8 8 0 0academic_school 0 0 0 0 1 5 0 0 2 3 0 0academic_course 0 0 0 0 1 10 0 0 4 9 0 0is_complete 1 0 0 0 0 7 0 0 1 10 0 0course_start_date 01-02-90 0 0 0 01-01-03 3 0 0 01-02-80 8 0 0course_end_date 01-01-09 0 0 0 01-01-09 3 0 0 01-02-90 1 0 0course_average 10 0 0 0 12 6 0 0 16 8 0 0appliance_job_area 3 10 0 0 1 5 0 0 2 8 0 0appliance_job 6 10 0 0 1 5 0 0 2 7 0 0appliance_job_key_words Tinta 0 0 0 Linux 8 0 0 Redes 0 0 0prof_experience_time_months 12 10 0 0 12 2 0 0 96 1 0 0prof_experience_area_time_months 12 10 0 0 6 2 0 0 96 8 0 0available_start_time_days 10 3 0 0 30 0 0 0 15 2 0 0available_hours 8 10 0 0 8 4 0 0 8 7 0 0available_hours_from 7 5 0 0 8 4 0 0 9 2 0 0available_hours_to 19 5 0 0 19 4 0 0 19 2 0 0available_travel 1 3 0 0 0 0 0 0 0 0 0 0driver_license 1 3 1 0 0 3 0 0 1 0 0 0salary_euros 700 8 0 0 900 5 0 0 1300 3 0 0salary_euros_min 700 8 0 0 700 5 0 0 1200 3 0 0

Tabela 3: Perfis Modelo usados em testes

Oferta Modelo 1 Oferta Modelo 2 Oferta Modelo 3Nome do Atributo Valor Peso Veto Pref. Valor Peso Veto Pref. Valor Peso Veto Pref.

working_place_country 1 10 0 0 1 10 1 0 1 3 0 0working_place_city 1 10 0 0 1 2 0 0 1 1 0 0working_place_max_distance_km 50 3 0 0 10 1 0 0 80 7 0 0academic_degree 8 10 0 0 7 5 0 0 6 3 0 0academic_school 2 2 0 0 2 7 0 0 1 4 0 0academic_course 3 10 0 0 1 3 0 0 2 2 0 0is_complete 1 8 0 0 1 2 0 0 0 10 0 0course_average 13 3 0 0 16 8 0 0 12 4 0 0job_area 1 10 0 0 1 10 0 0 2 7 0 0job 1 10 0 0 3 5 0 0 2 7 0 1job_key_words Java 0 0 0 Linux 2 0 0 Java 5 0 0prof_experience_area_time_months 200 5 0 0 12 3 0 0 60 4 0 0available_start_time_days 15 5 0 0 20 0 0 0 5 6 0 0available_day_hours 8 10 0 0 8 3 0 0 4 3 0 0available_hours_from 8 2 0 0 10 2 0 0 9 3 0 0available_hours_to 20 2 0 0 20 8 0 0 21 3 0 0available_travel 1 0 0 0 1 5 0 0 0 1 0 0driver_license 1 0 0 0 1 5 0 0 0 1 0 0salary_euros 900 7 0 0 2000 10 0 0 500 5 0 0salary_euros_max 1000 7 0 0 2200 10 0 0 600 5 0 0

Tabela 4: Ofertas Modelo usadas em testes

71

Page 86: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Perfil 1 Perfil 2 Perfil 3Nome do Atributo Valor Valor Valor

appliance_country 1 1 1appliance_city 1 1 2academic_degree 3 8 9academic_school 0 1 2academic_course 0 1 2is_complete 1 1 0course_start_date 26-02-95 01-09-00 01-09-80course_end_date 02-07-98 05-08-05 01-07-90course_average 12 14 12appliance_job_area 3 1 1appliance_job 4 1 1appliance_job_key_words Estuque Java Energiaprof_experience_time_months 24 24 200prof_experience_area_time_months 12 24 190available_start_time_days 0 15 30available_hours 12 10 8available_hours_from 7 9 8available_hours_to 21 22 18available_travel 0 1 0driver_license 1 1 0salary_euros 800 1100 1900salary_euros_min 650 800 1850

Tabela 5: Perfis usados em testes

Oferta 1 Oferta 2 Oferta 3Nome do Atributo Valor Valor Valor

working_place_country 1 1 1working_place_city 1 1 1working_place_max_distance_km 20 50 100academic_degree 4 6 8academic_school 0 2 1academic_course 0 3 1is_complete 1 1 1course_average 12 15 13job_area 2 1 1job 2 1 7job_key_words Canalização Java J2EEprof_experience_area_time_months 15 120 24available_start_time_days 5 25 15available_day_hours 8 8 4available_hours_from 8 9 12available_hours_to 19 21 18available_travel 1 0 0driver_license 1 0 1salary_euros 900 1300 700salary_euros_max 950 1400 850

Tabela 6: Ofertas usadas em testes

72

Page 87: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Academic Degree Similarity

Degree 1 Degree 2 Similarity

6 7 0.95

7 6 0.8

7 8 0.7

8 7 0.7

6 8 0.2

8 6 0.2

8 9 0.92

9 8 0.98

Tabela 7: Semelhança de Graus Académicos

University Similarity

University 1 University 2 Similarity

1 2 0.9

2 1 0.7

Tabela 8: Semelhança de Universidades

University Course Similarity

Course 1 Course 2 Similarity

1 2 0.5

2 1 0.6

Tabela 9: Semelhança de Cursos Superiores

Job Area Similarity

Job Area 1 Job Area 2 Similarity

1 2 0.8

2 1 0.8

Tabela 10: Semelhança de Áreas Profissionais

Job Similarity

Job 1 Job 2 Similarity

1 2 0.2

2 1 0.2

Tabela 11: Semelhança de Empregos

O Anexo B – Métodos para obtenção de semelhanças, contém os métodos usados para o

cálculo de semelhanças entre cada um dos atributos.

Para este conjunto de dados, e efectuando os cálculos tal como demonstrado no capítulo

4.4.3, os resultados para a operação de agregação definida são os apresentados na Tabela 12 e na

Tabela 13.

Perfil Modelo 1 Perfil Modelo 2 Perfil Modelo 3Perfil 1 0.857 0.591 0.501

Perfil 2 0.581 0.813 0.695

Perfil 3 0.000 0.630 0.540

Tabela 12: Resultados da pesquisa pelo Algoritmo de Classificação (Perfis)

Oferta Modelo 1 Oferta Modelo 2 Oferta Modelo 3Oferta 1 0.638 0.547 1.000

Oferta 2 0.912 0.605 0.652

Oferta 3 0.872 0.712 0.648

Tabela 13: Resultados da pesquisa pelo Algoritmo de Classificação (Ofertas)

Destes resultados podemos extrair alguma informação relevante. No conjunto de resultados

73

Page 88: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

encontrados para o Perfil Modelo 1, podemos constatar o efeito do veto existente no resultado do

Perfil 1, bem como o facto de terem sido adoptados apenas alguns critérios com peso diferente de

zero, mas desses, muitos têm o peso máximo, o que traduz diferenças abruptas nos valores das

classificações.

Os resultados obtidos para o Perfil Modelo 2 mostram um modelo com os pesos mais

distribuídos, mas com o Perfil 2 a cumprir quase todos os critérios mais relevantes, e por isso

destacado dos outros. No caso do Perfil Modelo 3, não existe nenhum perfil que cumpra muitos dos

critérios, embora se destaque o Perfil 2, dado que consegue obter valores parciais de semelhanças

em muitos dos critérios, o que o aproxima em termos de resultado do modelo.

No caso das ofertas, os resultados obtidos para a Oferta Modelo 1 indicam bastante

semelhança entre esta e as ofertas pesquisadas, o que é facilmente perceptível pela análise dos

dados usados para os testes. Porém a Oferta 1 é penalizada face às outras pelo facto de não cumprir

alguns dos critérios de peso elevado.

Já para a Oferta Modelo 2, embora exista um veto, este não é perceptível, dado que todas as

ofertas cumprem esse critério, embora, cada uma, não cumpra alguns dos critérios de peso relevante,

o que se traduz em resultados parecidos mas mais favoráveis à Oferta 3, devido ao cumprimento de

alguns critérios com bastante peso relativamente às outras ofertas. Para a Oferta Modelo 3, há uma

grande disparidade no resultado, motivada pela existência de uma preferência, cumprida apenas pela

Oferta 1, o que a torna igual à oferta modelo pela aplicação deste critério de medida, o que garante a

preponderância da preferência caso esse critério seja cumprido.

Os testes realizados à aplicação do critério de medida permitem verificar a correcta aplicação

deste e atestam o seu bom comportamento, bem como a real tradução em resultados esperados das

diferenças entre os vários modelos, quer de ofertas quer de perfis.

Foram também efectuados testes de carga, de modo a validar o seu funcionamento em

ambientes de maior solicitação de recursos e onde o tempo de resposta é crítico. Assim, foi testada a

aplicação com um pouco mais de 1000 instâncias das várias entidades definidas na Base de Dados e

não foram detectados aumentos significativos nos tempos de retorno dos dados da Base de Dados,

bem como do tempo de construção por parte do Django das páginas HTML apresentadas aos

utilizadores, tendo estes testes sido efectuados apenas numa máquina, com uma instância do

servidor aplicacional e com uma instância da base de dados em execução sem o clustering MySQL

activo.

Na pesquisa simples, os tempos cifraram-se em 1 segundo para o pior caso colocado, ou seja

uma pesquisa sem qualquer critério seleccionado, quer na pesquisa de perfis, quer na pesquisa de

ofertas. Porém, a pesquisa através do algoritmo de classificação, nas condições apresentadas,

demorou cerca de 20 segundos, quer na pesquisa de perfis, quer na pesquisa de ofertas, tendo-se

verificado um crescimento linear do tempo de pesquisa com o número total de perfis e ofertas, quer

na pesquisa por perfis, quer na pesquisa por ofertas. No capítulo seguinte são apresentadas soluções

de modo a reduzir o tempo das pesquisas, caso este se torne demasiado demorado.

74

Page 89: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

5 - CONCLUSÃO

Esta dissertação teve como objectivo o planeamento e desenvolvimento de uma aplicação

que permitisse melhorar a forma de acesso à informação entre os vários intervenientes,

nomeadamente candidatos e empregadores, numa área tão importante como a procura e oferta de

emprego, utilizando para esse efeito um algoritmo de classificação dessa informação.

Iniciou-se o projecto com uma análise dos serviços actualmente disponíveis para os

utilizadores, quer a nível nacional, quer a nível internacional, assinalando quais as funcionalidades

existentes e identificando as características passíveis de serem melhoradas.

Foi desde muito cedo óbvio que uma das grandes lacunas existentes é a correcta

classificação dos perfis dos candidatos por parte dos empregadores, existindo por vezes apenas a

distinção por tipo de emprego ou eventualmente por área profissional. Por outro lado, o mesmo se

passa da parte dos candidatos. Segmentados apenas por estes critérios, torna-se moroso quer para

candidatos, quer para empregadores, a procura e análise das melhores ofertas de emprego

existentes ou dos melhores perfis de candidatos disponíveis, requerendo muitas vezes a análise

individual de cada perfil ou de cada oferta, de modo a obter os dados necessários para a sua correcta

avaliação.

De modo a tornar esta avaliação mais eficaz e mais eficiente, foi desenvolvido um método

que permite efectuar a classificação dos perfis de candidatos e das ofertas de emprego através do

uso de toda a informação disponibilizada, quer por candidatos, quer por empregadores, por forma a

obter uma medida de proximidade entre um perfil ou uma oferta ideal, definida respectivamente por

empregador e candidato, e os vários perfis e ofertas existentes.

A primeira questão colocada centrava-se no universo de utilizadores que teriam interesse em

usufruir desta aplicação. Qualquer pessoa, num ou em vários momentos, decide procurar emprego,

motivada pelas mais diversas razões. Ao nível das empresas é habitual existirem departamentos

específicos dedicados ao recrutamento.

Assim, a aplicação tem de ser acessível da forma mais simples e mais directa possível, sem

necessidade de instalação de software adicional, de modo a permitir que um grande número de

pessoas a utilizem. Por este motivo, optou-se por desenvolver uma aplicação web, acessível por

qualquer pessoa que “navegue” na internet com um browser sem, desta forma, necessitar de instalar

uma nova aplicação, o que para a maioria dos utilizadores seria um entrave à sua utilização.

A segunda questão colocada foi sobre as ferramentas a utilizar para o desenvolvimento da

aplicação. Dado que um site institucional ou informativo é constituído por um número limitado de

páginas HTML, apresentando sempre o mesmo conteúdo ou com pequenas variações deste ao longo

do tempo, uma abordagem simplista utilizando apenas páginas estáticas não nos permitiria aproximar

da solução para o problema identificado. Teria de se desenvolver uma aplicação que permitisse gerar

várias páginas, de forma dinâmica e dependentes das opções tomadas pelo utilizador, necessitando

por isso de ser implementada uma aplicação bastante mais complexa.

A aplicação teria de conseguir receber, guardar e apresentar informação fornecida pelos

75

Page 90: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

utilizadores, de forma a disponibilizá-la aos outros utilizadores. Assim foi necessária a utilização de

um Sistema de Gestão de Base de Dados de modo a persistir essa informação.

Todavia, nem toda a informação pode ser disponibilizada a todos os utilizadores, assim como

nem todos os utilizadores têm iguais papéis na aplicação. Assim, foram criados mecanismos de

segurança, de forma a realizar a autenticação e autorização dos vários utilizadores, definindo o

âmbito da utilização da aplicação para os dois tipos de utilizadores (candidatos e empregadores).

Por outro lado, de forma a minimizar o tempo de desenvolvimento e permitir a adição de

novas funcionalidades e a alteração, se necessário, das existentes ao longo do tempo de vida da

aplicação, ou seja da sua manutenção, bem como providenciar um conjunto de ferramentas que

permitissem que o grande enfoque fosse a lógica de funcionamento da aplicação, de modo a cumprir

as funcionalidades necessárias, e não o desafio de resolver questões de implementação, optou-se

por uma linguagem de alto nível (Python) e pela utilização de uma framework (Django) nessa

linguagem, desenhada especificamente para dinamizar o desenvolvimento de aplicações web.

Dado que a aplicação necessita de permitir o uso intensivo por parte de uma quantidade

crescente de utilizadores, houve o cuidado de dotar a aplicação de uma arquitectura que a tornasse

robusta, de modo a maximizar o tempo de serviço, e que lhe permitisse manter a performance com o

aumento de carga.

A robustez é obtida através do uso de componentes redundantes, ou seja, se existir por

qualquer razão uma falha numa máquina, haverá sempre outra que irá preencher essas funções até

haver novamente disponibilidade da primeira para efectuar o serviço, sem a percepção do

acontecimento pelo utilizador, enquanto que a manutenção de performance está associada à

distribuição da carga não apenas para um dos componentes, mas por todos os existentes de forma

igualitária, bem como a possibilidade de em qualquer altura serem acrescentados novos

componentes para que a carga seja também distribuída entre eles.

De modo a que sejam prevenidos à partida alguns erros na aplicação, e a garantir que as

suas funcionalidades estão operacionais e retornam os resultados esperados, optou-se pelo

desenvolvimento orientado por testes, por forma a que cada funcionalidade tivesse um teste, que

falhava aquando da sua falta ou do retorno de um resultado não esperado, prevenindo assim

possíveis falhas futuras não aguardadas.

Conhecidos os requisitos e algumas decisões na realização da aplicação iremos abordar os

fundamentos teóricos que permitiram o seu desenvolvimento e uma descrição detalhada do trabalho

realizado.

Iniciou-se o trabalho, como anteriormente foi referido, por um levantamento das soluções

existentes actualmente. De seguida foi apresentada uma descrição detalhada da framework utilizada,

sendo explanadas as características e potencialidades que a tornaram a escolhida para a realização

da aplicação.

Foi abordado em detalhe o desenvolvimento orientado por testes, avaliado o seu

desempenho como metodologia de programação em comparação com o método tradicional de

desenvolvimento, e foram apresentados os vários passos do método e como proceder de modo a

76

Page 91: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

usar esta metodologia em conjunto com o Django.

Foi também explicada como se processa a troca de dados entre o utilizador e a aplicação,

enumerados e detalhados os principais protocolos de comunicação utilizados, nomeadamente o

protocolo HTTP e HTTPS, e foi apresentado o conceito de arquitectura de sistemas REST, definidas

as suas restrições de modo a poder ser aplicado, definido o conceito de recursos, e apresentada a

utilização bem mais alargada do protocolo HTTP através do REST, bem como apresentadas as

vantagens da sua utilização.

Posteriormente foi apresentada a linguagem da resposta recebida e visualizada pelo cliente

(HTML) como resposta à solicitação no servidor dos recursos disponíveis, foram descritas as suas

várias componentes, como folhas de estilo (CSS) que permitem alterar completamente a visualização

do conteúdo enviado ao browser do utilizador, foi brevemente descrita a linguagem de scripting

(JavaScript) que permite a execução de código já depois da resposta ter sido enviada ao cliente, foi

referida a biblioteca de JavaScript utilizada de modo a serem usados alguns métodos para a

realização de pedidos assíncronos ao servidor e foi abordada a forma de envio de informação do

cliente para o servidor usando formulários.

O sistema de templating do Django foi também detalhado, tendo sido um componente

bastante útil na construção desta aplicação, dado que permite, ao máximo, a reutilização de HTML

implementado, não havendo necessidade de existirem várias páginas exactamente com o mesmo

código desenvolvido, com especial enfoque na herança e inclusão.

Foram apresentadas brevemente as principais funções e conceitos subjacentes aos SGBD, o

modelo de dados e a forma de estruturar toda a informação de modo a que esta esteja persistida de

forma coerente, foram introduzidos os modelos Entidade-Relação e Relacional, foi referida a

linguagem de comunicação com o SGBD e foi abordada a camada de abstracção do Django de modo

a permitir a interacção com o SGBD.

Numa vertente mais prática e de já da implementação da solução, foi apresentada a estrutura

de componentes da aplicação, detalhando cada um deles e referindo qual a estrutura ideal de modo a

que a aplicação seja robusta e mantenha um elevado desempenho, mesmo com uma carga

crescente.

Entrando na lógica da aplicação desenvolvida, foram enumeradas as várias entidades criadas

na aplicação, como o utilizador, o candidato e o empregador, a sua constituição em termos de

atributos e as suas relações, foram descritos todos os recursos disponíveis na aplicação, ou seja

todas as acções que os candidatos e empregadores podem realizar, como por exemplo inserir perfis e

ofertas e efectuar pesquisas, bem como os resultados obtidos pela execução de cada uma das

acções.

Foi descrito o processo de registo de utilizadores e foi apresentada a forma de garantir que o

registo é efectuado em total segurança, sem haver o risco de intercepção de informação privada, quer

de candidatos quer de empregadores, assim como foi detalhado o processo de autenticação dos

utilizadores e a gestão das sessões dos utilizadores autenticados a utilizarem a aplicação.

Foi explicado o formato das várias páginas constituintes da aplicação, os seus componentes

77

Page 92: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

(cabeçalho, rodapé, bloco esquerdo, direito e central) e a forma de colocar informação acessível

pelos templates, de modo a que os conteúdos das páginas sejam dinâmicos, mas preenchidos de

forma centralizada.

Foi apresentada a possibilidade de internacionalização da aplicação, ou seja, de efectuar a

transposição da linguagem da aplicação para outra qualquer língua, bastando para isso traduzir as

palavras constantes de um ficheiro que contém todas as palavras numa determinada língua.

Foi explicado o modelo de dados definido para a aplicação, constituído pelo conjunto de todas

as tabelas criadas e todos os atributos dessas tabelas. Foi referida a possibilidade de definição, pelo

utilizador, da visibilidade para os outros utilizadores da maior parte dos atributos das entidades,

possibilitando que este omita aos outros determinada informação que não pretenda que seja

conhecida, como por exemplo o seu nome ou o seu número de telefone, ou qual o salário pretendido

num determinado perfil.

A questão das validações da informação introduzida pelo utilizador foi referida, assim como a

diminuição do leque de escolhas de determinadas opções mediante a escolha de outra, da qual as

primeiras são dependentes. Um utilizador ao escolher o país, não tem de escolher de entre todas as

cidades do mundo, mas apenas as correspondentes ao país seleccionado.

Foi ainda detalhada a organização da estrutura de ficheiros do projecto, quer dos ficheiros

usados pelo Django para a sua configuração, quer dos ficheiros que contêm toda a lógica de

funcionamento da aplicação.

Por fim foi abordado em detalhe o algoritmo desenvolvido para efectuar a classificação dos

perfis de candidatos e das ofertas de emprego, tendo sido apresentada a sua definição formal, foi

efectuada a comparação com outras operações de agregação passíveis de serem utilizadas, foram

explicadas as duas pesquisas possíveis, sendo uma a pesquisa por critérios, muito semelhante às já

encontradas noutras aplicações, mas enriquecida com uma grande variedade de possibilidades de

escolha de critérios, e a pesquisa pelo algoritmo de classificação, o que implica a introdução dos

pesos necessários ao algoritmo, bem como vetos e preferências.

Foi ainda apresentada a forma como foi programada a operação de agregação, ou seja o

algoritmo de classificação e foram apresentados resultados de testes com perfis e ofertas contendo

dados fictícios, mas que nos permitem validar o bom comportamento do algoritmo de classificação e a

sua assertividade em termos dos resultados obtidos. Foram também referidos alguns resultados de

testes de carga realizados.

A inovação introduzida por este trabalho centra-se na formalização e implementação de um

algoritmo, cujo objectivo é conseguir calcular distâncias entre informação abstracta e complexa tal

com perfis e ofertas, constituída por valores definidos mas difíceis de modelar. Houve um grande

ênfase na tentativa de minimizar as incoerências provocadas pelos utilizadores na introdução de

dados e por isso reduziu-se ao mínimo a possibilidade, para atributos relevantes, da introdução de

dados de texto, como o país e a cidade. Isto implicou um crescimento substancial do modelo de

dados em tamanho e complexidade, quer em termos de entidades, quer em termos de relações,

78

Page 93: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

tendo sido criadas entidades para representar algumas das opções possíveis para o utilizador, e

entidades para representar os graus de semelhança entre instâncias de algumas dessas entidades.

Uma aplicação como a que foi desenvolvida é um projecto que ao longo da sua vida útil será

sempre melhorada, quer a nível de design, quer a nível de novas funcionalidades requeridas, quer a

nível do melhoramento da sua gestão como aplicação.

Alguns dos melhoramentos a introduzir futuramente na aplicação poderão ser a criação de

um Backoffice, de modo a existir uma interface de administração na aplicação, proporcionando que

determinados utilizadores possam, por exemplo, criar mais entradas em entidades como o país, as

cidades, as universidades e os empregos. A existência de um Backoffice poderia também permitir a

introdução de novas semelhanças entre entidades, quando essa relação de semelhança fizer sentido

existir, garantindo dessa forma que a aplicação se mantém com dados sempre actualizados.

Também poderá ser muito útil, o uso de ferramentas de data-mining que proporcionem a

criação de diversos tipos de estatísticas e tratamento da informação existente na Base de Dados da

aplicação. Por outro lado, para uma melhor monitorização da aplicação, seria interessante a criação

de algum reporting, de modo a que regularmente haja informação relevante a ser endereçada a

utilizadores que sejam gestores da aplicação (por exemplo com acesso ao Backoffice).

Em termos de implementação, e de modo a que a aplicação não aguarde que os emails de

aviso ou registo sejam enviados, poder-se-ia criar uma fila de espera assíncrona para o envio de

emails, com outra qualquer aplicação dedicada a tratar do seu envio.

Com o potencial aumento de candidatos, perfis, empregadores e ofertas, para que as

pesquisas se mantenham rápidas, poder-se-ia intensificar o uso de cache, ou integrar um mecanismo

de indexação de perfis o ofertas de modo a minimizar o número de acessos à Base de Dados para as

pesquisas, o que para ordens de grandeza do total de utilizadores superiores aos milhares poderá

constituir um melhoramento a realizar.

Poderia ainda ser também acrescentada uma funcionalidade na página inicial, de modo a

permitir que os utilizadores redefinam a sua password, caso não se recordem da actual, e poderia ser

enviado um aviso aos empregadores quando um determinado tipo de perfil especificado fosse

inserido por um candidato, e enviado um aviso aos candidatos quando um determinado tipo de oferta

fosse introduzida por um empregador. Para complementar os dados do candidato, poderia ser

acrescentada uma fotografia ao perfil e permitir que o candidato submeta um ficheiro contendo o seu

currículo, de modo a que seja acessível aos empregadores.

Embora tenha sido experimentado o algoritmo desenvolvido com sucesso, tal não é

impeditivo de se tentar melhorar o algoritmo utilizado na aplicação, por forma a obter ainda melhores

resultados nas pesquisas.

79

Page 94: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Bibliografia[1] Beck, Kent, Extreme Programming Explained: Embrace Change, Addison Wesley, 1999

[2] Beck, Kent, Test-Driven Development By Example, Addison Wesley, 2002

[3] Ben-Kiki, O., Evans, C., Net, I., YAML Ain’t Markup Language - Specification, YAML, 2009

[4] Bergsten, H., Java Server Pages, O'Reilly, 2000

[5] Brittain, J., Darwin, I., Tomcat: The Definitive Guide, O'Reilly, 2007

[6] Chamberlin, D., Boyce, R., SEQUEL: A Structured English Query Language, Proceedings of the

1974 ACM SIGFIDET Workshop, 1974

[7] Chappell, D., Understanding .NET, O'Reilly, 2006

[8] Chen, P., The Entity Relationship Model: Toward a Unified View of Data, ACM Transactions on

Database Systems, Vol. 1, Nº 1, 1976

[9] Cheswick, William R., Bellovin, Steven M., Rubin, Aviel D., Firewalls and Internet Security;

Repelling the Wily Hacker, ,

[10] Chown, P., Advanced Encryption Standard (AES) Ciphersuites for Transport Layer Security

(TLS), RFC3268, 2002

[11] Codd E., The Relational Model for Database Management, Addison-Wesley, 1990

[12] Coombs, J., Renear, A., DeRose, S., Markup Systems and the Future of Scholarly Text

Processing, Communications of the ACM, 1987

[13] Cooper, D., Santesson, S., Farrell, S., Boyen, S. Housley, R., Polk, W., Internet X.509 Public Key

Infrastructure Certificate and Certificate Revocation List (CRL) Profile, RFC5280, 2008

[14] Cooper, M., Dzambasow, Y., Hesse, P., Joseph, S., Nicholas, R., Internet X.509 Public Key

Infrastructure: Certification Path Building, RFC4158, 2005

[15] Crespo, R., Processadores de Linguagens – da Concepção à Implementação, IST Press, 2001

[16] Crockford, D., The application/json Media Type for JavaScript Object Notation (JSON), RFC4627,

2006

[17] Dierks, T., Allen, C., The TLS Protocol Version 1.0, RFC2246, 1999

[18] Dierks, T., Rescorla E., The Transport Layer Security (TLS) Protocol Version 1.1, RFC4346,

2006

[19] Dierks, T., Rescorla E., The Transport Layer Security (TLS) Protocol Version 1.2, RFC5246,

2008

[20] Eby, P., Python Web Server Gateway Interface v1.0, PEP 333, 2003

[21] Fielding, R. T., Architectural Styles and the Design of Network-Based Software Architectures,

PhD Dissertation. Dept. of Information and Computer Science, University of California, Irvine., 2000

[22] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., Berners-Lee, T., Hypertext

Transfer Protocol - HTTP/1.1, RFC2616, 1999

[23] Flanagan, D., JavaScript: The Definitive Guide, O'Reilly, 2006

[24] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., Stewart, L.,

HTTP Authentication: Basic and Digest Access Authentication, RFC2617, 1999

[25] Freed, N., Borenstein, N., Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types,

80

Page 95: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

RFC2046, 1996

[26] Freed, N., Borenstein, N., Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance

Criteria and Examples, RFC2049, 1996

[27] Freed, N., Borenstein, N., Multipurpose internet mail extensions (MIME) Part One: Format of

internet message bodies, RFC2045, 1996

[28] Freed, N., Klensin, J., Postel, J., Multipurpose Internet Mail Extensions (MIME) Part Four:

Registration Procedures, RFC2048, 1996

[29] Goodman, D. Morrison, M., JavaScript Bible, John Wiley and Sons, 2004

[30] Grabish, M., Orlovski, S., Yager, R., Fuzzy Aggregation of Numerical Preferences, Paper, 1999

[31] Henderson, C., Building Scalable Web Sites - Building, Scaling, and Optimizing the Next

Generation of Web Applications, O'Reilly, 2006

[32] Hoffman, P., The WAIS URI Scheme, RFC4156, 2005

[33] Holdener A., Ajax: The Definitive Guide, O'Reilly, 2008

[34] Holovaty, A., Kaplan-Moss, J., The Definitive Guide to Django - Web Development Done Right,

Apress, 2009

[35] Hunt, Andrew, Thomas, David, The Pragmatic Programmer: From Journeyman to Master,

Addison Wesley, 1999

[36] Juneau, J., Baker, J., Ng, V., Wierzbicki, F., Munoz, L., Definitive Guide to Jython, Apress, 2010

[37] Khare, R., Lawrence, S., Upgrading to TLS Within HTTP/1.1, RFC2817, 2000

[38] Kristol, D., Montulli, L., HTTP State Management Mechanism, RFC2965, 2000

[39] Kronke, D., Database Processing: Fundamentals, Design, and Implementation, Prentice Hall,

2005

[40] Kurose, James F., Ross, Keith W., Computer Networking, a Top-Down Approach Featuring the

Internet (3ª Edição), Addison Wesley, 2005

[41] Lamport, L., LaTeX: A Document Preparation System, Addison-Wesley, 1994

[42] Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D., Jones, L., SOCKS Protocol Version 5,

RFC1928, 1996

[43] Lindley, C., jQuery Cookbook: Solutions & Examples for jQuery Developers, O'Reilly, 2009

[44] Luotonen, A., Tunneling TCP based protocols through Web proxy servers, Paper, 1998

[45] Lutz, M., Learning Python, O'Reilly, 2009

[46] Moats, R., URN Syntax, RFC2141, 1997

[47] Mockapetris, P., Domain Names - Concepts and Facilities, RFC1034, 1987

[48] Mockapetris, P., Domain Names - Implementation and Specification, RFC1035, 1987

[49] Moore, K., MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header

Extensions for Non-ASCII Text, RFC2047, 1996

[50] Otte, R., Patrick, P., Roy, M., Understanding CORBA, Prentice Hall, 1995

[51] Pierre, M., Fullton, J., Gamiel, K., Goldman, J., Kahle, B., Junze, J., Morris, H., Schiettecatte, F.,

WAIS over Z39.50-1988, RFC1625, 1994

[52] Postel, J., Reynolds. J., File Transfer Protocol (FTP), RFC959, 1985

81

Page 96: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

[53] Reenskaug, Trygve, The Model-View-Controller (MVC): Its Past and Present, Paper, 2003

[54] Reid, G., Thinking in PostScript, Addison-Wesley, 1990

[55] Rescorla E., HTTP Over TLS, RFC2818, 2000

[56] Richardson, L., Ruby, S., RESTful Web Services, O'Reilly, 2007

[57] Ruby, S., Thomas, D., Hansson, D., Agile Web Development with Rails, The Pragmatic

Bookshelf, 2009

[58] Rusty, E., Effective XML, Addison-Wesley, 2004

[59] Schmitt, C., CSS Cookbook, O'Reilly, 2009

[60] Silberschatz, A., Korth, H., Sudarshan, S., Database System Concepts, McGraw-Hill, 2001

[61] Sollins, K., Masinter, L., Functional Requirements for Uniform Resource Names, RFC1737, 1994

[62] W3C CSS Working Group, Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification,

W3C, 2009

[63] W3C DOM Working Group, Document Object Model (DOM) Level 2 Core Specification, W3C,

2000

[64] W3C HTML Working Group, HTML 5.0, W3C, 2010

[65] W3C HTML Working Group, XHTML 1.1 Specification, W3C, 2001

[66] Weisfield, Matt., The Object-Oriented Thought Process, Paperback, 2008

[67] Xu, R., Wunsh, D., Clustering (IEEE Press Series on Computational Intelligence), John Wiley and

Sons, 2009

[68] Zimmerman, Hubert, IEEE Transactions and Communications, Vol COM-28, Nº 4, Paper, 1980

82

Page 97: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Anexo A – Operações básicas sobre o SGBD

Definimos os seguintes modelos como base para os exemplos:

class Library(models.Model):

name = models.CharField(max_length=200)

address = models.CharField(max_length=200)

class Book(models.Model):

library = models.ForeignKey(Library)

name = models.CharField(max_length=200)

author = models.CharField(max_length=200)

pub_date = models.DateTimeField('date published')

• Retornar uma lista com todos os objectos do modelo “Book”:

◦ book_list = Book.objects.all()

• Retornar uma lista com todos os objectos do modelo “Book” associados a uma “Library”

anteriormente retornada, ordenando por ordem descendente de “autor”:

◦ library = Library.objects.get(name = “City”)

◦ book_list = Book.objects.fiter(library = library).order_by(“-author”)

• Inserir um novo objecto “Library”:

◦ library = Library(name='LibName', address='LibAddress')

◦ library.save()

• Alterar o nome de um objecto “Library” depois de retornado:

◦ library = Library.objects.get(name = “City Library”)

◦ library.name = “Town Library”

◦ library.save()

• Apagar um ou vários objectos “Library” cujo atributo “address” é “Street A”

◦ Library.objects.filter(address = “Street A”).delete()

83

Page 98: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Anexo B – Métodos para obtenção de semelhanças

São aqui descritos os métodos de cálculo das semelhanças entre atributos, sendo que o valor

1 corresponde a uma semelhança total e o valor 0 corresponde a não existir qualquer semelhança.

Alguns dos atributos especificados correspondem apenas à entidade perfil, outros atributos

correspondem apenas à entidade oferta e existem atributos comuns correspondentes às duas

entidades.

Os métodos de cálculo são precedidos da(s) entidade(s) a que se referem.

Perfil e Oferta: cidade

Se cidade1 = cidade2, semelhança = 1, c.c semelhança = 0

Perfil e Oferta: país

Se país1 = país2, semelhança = 1, c.c semelhança = 0

Oferta: distância máxima ao local de trabalho

Se distancia1 < distancia2 (do modelo) , semelhança = 1

Se |distancia1 – distancia2| > 100, semelhança = 0

semelhança = (100 – |distancia1 – distancia2|) / 100

Perfil e Oferta: grau académico

Se grau académico1 = grau académico2, semelhança = 1

Se existir academicdegreesimilarity(grau académico1,grau académico2)

semelhança = academicdegreesimilarity(grau académico1,grau académico2)

c.c semelhança = 0

Perfil e Oferta: universidade

Se universidade1 = universidade2, semelhança = 1

Se existir universitysimilarity(universidade1,universidade2)

semelhança = universitysimilarity(universidade1,universidade2)

c.c semelhança = 0

Perfil e Oferta: curso

Se curso1 = curso2, semelhança = 1

Se existir academiccoursesimilarity(curso1,curso2)

semelhança = academiccoursesimilarity(curso1,curso2)

c.c semelhança = 0

84

Page 99: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Perfil e Oferta: curso completo

Se curso completo1 = curso completo2, semelhança = 1, c.c semelhança = 0

Oferta: média de curso

Se média de curso1 < média de curso2 (do modelo), semelhança = 1

Se média de curso1 > média de curso2 – 5 (do modelo), semelhança = 0

semelhança = (5 – |média de curso1 – média de curso2|) / 5

Perfil: média de curso

Se média de curso1 > média de curso2 (do modelo), semelhança = 1

Se média de curso1 < média de curso2 – 5 (do modelo), semelhança = 0

semelhança = (5 – |média de curso1 – média de curso2|) / 5

Perfil e Oferta: área profissional

Se área profissional1 = área profissional2, semelhança = 1

Se existir jobareasimilarity(área profissional1,área profissional2)

semelhança = jobareasimilarity(área profissional1,área profissional2)

c.c semelhança = 0

Perfil e Oferta: emprego

Se emprego1 = emprego2, semelhança = 1

Se existir jobsimilarity(emprego1,emprego2)

semelhança = jobsimilarity(emprego1,emprego2)

c.c semelhança = 0

Perfil e Oferta: palavras chave

Calcular total de palavras chave no modelo

Calcular total de palavras chave no comparado

Calcular total de palavras chave iguais

Se total de palavras chave no modelo = 0, semelhança = 0

semelhança = total de palavras chave iguais / total de palavras chave no modelo

Oferta: experiência profissional na área (meses)

Se epa1 < epa2 (do modelo), semelhança = 1

Se |epa1 – epa2| > 100, semelhança = 0

semelhança = (100 – |epa1 – epa2|) / 100

85

Page 100: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Perfil: experiência profissional na área (meses)

Se epa1 > epa2 (do modelo), semelhança = 1

Se |epa1 – epa2| > 100, semelhança = 0

semelhança = (100 – |epa1 – epa2|) / 100

Oferta: dias para início de actividade

Se dia1 > dia2 (do modelo), semelhança = 1

Se |epa1 – epa2| > 30, semelhança = 0

semelhança = (30 – |epa1 – epa2|) / 30

Perfil: dias para início de actividade

Se dia1 < dia2 (do modelo), semelhança = 1

Se |epa1 – epa2| > 30, semelhança = 0

semelhança = (30 – |epa1 – epa2|) / 30

Oferta: horas disponíveis por dia

Se hdd1 <= hdd2 (do modelo), semelhança = 1, c.c semelhança = 0

Perfil: horas disponíveis por dia

Se hdd1 >= hdd2 (do modelo), semelhança = 1, c.c semelhança = 0

Oferta: horas de diária de início de actividade

Se hdia1 >= hdia2 (do modelo), semelhança = 1, c.c semelhança = 0

Perfil: horas de diária de início de actividade

Se hdia1 <= hdia2 (do modelo), semelhança = 1, c.c semelhança = 0

Oferta: horas de diária de fim de actividade

Se hdfa1 <= hdfa2 (do modelo), semelhança = 1, c.c semelhança = 0

Perfil: horas de diária de fim de actividade

Se hdfa1 >= hdfa2 (do modelo), semelhança = 1, c.c semelhança = 0

Oferta: disponibilidade para viajar

Se dv1 <= dv2 (do modelo), semelhança = 1, c.c semelhança = 0

Perfil: disponibilidade para viajar

Se dv1 >= dv2 (do modelo), semelhança = 1, c.c semelhança = 0

86

Page 101: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Oferta: carta de condução

Se dv1 <= dv2 (do modelo), semelhança = 1, c.c semelhança = 0

Perfil: carta de condução

Se dv1 >= dv2 (do modelo), semelhança = 1, c.c semelhança = 0

Oferta: salário em euros

Se se1 >= se2 (modelo), semelhança = 1

Calcular metade do salário do modelo

Se se1 < metade do salário do modelo, semelhança = 0

semelhança = (metade do salário do modelo - (se2 - se1)) / metade do salário do modelo

Perfil: salário em euros

Se se1 <= se2 (modelo), semelhança = 1

Calcular dobro do salário do modelo

Se se1 > dobro do salário do modelo, semelhança = 0

semelhança = (dobro do salário do modelo - (se1 - se2)) / dobro do salário do modelo

Oferta: salário máximo em euros

Se sme1 >= sme2 (modelo), semelhança = 1, c.c semelhança = 0

Perfil: salário mínimo em euros

Se sme1 <= sme2 (modelo), semelhança = 1, c.c semelhança = 0

Perfil: data de início de curso superior

Se ics1 >= ics2 (modelo), semelhança = 1, c.c semelhança = 0

Perfil: data de fim de curso superior

Se ics1 <= ics2 (modelo), semelhança = 1, c.c semelhança = 0

Perfil: experiência profissional total (meses)

Se ept1 > ept2 (do modelo), semelhança = 1

Se |ept1 – ept2| > 100, semelhança = 0

semelhança = (100 – |ept1 – ept2|) / 100

87

Page 102: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Anexo C – Modelo Relacional de Dados (Entidades)marketplace_user

pk id INT(11)username VARCHAR(40)password VARCHAR(200)active TINYINT(1)expired TINYINT(1)creation_date DATE

nl expiration_date DATElast_access_date DATEtype VARCHAR(1)

Tabela 14: Entidade User

marketplace_candidatepk id INT(11)fk user_id INT(11)

first_name VARCHAR(40)last_name VARCHAR(40)middle_names VARCHAR(80)address VARCHAR(200)zip_code VARCHAR(15)zip_code_city VARCHAR(40)

fk city_id INT(11)fk country_id INT(11)

birth_date DATEemail VARCHAR(200)phone VARCHAR(14)mobile VARCHAR(14)active TINYINT(1)gender TINYINT(1)visibility_first_name INT(11)vivsibility_last_name INT(11)visibility_middle_names INT(11)visibility_address INT(11)visibility_zip_code INT(11)visibility_zip_code_city INT(11)visibility_birth_date INT(11)visibility_email INT(11)visibility_phone INT(11)visibility_mobile INT(11)visibility_gender INT(11)

Tabela 15: Entidade Candidate

marketplace_candidatebookmarkedofferpk id INT(11)fk candidate_id INT(11)fk offer_id INT(11)

bookmarked_date DATETIME

Tabela 16: Entidade CandidateBookmarkedOffer

88

Page 103: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_companypk id INT(11)fk user_id INT(11)

company_name VARCHAR(200)nif VARCHAR(14)email VARCHAR(200)phone1 VARCHAR(14)phone2 VARCHAR(14)fax VARCHAR(14)address VARCHAR(200)zip_code VARCHAR(15)zip_code_city VARCHAR(40)

fk city_id INT(11)fk country_id INT(11)

visibility_company_name INT(11)visibility_nif INT(11)visibility_email INT(11)visibility_phone1 INT(11)visibility_phone2 INT(11)visibility_fax INT(11)visibility_address INT(11)visibility_zip_code INT(11)visibility_zip_code_city INT(11)

Tabela 17: Entidade Company

marketplace_authenticationticketpk id INT(11)fk user_id INT(11)

ticket VARCHAR(200)state INT(11)creation_date DATETIME

nl usage_date DATETIMEexpiration_date DATETIMEdescription VARCHAR(400)duration_months INT(11)company VARCHAR(50)visibility INT(11)

Tabela 18: Entidade AuthenticationTicket

marketplace_candidateareamaintechnologypk id INT(11)fk profile_id INT(11)

technology VARCHAR(80)description VARCHAR(200)experience_months INT(11)visibility INT(11)

Tabela 19: Entidade CandidateAreaMainTechnology

89

Page 104: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_candidateprofilepk id INT(11)fk candidate_id INT(11)

profile_name VARCHAR(40)fk appliance_city_id INT(11)fk appliance_country_id INT(11)fk academic_degree_id INT(11)

fk, nl academic_school_id INT(11)fk, nl academic_course_id INT(11)

is_complete TINYINT(1)course_start_date DATEcourse_end_date DATEcourse_average INT(11)prof_experience_time_months INT(11)prof_experience_area_time_months INT(11)

fk appliance_job_area_id INT(11)fk appliance_job_id INT(11)

appliance_job_key_words VARCHAR(200)appliance_job_description VARCHAR(200)available_start_time_days INT(11)available_hours INT(11)available_hours_from INT(11)available_hours_to INT(11)available_travel TINYINT(1)driver_license TINYINT(1)salary_euros INT(11)salary_euros_min INT(11)creation_date DATETIMEvisibility_profile_name INT(11)visibility_academic_school INT(11)visibility_course_start_date INT(11)visibility_course_end_date INT(11)visibility_course_average INT(11)visibility_is_complete INT(11)visibility_appliance_job_key_words INT(11)visibility_prof_experience_time_months INT(11)visibility_prof_experience_area_time_months INT(11)visibility_available_start_time_days INT(11)visibility_available_hours INT(11)visibility_available_hours_from INT(11)visibility_available_hours_to INT(11)visibility_available_travel INT(11)visibility_driver_license INT(11)visibility_salary_euros INT(11)

Tabela 20: Entidade CandidateProfile

marketplace_candidateappliedofferpk id INT(11)fk candidate_id INT(11)fk offer_id INT(11)

appliance_date DATETIME

Tabela 21: Entidade CandidateAppliedOffer

90

Page 105: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_companyofferpk id INT(11)fk company_id INT(11)

offer_name VARCHAR(50)working_place_address VARCHAR(200)

fk working_place_country_id INT(11)fk working_place_city_id INT(11)

working_place_max_distance_km INT(11)fk academic_degree_id INT(11)

fk, nl academic_school_id INT(11)fk, nl academic_course_id INT(11)

is_complete TINYINT(1)course_average INT(11)

fk job_area_id INT(11)fk job_id INT(11)

job_key_words VARCHAR(200)job_description VARCHAR(200)prof_experience_area_time_months INT(11)available_start_time_days INT(11)available_day_hours INT(11)available_hours_from INT(11)available_hours_to INT(11)available_travel TINYINT(1)driver_license TINYINT(1)salary_euros INT(11)salary_euros_max INT(11)creation_date DATETIMEvisibility_offer_name INT(11)visibility_working_place_address INT(11)visibility_working_place_max_distance_km INT(11)visibility_woring_place_city INT(11)visibility_is_complete INT(11)visibility_course_average INT(11)visibility_job_key_words INT(11)visibility_prof_experience_area_time_months INT(11)visibility_available_start_time_days INT(11)visibility_available_day_hours INT(11)visibility_available_hours_from INT(11)visibility_available_hours_to INT(11)visibility_prof_experience_time_months INT(11)visibility_available_travel INT(11)visibility_driver_license INT(11)visibility_salary_euros INT(11)

Tabela 22: Entidade CompanyOffer

marketplace_countrypk id INT(11)

country_name VARCHAR(200)

Tabela 23: Entidade Country

91

Page 106: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_candidateareamainfunctionpk id INT(11)fk profile_id INT(11)

function VARCHAR(80)description VARCHAR(200)company_name VARCHAR(80)experience_months INT(11)visibility INT(11)

Tabela 24: Entidade CandidateAreaMainFunction

marketplace_candidateprofessionalcoursepk id INT(11)fk profile_id INT(11)

professional_course VARCHAR(80)description VARCHAR(200)start_date DATEduration_hours INT(11)visibility INT(11)

Tabela 25: Entidade CandidateProfessionalCourse

marketplace_candidateoldjobpk id INT(11)fk candidate_id INT(11)fk job_area_id INT(11)fk job_id INT(11)

description VARCHAR(400)duration_months INT(11)company VARCHAR(50)visibility INT(11)

Tabela 26: Entidade CandidateOldJob

marketplace_companybookmarkedprofilepk id INT(11)fk company_id INT(11)fk profile_id INT(11)

bookmarked_date DATETIME

Tabela 27: Entidade CompanyBookmarkedProfile

marketplace_citypk id INT(11)fk country_id INT(11)

city_name VARCHAR(50)

Tabela 28: Entidade City

92

Page 107: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_candidatemodelofferpk id INT(11)fk candidate_id INT(11)fk working_place_city_id INT(11)fk working_place_country_id INT(11)

working_place_max_distance_km INT(11)fk academic_degree_id INT(11)

fk, nl academic_school_id INT(11)fk, nl academic_course_id INT(11)

is_complete TINYINT(1)course_average INT(11)

fk job_area_id INT(11)fk job_id INT(11)

job_key_words VARCHAR(200)prof_experience_area_time_months INT(11)available_start_time_days INT(11)available_day_hours INT(11)available_hours_from INT(11)available_hours_to INT(11)available_travel TINYINT(1)driver_license TINYINT(1)salary_euros INT(11)salary_euros_max INT(11)weight_working_place_city_id INT(11)weight_working_place_country_id INT(11)weight_working_place_max_distance_km INT(11)weight_academic_degree_id INT(11)weight_academic_school_id INT(11)weight_academic_course_id INT(11)weight_is_complete INT(11)weight_course_average INT(11)weight_job_area_id INT(11)weight_job_id INT(11)weight_job_key_words INT(11)weight_prof_experience_area_time_months INT(11)weight_available_start_time_days INT(11)weight_available_day_hours INT(11)weight_available_hours_from INT(11)weight_available_hours_to INT(11)weight_available_travel INT(11)weight_driver_license INT(11)weight_salary_euros INT(11)weight_salary_euros_max INT(11)veto_working_place_city_id TINYINT(1)veto_working_place_country_id TINYINT(1)veto_working_place_max_distance_km TINYINT(1)veto_academic_degree_id TINYINT(1)veto_academic_school_id TINYINT(1)veto_academic_course_id TINYINT(1)veto_is_complete TINYINT(1)veto_course_average TINYINT(1)veto_job_area_id TINYINT(1)veto_job_id TINYINT(1)veto_job_key_words TINYINT(1)veto_prof_experience_area_time_months TINYINT(1)veto_available_start_time_days TINYINT(1)

93

Page 108: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_candidatemodelofferveto_available_day_hours TINYINT(1)veto_available_hours_from TINYINT(1)veto_available_hours_to TINYINT(1)veto_available_travel TINYINT(1)veto_driver_license TINYINT(1)veto_salary_euros TINYINT(1)veto_salary_euros_max TINYINT(1)pref_working_place_city_id TINYINT(1)pref_working_place_country_id TINYINT(1)pref_working_place_max_distance_km TINYINT(1)pref_academic_degree_id TINYINT(1)pref_academic_school_id TINYINT(1)pref_academic_course_id TINYINT(1)pref_is_complete TINYINT(1)pref_course_average TINYINT(1)pref_job_area_id TINYINT(1)pref_job_id TINYINT(1)pref_job_key_words TINYINT(1)pref_prof_experience_area_time_months TINYINT(1)pref_available_start_time_days TINYINT(1)pref_available_day_hours TINYINT(1)pref_available_hours_from TINYINT(1)pref_available_hours_to TINYINT(1)pref_available_travel TINYINT(1)pref_driver_license TINYINT(1)pref_salary_euros TINYINT(1)pref_salary_euros_max TINYINT(1)

Tabela 29: Entidade CandidateModelOffer

marketplace_companyappliedprofilepk id INT(11)fk company_id INT(11)fk profile_id INT(11)

appliance_date DATETIME

Tabela 30: Entidade CompanyAppliedProfile

marketplace_universitypk id INT(11)fk country_id INT(11)

university_name VARCHAR(200)short_name VARCHAR(20)

Tabela 31: Entidade University

marketplace_jobsimilaritypk id INT(11)fk job_one_id INT(11)fk job_two_id INT(11)

similarity DECIMAL(3,2)

Tabela 32: Entidade JobSimilarity

94

Page 109: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_companymodelprofilepk id INT(11)fk company_id INT(11)fk appliance_city_id INT(11)fk appliance_country_id INT(11)fk academic_degree_id INT(11)

fk, nl academic_school_id INT(11)fk, nl academic_course_id INT(11)

is_complete TINYINT(1)course_start_date DATEcourse_end_date DATEcourse_average INT(11)prof_experience_time_months INT(11)prof_experience_area_time_months INT(11)

fk appliance_job_area_id INT(11)fk appliance_job_id INT(11)

appliance_job_key_words VARCHAR(200)available_start_time_days INT(11)available_hours INT(11)available_hours_from INT(11)available_hours_to INT(11)available_travel TINYINT(1)driver_license TINYINT(1)salary_euros INT(11)salary_euros_min INT(11)weight_appliance_city_id INT(11)weight_appliance_country_id INT(11)weight_academic_degree_id INT(11)weight_academic_school_id INT(11)weight_academic_course_id INT(11)weight_is_complete INT(11)weight_course_start_date INT(11)weight_course_end_date INT(11)weight_course_average INT(11)weight_prof_experience_time_months INT(11)weight_prof_experience_area_time_months INT(11)weight_appliance_job_area_id INT(11)weight_appliance_job_id INT(11)weight_appliance_job_key_words INT(11)weight_available_start_time_days INT(11)weight_available_hours INT(11)weight_available_hours_from INT(11)weight_available_hours_to INT(11)weight_available_travel INT(11)weight_driver_license INT(11)weight_salary_euros INT(11)weight_salary_euros_min INT(11)veto_appliance_city_id TINYINT(1)veto_appliance_country_id TINYINT(1)veto_academic_degree_id TINYINT(1)veto_academic_school_id TINYINT(1)veto_academic_course_id TINYINT(1)veto_is_complete TINYINT(1)veto_course_start_date TINYINT(1)veto_course_end_date TINYINT(1)veto_course_average TINYINT(1)

95

Page 110: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_companymodelprofileveto_prof_experience_time_months TINYINT(1)veto_prof_experience_area_time_months TINYINT(1)veto_appliance_job_area_id TINYINT(1)veto_appliance_job_id TINYINT(1)veto_appliance_job_key_words TINYINT(1)veto_available_start_time_days TINYINT(1)veto_available_hours TINYINT(1)veto_available_hours_from TINYINT(1)veto_available_hours_to TINYINT(1)veto_available_travel TINYINT(1)veto_driver_license TINYINT(1)veto_salary_euros TINYINT(1)veto_salary_euros_min TINYINT(1)pref_appliance_city_id TINYINT(1)pref_appliance_country_id TINYINT(1)pref_academic_degree_id TINYINT(1)pref_academic_school_id TINYINT(1)pref_academic_course_id TINYINT(1)pref_is_complete TINYINT(1)pref_course_start_date TINYINT(1)pref_course_end_date TINYINT(1)pref_course_average TINYINT(1)pref_prof_experience_time_months TINYINT(1)pref_prof_experience_area_time_months TINYINT(1)pref_appliance_job_area_id TINYINT(1)pref_appliance_job_id TINYINT(1)pref_appliance_job_key_words TINYINT(1)pref_available_start_time_days TINYINT(1)pref_available_hours TINYINT(1)pref_available_hours_from TINYINT(1)pref_available_hours_to TINYINT(1)pref_available_travel TINYINT(1)pref_driver_license TINYINT(1)pref_salary_euros TINYINT(1)pref_salary_euros_min TINYINT(1)

Tabela 33: Entidade CompanyModelProfile

marketplace_universitycoursepk id INT(11)fk university_id INT(11)

course_name VARCHAR(200)

Tabela 34: Entidade UniversityCourse

marketplace_academicdegreepk id INT(11)fk country_id INT(11)

degree VARCHAR(100)

Tabela 35: Entidade AcademicDegree

96

Page 111: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

marketplace_jobareapk id INT(11)

country_id INT(11)area_name VARCHAR(100)

Tabela 36: Entidade JobArea

marketplace_jobpk id INT(11)fk job_area_id INT(11)

job_name VARCHAR(100)

Tabela 37: Entidade Job

marketplace_universitysimilaritypk id INT(11)fk university_one_id INT(11)fk university_two_id INT(11)

similarity DECIMAL(3,2)

Tabela 38: Entidade UniversitySimilarity

marketplace_universitycoursesimilaritypk id INT(11)fk university_course_one_id INT(11)fk university_course_two_id INT(11)

similarity DECIMAL(3,2)

Tabela 39: Entidade UniversityCourseSimilarity

marketplace_academicdegreesimilaritypk id INT(11)fk academic_degree_one_id INT(11)fk academic_degree_two_id INT(11)

similarity DECIMAL(3,2)

Tabela 40: Entidade AcademicDegreeSimilarity

marketplace_jobareasimilaritypk id INT(11)fk job_area_one_id INT(11)fk job_area_two_id INT(11)

similarity DECIMAL(3,2)

Tabela 41: Entidade JobAreaSimilarity

Legenda:

pk - chave-primária nl - atributo com possibilidade de ser nulo

fk - chave-estrangeira

97

Page 112: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

Anexo D – Modelo Relacional de Dados (Relações)

User 1,1 – 0,N AuthenticationTicket

User 1,1 – 0,1 Candidate

User 1,1 – 0,1 Company

Country 1,1 – 0,N City

Country 1,1 – 0,N University

Country 1,1 – 0,N AcademicDegree

Country 1,1 – 0,N JobArea

Country 1,1 – 0,N Candidate

Country 1,1 – 0,N CandidateProfile

Country 1,1 – 0,N CandidateModelOffer

Country 1,1 – 0,N Company

Country 1,1 – 0,N CompanyOffer

Country 1,1 – 0,N CompanyModelProfile

City 1,1 – 0,N Candidate

City 1,1 – 0,N CandidateProfile

City 1,1 – 0,N Company

City 1,1 – 0,N CompanyOffer

City 1,1 – 0,N CandidateModelOffer

City 1,1 – 0,N CompanyModelProfile

JobArea 1,1 – 0,N Job

JobArea 1,1 – 0,N JobAreaSimilarity (2 chaves-estrangeiras)

JobArea 1,1 – 0,N CandidateProfile

JobArea 1,1 – 0,N CandidateOldJob

JobArea 1,1 – 0,N CandidateModelOffer

JobArea 1,1 – 0,N CompanyOffer

JobArea 1,1 – 0,N CompanyModelProfile

Job 1,1 – 0,N JobSimilarity (2 chaves-estrangeiras)

Job 1,1 – 0,N CandidateProfile

Job 1,1 – 0,N CandidateOldJob

Job 1,1 – 0,N CandidateModelOffer

Job 1,1 – 0,N CompanyOffer

Job 1,1 – 0,N CompanyModelProfile

University 1,1 – 0,N UniversitySimilarity (2 chaves-estrangeiras)

University 1,1 – 0,N UniversityCourse

University 0,1 – 0,N CandidateProfile

University 0,1 – 0,N CandidateModelOffer

98

Page 113: Intelligent e-Job Marketplace - fenix.tecnico.ulisboa.pt · Intelligent e-Job Marketplace Nuno Filipe Grilo Nobre Marques Dissertação para obtenção do Grau de Mestre em Engenharia

University 0,1 – 0,N CompanyOffer

University 0,1 – 0,N CompanyModelProfile

UniversityCourse 0,1 – 0,N UniversityCourseSimilarity (2 chaves-estrangeiras)

UniversityCourse 0,1 – 0,N CandidateProfile

UniversityCourse 0,1 – 0,N CandidateModelOffer

UniversityCourse 0,1 – 0,N CompanyOffer

UniversityCourse 0,1 – 0,N CompanyModelProfile

AcademicDegree 1,1 – 0,N AcademicDegree Similarity (2 chaves-estrangeiras)

AcademicDegree 1,1 – 0,N CandidateProfile

AcademicDegree 1,1 – 0,N CandidateModelOffer

AcademicDegree 1,1 – 0,N CompanyOffer

AcademicDegree 1,1 – 0,N CompanyModelProfile

Candidate 1,1 – 0,N CandidateProfile

Candidate 1,1 – 0,N CandidateOldJob

Candidate 1,1 – 0,N CandidateModelOffer

Candidate 1,1 – 0,N CandidateBookmarkedOffer

Candidate 1,1 – 0,N CandidateAppliedOffer

Company 1,1 – 0,N CompanyOffer

Company 1,1 – 0,N CompanyModelProfile

Company 1,1 – 0,N CompanyBookmarkedProfile

Company 1,1 – 0,N CompanyAppliedProfile

CandidateProfile 1,1 – 0,N CandidateAreaMainTechnology

CandidateProfile 1,1 – 0,N CandidateAreaMainFunction

CandidateProfile 1,1 – 0,N CandidateProfessionalCourse

CandidateProfile 1,1 – 0,N CompanyBookMarkedProfile

CandidateProfile 1,1 – 0,N CompanyAppliedProfile

CompanyOffer 1,1 – 0,N CandidateBookmarkedOffer

CompanyOffer 1,1 – 0,N CandidateAppliedOffer

Legenda:

1,1: Participação obrigatória, Cardinalidade 1

0,1: Participação facultativa, Cardinalidade 1

0,N: Participação facultativa, Cardinalidade N

99