Extreme programming: a discipline of software development (invited paper) (abstract only)
You can look at software development as a system with inputs and outputs. As with any system, software development needs negative feed-back loops to keep it from oscillating. The negative feedback loops traditionally used — separate testing groups, ...
Components and generative programming (invited paper)
This paper is about a paradigm shift from the current practice of manually searching for and adapting components and their manual assembly to Generative Programming, which is the automatic selection and assembly of components on demand. First, we argue ...
A component and communication model for push systems
We present a communication and component model for push systems. Surprisingly, despite the widespread use of many push services on the Internet, no such models exist. Our communication model contrasts push systems with client-server and event-based ...
A fine-grained model for code mobility
In this paper we take the extreme view that every line of code is potentially mobile, i.e., may be duplicated and/or moved from one program context to another on the same host or across the network. Our motivation is to gain a better understanding of ...
Robots: a real-time systems architectural style
This paper presents an architectural style for real-time systems, and an associated formal architectural description language, called Robots. A basic specification in Robots consists of a synchronous control task that is responsible for the dynamic ...
Collaboration and composition: issues for a second generation process language
Over the past decade a variety of process languages have been defined and applied to software engineering environments. The idea of using a process language to encode a software process as a “process model”, and enacting this using a process-sensitive ...
A probabilistic model for software projects
A probabilistic model for software development projects is constructed. The model can be applied to compute an estimate for the development time of a project. The chances of succeeding with a given amount of time and the risk of deviating from the ...
Designing specification languages for process control systems: lessons learned and steps to the future
Previously, we defined a blackbox formal system modeling language called RSML (Requirements State Machine Language). The language was developed over several years while specifying the system requirements for a collision avoidance system for commercial ...
Using model checking to generate tests from requirements specifications
Recently, many formal methods, such as the SCR (Software Cost Reduction) requirements method, have been proposed for improving the quality of software specifications. Although improved specifications are valuable, the ultimate objective of software ...
Specification-based prototyping for embedded systems
Specification of software for safety critical, embedded computer systems has been widely addressed in literature. To achieve the high level of confidence in a specification's correctness necessary in many applications, manual inspections, formal ...
Coping with type casts in C
The use of type casts is pervasive in C. Although casts provide great flexibility in writing programs, their use obscures the meaning of programs, and can present obstacles during maintenance. Casts involving pointers to structures (C structs) are ...
Efficient points-to analysis for whole-program analysis
To function on programs written in languages such as C that make extensive use of pointers, automated software engineering tools require safe alias information. Existing alias-analysis techniques that are sufficiently efficient for analysis on large ...
The concept of dynamic analysis
Dynamic analysis is the analysis of the properties of a running program. In this paper, we explore two new dynamic analyses based on program profiling:
Frequency Spectrum Analysis. We show how analyzing the frequencies of program entities in a single ...
Data-flow analysis of program fragments
Traditional interprocedural data-flow analysis is performed on whole programs; however, such whole-program analysis is not feasible for large or incomplete programs. We propose fragment data-flow analysis as an alternative approach which computes data-...
Yesterday, my program worked. Today, it does not. Why?
Imagine some program and a number of changes. If none of these changes is applied (“yesterday”), the program works. If all changes are applied (“today”), the program does not work. Which change is responsible for the failure? We present an efficient ...
Comparison checking: an approach to avoid debugging of optimized code
We present a novel approach to avoid the debugging of optimized code through comparison checking. In the technique presented, both the unoptimized and optimized versions of an application program are executed, and computed values are compared to ensure ...
Structural specification-based testing: automated support and experimental evaluation
In this paper, we describe a testing technique, called structural specification-based testing (SST), which utilizes the formal specification of a program unit as the basis for test selection and test coverage measurement. We also describe an automated ...
An efficient relevant slicing method for debugging
Dynamic program slicing methods are widely used for debugging, because many statements can be ignored in the process of localizing a bug. A dynamic program slice with respect to a variable contains only those statements that actually had an influence on ...
Analyzing exception flow in Java programs
Exception handling mechanisms provided by programming languages are intended to ease the difficulty of developing robust software systems. Using these mechanisms, a software developer can describe the exceptional conditions a module might raise, and the ...
An efficient algorithm for computing MHP information for concurrent Java programs
Information about which statements in a concurrent program may happen in parallel (MHP) has a number of important applications. It can be used in program optimization, debugging, program understanding tools, improving the accuracy of data flow ...
CoffeeStrainer: statically-checked constraints on the definition and use of types in Java
Usually, programming languages are used according to conventions and rules. Although general rules can be enforced by lint-like tools, there is a large class of rules that cannot be built into such tools because they result from particular design ...
The CIP method: component- and model-based construction of embedded systems
CIP is a model-based software development method for embedded systems. The problem of constructing an embedded system is decomposed into a functional and a connection problem. The functional problem is solved by constructing a formal reactive ...
Algebraic software architecture reconfiguration
The ability of reconfiguring software architectures in order to adapt them to new requirements or a changing environment has been of growing interest, but there is still not much formal work in the area. Most existing approaches deal with run-time ...
Consistency checking for multiple view software architectures
Consistency is a major issue that must be properly addressed when considering multiple view architectures. In this paper, we provide a formal definition of views expressed graphically using diagrams with multiplicities and propose a simple algorithm to ...
Synergy between component-based and generative approaches
Building software systems out of pre-fabricated components is a very attractive vision. Distributed Component Platforms (DCP) and their visual development environments bring this vision closer to reality than ever. At the same time, some experiences ...
Transitioning legacy assets to a product line architecture
A successful software system evolves over time, but this evolution often occurs in an ad-hoc fashion. One approach to structure system evolution is the concept of software product lines where a core architecture supports a variety of application ...
CHIME: a metadata-based distributed software development environment
We introduce CHIME, the Columbia Hypermedia IMmersion Environment, a metadata-based information environment, and describe its potential applications for internet and intranet-based distributed software development. CHIME derives many of its concepts ...
FACADE: a typed intermediate language dedicated to smart cards
The use of smart cards to run software modules on demand has become a major business concern for application issuers. Such down-loadable executable content needs to be trusted by the card execution environment in order to ensure that an instruction on a ...
Verification of real-time designs: combining scheduling theory with automatic formal verification
We present an automatic approach to verify designs of real-time distributed systems for complex timing requirements. We focus our analysis on designs which adhere to the hypothesis of analytical theory for Fixed-Priority scheduling. Unlike previous ...