This document discusses different types of software testing and provides examples of both good ("heaven") and bad ("hell") practices for each type. It outlines Brian Marick's four testing quadrants: unit tests (Quadrant 1), functional tests (Quadrant 2), exploratory tests (Quadrant 3), and non-functional tests (Quadrant 4). Examples of good practices include writing unit tests with code, focusing prototypes on solving problems, getting customer feedback, and testing at production scale. Examples of bad practices include writing unit tests long after code, not isolating dependencies, failing to use the product as intended, and load testing in different configurations than production. The overall message is that testing effectiveness depends on matching the test to the