Difference between acceptance test and functional test?

118,655

Solution 1

In my world, we use the terms as follows:

functional testing: This is a verification activity; did we build a correctly working product? Does the software meet the business requirements?

For this type of testing we have test cases that cover all the possible scenarios we can think of, even if that scenario is unlikely to exist "in the real world". When doing this type of testing, we aim for maximum code coverage. We use any test environment we can grab at the time, it doesn't have to be "production" caliber, so long as it's usable.

acceptance testing: This is a validation activity; did we build the right thing? Is this what the customer really needs?

This is usually done in cooperation with the customer, or by an internal customer proxy (product owner). For this type of testing we use test cases that cover the typical scenarios under which we expect the software to be used. This test must be conducted in a "production-like" environment, on hardware that is the same as, or close to, what a customer will use. This is when we test our "ilities":

  • Reliability, Availability: Validated via a stress test.

  • Scalability: Validated via a load test.

  • Usability: Validated via an inspection and demonstration to the customer. Is the UI configured to their liking? Did we put the customer branding in all the right places? Do we have all the fields/screens they asked for?

  • Security (aka, Securability, just to fit in): Validated via demonstration. Sometimes a customer will hire an outside firm to do a security audit and/or intrusion testing.

  • Maintainability: Validated via demonstration of how we will deliver software updates/patches.

  • Configurability: Validated via demonstration of how the customer can modify the system to suit their needs.

This is by no means standard, and I don't think there is a "standard" definition, as the conflicting answers here demonstrate. The most important thing for your organization is that you define these terms precisely, and stick to them.

Solution 2

I like the answer of Patrick Cuff. What I like to add is the distinction between a test level and a test type which was for me an eye opener.

test levels

Test level is easy to explain using V-model, an example: enter image description here Each test level has its corresponding development level. It has a typical time characteristic, they're executed at certain phase in the development life cycle.

  1. component/unit testing => verifying detailed design
  2. component/unit integration testing => verifying global design
  3. system testing => verifying system requirements
  4. system integration testing => verifying system requirements
  5. acceptance testing => validating user requirements

test types

A test type is a characteristics, it focuses on a specific test objective. Test types emphasize your quality aspects, also known as technical or non-functional aspects. Test types can be executed at any test level. I like to use as test types the quality characteristics mentioned in ISO/IEC 25010:2011.

  1. functional testing
  2. reliability testing
  3. performance testing
  4. operability testing
  5. security testing
  6. compatibility testing
  7. maintainability testing
  8. transferability testing

To make it complete. There's also something called regression testing. This an extra classification next to test level and test type. A regression test is a test you want to repeat because it touches something critical in your product. It's in fact a subset of tests you defined for each test level. If a there's a small bug fix in your product, one doesn't always have the time to repeat all tests. Regression testing is an answer to that.

Solution 3

The difference is between testing the problem and the solution. Software is a solution to a problem, both can be tested.

The functional test confirms the software performs a function within the boundaries of how you've solved the problem. This is an integral part of developing software, comparable to the testing that is done on mass produced product before it leaves the factory. A functional test verifies that the product actually works as you (the developer) think it does.

Acceptance tests verify the product actually solves the problem it was made to solve. This can best be done by the user (customer), for instance performing his/her tasks that the software assists with. If the software passes this real world test, it's accepted to replace the previous solution. This acceptance test can sometimes only be done properly in production, especially if you have anonymous customers (e.g. a website). Thus a new feature will only be accepted after days or weeks of use.

Functional testing - test the product, verifying that it has the qualities you've designed or build (functions, speed, errors, consistency, etc.)

Acceptance testing - test the product in its context, this requires (simulation of) human interaction, test it has the desired effect on the original problem(s).

Solution 4

The answer is opinion. I worked in a lot of projects and being testmanager and issuemanager and all different roles and the descriptions in various books differ so here is my variation:

functional-testing: take the business requirements and test all of it good and thorougly from a functional viewpoint.

