• Nenhum resultado encontrado

BPSWeb Projeto de escalonamento de horários por turnos

N/A
N/A
Protected

Academic year: 2021

Share "BPSWeb Projeto de escalonamento de horários por turnos"

Copied!
56
0
0

Texto

(1)

BPSWeb

Projeto de escalonamento

de horários por turnos

Susana Filipa Neves Pedro João

Mestrado Integrado em Engenharia de Redes e Sistemas Informáticos

Departamento de Ciência de Computadores 2013

Orientador

Engº Armando Barbosa, Bullet Solutions - Sistemas de Informação, SA

Coorientador

Prof. Sandra Alves, Departamento de Ciência de Computadores, Faculdade de Ciências da Universidade do Porto

(2)

Todas as correções determinadas pelo júri, e só essas, foram efetuadas.

O Presidente do Júri,

(3)

Agradecimentos

Agradec¸o a todos os que contribu´ıram para a ideia e para o desenvolvimento deste projeto. A toda a equipa da Bullet Solutions agradec¸o a boa recec¸ ˜ao e o bom ambiente ao longo de todo o est ´agio. Em particular ao Eng. Armando Barbosa e ao Eng. Lu´ıs Costa agradec¸o a disponibilidade na orientac¸ ˜ao e no esclarecimento de d ´uvidas no desenvolvimento do projeto, bem como ao Rui Fernandes pelo aux´ılio na elaborac¸ ˜ao do design da interface. Um agradecimento tamb ´em `a professora Sandra Alves pela disponibilidade de orientac¸ ˜ao na escrita deste relat ´orio.

Por fim, agradec¸o `a minha fam´ılia e amigos mais pr ´oximos o apoio incondicional.

(4)

Resumo

O presente relat ´orio de est ´agio descreve o trabalho realizado durante sete meses numa empresa de desenvolvimento de soluc¸ ˜oes inform ´aticas de otimizac¸ ˜ao, a Bullet Solutions. O trabalho consistiu no desenvolvimento de um projeto web de escalonamento de hor ´arios por turnos denominado Bullet Personal Scheduler Web (BPSWeb). Esta aplicac¸ ˜ao, dis-tribu´ıda na forma de Software como um Servic¸o, ´e um novo produto da empresa para resoluc¸ ˜ao autom ´atica e otimizada de problemas de alocac¸ ˜ao de pessoal a um turno num dia e num local previamente definidos.

Para alcanc¸ar os objetivos foi analisado o mercado concorrente, desenhada a arquitetura da soluc¸ ˜ao, definida uma base de dados s ´olida capaz de suportar todo o projeto e imple-mentada a soluc¸ ˜ao.

O resultado foi uma aplicac¸ ˜ao web capaz de tratar todos os dados importantes e gerar uma soluc¸ ˜ao de alocac¸ ˜ao de recursos a necessidades de uma instituic¸ ˜ao.

(5)

Abstract

This report describes the work of a seven month internship at Bullet Solutions, a company that develops optimization software solutions. The internship consisted in the development of the Bullet Personal Scheduler Web (BPSWeb), a shift scheduling web application project. This application, distributed as Software as a Service, is a new company’s product that solves automatically and efficiently problems of staff allocation to a predetermined day and place.

To achieve these goals the rival market solutions were analyzed, followed by the design of the architecture and the design of the core databases that support all project, and finally the solution was implemented.

The final result was a web application capable of dealing with all the important data and capable of generating a resource allocation solution that meets the needs of a specific institution.

(6)

Conte ´

udo

Agradecimentos 3 Resumo 4 Abstract 5 Lista de Tabelas 8 Lista de Figuras 10 1 Introduc¸ ˜ao 11 1.1 Enquadramento da Empresa . . . 12 1.2 Objetivos . . . 12

1.3 Estrutura do relat ´orio . . . 13

2 Preliminares 15 2.1 Escalas de trabalho por turnos . . . 15

2.2 Estado de Arte: Software existente . . . 18

2.3 Conceitos Auxiliares Relevantes . . . 19

2.3.1 Software como um Servic¸o (SaaS) . . . 19

2.3.2 Arquitetura Orientada a Servic¸o . . . 20

2.3.3 Servic¸o Web . . . 21

3 Arquitetura da Soluc¸ ˜ao 22 3.1 Casos de Uso . . . 24 3.2 Bases de Dados . . . 25 4 Implementac¸ ˜ao 33 4.1 Tecnologia . . . 33 4.2 Desenvolvimento . . . 35 4.2.1 Base de Dados . . . 36

4.2.2 Formul ´arios Scheduler . . . 39 6

(7)

CONTE ´UDO 7

4.2.3 Formul ´arios FrontEnd . . . 41

4.2.4 Formul ´arios JQuery . . . 44

4.2.5 Preparac¸ ˜ao para multi linguagem . . . 45

5 Resultados 46 5.1 Formul ´arios da componente Scheduler . . . 46

5.2 Formul ´arios b ´asicos da componente FrontEnd . . . 47

5.3 Formul ´arios secund ´arios da componente FrontEnd . . . 48

5.4 Comparac¸ ˜ao com Softwares Existentes . . . 51

6 Conclus ˜ao 52 6.1 Trabalho Futuro . . . 53

7 Acr ´onimos 54

(8)

Lista de Tabelas

4.1 Func¸ ˜oes no Reposit ´orio para quando o utilizador pretende editar um local de trabalho. . . 42 4.2 Excerto do c ´odigo em Razor HTML para mostrar a edic¸ ˜ao de um local de

trabalho . . . 43

(9)

Lista de Figuras

2.1 Modelo de trabalho 6 on 6 off ; . . . 17

2.2 Modelo de trabalho Continental; . . . 17

3.1 Modelo de arquitetura segundo as Tecnologias de Informac¸ ˜ao . . . 22

3.2 Desenho da arquitetura segundo o Modelo das Tr ˆes Camadas . . . 23

3.3 Diagrama dos casos de uso. . . 24

3.4 Diagrama de Atividade relativo aos casos de uso. . . 25

3.5 Diagrama ER da Base de Dados BPSWeb . . . 26

3.6 Parte do Modelo ER da Base de Dados de um cliente (Configurac¸ ˜oes Iniciais). 27 3.7 Parte do Modelo ER da Base de Dados de um cliente (Configurac¸ ˜oes Se-cund ´arias) . . . 28

3.8 Parte do Modelo ER da Base de Dados de um cliente (tabelas geradas pelo algoritmo). . . 29

3.9 Relacionamento da tabela Periodo com as restantes tabelas. . . 29

3.10 Parte do Modelo ER da Base de Dados de um cliente. . . 30

3.11 Tabelas WeekDay e WeekDay Locale e respetivos registos . . . 31

4.1 Estrutura do Modelo MVC . . . 34

4.2 Exemplo de duas tabelas criadas no SQL Server . . . 37

4.3 Instruc¸ ˜ao SQL com uso da chave prim ´aria (lado esquerdo) e do ´ındice (lado direito). . . 38

4.4 Plano de execuc¸ ˜ao para a instruc¸ ˜ao com uso da chave prim ´aria (lado es-querdo) e do ´ındice (lado direito). . . 39

4.5 Comportamento da classe BusinessLogic no Scheduler . . . 40

4.6 Interface gr ´afica do formul ´ario das Disponibilidades . . . 44

5.1 Interface gr ´afica do projeto Scheduler. . . 46

5.2 Interface gr ´afica do formul ´ario de inserc¸ ˜ao de um novo per´ıodo. . . 47

5.3 Interface gr ´afica da listagem dos Locais de Trabalho . . . 47

5.4 Interface gr ´afica da matriz de custo turno/categoria profissional. . . 48

5.5 Interface gr ´afica dos detalhes das Necessidades. . . 48 9

(10)

LISTA DE FIGURAS 10

5.6 Interface gr ´afica de uma gerac¸ ˜ao em curso. . . 49 5.7 Interface gr ´afica da Agenda filtrada por um local de trabalho. . . 50 5.8 Interface gr ´afica da Resoluc¸ ˜ao da Soluc¸ ˜ao Incompleta. . . 50

(11)

Cap´ıtulo 1

Introduc¸ ˜ao

Um sistema de informac¸ ˜ao seja ele de gerac¸ ˜ao ou tratamento de dados ´e, nos dias de hoje, indispens ´avel. O mundo tecnol ´ogico est ´a diversificado em todas as ´areas com que lidamos direta ou indiretamente e a ´area do trabalho n ˜ao ´e excec¸ ˜ao. Com a evoluc¸ ˜ao do trabalho como exerc´ıcio de uma profiss ˜ao, a organizac¸ ˜ao de uma instituic¸ ˜ao e do hor ´ario dos seus trabalhadores ´e fundamental. Com isso surgem as escalas de hor ´arios que tanto verificamos em in ´umeras profiss ˜oes, tais como na ´area da sa ´ude, nos transportes, nos restaurantes, nas escolas ou na pol´ıcia.

Muitas vezes, devido `as enormes restric¸ ˜oes e necessidades que uma organizac¸ ˜ao possui, torna-se muito dif´ıcil elaborar uma escala de trabalho sem a ajuda de um sistema in-form ´atico. O n ´umero de colaboradores, as suas disponibilidades, necessidades de reforc¸os em determinada situac¸ ˜ao, novas regras ou pol´ıticas impostas que n ˜ao estavam previstas, s ˜ao pequenos exemplos que condicionam a soluc¸ ˜ao e consequentemente obrigam muitas vezes a uma soluc¸ ˜ao que n ˜ao era a desejada.

Neste contexto, surge a ideia do desenvolvimento de uma aplicac¸ ˜ao que resolva este problema, atrav ´es do recurso a sistemas de apoio `a decis ˜ao, ou seja, atrav ´es de um algoritmo que calcule os pesos das alternativas poss´ıveis e tome uma decis ˜ao quanto

