In: Computer Science
1a (i) Describe various categories of software maintenance giving clear examples of when it necessary to carry out each of these types of maintenance [20]
(ii) Describe the major differences between the Waterfall Model and the Agile Model [10]
(iii) Explain when it is preferable to use each of the models [10]
Software Maintenance
Whenever any application/software is built and delivered to client, customer or end user, there could be certain number of chances where this software does require to make a certain update as per its capability, improvements or enhancement as per change in further expectations, fault or code defect fix, version update, interference with other systems etc.
This phase or process of modifying the software, after this has been delivered to end user or customer is called the software maintenance.
Why we need the software maintenance activity :-
As to elaborate further the need of maintenance process for software could be expected due to followed circumstances:-
1) Fault/Defect identification & their resolutions -
It is a good practice that once the software is expected to fulfill the end users need as per its basic requirements, there could be a scenario where sometime this software is not dealing with its overcome towards the desired expectations. This is called the defect with software modules, or a bug in it.
To overcome this defect issue, we need software maintenance phase to initiate the identification of defect and their relative fix. To do so, we could run the software code module with some sample data records to get an idea of its relative performance and achievement in term of output and therefore may also get in the depth towards the particular code module which is causing the issue.
2) Design/Requirement Improvement -
There could be some chances where the expectation from end user or client become changed as per their need. Hence it would require a further modification towards the software or its particular code module.
We may need then maintenance phase to be called out in order to improve the design as per the updated requirements.
3) Enhancement -
Sometimes when we deliver the software to end user, that could not be fit on its performance such that related to time management, space consumption etc. So we may require a certain number of Enhancement to be followed which can overcome the related performance issues. This activity does required to call the software in maintenance phase.
4) Version update or Migration -
There could be some instances where the software does required to be updated with a latest version to handle some more functionalities. For ex- Some code module was delivered to client first time which was capable of handling some millions of data records, but later when this data volume is becoming high as per the increment towards the end users, Client is moreover looking for a migration towards its software to latest available version in the market so that it could be capable enough to process the very big volume of data. This activity does required to call the software in maintenance phase.
5) Maximize the Efficiency -
There could be some instances where the software does required to be updated with its code to handle its requirements with more frequently and efficiently. To do so this required be called out in maintenance phase.
For ex- Lets take an example of some antivirus application/software, we require some planned maintenance to be taken care so that is software could be more efficient working towards the new virus/malware definition.
What are the various categories of Software Maintenance ?
There are basically four categories of software maintenance listed below-
1) Corrective Maintenance - This is sometimes called as Reactive/Repair maintenance activity which actually involves the correction or an update to existing software code module once it is delivered to client, to correct/fix the issues identified or to enhance certain performance bugs. This maintenance phase could be planned or unplanned(Emergency) as per the needs.
For ex:- We have delivered a software code module which is not working as per its expectation, lets say some code module delivered to Financial institute where the end users could be expected to enter their details. But somehow any particular user has copied some data from some other legacy system and pasted over in the form which was having some special characters in it. So the software might not be able to identify this special character string and was not able to recognize this special character or string. Now this software do require a code update to handle these types of special characters itself. We could call out the planned maintenance phase for these kind of repair/fixes.
There could also be some instances where the software of application could breakdown or shut down completely, we may need to call out an unplanned or emergency reactive maintenance activity.
2) Adaptive Maintenance -
There could be some instances where we built and deliver a particular software which is explicitly looking for its specific platform to be run with. Such that this software might be platform dependent but there could be a need from end user or customer where he/she is looking for this software to be run with other platform as well.
We would be requiring to call out the adaptive maintenance phase for that software where the code could be revised in further to handle its processes with the secondary platform as well as per the requirements.
3) Perfective Maintenance -
Lets say a software built in version 1.0 and delivered to client was not capable enough to convert some timezone based on their country regions to which the data records belongs, this updated feature have been further introduces in version 2.0 and hence client is looking for a migration towards its software code to get an update with version 2.0 and to handle the new requirement. This would be called as perfective maintenance activity.
4) Preventive Maintenance -
Sometimes we could observe initially as what could the problem/issue arise in future and may affect the overall functionality of software, to overcome these in advanced, we call out the preventive maintenance phase. It basically targets to attend the problem that could not be significant with a current time or scenarios but may cause a serious issues or failure to the software in future.
Difference between Waterfall & Agile Model
1)
In Waterfall methodology, we are calling out each individual
phase of software cycle one after another, e.g. once we are
completed with requirement analysis & design phase, we are then
only moving ahead with development phase.
While on the other hand, in Agile methodology, we are proceeding
with all the phases for individual code modules based on the
sprints which we could divide on the basis of time, lets say we
have 1 software to be built which is comprising of 2 individual
code modules C1 & C2, at some time we have developed a code and
delivered for testing of C1 in sprint 1, we are also in parallel
looking for the development of code C2 as well. While on the other
hand in waterfall, once the code C1 is developed and tested
completely, then only we would be looking for the development/build
phase of C2.
2)
Agile could be flexible enough when its compared with Waterfall methodology, Since we could move based on sprint to sprint to look for all the different phases of software development cycle instead of focusing on a single phase at a time.
3)
Agile could also be considered as comprising of many different projects at a time, while waterfall methodology is basically looking for a single project at a time to follow the SDLC process.
4)
Waterfall could be considered as a sequential phase where in on the other hand Agile could be considered as a collaborative approach where we could work in parallel based mechanism.
5)
Waterfall is basically approaching towards Project completion with a significant solution wherein the Agile methodology is approaching towards product completion and then in last consolidating all products to form a project.
6)
Waterfall methodology could be considered as internal process since it does not require to look any updates from end user or customer wherein agile methodology is basically the one which could approach the end user for the updates on timely basis or sprint basis in term of any requirements update if as such.
Which approach is preferable ?
If there is any scenario where we are working on building a software module which could actually comprising of various complex sub modules, and it could be the chances of any requirement update on the time to time basis, we should be actually followed with Agile Methodology instead of Waterfall, since the Agile is looking for delivering a quality product within a certain time bound and we could also be capable enough to get any update to the code if any requirements get updated in between.
While on the other hand, if the requirement is clear from end user or client and no further updates are possible in requirement from them, we could actually look for waterfall approach, wherein we are firstly gathering the requirement and then plan for designing, developing & testing for the software module.