Sei sulla pagina 1di 21

santoshcharandas@gmail.

Testing Q&A

What is Software Development Life Cycle? The Software Development Life Cycle is a step-by-step process involved in the development of a software product. It is also denoted as Software Development process in certain parts of the world. The whole process is generally classified into a set of steps and a specific operation will be carried out in each of the steps. Classification The basic classification of the whole process is as follows Planning Analysis Design Development (Software Development) Implementation Testing (Software Testing) Deployment Maintenance

Each of the steps of the process has its own importance and plays a significant part in the product development. The description of each of the steps can give a better understanding. Planning This is the first and foremost stage in the development and one of the most important stages. The basic motive is to plan the total project and to estimate the merits and demerits of the project. The Planning phase includes the definition of the intended system, development of the project plan, and Parallel management of the plan throughout the proceedings of the development. A good and matured plan can create a very good initiative and can positively affect the complete project. Analysis The main aim of the analysis phase is to perform statistics and requirements gathering. Based on the analysis of the project and due to the influence of the results of the planning phase, the requirements for the project are decided and gathered. Once the requirements for the project are gathered, they are prioritized and made ready for further use. The decisions taken in the analysis phase are out and out due to the requirements analysis. Proceedings after the current phase are defined. Design Once the analysis is over, the design phase begins. The aim is to create the architecture of the total system. This is one of the important stages of the process and serves to be a benchmark stage since the errors performed until this stage and during this stage can be cleared here. Most of the developers have the habit of developing a prototype of the entire software and represent the software as a miniature model. The flaws, both technical and design, can be found and removed and the entire process can be redesigned. Development and Implementation The development and implementation phase is the most important phase since it is the phase where the main part of the project is done. The basic works include the design of the basic technical architecture and the maintenance of the database records and programs related to the

development process. One of the main scenarios is the implementation of the prototype model into a full-fledged working environment, which is the final product or software. Testing The testing phase is one of the final stages of the development process and this is the phase where the final adjustments are made before presenting the completely developed software to the end-user. In general, the testers encounter the problem of removing the logical errors and bugs. The test conditions which are decided in the analysis phase are applied to the system and if the output obtained is equal to the intended output, it means that the software is ready to be provided to the user. Maintenance The toughest job is encountered in the maintenance phase which normally accounts for the highest amount of money. The maintenance team is decided such that they monitor on the change in organization of the software and report to the developers, in case a need arises. The information desk is also provided with in this phase. This serves to maintain the relationship between the user and the creator. Introduction to Software Testing Before moving further towards introduction to software testing, we need to know a few concepts that will simplify the definition of software testing. Error: Error or mistake is a human action that produces wrong or incorrect result. Defect (Bug, Fault): A flaw in the system or a product that can cause the component to fail or misfunction. Failure: It is the variance between the actual and expected result. Risk: Risk is a factor that could result in negativity or a chance of loss or damage.

Thus Software testing is the process of finding defects/bugs in the system, that occurs due to an error in the application, which could lead to failure of the resultant product and increase in probability of high risk. In short, software testing have different goals and objectives, which often include: 1. finding defects; 2. gaining confidence in and providing information about the level of quality; 3. preventing defects. If you are new to the field of software testing, then the article software testing for beginners will be of great help. Scope of Software Testing The primary function of software testing is to detect bugs in order to correct and uncover it. The scope of software testing includes execution of that code in various environment and also to examine the aspects of code - does the software do what it is supposed to do and function according to the specifications? As we move further we come across some questions such as "When to start testing?" and "When to stop testing?" It is recommended to start testing from the initial stages of the software development. This not only helps in rectifying tremendous errors

before the last stage, but also reduces the rework of finding the bugs in the initial stages every now and then. It also saves the cost of the defect required to find it. Software testing is an ongoing process, which is potentially endless but has to be stopped somewhere, due to the lack of time and budget. It is required to achieve maximum profit with good quality product, within the limitations of time and money. The tester has to follow some procedural way through which he can judge if he covered all the points required for testing or missed out any. To help testers to carry out these day-to-day activities, a baseline has to be set, which is done in the form of checklists. Read more on checklists for software tester. Software Testing Key Concepts Defects and Failures: As we discussed earlier, defects are not caused only due to the coding errors, but most commonly due to the requirement gaps in the non-functional requirement, such as usability, testability, scalability, maintainability, performance and security. A failure is caused due to the deviation between an actual and an expected result. But not all defects result to failures. A defect can turn into a failure due to the change in the environment and or the change in the configuration of the system requirements. Input Combination and Preconditions: Testing all combination of inputs and initial state (preconditions), is not feasible. This means finding large number of infrequent defects is difficult. Static and Dynamic Analysis: Static testing does not require execution of the code for finding defects, whereas in dynamic testing, software code is executed to demonstrate the results of running tests. Verification and Validation: Software testing is done considering these two factors. 1. Verification: This verifies whether the product is done according to the specification? 2. Validation: This checks whether the product meets the customer requirement? Software Quality Assurance: Software testing is an important part of the software quality assurance. Quality assurance is an activity, which proves the suitability of the product by taking care of the quality of a product and ensuring that the customer requirements are met.