`a melhor dessas alternativas a fim de alcanc¸ar o melhor resultado poss´ıvel.

Um sistema intuitivo, que possa fazer a gerac¸ ˜ao autom ´atica e otimizada do escalona-mento de hor ´arios por turnos, poder ´a poupar tempo e consequentemente trazer melhores condic¸ ˜oes de trabalho para todos os que s ˜ao inseridos nesta ´area. Com uma aplicac¸ ˜ao deste n´ıvel, uma instituic¸ ˜ao poder ´a fazer a gest ˜ao de todos os colaboradores e equipas, categorias profissionais e qualificac¸ ˜oes, definir as disponibilidades de cada um, consultar o banco de horas, definir as f ´erias e aus ˆencias a curto e longo prazo, criar regras e especificar as necessidades que a empresa precisa para o bom funcionamento. O pro-grama tamb ´em ser ´a capaz de gerar uma soluc¸ ˜ao para o conjunto de objetivos e restric¸ ˜oes

(12)

1.1. ENQUADRAMENTO DA EMPRESA 12

especificadas, obtendo desta forma um hor ´ario final, sem nunca esquecer a seguranc¸a e privacidade importantes em qualquer servic¸o desta ´area.

Este relat ´orio descreve o trabalho ao longo do est ´agio curricular para o desenvolvimento de uma soluc¸ ˜ao com estas caracter´ısticas.

1.1

Enquadramento da Empresa

A Bullet Solutions ´e uma empresa com sede no Porto que se dedica ao desenvolvimento de soluc¸ ˜oes inform ´aticas de otimizac¸ ˜ao para problemas combinat ´orios `a medida [1]. Nascida em 2006, o primeiro software desenvolvido baseia-se no escalonamento de hor ´arios de instituic¸ ˜oes universit ´arias, o Bullet TimeTabler Education (BTTE). Com base em informac¸ ˜oes facultadas pela instituic¸ ˜ao (como as salas, os professores e as disciplinas) e atrav ´es de um conjunto de restric¸ ˜oes necess ´arias ao bom funcionamento da mesma (como por exemplo, a disponibilidade de hor ´arios de cada professor ou a necessidade da aula de uma disciplina s ´o poder ser dada em determinada sala) existe um algoritmo que constr ´oi uma soluc¸ ˜ao para atribuir professores, turmas e salas a um poss´ıvel hor ´ario. Al ´em do BTTE, exemplos de outras soluc¸ ˜oes da Bullet Solutions s ˜ao o Bullet TimeTabler Medical (respons ´avel pela gerac¸ ˜ao e gest ˜ao de escalas m ´edicas), o Bullet Callendar (complementar ao BTTE e que permite gerir diariamente eventos pontuais de uma instituic¸ ˜ao) e o Bullet Scheduler (apoia os respons ´aveis de produc¸ ˜ao nas tarefas de sequenciamento, controlo e adaptac¸ ˜ao a mudanc¸as do ch ˜ao da f ´abrica).

1.2

Objetivos

Para conseguir alargar a oferta de soluc¸ ˜oes e possibilitar a gerac¸ ˜ao de hor ´arios de pro-fiss ˜oes que trabalham por turnos, surgiu a ideia de ser desenvolvido o Bullet Personal Scheduler Web (BPSWeb). Este projeto baseia-se no mesmo conceito dos anteriores, possibilitando um vasto conjunto de personalizac¸ ˜ao de informac¸ ˜oes. Assim, o objetivo ´e a criac¸ ˜ao de um projeto web de escalonamento autom ´atico de hor ´arios por turnos, preparado para m ´ultiplos clientes e para m ´ultiplas l´ınguas.

O trabalho desenvolvido neste est ´agio curricular consiste na implementac¸ ˜ao de tr ˆes partes do projeto: a Base de Dados, uma ferramenta interna de gest ˜ao de clientes e servidores e a interface gr ´afica de aux´ılio ao cliente. As funcionalidades que o BPSWeb no fim dever ´a possuir s ˜ao as seguintes:

(13)

1.3. ESTRUTURA DO RELAT ´ORIO 13

• Gest ˜ao dos colaboradores, suas qualificac¸ ˜oes e categorias profissionais; • Gest ˜ao dos turnos;

• Gest ˜ao de aus ˆencias; • Gest ˜ao de bolsas de horas; • Gest ˜ao de utilizadores;

• Definic¸ ˜ao de uma matriz de custo turno/categoria profissional; • Definic¸ ˜ao da disponibilidade de cada colaborador;

• Marcac¸ ˜ao de necessidades; • Validac¸ ˜ao de dados;

• Notificac¸ ˜ao para os utilizadores; • Listagem de relat ´orios e hor ´arios;

• Gest ˜ao das alocac¸ ˜oes de colaboradores a necessidades; • Resoluc¸ ˜ao da soluc¸ ˜ao incompleta.

De forma a atingir os objetivos enumerados, foram definidas as seguintes fases de desen-volvimento do projeto:

1. Estudo e an ´alise do mercado concorrente; 2. Definic¸ ˜ao das funcionalidades;

3. Desenho da arquitetura do sistema;

4. Desenho e implementac¸ ˜ao das base de dados; 5. Primeira vers ˜ao do FrontEnd ;

6. Ajustes e melhorias.

1.3

Estrutura do relat ´

orio

Este relat ´orio al ´em da presente introduc¸ ˜ao (cap´ıtulo 1), apresenta na sua estrutura mais cinco cap´ıtulos organizados da seguinte forma: no cap´ıtulo 2 s ˜ao explicados os conceitos do sistema de trabalho por turnos, s ˜ao apresentados os softwares concorrentes desta ´area no mercado atual e ainda o conceito de Software como um Servic¸o, uma vez que ´e um importante modelo de neg ´ocio que ser ´a usado para a comercializac¸ ˜ao do produto final.

(14)

1.3. ESTRUTURA DO RELAT ´ORIO 14

O capitulo 3 faz refer ˆencia `a arquitetura do projeto e dessa forma como vai funcionar toda a aplicac¸ ˜ao e como se relacionar ´a com a base de dados.

No cap´ıtulo 4 s ˜ao explicados todos os aspetos relativos `a implementac¸ ˜ao, desde as tecno-logias e ferramentas utilizadas `a implementac¸ ˜ao do sistema.

No cap´ıtulo 5 s ˜ao apresentados os resultados finais com as capturas dos principais ecr ˜as e uma pequena comparac¸ ˜ao do trabalho final com os softwares concorrentes. Por fim, no cap´ıtulo 6 tiramos conclus ˜oes e fazemos uma an ´alise do poss´ıvel trabalho futuro.

(15)

Cap´ıtulo 2

Preliminares

Neste cap´ıtulo vamos descrever o tema e o problema do projeto bem como as soluc¸ ˜oes dispon´ıveis no mercado para esses problemas. Tamb ´em ser ˜ao descritos conceitos relaci-onados relevantes para o desenvolvimento do BPSWeb.

2.1

Escalas de trabalho por turnos

O trabalho, como exerc´ıcio de uma atividade profissional, ´e um conceito hist ´orico, cuja definic¸ ˜ao tem sofrido alterac¸ ˜oes ao longo dos tempos. A forma como um conjunto de indiv´ıduos se organizam para gerar um produto difere de ´epoca para ´epoca, mas com a necessidade de garantir seguranc¸a durante um per´ıodo da noite ou de produzir durante 24 horas para satisfazer necessidades, surge o trabalho por turnos. Tamb ´em conhecido como Shift Work, este tipo de trabalho consiste numa pr ´atica de emprego em que o dia ´e dividido por turnos (shifts) para fazer uso de todas as horas do dia e para cada um desses turnos ´e definido um conjunto de trabalhadores. Algumas das profiss ˜oes que trabalham por turnos est ˜ao relacionadas com servic¸os ao p ´ublico, como ´e o caso de m ´edicos e enfermeiros, pol´ıcia, servic¸o de transportes ou mesmo restaurac¸ ˜ao [2].

Para que os trabalhadores tenham condic¸ ˜oes de trabalho, s ˜ao exigidos in ´umeros forma-lismos `as entidades, tais como: a durac¸ ˜ao de trabalho n ˜ao pode exceder o limite m ´aximo dos per´ıodos normais de trabalho; s ˜ao obrigat ´orios descansos semanais; s ´o depois do descanso semanal ´e que o trabalhador pode trocar de turno; entre outros. Estas exig ˆencias ainda tornam mais complicado o desenvolvimento e a gest ˜ao de um hor ´ario, uma vez que pode haver um conjunto de restric¸ ˜oes para cada trabalhador.

(16)

2.1. ESCALAS DE TRABALHO POR TURNOS 16

Com o objetivo de poupar tempo e evitar erros humanos, t ˆem vindo a ser desenvolvidos sistemas de apoio `a decis ˜ao para ajudar o utilizador a adotar decis ˜oes inteligentes. A maioria dos softwares existentes no mercado simplifica a gest ˜ao dos sistemas de escalas de trabalho, atrav ´es da automatizac¸ ˜ao de todo o processo, tornando o planeamento de hor ´arios mais simples e f ´acil, independentemente da complexidade dos turnos. Para que um sistema deste tipo cumpra os objetivos, deve ter func¸ ˜oes b ´asicas como: armazenar informac¸ ˜oes sobre todos os empregados, possibilitar a escolha dos turnos para cada empregado e respeitar as requisic¸ ˜oes feitas (por exemplo, n ˜ao permitir que um empregado trabalhe mais do que um n ´umero espec´ıfico de horas seguidas, ou definir o tempo m´ınimo que deve ter de almoc¸o). Assim, podemos dizer que um bom sistema de escalonamento por turnos deve possuir cinco carater´ısticas principais: durac¸ ˜ao e tipo de turno, modelo de trabalho on-off, horas extras e pol´ıticas de hor ´arios. Al ´em destes importantes aspetos, ´e valorizado um sistema que seja intuitivo, de f ´acil utilizac¸ ˜ao e de pouco consumo de recursos [3] .

De forma a melhor compreender a implementac¸ ˜ao que se pretende, foram estudados os principais tipos de turno que existem, que podem ser distribu´ıdos da seguinte forma [4]:

• Fixo ou permanente (fixed/permanent): cada pessoa trabalha todos os dias no mesmo hor ´ario, por exemplo, s ´o durante o dia ou s ´o no turno da noite;

• Rotativo (rotating): cada pessoa trabalha em v ´arios turnos. A rotac¸ ˜ao pode ser Lenta (maior que semanalmente e geralmente trabalhando em torno de 21 dias no mesmo turno) ou Semanal (entre 5 a 7 dias para cada turno).

• Oscilante (oscillating): o trabalhador alterna entre turnos da noite e do dia ou ent ˜ao entre tarde e noite em base semanal;

• Turno Interrompido (split shift): uma pausa de algumas horas separa as horas de trabalho feitas no mesmo dia, por exemplo, os trabalhadores na gastronomia ou no setor de transportes, onde h ´a picos maiores de movimento em certos hor ´arios; • Turnos Substitutos (relief shifts): a pessoa pode entrar em qualquer um dos padr ˜oes

acima, mas o hor ´ario depende do hor ´ario do trabalhador que faltou;

• Tipos Alternativos: semana de trabalho de 4 dias ou per´ıodos de trabalho de 12 horas. Podem ser usados em operac¸ ˜ao de 1 turno, 2 turnos ou 3 turnos, cont´ınua ou descont´ınua, isto ´e, com respeito aos fins-de-semana.

Fatores como o tipo de turno, a cultura de cada pa´ıs, o n ´umero de horas de descanso necess ´arias ao trabalho bem como as necessidades de cada profiss ˜ao, influenciam o hor ´ario que se pode criar. Existem diversos padr ˜oes de turnos. S ˜ao descritos agora os

(17)

2.1. ESCALAS DE TRABALHO POR TURNOS 17

mais comuns.

Para turnos de 12h:

• Modelo de 4 dias: 12 horas de trabalho seguidas de 24 horas de descanso, 12 horas de trabalho e outras 48 horas de descanso.

• Modelo de 6 dias: 12 horas de trabalho seguidas de 12 horas de descanso nos primeiros quatro dias. O quinto e o sexto dia s ˜ao folgas (48 horas sem trabalhar). • Modelo de 6 on, 6 off : nos primeiros tr ˆes dias o trabalho ´e na primeira metade do dia;

nos tr ˆes dias seguintes, o trabalho ´e na segunda parte do dia; nos seis dias seguintes descansa-se, como mostra a Figura 2.1. A, B, C e D representam empregados.

Figura 2.1: Modelo de trabalho 6 on 6 off ;

Para turnos de 8h:

• Modelo de 5 dias: ao fim de 4 dias seguidos a trabalhar, o quinto corresponde a uma folga. Para que os empregados n ˜ao folguem todos no mesmo dia, para cada empregado a primeira folga comec¸a num dia de semana diferente.

• Modelo Continental: trabalha os tr ˆes primeiros dias no turno da manh ˜a (6h-14h), dois dias no turno da tarde (14h-22h) e dois dias `a noite (22h-6h): no fim dos 7 dias, tem de ter uma folga, caso contr ´ario, faz mais do que 8h seguidas.

