Skip to content

SoftwareTesting

Ben Christel edited this page Sep 20, 2022 · 11 revisions

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 Granularity

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 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).

Clone this wiki locally