Guru99 Flashcards
(46 cards)
What is software testing?
an activity to check whether the actual results match the expected results and to ensure that the software system is Defect free.
AUT
Application Under Test
In simple terms, Software Testing means Verification of Application Under Test (AUT).
3 categories of software testing
- Functional testing (unit testing, integration testing, etc.)
- Non-functional testing (performance, endurance, load, usability, etc.)
- Maintenance (regression, maintenance)
The 7 testing principles
1) Exhaustive testing is not possible
2) Defect Clustering
3) Pesticide Paradox
4) Testing shows a presence of defects
5) Absence of Error - fallacy
6) Early Testing
7) Testing is context dependent
Principle: Exhaustive testing is not possible
We can’t test every test case, so we need the optimal amount of testing based on the risk assessment of the application.
Principle: Defect Clustering
a small number of modules contain most of the defects detected
Principle: Pesticide Paradox
If the same tests are repeated over and over again, eventually the same test cases will no longer find new bugs.
Principle: Testing shows a presence of defects
Software testing talks about the presence of defects and doesn’t talk about the absence of defects.
Principle: Absence of Error - fallacy
It is possible that software which is 99% bug-free is still unusable. It must also fulfill customer requirements.
Principle: Early Testing
Testing should start as early as possible in the Software Development Life Cycle. Defects in requirements or design are captured early, too.
Principle: Testing is context dependent
Different types of software need to perform different types of testing.
SDLC
Software Development Life Cycle
STLC
Software Testing Life Cycle
The V model
Requirement analysis System testing
High level design Integration testing
Low level design Unit testing
Coding
Phases of STLC
Requirements analysis Test planning Test case development Test environment setup Test execution Test cycle closure
Types of testing that could be manual or automated
Black Box Testing White Box Testing Unit Testing System Testing Integration Testing Acceptance Testing
Unit testing
Unit Tests isolate a section of code and verify its correctness. A unit may be an individual function, method, procedure, module, or object. Developers write unit tests during the coding phase.
Unit testing advantages
Allows for refactoring at a later date.
New developers can learn functionality of the code.
Can test parts without waiting for others to complete.
Find and fix errors faster than in integration testing, where errors are hard to trace down.
Integration testing
A type of testing where software modules are integrated logically and tested as a group.
Data transfer between modules is tested thoroughly.
Big-bang integration testing
Wait for all modules to be developed before beginning testing. Convenient for small systems.
Disadvantage: time consuming waiting for developers, difficult to trace root cause of defects, and high-risk modules are not prioritized
Incremental integration testing
Testing is done by joining two or more modules that are logically related. Then the other related modules are added and tested as they are available.
Top-down (higher layers first): create stubs.
Bottom-up: create drivers
The focus is mainly on the interfaces & flow of data/information between the modules. Priority is to be given for the integrating links rather than the unit functions which are already tested.
Stub
Is called by the Module under Test
Driver
Calls the Module to be tested
System testing
System testing is a level of testing that validates the complete and fully integrated software product. The purpose of a system test is to evaluate the end-to-end system specifications.
Includes usability testing, load testing, regression testing, recovery testing, migration testing, functional testing, hardware/software testing, etc.