• Dois dias, duas noites, quatro folgas. Como o pr ´oprio nome indica, ap ´os quatro dias a trabalhar na primeira metade ou na segunda metade do dia, descansa quatro dias.

Figura 2.2: Modelo de trabalho Continental;

Para turnos de 24h: o modelo pode ser T-F-T-F-F-T-F ou T-F-F-F-T-F-F-F, onde T corres-ponde ao per´ıodo de Trabalho e F ao per´ıodo de Folga.

(18)

2.2. ESTADO DE ARTE: SOFTWARE EXISTENTE 18

2.2

Estado de Arte: Software existente

Com o objetivo de conhecer o mercado de trabalho que prop ˜oe soluc¸ ˜oes para o problema da gest ˜ao de hor ´arios por turnos, foram analisados alguns softwares existentes. Aque-les que possuem uma vers ˜ao temporariamente gratuita foram instalados e analisados. Conclui-se rapidamente que todas estas aplicac¸ ˜oes fazem apenas a gest ˜ao manual, n ˜ao havendo qualquer algoritmo de gerac¸ ˜ao ou otimizac¸ ˜ao dos hor ´arios.

• Snap Schedule [5]: faz o planeamento e gest ˜ao de hor ´arios de trabalho para turnos de 8, 10 ou 12 horas, fixos ou em escalas. Tamb ´em suporta hor ´arios rotativos. Permite importac¸ ˜ao de ficheiros Comma Separated Values (.csv). T ˆem imensas fun-cionalidades, tais como a criac¸ ˜ao de diversos utilizadores, separac¸ ˜ao das permiss ˜oes de administrador, marcac¸ ˜ao de f ´erias e gest ˜ao de sal ´arios consoante o turno. No entanto, devido ao excesso de funcionalidade e falta de organizac¸ ˜ao das mesmas, torna-se bastante confuso o seu funcionamento.

• Shift Planning [6]: uma aplicac¸ ˜ao online com capacidade de at ´e 99 empregados que possui tamb ´em aplicac¸ ˜ao m ´ovel. De todos os softwares testados foi o que apresentou mais vantagens. Os seus pontos fortes relacionam-se com o facto de ser extremamente intuitivo e de permitir avisar o utilizador quando o hor ´ario escolhido n ˜ao corresponde `as suas prefer ˆencias. O maior ponto fraco ´e n ˜ao ter qualquer gerador autom ´atico de hor ´ario.

• Time Forge [7]: tamb ´em ´e uma aplicac¸ ˜ao que corre no browser. Tem mais de 40 opc¸ ˜oes de relat ´orio. Permite mensagem de texto e correio electr ´onico, bem como publicac¸ ˜ao online. Peca pela falta de uma boa estrutura gr ´afica e pela falta de gerador autom ´atico dos hor ´arios para as restric¸ ˜oes de cada utilizador.

• Nimble Schedule [8]: muito f ´acil de usar e dispon´ıvel em dispositivos m ´oveis, esta tamb ´em ´e uma ferramenta online. Pode ser sincronizada com o Facebook, Microsoft Outlook e Google Calendar.

Ainda foram testados outros produtos cujas vantagens sobre estes se mostraram irrele-vantes. Confusos e sem escalonamento autom ´atico, alguns exemplos s ˜ao: Schedule it [9], Whentowork [10] e Timecenter [11]. Um gestor de hor ´arios portugu ˆes que foi encontrado, tem como nome SISCOG: “Dedica-se ao desenvolvimento de soluc¸ ˜oes inform ´aticas para planear e gerir escalas de pessoal em empresas e organizac¸ ˜oes que oferecem servic¸os ao p ´ublico em hor ´ario alargado” [12]. N ˜ao foi testado por falta de vers ˜ao gratuita, mas tudo indica que ´e um bom software, com um escalonamento de turnos otimizado, que faz a gest ˜ao n ˜ao s ´o de hor ´arios, mas de toda a organizac¸ ˜ao de v ´arias empresas do mercado de transportes.

(19)

2.3. CONCEITOS AUXILIARES RELEVANTES 19

2.3

Conceitos Auxiliares Relevantes

De seguida vamos apresentar algumas noc¸ ˜oes de modelo de neg ´ocio relevantes para este projeto.

2.3.1 Software como um Servic¸o (SaaS)

SaaS ´e uma forma de distribuir e comercializar software [13]. O fornecedor ´e respons ´avel pela estrutura necess ´aria e disponibilizac¸ ˜ao do software e o cliente utiliza-o atrav ´es do acesso `a Internet. N ˜ao paga pela aquisic¸ ˜ao do produto, mas sim pela utilizac¸ ˜ao do servic¸o ou de algumas das suas funcionalidades. ´E um modelo muito comum de neg ´ocio que pode incluir contabilidade, gest ˜ao de sistemas de informac¸ ˜ao, gest ˜ao de recursos humanos, entre outros. ´E ainda um conceito que fornece uma API para acesso pela web, atrav ´es de Servic¸os de Web, interfaces REST (Representational State Transfer ), SOAP (Simple Object Access Protocol) e outros protocolos. A maior vantagem ´e diminuir os custos da empresa atrav ´es de manutenc¸ ˜ao por terceiros (outsourcing) de hardware e software e suporte de fornecedor SaaS. Outros proveitos desta soluc¸ ˜ao s ˜ao:

• Suporte t ´ecnico mais r ´apido, uma vez que n ˜ao h ´a necessidade de deslocac¸ ˜ao de uma equipa;

• Multi-tenant, ou seja, uso da estrutura por diversos clientes e empresas de forma simult ˆanea;

• O procedimento ´e muito simples: o cliente apenas precisa de um identificador/palavra-passe para a aplicac¸ ˜ao. Isto reduz o tempo de execuc¸ ˜ao do projeto bem como as despesas;

• Acesso universal, a partir de qualquer lugar com Internet. Em contrapartida, os inconvenientes s ˜ao:

• Fraca confianc¸a nos Fornecedores de Servic¸os na Nuvem e d ´uvidas sobre a seguranc¸a de dados e confidencialidade de informac¸ ˜oes;

• Uma vez que as aplicac¸ ˜oes est ˜ao na nuvem, longe das aplicac¸ ˜oes dos utilizadores, pode haver lat ˆencia no ambiente de desenvolvimento;

Uma soluc¸ ˜ao SaaS ´e indicada principalmente para pequenas e m ´edias empresas, uma vez que ´e uma boa soluc¸ ˜ao tecnol ´ogica sem necessidade de investimento em hardware e infraestrutura. Quando desenvolvido de forma eficiente, possibilita ganhos de receita mais vi ´aveis do que a soluc¸ ˜ao comum a longo prazo. No in´ıcio do seu desenvolvimento ´e importante pensar na infraestrutura, onde e como vai ser hospedado o software, como

(20)

2.3. CONCEITOS AUXILIARES RELEVANTES 20

fornecer o suporte aos utilizadores, qual a taxa que v ˜ao pagar e como ter a certeza que vai funcionar em todos os browsers. Tamb ´em ´e necess ´ario ter alguns cuidados, tais como: o software deve ser flex´ıvel de forma a permitir a sua configurac¸ ˜ao; no desenvolvimento, o processo de selec¸ ˜ao e descoberta dos servic¸os deve ser intuitivo; deve permitir a alterac¸ ˜ao de um servic¸o enquanto ´e executado.

Deve ter-se em atenc¸ ˜ao que podem haver v ´arios clientes para o mesmo projeto, mas cada cliente deve sentir-se t ˜ao confort ´avel como se fosse o ´unico cliente desse mesmo projeto. Assim, a configurac¸ ˜ao e personalizac¸ ˜ao s ˜ao quest ˜oes cruciais no desenvolvimento de um SaaS [14]. Estes s ˜ao dois conceitos diferentes. Enquanto “configurac¸ ˜ao” utiliza par ˆametros pr ´e-definidos para alterar as funcionalidades do Software, “personalizac¸ ˜ao” requer alterac¸ ˜oes no c ´odigo fonte.

Exemplos de boas aplicac¸ ˜oes desenvolvidas com o conceito de SaaS s ˜ao as aplicac¸ ˜oes da Google (correio eletr ´onico, calend ´ario, documentos) e a plataforma Amazon Web Service.

2.3.2 Arquitetura Orientada a Servic¸o

