31 |
A Model-driven approach to formal refactoringLima Massoni, Tiago 31 January 2008 (has links)
Made available in DSpace on 2014-06-12T15:51:08Z (GMT). No. of bitstreams: 2
arquivo2011_1.pdf: 1679074 bytes, checksum: c82d3e4381d7c70bcfaffe3bf1eddd78 (MD5)
license.txt: 1748 bytes, checksum: 8a4605be74aa9ea9d79846c1fba20a33 (MD5)
Previous issue date: 2008 / Coordenação de Aperfeiçoamento de Pessoal de Nível Superior / Como qualquer outra tarefa evolucionária, a aplicação de refatoramentos em software
orientado a objetos normalmente afeta código-fonte e seus modelos relacionados, aumentando
a dificuldade de manutenção de artefatos corretos e consistentes. Devido à
distância de representação entre artefatos de modelagem e programação, o esforço ligado
a refatoramentos logo torna-se duplicado e custoso. Neste contexto, suporte de
ferramentas utilizado atualmente, em especial ferramentas de Round-Trip Engineering
(RTE), falha em automatizar tarefas de evolução. Consequentemente, a maioria dos
projetos de software descarta artefatos de modelagem precocemente, adotando abordagens
centradas unicamente em código-fonte. Esta tese propõe uma abordagem formal
para consistentemente refatorar modelos de objeto e programas orientados a objetos,
baseando o refatoramento apenas em modelos de objetos. Refatoramento de modelos
é fundamentado com transformações formais primitivas { leis de modelagem { que são
garantidamente preservadoras de semântica. Cada refatoramento aplicado a um modelo
de objetos é associado a uma sequência semi-automática de aplicações de leis de
programação preservadoras de comportamento, chamadas estrategias. Estrategias são
aplicadas na dependência de um relacionamento especifico de conformidade entre modelos
de objetos e programas, que devem satisfazer também um dado grau de confinamento.
Este trabalho formaliza 14 estratregias, duas para cada lei de modelagem que afeta estruturas
do programa. Estas estratregias são formalizadas como táticas de refinamento.
Desta forma, refatoramento correto de programas pode ser realizado com reduzida intervenção
manual do desenvolvedor, baseado apenas nas transformações que o mesmo
aplicou ao modelo. Neste cenario, refatoramentos complexos que afetam as principais
estruturas do programa podem ser aplicados a um artefato de mais alto nível de abstra
ção, deixando a atualização semi-automática dos detalhes de implementação para
as estratregias. Além disso, invariantes do modelo podem ser usados para aprimorar
ferramentas especializadas em refatoramento, já que modelos de objetos oferecem informação
semântica que permite refatoramentos automáticos mais poderosos. Esta tese
considera Alloy como linguagem de modelagem formal, além de uma linguagem de programação
similar a Java que chamamos BN. Para esta linguagem, introduzimos quatro
novos refatoramentos e leis de programação orientada a objetos, com suas provas e
derivações correspondentes. Adicionalmente, as leis de programação foram aplicadas
em uma semântica de referências, mais próxima de linguages de programação utilizadas
na prática. Com o intuito de delimitar a aplicabilidade desta abordagem, formalizamos
uma noção de conformidade entre modelos de objetos e programas, a partir de um
framework formal para definição de relacionamentos de conformidade; as definições formais
relacionadas foram especificadas e checadas quanto ao tipo na ferramenta PVS.
Além disso, estabelecemos e provamos manualmente um teorema para a corretude das
estratregias, definindo que elas preservam comportamento e conformidade dos programas
refatorados. Mesmo sendo uma abordagem formal, temos a preocupação de discutir sua
utilização prática, além de aplica-la em três estudos de caso. Os problemas apresentados
nesta tese certamente serão enfrentados em qualquer abordagem de desenvolvimento dirigida
por modelos, no momento em que se lida com evolução
|
32 |
Basic Laws of Object ModelingGhevi, Rohit January 2004 (has links)
Made available in DSpace on 2014-06-12T15:59:18Z (GMT). No. of bitstreams: 2
arquivo5011_1.pdf: 1099518 bytes, checksum: 29a36710d81ec239b320f6d900a43fc5 (MD5)
license.txt: 1748 bytes, checksum: 8a4605be74aa9ea9d79846c1fba20a33 (MD5)
Previous issue date: 2004 / Leis de programação são importantes tanto para definir a semântica axiomática de linguagens
de programação quanto para auxiliar o processo de desenvolvimento de software.
De fato, estas leis podem ser utilizadas como base para práticas informais de desenvolvimento
como refactoring, que vem sendo popularizada por metodologias modernas, em
especial por Extreme Programming.
Embora não tenham sido suficientemente exploradas ainda, as leis de modelagem
provavelmente podem trazer benefícios similares, mas com um impacto positivo maior
em confiabilidade e produtividade, devido ao melhor suporte antecipado no processo de
desenvolvimento de software.
Em geral, transformação de modelos que preservam semântica são propostas de
maneira ad hoc tendo em vista que são difíceis de serem provadas que são consistentes
com respeito a semântica formal. Como consequência, pequenos equívocos podem levar
a transformações que deixem o modelo inconsistente.
Por estes motivos, este trabalho propõe um conjunto de leis de modelagem (que podem
ser vistas como transformações de modelos bidirecionais que preservam semântica)
que podem ser utilizas com segurança para se derivar leis mais complexas. Estas leis
descrevem transformações de modelos em Alloy, uma linguagem formal para modelagem
orientada a objetos. Além disso, será mostrada como estas leis podem ser utilizadas para
refatorar especificações em Alloy. Com o intuito de se verificar a consistência das leis,
foi proposta uma semântica denotacional para Alloy, utilizando a própria linguagem e
uma noção de equivalência indicando quando dois modelos em Alloy possuem a mesma
semântica. Por fim, o Alloy Analyzer, ferramenta utilizada para fazer análises em modelos
em Alloy, foi estendida com algumas das leis básicas propostas. Como resultado,
algumas diretrizes para a implementação de sistemas de transformação foram propostas
|
33 |
Refaktoring v PHP / PHP refactoringMartišek, Jiří January 2012 (has links)
This thesis deals with a methodology for PHP web applications refactoring. The main objective is to propose such a methodology, and to apply it on a real project. The first chapter contains objectives, restrictions and contributions of the thesis. The research of the existing literature on similar topics follows in the second chapter. The third chapter comments on selected software development methodologies' approach to refactoring. The fourth chapter describes known code smells, and adds some new ones appearing particularly in PHP. Specifics of PHP refactoring are also described. The fifth chapter deals with the methodology proposal itself. It sums up requirements, deployment assumptions, the methodology principles and general characteristics. The next part contains the recommended procedure of PHP web applications refactoring with its parts commented farther on. These parts are mainly code smells identification techniques, prioritization and finally best practices. The chapter ends with this methodology deployment recommendations. The sixth chapter shows a practical usage of the proposed methodology when refactoring a real web application. The performed steps are explained in terms of the methodology. The chapter closes with observations gained during this refactoring.
|
34 |
A critical analysis of two refactoring toolsDrozdz, Martin Zbigniew 24 June 2008 (has links)
This study provides a critical analysis of refactoring by surveying the refactoring tools in IDEA and Eclipse. Ways are discussed to locate targets for refactorings, via detection of code smells from static code analysis in IDEA and during the compilation process in Eclipse. New code smells are defined as well as the refactorings needed to remove the code smells. The impacts the code smells have on design are well documented. Considerable effort is made to describe how these code smells and their refactorings can be used to improve design. Practical methods are provided to detect code smells in large projects such as Sun’s JDK. The methodology includes a classification scheme to categorise code smells by their value and complexity to handle large projects more efficiently. Additionally a detailed analysis is performed on the evolution of the JDK from a maintainability point of view. Code smells are used to measure maintainability in this instance. / Dissertation (MSc (Computer Science))--University of Pretoria, 2008. / Computer Science / unrestricted
|
35 |
Fine-grain transformations for refactoringSaadeh, Emmad I.M. 11 June 2010 (has links)
This thesis proposes a new approach to formalize refactorings, principally at the UML class diagram design level (but incorporating a limited amount of code-level information—basic access-related information). A set of abstract and atomic fine-grain transformations (FGTs) is defined as prototypical building blocks for constructing refactorings. The semantics of each FGT is specified in terms of its pre- and postcondition conjuncts. Various logical relationships between FGT pre- and postcondition conjuncts are fully catalogued. These include uni- and bidirectional sequential dependency relationships; absorbing and cancelling reduction relationships; and uni- and bi-directional conflict relationships. The principle container for FGTs is an FGT-list in which the ordering of FGTs respects the sequential relationships between them. Such a list is characterised by the set of FGT precondition conjuncts (which a system should satisfy if the FGTs are to be sequentially applied to the system) as well as the resulting postcondition conjuncts (that describe the effect of applying the list). In the thesis, twenty-nine commonly used primitive refactorings are specified as such FGT-lists, together with their associated FGT-enabling precondition conjuncts. Refactoring-level pre- and postconditions are also identified for each primitive refactoring FGT-list. These are, of course, required to guarantee behaviour preservation.<p. An alternative container for FGTs is defined, called an FGT-DAG. It is a directed acyclic graph with FGTs as nodes, and with arcs that reflect the sequential dependency relationships between constituent FGTs. An algorithm is provided to convert a list of FGTs into a corresponding set of FGT-DAGs. Thus design level refactorings specified as FGT-lists can be also be converted to corresponding sets of FGT-DAGs. The precondition for applying such a refactoring to a given system is specified at two levels: the FGT-enabling precondition conjuncts that apply to each FGT-DAG, and the refactoring-level precondition conjuncts. The thesis provides various algorithms that operate on FGT-DAGs. These include an algorithm to remove redundancies from an FGT-DAG. It also includes algorithms that operate on the elements of a set of FGT-DAGs: to detect sequential dependencies between these elements, to detect whether they are in deadlock, and to detect and possibly remove or modify FGTs causing conflicts between them. In addition, an algorithm is provided to build composite refactorings from primitive refactorings. It indicates how composite-level and FGT-enabling precondition conjuncts can be derived and utilised to avoid the rollback problem. A Prolog prototype FGT-based refactoring tool has been implemented. The tool stores all of the above-mentioned catalogued information as Prolog rules and facts. This includes the twenty-nine commonly used primitive refactorings (stored as Prolog FGT-lists) and their associated refactoring-level pre- and postcondition conjuncts. The tool also implements all the previously mentioned algorithms as Prolog procedures. The thesis thus establishes the foundations for a tool in which end users can create (and apply without rollback) not only composite refactorings, but also completely new refactorings whose semantics is constrained only by the fine-grained semantics of FGTs, rather than by the more course-grained semantics of primitive refactorings. Furthermore, using FGTs as refactoring building blocks (i.e. instead of primitive refactorings) means that redundancies and conflicts can be more accurately pin-pointed and removed; and opportunities for parallel execution are exposed at a more fine-grained level. These advantages come at the cost of having to carry out more computations because analysis has to take place at the FGT-level rather than at the refactoring-level. / Thesis (PhD)--University of Pretoria, 2009. / Computer Science / unrestricted
|
36 |
Analysis of Code Smells and Anomalies in Modern Web SoftwareCherkaoui, Elias January 2023 (has links)
Code anomalies, also known as code smells, are any characteristics in software code that indicate amore severe problem exists deep in the code. These anomalies do not always prevent a system fromfunctioning, but they can restrict development and increase the difficulty of maintaining the software.The idea of code anomalies in conventional software is the subject of many research papers. However,very few explicitly examine web application anomalies and offer solutions to web applicationanomalies. Additionally, there aren't enough studies looking at whether anomalies found inconventional software systems can also be found in web applications. Web application code anomaliesmay potentially differ from traditional software systems in a few ways. For instance, web applicationshave a client-server architecture that can create unique challenges for communication between theclient and server. This may result in code anomalies that relate to network delays or resource-intensiveoperations. Additionally, web applications often rely on third-party libraries and frameworks, whichcan introduce additional code anomalies. This study aims to fill the gaps mentioned above byinvestigating code anomalies in web applications using a systemic mapping study. This study usessystematic mapping to collect and analyze literature through predefined criteria and procedures.Furthermore, this study provides an overview of approaches and tools that can identify and detectanomalies, determine where code anomalies occur, and whether refactoring has been considered. Theresults of this study show that there’s a wide array of techniques to detect anomalies, code anomaliesoccur everywhere. Refactoring is a technique to solve code anomalies and while there are alreadymany refactoring techniques cataloged for traditional software, there is a lack of refactoringsspecifically cataloged for web applications.
|
37 |
Contribution à l'ingénierie des systèmes : Raffinement et Refactoring de spécifications UMLBen Ammar, Boulbaba 23 May 2012 (has links) (PDF)
La spécification de systèmes complexes est une tâche difficile qui ne peut être accomplie en une seule étape. Dans les méthodes formelles, le concept de raffinement a donné lieu à de nombreux travaux dans lesquels la preuve de la correction entre les différents états de spécifications joue un rôle important. L'activité de refactoring consiste à restructurer un modèle en vue d'améliorer certains facteurs de qualité, tout en préservant la cohérence de ce modèle. Cette thèse préconise l'utilisation de deux techniques de raffinement et de refactoring afin d'établir des modèles UML de qualité c'est-à-dire corrects par construction, extensibles, réutilisables et efficaces. En outre, elle plaide en faveur de l'utilisation conjointe UML (semi-formel) et B, Event-B et CSP (formels). Les principales contributions de cette thèse sont : proposition des patterns de raffinement de diagrammes de classes UML/OCL afin de guider le concepteur lors de la modélisation statique de son application et proposition des schémas de refactoring des modèles UML décrits par des diagrammes de classes, des contraintes OCL et des diagrammes d'états-transitions afin d'aider le concepteur lors de la restructuration des modèles UML.
|
38 |
Avaliação quantitativa de refatorações orientadas a aspectos / Quantitative assessment of aspect-oriented refactoringsPagliari, Luiza Figueiredo January 2007 (has links)
Diversas refatorações têm sido propostas nos últimos anos para os mais variados paradigmas de programação, dentre eles o orientado a objetos e o orientado a aspecto. Seus impactos em atributos de qualidade são diversos, porém nem sempre a descrição original da refatoração apresenta todos os impactos que ela pode ter. Assim, é importante definir métodos de avaliação de refatorações para obter seus impactos em diferentes atributos de qualidade. A literatura apresenta trabalhos que utilizam métricas de software para fazer isso através de medições antes e depois de refatorar o código, porém este tipo de avaliação não permite obter conclusões válidas para todos os contextos em que a refatoração for aplicada. Outros trabalhos obtêm impactos abrangentes de refatorações orientadas a objetos, porém não foram encontrados métodos aplicáveis a refatorações orientadas a aspectos. Assim, este trabalho propõe uma forma de avaliar refatorações orientadas a aspectos para obter impactos abrangentes de sua aplicação, definindo um processo para avaliar refatorações orientadas a aspectos através do uso de métricas. Ele divide as etapas da refatoração em alterações pontuais e mede o impacto dessas alterações nos valores de um conjunto de métricas. O processo é usado para avaliar um conjunto de refatorações existentes na literatura definidas com o objetivo de extrair interesses transversais para aspectos. Para isso, são usados como critério de avaliação métricas para medir separação de interesses, tamanho, acoplamento e coesão do software. Como resultado, tem-se o impacto da refatoração em cada uma das métricas selecionadas, o que permite saber como o código será alterado antes mesmo de aplicar a refatoração. / Several software refactorings have been proposed on the last years for different programming paradigms, like object-oriented and aspect-oriented. They have several impacts on quality attributes, but their descriptions don’t describe all of these impacts, so it is important to have methods to assess refactorings to get their impacts on different quality attributes. Some papers apply software metrics on code before and after using the refactoring, but this kind os assessment avoids getting valid conclusions for all contexts where the refactoring can be used. Other papers propose assessment methods that get general conclusions for object-oriented refactorings, but no methods were found for assessing aspect-oriented refactorings. This work presents a process to assess aspect-oriented refactorings using software metrics to get their impacts on different quality attributes. It splits the refactoring steps into basic changes and measures the effects of these changes on some metrics. The process is used to assess some aspect-oriented refactorings for extracting crosscutting concerns into aspects, having as criteria software metrics to measure separation of concerns, size, coupling and cohesion. As result, we have the impact of the refactoring on each of the metric chosen, and know the consequences of the refactoring on the code before applying it.
|
39 |
Avaliação quantitativa de refatorações orientadas a aspectos / Quantitative assessment of aspect-oriented refactoringsPagliari, Luiza Figueiredo January 2007 (has links)
Diversas refatorações têm sido propostas nos últimos anos para os mais variados paradigmas de programação, dentre eles o orientado a objetos e o orientado a aspecto. Seus impactos em atributos de qualidade são diversos, porém nem sempre a descrição original da refatoração apresenta todos os impactos que ela pode ter. Assim, é importante definir métodos de avaliação de refatorações para obter seus impactos em diferentes atributos de qualidade. A literatura apresenta trabalhos que utilizam métricas de software para fazer isso através de medições antes e depois de refatorar o código, porém este tipo de avaliação não permite obter conclusões válidas para todos os contextos em que a refatoração for aplicada. Outros trabalhos obtêm impactos abrangentes de refatorações orientadas a objetos, porém não foram encontrados métodos aplicáveis a refatorações orientadas a aspectos. Assim, este trabalho propõe uma forma de avaliar refatorações orientadas a aspectos para obter impactos abrangentes de sua aplicação, definindo um processo para avaliar refatorações orientadas a aspectos através do uso de métricas. Ele divide as etapas da refatoração em alterações pontuais e mede o impacto dessas alterações nos valores de um conjunto de métricas. O processo é usado para avaliar um conjunto de refatorações existentes na literatura definidas com o objetivo de extrair interesses transversais para aspectos. Para isso, são usados como critério de avaliação métricas para medir separação de interesses, tamanho, acoplamento e coesão do software. Como resultado, tem-se o impacto da refatoração em cada uma das métricas selecionadas, o que permite saber como o código será alterado antes mesmo de aplicar a refatoração. / Several software refactorings have been proposed on the last years for different programming paradigms, like object-oriented and aspect-oriented. They have several impacts on quality attributes, but their descriptions don’t describe all of these impacts, so it is important to have methods to assess refactorings to get their impacts on different quality attributes. Some papers apply software metrics on code before and after using the refactoring, but this kind os assessment avoids getting valid conclusions for all contexts where the refactoring can be used. Other papers propose assessment methods that get general conclusions for object-oriented refactorings, but no methods were found for assessing aspect-oriented refactorings. This work presents a process to assess aspect-oriented refactorings using software metrics to get their impacts on different quality attributes. It splits the refactoring steps into basic changes and measures the effects of these changes on some metrics. The process is used to assess some aspect-oriented refactorings for extracting crosscutting concerns into aspects, having as criteria software metrics to measure separation of concerns, size, coupling and cohesion. As result, we have the impact of the refactoring on each of the metric chosen, and know the consequences of the refactoring on the code before applying it.
|
40 |
Avaliação quantitativa de refatorações orientadas a aspectos / Quantitative assessment of aspect-oriented refactoringsPagliari, Luiza Figueiredo January 2007 (has links)
Diversas refatorações têm sido propostas nos últimos anos para os mais variados paradigmas de programação, dentre eles o orientado a objetos e o orientado a aspecto. Seus impactos em atributos de qualidade são diversos, porém nem sempre a descrição original da refatoração apresenta todos os impactos que ela pode ter. Assim, é importante definir métodos de avaliação de refatorações para obter seus impactos em diferentes atributos de qualidade. A literatura apresenta trabalhos que utilizam métricas de software para fazer isso através de medições antes e depois de refatorar o código, porém este tipo de avaliação não permite obter conclusões válidas para todos os contextos em que a refatoração for aplicada. Outros trabalhos obtêm impactos abrangentes de refatorações orientadas a objetos, porém não foram encontrados métodos aplicáveis a refatorações orientadas a aspectos. Assim, este trabalho propõe uma forma de avaliar refatorações orientadas a aspectos para obter impactos abrangentes de sua aplicação, definindo um processo para avaliar refatorações orientadas a aspectos através do uso de métricas. Ele divide as etapas da refatoração em alterações pontuais e mede o impacto dessas alterações nos valores de um conjunto de métricas. O processo é usado para avaliar um conjunto de refatorações existentes na literatura definidas com o objetivo de extrair interesses transversais para aspectos. Para isso, são usados como critério de avaliação métricas para medir separação de interesses, tamanho, acoplamento e coesão do software. Como resultado, tem-se o impacto da refatoração em cada uma das métricas selecionadas, o que permite saber como o código será alterado antes mesmo de aplicar a refatoração. / Several software refactorings have been proposed on the last years for different programming paradigms, like object-oriented and aspect-oriented. They have several impacts on quality attributes, but their descriptions don’t describe all of these impacts, so it is important to have methods to assess refactorings to get their impacts on different quality attributes. Some papers apply software metrics on code before and after using the refactoring, but this kind os assessment avoids getting valid conclusions for all contexts where the refactoring can be used. Other papers propose assessment methods that get general conclusions for object-oriented refactorings, but no methods were found for assessing aspect-oriented refactorings. This work presents a process to assess aspect-oriented refactorings using software metrics to get their impacts on different quality attributes. It splits the refactoring steps into basic changes and measures the effects of these changes on some metrics. The process is used to assess some aspect-oriented refactorings for extracting crosscutting concerns into aspects, having as criteria software metrics to measure separation of concerns, size, coupling and cohesion. As result, we have the impact of the refactoring on each of the metric chosen, and know the consequences of the refactoring on the code before applying it.
|
Page generated in 0.0701 seconds