7 research outputs found

    Levenshtein edit distance-based type III clone detection using metric trees

    Get PDF
    This paper presents an original technique for clone detection with metric trees using Levenshtein distance as the metric defined between two code fragments. This approach achieves a faster empirical performance. The resulting clones may be found with varying thresholds allowing type 3 clone detection. Experimental results of metric trees performance as well as clone detection statistics on an open source system are presented and give promising perspectives

    Towards Clone Detection in UML Domain Models

    Get PDF

    Analyse des propriétés structurelles et computationnelles des clones logiciels

    Get PDF
    RÉSUMÉ La détection des clones est une discipline dynamique du génie logiciel consacrée à la recherche et l’analyse de similitude à l’intérieur des logiciels. Ces similitudes peuvent être à l’intérieur de tous les artefacts d’un produit logiciel, mais cette discipline se consacre principalement à celles présentes dans le code source. Les travaux présentés dans ce mémoire sont consacrés à l’étude de certaines propriétés structurelles et computationnelles des clones logiciels syntaxiques et lexicaux ; les clones sémantiques ne sont pas formellement abordés dans ces travaux. Dans un premier temps, une analyse des relations structurelles entre les clones a été réalisée. Les clones considérés sont produit par la méthode de détection des clones basée sur les métriques d’AST. Contrairement à la très grande majorité des autres travaux présents dans la littérature, qui s’intéressent exclusivement aux fonctions ou aux méthodes comme unité minimale de clonage, ces travaux s’intéressent à la fois aux relations impliquant des fonctions et des blocs, engendrant ainsi trois relations d’intérêt : les clones fonction à fonction, bloc à bloc et fonction à bloc. Les conclusions de l’étude indiquent clairement l’intérêt de s’intéresser à ces relations et l’insuffisance de la réduction de l’espace de recherche composé de tous les fragments de code d’un programme à celui restreint aux fonctions. Les résultats présentés dépendent seulement partiellement de la méthode ; l’intérêt des relations présentées est indépendant tandis que les résultats spécifiques présentés sont dépendants. Dans un second temps, une étude a été réalisée sur l’applicabilité d’algorithmes écrits sur GPU pour le problème de postfiltrage des clones. Le filtrage est une pratique répandue dans les outils de détection de clonage pour améliorer la précision des résultats. La technique choisie ici est celle du filtrage avec le calcul de la plus longue sous-séquence commune (LCS). Cet algorithme se parallélise aisément et se porte sans heurt sur une architecture GPU; il est donc un candidat idéal. La conversion de l’algorithme classique de programmation dynamique pour le calcul de la LCS est présenté avec plusieurs considérations techniques pour faciliter son implémentation. Les résultats de l’application de l’algorithme sur deux systèmes de grande taille, Tomcat et Eclipse, sont présentés. Les temps d’exécution de l’algorithme sur GPU sont inférieurs à ceux obtenus sur CPU, même si le facteur d’accélération total est relativement petit (de l’ordre de 1.2). Cette accélération est inférieure aux attentes et quelques pistes d’explication sont fournies. Dans un dernier temps, la réalisation d’oracles automatisés basés sur la distance de Levenshtein est présentée. Pour la détection des clones, un oracle consiste en un ensemble de clones jugé exact pour fin de comparaison de différents outils. Ce résultat est une grande nouveauté puisqu’il prouve l’applicabilité de la distance de Levenshtein sur de grands systèmes en utilisant une quantité raisonnable de ressources. Pour arriver à calculer ces oracles, les fragments des systèmes sont insérés dans un arbre de métriques qui se construit en répartissant les fragments en fonction de leur distance de Levenshtein. L’utilisation des arbres de métriques dans des expériences de détection des clones est une nouveauté et les oracles obtenus sont prometteurs. Différentes statistiques sur les oracles sont présentées. On remarque selon ces chiffres que le nombre de pairs de clones est très petit par rapport au nombre de paires total possible dans un système. Cela explique le gain de performance notable de la nouvelle méthode présentée par rapport à une recherche exhaustive.---------- ABSTRACT Clone detection is a widely known research area of software engineering, which goal is to enhance programs understanding and detect potential bugs as well as re-factoring opportunities. The focus of this research area is on finding and analyzing self-similarities in source code. This thesis focuses on structural and computational properties of clones. First, a structural classification scheme of clones is presented. Many studies have researched properties of function clones. These studies did not take in consideration the possible presence of clones in smaller or bigger computational unit. Moreover, they relied on the hypothesis that clone code preserves completely the syntactic structure between fragments. To challenge this hypothesis, classification scheme and algorithm are presented in this work and are applied to clone sets of different systems. Results show that clones can belong to at least three types of structural relationship: method-method, block-block, and method-block. Examples are provided and support the usefulness of such classification. As a result, it mitigates the choice of performing clone analysis only on functions and suggest to focus on other computational units. Second, an attempt to port some clone-related computation to GPU is presented. To enhance results quality, it is often required to filter clone analysis results with precise but computationally expensive algorithm. The length of the longest common sub-sequence is a good candidate for such a filter and is used by many in the literature. However, its computational cost is prohibitive in many cases. To overcome the cost, a port on GPU of the algorithm specialized for clone detection is proposed. The observed execution times suggest however that little gain is obtained for clone filtering problems. Discussion of this unexpected result is provided along with ideas of other possible GPU applications to clone detections. Finally, an original algorithm to compute clone oracles is presented. An oracle is a set of clones presumed to be of good quality and used to benchmark clone detection tools results quality. This result is of great importance to the clone community as it provides the first automatically-generated oracle based on an objective algebraic criterion. It also gives insight on computational difficulties of computing good clone results. The key point of the technique is to observe the computational bottleneck of exhaustive search is the space search size and not the distance computation, even for complex distance. Using this knowledge, a metric tree-based algorithm is presented to compute oracles. Details of the computed oracles are presented. After these topics discussions, the thesis is concluded with future research possibilities

    Leveraging Software Clones for Software Comprehension: Techniques and Practice

    Get PDF
    RÉSUMÉ Le corps de cette thèse est centré sur deux aspects de la détection de clones logiciels: la détection et l’application. En détection, la contribution principale de cette thèse est un nouveau détecteur de clones conçu avec la librairie mtreelib, elle-même développée expressément pour ce travail. Cette librairie implémente un arbre de métrique général, une structure de donnée spécialisée dans la division des espaces de métriques dans le but d’accélérer certaines requêtes communes, comme les requêtes par intervalles ou les requêtes de plus proche voisin. Cette structure est utilisée pour construire un détecteur de clones qui approxime la distance de Levenshtein avec une forte précision. Une brève évaluation est présentée pour soutenir cette précision. D’autres résultats pertinents sur les métriques et la détection incrémentale de clones sont également présentés. Plusieurs applications du nouveau détecteur de clones sont présentés. Tout d’abord, un algorithme original pour la reconstruction d’informations perdus dans les systèmes de versionnement est proposé et testé sur plusieurs grands systèmes. Puis, une évaluation qualitative et quantitative de Firefox est faite sur la base d’une analyse du plus proche voisin; les courbes obtenues sont utilisées pour mettre en lumière les difficultés d’effectuer une transition entre un cycle de développement lent et rapide. Ensuite, deux expériences industrielles d’utilisation et de déploiement d’une technologie de détection de clonage sont présentés. Ces deux expériences concernent les langages C/C++, Java et TTCN-3. La grande différence de population de clones entre C/C++ et Java et TTCN-3 est présentée. Finalement, un résultat obtenu grâce au croisement d’une analyse de clones et d’une analyse de flux de sécurité met en lumière l’utilité des clones dans l’identification des failles de sécurité. Le travail se termine par une conclusion et quelques perspectives futures.----------ABSTRACT This thesis explores two topics in clone analysis: detection and application. The main contribution in clone detection is a new clone detector based on a library called mtreelib. This library is a package developed for clone detection that implements the metric data structure. This structure is used to build a clone detector that approximates the Levenshtein distance with high accuracy. A small benchmark is produced to assess the accuracy. Other results from these regarding metrics and incremental clone detection are also presented. Many applications of the clone detector are introduced. An original algorithm to reconstruct missing information in the structure of software repositories is described and tested with data sourced from large existing software. An insight into Firefox is exposed showing the quantity of change between versions and the link between different release cycle types and the number of bugs. Also, an analysis crossing the results from pattern traversal, flow analysis and clone detection is presented. Two industrial experiments using a different clone detector, CLAN, are also presented with some developers’ perspectives. One of the experiments is done on a language never explored in clone detection, TTCN-3, and the results show that the clone population in that language differs greatly from other well-known languages, like C/C++ and Java. The thesis concludes with a summary of the findings and some perspectives for future research
    corecore