Software Testing Types: Software test type is a group of test activities that are aimed at testing a component or system focused on a specific test objective; a non-functional requirement such as usability, testability or reliability. Various types of software testing are used with the common objective of finding defects in that particular component. Software testing is classified according to two basic types of software testing: Manual Scripted Testing and Automated Testing. Manual Scripted Testing:
Black Box Testing White Box Testing

Gray Box Testing

The levels of software testing life cycle includes : Unit Testing Integration Testing System Testing

Acceptance Testing

1. Alpha Testing 2. Beta Testing

Other types of software testing are: Functional Testing Performance Testing 1. Load Testing

2.

Stress Testing

Smoke Testing Sanity Testing Regression Testing Recovery Testing


Usability Testing Compatibility Testing

Configuaration Testing
Exploratory Testing

For further explanation of these concepts, read more on types of software testing. Automated Testing: Manual testing is a time consuming process. Automation testing involves automating a manual process. Test automation is a process of writing a computer program in the form of scripts to do a testing which would otherwise need to be done manually. Some of the popular automation tools are Winrunner, Quick Test Professional (QTP), LoadRunner, SilkTest, Rational Robot, etc. Automation tools category also includes maintenance tool such as TestDirector and many other. Software Testing Methodologies The software testing methodologies or process includes various models that built the process of working for a particular product. These models are as follows:
Waterfall Model V Model Spiral Model Rational Unified Process(RUP)

Agile Model Rapid Application Development(RAD)

These models are elaborated briefly in software testing methodologies. Software Testing Artifacts Software testing process can produce various artifacts such as: Test Plan: A test specification is called a test plan. A test plan is documented so that it can be used to verify and ensure that a product or system meets its design specification. Traceability matrix: This is a table that correlates or design documents to test documents. This verifies that the test results are correct and is also used to change tests when the source documents are changed.

Test Case: Test cases and software testing strategies are used to check the functionality of individual component that is integrated to give the resultant product. These test cases are developed with the objective of judging the application for its capabilities or features. Test Data: When multiple sets of values or data are used to test the same functionality of a particular feature in the test case, the test values and changeable environmental components are collected in separate files and stored as test data. Test Scripts: The test script is the combination of a test case, test procedure and test data. Test Suite: Test suite is a collection of test cases.

Software Testing Process Software testing process is carried out in the following sequence, in order to find faults in the software system: 1. 2. 3. 4. 5. 6. 7. 8. Create Test Plan Design Test Case Write Test Case Review Test Case Execute Test Case Examine Test Results Perform Post-mortem Reviews Budget after Experience

Here is a sample Test Case for you: # Software Test Case for Login Page: Purpose: The user should be able to go to the Home page. Pre-requisite: 1. S/w should be compatible with the Operating system. 2. Login page should appear. 3. User Id and Password textboxes should be available with appropriate labels. 4. Submit and Cancel buttons with appropriate captions should be available. Test Data: Required list of variables and their values should be available.eg: User Id: {Valid UserId, Invalid UserId, empty}, Password:{Valid, Invalid, empty}. :{Valid, Invalid, empty}.
Test Id

Sr.No Case Test Case Name

Steps/Action

Expected Results

1.

User views the page to check whether it includes UserId and Password textboxes with Screen dispalys user Checking User Interface TC1. appropriate labels. Also expects interface requirements requirements. that Submit and Cancel buttons according to the user. are available with appropriate captions TC2. Textbox for UserId should: i)allow only alphai)User types numbers into the textbox. i)Error message is displayed for numeric data.

2.

numeric characters{a-z, A-Z} ii)not allow special ii)User types alphanumeric data characters in the textbox. like{'$','#','!','~','*',...} iii)not allow numeric characters like{0-9}

ii)Text is accepted when user enters alphanumeric data into the textbox.

3.

i)Error message is displayed when user i)User enters only two characters enters less than six in the password textbox. Checking functionality of characters in the the Password textbox: password textbox. i)Textbox for Password System accepts data should accept more than ii)User enters more than six TC3. when user enters more six characters. characters in the password than six characters into ii)Data should be textbox. the password textbox. displayed in encrypted System accepts data in format. ii)User checks whether his data the encrypted format is displayed in the encrypted else displays an error format. message. i)System displays i)User checks whether 'SUBMIT' 'SUBMIT' button as button is enabled or disabled. enabled

4.

TC4.

Checking functionality of 'SUBMIT' button. ii)User clicks on the 'SUBMIT' button and expects to view the 'Home' page of the application.

ii)System is redirected to the 'Home' page of the application as soon as he clicks on the 'SUBMIT' button.

