Académique Documents
Professionnel Documents
Culture Documents
REFERÊNCIA BIBLIOGRÁFICA –
CESSÃO DE DIREITOS –
É concedida à FATEC de São José dos Campos: Professor Jessen Vidal permissão para
reproduzir cópias deste Trabalho e para emprestar ou vender cópias somente para propósitos
acadêmicos e científicos. O autor reserva outros direitos de publicação e nenhuma parte deste
Trabalho pode ser reproduzida sem a autorização do autor.
RESUMO
O Escritório de Carreiras é um departamento da FATEC São José dos Campos que visa
caminho a ser seguido para atingir seus objetivos. Este departamento conta com processos e
oferecidas pelas empresas. Contudo os processos iniciais não contam com ferramentas
especializadas. Sem o apoio das ferramentas certas, o trabalho no departamento ficaria lento e
informatização dessas etapas torna viável a execução dos processos e possibilita a coleta de
ABSTRACT
The Career Office is a department of FATEC São José dos Campos that aims to
approach the academic institution with the productive sector and assist students
in finding the way to achieve their own goals. This department has processes and skilled
people to assist students and harmonizing them according to the vacancies offered by
companies. However, the initial processes do not rely on specialized tools. Without the
support of these specialized tools, the work in the department becomes slow
and impractical. The Career Office Platform 1.0 was designed to computerize some steps of
computerization of these steps makes possible the execution of processes and enables the data
SUMÁRIO
1- INTRODUÇÃO 8
1.1- Objetivo 9
1.2- Cronograma 9
2- LEVANTAMENTO DE REQUISITOS 10
2.1- Casos de Uso 10
2.1.1- Controle de Acesso 10
2.1.2- Importação de Alunos 12
2.1.3- Plano de desenvolvimento individual 13
2.1.4- Vagas 15
2.1.5- Agendamento 16
2.1.6- Currículo 18
2.2- Protótipos de tela 18
2.2.1- Protótipo de tela do agendamento 18
2.2.2- Protótipo da tela do PDI 19
2.3- Tecnologias escolhidas 20
3- DESENVOLVIMENTO 21
3.1- Arquitetura do Sistema 21
3.1.1- Banco de dados 22
3.1.1.1- Dicionários de dados referentes ao PDI 22
3.1.1.2- Dicionários de dados referentes ao Agendamento 23
3.1.2- Modelo 24
3.1.2.1- Classes referentes ao PDI 26
3.1.2.2- Classes referentes ao Agendamento 26
3.1.3- Visão 26
3.1.3.1- Tela do PDI 26
3.1.3.2- Tela do Agendamento 31
4- RESULTADOS 34
4.1- Utilização 34
4.2- Melhorias Encontradas 36
4.3- Trabalhos Futuros 37
5- SUMÁRIO EXECUTIVO 38
REFERÊNCIAS 39
ANEXOS 40
8
1- INTRODUÇÃO
O escritório de carreiras da FATEC SJC, tem como propósito preparar os alunos para
ingressar no mercado de trabalho e providenciar a aproximação da instituição com o setor
produtivo.
Para isso, conta com mentores capazes de orientar profissionalmente os alunos,
estabelecendo um Plano de Desenvolvimento Individual (FATEC SJC, 2015).
O Plano de Desenvolvimento Individual (PDI), é a definição das principais
competências a serem desenvolvidas pelo aluno para que alcance seu objetivo. Para definir
quais devem ser trabalhadas, primeiramente o aluno deve responder um questionário, contendo
uma questão aberta, referente ao cargo almejado, e outras questões quantitativas, referentes as
suas competências atuais.
O escritório também é responsável pela divulgação de vagas de estágio e emprego, e
pelo encaminhamento de alunos para empresas.
Para possibilitar uma melhor organização e agilidade nas atividades do escritório é
possível informatizar partes do processo. Com isso foi levantada a necessidade de
desenvolvimento de uma plataforma para centralizar as informações, contribuindo para seu
acesso e divulgação.
A Figura 1 apresenta os três elementos que compõem o escritório de carreiras: Pessoas,
Processos e Ferramentas. A Plataforma do Escritório de Carreiras 1.0 atuará como uma
ferramenta especializada para atender aos processos desenvolvidos no escritório.
1.1- Objetivo
1.2- Cronograma
Tabela 1 - Cronograma
Etapa Agosto Setembro Outubro Novembro Dezembro
Levantamento de Requisitos
Desenvolvimento
Publicação da versão prévia
Coleta e análise dos resultados
Publicação da versão final
10
2- LEVANTAMENTO DE REQUISITOS
Neste capítulo serão apresentados os casos de uso e os protótipos de tela necessários para o
desenvolvimento do sistema.
Foram definidos dois perfis de acesso, Mentor e Aluno. Ambos perfis possuem a
funcionalidade de troca de senha.
O perfil Mentor possui acesso as funcionalidades de importação de alunos, cadastro de
vagas, liberação de datas de agendamento, liberação do questionário do plano de
desenvolvimento individual e adição de observações nos questionários respondidos.
O perfil Aluno possui acesso as funcionalidades de agendamento, visualização do
quadro de vagas, candidatura de vagas, responder o questionário PDI que estiver liberado e
atualização de currículo.
11
2.1.4- Vagas
O mentor cadastra as vagas disponíveis, cada uma pode ter um e-mail de contato ou a
possibilidade de candidatar-se diretamente na Plataforma. A lista de candidatos é visualizada
pelo Mentor e encaminhada para a empresa solicitante. Para visualizar o quadro de vagas não é
necessário realizar acesso ao sistema, porém para candidatar-se é preciso estar autenticado.
2.1.5- Agendamento
O mentor libera datas no sistema para que o aluno possa agendar reuniões para
orientação individual e esclarecimento de dúvidas.
17
2.1.6- Currículo
4 - Clicar em salvar.
5 - Salvar informações.
A Figura 3 apresenta o protótipo da tela do PDI que será visualizada por usuários com
o perfil mentor. Para usuários com perfil aluno será possível editar as respostas do PDI corrente.
3- DESENVOLVIMENTO
Neste capítulo será apresentado o desenvolvimento do sistema, expondo a arquitetura
utilizada e referenciando os casos de uso associados.
Para a consecução do sistema foi adotado o padrão de projeto MVC (Modelo, Visão,
Controlador) conforme Figura 4.
Como visto na Figura 4, o usuário, através do navegador, faz uma requisição direta ao
controlador passando os parâmetros através de beans, quando a requisição é efetuada através
um formulário HTML, ou JSON, quando a requisição é efetuada via chamada AJAX. O
controlador trata as informações vindas da visão e aciona o modelo. O modelo se comunica
com o banco de dados, através de um driver, e efetua as operações necessárias via comandos
do banco de dados.
Nos subcapítulos seguintes será detalhada a divisão da arquitetura.
A seguir serão apresentados os dicionários de dados das tabelas criadas para atender os
casos de uso do PDI.
23
A seguir será apresentado o dicionário de dados da tabela criada para atender os casos
de uso do Agendamento
3.1.2- Modelo
3.1.3- Visão
Neste subcapitulo serão apresentadas algumas telas desenvolvidas junto com uma
explicação relacionando as telas com o diagrama de classes.
pdi_aluno.jsp
<div class="panel-body">
<div>
<s:iterator value="pdis">
<div>
<s:form namespace="/PDI" action="responder">
<input type="hidden" name="pdiId" value="${id}" />
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th><s:text name="pdialuno.questao.label" /></th>
<th><s:text name="pdialuno.resposta.label" /></th>
</tr>
</thead>
<tbody>
<s:iterator value="respostas" status="respStatus">
<tr>
<td>${questao.questao}</td>
<td><input type="hidden" name="questoes[${respStatus.index}]"
value="${questao.id}" />
<s:if test="questao.fgAberta">
<textarea rows="3" cols="50" name="respostas[${respStatus.index}]"
maxlength="200" >${resposta}</textarea>
</s:if>
<s:else>
<s:if test="questao.valorMaximo != null">
<s:iterator value="questao.listaValores" var="i">
<label>${i}</label>
<s:if test="resposta.equalsIgnoreCase(#i)">
<input type="radio" name="respostas[${respStatus.index}]"
checked="checked" value="${i}" />
</s:if>
<s:else>
<input type="radio" name="respostas[${respStatus.index}]"
value="${i}" />
</s:else>
</s:iterator>
</s:if>
</s:else>
</td>
</tr>
</s:iterator>
</tbody>
<tfoot>
<tr>
<td colspan="2" align="center"><input class="btn-primary"
type="submit" value="<s:text name='pdialuno.salvar.label'/>"
/></td>
</tr>
</tfoot>
</table>
</div>
</s:form>
</div>
</s:iterator>
</div>
</div>
29
RespostaQuestaoService.java
/**
* Classe responsável por tratar a informação vinda da Action e acionar o
Model
* para realizar as persistência dos dados.
*
* @author Rafael Cassiano
*
*/
public class RespostaQuestaoService {
/**
* Recebe uma lista contendo os ids das questões, uma lista com as
respostas
* e o id do PDI respondido. Para cada questão contida na lista,
verifica se
* existe uma resposta correpondente. Caso exista uma resposta aciona
o
* model.
*
* @param pdiId
* Id do PDI
* @param questoes
* Lista contendo os ids das questões do PDI
* @param respostas
* Lista contendo as respostas das questões
*/
public void salvarRespostas(long pdiId, List<Long> questoes,
List<String> respostas) {
if (questoes == null || respostas == null) {
return;
}
RespostaQuestaoModel model = new RespostaQuestaoModel();
for (int i = 0; i < questoes.size(); i++) {
if (i >= respostas.size()) {
break;
}
if (respostas.get(i) == null
|| StringUtils.isBlank(respostas.get(i))) {
continue;
}
model.salvarResposta(pdiId, questoes.get(i),
StringUtils.trim(respostas.get(i)));
}
}
}
RespostaQuestaoModel.java
/**
* Classe responsável por realizar a persistência dos dados
*
* @author Rafael Cassiano
*
*/
public class RespostaQuestaoModel {
/**
* Atualiza a resposta de acordo com o id do PDI e o id da Questão.
*
* @param pdiId
* Id do PDI
* @param questaoId
* Id da Questão
* @param resposta
* Resposta
*/
public void salvarResposta(long pdiId, Long questaoId, String
resposta) {
EntityManager em = HibernateUtil.getEntityManager();
try {
StringBuilder sb = new StringBuilder();
sb.append(" update resposta_questao set resposta =
:resposta, data_resposta = :dataResposta ");
sb.append(" where pdi_id = :pdiId and questao_id =
:questaoId ");
Query query = (Query)
em.createNativeQuery(sb.toString());
query.setParameter("resposta", resposta);
query.setParameter("pdiId", pdiId);
query.setParameter("questaoId", questaoId);
query.setParameter("dataResposta", new Date());
em.getTransaction().begin();
query.executeUpdate();
em.getTransaction().commit();
} finally {
em.close();
}
}
}
AgendamentoModel.java
/**
* Método responsável por atribuir um usuário ao horário selecionado.
*
* @param agendamentoId
* Id do horário selecionado
* @param usuarioId
* Id do usuário logado
*/
public void agendar(long agendamentoId, String usuarioId) {
EntityManager em = HibernateUtil.getEntityManager();
try {
StringBuilder sb = new StringBuilder();
sb.append(" update agendamento set usuario_id = :usuarioId ");
sb.append(" where agendamento_id = :agendamentoId and
usuario_id is null ");
Query query = em.createNativeQuery(sb.toString());
query.setParameter("usuarioId", usuarioId);
query.setParameter("agendamentoId", agendamentoId);
em.getTransaction().begin();
query.executeUpdate();
em.getTransaction().commit();
} finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
em.close();
}
}
34
4- RESULTADOS
Nesse capitulo serão apresentados os resultados obtidos. Para capturar as informações
quantitativas de acesso e utilização do sistema foi utilizado o Google Analytics (GOOGLE
ANALYTICS, 2015).
4.1- Utilização
Dia vinte de outubro foi realizada a publicação da versão prévia para que passasse por
um período de avaliação. Esse período de avaliação teve a duração de vinte e um dias,
finalizando então no dia onze de novembro.
Durante esse período o sistema foi acessado por professores e por uma turma do curso
de logística. Tanto os professores quanto os alunos conseguiram utilizar o sistema sem a
necessidade de um treinamento prévio.
Conforme Figura 9, no período de avaliação o sistema foi acessado por 88 usuários,
sendo que alguns desses usuários acessaram mais de uma vez, totalizando 121 sessões, 843
visualizações de página, uma média de 6,97 páginas por sessão, as sessões tiveram duração
média de 11 minutos e 32 segundos. A taxa de rejeição, que representa o percentual de usuários
que não passaram da primeira página do sistema, foi de 9,92%.
Outra possível melhoria seria a migração do sistema para um outro servidor, ou para
uma versão superior desse mesmo servidor. Atualmente o sistema está hospedado no OpenShift,
utilizando a versão gratuita, que tem recursos limitados (OPENSHIFT, 2015). Uma dessas
limitações é o desligamento do banco de dados após 24 horas sem nenhum acesso, causando
um erro, vide Figura 11, quando o sistema tenta realizar uma conexão. Esse erro é momentâneo,
sendo que ao atualizar a página já é possível realizar o acesso normalmente.
37
5- SUMÁRIO EXECUTIVO
O Escritório de Carreiras é um projeto da FATEC São José dos Campos e tem como
objetivo aproximar alunos e diplomados do mercado de trabalho, e auxiliá-los a desenvolver
competências e talentos que possam impulsionar seu futuro profissional.
A Plataforma do Escritório de Carreiras 1.0 é responsável pela informatização de parte
dos processos do Escritório de Carreiras, proporciona uma comunicação ágil e efetiva entre os
alunos e a Faculdade, onde os mentores poderão analisar a situação do aluno e melhorar o
contato com empresas. Esta é a principal forma de organizar e distribuir responsabilidades e
informações dentro da instituição acadêmica, possibilitando inclusive, através da extração dos
dados gerados, a construção de perfis para estudo.
Dentre os processos disponíveis na plataforma estão o preenchimento e consulta do
questionário do plano de desenvolvimento individual, cadastramento e disponibilização de
vagas e currículos, e o agendamento de reuniões.
39
REFERÊNCIAS
APACHE STRUTS. Apache Struts 2 Documentation. Disponível em:
https://struts.apache.org/docs/home.html. Acesso em: 15/11/2015.
BOOTSTRAP. Getting started. Disponível em: http://getbootstrap.com/getting-started/.
Acesso em: 15/11/2015.
FATEC SJC. Escritório de Carreiras. Disponível em: http://www.fatecsjc.edu.br/escritorio-
de-carreiras. Acesso em: 19/11/2015.
GOOGLE ANALYTICS. Google Analytics. Disponível em:
https://www.google.com/analytics/. Acesso em: 15/11/2015.
HIBERNATE ORM. Hibernate ORM: Idiomatic persistence for Java and relational
databases. Disponível em: http://hibernate.org/orm/. Acesso em: 15/11/2015.
JQUERY. jQuery: write less, do more. Disponível em: https://jquery.com/. Acesso em:
15/11/2015.
LIQUIBASE. LIQUIBASE. Disponível em:
http://www.liquibase.org/documentation/index.html. Acesso em: 15/11/2015.
OPENSHIFT. Develop, Host, and Scale Your Apps in the Cloud. Disponível em:
https://www.openshift.com/. Acesso em: 15/11/2015.
40
ANEXOS
Anexo 1 – JAVADOC
doc\index.html