Chapter 6 Examining the Code

Examining the Code
Chapter 6

Scenarios
 Military
 Financial
 Factory automation
 Medical software
 Disciplined development model

Highlights
 The benefits of static white-box testing
 The different types of static white-box reviews
 Coding guidelines and standards
 How to generically review code for errors

Static White-Box Testing: Examining
the Design and Code
 Review: Static testing and dynamic testing
 Static white-box testing
 Process of carefully and methodically reviewing the
software design, architecture or code for bugs without
executing it
 Structural analysis
 Find bugs early and find bugs that would be difficult
to uncover or isolate with dynamic black box testing
 Side benefit: give black-box tester ideas for test
cases to apply

Formal Reviews
 Four essential elements
 Identify Problems
 Be directed to the design or code, not the person
created it
 Follow Rules
 Amount, time, and comment
 Prepare
 Know duties and responsibilities
 Write a Report
 Summarizing the results of the review

Formal Review (2)
 A few indirect results of formal review:
 Communications
 Black-box tester --- Where problems may lie
 Inexperienced programmers --- Learn new techniques
 Management --- better feel
 Quality
 More careful work attitude for programmers
 Team Camaraderie
 Build respect to each other’s skills and to be better
understand each other’s jobs and job needs
 Solutions
 Solutions may be found for tough problems

Peer Reviews
 Easiest way
 Least formal method
 People
 The programmer who designed the architecture or
wrote the code and one or two other programmers or
testers acting as reviewers
 Action
 Review the code together and looks for problems and
oversights
 Don’t turn it into a coffee break
 Make sure the four key elements are in place
 Better than nothing

Walkthroughs
 Up in formality from peer reviews
 People
 Programmer who wrote the code
 formally presents it to a small group of five or so other
programmers and testers
 Action
 Receive copies in advance and get preparation
 Presenter reads through and explain
 Ask at the review
 Presenter writes a report about bugs and solutions
 At least one senior programmer as reviewer

Inspections
 Most formal type of review
 People
 Presenter or reader
 Isn’t the original programmer
 Forces some else to learn and understand with
different slant and interpretation
 Inspector
 Act as different roles (user, tester or product support
team)
 Different views reveals different bugs
 Even backward inspector
 Modulator and recorder
 Assure the rule
 Assure the effectiveness

Inspections (2)
Do
inspection meeting;
programmer makes change;
moderator verifies change;
while (inspection result == false OR critical level
== high)

Coding Standards and Guidelines
 Classic bugs
 Something just won’t work as written
 Careful analysis by senior programmers and testers
 Code may operate properly but may not be written to
meet a specific standard or guidelines
 Grammatical and syntactical rules
 Established, fixed, have-to-follow rules
 Best practice
 National and international standards
 Why change the workable and stable software?
 Reliability
 Readability/Maintainability
 Portability

Example of Programming Standards
and Guidelines
 Standard about using goto, while, and if-else in C
language
 Four main parts of the standard
 Title
 Standard
 What’s allow and not allowed
 Justification
 Example
 Simple programming example
 The differentiating factor is style
 Even style could possibly become company standard

Obtaining Standard
 American National Standards Institute (ANSI)
 http://www.ansi.org
 International Engineering Consortium (IEC)
 http://www.iec.org
 International Organization for Standardization (ISO)
 http://www.iso.ch
 National Committee for Information Technology
Standards (NCITS)
 http://www.ncits.org
 Some best practice in the industrial
 Your companies’ own standards

Generic Code Review Checklist
 Checklist
 Covers some problems you should look for
 You MUST have some programming
experience
 GET YOUR HAND DIRTY

Data Reference Errors
 Bugs caused by improperly using variable, constant , array,
string or record
 Is an uninitialized variable referenced? Looking for
omissions is just as important as looking for errors
 Are array and string subscripts integer values and are they
always within the bounds of the array’s or string’s dimension
 Are there any potential “off by one” errors in indexing
operations or subscript references to arrays
 Is a variable used where a constant would actually work
better
 Is a variable ever assigned a value that ’s of a different type
than the variable?
 Is memory allocated for referenced pointers?
 If a data structure is referenced in multiple functions or
subroutines, is the structure defined identically in each one?

Data Declaration Error
 Bugs caused by improperly declaring or usng
variables or constants
 Are all variables assigned the correct length, type, and
storage class?
 If a variable is initialized at the same time as it’s
declared, is it properly initialized and consistent with its
type?
 Are there any variables with similar names?
 Are any variables declared that are never referenced
or are referenced only once?
 Are all the variables explicitly declared within their
specific module? Or higher module?

Computation Errors
 Bad math
 Do any calculations that use variables have different data types?
 Do any calculations that use variables have the same data type but are
different lengths?
 Are the compiler’s conversion rules for variables or inconsistent type or
length understood and taken into account?
 Is the target variable of an assignment smaller than the right-hand
expression?
 Is overflow or underflow in the middle of a numeric calculation possible?
 Is it ever possible for a divisor/modulus to be zero?
 In case of integer arithmetic, result in loss of precision?
 Can a variable’s value go outside its meaningful range?
 For expressions containing multiple operators, is there any confusion
about the order of evaluation and is operator precedence correct? Are
parentheses needed for clarification?

Comparison Errors
 Susceptible to boundary condition problems
 Are the comparison correct?
 < OR <=
 Are there comparison between fractional or floatingpoint
value?
 Does each Boolean expression state what it should
sate? Does the Boolean calculation work as expected?
Is there any doubt about the order of evaluation?
 Are the operands of a Boolean operator Boolean?
 Especially in language like C

Control Flow Errors
 Usually caused directly or indirectly by
computational or comparison errors
 Are the end explicit and do they match?
 Will the block eventually terminate?
 Possibility of premature loop exit?
 Possibility that a loop never executes?
 Can index variable ever exceed the number of
branch possibilities like switch?
 Are there any “off by one” errors that would
cause unexpected flow through the loop?

Subroutine Parameter Errors
 Due to incorrect passing of data to and from subroutines
 Do the types and sizes of parameters received match by the
calling order?
 If a subroutine has multiple entry points, is a parameter ever
referenced that isn’t associated with the current point of
entry?
 If constants are ever passed as arguments, are they
accidentally changed in the subroutine?
 Does a subroutine alter a parameter that ’s intended only an
input value?
 Do the units of each parameter match the units of each
corresponding argument?
 If global variable are present, do they have similar definitions
and attributes in all referencing subroutines?

Input/Output Errors
 Does software strictly adhere to the specified format
of the data being read or written by the external
device?
 If the file or peripheral isn’t present or ready, is that
error condtion handled?
 Does the software handle the situation of the external
device being disconnected, not available, or full
during a read or write?
 Are all conceivable errors handled by the software in
an expected way?
 Have all error messages been checked for
correctness, appropriateness, grammar, and spelling?

Other Checks
 Language issue?
 Portable issue?
 Compatibility?
 Compilation? 

你可能感兴趣的:(Chapter 6 Examining the Code)