Escolar Documentos
Profissional Documentos
Cultura Documentos
WILLIAM MELLO
BLUMENAU
2022
WILLIAM MELLO
BLUMENAU
2022
Dedico este trabalho aos familiares, amigos,
professores, colegas de trabalho e
especialmente aqueles que me ajudaram a
chegar até aqui e realizar este trabalho com
sucesso.
AGRADECIMENTOS
Gostaria de agradecer aos meus pais, José Adriano Mello e Estela Hemkemaier Mello,
por todo o apoio, persistência e incentivo para que eu conseguisse alcançar meus objetivos.
A minha orientadora Luciana Pereira de Araújo Kohler, por toda a disponibilidade,
compreensão, paciência e competência para que este trabalho fosse concluído.
Aos meus amigos e colegas de trabalhos pelo compartilhamento de conhecimento e
sugestões.
A todos os meus professores, que de alguma forma contribuíram com conhecimentos
necessários para a conclusão deste trabalho. Em especial ao professor Alexander Roberto
Valdameri, pelos esclarecimentos de dúvidas ligadas a bancos de dados relacionais.
A todos os meus colegas de faculdade que fizeram parte de toda a minha trajetória e me
ajudaram com discussões e ideias.
Feliz aquele que transfere o que sabe e aprende
o que ensina.
Cora Coralina
RESUMO
This work presentes a web system to manager a dictionaire of a Manager Database System.
This system emerged as an assistant to develop legacy systems that use Oracle Manager
Database System with option to storing application information. In this way, it has the
possibility to maintain tables, tables atributes and the relationship among the tables by the web
graphic interface. Moreover, the web system allow to user do reverse engeneering of the
database throw the metadata structure and allow to the user generate a Pascal Unit. The system
was develop like a front-end one page, this is, has just one page with the main functionalities
of the system. For the development of system it was follow the usability patterns for web and
for this it was used the Bootstrap and Font Awesome frameworks, the HTML, CSS and
Javascript language for the front-end. For the back-end it was used the Dapper framework and
the C# language. The purpose of this work is change the dinamic of use database of manual to
systematic, assistant the development of comercial systems, at once that with manual way can
genereted incorrect scripts. Thus, the system with a good graphic interface web and a good
usability can be used to facility and expedite the development flow commercial companies that
use the Object Pascal programming language. As usability tests was used the SAPO heuristics
that indicates that system is over the average of user experience. As technological relevance
this system contribute with the better structural organization of database with the systems with
interest in use this developed system in the reverse engeneering process, that can be reduce the
spend time int the reverse engeneering systems and better the manutenibility. As scientific
relevance this work share the evaluations did, that was one by a usability questonnaire
consolidated (SAPO, 2022). As a limitation of this work, it has the generation of code to other
programming languages than Object Pascal, the compatibilities with other databases. By the
end, it can be concluded that the goals were achieved according what is presented along this
work.
Quadro 1 – Informações obtidas por meio de metadados de um SGBD Oracle via PL/SQL
Developer ............................................................................................................... 24
Quadro 2 – Requisitos Funcionais da aplicação ....................................................................... 31
Quadro 3 – Requisitos Não Funcionais da aplicação ............................................................... 32
Quadro 4 – Matriz de rastreabilidade do sistema ..................................................................... 33
Quadro 5 – Controlador de entrada do back-end para a engenharia reversa ............................ 41
Quadro 6 – Comandos de criação da DIC_TABLE e DIC_TABLEID ................................... 42
Quadro 7 – Descoberta de tabelas do banco de dados utilizando USER_TABLES ................. 43
Quadro 8 – Engenharia reversa das tabelas implementadas no back-end ................................ 43
Quadro 9 – Comandos de criação da DIC_TABLE_COLUMNS e DIC_TABLE_COLUMNSID
............................................................................................................................... 44
Quadro 10 – Descobrindo as colunas das tabelas utilizando USER_TAB_COLUMNS ............ 45
Quadro 11 – Engenharia reversa das colunas das tabelas implementados no back-end .......... 46
Quadro 12 – Comandos de criação da DIC_TABLE_INDEXES e
DIC_TABLE_INDEXESID .................................................................................. 47
Quadro 13 – Descoberta de índices das tabelas usando USER_INDEXES e
USER_CONSTRAINTS ......................................................................................... 48
Quadro 14 – Engenharia reversa de índices das tabelas implementadas no back-end ............. 50
Quadro 15 – Comandos de criação da DIC_INDEXES_COLUMNS e
DIC_INDEXES_COLUMNSID ............................................................................. 51
Quadro 16 – Descoberta das colunas dos índices usando o metadados USER_IND_COLUMNS
............................................................................................................................... 52
Quadro 17 – Implementação da descoberta de colunas dos índices no back-end do sistema
gerenciador de dicionário ...................................................................................... 53
Quadro 18 – Comandos de criação da tabela DIC_FOREIGN_KEYS e da sequence
DIC_FOREIGN_KEYSID .................................................................................... 54
Quadro 19 – Descoberta de chaves estrangeiras utilizando o metadados
USER_CONSTRAINTS do tipo R ......................................................................... 55
Quadro 20 – Implementação da descoberta de chaves estrangeiras no back-end do sistema
gerenciador de dicionário ...................................................................................... 56
Quadro 21 – Comandos para criação da tabela DIC_FOREIGN_KEYS_COLUMNS e da
sequence DIC_FOREGN_KEYS_COLUMNSID.................................................... 57
Quadro 22 – Descoberta de colunas das chaves estrangeiras usando o metadados
USER_CONS_COLUMNS ...................................................................................... 58
Quadro 23 – Implementação da descoberta das colunas das chaves estrangeiras no back-end
do sistema gerenciador de dicionário .................................................................... 59
Quadro 24 – Controlador de entrada do back-end para manutenção de tabelas....................... 61
Quadro 25 - Comparação de estrutura de tabela antes e depois de alteração na tabela............ 62
Quadro 26 – Controlador de entrada do back-end para conversão de SGBD .......................... 63
Quadro 27 – Controlador de entrada do back-end para geração de fontes ............................... 64
Quadro 28 – Código-fonte Pascal uDicEnums ...................................................................... 65
Quadro 29 – Parte do código-fonte uDicConstants .......................................................... 66
Quadro 30 – Código-fonte Pascal de enumeradores gerado pelo sistema gerenciador de
dicionário ............................................................................................................... 67
Quadro 31 – Exemplo de código-fonte Pascal de uma tabela PRODUTO gerada pelo sistema
gerenciador de dicionário ...................................................................................... 75
Quadro 32 – Exemplo de um código-fonte de constantes Pascal para uma tabela PRODUTO,
gerado pelo sistema gerenciador de dicionário ...................................................... 77
Quadro 33 – Exemplo de gravação utilizando as classes de código-fonte Pascal geradas pelo
sistema ................................................................................................................... 78
Quadro 34 – Exemplo de busca de clientes utilizando as classes de código-fonte Pascal
geradas pelo sistema gerenciador de dicionário .................................................... 79
Quadro 35 – Exemplo de exclusão de clientes utilizando as classes geradas pelo sistema
gerenciador de dicionário ...................................................................................... 80
Quadro 36 – Relacionamento de Heurísticas e Problemas Identificados por Blocos .............. 86
Quadro 37 – Necessidade de armazenar clientes no banco de dados em um sistema legado .. 87
Quadro 38 – Acrescentando a DATA_CADASTRO no código-fonte Pascal do sistema legado e
compilando-o ......................................................................................................... 97
Quadro 39 – Comparativo dos trabalhos correlatos ................................................................. 99
Quadro 40 – Endereço do sistema e parametrização a ser testado pelo Suip.biz ................... 113
Quadro 41 – Execução do Suip.biz a procura de vulnerabilidades ........................................ 113
Quadro 42 – Resultado da execução do Suip.biz ................................................................... 113
LISTA DE TABELAS
Tabela 1 – Tempos de execução de cada processo da engenharia reversa em segundos ... Erro!
Indicador não definido.
LISTA DE ABREVIATURAS E SIGLAS
IP – Internet Protocol
PAS – Formato de arquivo interpretado pela IDE Delphi na linguagem Object Pascal
RF – Requisito funcional
1 INTRODUÇÃO .................................................................................................................. 18
1.1 OBJETIVOS ...................................................................................................................... 20
1.2 ESTRUTURA.................................................................................................................... 20
2 FUNDAMENTAÇÃO TEÓRICA .................................................................................... 21
2.1 SISTEMA LEGADO......................................................................................................... 21
2.2 ENGENHARIA REVERSA .............................................................................................. 21
2.3 METADADOS .................................................................................................................. 23
2.4 TRABALHOS CORRELATOS ........................................................................................ 24
2.4.1 FERRAMENTA WEB PARA MODELAGEM LÓGICA EM PROJETOS DE BANCOS
DE DADOS RELACIONAIS ......................................................................................... 24
2.4.2 UMA FERRAMENTA DE SOFTWARE PARA GERAR UMA ARQUITETURA
MODEL-VIEW-CONTROLLER BASEADA NO MODELO ENTIDADE-
RELACIONAMENTO ................................................................................................... 26
2.4.3 ENGENHARIA REVERSA DE BANCO DE DADOS RELACIONAL PARA
MODELO UML .............................................................................................................. 29
3 DESENVOLVIMENTO DO SISTEMA .......................................................................... 31
3.1 REQUISITOS .................................................................................................................... 31
3.2 ESPECIFICAÇÃO ............................................................................................................ 32
3.2.1 Diagrama de casos de uso ............................................................................................... 33
3.2.2 Diagramas de classes....................................................................................................... 34
3.2.3 Diagrama de arquitetura .................................................................................................. 37
3.2.4 Diagrama de componentes .............................................................................................. 38
3.3 IMPLEMENTAÇÃO ........................................................................................................ 39
3.3.1 Técnicas e ferramentas utilizadas.................................................................................... 39
3.3.2 Engenharia reversa .......................................................................................................... 41
3.3.3 Manutenção de tabelas .................................................................................................... 60
3.3.4 Conversão de base ........................................................................................................... 62
3.3.5 Geração de códigos-fontes .............................................................................................. 63
3.3.6 Operacionalidade da implementação .............................................................................. 80
3.4 ANÁLISE DOS RESULTADOS ...................................................................................... 85
3.4.1 Avaliação de usabilidade................................................................................................. 86
3.4.2 Avaliação de usabilidade por demonstração ................................................................... 87
3.4.3 Comparativo dos correlatos com o sistema gerenciador de dicionário ........................... 99
4 CONCLUSÕES ................................................................................................................ 101
4.1 EXTENSÕES .................................................................................................................. 102
REFERÊNCIAS ................................................................................................................... 104
APÊNDICE A – MODELO ENTIDADE RELACIONAMENTO .................................. 106
APÊNDICE B – SEGUNDA PARTE DO DIAGRAMA DE CLASSES ......................... 109
APÊNDICE C – AVALIAÇÕES DE DESEMPENHO, VULNERABILIDADE E CARGA
........................................................................................................................................... 111
18
1 INTRODUÇÃO
Após a aplicação da engenharia reversa nesses sistemas legados, Pressman (2011) apud
Santos e Bianchini (2019), afirma que é obtido como resultado a especificação de um produto
que é gerada a partir das análises realizadas no sistema. Com isso é possível entender o
funcionamento do mesmo, para alterar, realizar manutenções futuras e acrescentar novas
funcionalidades ao software em questão. Essa técnica de engenharia reversa cresceu muito e
possibilita o entendimento e melhoria do software, até na descoberta de segredos industriais e
comerciais.
Para Vieira (2020), uma das formas para se realizar engenharia reversa em um sistema
que utiliza conectividade com banco de dados relacional é a Structured Query Language (SQL),
19
trabalho tem vivência com Pascal e nota que existe necessidade em auxiliar na geração de
código-fonte Pascal com a estrutura do banco de dados existente em sistemas.
1.1 OBJETIVOS
1.2 ESTRUTURA
Este trabalho está dividido em quatro capítulos. Sendo o primeiro a introdução, em que
são relatados os motivos para o desenvolvimento do mesmo e os objetivos elencados.
No segundo capítulo é apresentada a fundamentação teórica, em que estão os conceitos
de sistemas legados, engenharia reversa e metadados. Na última seção do capítulo são
apresentados os trabalhos correlatos.
No terceiro capítulo é apresentado o desenvolvimento da aplicação, em que é relatado
os requisitos, os diagramas de casos de uso, modelo de entidade e relacionamento, diagrama de
classes, diagrama de arquitetura, diagrama de componentes e ainda, as técnicas utilizadas e
operacionalidade da implementação. Por fim, são apresentados os resultados e discussões.
No quarto e último capítulo são apresentadas as conclusões que foram alcançadas com
o trabalho, além das limitações deste. Ainda, são elencadas algumas extensões e melhorias para
a aplicação.
21
2 FUNDAMENTAÇÃO TEÓRICA
Esta seção tem como objetivo explorar os conceitos e fundamentos mais importantes
para realização desse trabalho. A subseção 2.1 descreve sobre sistema legado. A subseção 2.2
aborda sobre engenharia reversa. Por fim, a subseção 2.3 abrange sobre metadados,
especificadamente de banco de dados.
Segundo Pinto e Braga (2004) apud Barbosa e Candido (2017) define-se sistema legado
como sistema crítico que está em uso a um longo período, que possivelmente foi desenvolvido
com tecnologias ultrapassadas e que é peça fundamental para a organização que o mantém e
para Pinto e Braga (2005), esses sistema estão na contramão da evolução, pois as tecnologias
estão em constante evolução uma vez que esses sistemas costumam entrar em produção
desatualizados tecnologicamente, devido a atrasos no desenvolvimento. Uma das possíveis
explicações do porque esses sistemas ainda existem até hoje é uma questão de custo, pois seu
desenvolvimento inicial pode ter levado a um custo muito alto e que só haverá retorno desse
investimento após vários anos de uso. O tempo de duração de sistemas de software é muito
variável e sistemas de grande porte permanecem em uso por mais de dez anos. Outra possível
explicação pode estar ligada ao quão importante esse sistema é para a organização que o
desenvolveu e para as empresas que o utilizam, de modo que uma simples falha dos serviços
desse sistema possa causar sérios efeitos colaterais no dia a dia de ambos.
Para Pfleeger (2007) apud Barbosa e Candido (2017) geralmente um sistema
considerado legado não possui uma documentação adequada ou quando a possui, está
incompleta em relação as funcionalidades atuais dele. Devido a isso, pode ser inviável
financeiramente evolui-lo, pois qualquer modificação poderá impactar em outras
funcionalidades do software ou poderá levar muito tempo para concluir determinada
modificação.
2.3 METADADOS
Metadados, segundo Catarino e Baptista (2010) apud Aires et al. (2013) é definido como
dados estruturados sobre dados, que permitem identificar um recurso, facilitar na filtragem de
objetos, auxiliar na recuperação de um dado etc. Neles estão contidas informações a respeito de
sua aplicabilidade em sistemas de informação, tais como: definição, administração ou
gerenciamento, formas e direitos de uso, entre outros. Segundo Alves (2012) apud Aires et al.
(2013) para explicar o conceito de metadados de banco de dados, pode-se classificar uma
pessoa, ou seja, todo ser humano possui as características: nome, sexo, cor, endereço etc. Dentro
de um SGBD que tenha uma tabela que guarde informações de pessoas, tem-se os metadados
ligados a essa tabela pessoa para identificar os campos, relacionamentos com outras tabelas e
integridades (ALVES, 2012 apud AIRES et al., 2013). Esses metadados sempre são controlados
pelo próprio SGBD e servem de artifício para descobrir informações desconhecidas ou ocultas
que ninguém sabe sobre um banco de dados ou sistema de informação.
Segundo Ferreira et al. (2012) apud Aires et al. (2013) Os metadados são organizados
por uma estrutura padronizada, que permite manter as informações a respeito de objetos digitais
de forma simples, associando as características relevantes a cada elemento a ser armazenado.
Para Hasegawa e Aires (2007) apud Aires et al. (2013) esses metadados podem ser classificados
de acordo com três tipos fundamentais: metadados descritivos; estruturais; e administrativos. O
primeiro descreve ou identifica um recurso de informação, auxiliando na busca e na recuperação
dos objetos. O segundo indica como objetos compostos se relacionam, como por exemplo, a
ordem das páginas de um livro. O terceiro evidencia informações, auxiliando o gerenciamento
24
de recurso, como por exemplo, data de criação e autor, tipos de arquivo, tamanho, além de
outras informações técnicas. Boa parte dos padrões de metadados acabam utilizando da forma
descritiva, pois permite a colocação de informação adicionar aos dados armazenados,
auxiliando na organização dos elementos.
Segundo Codd (1970), para que um banco de dados seja considerado relacional é
necessário que obedeça a algumas normas. A primeira forma normal proposta por Codd (1970)
é de que um banco de dados relacional represente toda e qualquer informação explicitamente
no nível lógico e de forma exatamente por valores em tabelas, ou seja, seus valores de coluna
em linhas dentro das tabelas.
No Quadro 1 é possível ver um exemplo com as informações possíveis de extrair por
meio de tabelas dos metadados em um SGBD Oracle. A ferramenta utilizada para acessar o
SGBD foi o PL/SQL Developer e nela é possível recuperar todas as colunas da tabela CIDADE,
bem como seu tipo de dado, tamanho máximo permitido, se é permitido gravar dados nulos,
comentário sobre a coluna e, se existir, valor padrão para ela, entre outras informações.
Quadro 1 – Informações obtidas por meio de metadados de um SGBD Oracle via PL/SQL
Developer
Nessa seção são apresentados três trabalhos correlatos que possuem características
semelhantes a proposta desse trabalho. Os três trabalhos são ferramentas CASE para
gerenciamento de banco de dados, a fim de facilitar o cotidiano de programadores e analistas
de sistema.
Bugmann (2012) apresenta uma ferramenta Web para modelagem lógica em projetos de
banco de dados relacionais, de nome Web Modeler 2.0, com o objetivo de melhorar projetos de
banco de dados de grandes sistemas e dar continuidade ao aplicativo web para definição do
modelo lógico no projeto de banco de dados relacional, Web Modeler 1.0 (BUGMANN, 2012,
p. 15). A ferramenta foi melhorada para permitir ao usuário criar, gerenciar um banco de dados,
independente do SGBD utilizado, e construir “[...] diagramas da UML, casos de uso, classes e
25
atividades.” (BUGMANN, 2012, p. 28), controlar projetos de banco de dados e suas versões,
com restrição de acesso a usuários em determinados projetos e criar diagramas para modelar
tabelas, colunas e relacionamentos de forma gráfica. O Web Modeler 2.0 foi desenvolvido em
linguagem de programação Java, com arquitetura Model View Controller (MVC) e alguns
padrões de projeto, como Data Access Object (DAO) e Command. De alguns aspectos que
foram melhorados no Web Modeler 2.0, pode-se citar a funcionalidade de aproximar, distanciar,
imprimir diagramas com geração de scripts para criação/atualização de bancos de dados e
adicionar uma rotina que permita realizar engenharia reversa de um banco de dados, capaz de
varrer a estrutura do banco de dados e descobrir as tabelas existentes (já criadas) no banco de
dados em que o usuário está conectado (BUGMANN, 2012).
Na Figura 2 tem-se o diagrama de classes carregado na ferramenta Web Modeler 2.0.
Nessa ferramenta há disponível as opções de gerenciar tabelas, diagramas, scripts, importar e
editor de diagramas. No menu de tabelas, é possível manter as tabelas do SGBD. Na opção de
diagramas, é possível consultar as tabelas por meio de diagramas da Unified Modeling
Language (UML). Na opção de scripts, é possível gerar os scripts para converter a base de
dados. Na opção importar, é possível importar diagramas criados na ferramenta. Por último, o
editor de diagramas, que há as ações necessárias para a construção de diagramas de classes,
atividades e de casos de uso, como por exemplo, inserir associações, composições, atores, casos
de uso, fluxo, atividade final, entre outros.
Figura 2 – Modelagem de diagramas de classes da UML no Web Modeler 2.0
do banco de dados utilizado por Bugmann (2012). Ou seja, o Web Modeler 2.0 identificou as
tabelas tb_compra, tb_material e tb_tipo_material no SGBD, importou elas para o Web
Modeler 2.0 (por meio da engenharia reversa) e gerou uma representação gráfica na ferramenta
para visualizar o resultado e permitir alterá-las (BUGMANN, 2012).
Figura 3 – Resultado da importação de tabelas por engenharia reversa no Web Modeler 2.0
Soto et al. (2020) apresentam uma ferramenta CASE capaz de gerar código Model-
View-Controller (MVC) com base em um diagrama de Modelo-Entidade-Relacionamento
(MER) e um script de banco de dados correspondente ao diagrama traduzido. A ferramenta é
desenvolvida na linguagem de programação Angular e tem por objetivo aprimorar o
aprendizado do padrão de projeto MVC, promovendo boas práticas de programação e a
reutilização de código (SOTO et al., 2020).
Na Figura 4, Krasner e Pope (1988) apud Soto et al. (2020) explicam como funciona o
padrão de projeto MVC e suas camadas, sendo: o modelo (Model) tem a função de assumir a
parte do sistema que gerencia todas as tarefas relacionadas aos dados, como por exemplo,
validação e persistência de dados ligadas ao banco de dados; a visão (View) possui a função de
interagir com o usuário por meio de interfaces gráficas gerenciáveis, ou seja, formulários,
botões e todos os outros elementos gráficos da aplicação (parte visual); e controlador
(Controller), tem a responsabilidade de cuidar dos eventos disparados pela camada de visão ou
27
acionados por um processo do sistema, ou seja, gerencia os eventos entre a camada de visão e
a camada de modelo (KRASNER, 1988 apud SOTO et al., 2020).
Figura 4 – Conceito gráfico do padrão de projeto MVC
pois após ter sido testada e qualificada por 18 usuários aleatórios, a média de pontos entre os
10 itens da escala de usabilidade do sistema (SUS) foi superior a 70 pontos.
Soto et al. (2020) também concluem que a adoção do padrão de projeto MVC em
desenvolvimento de sistemas aumenta a produtividade, evita tarefas monótonas e reduz
significativamente os tempos de desenvolvimento, mesmo que eles não tenham testado
diretamente isso. Nesse primeiro trabalho eles focaram a avaliação na usabilidade e pretendem
posteriormente avaliarem aspectos de linhas de código economizadas e também o quanto pode
impactar no tempo de desenvolvimento de sistemas (SOTO et al., 2020).
3 DESENVOLVIMENTO DO SISTEMA
3.1 REQUISITOS
Nesta seção são apresentados os requisitos do trabalho. Esses requisitos são divididos
em Requisitos Funcionais (RF), apresentados no Quadro 2, e Requisitos Não Funcionais (RNF),
apresentados no Quadro 3.
Quadro 2 – Requisitos Funcionais da aplicação
Requisitos Funcionais
RF01: o sistema deverá manter (Create, Read, Update, Delete, List – CRUDL)
tabelas
RF02: o sistema deverá manter (CRUDL) campos de tabelas
RF03: o sistema deverá manter (CRUDL) o relacionamento entre tabelas
RF04: o sistema deverá gerar uma visualização das tabelas por meio da
descoberta dos dados do SGBD utilizando consulta na base de dados
RF05: o sistema deverá permitir realizar login no SGBD Oracle escolhido
RF06: o sistema deverá permitir realizar conversão e atualização automática da
base de dados conforme informações das tabelas existentes no sistema
RF07: o sistema deverá permitir realizar engenharia reversa do SGBD Oracle
por meio de leitura nos metadados
RF08: o sistema deverá permitir gerar código-fonte Pascal para conexão do
sistema legado ao banco de dados
RF09: o sistema deverá permitir manter usuários
RF10: o sistema deverá permitir manter enumeradores e seus itens de
enumeradores
Fonte: elaborado pelo autor.
32
3.2 ESPECIFICAÇÃO
As classes que possuem em seu sufixo Custom, a proposta principal é tornar o acesso
aos dados no front-end mais fácil em relação a dados ou estruturas básicas fornecidas pelo back-
end, ou seja, as classes sem o sufixo Custom.
No Apêndice B, é apresentada a segunda parte do diagrama de classes.
3.3 IMPLEMENTAÇÃO
à engenharia reversa, sendo eles: engenharia reversa de tabelas; engenharia reversa de colunas
das tabelas; engenharia reversa de índices de tabelas; engenharia reversa de colunas dos índices
das tabelas; engenharia reversa de chaves estrangeiras de tabelas e engenharia reversa de
colunas das chaves estrangeiras de tabelas. Esses comandos serão detalhados nas subseções
seguintes.
valor padrão para a coluna entre as linhas 21 e 43. Na linha 47 são efetivados os registros
na DIC_TABLE_COLUMNS por meio do comando COMMIT.
A implementação dos comandos dos Quadro 9 e Quadro 10 no back-end do sistema são
apresentados no Quadro 11.
Quadro 11 – Engenharia reversa das colunas das tabelas implementados no back-end
acaba encontrando, em sua maioria, índices primários das tabelas e índices únicos, ou seja,
aqueles que possuem associação com constraints.
Já para a segunda consulta, entre as linhas 20 e 33 do Quadro 13, a descoberta de
índices é um pouco diferente, pois acaba só descobrindo os índices normais que não possuem
amarração com alguma constraint (linha 27 a 30). Como prova disso, é fixado o tipo do índice
como sendo sempre 2 na linha 23. Nessa segunda consulta foi aplicado o mesmo filtro da
primeira consulta, para que só descubra as informações pertinentes à base de dados em que o
usuário está conectado, destacado na linha 32 e 33. Para a linha 34 é realizada a efetivação
dos registros, por meio do comando Commit(), que foram encontrados nos metadados
USER_INDEXES e USER_CONSTRAINTS na tabela DIC_TABLE_INDEXES, controlada pelo sistema
gerenciador de dicionário.
No Quadro 14 é apresentado como estão implementados os comandos do Quadro 12 e
Quadro 13, para a descoberta de índices das tabelas.
50
estrangeira pertence; ID_TABLE_REF como sendo responsável por indicar qual é a tabela
(DIC_TABLE) relacionada a essa chave estrangeira; ID_INDEX como sendo o índice da tabela
local que a chave estrangeira vai utilizar; ID_INDEX_REF como sendo o índice da tabela
referenciada que a chave estrangeira vai utilizar para criar o relacionamento entre uma tabela e
outra; e por último ENABLED como sendo um indicativo se a chave estrangeira está ativada ou
não está ativada.
No Quadro 19 são apresentados em detalhes a descoberta de chaves estrangeiras
utilizando o metadados USER_CONSTRAINTS do tipo R.
55
os índices, as colunas dos índices, as chaves estrangeiras e colunas das chaves estrangeiras.
61
pois ela realiza um merge completo da estrutura da tabela antes das alterações e compara com
as novas alterações feitas pelo usuário e assim, gera os scripts necessários para conversão do
banco de dados, como por exemplo, CREATE TABLE, ALTER TABLE etc.
Quadro 24 – Controlador de entrada do back-end para manutenção de tabelas
(Nullable); se possui alguma descrição breve (Description); se possui valor padrão. Além
disso, por meio da associação com o enumerado TDataTypes, qual o tipo de dado da coluna,
podendo ser: numérico (dtInteger); alfanumérico (dtString); data e hora (dtDateTime);
decimal (dtFloat) e binário longo (dtBlob). A classe utiliza da associação com a classe
TConnect para conectar e buscar as informações no banco de dados. As propriedades Value e
ValueMax são responsáveis por guardar o valor da coluna a ser inserida. Por exemplo, uma
tabela chamada CLIENTES com o nome da coluna NOME tem a possibilidade de conter o valor
EUCLIDES PIRES a ser gravado ou retornado do banco, conforme ilustrado no comando SELECT
Figura 17 – Diagrama de classe estrutural dos índices e colunas dos índices no código-fonte
Pascal gerado pelo sistema gerenciador de dicionário
Figura 19 – Diagrama de classe estrutural das tabelas no código-fonte Pascal gerado pelo
sistema gerenciador de dicionário
do First(), pois ele posiciona no último registro da tabela. O método Next() posiciona no
registro atual +1, ou seja, o próximo registro da consulta na tabela. Já o método Prior() é
inverso do Next(), pois ele posiciona no registro atual -1, ou seja, o registro antecessor ao atual
na tabela. Existe a função HasRecord(), que tem a finalidade de retornar verdadeiro ou falso
para a existência de registro na tabela, quando não houver registro posicionado na tabela,
retorna falso, já quando houver registro posicionado, retorna verdadeiro. A função
GetFieldValue() é responsável por procurar por uma determinada coluna dentro da estrutura
(parâmetro FieldName) da classe TDicTable e retornar o valor dessa coluna do banco de dados.
Já a função SetFieldValue() é o inverso da GetFieldValue(), pois ela recebe algum valor
vindo de formulários (parâmetro Value), procura a coluna (parâmetro FieldName) da estrutura
da classe TDicTable e seta o valor no banco de dados para a coluna desejada. Como existem
vários tipos de dados no mundo da programação, existem vários métodos SetFieldValue(),
um para cada tipo de dado suportado pelo código-fonte gerado, sendo inteiro, textual, data/hora,
decimal e binário longo. Há ainda funções de pré-fixo Get com a finalidade de pesquisar um
intervalo de valores dentro da tabela, como por exemplo, clientes que possuem identificador
entre 10 a 100. As funções Get suportadas são: GetEqual(), utilizando operador relacional
igual (=); GetNotEqual(), utilizando operador relacional diferente (<>); GetGreater(),
utilizando operador relacional maior (>); GetGreaterEqual(), utilizando operador relacional
maior ou igual (>=); GetLess(), utilizando operador relacional menor (<); e por último,
GetLessEqual(), utilizando o operador relacional menor ou igual (<=). Esses operadores estão
suas respectivas colunas dos índices (linha 52 a 59). O padrão de nome para os arquivos são
uTable + nome da tabela + .pas. No construtor da classe da tabela (TPRODUTO) é indicada a
constante com o nome da tabela para carregar todas as propriedades ligadas a essa tabela
(TBL_PRODUTO, na linha 29). Nesse arquivo também constam os acessos a cada coluna da
tabela, com seus respectivos tipos de dados, permitindo facilitar o desenvolvimento de sistemas
legados, pois muitas funções são encapsuladas no interior da classe TDicTable.
No Quadro 32 é apresentado o código-fonte das constantes em Pascal gerado pelo
sistema gerenciador de dicionário. O padrão de nome para os arquivos de constantes são uTable
concatenado ao nome da tabela com o pós fixo CNT.pas. Nesse código-fonte Pascal estão
disponíveis constantes para o nome da tabela (linha 7), para o nome de todas as colunas da
tabela (linha 8 a 9) e para o nome de todos os índices da tabela (linha 10). As constantes
com os nomes das tabelas são utilizadas pelos construtores das classes de tabela (exemplo:
TPRODUTO) para indicar qual tabela a classe está representando. Já as constantes com o nome de
todas as colunas são utilizadas para recuperar ou gravar os valores vindos de formulários do
sistema legado, conforme ilustrados no Quadro 31 entre as linhas 32 e 50. Por último são
acrescentadas rotinas de busca ao banco de dados para todos os índices da tabela que possuem
o tipo primário ou único, pois índices marcados com esses tipos acabam não repetindo registros
de mesmo valor dentro da tabela. Por exemplo: se uma coluna chamada NOME de uma tabela
CLIENTES possuir um índice único na coluna NOME, o valor JOÃO não pode se repetir, gerando
erro de restrição exclusiva caso ocorra uma tentativa de inserir um segundo registro de nome
JOÃO na tabela CLIENTES.
Os padrões de nomes das constantes seguem a seguinte lógica: TBL_ concatenado ao
nome da tabela; FLD_ concatenado ao o nome da tabela seguido de um underscore (_)
concatenado ao o nome da coluna; IDX_ concatenado ao nome da tabela seguido de um
underscore (_) concatenado ao nome do índice.
77
banco de dados. Esse código-fonte correspondente a essa funcionalidade pode ser visto no
Quadro 33.
Quadro 33 – Exemplo de gravação utilizando as classes de código-fonte Pascal geradas pelo
sistema
as linhas 146 a 153, correspondente ao bloco de comando Try Except, cujo objetivo é
permitir ao programador tratar exceções lançadas indevidamente pelo programa.
Para o carregamento das informações no sistema legado, pertinentes a clientes utilizando
os arquivos gerados pelo sistema gerenciador de dicionário, é apresentado um código-fonte de
modelo no Quadro 34.
Quadro 34 – Exemplo de busca de clientes utilizando as classes de código-fonte Pascal
geradas pelo sistema gerenciador de dicionário
problemas. Essas estruturas supracitadas são as classes apresentadas nos diagramas de classes
das Figura 8 e Figura 50 presente no Apêndice B.
Figura 21 – Diagrama de atividades do sistema gerenciador de dicionário
Na Figura 29 é apresentada a saída gerada pelo botão Gerar fontes da Figura 28. Os
arquivos ficam disponíveis ao usuário em compactação zip e em formato de código-fonte
Pascal para serem executados posteriormente em ambiente de desenvolvimento Delphi. Esses
arquivos gerados resolvem apenas a questão de conexão da aplicação Pascal com o SGBD
Oracle, possibilitando auxiliar na construção de CRUDs em Delphi utilizando esses códigos-
fontes. Os detalhes individuais de cada arquivo gerado pelo sistema gerenciador de dicionário
são apresentados na seção 3.3.5.
Figura 29 – Arquivos Pascal gerados pelo sistema
c) as mensagens de erro estão junto dos elementos que contêm o erro: o sistema atente
parcialmente essa heurística. Nos formulários que não possuem grade ou tabelas, a
mensagem de erro acompanha o campo, porém quando há um erro dentro de uma
grade ou tabela, a mensagem é exibida fora do contexto em que se localiza o erro;
d) as ações principais são claramente distinguíveis das ações secundárias nos
formulários: o sistema não deixa claro para o usuário a diferença entre as principais
informações das secundárias, como por exemplo, campos opcionais e obrigatórios;
e) existe ajuda contextual nas interações mais complexas: o sistema não fornece dicas
quanto a sua utilização, apenas emite aviso de erro e uma possível solução do
problema, mas uma documentação de ajuda não está disponível;
f) foram adicionadas as tags “Open Graph”: o sistema não inclui nenhuma tag Open
Graph para partilhas de redes sociais;
g) todos os ficheiros estáticos foram minificados e comprimidos: o sistema não está
adequado para otimizar a performance das figuras, dos arquivos e dos ficheiros;
h) os conteúdos foram optimizados para mobile: o sistema não está adequado para
utilização em dispositivos móveis, tanto para a questão de performance quanto para
o redimensionamento de telas pequenas.
a Figura 30.
88
Figura 33 – PL/SQL Developer indicando que a tabela CLIENTES não existe no SGBD Oracle
Com a conversão de criar a nova tabela CLIENTES realizada, é conferido se de fato essa
tabela foi criada no SGBD Oracle, para que o sistema legado posteriormente venha a cadastrar
valores nessa nova tabela. Essa checagem é apresentada na Figura 35.
91
Figura 39 – Inserindo um novo cliente pelo sistema legado desenvolvido sobre os fontes
gerados pelo sistema gerenciador de dicionário
Figura 46 – Código-fonte Pascal gerado pelo sistema gerenciador de dicionário com a nova
coluna e novo índice
campos e relacionamentos dentro da interface gráfica, para reduzir desgastes com execução
unitária de comandos DML e DDL.
O sistema desenvolvido além de unificar as funcionalidades de todos os correlatos,
possui o diferencial de permitir ao usuário gerar código-fonte Pascal para linguagem de
programação Object Pascal auxiliando na manutenibilidade de sistemas legados escritos nessa
linguagem.
101
4 CONCLUSÕES
possuía vivências com SGBDs Oracle. Mesmo possuindo dificuldades com o desenvolvimento
do sistema web, a documentação disponível pelas empresas docentes das linguagens, ajudou
com significativa contribuição, com exemplos, dicas e recomendações de boas práticas em
programação.
As limitações encontradas no sistema consistem em não possuir controle para manter
sequences e falta de suporte para colunas de tabelas dos tipos: auto-sequence; enumerador;
boolean; BLOB; CLOB; e CRUDL de jobs.
No âmbito tecnológico esse sistema contribui com a melhor organização estrutural de
bancos de dados dos sistemas interessados em utilizar o sistema de auxílio no processo de
engenharia de software, possibilitando a redução do tempo gasto no processo de engenharia de
sistemas e melhorando a manutenibilidade deles.
Como contribuição científica, este trabalho compartilha as avaliações realizadas sendo
uma a partir de um questionário de usabilidade consolidado de SAPO (2022) e outra a partir de
uma ferramenta de desempenho da Google, o Page Speed. Com o uso desses recursos, pode-se
avaliar a usabilidade de um sistema e seu desempenho. Também compartilha das avaliações de
vulnerabilidades, das ferramentas Suip.biz e Pentest-tools, com o intuito de avaliar se o sistema
possui um bom nível de segurança. Por fim, um teste de carga funcional, aplicando sobre uma
base de dados real de um sistema comercial, com o intuito de deferir tempos de processamento.
Os resultados apresentaram, mesmo sem interferir seu funcionamento, algumas
limitações quando comparado com os trabalhos correlatos, principalmente referente ao
gerenciamento de tabelas e padrões de usabilidade. As sugestões de extensões, constantes na
subseção 4.1 visam atender a adequação às heurísticas de usabilidade, aprimorando o feedback
e a boa experiência de usuário, além de garantir mais segurança em autenticação de usuário,
bem como acrescentar mais funcionalidades ao sistema desenvolvido.
4.1 EXTENSÕES
REFERÊNCIAS
AIRES, Paulo João et al. Usando o padrão Dublin Core para definição de metadados de
imagens médicas. Revista eletrônica Fafit/Facic, Itararé-SP, v. 4, n. 2, p. 1-12, Dez. 2013.
ALVES, C. D. Metadados para a Recuperação de Imagens na WEB: utilizando o software
ADOBE BRIDGE. Revista eletrônica PontodeAcesso, Minas Gerais, v. 6, n. 1, p. 32–48,
Jun. 2012.
BARBOSA, Pedro L. S.; CANDIDO, Adriano L. Diferenças entre engenharia reversa e
reengenharia nos sistemas de informação. Revista interfaces, Icó-CE, v. 4, n. 13, Dez. 2017.
BUGMANN, Paulo Alberto. Ferramenta Web para modelagem lógica em projetos de
bancos de dados relacionais. 2012. 84 f., il. Trabalho de Conclusão de Curso (Graduação em
Ciência da Computação) - Centro de Ciências Exatas e Naturais, Universidade Regional de
Blumenau, Blumenau, 2012.
CATARINO, Maria Elisabete; BAPTISTA, Ana Alice Rodrigues Pereira. Ontologia stap:
um vocabulário de termos de metadados. In ENCONTRO NACIONAL DE PESQUISA EM
CIÊNCIA DA INFORMAÇÃO (ENANCIB), 11, Rio de Janeiro, Brasil, 2010.
CODD, E. F. A relational model for large shared data banks. Communications of the ACM,
Califórnia, v. 13, n. 6, p. 377-387, Jun. 1970.
FERREIRA, M. K. et al. Customização do DSpace para sincronizar diferentes fontes de dados
e padrões de atualização: o caso do repositório digital da UFRGS. In: Actas TICAL 2012.
Proceedings... Lima : RedCLARA, 2012. p. 364.
HASEGAWA, F. M.; AIRES, J. P. Proposta de um padrão de metadados para imagens
médicas. In: XIV ERI-PR 2007 ISBN: 978-85-7669-115-0 48, 2007, Ponta Grossa. Anais...
Ponta Grossa: UTFPR, 2007. p. 48-56.
KRASNER, Glenn E.; POPE, Stephen. A Description of the Model-View-Controller User
Interface Paradigm in the Smalltalk80 System. Journal Of Object Oriented Programming,
Santa Bárbara-CA, v. 1, Jan. 1988.
PFLEEGER, Shari Lawrence. Engenharia de Software: teoria e prática, 2. ed. São Paulo:
Pearson, 2007.
PINTO, Herbert L. M.; BRAGA, José L. Sistemas legados e as novas tecnologias: técnicas de
integração e estudo de caso. Informática Pública, v. 7, n. 1, p. 48-69, 2004.
PINTO, Herbert L. M.; BRAGA, José L. Sistemas legados e as novas tecnologias: técnicas de
integração e estudo de caso. Informática Pública, v. 8, n. 1, p. 47-69, 2005.
PRESSMAN, R. S. Engenharia de Software: uma abordagem profissional, 7. ed. Porto
Alegre: AMGH, 2011.
SANTOS, Ademir C.; BIANCHINI, Calebe P. Engenharia reversa de um sistema pdv.
2019. 15 f. Trabalho de conclusão de Curso (Graduação em Sistemas de Informação) -
Faculdade de Computação e Informática, Universidade Presbiteriana Mackenzie, São Paulo.
SAPO. Usabilidade (Web): checklist de pontos de verificação. [S.I.], [2022?]. Disponível
em: https://ux.sapo.pt/checklists/usabilidade. Acesso em: 24 jun. 2022.
105
Para toda tabela modelada, existe uma sequence, estrutura do banco de dados utilizada
para gerar um código numérico único (destacado em retângulo azul), atribuída as colunas ID
das mesmas e gerenciadas pelo back-end da aplicação. Isso se faz necessário pois o SGBD
Oracle não permite criar, nativamente, essas sequências automáticas. Portanto é necessário
gerar um controle manual externo ao SBGD para colunas auto incrementáveis.
108
Estruturalmente, não existe uma tabela no banco de dados correspondente a ela. Sua
existência é derivada do motivo em que as linguagens de programação permitem ao
programador criar enumeradores;
j) DicEnumeratesItem: classe com o objetivo de representar os itens de cada
enumerador criado para a classe DicEnumerates;
k) DicSequences: classe com intuito de representar as sequências criadas no banco de
dados, porém essa estrutura é extensível no trabalho devido a não implementação
no front-end.
111
utilizando esses recursos de segurança, bem como o servidor localhost foi liberado de diversas
formas para acesso remoto, como por exemplo, liberação de portas no firewall e liberação de
acesso global no servidor Web Wampserver. A ferramenta ainda destaca que através do servidor
Web Wampserver é possível um invasor explorar os diretórios e arquivos do mesmo, tornando
vulnerável arquivos sensíveis do sistema.
Para as vulnerabilidades de baixo risco, a ferramenta destaca que não há presença de
alguns cabeçalhos de segurança nas requisições HTTP feitas pelo sistema entre o front-end e
back-end, como por exemplo, a ausência do cabeçalho Content-Security-Policy, X-Frame-
Options, X-XSS-Protection, X-Content-Type-Options e Referrer-Policy. Nessa etapa, a
ferramenta Pentest-tools também destaca novamente que as versões dos serviços utilizados
estão visíveis há possíveis invasores e que isso pode ser usado em desfavor do sistema para
ataques não autorizados.
No geral, apesar de haver algumas vulnerabilidades médias e altas identificadas pela
ferramenta Pentest-tools, a aplicação possui um nível de segurança adequado, pois boa parte
das vulnerabilidades estão ligadas ao servidor Web no localhost.
Figura 52 – Resultado da avaliação de segurança do Pentest-tools