Software Engineering

Software Change

Michael L. Collard, Ph.D.

Department of Computer Science, The University of Akron

Credits

  • Many of the following slides are adapted from the slides for the book "Software Engineering: The Current Practice" by Vaclav Rajlich © 2012 by Václav Rajlich

Software Change

Software Change (SC) is the process of changing existing code

  • Foundation of
  • Software Evolution
  • Agile processes
  • Types
  • New functionality changes
  • Maintenance changes

Maintenance Change Categories [Lietz, et al. '78]

  • perfective - improve documentation, rewrite code for computational efficiency, improve software design
  • adaptive - accommodate changes to data inputs, files, and hardware and system software
  • corrective - emergency fixes, routine debugging
  • other

Maintenance Change Distribution

Category Manager Work Estimates
[Lietz, et al. '78]
Adaptive 18.2%
Corrective 17.4%
Perfective 60.3%
Other 4.1%

Maintenance Change Distribution

Category Manager Work Estimates
[Lietz, et al. '78]
Change Log
[Schach, et al. '03]
Adaptive 18.2% 2.2%
Corrective 17.4% 56.7%
Perfective 60.3% 39.0%
Other 4.1% 2.4%

Concept Location

  • Concepts extracted from the change request
  • Extracted concepts are located in the code and used as a starting point for software change

Concept Location Examples

  • Add Discover card for possible credit cards → Classes, methods, and data structures that involve other credit cards
  • Fix the spelling of "password" (from "passwd") → find out where "passwd" is in the system
  • Change API method length() to size() → Rename method refactoring in API

Impact Analysis

Determine the impact of change on an existing system

  • Change has not occurred yet
  • Typically done at a class/file level
  • impact set classes identified in concept location
  • Class dependencies are analyzed, and impacted classes are added to the impact set

In Practice

  • Software changes need to be identified, classified, planned, and executed
  • Concept location determines where a change needs to occur in the code. Can use regular expressions (i.e., regex) or the structure of the code.
  • Impact analysis used to determine the change's effect on the entire system.
  • The decision might be to not perform the software change.