-
Notifications
You must be signed in to change notification settings - Fork 0
SoftwareTesting
Testing is the art of learning about a piece of software by running it to see what it does.
Software testing has four main branches, divided along two axes:
Manual | Automated | |
---|---|---|
Formal | Traditional QA | "tests" |
Informal | Poking around the UI, ExploratoryTesting, GAKTest |
test scripts |
A FormalTest specifies the expected output of the SystemUnderTest and unambiguously signals pass/fail. An InformalTest relies on human observation and judgement to determine if the software's Behavior is Acceptable.
Other ways of categorizing testing practices include:
- FunctionalTesting
- IntegrationTesting
- PerformanceTesting
- LoadTesting
- StressTesting
- PenetrationTesting
- MigrationTesting
- RecoveryTesting
- ContractTesting
- ScreamTest
Dijkstra observed,
program testing can be quite effective for showing the presence of bugs, but is hopelessly inadequate for showing their absence!
Jim Coplien has been a vocal detractor of unit testing and test-driven development. I find that many of his critiques are true of TDD and unit testing as I frequently see them practiced, but are not inherent to these techniques. Rather, the problems with testing arise because Practitioners are forced to apply certain techniques without prerequisite knowledge or the support of Management (who often don't hold the Values that these Techniques are designed to support).