As we discussed before software development efforts normally result
in the delivery of a software product that satisfies
the user requirements. So normally our software development organization
will release this application to its final users, however, once
the software is in operation many things can happen.
So, for example, the environment might change. There might be
new libraries. There might be new systems in which
our software has to operate. Or they may be future
requests, so the users may find out that, guess what,
they want to do something different with the problem that
we gave them. Or, again, and this is one of
the most common occurrences, users might find problems with the
software and may file bug reports and send the bug
reports back to the software developer. These are the reasons
why software maintenance is a necessary phase in software development.
Software maintenance is the activity that sustains the software product
as it evolves throughout its life cycle, specifically
in response to bug reports, feature requests and
environment changes. Development organisations perform three kinds of
maintenance activities: corrective maintenance to eliminate problems with the
code, perfective maintenance to accommodate feature request, and
in some cases just to improve the software, for
example, to make it more efficient, and finally,
adaptive maintenance, to take care of the environment changes.
And after this activities have been performed, the software developer
will produce a new version of the application, will release it
and the cycle will continue through out the lifetime of
the software. That's why maintenance is a fundamental activity and a
very expensive one. And one of the reasons why maintenance
is expensive, that I want to mention now, is regression testing.
During maintenance every time you modify your application you have
to regression test the application, where regression testing is the activity
of retesting software after it has been modified to make sure
that the changes you perform to the software work as expected,
and that your changes did not introduce any unforseen effect. I'm
pretty sure that you're familiar with the case of a new
version of the software being released and just a couple of
days later another version being released to fix some problems that
occor with the new version. These problems is what we call
regression errors and they're what regression
testing targets and tries to eliminate
before the new version of the software is released into the world.