SoftwareTesting - benchristel/benchristel.github.io GitHub Wiki

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:

By Goal

By Interface

By Type of Requirement Verified

By Verification Strategy

By Technique

Criticism

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 [Practitioner]]s 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).