I was asked this question during an interview. My thoughts are SIT is performed on a complete systems and System Testing can be done on a single module as well.
- Anybody can ask a question
- Anybody can answer
- The best answers are voted up and rise to the top
Systems testing is often performed against the whole platform, and treats the environment as a black box. system integration testing however, acts upon a subset of the whole system, and may mock other platforms, interact with databases, network sockets etc to evoke appropriate responses from the parts being validated.
The objectives of system testing is to validate the public exposed interfaces of the platform, by behaving as an end user, with no privileged access to internal systems. Integration verification attempts to verify that seperate systems operate well together before they're used in the whole system.
In your comment you asked
In testing C, but I believe you won't learn much from short answers.
The long answer is the following. You have a system of systems here. You may perform tests at the same level (single system, system of systems), but at each level you may want to focus on different risks (integration problems, whole functionality).
So let's say you're developing a system A (e.g., online shop) that interacts with external (i.e., not under your control) system B (e.g., PayPal).
You may always consult ISTQB glossary and ISTQB Syllabus if you need clear definitions. Practice is, however, more interesting. You combine multiple dimensions of testing: level (subsystem, system, system of the systems) and risk focus (functionality, integration problems, etc.). And often the boundary between what you test is not so clear. For instance, when you test your online shop functionality, at the same time you are also making sure that backend and frontend has been integrated correctly. The book "Lessons Learned in Software Testing" explains nicely about this combination of testing dimensions in "Lesson 48: Testing combines techniques that focus on testers, coverage, potential problems, activities, and evaluation".
To learn more about what risks integration tests focus on, see another answer.
In my vocabulary system testing would be testing one complete product ( http://en.wikipedia.org/wiki/System_testing ) and system integration testing would be testing combination of products ( http://en.wikipedia.org/wiki/System_integration_testing ). As always, it's good to make sure others are using terms in the same way and in an interview point out that you know about the ambiguity.
System Testing is performed on completed software or application. Integration Testing happens in 2 places - Before System Testing and After System Testing. Integration Testing can be split as Integration and Testing which means you are integrating the unit or components and testing the handshakes between these modules. Once the integration testing is done for all the modules, you perform the System testing as we now have the completed system. After System Testing and before User Acceptance Testing, we do the System Integration Testing. This term can be split into two - System Integration and Testing. Now imagine, your system has to integrate with another system to provide a solution to the end user. Now, you need to make sure your System is compatible and is able to exchange information with the other system. To ensure this, we perform system integration testing.
Example: You buy a COTS (Commercial Off the Shelf) product from the market. You will perform SIT to make sure, it talks to your existing system.
Hope this clarifies.
A good explanation can also be found in this slide:
System Test: As soon as an integrated set of modules has been combined to form your application, system testing can then be performed. System testing verifies the system-level reliability and functionality of the product by testing your application in the integrated system.
Note: QA team performs System testing/ done by independent test group
Integration Test: Integration testing is used to test the reliability and functionality of groups of units (modules) that have been combined together into larger segments. The most efficient method of integration is to slowly and progressively combine the separate modules into small segments rather than merging all the units into large component.
Note: Test engineers performs Integration testing in development phase