7 Breaking Software

Logic Errors
Off by One Errors
Rounding Errors
Floating Point Errors
	(Remember, 1/10 cannot be represented exactly)
	early spreadsheets
	subtracting of nearly equal values
	adding of a long series
	Patriot Missile Defense Failure of 1991 
integration error
	parts worked on by different teams
	communication failures
	rocket crash
assumption errors 
	programmers and business management can make different assumptions
	(a) How should the system display errors? 
	(b) How should data be displayed or otherwise output? 
	(c) Are there any requirements on formatting of files?
(d) What systems need to be supported? 
(e) What other systems will this interact with? 
(f) What sort of interfaces will be necessary? 
(g) What kind of user experience and user interface is expected? 
(h) How will the system be accessed? By whom? 
(i) What kind of terminology, acronyms, etc. are used? 
(j) What are valid ranges or limits for data? 
(k) How will data be input? In what formats? 

if you assume that all weight input comes in as pounds, what happens when someone else assumes that it is in kilograms? 
Was an assumption made that output is in ASCII, but some data is input in UTF-8, thus causing data to be lost upon display? 
Did a software engineer write a program that uses a command-line interface when the customer actually wanted a GUI? 
Missing data errors
	external routines might not send the data you expect

bad data errors
	(a) Data is too long: 
	(b) Data is too short: 
	(c) Data is formatted incorrectly:
	(d) Data is out of range: (Feb 29; US state 51; -500 Celcius)
	(e) Data has been corrupted: safeguards? 
	(f) Data is not consistent: 
	(g) Data is unparseable: [missing a closing > or ), or '; or circular reference? ]
	fuzz testing—send in random data to see what happens
display errors
	too large or long  to display
injection errors
	(database issue)
network errors
	loss of connectivity
	spotty connectivity
	high latency
	low bandwidth
disk errors
interface errors
null pointer errors
distributed system errors
	concurrency problems
	check synchronization
	part of the network is off 
configuration errors
	settings can interact 
	users can have unpredictable settings (web)
accessibility errors
	some people have to use non-standard input or output
	e.g. screen readers
DONT THINK THIS IS COMPREHENSIVE

Remember users act differently than programmers!