i)System displays i)User checks whether 'CANCEL' 'CANCEL' button as button is enabled or disabled. enabled. 5. TC5. Checking functionality of ii)User checks whether the 'CANCEL' button. textboxes for UserId and Password are reset to blank by clicking on the 'CANCEL' button. ii)System clears the data available in the UserId and Password textbox when user clicks on the 'CANCEL' button.

Fault Finding Techniques in Software Testing Finding of a defect or fault in the earlier parts of the software not only saves time and money, but is also efficient in terms of security and profitability. As we move forward towards the different levels of the software, it becomes difficult and tedious to go back for finding the problems in the initial conditions of the components. The cost of finding the defect also increases. Thus it is recommended to start testing from the initial stages of the life cycle. There are various techniques involved alongwith the types of software testing. There is a procedure that is to be followed for finding a bug in the application. This procedure is combined into the life cycle of the bug in the form of contents of a bug, depending upon the severity and priority of that bug. This life cycle is named as the bug life cycles, which helps the tester in answering the question - how to log a bug?

Measuring Software Testing There arises a need of measuring the software, both, when the software is under development and after the system is ready for use. Though it is difficult to measure such an abstract constraint, it is essential to do so. The elements that are not able to be measured, needs to be controlled. There are some important uses of measuring the software: Software metrics helps in avoiding pitfalls such as 1. cost overruns, 2. in identifying where the problem has raised, 3. clarifying goals. It answers questions such as: 1. What is the estimation of each process activity?, 2. How is the quality of the code that has been developed?, 3. How can the under developed code be improved?, etc. It helps in judging the quality of the software, cost and effort estimation, collection of data, productivity and performance evaluation.

Some of the common software metrics are: Code Coverage Cyclomatic complexity Cohesion Coupling Function Point Analysis Execution time Source lines of code Bug per lines of code

In short, measurement of a software is for understanding, controlling and improvement of the software system. Software is subject to changes, with respect to, changing environmental conditions, varying user requirements, as well as configuration and compatibility issues. This gives rise to the development of newer and updated versions of software. But, there should be some source of getting back to the older versions easily and working on them efficiently. Testers play a vital role in this. Here is where change management comes into picture.

Manual Testing Q&A What is Manual Testing? Manual testing is the method used to check a software for defects manually. In this type of testing, the tester wears the grabs of the end user. All the features of a software are tested to know, if the behavior of the software is exactly according to the expectations of the customer. Normally, the tester has a test plan, which he uses for testing. Other than the test plan, there are test cases written, which are used for implementing the test plan. Manual Testing Tutorial After the introduction to software testing, we will now turn towards the software testing tutorial. The tutorial deals with almost all the basics used in manual testing. Stages of Manual Testing

The entire process of manual testing goes through four phases. The first phase is called as unit testing. It is the job of the developer to test the units of the code written by the developer himself. In some cases, the code may also be tested by a peer. Integration testing is the second phase of software testing. It is carried out, when bigger chunks of codes are integrated to form a bigger block of code. Either black box or white box testing is carried out in this phase. The next phase is the system testing phase. The software is tested for all possibilities to rule out any kind of abnormality in the system. Normally black box testing technique is used in the system testing phase. User acceptance testing is per say the last stage of manual testing. In this phase, the software is tested keeping the end user in mind. There are two types of acceptance testing, which are used, namely alpha testing and beta testing. Software Testing Life Cycle Like the software development life cycle, the software also goes through the software testing life cycle. It is often seen that the software testing interview questions and answers revolve a lot around the software testing life cycle. The different phases in the software testing life cycle are: Requirement Phase Test Planning Phase Test Analysis Phase Test Design Phase Test Verification and Construction Phase Test Execution Phase Result Analysis Phase Bug Tracking and Reporting Phase Rework Phase Final Test and Implementation Phase

Software Testing Strategy There are three software testing types, under which all the software testing activities are carried out. They are:
White Box Testing Strategy Black Box Testing Strategy

Gray Box Testing Strategy

There are other types of software testing, which are used to test the product to ensure that the software meets the requirements of the end user. They include: Functional Testing Smoke Testing
Usability Testing Validation Testing Compatibility Testing

Sanity Testing
Exploratory Testing Security Testing

