All input data should be untrusted until proven otherwise, and all data must be validated as it crosses the boundary between trusted and untrusted environments [Howard 02]. Data sensitivity/criticality plays a big role in data-based testing; however, this does not imply that other data can be ignored�non-sensitive data could allow a hacker to control a system. When creating tests, it is important to test and observe the validity of data at different points in the software.
Tests based on data and data flow should explore incorrectly formed data and stressing the size of the data. The section �Attacking with Data Mutation� in [Howard 02] describes different properties of data and how to mutate data based on given properties. To understand different attack patterns relevant to program input, refer to chapter six, �Crafting (Malicious) Input,� in [Hoglund 04]. Tests should validate data from all channels, including web inputs, databases, networks, file systems, and environment variables. Risk analysis should guide the selection of tests and the data set to be exercised.