449 research outputs found

    On automatic class insertion with overloading

    Get PDF
    Also published in Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA)International audienceSeveral algorithms [Cas92, MS89, Run92, DDHL94a, DDHL95, GMM95] have been proposed to automatically insert a class into an inheritance hierarchy. But actual hierarchies all include overriden and overloaded properties that these algorithms handle either very partially or not at all. Partially handled means handled provided there is a separate given function f able to compare overloaded properties [DDHL95, GMM95].In this paper, we describe a new version of our algorithm (named Ares) which handles automatic class insertion more efficiently using such a function f. Although impossible to fully define, this function can be computed for a number of well defined cases of overloading and overriding. We give a classification of such cases and describe the computation process for a well-defined set of nontrivial cases.The algorithm preserves these important properties:- preservation of the maximal factorization of properties- preservation of the underlying structure (Galois lattice) of the input hierarchy- conservation of relevant classes of the input hierarchy with their properties

    Generating a Catalog of Unanticipated Schemas in Class Hierarchies using Formal Concept Analysis

    Get PDF
    International audienceContext: Inheritance is the cornerstone of object-oriented development, supporting conceptual modeling, subtype polymorphism and software reuse. But inheritance can be used in subtle ways that make complex systems hard to understand and extend, due to the presence of implicit dependencies in the inheritance hierarchy. Objective: Although these dependencies often specify well-known schemas (i.e., recurrent design or coding patterns, such as hook and template methods), new unanticipated dependency schemas arise in practice, and can consequently be hard to recognize and detect. Thus, a developer making changes or extensions to an object-oriented system needs to understand these implicit contracts defined by the dependencies between a class and its subclasses, or risk that seemingly innocuous changes break them. Method: To tackle this problem, we have developed an approach based on Formal Concept Analysis. Our FoCARE methodology (Formal Concept Analysis based-Reverse Engineering) identifies undocumented hi- erarchical dependencies in a hierarchy by taking into account the existing structure and behavior of classes and subclasses. Results: We validate our approach by applying it to a large and non-trivial case study, yielding a catalog of Hierarchy Schemas, each one composed of a set of dependencies over methods and attributes in a class hierarchy. We show how the discovered dependency schemas can be used not only to identify good design practices, but also to expose bad smells in design, thereby helping developers in initial reengineering phases to develop a first mental model of a system. Although some of the identified schemas are already documented in existing literature, with our approach based on Formal Concept Analysis (FCA), we are also able to identify previously unidentified schemas

    Desarrollo de Guías de Búsqueda de Metodologías del Proceso de Reingeniería de Aplicaciones Orientadas a Objetos

    Get PDF
    En la actualidad, las organizaciones no solo se enfrentan con el problema de reemplazar sus sistemas de información, sino que deben mantener un control de sus sistemas legacy. El mantenimiento de estos sistemas puede implicar realizar cambios para adaptarlo a nuevos requerimientos o nuevas tecnologías o bien, mejorar la calidad de los mismos. Para un adecuado mantenimiento de un sistema, es necesario aplicar reingeniería, que es definida por Chikofsky como la “recuperación de información sobre el diseño de un programa existente y el uso de esta información para reestructurar o reconstruir el programa existente”. Este proceso tiene como objetivo el de conseguir una mayor facilidad de mantenimiento en el futuro (mantenimiento preventivo). En un proceso de reingeniería completo identificaremos dos etapas: Reverse Enginnering y Forward Engineering. Debido a la complejidad de cada una de las etapas, durante los ultimos 20 anos han surgido diferentes metodologías que pueden aplicarse para obtener un proceso de reingeniería con calidad. Entonces se hace necesario realizar una evaluacion del estado del arte actual y desarrollar una guía que ayude a un desarrollador a elegir una metodología adecuada para mantener su sistema, dependiendo en que etapa de la reingeniería se encuentre. El aporte de este trabajo es el desarrollo de una guía de lectura con estrategias de busqueda para asistir a los desarrolladores en la elección de las metodologías de reingeniería adecuadas, dependiendo en que etapa de la reingeniería se halla el sistema. Específicamente en nuestro caso de estudio, esta guía esta basada en el estado del arte actual de metodologías de reingeniería que utilicen el Analisis de Conceptos Formales (ACF), como herramienta de base. A su vez, utilizaremos tambien el ACF como una técnica de clasificación para construir la guía mencionada. Se elige esta metodología debido a las ventajas que la misma provee para agrupar elementos basados en sus propiedades. Esto resulta vital para identificar metodologías con características similares y comprender como funciona cada propuesta de las publicaciones analizadas en el estado del arte.Sociedad Argentina de Informática e Investigación Operativ

    Change decision support:extraction and analysis of late architecture changes using change characterization and software metrics

    Get PDF
    Software maintenance is one of the most crucial aspects of software development. Software engineering researchers must develop practical solutions to handle the challenges presented in maintaining mature software systems. Research that addresses practical means of mitigating the risks involved when changing software, reducing the complexity of mature software systems, and eliminating the introduction of preventable bugs is paramount to today’s software engineering discipline. Giving software developers the information that they need to make quality decisions about changes that will negatively affect their software systems is a key aspect to mitigating those risks. This dissertation presents work performed to assist developers to collect and process data that plays a role in change decision-making during the maintenance phase. To address these problems, developers need a way to better understand the effects of a change prior to making the change. This research addresses the problems associated with increasing architectural complexity caused by software change using a twoold approach. The first approach is to characterize software changes to assess their architectural impact prior to their implementation. The second approach is to identify a set of architecture metrics that correlate to system quality and maintainability and to use these metrics to determine the level of difficulty involved in making a change. The two approaches have been combined and the results presented provide developers with a beneficial analysis framework that offers insight into the change process

    Generating a catalog of unanticipated schemas in class hierarchies using Formal Concept Analysis

    Get PDF
    Context: Inheritance is the cornerstone of object-oriented development, supporting conceptual modeling, subtype polymorphism and software reuse. But inheritance can be used in subtle ways that make complex systems hard to understand and extend, due to the presence of implicit dependencies in the inheritance hierarchy. Objective: Although these dependencies often specify well-known schemas (i.e., recurrent design or coding patterns, such as hook and template methods), new unanticipated dependency schemas arise in practice, and can consequently be hard to recognize and detect. Thus, a developer making changes or extensions to an object-oriented system needs to understand these implicit contracts defined by the dependencies between a class and its subclasses, or risk that seemingly innocuous changes break them. Method: To tackle this problem, we have developed an approach based on Formal Concept Analysis. Our Formal Concept Analysis based-Reverse Engineering methodology (FoCARE) identifies undocumented hierarchical dependencies in a hierarchy by taking into account the existing structure and behavior of classes and subclasses. Results: We validate our approach by applying it to a large and non-trivial case study, yielding a catalog of hierarchy schemas, each one composed of a set of dependencies over methods and attributes in a class hierarchy. We show how the discovered dependency schemas can be used not only to identify good design practices, but also to expose bad smells in design, thereby helping developers in initial reengineering phases to develop a first mental model of a system. Although some of the identified schemas are already documented in existing literature, with our approach based on Formal Concept Analysis (FCA), we are also able to identify previously unidentified schemas. Conclusions: FCA is an effective tool because it is an ideal classification mining tool to identify commonalities between software artifacts, and usually these commonalities reveal known and unknown characteristics of the software artifacts. We also show that once a catalog of useful schemas stabilizes after several runs of FoCARE, the added cost of FCA is no longer needed.Laboratorio de Investigación y Formación en Informática AvanzadaComisión de Investigaciones Científicas de la provincia de Buenos Aire

    Renewal of a linear electrical network simulator into Ada

    Get PDF
    A dissertation submitted to the Faculty of Engineering, University of the Witwatersrand, Johannesburg, in fulfilment Of the requirements for the degree of Master of Science in Engineering. Johannesburg, 1993Renewal is the extraction of the intellectual content (algorithms, data structures) from an existing program, and then puilding a new more maiatainable program using more modem progra1Tlming methods and languages. A survey of software structure on maintenance. highlighted the different hierarchies produced by functional and object-oriented design methods. Elecsim, a linear circuit sL~ulator written in Pascal, was chosen as the existing program to be renewed, The new version follows the approach of decoupling the user interface and introducing an explicit scheduler. The object-oriented design technique is used extensively. Other issues addressed include online-help and. documentation for the program. Conclusions are drawn which are generally applicable from the specificlessons learnt from the Elecsim/Elector case study.MT201

    Feature-based generation of pervasive systems architectures utilizing software product line concepts

    Get PDF
    As the need for pervasive systems tends to increase and to dominate the computing discipline, software engineering approaches must evolve at a similar pace to facilitate the construction of such systems in an efficient manner. In this thesis, we provide a vision of a framework that will help in the construction of software product lines for pervasive systems by devising an approach to automatically generate architectures for this domain. Using this framework, designers of pervasive systems will be able to select a set of desired system features, and the framework will automatically generate architectures that support the presence of these features. Our approach will not compromise the quality of the architecture especially as we have verified that by comparing the generated architectures to those manually designed by human architects. As an initial step, and in order to determine the most commonly required features that comprise the widely most known pervasive systems, we surveyed more than fifty existing architectures for pervasive systems in various domains. We captured the most essential features along with the commonalities and variabilities between them. The features were categorized according to the domain and the environment that they target. Those categories are: General pervasive systems, domain-specific, privacy, bridging, fault-tolerance and context-awareness. We coupled the identified features with well-designed components, and connected the components based on the initial features selected by a system designer to generate an architecture. We evaluated our generated architectures against architectures designed by human architects. When metrics such as coupling, cohesion, complexity, reusability, adaptability, modularity, modifiability, packing density, and average interaction density were used to test our framework, our generated architectures were found comparable, if not better than the human generated architectures
    corecore