Para entender melhor SaaS ser ´a necess ´ario compreender outros conceitos associados, tais como Arquitetura Orientada a Servic¸o (SOA) e Servic¸o Web [15]. O conceito de SOA ´e um modelo de arquitetura em que a soluc¸ ˜ao l ´ogica ´e apresentada como servic¸o. E´ desenvolvido para ser altamente intuitivo, ´agil e produtivo. Fornece um suporte para tirar partido das vantagens dos princ´ıpios de orientac¸ ˜ao a servic¸os. De uma forma simplifi-cada podemos definir como uma arquitetura projetada para satisfazer as necessidades de neg ´ocios de uma organizac¸ ˜ao.

SOA n ˜ao ´e uma tecnologia, mas sim uma abordagem de arquitetura para criar sistemas constru´ıdos a partir de servic¸os aut ´onomos. ´E uma soluc¸ ˜ao de design independente de qualquer produto, tecnologia ou industria. Diversas tecnologias, produtos e aplicac¸ ˜oes usam a implementac¸ ˜ao SOA, pois torna os servic¸os mais flex´ıveis, a manutenc¸ ˜ao mais f ´acil e o desenvolvimento mais otimizado. A arquitetura orientada a servic¸os tamb ´em se relaciona com um conjunto de pol´ıticas e boas pr ´aticas para criar um processo para facilitar a tarefa de encontrar, definir e gerir os servic¸os disponibilizados.

Ent ˜ao qual ´e a diferenc¸a entre SaaS e SOA? Enquanto SaaS ´e um modelo de neg ´ocio, SOA ´e uma estrat ´egia de arquitetura. Com um SaaS, em vez do cliente instalar a aplicac¸ ˜ao na sua m ´aquina, esta ´e hospedada num servidor e o cliente acede a essa aplicac¸ ˜ao atrav ´es da Internet pelo pagamento de uma taxa ao fornecedor. SOA ´e algo semelhante mas em pe-quena escala. N ˜ao fornece um modelo de neg ´ocio, mas sim pequenos processos isolados como servic¸os. ´E um estilo de arquitetura para construc¸ ˜ao de software. A ideia ´e construir

(21)

2.3. CONCEITOS AUXILIARES RELEVANTES 21

uma aplicac¸ ˜ao, juntando um conjunto de servic¸os em rede sem estado e reutiliz ´aveis (como por exemplo, atrav ´es de um Servic¸o Web).

Assim, podemos dizer que SOA fornece um servic¸o a outras aplicac¸ ˜oes, enquanto SaaS fornece um servic¸o a utilizadores. Podemos desta forma, juntar os dois conceitos para o desenvolvimento do projeto que queremos. Com SaaS fornecemos servic¸os a mais clientes. Construindo o projeto sob uma arquitetura SOA torna a aplicac¸ ˜ao mais f ´acil de escalar.

2.3.3 Servic¸o Web

Outro conceito importante a compreender ´e o de Servic¸os Web, que consiste numa soluc¸ ˜ao utilizada para integrar servic¸os e fazer comunicac¸ ˜ao entre diferentes aplicac¸ ˜oes atrav ´es da Internet [15]. N ˜ao ´e o mesmo que SOA, ´e por sua vez uma forma de implementar SOA. Isto ´e, um sistema que utilize SOA pode disponibilizar os seus servic¸os atrav ´es de Servic¸os Web.

Estes componentes possibilitam que as aplicac¸ ˜oes enviem e recebam dados em formato XML, ou seja, qualquer que seja a linguagem que a aplicac¸ ˜ao tenha ´e traduzida para uma linguagem universal (XML). Desta forma, ´e poss´ıvel uma aplicac¸ ˜ao invocar outra para executar tarefas mesmo que as duas aplicac¸ ˜oes estejam em diferentes sistemas e linguagens diferentes.

Servic¸os Web s ˜ao utilizados muitas vezes para integrac¸ ˜ao de aplicac¸ ˜oes de uma empresa, como por exemplo, correio eletr ´onico com os clientes e fornecedores, tendo ainda a pos-sibilidade de otimizar e controlar os processos e tarefas de uma organizac¸ ˜ao. Podemos assim dizer que Servic¸os Web permitem a organizac¸ ˜ao de diferentes aplicac¸ ˜oes, fornece-dores e plataformas.

(22)

Cap´ıtulo 3

Arquitetura da Soluc¸ ˜ao

Neste cap´ıtulo ´e descrita a arquitetura desenhada para o projeto. A Figura 3.1 ´e relativa `as Tecnologias de Informac¸ ˜ao e diz respeito `a gest ˜ao de processos executados sempre que ´e feito um pedido pelo cliente. Como podemos observar, do lado do cliente existe o Navegador Web e do lado do servidor vamos ter um Servidor de Aplicac¸ ˜oes (Application Server ), um Servidor de Base de Dados e v ´arios Workers. O Servidor de Aplicac¸ ˜oes ser ´a respons ´avel por receber os pedidos feitos pelo cliente e reencaminhar esses pedidos para o Servidor da Base de Dados. Este, por sua vez vai fazer toda a gest ˜ao dos processos, como verificac¸ ˜ao da disponibilidade dos Workers para executar o processo. Por fim, os Workers s ˜ao servidores virtuais que executam todos os c ´alculos que o cliente pretende efetuar. Cliente Servidor de Aplicação Servidor de Base de Dados Workers Servidor Browser

Figura 3.1: Modelo de arquitetura segundo as Tecnologias de Informac¸ ˜ao

Para fazer a gest ˜ao dos pedidos feitos pelos clientes, existe uma fila onde s ˜ao guardados esses pedidos, uma lista de prioridades e um conjunto de estados com informac¸ ˜ao sobre a fase de execuc¸ ˜ao em que o pedido se encontra.

Para melhor perceber o funcionamento desta arquitetura, vamos seguir o exemplo de quando um cliente deseja saber o resultado de uma operac¸ ˜ao alg ´ebrica. O cliente comec¸a

(23)

23

por se autenticar. O Servidor de Aplicac¸ ˜oes recebe o pedido de autenticac¸ ˜ao do cliente e reencaminha esse pedido para o servidor de base de dados. Este servidor ´e respons ´avel pela validac¸ ˜ao das credenciais do cliente, por isso faz uma consulta `a base de dados e confirma ou rejeita as mesmas. Depois de autorizado, o cliente procede e faz o pedido para saber o resultado da operac¸ ˜ao. O Servidor de Aplicac¸ ˜oes recebe o pedido e faz novamente a ligac¸ ˜ao ao Servidor de Base de Dados. Neste segundo servidor, o processo ´e posto em fila de espera, ´e-lhe atribu´ıda a prioridade que o cliente tem e inicializado o estado como ”na fila”. Assim que se verificar que um Worker est ´a dispon´ıvel ´e atribu´ıdo o respetivo Worker ao processo e altera-se o estado do processo para “a calcular”. Depois de terminado o c ´alculo pretendido o estado passa para o “calculado” e posteriormente ´e enviada a informac¸ ˜ao para o primeiro servidor e depois para o Navegador do Cliente.

A Figura 3.2 representa a arquitetura da soluc¸ ˜ao segundo o Modelo das Tr ˆes Camadas. Como podemos observar e como o pr ´oprio nome indica, temos tr ˆes elementos. A interface do utilizador, tamb ´em conhecida como UI, ´e onde o cliente faz as requisic¸ ˜oes das ac¸ ˜oes que pretende ( ´e o espac¸o de interac¸ ˜ao entre a pessoa e as funcionalidades do programa). A camada de neg ´ocio ou l ´ogica empresarial ´e a camada onde se definem as func¸ ˜oes e regras de neg ´ocio. A camada de dados ´e a ponte entre a camada de neg ´ocio e a base de dados e por isso contem a definic¸ ˜ao das chamadas `a BD.

Com esta estrutura de camadas independentes umas das outras, tornam-se mais simples poss´ıveis alterac¸ ˜oes ou atualizac¸ ˜oes futuras que tenham de ser realizadas. No caso de alterac¸ ˜oes `a BD, s ˜ao apenas necess ´arias alterac¸ ˜oes na camada de dados, mantendo-se as restantes camadas indiferentes a esta alterac¸ ˜ao. Por exemplo, se uma instruc¸ ˜ao SQL, por algum motivo tiver de ser alterada, apenas ser ´a necess ´ario proceder a essa alterac¸ ˜ao na camada de dados, poupando tempo e trabalho aos programadores. Tamb ´em ser ´a mais f ´acil o diagn ´ostico de erros e a realizac¸ ˜ao de testes.

BD Interface de Utilizador Camada de Negócio Camada de Dados

Figura 3.2: Desenho da arquitetura segundo o Modelo das Tr ˆes Camadas

A raz ˜ao porque as setas do diagrama s ˜ao representadas com cores distintas nas relac¸ ˜oes entre a Interface do Utilizador e os restantes elementos relaciona-se com os cuidados a ter na implementac¸ ˜ao. Isto ´e, quando ´e implementada uma func¸ ˜ao para que o cliente possa

(24)

3.1. CASOS DE USO 24

executar uma ac¸ ˜ao, essa func¸ ˜ao deve levar o processo a consultar a camada de neg ´ocio, depois a camada de dados e por fim o acesso `a BD. Se se ignorar uma das camadas ´e quebrada a l ´ogica da arquitetura e n ˜ao ´e cumprida a responsabilidade de cada camada.

Como este ´e um projeto bastante complexo, na medida que tem como objetivo abranger um grande n ´umero de diferentes ind ´ustrias, ´e fundamental que o in´ıcio do seu desenvolvimento seja seguro e flex´ıvel. Com grande probabilidade ter ˜ao se ser feitas diversas alterac¸ ˜oes consoante as exig ˆencias de cada cliente. Por esta raz ˜ao, existem diversas metodologias que foram adotadas que fornecem a flexibilidade e seguranc¸a pretendida.

3.1

Casos de Uso

Geração do Horário Manipulação de dados Inserção de novos registos Alteração das Necessidades {<<include>>} {<<include>>} Utilizador Bullet Solutions

Figura 3.3: Diagrama dos casos de uso.

A figura 3.3 representa o diagrama dos casos de uso do projeto, atrav ´es do qual podemos identificar os atores - utilizador cliente e um servidor da empresa - e os requisitos funci-onais do sistema - manipulac¸ ˜ao de dados e gerac¸ ˜ao de hor ´arios. Sobre estes requisitos, podemos analisar mais especificamente as atividades na figura 3.4.

Depois do utilizador estar autenticado vai definir o per´ıodo para o qual pretende obter um hor ´ario, que pode ser um m ˆes, um semestre, um ano ou qualquer outro intervalo de tempo desejado. Seguidamente, para esse per´ıodo, vai inserir (ou editar ou ainda consultar ou remover) registos da configurac¸ ˜ao da sua empresa: locais de trabalho, qualificac¸ ˜oes,

