tr                                                      


Bookmark Site 

 

Welcome to TechRiz 

Where tech enthusiasts come for the latest tech news, Free downloads, free tutorials, articles and how to's.


Description:  This is the TechRiz Free Tutorials page. Visit every day to stay informed about the latest tech news, from security alerts to Hardware and software updates. Enjoy your stay.


Week 3

SDLC - Implementation and Maintenance in Software Life Cycle 

  

Maintenance includes all the activity after the installation of software that is performed to keep the system operational. As we have mentioned earlier, software often has design faults. The two major forms of maintenance activities are adaptive maintenance and corrective maintenance.  

It is generally agreed that for large systems, removing all the faults before delivery is extremely difficult and faults will be discovered long after the system is installed. As these faults are detected, they have to be removed. Maintenance activities related to fixing of errors fall under corrective maintenance.

Removing errors is one of the activities of maintenance. Maintenance also needed due to a change in the environment or the requirements of the system. The introduction of a software system affects the work environment. This change in environment often changes what is desired from the system. Furthermore, often after the system is installed and the users have had a chance to work with it for sometime, requirements that are not identified during requirement analysis phase will be uncovered. This occurs, since the experience with the software helps the user to define the needs more precisely. There might also be changes in the input data, the system environment and output formats. All these require modification of the software. The maintenance activities related to such modification fall under adaptive maintenance.

Maintenance work is based on existing software, as compared to development work, which creates new software. Consequently maintenance resolves around understanding the existing software and spares most of their time trying to understand the software that they have to modify. Understanding the software involves not only understanding the code, but also the related documents. During the modification of the software, the effects of the change have to be clearly understood by the maintainer since introducing undesired side effects in the system during modification is easier.

To test whether those aspects in the system that are not supposed to be modified are operating as they were before modification, regression testing is done. Regression testing involves executing old test cases to test that no new errors have been introduced. Thus, maintenance involves understanding the existing software (code and related documents), understanding the effects of change, making the changes - both to the code and documents, testing the new parts (changes), and resetting of the old parts that were not changed.

Since often during development, needs of the maintainers are not kept in mind, little support documents are produced during development to aid the maintainer. The complexity of the maintenance task is coupled with the neglect of maintenance concerns during development which makes maintenance the most cost effective activity in the life of a software product.

Error Distribution with Phases in Software Development Life Cycles 

 

A typical software product may take months to a few years for development, and is in operation for five to twenty years before it is withdrawn. For software, the cost of development is the incurred during requirement analysis, design, coding and testing. Therefore, the development cost is the total cost incurred before the product delivery. The cost of maintenance is the cost of modifying the software due to residual faults in the software, for enhancing or for updating the software. This cost is spread over the operational years of the software. Software engineers generally agree that the total cost of maintenance is more than the cost of development of software. The ratio of development to maintenance cost has been variously suggested as 40/60, 30/70 or even lower. However, it is generally accepted that the cost of maintenance is likely to be higher than the development cost, and are often not at all concerned with the maintenance.  

Since maintenance depends critically on the software characteristics that are decided during development, maintenance cost can be reduced if maintenance concerns are kept in forefront during development. One of the reasons why this is often not done is that the development cost is done by the developers while maintenance is often done by the users. Hence, the developers do not have much incentive for increasing the development effort in order to reduce the maintenance cost. However, for reduction in overall cost of software, it is imperative that the software be developed so the maintenance is easy.

The development cost, a typical distribution of effort with the different phases is

Requirement - 10%
Design - 20%
Coding - 20%
Testing - 50%

The exact number will differ with organization and the type of the project. There are some observation we can make from the data given above. The first is that the goal of design and coding should reduce the cost of design and coding, but should be to reduce the cost of testing and maintenance, at the expense of increasing design and coding cost. Both testing and maintenance depend heavily in the design and coding of the software. And these costs can be considerably reduced if the software is designed and coded to make testing and maintenance easier. Therefore, during design and implementation, the issues in our minds should be "can the design be easily tested", and "can it be easily modified". These require alternate designs and may increase the cost of the design and coding. But this additional costs pay dividends in the later phases.

Error Distribution

The notion that programming is the central of activity during software development is largely because normally programming has been considered to be difficult task and sometimes an "art". Another consequence of this kind of thinking is the belief that errors largely occur during programming, as it is the oldest activity in software development and offers many opportunities for commiting errors. It is now realized that errors can occur at any stage during development. A typical distribution of error occurrences by is

Requirement Analysis - 20%
Design - 30%
Coding - 50%