acceptance-testing: the "paying" customer does the testing he likes to do so that he can accept the product delivered. It depends on the customer but usually the tests are not as thorough as the functional-testing especially if it is an in-house project because the stakeholders review and trust the test results done in earlier test phases.

As I said this is my viewpoint and experience. The functional-testing is systematic and the acceptance-testing is rather the business department testing the thing.

Solution 5

  1. Audience. Functional testing is to assure members of the team producing the software that it does what they expect. Acceptance testing is to assure the consumer that it meets their needs.

  2. Scope. Functional testing only tests the functionality of one component at a time. Acceptance testing covers any aspect of the product that matters to the consumer enough to test before accepting the software (i.e., anything worth the time or money it will take to test it to determine its acceptability).

Software can pass functional testing, integration testing, and system testing; only to fail acceptance tests when the customer discovers that the features just don't meet their needs. This would usually imply that someone screwed up on the spec. Software could also fail some functional tests, but pass acceptance testing because the customer is willing to deal with some functional bugs as long as the software does the core things they need acceptably well (beta software will often be accepted by a subset of users before it is completely functional).

Share:
118,655

Related videos on Youtube

JavaRocky
Author by

JavaRocky

Software Engineer. "It the code is hot, we gonna kill it! :)" -- DaCav5 Geekstyle

Updated on June 20, 2020

Comments

  • JavaRocky
    JavaRocky almost 4 years

    What is the real difference between acceptance tests and functional tests?

    What are the highlights or aims of each? Everywhere I read they are ambiguously similar.

  • evilkorona
    evilkorona over 13 years
    I like this answer :) They're pretty much the same thing.
  • Tom Stickel
    Tom Stickel over 11 years
    UAT is yes ultimately done by the "paying" customer. However, it is most of time first done by a QA person that is "good" with testing and "trying" to break the the system and looking for all the "little" things BEFORE the "paying" customer gets their hands on it. Selenium automation for repeating tedious things can also be used along with true UAT testing by a QA tester, but never to repeat true testing to test all functionality expected with all expected browsers. UAT is pretty self explanatory. I think most of the functional testing descriptions seem to be to robotic and dictionary.
  • Tom Stickel
    Tom Stickel over 11 years
    While automation with Selenium and Watin (or Watir) etc... are very valuable first line of defense, nothing beats a trained QA person that is set on "breaking the system. Automation is great, but with modern development of AJAX and javascript framework and the changing of output on a page, to automate everything is a scripting updating nightmare. They are NOT the same thing
  • hol
    hol over 11 years
    As I said this is my experience how the terms are interpreted.
  • Tom Stickel
    Tom Stickel over 11 years
    That is fine. When I noticed this vague definition... I just had to comment "functional-testing: take the business requirements and test all of it good and thorougly from a functional viewpoint."
  • hol
    hol over 11 years
    Haha, yes, now I understand you. Okay, this is something you could write a whole book about it. I did not want to go into this too much the moment I wrote it.
  • jjpcondor
    jjpcondor about 10 years
    Acceptance testing will determine whether or not a system satisfies the acceptance criteria of a given use case or all imaginable use cases. It is usually performed by a expert-user to determine whether or not the system is acceptable. In aeronautics a test pilot is an aviator who tests new aircraft by fling specific maneuvers. Top pilots, navigators and engineers conduct flight tests and at the end of the test missions they will provide evaluation and certification data.
  • Geo C.
    Geo C. about 7 years
    plus 1 for the nice answer and "aka, Securability, just to fit in" :) . Funny thing :) SO team did not take into consideration the fact that in the real world someone may replace the + sign with the real word like I did. So they do not allow to type +1 as first word in the comment but they allow "plus 1" :). So functionally, they failed to test this properly :). Myabe they just tried acceptance tests :)
  • zmilan
    zmilan almost 7 years
    This is the best answer to this question and "distinction between a test level and a test type" is something that most answers miss here and you are right it is "eye opener"
  • Lou
    Lou over 3 years
    This is my favourite answer on this question. The distinction between a problem and a solution helps to make this distinction a lot clearer.