(25)

3.2. BASES DE DADOS 25 Autenticação Define Periodo Define Necessidades Define Disponibilidades Insere Dados Cálculo da Geração

Consulta Horários Alocação de Resultados Utilizador Bullet Solutions

Figura 3.4: Diagrama de Atividade relativo aos casos de uso.

categorias profissionais, colaboradores, turnos e regras. O estado seguinte ´e onde s ˜ao definidas necessidades di ´arias de acordo com os dados inseridos anteriormente. Isto significa que vamos poder definir para um local, um dia e num turno diversas posic¸ ˜oes. Estas posic¸ ˜oes por sua vez cont ˆem requisic¸ ˜oes de qualificac¸ ˜oes que poder ˜ao ser obri-gat ´orias ou preferenciais ou ent ˜ao a requisic¸ ˜ao de um colaborador espec´ıfico. Antes de lanc¸ar a gerac¸ ˜ao para obter uma soluc¸ ˜ao, ainda ´e definida a disponibilidade semanal para cada colaborador. Depois de lanc¸ado o pedido de gerac¸ ˜ao, ´e corrido o algoritmo e ap ´os encontrada a soluc¸ ˜ao ´e enviada uma notificac¸ ˜ao ao utilizador para este poder consultar o hor ´ario.

3.2

Bases de Dados

A Base de Dados ´e uma componente de extrema import ˆancia neste projeto, uma vez que ´e nela que toda a informac¸ ˜ao ´e inserida e alterada e ´e a ela que se acede para a recolha de toda a informac¸ ˜ao que o algoritmo precisa para elaborar uma soluc¸ ˜ao. Antes da sua descric¸ ˜ao, ´e importante referir que o seu desenvolvimento teve sempre em vista uma estrutura de f ´acil adaptac¸ ˜ao e alterac¸ ˜ao de qualquer componente desejada no futuro. Al ´em disso, com vista a evitar faltas de compatibilidade com outros produtos de poss´ıveis clientes, o projeto estar ´a preparado para facilmente se adaptar a essas diferenc¸as. Por

(26)

3.2. BASES DE DADOS 26

exemplo, apesar da estrutura principal ser desenvolvida em SQL Server, facilmente se adaptar ´a a MySQL ou Oracle devido `a arquitetura das tr ˆes camadas. Uma vez que a camada de dados ´e separada das restantes camadas do projeto, se surgir um cliente com um gestor de base de dados que n ˜ao seja SQL Server, apenas teremos de implementar a base de dados e as instruc¸ ˜oes para o novo sistema. O acesso `a BD, bem como toda as configurac¸ ˜oes de alterac¸ ˜ao de sistema, mant ˆem-se. Por ´ultimo, o projeto est ´a tamb ´em preparado para multi linguagem.

O desenvolvimento da estrutura da Base de Dados (BD) iniciou-se com a criac¸ ˜ao da BPSWeb que faz a gest ˜ao dos pedidos e clientes do projeto. Possui cinco principais tabe-las: Clientes (Clients), Tarefas (Jobs), Servidores de Base de Dados (DatabaseServers), Servidores de C ´alculo (Workers) e Utilizadores (Users). Os registos s ˜ao respetivamente relativos aos dados do cliente, `as diferentes tarefas (pedidos que o cliente faz), `a gest ˜ao dos servidores de base de dados, `a disponibilidade e estado dos Workers e `as credenciais dos utilizadores. CLIENT JOB DATABASESERVER WORKER ID Description IsActive BulletID Prioirity ID Prioirity Date Status ID IsActive Description ConnectionString Type ID Description Type Prioirity IsActive IP MaximumCapacity MinimumCapacity AvailabilityCapacity HAS ASSIGN_TO HAS USER MANAGER ID DisplayName IsActive Password Language Login

Figura 3.5: Diagrama ER da Base de Dados BPSWeb

A figura 3.5 mostra o Diagrama Entidade-Relacionamento (ER) para a Base de Dados BPSWeb. O diagrama complementa a explicac¸ ˜ao da import ˆancia desta base de dados. A raz ˜ao porque a tabela UserManager n ˜ao tem ligac¸ ˜ao `as restantes ´e porque esta tabela guarda apenas os registos relativos `as autenticac¸ ˜oes da parte da empresa. Todas as outras tabelas se relacionam com os clientes e os pedidos feitos pelos mesmos.

Podemos assim verificar que esta base de dados complementa as arquiteturas anteri-ormente explicadas, responsabilizando-se pelas ac¸ ˜oes efetuadas pelos elementos das

(27)

3.2. BASES DE DADOS 27

mesmas para que o projeto n ˜ao falhe. Por outras palavras, ´e nesta base de dados que s ˜ao guardadas as prefer ˆencias de cada cliente, tais como qual o servidor de base de dados que utiliza ou qual o identificador do cliente para a Bullet Solutions; os detalhes de cada tarefa que foi solicitada, bem como a que cliente pertence, qual a sua urg ˆencia em ser conclu´ıda ou qual o Worker que a vai atender; quais os servidores de base de dados dispon´ıveis e qual o seu tipo; dados de cada servidor Worker : qual o seu tipo, a sua capacidade m ´axima e a sua capacidade ocupada. Desta forma podemos controlar melhor a situac¸ ˜ao de cada servidor, bem como o estado dos pedidos de cada cliente, podendo mais facilmente, em caso de um erro, identifica-lo e resolver mais rapidamente o problema.

Como podemos perceber, esta base de dados s ´o por si n ˜ao faz o projeto funcionar; s ´o faz sentido quando complementada com uma segunda base de dados de cada cliente. Esta segunda base de dados, a que vamos chamar BDClient, cont ´em todos os registos associados a um ´unico cliente e que v ˜ao ser fundamentais para o c ´alculo do escalona-mento dos hor ´arios. Sempre que a Bullet Solutions receber um cliente novo, o gestor de base de dados cria uma nova BDClient. Esta BD existe por cliente por duas raz ˜oes fundamentais: a primeira para n ˜ao ficar sobrecarregada com a quantidade de registos que ter ´a; a segunda para garantir seguranc¸a e confidencialidade dos dados (uma vez que ser ´a mais f ´acil garantir desta forma que um cliente n ˜ao v ˆe ou manipula dados que n ˜ao lhes pertence).

Vamos agora explicar a sua constituic¸ ˜ao. Devido `a complexidade do projeto e para melhor perceber a sua constituic¸ ˜ao, o modelo ER foi dividido em v ´arios submodelos.

GROUP EMPLOYEE Has Works_In Has WORKPLACE CATEGORY SKILL SHIFT Has Done_By RULE Has Has ID IsActive Description ID IsActive Description ID IsActive Description ID IsActive Description IsActive ID Description Value Goal Value Restriction Scope Type Weight Mechanographical Name ID IsActive Name TotalHours StartDate EndDate Clearance Email Phone IsActive ID

(28)

3.2. BASES DE DADOS 28

O primeiro, na figura 3.6 a que vamos chamar Modelo das Configurac¸ ˜oes Inicias, ´e re-lativo `as tabelas mais simples que correspondem `as configurac¸ ˜oes iniciais inseridas pelo utilizador. S ˜ao elas: Regras (Rule), Locais de Trabalho (WorkPlace), Qualificac¸ ˜oes (Skill), Turnos (Shift), Categorias Profissionais (Category ), Colaboradores (Employee) e Grupos de Colaboradores (Group).

Depois existem tabelas mais espec´ıficas e complexas (ver figura 3.7): Aus ˆencias dos Co-laboradores (Absence), Matriz de Custo Turno/Categoria Profissional (Cost Matrix ), Banco de Horas (Time Bank ), Disponibilidade dos Colaboradores (Availability ) e Necessidades (Need ).

As duas ´ultimas s ˜ao as que v ˜ao ter mais influ ˆencia na gerac¸ ˜ao da soluc¸ ˜ao. As disponi-bilidades porque ditam em que horas e em que dias da semana o colaborador pode ou n ˜ao trabalhar. As necessidades porque definem restric¸ ˜oes e objetivos: para um local de trabalho, num determinado dia e turno, escolhemos o recurso a um colaborador espec´ıfico ou a determinadas qualificac¸ ˜oes pretendidas. De notar que as tabelas que neste diagrama n ˜ao t ˆem atributos s ˜ao as que j ´a foram definidas no diagrama anterior.

AVAILABILITY NEED ABSENCE Type Date ID EMPLOYEE Has Slot Preference ID WeekDay Has WORKPLACE SHIFT ID Can_Have Has Has WeekDay SKILL Can_Have Type COST_MATRIX CATEGORY Do_A Cost Has TIME_BANK TotalMinutes

Figura 3.7: Parte do Modelo ER da Base de Dados de um cliente (Configurac¸ ˜oes Secund ´arias)

Um outro submodelo s ˜ao as tabelas cujos registos n ˜ao s ˜ao adicionados pelo utilizador, mas sim pelo algoritmo para depois o FrontEnd ler e mostrar (figura 3.8): Alocac¸ ˜oes (Allocation, que corresponde `a agenda com a soluc¸ ˜ao final) e gerac¸ ˜oes (Generation, estado em que se encontra o c ´alculo das alocac¸ ˜oes).

(29)

3.2. BASES DE DADOS 29 ALLOCATION Date ID WORKPLACE SHIFT EMPLOYEE GENERATION Results_From

Has Has Has

StartDate ID EndDate Stage State CurrentValue LastValue TotalIteractions

Figura 3.8: Parte do Modelo ER da Base de Dados de um cliente (tabelas geradas pelo algoritmo).

´

E de realc¸ar que todas as tabelas descritas at ´e aqui est ˜ao relacionadas com a tabela Per´ıodo, como mostra a figura 3.9. Esta tabela cujas colunas s ˜ao ID, Name, StartDate, EndDate e IsClosed definem o intervalo de tempo para o qual ´e pretendido gerar um hor ´ario. Isto ´e importante porque qualquer soluc¸ ˜ao que se pretenda vai depender sempre do intervalo de tempo que ´e definido. Se pensarmos, por exemplo, na gerac¸ ˜ao de um hor ´ario escolar, este varia sempre de semestre para semestre, e para cada um deles todos os registos (como as salas, os professores, as disciplinas ou as disponibilidades) podem ser alterados. PERIOD EndDate ID StartDate Name IsClosed Has_A Has_A Has_A Configurações Iniciais Configurações

Secundárias Tabelas geradas pelo algoritmo

Figura 3.9: Relacionamento da tabela Periodo com as restantes tabelas.

