Overview
Condensation of software testing tutorial here.
STUFF
General points
- Use library routines as much as possible.
- Develop wrappers that incorporate your features.
- Use REGEX parsers to validate input, this forces you to clarify valid input.
- Library packages frequently come with userspace demo programs.
- Emphasize libraries to identify dependencies.
- Static analyzers
- cppcheck
- clang (scan-build)
- gcc/C11 debugging features
- -Wall
- extensions and attributes
- assertions
- Add checking to version control hooks (cppcheck with Git)
Tools to automate testing
- Selenium
- QTP
- Jmeter
- Loadrunner
- TestLink
- Quality Center (ALM)
Testing Fundamentals
What is software testing?
Verification of Application Under Test (AUT).
Types:
- functional
- unit
- integration
- smoke
- user acceptance (UAT)
- interoperability
- non-functional
- performance
- endurance
- load
- volume
- scalability
- usability
- maintenance
- regression
- maintenance
Software testing as a career path
Non-technical skills:
- analytical
- communication
- time management/organizational
Technical skills:
- database/SQL
- test management tools
- defect tracking tools
- automation tools
7 software testing principles
- Exhaustive testing is generally not possible.
- Defect clustering (most defects clustered in small number of modules)
- Pesticide paradox (same tests gradually become ineffective)
- Presence of defects
- Absence of error
- Early testing
- Testing is context dependent
V model
- SDLC: Software development life cycle
- STLC: Software test life cycle
- V Model: combination of the above
STLC - Software testing life cycle
Each phase has entry criteria and exit criteria:
- Requirements analysis
- functional vs non-functional
- Test planning
- Test case development
- Environment setup
- Test execution
- Test cycle closure
Types of testing
Manual testing
- acceptance
- integration
- system
- unit
- white vs black box
Automation testing
Why?
- Manual Testing of all workflows, all fields, all negative scenarios is time and money consuming
- It is difficult to test for multilingual sites manually
- Automation does not require Human intervention. You can run automated test unattended (overnight)
- Automation increases the speed of test execution
- Automation helps increase Test Coverage
- Manual Testing can become boring and hence error-prone.
Stuff that can be automated:
- Smoke Testing
- Unit Testing
- Integration Testing
- Functional Testing
- Keyword Testing
- Regression Testing
- Data Driven Testing
- Black Box Testing
Automation vs manual
Unit testing
- isolate a section of code and verify its correctness
Coverage testing categories:
- statement
- decision
- branch
- condition
- finite state machine
Integration testing
System testing
- testing of a complete and fully integrated software product
- black box (system)
- white box
Different types of system testing:
- Usability Testing - Usability Testing mainly focuses on the user's ease to use the application, flexibility in handling controls and ability of the system to meet its objectives
- Load Testing - Load Testing is necessary to know that a software solution will perform under real-life loads.
- Regression Testing- - Regression Testing involves testing done to make sure none of the changes made over the course of the development process have caused new bugs. It also makes sure no old bugs appear from the addition of new software modules over time.
- Recovery Testing - Recovery testing is done to demonstrate a software solution is reliable, trustworthy and can successfully recoup from possible crashes.
- Migration Testing - Migration testing is done to ensure that the software can be moved from older system infrastructures to current system infrastructures without any issues.
- Functional Testing - Also known as functional completeness testing, Functional Testing involves trying to think of any possible missing functions. Testers might make a list of additional functionalities that a product could have to improve it during functional testing.
- Hardware/Software Testing - IBM refers to Hardware/Software testing as “HW/SW Testing”. This is when the tester focuses his/her attention on the interactions between the hardware and software during system testing.
Sanity vs smoke testing
Regression testing
When?
- Change in requirements and code is modified according to the requirement
- New feature is added to the software
- Defect fixing
- Performance issue fix
Non-functional testing
- performance
- endurance
- load
- volume
- scalability
- usability
STUFF
Test documentation
Test scenario vs Test case
Test analysis (test basis)
Requirements traceability matrix (RTM)
Test data generation
Generated:
- Manually
- Mass copy of data from production to testing environment
- Mass copy of test data from legacy client systems
- Automated Test Data Generation Tools