14,822 research outputs found

    A Taxonomy for a Constructive Approach to Software Evolution

    Get PDF
    In many software design and evaluation techniques, either the software evolution problem is not systematically elaborated, or only the impact of evolution is considered. Thus, most of the time software is changed by editing the components of the software system, i.e. breaking down the software system. The software engineering discipline provides many mechanisms that allow evolution without breaking down the system; however, the contexts where these mechanisms are applicable are not taken into account. Furthermore, the software design and evaluation techniques do not support identifying these contexts. In this paper, we provide a taxonomy of software evolution that can be used to identify the context of the evolution problem. The identified contexts are used to retrieve, from the software engineering discipline, the mechanisms, which can evolve the software software without breaking it down. To build such a taxonomy, we build a model for software evolution and use this model to identify the factors that effect the selection of software evolution\ud mechanisms. Our approach is based on solution sets, however; the contents of these sets may vary at different stages of the software life-cycle. To address this problem, we introduce perspectives; that are filters to select relevant elements from a solution set. We apply our taxonomy to a parser tool to show how it coped with problematic evolution problems

    Open Programming Language Interpreters

    Get PDF
    Context: This paper presents the concept of open programming language interpreters and the implementation of a framework-level metaobject protocol (MOP) to support them. Inquiry: We address the problem of dynamic interpreter adaptation to tailor the interpreter's behavior on the task to be solved and to introduce new features to fulfill unforeseen requirements. Many languages provide a MOP that to some degree supports reflection. However, MOPs are typically language-specific, their reflective functionality is often restricted, and the adaptation and application logic are often mixed which hardens the understanding and maintenance of the source code. Our system overcomes these limitations. Approach: We designed and implemented a system to support open programming language interpreters. The prototype implementation is integrated in the Neverlang framework. The system exposes the structure, behavior and the runtime state of any Neverlang-based interpreter with the ability to modify it. Knowledge: Our system provides a complete control over interpreter's structure, behavior and its runtime state. The approach is applicable to every Neverlang-based interpreter. Adaptation code can potentially be reused across different language implementations. Grounding: Having a prototype implementation we focused on feasibility evaluation. The paper shows that our approach well addresses problems commonly found in the research literature. We have a demonstrative video and examples that illustrate our approach on dynamic software adaptation, aspect-oriented programming, debugging and context-aware interpreters. Importance: To our knowledge, our paper presents the first reflective approach targeting a general framework for language development. Our system provides full reflective support for free to any Neverlang-based interpreter. We are not aware of any prior application of open implementations to programming language interpreters in the sense defined in this paper. Rather than substituting other approaches, we believe our system can be used as a complementary technique in situations where other approaches present serious limitations

    SUPPORTING FUNCTIONALITY-BASED DESIGN IN COMPUTER-AIDED DESIGN SYSTEMS

    Get PDF
    Designs are conceptualized in terms of the functions they need to accomplish. The need for a new product design arises as a result of the identification of a new functionality to be accomplished by the product. That is, design is functionality driven. However, existing CAD tools are not equipped to capture functionality or reason in such a fashion to support design for product functionality. This research proposes a new design formalism to enable functionality-driven design of mechanically engineered products. This procedure provides a methodology that allows a designer to model product functionality and to carry out conceptual design with the aid of a computer. It also serves as a bridging tool between the conceptual design phase and detailed design phase of a product. Thus, the primary objective of this research is to develop a methodology that will support the following activities in CAD systems: functionality modeling, functionality data structuring, and form conceptualization.The functionality modeling methodology developed in this work includes the use of operands, operators, and coupling bonds to describe product functionality in CAD systems. The Universal Modeling Language (an object-oriented programming technique) is used to model product functionality in computer systems. The tools developed in this research provide a means of modeling and propagating product functionality information to downstream design activities. The propagation of functionality as a constraint is achieved using Extensible Markup Language (XML) data files. These tools also provide a mechanism for verifying and enforcing constraints on solid CAD models. The functionality definition interface is implemented with a customized Microsoft Visio graphics engine.The tools developed in this research provide a means of modeling and propagating product functionality information to downstream design activities. It also provides a mechanism for verifying and enforcing constraints on solid CAD models. The functionality definition interface is implemented with a customized Microsoft Visio graphics engine
    corecore