Tuesday 21 May 2013

Functional Testing - Unit, Integration, System, Acceptance

Functional Testing

  • Unit Testing
  • Integration testing

    • Bottom-up integration
    • Top-down integration

  • System Testing
  • Regression Testing

    • Alpha Testing
    • Beta Testing

Functional Testing definition :

This is a type of black box testing that is based on the specifications of the software that is to be tested. The application is tested by providing input and then the results are examined that need to conform to the functionality it was intended for. Functional Testing of the software is conducted on a complete, integrated system to evaluate the system's compliance with its specified requirements.


There are five steps that are involved when testing an application for functionality.
  • The determination of the functionality that the intended application is meant to perform.
  • The creation of test data based on the specifications of the application.
  • The output based on the test data and the specifications of the application.
  • The writing of Test Scenarios and the execution of test cases.
  • The comparison of actual and expected results based on the executed test cases.
An effective testing practice will see the above steps applied to the testing policies of every organization and hence it will make sure that the organization maintains the strictest of standards when it comes to software quality.

Unit Testing

A unit is smallest testable piece of software :
  • Can be compiled, linked, loaded
  • E.g functions/procedures, classes, interfaces
  • Normally done by programmer
  • Test cases written after coding
This type of testing is performed by the developers before the setup is handed over to the testing team to formally execute the test cases.
  • Unit testing is performed by the respective developers on the individual units of source code assigned areas.
  • The developers use test data that is separate from the test data of the quality assurance team.
  • The goal of unit testing is to isolate each part of the program and show that individual parts are correct in terms of requirements and functionality.

Limitations of Unit Testing : 

Testing cannot catch each and every bug in an application. It is impossible to evaluate every execution path in every software application. The same is the case with unit testing.

There is a limit to the number of scenarios and test data that the developer can use to verify the source code. So after he has exhausted all options there is no choice but to stop unit testing and merge the code segment with other units.

Integration Testing

Test for correct interaction between system units 
  • Systems ‐ built by merging existing libraries
  • Modules coded by different people
  • Mainly tests the interfaces among units

Who does integration testing and when is it done?

  • Done by developers/testers
  • Test cases written when detailed specification is ready
  • Test continuous throughout project

Where is it done?

  • Done on programmer’s workbench

Why is it done?

  • Discover inconsistencies in the combination of units.
The testing of combined parts of an application to determine if they function correctly together is Integration testing. There are two methods of doing Integration Testing Bottom-up Integration testing and Top Down Integration testing.

  • Bottom-up integration - Use of "Drivers"

This testing begins with unit testing, followed by tests of progressively higher-level combinations of units called modules or builds.

  • Top-Down integration - Use of "Stubs"

This testing, the highest-level modules are tested first and progressively lower-level modules are tested after that. In a comprehensive software development environment, bottom-up testing is usually done first, followed by top-down testing. The process concludes with multiple tests of the complete application, preferably in scenarios designed to mimic those it will encounter in customers' computers, systems and network.

System Testing

This is the next level in the testing and tests the system as a whole. Once all the components are integrated, the application as a whole is tested rigorously to see that it meets Quality Standards. This type of testing is performed by a specialized testing team.

Who performs system testing and when is it done?

  • Done by the test team
  • Test cases written when high level design spec is ready

Where is it done?

  • Done on a systemtestmachine
  • Usually in a simulated environment e.g. vmware
System testing is so important because of the following reasons :
  • System Testing is the first step in the Software Development Life Cycle, where the application is tested as a whole.
  • The application is tested thoroughly to verify that it meets the functional and technical specifications.
  • The application is tested in an environment which is very close to the production environment where the application will be deployed.
  • System Testing enables us to test, verify and validate both the business requirements as well as the Applications Architecture.

System Testing vs Integration Testing

  • What vs.How
  • Requirement spec -> what
  • detailed design spec ‐> how
  • System testing functional not structural

Regression Testing

Whenever a change in a software application is made it is quite possible that other areas within the application have been affected by this change. To verify that a fixed bug hasn't resulted in another functionality or business rule violation is Regression testing. The intent of Regression testing is to ensure that a change, such as a bug fix did not result in another fault being uncovered in the application.

Regression testing is so important because of the following reasons:
  • Minimize the gaps in testing when an application with changes made has to be tested.
  • Testing the new changes to verify that the change made did not affect any other area of the application.
  • Mitigates Risks when regression testing is performed on the application.
  • Test coverage is increased without compromising timelines.
  • Increase speed to market the product.

Acceptance Testing

This is arguably the most importance type of testing as it is conducted by the Quality Assurance Team who will gauge whether the application meets the intended specifications and satisfies the client.s requirements. The QA team will have a set of pre written scenarios and Test Cases that will be used to test the application.

More ideas will be shared about the application and more tests can be performed on it to gauge its accuracy and the reasons why the project was initiated. Acceptance tests are not only intended to point out simple spelling mistakes, cosmetic errors or Interface gaps, but also to point out any bugs in the application that will result in system crashers or major errors in the application.

By performing acceptance tests on an application the testing team will deduce how the application will perform in production. There are also legal and contractual requirements for acceptance of the system.

Alpha Testing

This test is the first stage of testing and will be performed amongst the teams (developer and QA teams). Unit testing, integration testing and system testing when combined are known as alpha testing. During this phase, the following will be tested in the application:
  • Spelling Mistakes
  • Broken Links
  • Cloudy Directions
The Application will be tested on machines with the lowest specification to test loading times and any latency problems.

Beta Testing

This test is performed after Alpha testing has been successfully performed. In beta testing a sample of the intended audience tests the application. Beta testing is also known as pre-release testing. Beta test versions of software are ideally distributed to a wide audience on the Web, partly to give the program a "real-world" test and partly to provide a preview of the next release. In this phase the audience will be testing the following:
  • Users will install, run the application and send their feedback to the project team.
  • Typographical errors, confusing application flow, and even crashes.
  • Getting the feedback, the project team can fix the problems before releasing the software to the actual users.
  • The more issues you fix that solve real user problems, the higher the quality of your application will be.
  • Having a higher-quality application when you release to the general public will increase customer satisfaction.

6 comments:

  1. Unit Software Testing = The unit testing features of Visual Studio 2012 were shown to be an effective way to improve software quality by introducing various tests.

    ReplyDelete
  2. Thanks for sharing information about system integration.
    System Integration Companies in India

    ReplyDelete
  3. I appreciate your style of writing because it conveys the message of what you are trying to say. It's a great skill to make even the person who doesn't know about the subject could able to understand the subject . Your blogs are understandable and also informative. I hope to read more and more interesting articles from your blog. All the best.
    Dot Net Training And Placement in Chennai
    Software Testing Training Institute in Chennai
    Java Classes in Chennai
    Best PHP Course in Chennai

    ReplyDelete
  4. INTEGRATION TESTING is a level of software testing where individual units are combined and tested as a group. The purpose of this level of testing is to expose faults in the interaction between integrated units. I like the point Why integration testing we have to do it on applications
    that you explained it simply.
    Will wait for more article related to software testing

    ReplyDelete

Share your feedback and queries here. Your feedback are more valuable to us!