Existe ainda outro grupo de tabelas para fazer toda a gest ˜ao dos utilizadores do cliente espec´ıfico (figura 3.10). S ˜ao as tabelas que guardam as credenciais de cada utilizador (tabela Utilizadores, User ), as suas permiss ˜oes (Perfis, Profile), as p ´aginas a que o perfil

(30)

3.2. BASES DE DADOS 30

tem acesso (P ´aginas, Page) e a quem s ˜ao enviadas determinadas notificac¸ ˜oes (tabela Destinat ´arios das Notificac¸ ˜oes, Notification Recipient). Esta ´ultima tabela n ˜ao est ´a rela-cionada com nenhuma das outras tabelas para tornar poss´ıvel notificar um conjunto de contactos que n ˜ao tenham qualquer relac¸ ˜ao na utilizac¸ ˜ao do sistema. Uma vez que estas tabelas s ˜ao independentes do intervalo de tempo, nenhuma delas est ´a relacionada com a tabela Per´ıodo.

PAGE PROFILE

USER Has_A Access_A DisplayName Login ID IsActive Password Language Email ID Name ID Name NOTIFICATION RECIPIENTS ID Name Email Phone

Figura 3.10: Parte do Modelo ER da Base de Dados de um cliente.

Tal como acontece com a BD BPSWeb, existem tamb ´em na BD do Cliente um conjunto de tabelas para preparar a interface para multi linguagem. Chamadas de tabelas Locale, s ˜ao tabelas que fazem a traduc¸ ˜ao dos registos previamente guardados na tabela e que n ˜ao s ˜ao inseridos pelo utilizador. Um exemplo ´e o caso da tabela referente aos dias da semana. A l´ıngua escolhida por omiss ˜ao foi a l´ıngua inglesa. Assim, a tabela WeekDays cont ´em duas colunas, ID e Description que naturalmente s ˜ao os dias da semana em ingl ˆes. A tabela WeekDays Locale ter ´a as colunas ID (com uma chave estrangeira para fazer corresponder ao ID da primeira tabela), Language e Description.

A imagem 3.11 mostra o desenho das tabelas, as suas colunas e chaves (do lado es-querdo), os registos da tabela WeekDays (a meio) e os registos da tabela WeekDays Locale

`a direita.

Como a tabela dos Utilizadores tem uma coluna onde ´e guardada a prefer ˆencia da l´ıngua de cada utilizador, sempre que este se autenticar, ´e guardada essa prefer ˆencia em Sess ˜ao. Depois, sempre que for necess ´aria a consulta a uma tabela que tenha traduc¸ ˜ao, ´e passada a l´ıngua respetiva, permitindo assim que a query retorne o que ´e pedido na l´ıngua certa. Caso haja novas l´ınguas, apenas ´e necess ´ario acrescentar na tabela WeekDays Locale as respetivas descric¸ ˜oes.

(31)

3.2. BASES DE DADOS 31

Figura 3.11: Tabelas WeekDay e WeekDay Locale e respetivos registos

Ambas as BDs fazem uso de diversas tecnologias essenciais para acelerar qualquer pro-cesso de apro-cesso `a mesma: Indexac¸ ˜ao, Restric¸ ˜oes e Procedimentos Armazenados.

Indexac¸ ˜ao (Indexing) ´e uma estrutura de dados que tem como objetivo acelerar e,

conse-quentemente, otimizar as consultas `as base de dados [16]. Podemos compreender melhor este conceito se pensarmos no ´ındice de um livro, em que consultamos pelo tema para mais facilmente encontrarmos a p ´agina. Da mesma forma, em base de dados, um ´ındice aponta para uma coluna espec´ıfica de uma tabela para que, aquando da pesquisa de determinados registos, seja mais f ´acil e r ´apido encontrar o que se pretende.

Um caso pr ´atico onde foi muito usada a indexac¸ ˜ao foi nas tabelas que t ˆem a coluna IsActive. Por exemplo, do ponto de vista de manipulac¸ ˜ao de Colaboradores para efeitos de alocac¸ ˜ao num Local de Trabalho, s ´o nos interessa resgatar aqueles que estejam “ativos”. Para isso, na query `a BD, ser ´a forc¸ado o uso de um ´ındice previamente criado com essa mesma coluna, fazendo desta forma com que, em vez de serem percorridos todos os registos pelo ID do Colaborador e depois verificada a coluna IsActive, sejam percorridos os registos que cont ´em esta coluna com o valor True.

Restric¸ ˜oes (Constaints) s ˜ao regras que se criam para as ac¸ ˜oes de registos na BD. Isto ´e,

uma tentativa de manipulac¸ ˜ao de registos que viole uma restric¸ ˜ao ´e abortada [17].

Exemplos de uso de Constraints foi para obrigar o preenchimento de determinados campos que podem ser nulos apenas em algumas situac¸ ˜oes. ´E o caso da tabela dos Turnos onde s ´o ´e permitido que um registo seja inserido ou editado se as colunas StartBreakTime e EndBreakTime forem ambas nulas ou ambas n ˜ao nulas, de forma a que uma pausa do turno n ˜ao seja eterna.

(32)

3.2. BASES DE DADOS 32

Procedimentos Armazenados (SP, Stored Procedures) s ˜ao sub-rotinas em sistemas de

base de dados relacionais que executam comandos SQL. Com SP’s, em vez das queries `a BD serem chamadas no c ´odigo, s ˜ao guardadas no gestor de base de dados (neste caso, SQL Server) e chamadas posteriormente. As vantagens da sua utilizac¸ ˜ao relacionam-se com a verificac¸ ˜ao de eventuais erros de sintaxe que se possam cometer e tamb ´em com a otimizac¸ ˜ao da query, atrav ´es de ferramentas como o Plano de Execuc¸ ˜ao [18].

O Plano de execuc¸ ˜ao foi uma ferramenta valiosa na medida em que sempre que uma SP foi criada, este plano foi usado para mostrar os gastos de tempo com os ´ındices usados, podendo, desta forma, mais facilmente fazer otimizac¸ ˜oes. Os Procedimentos Armazenados foram das quatro, a tecnologia mais utilizada. Existem dezenas de SP’s pois qualquer acesso seja de consulta, edic¸ ˜ao, inserc¸ ˜ao ou remoc¸ ˜ao de dados ´e feita atrav ´es dela.

(33)

Cap´ıtulo 4

Implementac¸ ˜ao

Neste cap´ıtulo vamos descrever com algum detalhe todo o processo de implementac¸ ˜ao do projeto. Para isso, comec¸amos com uma secc¸ ˜ao explicativa sobre as tecnologias usadas e posteriormente descrevemos o desenvolvimento das funcionalidades presentes, bem como as t ´ecnicas utilizadas para esse efeito.

4.1

Tecnologia

As ferramentas e tecnologias utilizadas no desenvolvimento do projeto foram as seguintes: • Microsoft Visual Studio [19], um IDE desenvolvido pela Microsoft. Ao longo dos anos e com as crescentes atualizac¸ ˜oes e vers ˜oes tornou-se numa ferramenta muito completa, uma vez que permite desenvolver diversas aplicac¸ ˜oes, como por exemplo, Windows Forms (Aplicac¸ ˜oes para ambiente Windows), Aplicac¸ ˜oes Web, aplicac¸ ˜oes para Windows Phone e Servic¸os Web. Permite tamb ´em programar em v ´arias lingua-gens, como Visual Basic, C, C# e C++. A escolha desta ferramenta dependeu n ˜ao s ´o da empresa (uma vez que ´e politica trabalhar com o VS), mas tamb ´em do facto de permite integrar diversos servic¸os, ter um ambiente gr ´afico muito intuitivo e ser de f ´acil desenvolvimento. A vers ˜ao usada foi a de 2010 uma vez que ´e vers ˜ao mais atualizada cuja empresa possui licenc¸a.

• SQL Server [20], um sistema de gest ˜ao de base de dados relacional desenvolvido pela Microsoft, tem como principal objetivo armazenar dados e possibilitar a sua consulta e alterac¸ ˜ao a partir de aplicac¸ ˜oes. Desenvolvido em C++, este gestor de base de dados possui diversas vers ˜oes. A utilizada neste projeto (mais uma vez, por quest ˜oes de licenc¸a) foi a 2008 R2. Esta ferramenta inclui ainda um vasto conjunto de opc¸ ˜oes que fornecem servic¸os para auxiliar a gest ˜ao da base de dados, por

(34)

4.1. TECNOLOGIA 34

exemplo o Visual Studio que inclui suporte nativo para programac¸ ˜ao com SQL Server, tornando muito vantajoso a n´ıvel de facilidade de configurac¸ ˜oes o uso destas duas ferramentas em conjunto.

• C# (C-Sharp) [21], uma linguagem de programac¸ ˜ao declarativa, funcional e orientada a objetos, foi desenvolvida pela Microsoft e aprovada pela ECMA e ISO. Tem-se tornado numa linguagem muito popular por programadores web, uma vez que ´e bas-tante simples e orientada a objetos. Fornece suporte aos princ´ıpios da engenharia de Software por ser de verificac¸ ˜ao de tipagem forte, detec¸ ˜ao de uso de vari ´aveis e recolha autom ´atica de lixo. Tem tamb ´em suporte para internacionalizac¸ ˜ao.

• Model View Controller (MVC) [22], um dos modelos de desenvolvimento do ASP.NET (plataforma de desenvolvimento de aplicac¸ ˜oes web) para desenvolvimento de p ´aginas web. A sua filosofia assenta, como o pr ´oprio nome indica, em tr ˆes pilares: Modelo, Vista e Controlador. O Modelo representa o n ´ucleo da aplicac¸ ˜ao, gere o compor-tamento dos dados do dom´ınio desta, responde a pedidos de aplicac¸ ˜ao sobre o seu estado (normalmente feitos pela Vista) e a instruc¸ ˜oes de alterac¸ ˜ao do estado (geralmente feitos pelo Controlador); a Vista ´e respons ´avel da gest ˜ao da informac¸ ˜ao que ´e mostrada; o Controlador interpreta as ac¸ ˜oes do rato ou do teclado executadas pelo utilizador e para cada caso informa o Modelo e/ou a Vista.

Modelo

Vista

Controlador

Figura 4.1: Estrutura do Modelo MVC

Atrav ´es da an ´alise da figura 4.1, que representa a estrutura deste modelo, pode-mos verificar que a Vista e o Controlador dependem do Modelo, no entanto este n ˜ao depende dos dois primeiros. Esta independ ˆencia permite que o modelo seja construido e testado independentemente da apresentac¸ ˜ao visual, verificando-se um grande benef´ıcio na medida em que existe uma separac¸ ˜ao entre a l ´ogica da interface e a l ´ogica do neg ´ocio, que vai de encontro `a arquitetura descrita anteriormente.