As we can see, errors occur throughout the development process. However the cost of correcting different phases is not the same and depends on when the error is detected and correceted. As one old expect, the greater the delay in detecting an error after it occurs, the more expensive it is to correct it. Error that occur during the requirements phase, if corrected after coding is completed, can cost many times more than correcting the error during the requirements phase itself. The reason for this is fairly obvious. If there is an error in the requirements, then the design and the code will get affected.

To correct the error, the coding that is done would require both the design and the code to be changed there by increasing the correction. So we should attempt to detect errors in the previous phase and should not wait until testing to detect errors. This is not often practiced. In reality, sometimes testing is the sole point where errors are detected. Besides the cost factor, reliance on testing as the primary source for error detection, due to the limitations of testing, will also result in unreliable software. Error detection and correction should be a continous proces that is done throughout software development. In terms of the development phases what this means is that we should try to validate each phase before starting with the next.

Different types of Software Development Life Cycle Models (SDLC) 

 

A Software Development Life Cycle Model is a set of activities together with an ordering relationship between activities which if performed in a manner that satisfies the ordering relationship that will produce desired product. Software Development Life Cycle Model is an abstract representation of a development process.  

In a software development effort the goal is to produce high quality software. The development process is, therefore, the sequence of activities that will produce such software. A software development life cycle model is broken down into distinct activities. A software development life cycle model specifies how these activities are organized in the entire software development effort. We discuss each software development life cycle model in detail.

1.                Waterfall Software Development Life Cycle Model

2.                Prototyping Software Development Life Cycle Model

3.                Iterative Enhacement Model

4.                The Spiral Model

5.                Object Oriented Methodology

6.                Dynamic System Development Method

Waterfall Software Development Life Cycle Model 

 

The simplest software development life cycle model is the waterfall model, which states that the phases are organized in a linear order. A project begins with feasibility analysis. On the successful demonstration of the feasibility analysis, the requirements analysis and project planning begins.  

The design starts after the requirements analysis is done. And coding begins after the design is done. Once the programming is completed, the code is integrated and testing is done. On succeeful completion of testing, the system is installed. After this the regular operation and maintenance of the system takes place. The following figure demonstrates the steps involved in waterfall life cycle model.

1
The Waterfall Software Life Cycle Model

With the waterfall model, the activities performed in a software development project are requirements analysis, project planning, system design, detailed design, coding and unit testing, system integration and testing. Linear ordering of activities has some important consequences. First, to clearly identify the end of a phase and beginning of the others. Some certification mechanism has to be employed at the end of each phase. This is usually done by some verification and validation. Validation means confirming the output of a phase is consistent with its input (which is the output of the previous phase) and that the output of the phase is consistent with overall requirements of the system.

The consequences of the need of certification is that each phase must have some defined output that can be evaluated and certified. Therefore, when the activities of a phase are completed, there should be an output product of that phase and the goal of a phase is to produce this product. The outputs of the earlier phases are often called intermediate products or design document. For the coding phase, the output is the code. From this point of view, the output of a software project is to justify the final program along with the use of documentation with the requirements document, design document, project plan, test plan and test results.

Another implication of the linear ordering of phases is that after each phase is completed and its outputs are certified, these outputs become the inputs to the next phase and should not be changed or modified. However, changing requirements cannot be avoided and must be faced. Since changes performed in the output of one phase affect the later phases, that might have been performed. These changes have to made in a controlled manner after evaluating the effect of each change on the project.This brings us to the need for configuration control or configuration management.

The certified output of a phase that is released for the best phase is called baseline. The configuration management ensures that any changes to a baseline are made after careful review, keeping in mind the interests of all parties that are affected by it. There are two basic assumptions for justifying the linear ordering of phase in the manner proposed by the waterfall model.

For a successful project resulting in a successful product, all phases listed in the waterfall model must be performed anyway.

Any different ordering of the phases will result in a less successful software product.

Project Output in a Waterfall Model

As we have seen, the output of a project employing the waterfall model is not just the final program along with documentation to use it. There are a number of intermediate outputs, which must be produced in order to produce a successful product.

The set of documents that forms the minimum that should be produced in each project are:

·        Requirement document 

·        Project plan 

·        System design document 

·        Detailed design document 

·        Test plan and test report 

·        Final code 

·        Software manuals (user manual, installation manual etc.) 

·        Review reports 

Except for the last one, these are all the outputs of the phases. In order to certify an output product of a phase before the next phase begins, reviews are often held. Reviews are necessary especially for the requirements and design phases, since other certification means are frequently not available. Reviews are formal meeting to uncover deficiencies in a product. The review reports are the outcome of these reviews.

Advantages and limitations of the Waterfall Model 

 Advantages of Waterfall Life Cycle Models 

