by John Swaren
| September 24, 2014
While teaching an introductory TruePlanning for Software Estimating course this week at an Army location, I was asked to follow up with a clarification on “percent adapted” calculation.
The official PRICE training materials definitions are:
• Percent of Design Adapted - the percentage of the existing (adapted code) design that must change to enable the adapted code to function and meet the software project requirements;
• Percent of Code Adapted - the percentage of the adapted code that must change to enable the adapted code to function and meet the software project requirements.
The former, Design, was received by the class as straightforward. Again, this adaptation includes architectural design changes, detailed design changes, and any necessary reverse engineering. Entered as a percentage of the Adapted Code size, this metric essentially captures the effort to modify/ enhance the underlying concepts for data and transaction algorithms.
As my class later reviewed a fellow-student’s modeling of a “real-world” example, we found that our jury was hung on the verdict of what’s really meant by adapting the latter, Code. Again, the instruction is to also enter this metric as a percentage of the pre-determined adapted code size.
But the legitimate question was: “Why isn’t it always 100%?” If we labored to already identify new code, deleted code and reused code… then isn’t any remaining modified code all adapted?
The answer, per our resident software Yoda, is consider the code in terms of modules, not just source lines. To answer what percentage of a target must change to meet new functional and project requirements, evaluate what sub-modules/ CSCIs must change and what are reused WITHIN each module. If an entire module is not modified, then it’s count is reflected in the percentage of reuse. But if module(s) have some components that are modified and some that are not, that information is captured in this latter percentage of code adaptation.
If you’ve followed my blogs, you know what’s coming next: another car example!
Say I have an automobile to rebuild. The body, wheels & tires are fine. Even the suspension requires no modification. (No car guy would ever accept not spending time & money on handling too, but suspend your disbelief for now).
Only the motor needs “adaptation”… but also, only in certain areas. The ignition, fuel injection, water pump, A/C & exhaust all require little to no adaptation. But the cylinder heads, valves, camshafts, rods, pistons & crank all must be worked on. My percentage of motor component “code” that actually needs modification is clearly less than 100%.
Of course, the changes made above are a function of what requirements we're trying to acheive, e.g., horsepower, torque, RPM, etc. Likewise, this analogy holds true in typical software modification. What we are given, as previous deliverables, is more than just total lines of code. It’s functioning modules/ systems that may, or may not, require some re-work under the hood.
Additional insight into how TruePlanning defines and utilzes these inputs is detailed in the True Software White Paper.