Dissertação de Mestrado em InformáticaSince the dawn of times, curiosity and necessity to improve the quality of their
life, led humans to find means to understand everything surrounding them, aiming
at improving it. Whereas the creating abilities of some was growing, the capacity
to comprehend of others follow their steps. Disassembling physical objects to comprehend
the connections between the pieces in order to understand how they work
together is a common human behavior. With the computers arrival, humans felt
the necessity of applying the same techniques (disassemble to comprehend) to their
programs.
Traditionally, these programs are written resorting to general-purpose programming
languages. Hence, techniques and artifacts, used to aid on program comprehension,
were built to facilitate the work of software programmers on maintaining
and improving programs that were developed by others. Generally, these generic
languages deal with concepts at a level that the human brain can hardly understand.
So understanding programs written in this languages is an hard task, because the
distance between the concepts at the program level and the concepts at the problem
level is too big.
Thus, as in politics, justice, medicine, etc. groups of words are regularly used
facilitating the comprehension between people, also in programming, languages that
address a specific domain were created. These programming languages raise the
abstraction of the program domain, shortening the gap to the concepts of the problem
domain.
Tools and techniques for program comprehension commonly address the program
domain and they took little advantage of the problem domain. In this master’s thesis,
the hypothesis that it is easier to comprehend a program when the underlying problem
and program domains are known and a bridge between them is established, is
assumed. Then, a program comprehension technique for domain specific languages,
is conceived, proposed and discussed. The main objective is to take advantage from
the large knowledge about the problem domain inherent to the domain specific language,
and to improve traditional program comprehension tools that only dealt, until
then, with the program domain. This will create connections between both program
and problem domains. The final result will show, visually, what happens internally
at the program domain level, synchronized with what happens externally, at problem
level.Desde o início dos tempos a curiosidade e a necessidade de melhorar a qualidade
de vida impeliram o humano a arranjar meios para compreender o que o rodeia
com o objectivo de melhorar. À medida que a habilidade de uns foi aumentando, a
capacidade de compreensão de outros seguiu-lhe os passos. Desmontar algo físico de
modo a compreender as ligações entre as peças e assim perceber como funcionam num
todo, é um acto bastante normal dos humanos. Com o advento dos computadores
e os programas para ele codificados, o homem sentiu a necessidade de aplicar as
mesmas técnicas (desmontar para compreender) ao código desses programas.
Tradicionalmente, a codificação de tais programas é feita usando linguagens
genéricas de programação. Desde logo técnicas e artefactos que ajudam na compreensão
desses programas (nessas linguagens) foram produzidas para auxiliar o
trabalho de engenheiros de software que necessitam de manter ou alterar programas
previamente construídos por outros. De um modo geral estas linguagens mais
genéricas lidam com conceitos a um nível bastante abaixo daquele que o cérebro humano,
facilmente, consegue captar. Previsivelmente, compreender programas neste
tipo de linguagens é uma tarefa complexa pois a distância entre os conceitos ao nível
do programa e os conceitos ao nível do problema (que o programa aborda) é bastante
grande.
Deste modo, tal como no dia-a-dia foram surgindo nichos como a política, a
justiça, a informática, etc. onde grupos de palavras são usadas com maior regularidade
para facilitar a compreensão entre as pessoas, também na programação foram
surgindo linguagens que focam em domínios específicos, aumentando a abstracção em
relação ao nível do programa, aproximando este do nível dos conceitos subjacentes
ao problema.
Ferramentas e técnicas de compreensão de programas abordam, geralmente, o
domínio do programa, tirando pouco partido do domínio do problema. Na presente
tese assume-se a hipótese de que será mais fácil compreender um programa quando
os domínios do problema e do programa são conhecidos, e entre eles é estabelecida
uma ponte de ligação; e parte-se em busca de uma técnica de compreensão de
programas para linguagens de domínio específico, baseada em técnicas já conhecidas
para linguagens de carácter geral. O objectivo prende-se com aproveitar o conhecimento
sobre o domínio do problema e melhorar as ferramentas de compreensão de
programas existentes para as linguagens genéricas, de forma a estabelecer ligações
entre domínio do programa e domínio do problema. O resultado será mostrar, visualmente,
o que acontece internamente ao nível do programa, sincronizadamente
com o que acontece externamente ao nível do problema