1.                Easy to explain to the user

2.                Stages and activities are well defined

3.                Helps to plan and schedule the project

4.                Verification at each stage ensures early detection of errors / misunderstanding

Limitations of the Waterfall Life Cycle Model

The waterfall model assumes that the requirements of a system can be frozen (i.e. basedline) before the design begins. This is possible for systems designed to automate an existing manual system. But for absolutely new system, determining the requirements is difficult, as the user himself does not know the requirements. Therefore, having unchanging (or changing only a few) requirements is unrealistic for such project.

Freezing the requirements usually requires choosing the hardware (since it forms a part of the requirement specification). A large project might take a few years to complete. If the hardware is selected early, then due to the speed at which hardware technology is changing, it is quite likely that the final software will employ a hardware technology that is on the verge of becoming obsolete. This is clearly not desirable for such expensive software.

The waterfall model stipulates that the requirements should be completely specified before the rest of the development can proceed. In some situations it might be desirable to first develop a part of the system completely, an then later enhance the system in phase. This is often done for software products that are developed not necessarily for a client (where the client plays an important role in requirement specification), but for general marketing, in which the requirements are likely to be determined largely by developers.

Prototyping Software Life Cycle Model 

 

The goal of prototyping based development is to counter the first two limitations of the waterfall model discussed earlier. The basic idea here is that instead of freezing the requirements before a design or coding can proceed, a throwaway prototype is built to understand the requirements. This prototype is developed based on the currently known requirements. Development of the prototype obviously undergoes design, coding and testing. But each of these phases is not done very formally or thoroughly. By using this prototype, the client can get an "actual feel" of the system, since the interactions with prototype can enable the client to better understand the requirements of the desired system.  

Prototyping is an attractive idea for complicated and large systems for which there is no manual process or existing system to help determining the requirements. In such situations letting the client "plan" with the prototype provides invaluable and intangible inputs which helps in determining the requirements for the system. It is also an effective method to demonstrate the feasibility of a certain approach. This might be needed for novel systems where it is not clear that constraints can be met or that algorithms can be developed to implement the requirements. The process model of the prototyping approach is shown in the figure below.

2
Prototyping Model

The basic reason for little common use of prototyping is the cost involved in this built-it-twice approach. However, some argue that prototyping need not be very costly and can actually reduce the overall development cost. The prototype are usually not complete systems and many of the details are not built in the prototype. The goal is to provide a system with overall functionality. In addition, the cost of testing and writing detailed documents are reduced. These factors helps to reduce the cost of developing the prototype. On the other hand, the experience of developing the prototype will very useful for developers when developing the final system. This experience helps to reduce the cost of development of the final system and results in a more reliable and better designed system.

Advantages of Prototyping

1.                Users are actively involved in the development

2.                It provides a better system to users, as users have natural tendency to change their mind in specifying requirements and this method of developing systems supports this user tendency.

3.                Since in this methodology a working model of the system is provided, the users get a better understanding of the system being developed.

4.                Errors can be detected much earlier as the system is mode side by side.

5.                Quicker user feedback is available leading to better solutions.

Disadvantages

1.  Leads to implementing and then repairing way of building systems.

2. Practically, this methodology may increase the complexity of the system as scope of the system may expand beyond original plans.

Iterative Enhancement Life Cycle Model 

 

The iterative enhancement life cycle model counters the third limitation of the waterfall model and tries to combine the benefits of both prototyping and the waterfall model. The basic idea is that the software should be developed in increments, where each increment adds some functional capability to the system until the full system is implemented. At each step extensions and design modifications can be made. An advantage of this approach is that it can result in better testing, since testing each increment is likely to be easier than testing entire system like in the waterfall model. Furthermore, as in prototyping, the increments provides feedback to the client which is useful for determining the final requirements of the system.  

In the first step of iterative enhancement model, a simple initial implementation is done for a subset of the overall problem. This subset is the one that contains some of the key aspects of the problem which are easy to understand and implement, and which forms a useful and usable system. A project control list is created which contains, in an order, all the tasks that must be performed to obtain the final implementation. This project control list gives an idea of how far the project is at any given step from the final system.

Each step consists of removing the next step from the list. Designing the implementation for the selected task, coding and testing the implementation, and performing an analysis of the partial system obtained after this step and updating the list as a result of the analysis. These three phases are called the design phase, implementation phase and analysis phase. The process is iterated until the project control list is empty, at the time the final implementation of the system will be available. The process involved in iterative enhancement model is shown in the figure below.

3
The Iterative Enhancement Model

