Formalizing Rework in Software Processes Aaron G. Cass, Stanley M. Sutton Jr., and Leon J. Osterweil Department of Computer Science University of Massachusetts Amherst, MA 01003-4610 +1 413 545 2013 {acass, ljo, suttonsm}@cs.umass.edu Abstract. This paper indicates how effective software-process programming lan- guages can lead to improved understandings of critical software processes, as well as improved process performance. In this paper we study the commonly mentioned, but seldom defined, rework process. We note that rework is gener- ally understood to be a major software development activity, but note that it is poorly defined and understood. In this paper we use the vehicle of software- process programming to elucidate the nature of this type of process. In doing so we demonstrate that an effective language (i.e. one incorporating appropriate semantic features) can help explain the nature of rework, and also raise hopes that this type of process can be expedited through execution of the defined pro- cess. The paper demonstrates the key role played in effective rework definition by such semantic features as procedure invocation, scoping, exception manage- ment, and resource management, which are commonly found in programming languages. A more ambitious program of research into the most useful process- programming language semantic features is then suggested. The goal of this work is improved languages, for improved understandings of software processes, and improved support for software development. 1 Introduction Rework is an ongoing problem in software development. Rework is generally consid- ered to be potentially avoidable work that is triggered to correct problems or (some- times) to tune an application [6, 10]. The cost of rework can approach or exceed 50% of total project cost [21, 10, 6]. Rework cost rises dramatically the longer the delay, relative to the life cycle, between the occurrence of a problem and its remediation. For example, for a problem that occurs in requirements analysis, the cost of repair may rise by one to two orders of magnitude depending on how late in the life cycle it is caught [6]. Research on rework has focused on minimizing the amount of rework that a project may incur [21, 10, 6, 29]. This is typically done through the introduction of earlier, more frequent, and more formal reviews, inspections, and tests; these aim to detect and enable the correction of problems as early in the life cycle as possible. A reduction in rework costs has also been shown for increases in the general level of process maturity [23, 14, 29]. Through such approaches the cost of rework has been reduced signifi cantly, in some cases to less than 10% of total project cost [21, 10].