Use este identificador para citar ou linkar para este item: http://www.repositorio.ufal.br/handle/riufal/2517
Tipo: Dissertação
Título: A disciplinaridade das anotações condicionais de pré-processamento #ifdef TAG Não #endif importa
Título(s) alternativo(s): The discipline of prepocessor-based annotations does #ifdef TAG n't #endif matter
Autor(es): Malaquias, Romero Bezerra de Souza
Primeiro Orientador: Ribeiro, Márcio de Medeiros
Primeiro Membro da Banca: Pinto, Ig Ibert Bitterncourt Santana
Segundo Membro da Banca: Gheyi, Rohit
Resumo: O pré-processador do C é uma ferramenta simples, efetiva e independente de linguagem. Na prática o pré-processador é visto como uma solução para problemas de portabilidade e variabilidade. Para utilizá-lo, basta anotar trechos do código com diretivas condicionais. Estas definem se aquele trecho de código será incluído ou excluído. Apesar de ser largamente utilizado, o pré-processador é amplamente criticado. Seu uso é relacionado a impactos negativos na manutenibilidade e legibilidade do código. Em particular, esses problemas podem ser piores quando se utiliza anotações não disciplinadas. Contudo, um experimento controlado realizado anteriormente indicou que a disciplinaridade não afeta a manutenibilidade e a legibilidade do código. Esse resultado contradiz as críticas recebidas e alguns guias para desenvolvimento de código (como por exemplo as do Linux, que explicitamente pedem para que os desenvolvedores evitem anotações não disciplinadas). Um exemplo de anotação não disciplinada ocorre quando são anotadas apenas partes de unidades sintáticas do C. Dado este cenário, onde há uma divergência entre a prática e a teoria, existe a necessidade de se compreender melhor a importância dada por desenvolvedores à disciplinaridade das anotações condicionais e se ela de fato causa algum impacto no desenvolvimento de sistemas. Nesse trabalho conduziremos um método misto de pesquisa que envolve três estudos. O primeiro consiste em sugerir transformações de código não disciplinado em disciplinado para sistemas open source. Nesse contexto, identificamos 110 anotações não disciplinadas em sistemas C/C++ de código aberto no GitHub. Estes sistemas têm diferentes domínios, tamanhos e popularidades em métricas do GitHub. A partir disso, nós refatoramos as anotações identificadas para que se tornassem disciplinadas. Por fim, submetemos nossas sugestões através de pull requests. A maioria das refatorações foram aceitas e agora integram o código do sistemas. Foi conseguida uma taxa de aceitação de 71%. O segundo estudo consiste em minerar repositórios open-source buscando commits que contenham transformações de anotações não disciplinadas em disciplinadas. Foram encontradas 90 transformações. Estas, foram classificadas em refatoração ou não. Adicionalmente, entramos em contato com o desenvolvedor a fim de entender o que o motivou a realizar tal alteração. No terceiro estudo, foi conduzido um experimento controlado. Este tem várias diferenças em relação ao executado anteriormente, como o bloqueio a algumas variáveis de confusão e mais réplicas. De acordo com os resultados, temos evidências de que realizar manutenção em código com anotações não disciplinadas é uma tarefa com um custo maior de tempo e é mais propensa a erros que as mesmas tarefas na forma disciplinada. Essas evidências se contrapõem ao resultado encontrado no experimento anterior. De forma geral, nesse trabalho, foi concluído que a disciplinaridade das anotações não deve ser negligenciada.
Abstract: The C preprocessor is a simple, effective, and language-independent tool. Developers use the preprocessor in practice to deal with portability and variability issues. Despite the widespread usage, the C preprocessor suffers from severe criticism, such as negative effects on code understandability and maintainability. In particular, these problems may get worse when using undisciplined annotations, i.e., when a preprocessor directive encompasses only parts of C syntactical units. Nevertheless, despite the criticism and guidelines found in systems like Linux to avoid undisciplined annotations, the results of a previous controlled experiment indicated that the discipline of annotations has no influence on program comprehension and maintenance. To better understand whether developers care about the discipline of preprocessor-based annotations and whether they can really influence on maintenance tasks, in this work we conduct a mixed-method research involving three studies. In the first one we identify undisciplined annotations in 110 open source C/C++ systems of different domains, sizes, and popularity GitHub metrics. We then refactor the identified undisciplined annotations to make them disciplined. Right away, we submit pull requests with our suggestions. The majority of our pull requests have been accepted and are now merged. We reach a total acceptance rate of 71%. In the second study, we mined opensource repositories to find commits where the developer transforms undisciplined codes into disciplined ones. In that context, we found 90 transformations. Those transformations were classified in refactoring or not, and we contacted the responsible to ask why he did that code change. In the third study, we conduct a controlled experiment. We have several differences with respect to the aforementioned one, such as blocking of cofounding effects and more replicas. We have evidences that maintaining undisciplined annotations is more time consuming and error prone, representing a different result when compared to the previous experiment. Overall, we conclude that undisciplined annotations should not be neglected.
Palavras-chave: Engenharia de software
Disciplinaridade das anotações
Ifdefs
Condicionais de compilação de códigos
Compiladores (Programas de computador)
Discipline of annotations
Conditional compilation
CNPq: CNPQ::CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO
Idioma: por
País: Brasil
Editor: Universidade Federal de Alagoas
Sigla da Instituição: UFAL
metadata.dc.publisher.program: Programa de Pós-Graduação em Informática
Citação: MALAQUIAS, Romero Bezerra de Souza. A disciplinaridade das anotações condicionais de pré-processamento # ifdef TAG Não #endif importa. 2017. 79 f. Dissertação (Mestrado em Informática) –Instituto de Computação, Programa de Pós-Graduação em Informática, Universidade Federal de Alagoas, Maceió, 2017.
Tipo de Acesso: Acesso Aberto
URI: http://www.repositorio.ufal.br/handle/riufal/2517
Data do documento: 9-Out-2017
Aparece nas coleções:IC - Instituto de Computação

Arquivos associados a este item:
Arquivo Descrição TamanhoFormato 
A disciplinaridade das anotações condicionais de pré-processamento #ifdef TAG Não #endif importa.pdf3,24 MBAdobe PDFVisualizar/Abrir


Os itens no repositório estão protegidos por copyright, com todos os direitos reservados, salvo quando é indicado o contrário.