1,022 research outputs found
Which Method-Stereotype Changes are Indicators of Code Smells?
A study of how method roles evolve during the lifetime of a software system is presented. Evolution is examined by analyzing when the stereotype of a method changes. Stereotypes provide a high-level categorization of a method\u27s behavior and role, and also provide insight into how a method interacts with its environment and carries out tasks. The study covers 50 open-source systems and 6 closed-source systems. Results show that method behavior with respect to stereotype is highly stable and constant over time. Overall, out of all the history examined, only about 10% of changes to methods result in a change in their stereotype. Examples of methods that change stereotype are further examined. A select number of these types of changes are indicators of code smells
Non-functional properties in the model-driven development of service-oriented systems
Systems based on the service-oriented architecture (SOA) principles have become an important cornerstone of the development of enterprise-scale software applications. They are characterized by separating functions into distinct software units, called services, which can be published, requested and dynamically combined in the production of business applications. Service-oriented systems (SOSs) promise high flexibility, improved maintainability, and simple re-use of functionality. Achieving these properties requires an understanding not only of the individual artifacts of the system but also their integration. In this context, non-functional aspects play an important role and should be analyzed and modeled as early as possible in the development cycle. In this paper, we discuss modeling of non-functional aspects of service-oriented systems, and the use of these models for analysis and deployment. Our contribution in this paper is threefold. First, we show how services and service compositions may be modeled in UML by using a profile for SOA (UML4SOA) and how non-functional properties of service-oriented systems can be represented using the non-functional extension of UML4SOA (UML4SOA-NFP) and the MARTE profile. This enables modeling of performance, security and reliable messaging. Second, we discuss formal analysis of models which respect this design, in particular we consider performance estimates and reliability analysis using the stochastically timed process algebra PEPA as the underlying analytical engine. Last but not least, our models are the source for the application of deployment mechanisms which comprise model-to-model and model-to-text transformations implemented in the framework VIATRA. All techniques presented in this work are illustrated by a running example from an eUniversity case study
Managing the consistency of distributed documents
Many businesses produce documents as part of their daily activities: software engineers
produce requirements specifications, design models, source code, build scripts and more;
business analysts produce glossaries, use cases, organisation charts, and domain ontology
models; service providers and retailers produce catalogues, customer data, purchase orders,
invoices and web pages.
What these examples have in common is that the content of documents is often semantically
related: source code should be consistent with the design model, a domain ontology
may refer to employees in an organisation chart, and invoices to customers should be consistent
with stored customer data and purchase orders. As businesses grow and documents
are added, it becomes difficult to manually track and check the increasingly complex relationships
between documents. The problem is compounded by current trends towards
distributed working, either over the Internet or over a global corporate network in large
organisations. This adds complexity as related information is not only scattered over
a number of documents, but the documents themselves are distributed across multiple
physical locations.
This thesis addresses the problem of managing the consistency of distributed and possibly
heterogeneous documents. “Documents” is used here as an abstract term, and does not
necessarily refer to a human readable textual representation. We use the word to stand
for a file or data source holding structured information, like a database table, or some
source of semi-structured information, like a file of comma-separated values or a document
represented in a hypertext markup language like XML [Bray et al., 2000]. Document
heterogeneity comes into play when data with similar semantics is represented in different
ways: for example, a design model may store a class as a rectangle in a diagram whereas
a source code file will embed it as a textual string; and an invoice may contain an invoice
identifier that is composed of a customer name and date, both of which may be recorded
and managed separately.
Consistency management in this setting encompasses a number of steps. Firstly, checks
must be executed in order to determine the consistency status of documents. Documents
are inconsistent if their internal elements hold values that do not meet the properties
expected in the application domain or if there are conflicts between the values of elements
in multiple documents. The results of a consistency check have to be accumulated and
reported back to the user. And finally, the user may choose to change the documents to
bring them into a consistent state.
The current generation of tools and techniques is not always sufficiently equipped to deal
with this problem. Consistency checking is mostly tightly integrated or hardcoded into tools, leading to problems with extensibility with respect to new types of documents.
Many tools do not support checks of distributed data, insisting instead on accumulating
everything in a centralized repository. This may not always be possible, due to organisational
or time constraints, and can represent excessive overhead if the only purpose of
integration is to improve data consistency rather than deriving any additional benefit.
This thesis investigates the theoretical background and practical support necessary to
support consistency management of distributed documents. It makes a number of contributions
to the state of the art, and the overall approach is validated in significant case
studies that provide evidence of its practicality and usefulness
Automatically Documenting Software Artifacts
Software artifacts, such as database schema and unit test cases, constantly change during evolution and maintenance of software systems. Co-evolution of code and DB schemas in Database-Centric Applications (DCAs) often leads to two types of challenging scenarios for developers, where (i) changes to the DB schema need to be incorporated in the source code, and (ii) maintenance of a DCAs code requires understanding of how the features are implemented by relying on DB operations and corresponding schema constraints. On the other hand, the number of unit test cases often grows as new functionality is introduced into the system, and maintaining these unit tests is important to reduce the introduction of regression bugs due to outdated unit tests. Therefore, one critical artifact that developers need to be able to maintain during evolution and maintenance of software systems is up-to-date and complete documentation. In order to understand developer practices regarding documenting and maintaining these software artifacts, we designed two empirical studies both composed of (i) an online survey of contributors of open source projects and (ii) a mining-based analysis of method comments in these projects. We observed that documenting methods with database accesses and unit test cases is not a common practice. Further, motivated by the findings of the studies, we proposed three novel approaches: (i) DBScribe is an approach for automatically documenting database usages and schema constraints, (ii) UnitTestScribe is an approach for automatically documenting test cases, and (iii) TeStereo tags stereotypes for unit tests and generates html reports to improve the comprehension and browsing of unit tests in a large test suite. We evaluated our tools in the case studies with industrial developers and graduate students. In general, developers indicated that descriptions generated by the tools are complete, concise, and easy to read. The reports are useful for source code comprehension tasks as well as other tasks, such as code smell detection and source code navigation
Injecting roles in Java agents through runtime bytecode manipulation
Agents are problem-solving entities that can be used to develop complex and distributed systems because they are autonomous, mobile, reactive, social, and proactive. Today's trends in agent technology include the development of applications as multi-agent systems, where several agents interact within the same application. In these systems, the interactions among agents must be carefully considered. Roles constitute a powerful paradigm for modeling interactions, allowing algorithmic issues and interaction-dependent issues to be handled independently. In this paper, we present the RoleX interaction infrastructure, which enables Java(TM) agents to dynamically assume and use roles at runtime. Our approach is based on using bytecode manipulation to add (or remove) Java members from agents, changing their capabilities. We detail the main component of RoleX, the Role Loader, which performs the bytecode manipulation that allows agents to dynamically assume and release roles
Adaptive Caching of Distributed Components
Die Zugriffslokalität referenzierter Daten ist eine wichtige Eigenschaft verteilter Anwendungen. Lokales Zwischenspeichern abgefragter entfernter Daten (Caching) wird vielfach bei der Entwicklung solcher Anwendungen eingesetzt, um diese Eigenschaft auszunutzen. Anschliessende Zugriffe auf diese Daten können so beschleunigt werden, indem sie aus dem lokalen Zwischenspeicher bedient werden. Gegenwärtige Middleware-Architekturen bieten dem Anwendungsprogrammierer jedoch kaum Unterstützung für diesen nicht-funktionalen Aspekt. Die vorliegende Arbeit versucht deshalb, Caching als separaten, konfigurierbaren Middleware-Dienst auszulagern. Durch die Einbindung in den Softwareentwicklungsprozess wird die frühzeitige Modellierung und spätere Wiederverwendung caching-spezifischer Metadaten gewährleistet. Zur Laufzeit kann sich das entwickelte System außerdem bezüglich der Cachebarkeit von Daten adaptiv an geändertes Nutzungsverhalten anpassen.Locality of reference is an important property of distributed applications. Caching is typically employed during the development of such applications to exploit this property by locally storing queried data: Subsequent accesses can be accelerated by serving their results immediately form the local store. Current middleware architectures however hardly support this non-functional aspect. The thesis at hand thus tries outsource caching as a separate, configurable middleware service. Integration into the software development lifecycle provides for early capturing, modeling, and later reuse of cachingrelated metadata. At runtime, the implemented system can adapt to caching access characteristics with respect to data cacheability properties, thus healing misconfigurations and optimizing itself to an appropriate configuration. Speculative prefetching of data probably queried in the immediate future complements the presented approach
- …