One of the sessions I visited today was about what are the correct measurements to determine if your SOA initiative was successful. One of the most interesting statistic from the speaker was this continuum of cyclometric complexity (CC):
CC < 10: "simple" code 10 > CC < 20: "moderately" complex code 20 > CC < 50: "severely" complex code CC > 50: "untestable"
He based that experience on a simple equation of:
# of test cases = 2CC-1
Which suggests code with a CC as low as 15 will have 16,384 test cases! Ouch! That has got to hurt considering functional testing only gets you about 20% of test coverage.
I think another valuable observation provided was software reliability is inversely related to CC, the higher the CC, the less reliable the software. The most eye-popping statistic from the talk was the speaker’s observation that if you can refactor your code to have a CC in the 10-15 range, an organization would reduce their maintenance costs by 2 to 5 times!
Finally, these are the ten measures from the talk that I thought I would share with all of you and how one should optimize the measures. The words in the parenthesis are what level the measures speak to.
- Dollars per service -> higher is better (corporate)
- Service vitality index (new service revenue/total revenue) -> ~10%-20% is good (corporate)
- Number of new services/total services -> higher % is better(management)
- Mean time to service deployment -> lower t is better (management)
- Mean time to service charge -> lower t is better (management)
- Service availability -> higher % is better (management)
- Service reuse -> higher % is better (project)
- Cost of not using/stopping the service -> lower $ is better (project)
- Service complexity -> lower CC is better (service)
- Service QA confidence -> higher % is better (service)