- Appendix A: Common Software Errors
Testing Computer Software
Cem Kaner, Jack Falk, Hung Quoc Nguyen
Please do not reproduce without this notice
http://www.testingeducation.org/BBST/testdesign/kaner_common_software_errors.pdf
-
USER INTERFACE ERRORS
-
FUNCTIONALITY
- Excessive functionality
- Inflated impression of functionality
- Inadequacy for the task at hand
- Missing function
- Wrong function
- Functionality must be created by the user
- Doesn't do what the user expects
-
COMMUNICATION
-
Missing information
- No onscreen instructions
- Assuming printed documentation is readily available
- Undocumented features
- States that appear impossible to exit
- No cursor
- Failure to acknowledge input
- Failure to show activity during long delays
- Failure to advise when a change will take effect
- Failure to check for the same document being opened more than once
-
Wrong, misleading, or confusing information
- Simple factual errors
- Spelling errors
- Inaccurate simplifications
- Invalid metaphors
- Confusing feature names
- More than one name for the same feature
- Information overload
- When are data saved?
- Poor external modularity
-
Help text and error messages
- Inappropriate reading level
- Verbosity
- Inappropriate emotional tone
- Factual errors
- Context errors
- Failure to identify the source of an error
- Hex dumps are not error messages
- Forbidding a resource without saying why
- Reporting non-errors
-
Display bugs
- Two cursors
- Disappearing cursor
- Cursor displayed in the wrong place
- Cursor moves out of data entry area
- Writing to the wrong screen segment
- Failure to clear part of the screen
- Failure to highlight part of the screen
- Failure to clear highlighting
- Wrong or partial string displayed
- Messages displayed for too long or not long enough
-
Display layout
- Poor aesthetics in the screen layout
- Menu layout errors
- Dialog box layout errors
- Obscured instructions
- Misuse of flash
- Misuse of color
- Heavy reliance on color
- Inconsistent with the style of the environment
- Cannot get rid of onscreen information
-
COMMAND STRUCTURE AND ENTRY
-
Inconsistencies
- "Optimizations"
- Inconsistent syntax
- Inconsistent command entry style
- Inconsistent abbreviations
- Inconsistent termination rule
- Inconsistent command options
- Similarly named commands
- Inconsistent capitalization
- Inconsistent menu position
- Inconsistent function key usage
- Inconsistent error handling rules
- Inconsistent editing rules
- Inconsistent data saving rules
-
Time-wasters
- Garden paths
- Choices that can't be taken
- Are you really, really sure?
- Obscurely or idiosyncratically named commands
-
Menus
- Excessively complex menu hierarchy
- Inadequate menu navigation options
- Too many paths to the same place
- You can't get there from here
- Related commands relegated to unrelated menus
- Unrelated commands tossed under the same menu
-
Command lines
- Forced distinction between uppercase and lowercase
- Reversed parameters
- Full command names not allowed
- Abbreviations not allowed
- Demands complex input on one line
- No batch input
- Can't edit commands
-
Inappropriate use of the keyboard
- Failure to use cursor, edit, or function keys
- Non-standard use of cursor and edit keys
- Non-standard use of function keys
- Failure to filter invalid keys
- Failure to indicate keyboard state changes
- Failure to scan for function or control keys
-
MISSING COMMANDS
-
State transitions
- Can't do nothing and leave
- Can't quit mid-program
- Can't stop mid-command
- Can't pause
-
Disaster prevention
- No backup facility
- No undo
- No Are you sure?
- No incremental saves
-
Error handling by the user
- No user-specifiable filters
- Awkward error correction
- Can't include comments
- Can't display relationships between variables
- Miscellaneous nuisances
- Inadequate privacy or security
- Obsession with security
- Can't hide menus
- Doesn't support standard O/S features
- Doesn't allow long names
-
PROGRAM RIGIDITY
-
User tailorability
- Can't turn off the noise
- Can't turn off case sensitivity
- Can't tailor to hardware at hand
- Can't change device initialization
- Can't turn off automatic saves
- Can't slow down (speed up) scrolling
- Can't do what you did last time
- Can't find out what you did last time
- Failure to execute a customization command
- Failure to save customization commands
- Side-effects of feature changes
- Infinite tailorability
-
Who's in control
- Unnecessary imposition of a conceptual style
- Novice-friendly, experienced-hostile
- Artificial intelligence and automated stupidity
- Superfluous or redundant information required
- Unnecessary repetition of steps
- Unnecessary limits
-
PERFORMANCE
- Slow program
- Slow echoing
- How to reduce user throughput
- Poor responsiveness
- No type-ahead
- No warning that an operation will take a long time
- No progress reports
- Problems with time-outs
- Program pesters you
- Do you really want help and graphics at 300 baud?
-
OUTPUT
- Can't output certain data
- Can't redirect output
- Format incompatible with a follow-up process
- Must output too little or too much
- Can't control output layout
- Absurd printed level of precision
- Can't control labeling of tables or figures
- Can't control scaling of graphs
-
ERROR HANDLING
-
ERROR PREVENTION
- Inadequate initial state validation
- Inadequate tests of user input
- Inadequate protection against corrupted data
- Inadequate tests of passed parameters
- Inadequate protection against operating system bugs
- Inadequate version control
- Inadequate protection against malicious use
-
ERROR DETECTION
- Ignores overflow
- Ignores impossible values
- Ignores implausible values
- Ignores error flag
- Ignores hardware fault or error conditions
- Data comparisons
-
ERROR RECOVERY
- Automatic error correction
- Failure to report an error
- Failure to set an error flag
- Where does the program go back to?
- Aborting errors
- Recovery from hardware problems
- No escape from missing disk
-
BOUNDARY-RELATED ERRORS
- NUMERIC BOUNDARIES
- EQUALITY AS A BOUNDARY
- BOUNDARIES ON NUMEROSITY
- BOUNDARIES IN SPACE
- BOUNDARIES IN TIME
- BOUNDARIES IN LOOPS
- BOUNDARIES IN MEMORY
- BOUNDARIES WITHIN DATA STRUCTURES
- HARDWARE-RELATED BOUNDARIES
- INVISIBLE BOUNDARIES
- CALCULATION ERRORS
- OUTDATED CONSTANTS
-
CALCULATION ERRORS
- IMPOSSIBLE PARENTHESES
- WRONG ORDER OF OPERATORS
- BAD UNDERLYING FUNCTION
- OVERFLOW AND UNDERFLOW
- TRUNCATION AND ROUNDOFF ERROR
- CONFUSION ABOUT THE REPRESENTATION OF THE DATA
- INCORRECT CONVERSION FROM ONE DATA REPRESENTATION TO
- ANOTHER
- WRONG FORMULA
- INCORRECT APPROXIMATION
-
INITIAL AND LATER STATES
- FAILURE TO SET A DATA ITEM TO 0
- FAILURE TO INITIALIZE A LOOP-CONTROL VARIABLE
- FAILURE TO INITIALIZE (OR REINITIALIZE) A POINTER
- FAILURE TO CLEAR A STRING
- FAILURE TO INITIALIZE (OR REINITIALIZE) REGISTERS
- FAILURE TO CLEAR A FLAG
- DATA WERE SUPPOSED TO BE INITIALIZED ELSEWHERE
- FAILURE TO REINITIALIZE
- ASSUMPTION THAT DATA WERE NOT REINITIALIZED
- CONFUSION BETWEEN STATIC AND DYNAMIC STORAGE
- DATA MODIFICATION BY SIDE-EFFECT
- INCORRECT INITIALIZATION
- RELIANCE ON TOOLS THE CUSTOMER MAY NOT HAVE OR UNDERSTAND
-
CONTROL FLOW ERRORS
-
PROGRAM RUNS AMOK
- GOTO somewhere
- Come-from logic errors
- Problems in table-driven programs
- Executing data
- Jumping to a routine that isn't resident
- Re-entrance
- Variables contain embedded command names
- Wrong returning state assumed
- Exception-handling based exits
-
Return to wrong place
- Corrupted stack
- Stack under/overflow
- GOTO rather than RETURN from a subroutine
-
Interrupts
- Wrong interrupt vector
- Failure to restore or update interrupt vector
- Failure to block or unblock interrupts
- Invalid restart after an interrupt
-
PROGRAM STOPS
- Dead crash
- Syntax errors reported at run-time
- Waits for impossible condition, or combination of conditions
- Wrong user or process priority
-
LOOPS
- Infinite loop
- Wrong starting value for the loop control variable
- Accidental change of the loop control variable
- Wrong criterion for ending the loop
- Commands that do or don't belong inside the loop
- Improper loop nesting
-
IF, THEN, ELSE, OR MAYBE NOT
- Wrong inequalities (e.g., > instead of >=)
- Comparison sometimes yields wrong result
- Not equal versus equal when there are three cases
- Testing floating point values for equality
- Confusing inclusive and exclusive OR
- Incorrectly negating a logical expression
- Assignment-equal instead of test-equal
- Commands belong inside the THEN or ELSE clause
- Commands that don't belong inside either clause
- Failure to test a flag
- Failure to clear a flag
-
MULTIPLE CASES
- Missing default
- Wrong default
- Missing cases
- Case should be subdivided
- Overlapping cases
- Invalid or impossible cases
-
ERRORS IN HANDLING OR
INTERPRETING DATA
-
PROBLEMS WHEN PASSING DATA BETWEEN ROUTINES
- Parameter list variables out of order or missing
- Data type errors
- Aliases and shifting interpretations of the same area of memory
- Misunderstood data values
- Inadequate error information
- Failure to clean up data on exception-handling exit
- Outdated copies of data
- Related variables get out of synch
- Local setting of global data
- Global use of local variables
- Wrong mask in bit field
- Wrong value from a table
-
DATA BOUNDARIES
- Unterminated null terminated strings
- Early end of string
- Read/write past end of a data structure, or an element in it
-
READ OUTSIDE THE LIMITS OF A MESSAGE BUFFER
- Compiler padding to word boundaries
- Value stack under/overflow
- Trampling another process' code or data
-
MESSAGING PROBLEMS
- Messages sent to wrong process or port
- Failure to validate an incoming message
- Lost or out of synch messages
- Message sent to only N of N+1 processes
-
DATA STORAGE CORRUPTION
- Overwritten changes
- Data entry not saved
- Too much data for receiving process to handle
- Overwriting a file after an error exit or user abort
-
RACE CONDITIONS
- RACES IN UPDATING DATA
- ASSUMPTION THAT ONE EVENT OR TASK HAS FINISHED BEFORE ANOTHER
- BEGINS
- ASSUMPTION THAT INPUT WON'T OCCUR DURING A BRIEF PROCESSING
- INTERVAL
- ASSUMPTION THAT INTERRUPTS WON'T OCCUR DURING A BRIEF INTERVAL
- RESOURCE RACES: THE RESOURCE HAS JUST BECOME UNAVAILABLE
- ASSUMPTION THAT A PERSON, DEVICE, OR PROCESS WILL RESPOND
- QUICKLY
- OPTIONS OUT OF SYNCH DURING A DISPLAY CHANGE
- TASK STARTS BEFORE ITS PREREQUISITES ARE MET
- MESSAGES CROSS OR DON'T ARRIVE IN THE ORDER SENT
-
LOOP CONDITIONS
- REQUIRED RESOURCE NOT AVAILABLE
-
DOESN'T RETURN A RESOURCE
- Doesn't indicate that it's done with a device
- Doesn't erase old files from mass storage
- Doesn't return unused memory
- Wastes computer time
- NO AVAILABLE LARGE MEMORY AREAS
- INPUT BUFFER OR QUEUE NOT DEEP ENOUGH
- DOESN'T CLEAR ITEMS FROM QUEUE, BUFFER, OR STACK
- LOST MESSAGES
- PERFORMANCE COSTS
- RACE CONDITION WINDOWS EXPAND
- DOESN'T ABBREVIATE UNDER LOAD
- DOESN'T RECOGNIZE THAT ANOTHER PROCESS ABBREVIATES OUTPUT
- UNDER LOAD
- LOW PRIORITY TASKS NOT PUT OFF
- LOW PRIORITY TASKS NEVER DONE
-
HARDWARE
- WRONG DEVICE
- WRONG DEVICE ADDRESS
- DEVICE UNAVAILABLE
- DEVICE RETURNED TO WRONG TYPE OF POOL
- DEVICE USE FORBIDDEN TO CALLER
- SPECIFIES WRONG PRIVILEGE LEVEL FOR A DEVICE
- NOISY CHANNEL
- CHANNEL GOES DOWN
- TIME-OUT PROBLEMS
- WRONG STORAGE DEVICE
- DOESN'T CHECK DIRECTORY OF CURRENT DISK
- DOESN'T CLOSE A FILE
- UNEXPECTED END OF FILE
- DISK SECTOR BUGS AND OTHER LENGTH-DEPENDENT ERRORS
- WRONG OPERATION OR INSTRUCTION CODES
- MISUNDERSTOOD STATUS OR RETURN CODE
- DEVICE PROTOCOL ERROR
- UNDERUTILIZES DEVICE INTELLIGENCE
- PAGING MECHANISM IGNORED OR MISUNDERSTOOD
- IGNORES CHANNEL THROUGHPUT LIMITS
- ASSUMES DEVICE IS OR ISN'T, OR SHOULD BE OR SHOULDN'T BE
- INITIALIZED
- ASSUMES PROGRAMMABLE FUNCTION KEYS ARE PROGRAMMED
- CORRECTLY
-
SOURCE, VERSION AND
ID CONTROL
- OLD BUGS MYSTERIOUSLY REAPPEAR
- FAILURE TO UPDATE MULTIPLE COPIES OF DATA OR PROGRAM FILES
- NO TITLE
- NO VERSION ID
- WRONG VERSION NUMBER ON THE TITLE SCREEN
- NO COPYRIGHT MESSAGE OR A BAD ONE
- ARCHIVED SOURCE DOESN'T COMPILE INTO A MATCH FOR SHIPPING CODE
- MANUFACTURED DISKS DON'T WORK OR CONTAIN WRONG CODE OR DATA
-
TESTING ERRORS
-
MISSING BUGS IN THE PROGRAM
- Failure to notice a problem
- Misreading the screen
- Failure to report a problem
- Failure to execute a planned test
- Failure to use the most "promising" test cases
- Ignoring programmers' suggestions
-
FINDING "BUGS" THAT AREN'T IN THE PROGRAM
- Errors in testing programs
- Corrupted data file
- Misinterpreted specifications or documentation
-
POOR REPORTING
- Illegible reports
- Failure to make it clear how to reproduce the problem
- Failure to say that you can't reproduce a problem
- Failure to check your report
- Failure to report timing dependencies
- Failure to simplify conditions
- Concentration on trivia
- Abusive language
-
POOR TRACKING OR FOLLOW-UP
- Failure to provide summary reports
- Failure to re-report serious bugs
- Failure to verify fixes
- Failure to check for unresolved problems just before release