Regression Testing Recovery Testing Performance Testing (This includes 2 sub-types - Load Testing and Stress Testing

Testing is a process of gathering information by making observations and comparing them to expectations. Dale Emery

In our day-to-day life, when we go out, shopping any product such as vegetable, clothes, pens, etc. we do check it before purchasing them for our satisfaction and to get maximum benefits. For example, when we intend to buy a pen, we test the pen before actually purchasing it i.e. if its writing, does it break if it falls, does it work in extreme climatic conditions, etc. So, though its the software, hardware or any product, testing turns to be mandatory. What is Software Testing? Software Testing is a process of verifying and validating whether the program is performing correctly with no bugs. It is the process of analyzing or operating software for the purpose of finding bugs. It also helps to identify the defects / flaws / errors that may appear in the application code, which needs to be fixed. Testing not only means fixing the bug in the code, but also to check whether the program is behaving according to the given specifications and testing strategies. There are various types of software testing strategies such as white box testing strategy, black box testing strategy, grey box software testing strategy, etc. Need of Software Testing Types Types of Software Testing, depends upon different types of defects. For example: Functional testing is done to detect functional defects in a system. Performance Testing is performed to detect defects when the system does not perform according to the specifications Usability Testing to detect usability defects in the system. Security Testing is done to detect bugs/defects in the security of the system.

The list goes on as we move on towards different layers of testing. Types of Software Testing Various software testing methodologies guide you through the consecutive software testing types. Those who are new to this subject, here is some information on software testing - how to go about for beginners. To determine the true functionality of the application being tested, test cases are designed to help the developers. Test cases provide you with the guidelines for going through the process of testing the software. Software testing includes two basic types of software testing, viz. Manual Scripted Testing and Automated Testing. Manual Scripted Testing: This is considered to be one of the oldest type of software testing methods, in which test cases are designed and reviewed by the team, before executing it. Automated Testing: This software testing type applies automation in the testing, which can be applied to various parts of a software process such as test case management, executing test cases, defect management, reporting of the bugs/defects. The bug life cycle helps the tester in deciding how to log a bug and also guides the developer to decide on the priority of the bug depending upon the severity of logging it. Software bug testing or software testing to log a bug, explains the contents of a bug that is to be fixed. This can be done with the help of various bug tracking tools such as Bugzilla and defect tracking management tools like the Test Director.

Other Software Testing Types Software testing life cycle is the process that explains the flow of the tests that are to be carried on each step of software testing of the product. The V- Model i.e Verification and Validation Model is a perfect model which is used in the improvement of the software project. This model contains software development life cycle on one side and software testing life cycle on the other hand side. Checklists for software tester sets a baseline that guides him to carry on the day-to-day activities. Black Box Testing It explains the process of giving the input to the system and checking the output, without

considering how the system generates the output. It is also called as Behavioral Testing. Functional Testing: In this type of testing, the software is tested for the functional requirements. This checks whether the application is behaving according to the specification. Performance Testing: This type of testing checks whether the system is performing properly, according to the user's requirements. Performance testing depends upon the Load and Stress Testing, that is internally or externally applied to the system.

1. Load Testing : In this type of performance testing, the system is raised beyond the limits
in order to check the performance of the system when higher loads are applied.

2. Stress Testing : In this type of performance testing, the system is tested beyond the
normal expectations or operational capacity Usability Testing: This type of testing is also called as 'Testing for User Friendliness'. This testing checks the ease of use of an application. Read more on introduction to usability testing. Regression Testing: Regression testing is one of the most important types of testing, in which it checks whether a small change in any component of the application does not affect the unchanged components. Testing is done by re-executing the previous versions of the application. Smoke Testing: Smoke testing is used to check the testability of the application. It is also called 'Build Verification Testing or Link Testing'. That means, it checks whether the application is ready for further major testing and working, without dealing with the finer details. Sanity Testing: Sanity testing checks for the behavior of the system. This type of software testing is also called as Narrow Regression Testing. Parallel Testing: Parallel testing is done by comparing results from two different systems like old vs new or manual vs automated. Recovery Testing: Recovery testing is very necessary to check how fast the system is able to recover against any hardware failure, catastrophic problems or any type of system crash. Installation Testing: This type of software testing identifies the ways in which installation procedure leads to incorrect results. Compatibility Testing: Compatibility Testing determines if an application under supported configurations perform as expected, with various combinations of hardware and software packages. Read more on compatibility testing. Configuration Testing: This testing is done to test for compatibility issues. It determines minimal and optimal configuration of hardware and software, and determines the effect of adding or modifying resources such as memory, disk drives and CPU. Compliance Testing: This type of testing checks whether the system was developed in accordance with standards, procedures and guidelines. Error-Handling Testing: This software testing type determines the ability of the system to properly process erroneous transactions. Manual-Support Testing: This type of software testing is an interface between people and application system. Inter-Systems Testing: This type of software testing method is an interface between two or more

application systems. Exploratory Testing: Exploratory Testing is a type of software testing, which is similar to ad-hoc testing, and is performed to explore the software features. Read more on exploratory testing. Volume Testing: This testing is done, when huge amount of data is processed through the application. Scenario Testing: This type of software testing provides a more realistic and meaningful combination of functions, rather than artificial combinations that are obtained through domain or combinatorial test design. User Interface Testing: This type of testing is performed to check, how user-friendly the application is. The user should be able to use the application, without any assistance by the system personnel. System Testing: System testing is the testing conducted on a complete, integrated system, to evaluate the system's compliance with the specified requirements. This type of software testing validates that the system meets its functional and non-functional requirements and is also intended to test beyond the bounds defined in the software/hardware requirement specifications. User Acceptance Testing: Acceptence Testing is performed to verify that the product is acceptable to the customer and it's fulfilling the specified requirements of that customer. This testing includes Alpha and Beta testing.

1. Alpha Testing: Alpha testing is performed at the developer's site by the customer in a
closed environment. This testing is done after system testing.

2. Beta Testing: This type of software testing is done at the customer's site by the customer
in the open environment. The presence of the developer, while performing these tests, is not mandatory. This is considered to be the last step in the software development life cycle as the product is almost ready. White Box Testing It is the process of giving the input to the system and checking, how the system processes the input, to generate the output. It is mandatory for a tester to have the knowledge of the source code. Unit Testing: This type of testing is done at the developer's site to check whether a particular piece/unit of code is working fine. Unit testing deals with testing the unit as a whole. Static and Dynamic Analysis: In static analysis, it is required to go through the code in order to find out any possible defect in the code. Whereas, in dynamic analysis the code is executed and analyzed for the output. Statement Coverage: This type of testing assures that the code is executed in such a way that every statement of the application is executed at least once. Decision Coverage: This type of testing helps in making decision by executing the application, at least once to judge whether it results in true or false. Condition Coverage: In this type of software testing, each and every condition is executed by making it true and false, in each of the ways at least once. Path Coverage: Each and every path within the code is executed at least once to get a full path coverage, which is one of the important parts of the white box testing.

Integration Testing: Integration testing is performed when various modules are integrated with each other to form a sub-system or a system. This mostly focuses in the design and construction of the software architecture. Integration testing is further classified into Bottom-Up Integration and Top-Down Integration testing.

1. Bottom-Up Integration Testing: In this type of integration testing, the lowest level 2.
components are tested first and then alleviate the testing of higher level components using 'Drivers'. Top-Down Integration Testing: This is totally opposite to bottom-up approach, as it tests the top level modules are tested and the branch of the module are tested step by step using 'Stubs' until the related module comes to an end.

Security Testing: Testing that confirms, how well a system protects itself against unauthorized internal or external, or willful damage of code, means security testing of the system. Security testing assures that the program is accessed by the authorized personnel only. Read more on brief introduction to security testing. Mutation Testing: In this type of software testing, the application is tested for the code that was modified after fixing a particular bug/defect. Software testing methodologies and different software testing strategies help to get through this software testing process. These various software testing methods show you the outputs, using the above mentioned software testing types, and helps you check if the software satisfies the requirement of the customer. Software testing is indeed a vast subject and one can make a successful carrier in this field. You could go through some software testing interview questions, to prepare yourself for some software testing tutorials. Software Testing Techniques The software testing methodologies are divided into static testing techniques and dynamic testing techniques. Software review and static analysis by using tools are the methods, which come under static testing techniques. Specification based testing techniques, structure based testing techniques and experience based testing techniques are all included under dynamic testing technique. Equivalence partitioning is one of the important strategy used in specification based testing technique. Take a look at the article titled software testing technique for detailed information. Bug Life Cycle The aim of the entire software testing activity is to find defects in the software, before it is released to the end user for use. The bug life cycles starts after the tester logs a bug. The phases in the bug life cycle are: New Open Assign Test Deferred Rejected Duplicate Verified Reopened Closed For further information on bug life cycle, you may want to read on:

Bug and Statuses Used During a Bug Life Cycle Contents of a Bug

Software Testing Models (Methodologies) There are different software testing models, which the software testing team can choose from. Each of these models have different methods, as they are based on different principles. A number of factors are taken into consideration, before a particular model is chosen. The different models that are used are:
Waterfall Model in Testing Validation and Verification Model Spiral Model Rational Unified Process (RUP) Model Agile Model

Rapid Application Development (RAD) Model

Validation and Verification Model


Software Verification & Validation is one such model, which helps the system designers and test engineers to confirm that a right product is build right way throughout the development process and improve the quality of the software product. A right product is developed in a right manner. Verification & Validation Model makes it sure that, certain rules are followed at the time of development of a software product and product that is developed fulfills the required specifications. This reduces the risk associated with any software project up to certain level by helping in detection and correction of errors and mistakes, which are unknowingly done during the development process. What is Verification? The standard definition of Verification goes like this: "Are we building the product RIGHT?" i.e. Verification is a process that makes it sure that the software product is developed the right way. The software should confirm to its predefined specifications, as the product development goes through different stages, an analysis is done to ensure that all required specifications are met. Methods and techniques used in the Verification and Validation shall be designed carefully, the planning of which starts right from the beginning of the development process. The Verification part of Verification and Validation Model comes before Validation, which incorporates Software inspections, reviews, audits, walkthroughs, buddy checks etc. in each phase of verification (every phase of Verification is a phase of the Testing Life Cycle) During the Verification, the work product (the ready part of the Software being developed and various documentations) is reviewed/examined personally by one ore more persons in order to find and point out the defects in it. This process helps in prevention of potential bugs, which may cause in failure of the project. Few terms involved in Verification: Inspection: Inspection involves a team of about 3-6 people, led by a leader, which formally reviews the documents and work product during various phases of the product development life cycle. The work product and related documents are presented in front of the inspection team, the member of which carry different interpretations of the presentation. The bugs that are detected during the inspection are communicated to the next level in order to take care of them. Walkthroughs:

Walkthrough can be considered same as inspection without formal preparation (of any presentation or documentations). During the walkthrough meeting, the presenter/author introduces the material to all the participants in order to make them familiar with it. Even when the walkthroughs can help in finding potential bugs, they are used for knowledge sharing or communication purpose. Buddy Checks: This is the simplest type of review activity used to find out bugs in a work product during the verification. In buddy check, one person goes through the documents prepared by another person in order to find out if that person has made mistake(s) i.e. to find out bugs which the author couldnt find previously. The activities involved in Verification process are: Requirement Specification verification, Functional design verification, internal/system design verification and code verification (these phases can also subdivided further). Each activity makes it sure that the product is developed right way and every requirement, every specification, design code etc. is verified!
Software Verification & Validation Model - An Introduction

What is Validation? Validation is a process of finding out if the product being built is right? i.e. whatever the software product is being developed, it should do what the user expects it to do. The software product should functionally do what it is supposed to, it should satisfy all the functional requirements set by the user. Validation is done during or at the end of the development process in order to determine whether the product satisfies specified requirements. Validation and Verification processes go hand in hand, but visibly Validation process starts after Verification process ends (after coding of the product ends). Each Verification activity (such as

Requirement Specification Verification, Functional design Verification etc.) has its corresponding Validation activity (such as Functional Validation/Testing, Code Validation/Testing, System/Integration Validation etc.). All types of testing methods are basically carried out during the Validation process. Test plan, test suits and test cases are developed, which are used during the various phases of Validation process. The phases involved in Validation process are: Code Validation/Testing, Integration Validation/Integration Testing, Functional Validation/Functional Testing, and System/User Acceptance Testing/Validation. Terms used in Validation process: Code Validation/Testing: Developers as well as testers do the code validation. Unit Code Validation or Unit Testing is a type of testing, which the developers conduct in order to find out any bug in the code unit/module developed by them. Code testing other than Unit Testing can be done by testers or developers. Integration Validation/Testing: Integration testing is carried out in order to find out if different (two or more) units/modules coordinate properly. This test helps in finding out if there is any defect in the interface between different modules. Functional Validation/Testing: This type of testing is carried out in order to find if the system meets the functional requirements. In this type of testing, the system is validated for its functional behavior. Functional testing does not deal with internal coding of the project, in stead, it checks if the system behaves as per the expectations. User Acceptance Testing or System Validation: In this type of testing, the developed product is handed over to the user/paid testers in order to test it in real time scenario. The product is validated to find out if it works according to the system specifications and satisfies all the user requirements. As the user/paid testers use the software, it may happen that bugs that are yet undiscovered, come up, which are communicated to the developers to be fixed. This helps in improvement of the final product.

Waterfall Model
In software engineering, there are a number of development models used. When a software has to be developed it is not uncommon to see that there is debate between the different models, which can be used for developing the software. Waterfall model is one of the model, which is often used for software development. It is a classic software development model. It is among the first few models to be introduced in software development. Like every other software development model, this model has a set path which is followed, while developing a software. There are advantages as well as disadvantages of using this model for software development. We will read about waterfall model as well as about the advantages and disadvantages of this model now. What is the Waterfall Model in Software Engineering? Waterfall model uses the classic approach towards software development. It uses linear and sequential approach in software design as well as development. The progress of the software is steady downward flow, similar to that of a waterfall. This model originated in the manufacturing and construction industry. It flows a highly structured pattern, where the changes to the model after the phase in the waterfall model life cycle has passed often prove to be very costly. This model was adapted initially for software development, as no other model was available at that time. The phases in the waterfall model in software engineering are looked upon as separate process in

itself. After the phase is over, there is no going back to the phase. The waterfall model examples prove to be of immense help in understanding the model better. Waterfall Model Life Cycle I have previously mentioned, that there are different phases in waterfall model in software engineering. There is strict division of work between the different phases of the model. We will now see how waterfall model SDLC progresses. Requirement Specification and Analysis Phase This is the first phase in the waterfall software development model. It is in this phase that all the requirements from the user are captured. Analysis of the requirements is carried out to find out the possibility and validity of the requirements, which helps in assessing if the requirements can be incorporated in the system. The different functionality required along with the constraints are also taken into consideration in this phase. In this phase it is important that the purpose of the system and the target audience be taken into consideration, so that the chances of the system going wrong are minimized. At the end of the phase, requirement specification document is made. This document is like a guide to the next phases of the model. Design Phase This is one of the important waterfall model phases. In this phase the software to be developed is designed. The specifications of the system are taken into consideration and on the basis of the study of the specification the system design is made. Along with the software requirements, the hardware requirements and the other system requirements are also decided in this phase. In short the entire system architecture is chalked out. If this phase has to be summed up in one line, we can say that this phase provides the answer to the question how, which was created after the answer to the question what from the previous phase found. Implementation The third phase in the waterfall model diagram is the implementation phase. In this phase the actual software is developed. There is unit testing carried out after the particular module has been developed as well. Carrying out the tests in this phase often proves to be beneficial, as the problems in the system are identified early into the software development phase. System Integration After all the modules of the software have been developed and unit tested, the system integration phase starts. Once the entire system has been integrated, system testing is carried out. This tests helps in identifying the problems created after the entire system has been integrated. It is not uncommon to see that a particular module has created a problem for other module or modules. It is here that the verification is carried out to know if the system works as per the specifications of the end user. Once the test results are positive, the process moves to the next step. Delivery and Maintenance Phase After the software is working as per the specifications of the end user, the system is ready for delivery. The software is delivered to the end user. Often there are problems, which arise after the end user starts using the system. When the problems arise, the problems have to be rectified. Sometimes, the problems in the system are seen after substantial amount of time. The software development team is liable to rectify the problems in the system for a certain period of time, after the system has been deployed. In some cases, additional features may also have to be added to the system. Waterfall Model Advantages and Disadvantages Now that the the waterfall model is explained, we will move forward to know the positives and negatives of using the waterfall model for software development. There are waterfall model

advantages and disadvantages, therefore some people choose to opt for other models. One of the commonly used model is the agile model, due to which arises the waterfall model vs agile debate as

well. Waterfall Model Advantages It is the advantages of using the waterfall model, due to which the model has sustained itself even after a number of software development models have been introduced. The most important advantage of this model is that it is simple and easy to implement. This model follows the linear pattern in development, therefore there is no chaos, while the system is been developed. The resources required to implement the model are on the minimal side. Designing and implementing the model is easier and simpler also because of the fact that the documentation work is carried out in the early phase of the software development life cycle itself. After the units are created there is testing carried out, which helps in eradicating the number of bugs in the system. Waterfall Model Disadvantages Every coin has two sides. Therefore, as there are advantages of the waterfall model, there are certain disadvantages of the model as well. The most important disadvantage of this model is that it is compartmentalized. In case of any mistake, one can not go back to the previous stage. This often leads to a number of complications in the implementation phase. There is also a possibility, that the client makes changes to the requirements, as he was not really sure about the flow of the software. Therefore, any changes introduced in the middle of the software development leads to a number of problems. So that one can go back to the previous stag, came the modified waterfall model into existence. The other disadvantage which deters a lot of people from using the model is that a working software is not ready till one reaches the last stage of development. It is not uncommon to see waterfall model in testing as well. After taking the drawbacks of the waterfall model into consideration, the modified waterfall model came into existence. In this model a loop was added to the previous stage due to which making changes to the system became more convenient.

Spiral Model
Software development process is a structured process of developing a software. There are a number of models, which can be used to develop a software, like waterfall model, spiral life cycle model, iterative and incremental development model, agile development, etc. In each of the models, the steps are broadly divided into three stages, namely the planning stage, implementation, testing and documenting stage and at last the deployment and maintenance stage. Whichever model be chosen for software development, the software in the end has to go through these stages. The order in which the software goes through the model may vary. Each of the models, which can be used in the software development life cycle, has its own pros and cons. Therefore, depending on the team, the project, availability of the resources, urgency level, etc. the model to be adopted is chosen by the development team. There is also a possibility of number of models been combined together, depending on the needs of the project.

Spiral Life Cycle Model

Spiral Life Cycle Model The definition of spiral model was made by Barry Boehm in his article A Spiral Model of Software Development and Enhancement in 1986. Although this model did not come up with the iterative approach in software development, it was the first model, which explained the importance of iteration in software development. The spiral life cycle model combines the elements of both design, as well as prototyping in stages. Due to which it can reap the advantages of both top down as well as bottom up approach as well. The spiral model used in software engineering combines the features of the waterfall model and the prototyping model. It is often used for large, expensive and complicated projects. This is due to the fact, the key characteristics of this model is risk management at regular stages in the entire software development cycle. Like the name suggests, the activities of software development in this model are organized like a spiral. The steps in the spiral model are generalized as follows: The very first step in this life cycle model is detailed system requirement definition. In this step, the requirement is perfected to the last details, by interviewing a number of users, who represent the external and/or internal users of the proposed system. The different aspects of the system are also found out in this step. After the system definition is made, a preliminary design is made of the proposed system. This is said to be the most important step of the spiral model. An analysis is carried out of

all the possible as well as available alternatives are searched for, to develop a cost effective system. Along with it the strategies to implement the alternatives are also decided upon. All the possible risks in the project are also identified in the same phase. The methods to resolve them are also determined immediately. In case of any risks, which point to uncertainty in the requirements, prototyping is used to make way with the available data and find out the solution to be able to deal with any potential changes, which may come about in the requirements. After the analysis, the first prototype is made using the preliminary design. It is not a full version, but a scaled down version, which represents an approximation of the final product. The characteristics of the first prototype and the final version similar to one another up to a large extent. The first prototype is evaluated to make the second prototype. The evaluation is made on terms of strengths, weakness and risks. Then the requirements for the second prototype are defined. Then comes the planning and designing of the second prototype, followed by constructing and testing of the second prototype. Accordingly the phases keep going in spirals, till the entire system is ready. The bugs from the previous prototype are fixed in the next prototype.

Spiral Model - Advantages and Disadvantages Every software development model has its own strengths and weaknesses. Same is the case with the spiral model of software development as well. Advantages of Spiral Model of Software Development The most important advantage of this model is the high amount of risk analysis, due to which the project does not face too many problems towards the end of the project. In case of any problems, the issues are addressed early in the project and the total cost of the project is also lowered. It is a good model to be used for large and mission critical projects. The software is actually made early in the life cycle. Disadvantages of Spiral Model of Software Development High cost involved in using this model can be called as a deterrent in using this software development model. When the risk analysis is carried out, it needs highly specific expertise, which may not be forthcoming all the time. The success of the project is highly dependent on the risk analysis phase of the life cycle model. It may not prove to be useful for smaller projects. The spiral life cycle model proves to be beneficial for projects, which are mission critical and have risky elements in it. It proves beneficial to run a series of risk reduction iterations. The other type of application, where this model is used, is for game development. It helps because the size of the project is often times large and the project has constantly shifting goals of these large projects.

Agile Model
Software development uses a planned and structured process to develop software products. The term software development, is the process, which involves writing and maintaining the code used to develop a software. However, often the process of software development includes the idea of the software, designing the software through to the final development of the software, which is then handed over to the client. There are different models, which have been used to develop software. They include the waterfall model, spiral model, prototype model, incremental model, agile model, etc. What is Agile Model?

The term agile stands for moving quickly. This software development methodology is based on iterative and incremental model of software development. The requirements and the solutions are a product of collaboration between self organizing and cross functional teams. It is a lightweight software development model, which developed in the 1990s. This model was developed against the background of the heavyweight models, which were famous for been heavily regulated, regimented, micromanaged. There were certain principles on which the agile model was to be based. The most important of the principles is customer satisfaction by giving rapid and continuous delivery of small and useful software. The delivery of the software happens at regular intervals as opposed to after a number of months, which is the case with the waterfall model. This is the point where in the waterfall model vs agile debate the agile model scores over the waterfall model. The measure of progress used in agile modeling is the different working models delivered to the client. Since the software is developed in small batches, changes can easily be introduced into the software product. There is a lot of scope for cooperation between the business people and the developers, as the requirements keep coming from the business people at regular intervals. There is a lot of emphasis laid on technical excellence and good design of the software. The software development team has to adapt regularly to the changing circumstances. Agile modeling is a methodology, which makes use of practice for modeling and documentation of software based systems. Traditional modeling methods in software development projects have given way to these practices which are applied in a more flexible manner. It supplements the different agile methodologies like extreme programming, agile unified process and scrum models. Agile Model Advantages and Disadvantages After having understood the agile model, lets turn our attention to know, where does the agile model score over the other models of software development and what are the shortcomings of the agile model. Advantages of Agile Model The most important of the advantages of agile model is the ability to respond to the changing requirements of the project. This ensures that the efforts of the development team are not wasted, which is often the case with the other methodologies. The changes are integrated immediately, which saves trouble later. There is no guesswork between the development team and the customer, as there is face to face communication and continuous inputs from the client. The documents are to the point, which no leaves no space for ambiguity. The culmination of this is that a high quality software is delivered to the client in the shortest period of time and leaves the customer satisfied. Disadvantages of Agile Model If the projects are smaller projects, then using the agile model is certainly profitable, but if it is a large project, then it becomes difficult to judge the efforts and the time required for the project in the software development life cycle. Since the requirements are ever changing, there is hardly any emphasis, which is laid on designing and documentation. Therefore, chances of the project going off the track easily are much more. The added problem is if the customer representative is not sure, then the project going off track increase manifold. Only senior developers are in a better position to take the decisions necessary for the agile type of development, which leaves hardly any place for newbie programmers, until it is combined with the seniors resources. Agile Model in Software Testing Agile model is not only used in software development, but also for software testing. Agile model testing is carried out from the perspective of the end user. There is no emphasis, which is laid on the rigid testing procedures, but the focus is rather on conducting the tests iteratively on the newly

developed software component, as well as regression tests are carried out on the entire software to check if any new bugs were introduced into the software. In the agile testing model, the focus shifts from testers as quality watchdog to the entire team quality watchdog. As the name of the testing methodology suggests, the testers have to adapt themselves to rapid development cycles and make the required changes to the test suite. In this software testing type, the aim is to test from the perspective of the customer as early as possible in the development process. Because the testers are involved early on in the entire process of software development, they give the necessary information, feedback and suggestions to the development team, rather than after the development has come to the final stages. Agile model has given the software development process an effective and practice based methodology. Therefore, the principle maximize stakeholder value can actually be put into practice, leaving the customer satisfied and happy