5 research outputs found

    model driven reverse engineering approaches a systematic literature review

    Get PDF
    This paper explores and describes the state of the art for what concerns the model-driven approaches proposed in the literature to support reverse engineering. We conducted a systematic literature review on this topic with the aim to answer three research questions. We focus on various solutions developed for model-driven reverse engineering, outlining in particular the models they use and the transformations applied to the models. We also consider the tools used for model definition, extraction, and transformation and the level of automation reached by the available tools. The model-driven reverse engineering approaches are also analyzed based on various features such as genericity, extensibility, automation of the reverse engineering process, and coverage of the full or partial source artifacts. We describe in detail and compare fifteen approaches applying model-driven reverse engineering. Based on this analysis, we identify and indicate some hints on choosing a model-driven reverse engineering approach from the available ones, and we outline open issues concerning the model-driven reverse engineering approaches

    Automated model-based spreadsheet debugging

    Get PDF
    Spreadsheets are interactive data organization and calculation programs that are developed in spreadsheet environments like Microsoft Excel or LibreOffice Calc. They are probably the most successful example of end-user developed software and are utilized in almost all branches and at all levels of companies. Although spreadsheets often support important decision making processes, they are, like all software, prone to error. In several cases, faults in spreadsheets have caused severe losses of money. Spreadsheet developers are usually not educated in the practices of software development. As they are thus not familiar with quality control methods like systematic testing or debugging, they have to be supported by the spreadsheet environment itself to search for faults in their calculations in order to ensure the correctness and a better overall quality of the developed spreadsheets. This thesis by publication introduces several approaches to locate faults in spreadsheets. The presented approaches are based on the principles of Model-Based Diagnosis (MBD), which is a technique to find the possible reasons why a system does not behave as expected. Several new algorithmic enhancements of the general MBD approach are combined in this thesis to allow spreadsheet users to debug their spreadsheets and to efficiently find the reason of the observed unexpected output values. In order to assure a seamless integration into the environment that is well-known to the spreadsheet developers, the presented approaches are implemented as an extension for Microsoft Excel. The first part of the thesis outlines the different algorithmic approaches that are introduced in this thesis and summarizes the improvements that were achieved over the general MBD approach. In the second part, the appendix, a selection of the author's publications are presented. These publications comprise (a) a survey of the research in the area of spreadsheet quality assurance, (b) a work describing how to adapt the general MBD approach to spreadsheets, (c) two new algorithmic improvements of the general technique to speed up the calculation of the possible reasons of an observed fault, (d) a new concept and algorithm to efficiently determine questions that a user can be asked during debugging in order to reduce the number of possible reasons for the observed unexpected output values, and (e) a new method to find faults in a set of spreadsheets and a new corpus of real-world spreadsheets containing faults that can be used to evaluate the proposed debugging approaches

    Pervasive computing reference architecture from a software engineering perspective (PervCompRA-SE)

    Get PDF
    Pervasive computing (PervComp) is one of the most challenging research topics nowadays. Its complexity exceeds the outdated main frame and client-server computation models. Its systems are highly volatile, mobile, and resource-limited ones that stream a lot of data from different sensors. In spite of these challenges, it entails, by default, a lengthy list of desired quality features like context sensitivity, adaptable behavior, concurrency, service omnipresence, and invisibility. Fortunately, the device manufacturers improved the enabling technology, such as sensors, network bandwidth, and batteries to pave the road for pervasive systems with high capabilities. On the other hand, this domain area has gained an enormous amount of attention from researchers ever since it was first introduced in the early 90s of the last century. Yet, they are still classified as visionary systems that are expected to be woven into people’s daily lives. At present, PervComp systems still have no unified architecture, have limited scope of context-sensitivity and adaptability, and many essential quality features are insufficiently addressed in PervComp architectures. The reference architecture (RA) that we called (PervCompRA-SE) in this research, provides solutions for these problems by providing a comprehensive and innovative pair of business and technical architectural reference models. Both models were based on deep analytical activities and were evaluated using different qualitative and quantitative methods. In this thesis we surveyed a wide range of research projects in PervComp in various subdomain areas to specify our methodological approach and identify the quality features in the PervComp domain that are most commonly found in these areas. It presented a novice approach that utilizes theories from sociology, psychology, and process engineering. The thesis analyzed the business and architectural problems in two separate chapters covering the business reference architecture (BRA) and the technical reference architecture (TRA). The solutions for these problems were introduced also in the BRA and TRA chapters. We devised an associated comprehensive ontology with semantic meanings and measurement scales. Both the BRA and TRA were validated throughout the course of research work and evaluated as whole using traceability, benchmark, survey, and simulation methods. The thesis introduces a new reference architecture in the PervComp domain which was developed using a novel requirements engineering method. It also introduces a novel statistical method for tradeoff analysis and conflict resolution between the requirements. The adaptation of the activity theory, human perception theory and process re-engineering methods to develop the BRA and the TRA proved to be very successful. Our approach to reuse the ontological dictionary to monitor the system performance was also innovative. Finally, the thesis evaluation methods represent a role model for researchers on how to use both qualitative and quantitative methods to evaluate a reference architecture. Our results show that the requirements engineering process along with the trade-off analysis were very important to deliver the PervCompRA-SE. We discovered that the invisibility feature, which was one of the envisioned quality features for the PervComp, is demolished and that the qualitative evaluation methods were just as important as the quantitative evaluation methods in order to recognize the overall quality of the RA by machines as well as by human beings

    Generic Roles: Reducing Code Replication

    Get PDF
    In partial fulfillment of requirements for the degree of Doctor of Philosophy in Informatics Enginnering by the Doctoral Program in Informatics EngineeringFor many years the concept of modularity has been considered a very important part in the development of large software systems. Modules help to manage the system’s complexity by decomposing it in smaller parts. These parts can be assigned to individuals or teams for development. Modules hide the information they manipulate behind an interface, allowing its developers to develop the module independently of any other module in the system. Developers can change the information their module manipulates and even the way it does it without the need to consult other developers, and breaking their code. This enables the interchangeability of modules, allowing one module to be substituted by another without further modifications to the system. It also reduces compiling time as modules can be precompiled. The concept of modularization lead to the dawn of several decompositions techniques, each with its own ideas on how a system should be decomposed into modules. For each decomposition technique and to help programmers extract the most benefits from modularization, several programming languages provide support for expressing modules. In object-oriented decomposition, for example, several programming languages provide support to define abstract data types, usually in the form of classes. Ideally, each module would capture one coherent concept that would deal with a set of coherent concerns related to the module’s concept. Unfortunately that is not always true. Sometimes, modules need to interact in more complicated and intertwined manners. Sometimes, the need to communicate with other modules lead one module to assume concerns that are not related to its main concern. This is, as argued by many authors, because only a single decomposition strategy is used . To avoid this we may need to use more than one decompositions strategy or extend an existing one. Code clones are an outcome of the lack of other decomposition strategies, among others sources. Code cloning in a system is considered a bad thing with multiple drawbacks. One of the more known problems is the inconsistent maintenance: bugs are fixed in some clones, but not in others. Another major objection to the use of cloning is that it degrades the design of the system over time. Awkward, verbose designs lead to the accumulation of irrelevant code that ends up obscuring the original intent of the code. In this dissertation we study the reduction of the code replication using modularity as a cornerstone around which our solution must be based. We intend to reduce code replication using another kind of module, which we can use to extend the object-oriented strategy. The module that we will study is the role. Roles have been used to specify na object’s behavior related to a specific collaboration in the modeling stages of a system. But in the implementation that specification is merged with all the object’s other collaboration behaviors, inside a class. It is a purpose of this dissertation to take the specification from the design phase to the implementation phase and study its impact on the code replication problem. The solution proposed in this dissertation is to use roles as a way to compose classes and thus reducing code replication. To pursue this goal a role language is designed and a suitable compiler is implemented. The JavaStage language allows a programmer to “program with roles”. It introduces several features like a powerful renaming mechanism and to state role dependencies easily. Using JavaStage and roles we were able to identify several refactorings that enables us to write the replicated code as roles thus removing the code clone. The use of these refactorings proved their value when applied to a series of case studies developed to assess the amount of duplicated code that could be removed using roles. As already mentioned, the modularity principles were followed throughout the design of the proposed solution and, to assess the reusability of roles, a role library was started. Its evolution corroborates the idea that roles are reusable modules and can be used as a compositional element.A modularidade é, já há muitos anos, vista como uma peça importante no desenvolvimento de sistemas informáticos de grandes dimensões. Os módulos ajudam a gerir a complexidade do sistema decompondo-o em várias partes mais pequenas que podem ser adjudicadas a um indivíduo ou a uma equipa para desenvolvimento. Os módulos encapsulam a informação que manipulam e o modo como a manipulam, permitindo assim aos seus autores desenvolvêlo independentemente dos outros módulos do sistema. Os autores de um módulo podem, inclusivé, alterar o modo de representação da informação à medida das suas necessidades, ou até alterar o modo de a manipular, sem consultar os autores dos outros módulos e sem quebrar os módulos destes. Isto permite a permutação de módulos, podendo assim um módulo ser substituído por outro sem que o sistema sofra outras alterações. Também permite um tempo de compilação mais rápido devido a poder-se pré-compilar os vários módulos. O conceito de modularização levou ao surgimento de várias estratégias de decomposição, cada uma com as suas ideias sobre como um sistema deveria ser decomposto em módulos. Para cada uma destas estragégias, e para ajudar os programadores a usufruir ao máximo dos benefícios da modularização, surgiram várias linguagens de programação com suporte para a representação de módulos. Por exemplo, na decomposição orientada a objetos, muitas linguagens permitem a definição de tipos abstratos de dados, normalmente na forma de classes. Idealmente, cada módulo capturaria um conceito coerente e esse conceito lidaria com um conjunto coerente de responsabilidades ligadas ao conceito principal do módulo. Infelizmente, não é assim. Por vezes os módulos precisam de interagir de forma mais complexa e interligada com outros módulos. Outras vezes a necessidade de comunicar com outros módulos leva-os a assumir responsabilidades que não estão de acordo com a sua “razão de ser”. Isto, como é argumentado por muitos autores, é uma consequência do uso de uma única estratégia de decomposição. Para evitar isto provavelmente necessita-se de uma outra forma de decomposição ou expandir uma já existente. O aparecimento de clones no código é uma consequência do uso de uma única estratégia de decomposição, entre outras causas. A presença de código repetido num sistema é considerada um mau indício e acarta muitas consequências nefastas. Um dos problemas mais conhecidos é a inconsistência na manutenção: os bugs são reparados em algumas instâncias do código repetido mas não em todas. Outro grande problema do uso de cópias de código é que o seu uso irá degradar o design do sistema a longo prazo. Isto leva à acumulação de código irrelevante que acaba por obscurecer o objectivo inicial do código. Nesta tese tenta-se estudar a redução de código repetido usando a modularidade como “pedra de toque” em torno da qual a nossa solução se baseará. Tencionámos reduzir a repetição de código usando outro tipo de módulo, que nos permita expandir a decomposição orientada a objetos. O módulo que iremos estudar será o role. Os roles têm vindo a ser usados para especificar o comportamento de um objeto em relação a outro objeto, dentro de uma colaboração, na etapa de modelação do sistema. Mas, na fase de implementação, essa especificação é agrupada com todos os comportamentos que o objeto exibe em todas as suas colaborações, dentro de uma classe. É um dos propósitos desta tese levar esta especificação desde a fase de modelação até à fase de implementação e estudar o seu impacto no problema de repetição de código. A solução proposta nesta dissertação é usar os roles como uma maneira de compor classes e assim reduzir a repetição de código. Para atingir este objectivo uma linguagem de programação que suporta roles será idealizada e um compilador adequado desenvolvido. A linguagem JavaStage permite a um programador “programar com roles”. Ela introduz algumas funcionalidades como um mecanismo de renomeação de métodos poderoso e uma forma de exprimir as dependências do role facilmente. Usando a JavaStage e os roles fomos capazes de identificar várias refactorings que nos permitem expressar o código presente nas várias repetições como roles e assim remover o código repetido associado. Estas refactorings mostraram o seu valor quando usadas numa série de casos de estudo que foram desenvolvidos com o propósito de avaliar a quantidade de código repetido que se poderia remover usando roles. Como já foi mencionado os princípios da modularidade foram seguidos ao longo da concepção da solução proposta e para avaliar a reutilização dos roles a construção de uma biblioteca de roles foi iniciada. A sua evolução corrobora a ideia de que os roles são módulos reutilizáveis e podem ser usados como um elemento composicional de classes

    Une approche systémique unifiée pour l’optimisation durable des systèmes socio-environnementaux: Ingénierie des systèmes de décision en univers incertain

    Get PDF
    Nowadays, the sustainability of human activities is a major worldwide concern. The challenge is to evaluate such activities not only in terms of efficiency and productivity, but also in terms of their economic, social, environmental, etc. durability. For this, the experts of these areas need to work collaboratively. In this context, human societies are facing several major challenges such as: (1) process a large amount of information whose volume increases exponentially (“big data”), (2) live in a both dynamic and imperfect real world, (3) predict and assess future states of its activities.The researches we have conducted in this thesis contribute in particular to the domain of decision systems engineering under uncertainty. We have chosen the field of general socio-environmental systems as subject of study, particularly the multidisciplinary field of agriculture. We propose a systemic approach for the sustainable optimization of socio-environmental systems: (1) the meta-modeling of socio-environmental systems, (2) the generic representation of data imperfection flowing in such systems, associated to a decision model in uncertain environment and finally (3) the simulation and the assessment of such systems in dynamic environment for the purpose of decision making by experts which we have illustrated by both a service-oriented architecture model and case studies applied to the agriculture domain.De nos jours, la durabilité des activités humaines devient une préoccupation majeure dans le monde entier. Il s’agit d’évaluer ces activités non seulement en matière d’efficacité et de productivité, mais aussi en ce qui concerne leurs durabilités économique, sociale, environnementale, etc. Pour ce faire, les experts de ces différents domaines doivent travailler en collaboration. Dans ce contexte, les sociétés humaines sont confrontées à plusieurs défis majeurs qui sont les suivants : (1) traiter de grandes quantités d’informations (« big data »), (2) évoluer dans un monde réel dynamique et imparfait, (3) prévoir et évaluer les états futurs de ses activités.Les recherches que nous avons menées dans cette thèse contribuent plus particulièrement au domaine de l’ingénierie des systèmes de décision en univers incertain. Nous prenons comme objet d'étude général le domaine des systèmes socio-environnementaux, et plus particulièrement le domaine pluridisciplinaire de l’agriculture. Nous proposons une approche systémique pour l’optimisation durable des systèmes socio-environnementaux : (1) la méta-modélisation des systèmes socio-environnementaux, (2) la représentation générique de l’imperfection des informations qui circulent dans ces systèmes, associée à un modèle de décision en contexte incertain et enfin (3) la simulation et l’évaluation de ces systèmes en environnement dynamique en vue de prises de décisions par des experts, que nous avons illustrée par un modèle d’architecture orientée service ainsi que des études de cas appliquées au domaine de l’agriculture
    corecore