Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Maintainability

No description
by

Gianfranco Alongi

on 22 September 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Maintainability

Maintainability
Meaning of maintenance
Keep (a building, machine, or road) in good condition or in working order, by checking or repairing it regularly.
What is maintainability?
Maintenance is a GOOD thing!
Software Entropy

Software Entropy will always increase for every change, unless effort is made to reduce it.

(Meir M. Lehman)

Complexity? No thanks!
Given that complexity requires cognitive effort,
it means that I have to put in more work!
Product in maintenance
Might not be the coolest
start up product
Or the new greenfield
project at the company
It is better than that
Proof that
someone uses the product
pays for it
wants to continue using it
Software Maintenance
An evolutionary process,
where modifications and corrections
are made to a software product
after delivery.
Maintainability
A time dependent property of
Software Systems
A subjective measure of how much
effort it takes to make any change in
a software system.

A time dependent property of a Software System
Code I just wrote - is fully maintainable the coming seconds,
by me.
But what about Tomorrow?
What about 5 years from now?
Remembering what you did.
Remembering where you did it.
Remembering why you did it.
The landscape has probably changed.

A subjective measure of how much
effort
it takes to make any change in a software system.
The needed effort
is proportional to the complexity
of the system
we wish to comprehend.
Comprehension is imperative
in order to successfully
work on software systems.
Maintainability is
Complex solutions
require more cognitive effort
to comprehend.
cognitive effort
I want to work smarter, not harder.
Automation
Exploit common patterns
Use the right tool for the job
Keep it simple
Use the right language and right level of
abstraction so that I can express something complex in a simple way.
The role of the Engineer is to reduce complexity.
To use the appropriate techniques with which the technical solution can be expressed with the minimal amount of cognitive overhead.

A computer program that is used will be modified

When a program is modified, its complexity will increase, provided that one does not actively work against this.
Coupling - Increase of dependencies between software parts

Cohesion - Decrease of orthogonal separation of concerns
Different mechanisms by which
Software Entropy
increases
Maintainability
is
economics
Increased complexity
leads to smaller margins
Increased complexity means more effort.
More effort means more work.
More work means more time.
More time means higher costs.
Higher costs means smaller margins.
The managers dilemma
Work requires more time.
But there are a limited set of
control variables for managers.
More people
More work hours (overtime)
Read to Write Ratio (R/W)
Studies by Microsoft and IBM shows that on average,
work in large legacy system has a R/W ratio of 20.

For every 1 hour spent writing code,
there has been 20 hours reading code.

It takes twenty times more
effort to comprehen
d the complexity of the system than to
introduce the change in it.
Complexity is our enemy.
Code as a time sponge
Quality
Before code was written, something was comprehended (time has been absorbed).

It took time to write the code and test it properly (more time absorbed).

Now, every time someone will comprehend this new piece of code, they will sacrifice time
again (even more time absorbed).
This scales
x 200
Internal and External
Quality
Internal
quality
Internal Quality is what only the developers of a system can perceive. It affects
cost of feature introduction
cost of correction
But not necessarily functionality.

Internal quality is very hard to measure, there are numerous software metrics, but they will at best give a possible indication that something might be wrong.

Cyclomatic complexity
Naming schemes
Source Lines of Code (SLOC)
Code Coverage
External
quality
External Quality is the only thing users of the system can perceive. It is easily measured.
Amount of error reports
Compliance levels to standards
Load capacity
Uptime
Response times

Customers care only for the External Quality –
until
they want a change or have an error report that needs handling.
Speed vs Quality
Internal Quality dictates the rate at which we will be able to respond to change.

If we wish for changes to be done quickly,
we must have a software system with a low Read/Write ratio
as well as an accommodating design.
The only way to go fast is to go clean.
This means that we need an easily comprehended system on both architectural level as well as code level.

This means having software system with low complexity
Summary
Time dependent
property
Complexity requires
cognitive effort
Maintainability affects economics
Everyone's problem
Full transcript