1

I have read similar questions here but it did not help. My understanding is as follows:

  1. Integration testing - done by developers, integrating low-level components together
  2. System testing - testing of a single system, as a whole
  3. System integration testing - testing systems together (e.g. front-end with database and external provider).

In practice, often there is no system testing of individual subsystems (we do not test separately the UI or the database layer, usually), we test it together in SIT. Can I even consider the UI or the DB layer be a separate system? But when then testing the whole thing, isn't it again System testing?

7
  • where did you get the difference between integration and system integration, is there a source for this understanding
    – PDHide
    Feb 27 at 20:17
  • 1
    @PDHide It is the standard ISTQB approach. It explicitly states there are two kinds of integration - low level (component) and high-level (inter-system). It is more the question of what do we consider a system, but I think as you said, it depends on the context. Our whole solution (comprised with X systems), might be a single system from another perspective, when interfacing some others.
    – John V
    Feb 28 at 9:53
  • That's right , the terms are created to identify weak links in your system then getting over concerned about it's definitions E
    – PDHide
    Feb 28 at 9:57
  • Some might disagree to approve istqb as authentic body that have any powers , it's just a certification body that it's welcomed by many organisations
    – PDHide
    Feb 28 at 9:59
  • 1
    @PDHide Yes, however these terms are usually generally accepted. ISO 29119 uses the same (Unit, Integration, System, System Integration, Acceptance), and it is somehow obvious also from the classical V-model. Things get blurry when you start thinking about what is the actual system, but I believe you said it right - it is about the context, and how we define it.
    – John V
    Feb 28 at 12:29
3

The terms in software world doesn't usually have a well regulated definition , it is more about understanding the concept and having an organised approach to testing than testing what ever comes to our mind.

so don't need to break your head over these definitions , just remember the below

One of the reliable definitions you can refer is from ISTQB glossary: https://glossary.istqb.org/app/en/search/

Unit Test

A test level that focuses on individual hardware or software components.

so you can define what is component in anyways , it can be a class , an package, a library and so on.

Going too deep and finding the smallest component is not worth it so we considers a class or library as a unit and tests all the methods in the object works fine depending on your project.

Integration testing :

https://glossary.istqb.org/en/term/integration-testing-2#:~:text=integration%20testing,between%20integrated%20components%20or%20systems.

Testing performed to expose defects in the interfaces and in the interactions between integrated components or systems.

Here again you can define what to integrate . so imagine you have 10 components and each component is integrated with each other components .

So if you try to test all this combinations , then you will spend all your time in testing than in developing something

so we don't test all the integrations we will test the integrated system as a whole ,

so in integration test we are testing a system of integrated components works fine, or the interface (API) that allows this integration works fine.

in the latest version of definition we have :

https://glossary.istqb.org/app/en/term/integration-testing-3

A test level that focuses on interactions between components or systems.

they have removed the interface part , but i will like stick on to first definition as it makes more sense.

System Testing

A test level that focuses on verifying that a system as a whole meets specified requirements.

Again system can be defined only by you on the context of your project . For example if your working with multiple agile teams. Each teams responsibility is to provide a delivery that is considered as a system for them

eg furniture is a system sitting on it , jumping on it is part of system testing

in your case if database is part of your team then DB+API+UI is your "system" , you will make sure this works as a whole.

but if your responsibility is to develop API+UI your system is (API+UI) not DB

System integration testing

A test level that focuses on interactions between systems.

eg Moving the chair into a house/room , so your checking how two system the "house" and "chair" works together

in your case:

if DB is handled by some other team , you are checking how "DB+API+System" work together

Summary:

  1. Don't worry much about definitions , testing is highly context depended.
  2. The definition of component/unit, systems, integration etc changes according to your project
  3. You don't have to dissect your product into so many minute components , but to many reusable component , and test its re-usability.
  4. Don't worry too much on component integration because in lower level of abstractions there will be too many integrations you cannot test them all and you don't have to
  5. Tests the interfaces this interactions and tests the system as whole
  6. Concentrate more on business use case than just functionality
1

Yes termiology is viral and has different meanings to different people. It's always a good idea to set the standards for terminology and then hold education sessions on what inter-department agreement.

You'll need buy-in from Managers, Product Owners, Developers, QA Team. Once an internal written document describes the meanings then the fog will lift.

Nothing has really changed in 25 years from Boris Beziers' Software Testing Techniques book. It's really just new spins on the same thing. Marketing new tools is a major terminoloy disrupter.

1

Unit Testing

  1. Test each part of the program to justify that the individual parts are correct.
  2. It can be performed at any time
  3. Does NOT verify whether your code works with external dependencies correctly.
  4. Define the behavior of a single module.

For example: Testing of a tool that downloads images from the internet and able to modify them. Here the first unit test is to test tool should be able to download images and justify all conditions related to download of an image. then the second unit test should be testing of processing of that download images and edit confitionals.

Integration test

  1. To test the combined modules in the application and test as a group to see that they are working fine.
  2. carried out after Unit Testing and before System Testing.
  3. In this testing you may detect errors when modules are integrated to build the overall system.
  4. It pays attention to integration among modules.

For example: As you finished the unit testing of the tool that downloads images from the internet and edits them. Now after unit testing, you know that download an image and edit of an image both separately works fine! but in Integration testing, you required to test both modules combined. where your test case should be looks like - run tool - download image - process to edit in a single round.

System Testing

  1. Also called End to End testing.
  2. Performed right before Acceptance testing.

You can understand system testing as the testing of fully integrated applications including external peripherals in order to check how components interact with one another and with the system as a whole single component.

0

These are common terms used in testing services and being a part of a QA Company, sharing additional differences for these testing terms:-

Integration Testing:- A software project consists of multiple modules, coded by different programmers. The purpose of this level of testing is to expose defects in the interaction between these modules when they are integrated

System Integration Testing:- It is somewhats similar with integration one, is mainly done to check how individual modules interact with each other when integrated into a system as a whole.

It is conducted after unit testing and will be done each time when a new module/components is added to the system.

SIT test cases focus on the interface between the system components.

System Testing:- System testing is mainly done to check if the whole system is working as expected with reference to the specified requirements.

It is conducted at the final level i.e. after the completion of integration testing and just before delivering the system for UAT.

Test cases focus on simulating the real-life scenarios.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.