(35)

4.2. DESENVOLVIMENTO 35

A partir desta tecnologia, surge-nos outro conceito chamado Razor [23]. Trata-se

de uma sintaxe de programac¸ ˜ao ASP.NET usada para criar p ´aginas web din ˆamicas, tamb ´em lanc¸ada pela Microsoft Visual Studio 2010, que permite que ao construir uma p ´agina HTML seja embebido c ´odigo C# ou Visual Basic. O c ´odigo, baseado em servidor, pode ser criado em tempo real enquanto a p ´agina ´e escrita para o browser. Quando uma p ´agina web ´e chamada, o servidor executa esse c ´odigo dentro da p ´agina antes de retornar a mesma para o browser. Se correr pelo servidor, o c ´odigo ´e capaz de executar tarefas complexas, como acesso `a BD.

• JQuery [24], uma biblioteca JavaScript desenvolvida para simplificar os scripts do lado do cliente de uma p ´agina HTML. Entre as in ´umeras funcionalidades destacam-se os efeitos de animac¸ ˜ao, a manipulac¸ ˜ao de eventos, a resoluc¸ ˜ao de incompa-tibilidade entre navegadores e a simplicidade do c ´odigo. E por isto muito ´util no´ desenvolvimento de uma p ´agina web intuitiva e simplificada.

4.2

Desenvolvimento

Antes da explicac¸ ˜ao do comec¸o do desenvolvimento, relembramos que o BPSWeb cont ´em tr ˆes principais componentes: Worker, Scheduler e FrontEnd. Existe tamb ´em um m ´odulo Core, ao n´ıvel da camada de dados, que cont ´em implementac¸ ˜oes comuns `as tr ˆes com-ponentes e por isso est ´a ligado a todos esses. ´E o caso da definic¸ ˜ao de constantes para as traduc¸ ˜oes, das func¸ ˜oes de acesso `a base de dados e das func¸ ˜oes auxiliares a estas: Records e Mappings. Ambas s ˜ao func¸ ˜oes que mapeiam os registos que s ˜ao trazidos da BD, no entanto, as primeiras guardam esses registos em mem ´oria, enquanto as segundas n ˜ao, o que as torna mais r ´apidas. Mappings s ˜ao definidos como interfaces e usam a func¸ ˜ao Reader como suporte, enquanto Records s ˜ao definic¸ ˜oes de classes ´uteis quando queremos manter os registos, libertando os recursos associados `a base de dados. Em suma, Records foram usados nas func¸ ˜oes cujos dados precisavam de ser guardados para mostrar ao utilizador; todas as restantes consultas foram auxiliadas por Mappings devido

`a sua maior efici ˆencia.

O projeto Worker corresponde ao desenvolvimento do algoritmo. Como j ´a foi referido, Workers s ˜ao servidores que servem para realizar os c ´alculos que forem precisos, por isso, este projeto ´e chamado quando ´e necess ´ario realizar c ´alculos.

O projeto Scheduler complementa a gest ˜ao da base de dados BPSWeb. Todos os proces-sos de gest ˜ao de clientes, verificac¸ ˜ao do servidor de BD a utilizar, atribuic¸ ˜ao de pedidos aos Workers e envio de notificac¸ ˜oes (como emails e mensagens SMS) s ˜ao da responsabilidade deste componente.

(36)

4.2. DESENVOLVIMENTO 36

Por fim, o projeto FrontEnd ´e onde s ˜ao desenvolvidas todas as interfaces gr ´aficas do utilizador. E o projeto que corresponde `a camada UI e com o qual o cliente vai lidar´ diretamente.

Apesar do projeto Scheduler ser mais redirecionado para a administrac¸ ˜ao e o FrontEnd para os clientes, o seu desenvolvimento ao n´ıvel de interface gr ´afica e conex ˜ao `a BD foi muito semelhante (atrav ´es da tecnologia MVC), uma vez que a filosofia de tratamento de dados ´e a mesma.

As interfaces gr ´aficas s ˜ao uma importante quest ˜ao a ter em conta desde o in´ıcio do desen-volvimento. O termo ambiente user friendly de uma interface relaciona-se com usabilidade, que, por sua vez, ´e a facilidade que qualquer utilizador tem, por mais inexperiente que seja, em utilizar uma aplicac¸ ˜ao, um programa ou um s´ıtio web. O utilizador precisa de se sentir confort ´avel e intuitivamente conseguir lidar com todo o programa, por isso a interface deve possibilitar ao utilizador, rapidamente e sem problemas, obter o que deseja [25].

Com base nestes aspetos, passamos a descrever algumas boas pr ´aticas que foram ado-tadas. Quando nos referimos a uma aplicac¸ ˜ao web, ´e necess ´ario que haja consist ˆencia entre as diferentes p ´aginas, opc¸ ˜oes, ac¸ ˜oes, tipo e tamanho da letra, cores, menu, entre outros. Ou seja, se o menu de opc¸ ˜oes for definido para estar no cabec¸alho, deve manter-se assim durante todas as p ´aginas, caso contr ´ario, ir ´a confundir o utilizador. Tamb ´em ´e necess ´ario que haja a percec¸ ˜ao de quando uma alterac¸ ˜ao ´e feita. Com frequ ˆencia, um utilizador carrega v ´arias vezes num bot ˜ao, acabando por repetir diversas ac¸ ˜oes sem saber, uma vez que a aplicac¸ ˜ao n ˜ao o informa sobre a ac¸ ˜ao que provocou. Outro aspeto que tivemos em considerac¸ ˜ao foi manter links, bot ˜oes e outros atalhos num tamanho vis´ıvel o suficiente e esconder as caracter´ısticas do sistema que possam confundir a atividade do utilizador.

Nos pr ´oximos subcap´ıtulos explicamos como implement ´amos a base de dados, os for-mul ´arios da componente Scheduler e os forfor-mul ´arios da componente FrontEnd respetiva-mente.

4.2.1 Base de Dados

A implementac¸ ˜ao da Base de Dados foi realizada atrav ´es do gestor SQL Server, comec¸ando por uma base de dados definida inicialmente, que cobria substancialmente as necessida-des e efetuando ajustes de acordo com a evoluc¸ ˜ao da aplicac¸ ˜ao e necessidanecessida-des.

Consequentemente, as tabelas b ´asicas consideradas indispens ´aveis (como os Servidores de Base de Dados, os Clientes e os Jobs, no caso do projeto Scheduler, e os Locais de Trabalho, Colaboradores, Qualificac¸ ˜oes, Categorias e Turnos, no caso do FrontEnd ) foram

(37)

4.2. DESENVOLVIMENTO 37

as primeiras a ser criadas. As tabelas mais complexas que cont ˆem chaves estrangeiras tiveram de ser pensadas e discutidas de forma a determinar a soluc¸ ˜ao mais eficiente e eficaz.

As boas pr ´aticas adotadas na construc¸ ˜ao das base de dados s ˜ao as seguintes:

1. As colunas ID (identificador e chave prim ´aria) de cada tabela, sempre que n ˜ao forem vis´ıveis para o utilizador, t ˆem o tipo de dados GUID (designado uniqueidentifier no caso do SQL Server) [26]. Um GUID ´e armazenado como um valor de 128 bits e normalmente apresentado em 32 carateres hexadecimais. ´E gerado aleatoriamente, mas devido `a sua grande dimens ˜ao ´e altamente improv ´avel que o mesmo n ´umero seja gerado duas vezes. Apesar de ocupar mais espac¸o comparativamente com um tipo de dados inteiro, decidimos usar GUIDs por permitir mais facilmente a uni ˜ao de registos de diferentes base de dados. Ou seja, podemos criar diferentes registos de diferentes formas, porque ao juntar, a probabilidade de haver colis ˜oes de identifica-dores iguais ´e muito reduzida.

2. As colunas com registos num ´ericos devem ter o comprimento m´ınimo poss´ıvel, de forma a poupar espac¸o na mem ´oria.

3. As colunas de Descric¸ ˜ao e outros textos t ˆem o tipo de dados nvarchar, uma vez que este ´e capaz de armazenar dados Unicode (importantes devido `a diversidade de carateres na l´ıngua portuguesa) e tamb ´em por permitir uma grande quantidade de carateres [27].

A figura 4.2 representa algumas tabelas criadas, nomeadamente a tabela das Qualificac¸ ˜oes (Skills) onde podemos observar que a coluna ID tem o tipo de dados uniqueidentifier e a Descric¸ ˜ao o tipo nvarchar com comprimento m ´aximo de 50. Esta tabela tem uma chave estrangeira para a tabela dos Per´ıodos, onde podemos verificar a mesma pr ´atica no tipo de dados.

(38)

4.2. DESENVOLVIMENTO 38

Com o decorrer do projeto, a base de dados foi evoluindo de acordo com as necessidades que foram surgindo, tanto ao n´ıvel das tabelas e suas relac¸ ˜oes, bem como ao n´ıvel das SP’s. A par do desenvolvimento dos diferentes formul ´arios, foram desenvolvidas as queries para o que se pretende, sempre recorrendo `a Indexac¸ ˜ao e ao Plano de Execuc¸ ˜ao para otimizar ao m ´aximo o acesso `a BD.

Na figura 4.3 podemos observar duas instruc¸ ˜oes SQL diferentes. Ambas retornam o ID das Alocac¸ ˜oes e o ID e a Descric¸ ˜ao dos Turnos para uma data espec´ıfica. No en-tanto, na instruc¸ ˜ao do lado esquerdo ´e usada a chave prim ´aria (PK Allocations) e na instruc¸ ˜ao do lado direito ´e usado o ´ındice previamente criado que cont ´em a coluna Date (IX Allocations Date), uma vez que ´e a que vai ser usada para fazer a selec¸ ˜ao dos registos.

Figura 4.3: Instruc¸ ˜ao SQL com uso da chave prim ´aria (lado esquerdo) e do ´ındice (lado direito).

Para compreendermos as diferenc¸as que h ´a entre as duas instruc¸ ˜oes, foram testadas as duas e analisado o Plano de Execuc¸ ˜ao, vis´ıvel na figura 4.4. Podemos verificar a import ˆancia do uso dos ´ındices na obtenc¸ ˜ao de melhores resultados a n´ıvel do custo de CPU bem como o tamanho das linhas estimado. Se o n ´umero de registos fosse maior, melhores resultados a este n´ıvel poder´ıamos observar.

