In this article we examine the augmentation of application interfaces with enhanced specifications that include sequencing constraints called protocols. Protocols make explicit the relationship between messages (methods) supported by the application. These relationships are usually only given implicitly, either in the code or in textual comments. We define notions of interface compatibility based upon protocols and show how compatibility can be checked, discovering a class of errors that cannot be discovered via the type system alone. We then define software adaptors that can be used to bridge the difference between applications that have functionally compatible but type-and protocol-incompatible interfaces. We discuss what it means for an adaptor to be well formed. Leveraging the information provided by protocols, we show how adaptors can be automatically generated from a high-level description, called an interface mapping.
Organizations increasingly need to build an enterprise-wide capability to leverage technology that is distributed in different business units. Some organizations establish enterprise architecture (EA) standards to enable greater compatibility of IT components and integration of applications and data across the enterprise. Through a firm-level survey, we sought to answer two key questions about the use of EA standards: (1) How do different governance mechanisms affect the use of EA standards? and ( 2) To what extent does the use of EA standards help organizations to improve the sharing and integration of IT resources across the enterprise? We identified four key governance mechanisms for EA standards management and examined how each mechanism affected the use of EA standards. We also examined how the use of EA standards affects the management of IT infrastructure, applications, and data resources across business units. Our empirical results showed that the use of EA standards is effective in helping organizations to better manage their IT resources. Our study also provides detailed insights into how organizations can set up governance mechanisms to facilitate the use of EA standards in achieving enterprise-wide goals.
We present a practical extension to typestate checking which is capable of proving programs free of uninitialized variable errors even when these programs contain conditionally initialized variables where the initialization of a variable depends upon the equality of one or more '@tagn variables to a constant. The user need not predeclare the relationship between a conditionally initialized variable and its tags, and this relationship may change from one point in the progrqm to another. Our technique generalizes liveness analysis to conditional liveness analysis. Like typestate checking, our technique incorporates a dataflow analysis algorithm in which each point in a program is labeled with a lattice point describing statically tracked information, including the initialization of variables. The labeling is then used to check for programming errors such as referencing a variable which may be uninitialized. Our technique incorporates a more expressive lattice, including predicates of the form: "I is initialized if y equals 2." Because the number of tags per variable is small, the added complexity of the analysis is usually small. The efficiency of our technique is due, to a large extent, to the fact that we use a backwards analysis of the program (instead of the forward analysis used in the original typestate checking algorithm). Our results suggest that backwards analysis-tracking only those properties which need to hold to make the subsequent statements correct-can be more efficient than forward analysis-tracking all properties which are made true by the preceding statements. We conclude with some additional applications of our techniques to program checking. Index r e m-Conditionals, dataflow analysis, liveness analysis, program correctness, typestate checking. 'These annotations indicate the change of typestate that a parameter will occur in the function body (e.g., will become initialized or become uninitialized). Without these annotations, one could not typestate check a module without seeing the code body of the function being called. With these annotations, one can prove a module to be typestate correct independent of the function bodies being invoked.
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.