The project control list guides the iteration steps and keeps track of all tasks that must be done. The tasks in the list can be include redesign of defective components found during analysis. Each entry in that list is a task that should be performed in one step of the iterative enhancement process, and should be simple enough to be completely understood. Selecting tasks in this manner will minimize the chances of errors and reduce the redesign work.

The Spiral Life Cycle Model 

 

This is a recent model that has been proposed by Boehm. As the name suggests, the activities in this model can be organized like a spiral. The spiral has many cycles. The radial dimension represents the cumulative cost incurred in accomplishing the steps dome so far and the angular dimension represents the progress made in completing each cycle of the spiral. The structure of the spiral model is shown in the figure given below. Each cycle in the spiral begins with the identification of objectives for that cycle and the different alternatives are possible for achieving the objectives and the imposed constraints.  

The next step in the spiral life cycle model is to evaluate these different alternatives based on the objectives and constraints. This will also involve identifying uncertainties and risks involved. The next step is to develop strategies that resolve the uncertainties and risks. This step may involve activities such as benchmarkibg, simulation and prototyping. Next, the software is developed by keeping in mind the risks. Finally the next stage is planned.

4

The next step is determined by remaining risks. For example, its performance or user-interface risks are considered more important than the program development risks. The next step may be evolutionary development that involves developing a more detailed prototype for resolving the risks. On the other hand, if the program development risks dominate and previous prototypes have resolved all the user-interface and performance risks; the next step will follow the basic waterfall approach.

The risk driven nature of the spiral model allows it to accommodate any mixture of specification-oriented, prototype-oriented, simulation-oriented or some other approach. An important feature of the model is that each cycle of the spiral is completed by a review, which covers all the products developed during that cycle, including plans for the next cycle. The spiral model works for developed as well as enhancement projects.

Spiral Model Description

The development spiral consists of four quadrants as shown in the figure above

Quadrant 1: Determine objectives, alternatives, and constraints.

Quadrant 2: Evaluate alternatives, identify, resolve risks.

Quadrant 3: Develop, verify, next-level product.

Quadrant 4: Plan next phases.

Although the spiral, as depicted, is oriented toward software development, the concept is equally applicable to systems, hardware, and training, for example. To better understand the scope of each spiral development quadrant, let’s briefly address each one.

Quadrant 1: Determine Objectives, Alternatives, and Constraints  

Activities performed in this quadrant include:

1.                Establish an understanding of the system or product objectives—namely performance, functionality, and ability to accommodate change.

2.                Investigate implementation alternatives—namely design, reuse, procure, and procure/ modify

3.                Investigate constraints imposed on the alternatives—namely technology, cost, schedule, support, and risk. Once the system or product’s objectives, alternatives, and constraints are understood, Quadrant 2 (Evaluate alternatives, identify, and resolve risks) is performed.

Quadrant 2: Evaluate Alternatives, Identify, Resolve Risks 

Engineering activities performed in this quadrant select an alternative approach that best satisfies technical, technology, cost, schedule, support, and risk constraints. The focus here is on risk mitigation. Each alternative is investigated and prototyped to reduce the risk associated with the development decisions. Boehm describes these activities as follows:

. . . This may involve prototyping, simulation, benchmarking, reference checking, administering user
questionnaires, analytic modeling, or combinations of these and other risk resolution techniques.

The outcome of the evaluation determines the next course of action. If critical operational and/or technical issues (COIs/CTIs) such as performance and interoperability (i.e., external and internal) risks remain, more detailed prototyping may need to be added before progressing to the next quadrant. Dr. Boehm notes that if the alternative chosen is “operationally useful and robust enough to serve as a low-risk base for future product evolution, the subsequent risk-driven steps would be the evolving series of evolutionary prototypes going toward the right (hand side of the graphic) . . . the option of writing specifications would be addressed but not exercised.” This brings us to Quadrant 3.

Quadrant 3: Develop, Verify, Next-Level Product 

If a determination is made that the previous prototyping efforts have resolved the COIs/CTIs, activities to develop, verify, next-level product are performed. As a result, the basic “waterfall” approach may be employed—meaning concept of operations, design, development, integration, and test of the next system or product iteration. If appropriate, incremental development approaches may also be applicable.

Quadrant 4: Plan Next Phases 

The spiral development model has one characteristic that is common to all models—the need for advanced technical planning and multidisciplinary reviews at critical staging or control points. Each cycle of the model culminates with a technical review that assesses the status, progress, maturity, merits, risk, of development efforts to date; resolves critical operational and/or technical issues (COIs/CTIs); and reviews plans and identifies COIs/CTIs to be resolved for the next iteration of the spiral.

Subsequent implementations of the spiral may involve lower level spirals that follow the same quadrant paths and decision considerations.