Verificamos ainda o uso do NOLOCK [28]; o SQL Server utiliza o LOCK como um meca-nismo de garantia da integridade dos dados, isto ´e, por omiss ˜ao o SQL Server bloqueia o conte ´udo de uma tabela quando existem m ´ultiplos acessos `a mesma informac¸ ˜ao. Por exemplo, se quisermos consultar os registos de uma tabela que ao mesmo tempo esteja a ser atualizada, a tabela vai ficar bloqueada. A soluc¸ ˜ao ´e analisar se queremos realmente consultar os dados que podem ou n ˜ao estar atualizados e, em caso afirmativo, usar o NOLOCK.

(39)

4.2. DESENVOLVIMENTO 39

Figura 4.4: Plano de execuc¸ ˜ao para a instruc¸ ˜ao com uso da chave prim ´aria (lado esquerdo) e do ´ındice (lado direito).

4.2.2 Formul ´arios Scheduler

Como j ´a foi referido, a componente Scheduler faz a gest ˜ao interna do projeto e define como se comportar ´a o projeto face aos diversos pedidos de diversos clientes. Para isso, ´e definida uma classe chamada BusinessLogic com as func¸ ˜oes que s ˜ao executadas sempre que um cliente faz um pedido. Mais especificamente, vamos supor um caso em que um Cliente faz o pedido de gerac¸ ˜ao do hor ´ario pretendido. O esquema na figura 4.5 ´e a explicac¸ ˜ao do comportamento da classe BusinessLogic desde que um cliente executa um pedido at ´e que o servidor o processa.

Um administrador do projeto muitas vezes deseja executar determinadas ac¸ ˜oes, tais como: verificar o estado de cada cliente, saber qual o servidor de base de dados que cada cliente utiliza, conhecer os servidores de base de dados dispon´ıveis, quais os Workers dispon´ıveis e suas carater´ısticas (prioridade, capacidade de processamento dos pedidos e tipo), quais os pedidos de cada cliente ou fazer a gest ˜ao de utilizadores.

(40)

4.2. DESENVOLVIMENTO 40

1. Verifica se existem pedidos pendentes na BD;

FrontEnd Scheduler Worker

2. Verifica se existe um Worker disponível;

Sim

3. Atribui o pedido com maior prioridade ao Worker disponível; 4. Decrementa a disponibilidade

do Worker 1. O Cliente faz um pedido

de geração de um horário; 2. O pedido é inserido na tabela Jobs da BD BPSWeb

com a mesma prioridade do Cliente;

5. Processa o pedido

6. Altera estado do pedido na BD para processado; Sim Se um pedido na BD está processado: 7.1. Notifica o cliente; 7.2. Apaga o pedido da BD; 7.2. Incrementa a diponibilidade do Worker;

Figura 4.5: Comportamento da classe BusinessLogic no Scheduler

Como n ˜ao ´e pr ´atico estar constantemente a alterar o c ´odigo ou a correr manualmente as instruc¸ ˜oes SQL, para esse efeito foi criada uma interface gr ´afica de aux´ılio aos administra-dores.

Para isso, foram criados formul ´arios para cada componente a consultar: Clientes, Workers, Servidores de Base de Dados e Utilizadores. Cada um desses formul ´arios respeita a l ´ogica MVC: no Modelo cri ´amos as componentes correspondentes `as colunas de cada tabela; no Controlador cri ´amos as func¸ ˜oes que pretendemos para cada componente; na Vista desenvolvemos como queremos mostrar os resultados.

Vamos perceber melhor esta l ´ogica atrav ´es do exemplo do formul ´ario dos Clientes.

O Modelo deste formul ´ario ´e uma classe com a definic¸ ˜ao de cada coluna na respetiva BD: ID, Descric¸ ˜ao, Ativo, Prioridade e ID Bullet. Cont ´em ainda a descric¸ ˜ao do Servidor de Base de Dados pois para a visualizac¸ ˜ao na Vista ´e importante que o utilizador veja a descric¸ ˜ao e n ˜ao o ID.

(41)

4.2. DESENVOLVIMENTO 41

O segundo passo foi definir no Controlador as func¸ ˜oes do que pretendemos: consultar todos os clientes, inserir um novo cliente, editar um cliente existente, consultar os detalhes do cliente e remover um cliente. Por uma quest ˜ao de organizac¸ ˜ao de c ´odigo as func¸ ˜oes contidas no Controlador chamam func¸ ˜oes que est ˜ao numa classe denominada reposit ´orio e que existe tamb ´em por cada formul ´ario.

Quando, nas func¸ ˜oes nos reposit ´orios, queremos fazer chamadas `a base de dados, essa func¸ ˜ao chama uma outra contida no ficheiro que agrega todas as func¸ ˜oes relativas `a base de dados. Cada uma delas, por quest ˜oes de seguranc¸a, n ˜ao cont ´em a instruc¸ ˜ao SQL, mas sim o nome do Procedimento Armazenado na base de dados. Especificamente, no exemplo de consultar os detalhes de um cliente, vamos ter uma func¸ ˜ao no controlador, que chama uma func¸ ˜ao no reposit ´orio que por sua vez vai mapear o resultado de uma func¸ ˜ao de consulta SQL. Essa consulta retorna a Descric¸ ˜ao, o estado de Ativo, a Prioridade e o ID Bullet de um cliente, recebendo para isso a chave prim ´aria (ID).

No terceiro passo vamos mostrar o resultado da execuc¸ ˜ao desta func¸ ˜ao. Neste momento, os dados definidos no Modelo est ˜ao preenchidos, uma vez que foi feito o mapeamento do resultado da instruc¸ ˜ao SQL para os dados do Modelo. Desta forma, na Vista foram criados objetos HTML para fazer a leitura dos dados no modelo e mostrar na interface o seu conte ´udo, concluindo assim o resultado dos detalhes do cliente.

Com o objetivo de tornar o projeto mais compacto e f ´acil de manter, foram criadas interfa-ces. Uma interface cont ´em definic¸ ˜oes para um conjunto de funcionalidades relacionadas que uma classe ou estrutura podem implementar. Atrav ´es de interfaces, torna-se poss´ıvel incluir determinados comportamentos de diferentes fontes numa classe. Isto ´e bastante importante na linguagem C# uma vez que esta n ˜ao suporta heranc¸a m ´ultipla de classes [29]. Sendo assim, sempre que ´e chamada uma func¸ ˜ao na classe reposit ´orio ou no ficheiro SQL, na verdade vamos chamar a sua interface que cont ´em a definic¸ ˜ao das func¸ ˜oes implementadas na classe principal.

4.2.3 Formul ´arios FrontEnd

A l ´ogica de implementac¸ ˜ao dos formul ´arios de listagem, consulta dos detalhes, inserc¸ ˜ao, edic¸ ˜ao e remoc¸ ˜ao de registos segue a mesma l ´ogica descrita na subsecc¸ ˜ao anterior, assim como o recurso a interfaces. Assim, para cada um dos formul ´arios, existe um modelo, uma vista e um controlador.

(42)

4.2. DESENVOLVIMENTO 42

O bloco de c ´odigo na Tabela 4.1 representa as func¸ ˜oes no Reposit ´orio para quando que-remos editar um Local de Trabalho. Temos uma func¸ ˜ao que chama a func¸ ˜ao respe-tiva no ficheiro de base de dados (GetWorkPlaceByIDPeriodID(IDatabaseClient Database, Guid ID, Guid PeriodID)) e outra que mapeia os resultados nos registos que queremos (MapWorkPlace(GetWorkPlaceRecord DBWorkPlace, Guid PeriodID)).

public WorkPlace GetWorkPlaceByIDPeriodID(IDatabaseClient Database, Guid ID, Guid PeriodID)

{

return MapWorkPlace(Database.GetWorkPlaceByIDPeriodID(ID, PeriodID), PeriodID);

}

private WorkPlace MapWorkPlace(GetWorkPlaceRecord DBWorkPlace, Guid PeriodID)

{

WorkPlace WorkPlace = null;

if (DBWorkPlace != null) {

WorkPlace = new WorkPlace { ID = DBWorkPlace.ID, PeriodID = PeriodID, Description = DBWorkPlace.Description, IsActive = DBWorkPlace.IsActive }; } return WorkPlace; }

Tabela 4.1: Func¸ ˜oes no Reposit ´orio para quando o utilizador pretende editar um local de trabalho.

Como resultado e `a semelhanc¸a do exemplo dos Clientes no Scheduler temos a Base de Dados a retornar o ID do Local, o ID do Per´ıodo, a Descric¸ ˜ao e se est ´a Ativo e a guardar essa informac¸ ˜ao no modelo anteriormente criado.

Por fim, a vista da edic¸ ˜ao dos Locais de Trabalho (Tabela 4.2) vai conter objetos HTML com a informac¸ ˜ao atual e os campos poss´ıveis de ser edit ´aveis para o utilizador poder proceder `a alterac¸ ˜ao. Podemos verificar que temos uma legenda “Descric¸ ˜ao” na l´ıngua respetiva do utilizador e depois um campo edit ´avel com o conte ´udo atual da Descric¸ ˜ao no Modelo.

Referências

Documentos relacionados

e l final de Una Política Pública : análisis del ciclo Político del Proyecto destinos indUctores Para el desarrollo tUristico regional (didtr) – b rasil ...496 María Belén

Quadros em sua mensagem ao Congresso Nacional em 15 de março de 1961, na qual procurou definir as linhas da política exterior do Brasil e deixou claro que a

Projetil encamisado por uma camisa pré-sulcada de latão endurecido, contendo chumbo não endurecido no seu interior, dotado de uma ponta oca. HYDRA SHOCK centro, que

15, estão representados os teores médios de safrol contido em óleo essencial obtido, no decorrer do progresso de extração, da biomassa aérea de pimenta longa procedente de cultivos

As técnicas são baseadas em descontinuidade: detecção de pontos isolados, detecção de linhas e detecção de bordas, e similaridade: limiares (Thresholding), crescimento de

8 Pagamento: Uma vez finalizado o Leilão o Arrematante deverá (i) pagar o valor do lote arrematado (equivalente ao valor do Lance vencedor) ou, a importância equivalente ao

Foram incluídos no estudo os portadores de cirrose hepática e carcinoma hepatocelular diagnosticado pelos critérios da EASL ( European Association for the Study of the Liver ). Após

As análises desta investigação mostraram associação estatisticamente significativa para todas as variáveis (p=0,000), e maior número de casos de violência foi cometido