and results from a piece of software are exercised and confirmed. Well
chosen tests will confirm expected code behavior for the extreme
boundaries of the input domains, output ranges, parametric combinations,
-and other behavioral edge cases.
+and other behavioral **edge cases**.
# Why test software?
Unless you write flawless, bug-free, perfectly accurate, fully precise,
-and predictable code every time, you must test your code in order to
+and predictable code **every time**, you must test your code in order to
trust it enough to answer in the affirmative to at least a few of the
following questions:
- Does your code work?
-- Always?
-- Does it do what you think it does?
+- **Always?**
+- Does it do what you think it does? ([Patriot Missile Failure](http://www.ima.umn.edu/~arnold/disasters/patriot.html))
- Does it continue to work after changes are made?
- Does it continue to work after system configurations or libraries
are upgraded?
- Does it respond properly for a full range of input parameters?
-- What about edge or corner cases?
+- What about **edge or corner cases**?
- What's the limit on that input parameter?
- How will it affect your
[publications](http://www.nature.com/news/2010/101013/full/467775a.html)?
return total/length
```
-Tests could be implemented as runtime exceptions in the function:
+Tests could be implemented as runtime **exceptions in the function**:
```python
def mean(numlist):