ࡱ> _ Ebjbj,E,E QN/N/<;$$$$$8888p<81XT1V1V1V1V1V1V1$3{6zz1$PPPz1$$1>>>Pp$$T1>PT1>>h/|0-w/@1101/6~h6$06$0> Sz1z1X1PPPP6 : @Formal Software Code Review Guidelines What: Example of a company guideline for how to conduct formal software code reviews. It includes the following contents: Code review process overview Instructions for code preparation prior to a code review Code review checklist Code review records forms Why: This particular company created medical devices and coded the embedded software in C. Their development process had to be stringent enough to ensure that safety-significant errors were caught during reviews and testing. They also had to be able to show regulatory agencies at any time that their project followed a process that reviewed designs for problems (especially those that could cause a danger of harm to a patient on whom the device was being used), recorded those problems, then fixed the problems. This code review process was part of their documented development process. Note, however, that such a code review guideline is useful for other types of software products as well! Any software group wanting to improve the quality of their code and the actual reviews can benefit from elements of this process. The payoff will be finding more problems sooner rather than later- on paper rather than during testing or beyond. How: During a project, such a document is used by team members in the following way: During project planning, it is referenced for reminders about how much review time should be allocated during the project for the software being developed - including time from all the people who will need to participate in the review. During design and development (coding) portion of the project, the checklists and code review records forms are used to conduct code reviews. Use this guideline for a ready-made format for your own code reviews. Or, use it simply for approaches you can use to include review tasks in your projects to ensure mistakes are caught early, rather than later during testing (or after release to customers!) when theyll be much more costly to correct. document, if you wish, a formal code review process thats appropriate for your organization Even if you decide to use a less formal approach than these guidelines call for, elements of this document may be very useful for your projects. Formal Software Code Review Guidelines CONTENTS Code Review Process Overview Code Preparation Off-line Review Formal Review Meeting Instructions for Code Preparation Code Review Checklist (3 pages) Use to guide Code Preparation Fill out checklist during Off-line Code Review Approve during Formal Review Meeting Code Review Record Forms (2 pages) Fill out during Formal Review Meeting Attach Code Review Checklist File as official record of meeting CODE REVIEW PROCESS OVERVIEW Stages: The overall code review process is divided into three stages. StageNamePurpose1Code PreparationPreparer ensures that code adheres to code review checklist. Makes non-functional changes as necessary. Notes any functional changes that should be made to adhere to checklist. Pays particular attention to including all items required for header blocks and adding helpful comments.2Off-line Code ReviewIndividually or in small groups as desired, reviewers review the code for all items on the code review checklist, covering the areas of proper operation, adherence to coding guidelines, and implementation of risk (and safety hazard) mitigation actions. Reviewers recommend changes.3Formal Code Review MeetingParticipants review suggested changes from the off-line code reviews, decide actions, approve code. SYMBOL 183 \f "Symbol" \s 10 \h The code review checklists filled out during off-line review, and any recommended changes to code, will be analyzed. SYMBOL 183 \f "Symbol" \s 10 \h The code review record will be filled out to document any actions, including required changes to the code, and the approval of the code. SYMBOL 183 \f "Symbol" \s 10 \h The code review record and attached code review checklists will be filed as the official record of the code review.  Definitions: The following definitions apply. Code ReviewThe formal review of software units or modules.a UnitOne function or routine, starting from its comment header block, to the last line of code or comment in the unita ModuleThe logical grouping of a set of units and its data structures. Normally a module will consist of one or more '.C' source files and it's associated '.H' files.the PresenterThe person who authored the module or unit(s) for code review.the ReviewersThe two or more people who are reviewing the module or unit(s)SRSSoftware Requirements Specification document containing the user/system level requirements this piece of software must fulfillSDSSoftware Design Specification - document containing specific information about the high level design of the Unit or Module being reviewed. INSTRUCTIONS FOR CODE PREPARATION STEPDESCRIPTIONCheck out file to be preparedThe relevant module and any associated header files should be formally 'checked out' of the version control or software code control system for any changes to take place. The most recent checked-in or promoted revision should be used. Make changes to each unit/module:In order to prevent unintentional change of functionality, no changes to the actual body of code or its structure should be made prior to a first pass review. Changes which do not affect the functionality (such as the addition of comments) can be made. Required: Add code header See code review checklist in next section for standards each header must follow. The general categories of information to be included are: SYMBOL 183 \f "Symbol" \s 10 \h Comments SYMBOL 183 \f "Symbol" \s 10 \h Data usage (input/output parameters, data structures accessed, changes to global variables, etc.) SYMBOL 183 \f "Symbol" \s 10 \h Unit processing algorithm/design SYMBOL 183 \f "Symbol" \s 10 \h Potential failure modes related to system hazards to the patient; required mitigation actions SYMBOL 183 \f "Symbol" \s 10 \h Miscellaneous notes on critical or risky areas of the design; design assumptions; etc.Recommended: comment related unitsIf, when preparing just one unit from a module, it is found necessary to analyze other un-reviewed units, the addition of comments should be made, and any helpful information that could be of future use in the review and/or test of those additional units should be recorded.Required: Document recommended changes to actual codeRecommended changes may be prepared on a copy of the module, and presented for review. Both the original and the copy with differences clearly indicated should be provided.Run LintLint must be run on the module or unit(s). Each warning or message produced should be inspected and any real issues corrected or flagged for correction See the code review checklist on the following pages for a list of the items Lint must be used to detect. Global wrap-up' output can be discarded and ignored for code review. The final Lint output will be recorded as part of the formal review meeting. Check in filesThe updated module(s) should be checked back into the official version control or software code control systemPrepare diagrams and other supporting informationData flow, state diagrams or any other useful descriptive information should be prepared to present along with the code for review. This information may be added to the SDS after the review. CODE REVIEW CHECKLIST: MODULES (p. 1 of 1) Use of this form: Code Preparation:Use this checklist as a guideline for preparing the moduleOff-line Code Review:The items on this checklist should be reviewed during Off-line Code Review.Formal Code Review Meeting:This form, filled out during the Off-line Code Review, should be brought to the formal meeting, used as a checklist for verification of all items, and attached to the code review record. CATEGORYITEMPRESENT? Y, N, N/AModule headerThe module must have a module header block containing:File name:Original creator:Date created:Person who last changed code (if different from creator)Code revision number and change history (with dates). NOTE: The name of each changed unit should be listed NOTE: If a change is made to correct a defect, the number or ID of the defect corrected should be entered as well.High level description: (explain the module's purpose, and the name/purpose of key data structures, variables, sub-functions used, etc.)Failure modes and effects analysis: List types of failures which could occur in this module and result in a hazard to the patient. List the types of mitigation actions the software takes to prevent hazards from occurring. If these risks are documented in a separate document, reference it. (Editors note: for non-medical projects, the corollary would simply be an appropriate analysis of possible software failure modes, and what the software should do in each case.)Module definitions and declarationsGrouping: Definitions and declarations should be separated into distinct groups, each with a comment header. For example, #defines, #includes, constant definitions, local function prototypes, etc. would all be grouped separately. If required for greater logical clarity, however, related definitions and declarations may be mixedCommenting: Each definition or declaration should have an associated descriptive comment unless the declaration is really obvious. CODE REVIEW CHECKLIST: Units (p. 1 of 2) Use of this form: Code Preparation:Use this checklist as a guideline for preparing each unit in the moduleOff-line Code Review:The items on the checklist should be reviewed during Off-line Code Review.Formal Code Review Meeting:This form, filled out during the Off-line Code Review, should be brought to the formal meeting, used as a checklist for verification of all items, and attached to the code review record.CATEGORYITEMPRESENT? Y, N, N/AFunction header blockEvery function (Unit) must have a comment header block containing:Function nameChange history: List of each change to the unit, with the date of the change and the name of the person making the change. Reference defect numbers or ID if the change was to correct a defect.Purpose: A short description of the unit's purpose. The description should be written such that the unit's purpose in fulfilling the original software requirements in the SRS can be understood.I/O description: A description of the inputs and outputs expected, specifying their acceptable ranges.Return value: A description of the return valueExternal variables: A description of any external variables used, specifying acceptable ranges.Unit design/algorithm: A more detailed description of the unit's processing. Should be detailed enough that reviewers can determine whether the code meets its design, but not so detailed that the description is just pseudo-code.Failure modes analysis: A list of possible failure modes resulting in hazards or error conditions, and any mitigation actions this unit is required to take (for example, range checking a data value before use.)Lint resultsAs noted in the Stage 1 Preparation instructions, Lint should have been run on the module or unit(s). The final Lint output should be recorded as part of the formal review meeting. Each warning or message produced by Lint should have been inspected and any issues corrected. The items listed below must be checked for. 'Global wrap-up' output can be discarded and ignored for code review.SYMBOL 183 \f "Symbol" \s 10 \h Loop index not modified within the loopSYMBOL 183 \f "Symbol" \s 10 \h No extraneous code existsSYMBOL 183 \f "Symbol" \s 10 \h All data references defined, computed, or obtained from external source.SYMBOL 183 \f "Symbol" \s 10 \h All defined and referenced calling sequence parameters agree. CODE REVIEW CHECKLIST: Units (p. 2 of 2) CATEGORYITEMPRESENT? Y, N, N/ACode ChecksSYMBOL 183 \f "Symbol" \s 10 \h Descriptive comments are accurate and informative.SYMBOL 183 \f "Symbol" \s 10 \h Return values (in particular error returns) are not ignored.SYMBOL 183 \f "Symbol" \s 10 \h Constants and literals are not hard coded.SYMBOL 183 \f "Symbol" \s 10 \h All variables used have obvious or descriptive names, and correct scope.SYMBOL 183 \f "Symbol" \s 10 \h Local functions and non-automatic variables are declared static.SYMBOL 183 \f "Symbol" \s 10 \h System global functions have the module name as a prefix to the unit name.SYMBOL 183 \f "Symbol" \s 10 \h All functions have prototypes (compiler checks this).SYMBOL 183 \f "Symbol" \s 10 \h Data structure fields are described and commented clearly.SYMBOL 183 \f "Symbol" \s 10 \h Code is logically correct (Code performs intended functions, operates correctly)SYMBOL 183 \f "Symbol" \s 10 \h Numerical methods are sufficientSYMBOL 183 \f "Symbol" \s 10 \h Accuracy of control outputs to external devices are within toleranceSYMBOL 183 \f "Symbol" \s 10 \h System I/O mechanisms are consistently used.SYMBOL 183 \f "Symbol" \s 10 \h Standard module communication techniques are used (e.g. use of message system)SYMBOL 183 \f "Symbol" \s 10 \h Errors are detected and handled, and processing continuedSYMBOL 183 \f "Symbol" \s 10 \h Error handling conventions are followed (standard use of error handling task, etc.)SYMBOL 183 \f "Symbol" \s 10 \h Input values (or other data used) are checked for reasonableness before useSYMBOL 183 \f "Symbol" \s 10 \h Where necessary, critical output parameters or data are checked for reasonableness during processingSYMBOL 183 \f "Symbol" \s 10 \h Code pays attention to recovery from potential hardware faults (e.g. arithmetic faults, power failure, clock).SYMBOL 183 \f "Symbol" \s 10 \h Code pays attention to recovery from device errors.SYMBOL 183 \f "Symbol" \s 10 \h There is no redundant code.SYMBOL 183 \f "Symbol" \s 10 \h The structure is clean and indentations correct.SYMBOL 183 \f "Symbol" \s 10 \h Over complication is avoided.SDS CheckSDS (Software Design Specification) info for this unit is accurate FORMAL CODE REVIEW RECORD (page 1 of 2) Fill in the following information as the formal record of the review: Date and time of reviewPresenterReviewersModule (or unit) under review Module (or unit) revision number reviewed.Supporting information used in review__ SDS __ Diff listings for suggested changes __ New diagrams ___ Code Review checklists __ Lint output ___ Other ____________Notes on recommended specifics of unit testing Function nameSpecific notes on recommended unit testingAdditional hazards/ error conditions and failure modes identified. Failure modeResulting hazard or error condition the user will seeMitigation action software must implementDoes SW need change? Outstanding issuesAssigned toDue Date - resolution SDS update required?Y NWho:  Sign-off dateNOTE: ATTACH CODE REVIEW CHECKLISTS (Module: 1 page. Each Unit: 2 pages) CODE REVIEW RECORD (page 2) List of suggested and approved changes: ChangeDescription of implementation      Other code review comments        NOTE: ATTACH CODE REVIEW CHECKLISTS (Module: 1 page. Each Unit: 2 pages)     Formal Software Code Review Guidelines /}) * 1 `  ' ; B C 7 8 BC *aƾƳƫƾݠݘݘ{v{v h5h h5CJ hV5CJhh_!CJaJh_!CJaJhhF|CJaJhE?CJaJh-_h-_CJaJh-_CJaJhGYCJaJhF|CJaJ hj45CJhCJaJhj4CJaJhhCJaJ h5CJ.'( * + 8 %,C$a$$a$gd_! $ & Fa$gd_! & Fgd_!$a$gd & Fgdj4gd$a$gd *;Kab;a $a$gd'4$a$; Vme5Ncn"#(>DEdej| HOYxhiky h<E h<E5hF|h5jhUhVhF| h56h'4h5CJ h'45CJh5>*CJ h5hG 0M[kd$$Ifl4F$)          4 laf4$If $$Ifa$MNPe8[kd$$Ifl4F$)        4 laf4$If $$Ifa$[kd$$Ifl4F$)        4 laf4D G[kdO$$Ifl4F$)           4 laf4h$If^h`$If GHO$Iftkd$$Ifl4    0Q$Z0    4 laf4j$Iftkd$$Ifl4    0Q$Z0    4 laf4jky$Iftkd$$$Ifl4    0Q$Z0    4 laf4$Iftkd$$Ifl4    0Q$Z0    4 laf4  $Ifgd<Etkd4$$Ifl4    0Q$Z0    4 laf4$Iftkd$$Ifl4    0Q$Z0    4 laf4?ABra8+,KLVWvw=>p : N!!4"="H"g"""##S$$G%s%%%%'?'y'ⳬ hCJ hm56hmh56hjhU h6 h56hF|h5>*CJh{h5CJh{h{5CJh h5AABGS}}$If$a$tkdD$$Ifl4    0Q$Z0    4 laf4STr`a]MkdY$$Ifl40M $  C  4 laf4$IfMkd$$Ifl40M $  C  4 laf4+V h$If^h`$If  $If^ Mkd$$Ifl40M $  C 4 laf4   : M!N!!!3"SMkd $$Ifl40M $  C 4 laf4$If  $If^ Mkds$$Ifl40M $  C 4 laf43"4"="h""@#####R$]Mkd $$Ifl40M $  C 4 laf4$IfMkd $$Ifl40M $  C 4 laf4 R$S$$E%F%s%%%%]XSgdm$a$MkdP $$Ifl40M $   C  4 laf4$IfMkd $$Ifl40M $  C 4 laf4%%%5&6&R& 'gHkd@ $$Ifl40 ]' >4 laf4$IfHkd $$Ifl40 ]' >4 laf4 '''''&'0'1'?'J`kd $$Ifl4FP$        $    4 laf4$If$a$Hkd $$Ifl40 ]' >4 laf4?'v'w'x'y'''`kd $$Ifl4FP$  $    4 laf4$Ify'''''''''(((e)))G*>+?+E+h+i+t+,,A-X-k-{-|-}-/4/I/J/////g0p000-1=1111102G2353j3~33344445555555ȾȸjhUh<E hH&5 hCJhmhm56hmh56h{h5CJh{h{5CJ hmhhm hm5h h5B'''''''7`kdU$$Ifl4FP$  $    4 laf4$If`kd$$Ifl4FP$  $    4 laf4'''''''`kd$$Ifl4FP$  $    4 laf4$If'''([(((h$If^h`$If`kd$$Ifl4FP$  $    4 laf4(((b)c)d)e)7`kdi$$Ifl4FP$  $    4 laf4$If`kd$$Ifl4FP$  $    4 laf4e)?+@+A+B+C+D+`kd.$$Ifl4FP$  $    4 laf4$IfD+E+i++R,,,$Ifbkd$$Ifl4FP$  $    4 laf4,,,>-?-@-7`kd$$Ifl4FP$     $    4 laf4$If`kd$$Ifl4FP$  $    4 laf4@-k-}-----9.:.V.SMkd$$Ifl40 'LA(4 laf4MkdF$$Ifl40 'LA(4 laf4$Ifgdm$a$ V./// /)/3/4/?`kdo$$Ifl4FJ$      F   A(E    4 laf4$IfMkd $$Ifl40 'LA(4 laf4 x$Ifgd4/J///////bkd4$$Ifl4+FJ$  F A(E    4 laf4$If///d0e0f0g07`kd$$Ifl4FJ$  F A(E    4 laf4$If`kd$$Ifl4FJ$  F A(E    4 laf4g0*1+1,1-111`kd$$Ifl4FJ$  F A(E    4 laf4$If11111117`kd$$Ifl4FJ$  F A(E    4 laf4$If`kdL$$Ifl4FJ$  F A(E    4 laf41-2.2/20233`kd$$Ifl4FJ$  F A(E    4 laf4$If33333337`kd`$$Ifl4FJ$  F A(E    4 laf4$If`kd$$Ifl4FJ$  F A(E    4 laf434A5555555zh$If^h`gd5] $Ifgd5]`kd3$$Ifl4FJ$  F A(E    4 laf4$If55566h$If^h`gd5] $Ifgd5]`kd$$Ifl4FJ$  F A(E    4 laf45555666667686=6R6o6666666677@7D7E7d7e777777788N8O8n8o88888"9#9B9C9999999 ::M:N:m:n::::: ; ;*;+;t;u;;;;;;;:<;<Z<[<<h5>*CJh{h5CJh{h{5CJh<EhY h5hjhUO66666h$If^h`gd5] $Ifgd5]`kd $$Ifl4FJ$  F A(E    4 laf466666h$If^h`gd5] $Ifgd5]`kd!$$Ifl4FJ$  F A(E    4 laf466777 7)737$If$a$`kdG"$$Ifl4FJ$    F  A(E    4 laf43747@7A7B7C7D77`kd#$$Ifl4FJ$f  P F  $    4 laf4$If`kd #$$Ifl4FJ$f  P F  $    4 laf4D7777777`kd$$$Ifl4FJ$f PF $    4 laf4$Ifh$If^h`777K8L8h$If^h`$If`kd[%$$Ifl4FJ$f PF $    4 laf4L8M8N888h$If^h`$If`kd&$$Ifl4FJ$f PF $    4 laf48889 9h$If^h`$If`kd&$$Ifl4FJ$f PF $    4 laf4 9!9"999h$If^h`$If`kd'$$Ifl4FJ$f PF $    4 laf499999h$If^h`$If`kd7($$Ifl4FJ$f PF $    4 laf4999J:K:h$If^h`$If`kd($$Ifl4FJ$f PF $    4 laf4K:L:M:::h$If^h`$If`kd)$$Ifl4FJ$f PF $    4 laf4:::;;h$If^h`$If`kd\*$$Ifl4FJ$f PF $    4 laf4; ; ;q;r;h$If^h`$If`kd+$$Ifl4FJ$f PF $    4 laf4r;s;t;;;h$If^h`$If`kd+$$Ifl4FJ$f PF $    4 laf4;;;7<8<h$If^h`$If`kd,$$Ifl4FJ$f PF $    4 laf48<9<:<<<h$If^h`$If`kd8-$$Ifl4FJ$f PF $    4 laf4<<<==h$If^h`$If`kd-$$Ifl4FJ$f PF $    4 laf4<<<<==2=3===== >>->.>>>>>>>??;? >h$If^h`$If`kd]/$$Ifl4FJ$f PF $    4 laf4 > > >>>h$If^h`$If`kd0$$Ifl4FJ$f PF $    4 laf4>>>>>h$If^h`$If`kd0$$Ifl4FJ$f PF $    4 laf4>>>8?9?h$If^h`$If`kd1$$Ifl4FJ$f PF $    4 laf49?:?;???h$If^h`$If`kd92$$Ifl4FJ$f PF $    4 laf4?????h$If^h`$If`kd2$$Ifl4FJ$f PF $    4 laf4??? @!@"@#@75`kd^4$$Ifl4FJ$f  P F  $    4 laf4$If`kd3$$Ifl4FJ$f PF $    4 laf4#@$@L@@@@@@@Mkd5$$Ifl40\ $  4  4 laf4$If $xa$gdY$a$@@@@@@@]Mkd/6$$Ifl40\ $  4 4 laf4$IfMkd5$$Ifl40\ $  4 4 laf4@@AAA8AzAA]R x$IfgdYMkdI7$$Ifl40\ $  4 4 laf4$IfMkd6$$Ifl40\ $  4 4 laf4AAAA)B*B+B,BTMkdc8$$Ifl40 $}    4 laf4$If<gd= FMkd7$$Ifl40\ $   4  4 laf4,B-B.B/B0B1B2B]Mkd}9$$Ifl40 $}   4 laf4$IfMkd8$$Ifl40 $}   4 laf42B3BwBBBBB$If<gd= FMkd :$$Ifl40 $}     4 laf4BBBBBB$Ifskd:$$Ifl4\2 &$      $4 laf4BCCCCC$Ifskdj;$$Ifl4\2 &$    $4 laf4CCCCC C$Ifskd=<$$Ifl4\2 &$    $4 laf4 C C CC*C@C$Ifskd=$$Ifl4\2 &$        $4 laf4@CACBCCCDCECFC7`kd>$$Ifl4F&$  $    4 laf4$If`kd=$$Ifl4F&$     $    4 laf4FCGCHCICJCKCLC`kdm?$$Ifl4F&$  $    4 laf4$IfLCMCNCcCjCpCqC:[kd@$$Ifl4F ; ~   )  }       4 laf4$If`kd2@$$Ifl4F&$     $    4 laf4qCrCCCCCCCDD D>D$a$gdLHkdA$$Ifl40 ~      4 laf4$If CC=D?DBDCDFDGDJDKDNDODRDUDpDqDrDDDDDDDDDDDDDDEEEEhbShL)hbSCJaJ hbS5h9jh9UhLh h5hLh5CJaJ!>D?D@DADBDCDDDEDFD]MkdB$$Ifl40|$  4 laf4$IfMkdIB$$Ifl40|$    4 laf4FDGDHDIDJDKDLDMDND]MkdC$$Ifl40|$  4 laf4$IfMkdcC$$Ifl40|$  4 laf4NDODPDQDRDSDTDUDpDqDrD][[[Mkd&E$$Ifl40|$    4 laf4$IfMkdD$$Ifl40|$  4 laf4 rDsDtDuDvDwDxDyDzDH:kdyF$$Ifl4$$4 laf4:kdF$$Ifl4$$4 laf4$If:kdE$$Ifl4$$4 laf4zD{D|D}D~DDDDDH:kdG$$Ifl4$$4 laf4:kd?G$$Ifl4$$4 laf4:kdF$$Ifl4$$4 laf4$IfDDDDDDDDDDDDDDDDD$x$Ifa$gd $Ifgd:kdH$$Ifl4$$4 laf4$IfDD EEx $$Ifa$gdY $IfgdYqkdhH$$Ifl0H$H04 laEEEEEEqkdH$$Ifl0H$H04 laO0PPP&P:pH&@PBP/ =!"#$%@@ Dp$$If!vh#v)#v #v :V l45)5 5 /  / / / /  /  / 4f4$$If!vh#v)#v #v :V l45)5 5 /  / / / / / /  4f4$$If!vh#v)#v #v :V l45)5 5 /  / / / / / /  4f4$$If!vh#v)#v #v :V l45)5 5 /  /  / / / /  /  4f4$$If!vh#v#vZ:V l40    55Z4f4$$If!vh#v#vZ:V l40    55Z4f4$$If!vh#v#vZ:V l40    55Z4f4$$If!vh#v#vZ:V l40    55Z4f4$$If!vh#v#vZ:V l40    55Z4f4$$If!vh#v#vZ:V l40    55Z4f4$$If!vh#v#vZ:V l40    55Z4f4$$If!vh#v #vC:V l45 5C/  /  /  / 4f4$$If!vh#v #vC:V l45 5C/  /  /  / 4f4$$If!vh#v #vC:V l45 5C/  /  / /  4f4$$If!vh#v #vC:V l45 5C/  /  / /  4f4$$If!vh#v #vC:V l45 5C/  /  / /  4f4$$If!vh#v #vC:V l45 5C/  /  / /  4f4$$If!vh#v #vC:V l45 5C/  /  / / /  4f4$$If!vh#v #vC:V l45 5C/  /  / / /  4f4$$If!vh#v #vC:V l45 5C/  /  / /  4f4a$$If!vh#v #v>:V l45 5>/ 4f4a$$If!vh#v #v>:V l45 5>/ 4f4a$$If!vh#v #v>:V l45 5>/ 4f4$$If!vh#v#v#v:V l4$555/  /  / /  /  /  / 4f4$$If!vh#v#v#v:V l4$555/  / /  / / / /  4f4$$If!vh#v#v#v:V l4$555/  /  /  / / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / /  / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / /  / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / /  / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / /  / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / /  / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / / / / /  4f4$$If!vh#v#v#v:V l4$555/ /  / / / / /  4f4$$If!vh#v#v#v:V l4$555/  / / / / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / / / /  /  4f4a$$If!vh#vL#v:V l4A(5L5/ 4f4a$$If!vh#vL#v:V l4A(5L5/ 4f4a$$If!vh#vL#v:V l4A(5L5/ 4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  /  /  / 4f4$$If!vh#v #v#vF:V l4+A(E5 55F/  / /  / / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  /  / / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  /  / /  / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  / /  / / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  / /  / / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  / /  / / / /  4f4$$If!vh#v #v#vF:V l4A(E5 55F/  / /  / / /  /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / / / /  /  / 4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  /  / / /  /  / 4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/ /  /  / / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  / /  / / /  4f4$$If!vh#vf#vP#vF:V l4$5f5P5F/  /  / / /  /  4f4$$If!vh#v #v4:V l45 54/  /  /  / 4f4$$If!vh#v #v4:V l45 54/  /  / /  4f4$$If!vh#v #v4:V l45 54/  /  / /  4f4$$If!vh#v #v4:V l45 54/  /  / /  4f4$$If!vh#v #v4:V l45 54/  /  / /  4f4$$If!vh#v #v4:V l45 54/  /  / /  4f4$$If!vh#v} #v:V l45} 5/  /  /  / 4f4$$If!vh#v} #v:V l45} 5/  /  / /  4f4$$If!vh#v} #v:V l45} 5/  /  / /  4f4$$If!vh#v} #v:V l45} 5/  /  / /  4f4$$If!vh#v #v #v#v:V l4$5 5 55/  / / / /  /  / 4f4$$If!vh#v #v #v#v:V l4$5 5 55/  / / / / / /  4f4$$If!vh#v #v #v#v:V l4$5 5 55/  / / / / / /  4f4$$If!vh#v #v #v#v:V l4$5 5 55/  /  / / / /  /  4f4$$If!vh#v#v#v:V l4$555/  / / / /  /  / 4f4$$If!vh#v#v#v:V l4$555/  / / / / / /  4f4$$If!vh#v#v#v:V l4$555/  / / / / / /  4f4$$If!vh#v#v#v:V l4$555/  /  / / / /  /  4f4$$If!vh#v~ #v)#v} :V l45~ 5)5} /  /  / /  /  /  / 4f4$$If!vh#v~ #v:V l45~ 5/  / /  / 4f4$$If!vh#v#v:V l455/  /  /  / 4f4$$If!vh#v#v:V l455/  /  / /  4f4$$If!vh#v#v:V l455/  /  / / /  4f4$$If!vh#v#v:V l455/  /  / /  4f4$$If!vh#v#v:V l455/  /  / / /  4f4$$If!vh#v#v:V l455/  /  / /  4f4a$$If!vh#v$:V l45$/ /  4f4a$$If!vh#v$:V l45$/ /  4f4a$$If!vh#v$:V l45$/ /  4f4a$$If!vh#v$:V l45$/ /  4f4a$$If!vh#v$:V l45$/ /  4f4a$$If!vh#v$:V l45$/ /  4f4a$$If!vh#v$:V l45$/ /  4f4$$If!vh#v#vH:V l055H4$$If!vh#v#vH:V l055H4^ 2 0@P`p2( 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8XV~_HmH @nH @sH @tH @H`H NormalxOJQJ_HmH nHsH tHV@V V Heading 3$<@&5CJPJ\^JaJtH DA D Default Paragraph FontVi@V  Table Normal :V 44 la (k (No List 4+4  Endnote TextH@H V Balloon TextCJOJQJ^JaJ4@4 VHeader  !4 "4 VFooter  !PK![Content_Types].xmlN0EH-J@%ǎǢ|ș$زULTB l,3;rØJB+$G]7O٭V$ !)O^rC$y@/yH*񄴽)޵߻UDb`}"qۋJחX^)I`nEp)liV[]1M<OP6r=zgbIguSebORD۫qu gZo~ٺlAplxpT0+[}`jzAV2Fi@qv֬5\|ʜ̭NleXdsjcs7f W+Ն7`g ȘJj|h(KD- dXiJ؇(x$( :;˹! I_TS 1?E??ZBΪmU/?~xY'y5g&΋/ɋ>GMGeD3Vq%'#q$8K)fw9:ĵ x}rxwr:\TZaG*y8IjbRc|XŻǿI u3KGnD1NIBs RuK>V.EL+M2#'fi ~V vl{u8zH *:(W☕ ~JTe\O*tHGHY}KNP*ݾ˦TѼ9/#A7qZ$*c?qUnwN%Oi4 =3N)cbJ uV4(Tn 7_?m-ٛ{UBwznʜ"Z xJZp; {/<P;,)''KQk5qpN8KGbe Sd̛\17 pa>SR! 3K4'+rzQ TTIIvt]Kc⫲K#v5+|D~O@%\w_nN[L9KqgVhn R!y+Un;*&/HrT >>\ t=.Tġ S; Z~!P9giCڧ!# B,;X=ۻ,I2UWV9$lk=Aj;{AP79|s*Y;̠[MCۿhf]o{oY=1kyVV5E8Vk+֜\80X4D)!!?*|fv u"xA@T_q64)kڬuV7 t '%;i9s9x,ڎ-45xd8?ǘd/Y|t &LILJ`& -Gt/PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 0_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!0C)theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] =  :::::=y'5<CE#&0:L_v MGjS 3"R$% '?''''(e)D+,@-V.4//g01133566637D77L88 999K::;r;;8<<== >>>9???#@@@A,B2BBBC C@CFCLCqC>DFDNDrDzDDDEE$%'()*+,-./123456789;<=>?@ABCDEFGHIJKMNOPQRSTUVWXYZ[\]^`abcdefghijklmnopqrstuwxyz{|}~"Dd+KVv=----.6...D/d////0N0n000"1B1111 2M2m222 3*3t3333:4Z44452555 6-66667;7[777=99999999999999999999999999999999998@0(  B S  ?HR-=-=9*urn:schemas-microsoft-com:office:smarttagsplace ] <<<<<<<<<<<<<< = ===CF,3 NR'6**66::<<<<<<<<<==3333333333, 0 N e HOky T:4=s6R01?yE#i#k%%%%:&V&'J'''++-.//2 377$8L88899w:::;<o<<<<<<<<<<<<<<<< = ====<<<<<<<<<<<<==D|O6~,<@7KrUP@v_&8ֲ!Rv~h^`OJQJo(hHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hH h^`OJPJQJ^Jo(-h^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hH ^`OJPJQJ^Jo(-^`OJQJ^Jo(hHopp^p`OJQJo(hH@ @ ^@ `OJQJo(hH^`OJQJ^Jo(hHo^`OJQJo(hH^`OJQJo(hH^`OJQJ^Jo(hHoPP^P`OJQJo(hH h^`OJPJQJ^Jo(-h^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHv_!RvO6,<0KrU0D                           ,        ,        >GF|{GYLm90H&*E?<E= FbSY%j_!V\H'4j45]he-_P<<@=`@UnknownG*Ax Times New Roman5Symbol3. *Cx ArialI. ??Arial Unicode MS5. .[`)Tahoma?= *Cx Courier New;WingdingsACambria Math"Vhu4Gu4G% 3 n 3 n!V24<<` 3QVHP?V2!xx Code Review Guidelines Cinda VoegtliMuthu$      Oh+'0`    ( 4@HPXCode Review GuidelinesCinda Voegtli Normal.dotmMuthu2Microsoft Office Word@@\@b-w@b-w  3՜.+,D՜.+,P  hp  Hewlett-Packardn< Code Review Guidelines TitletH(H`h_AdHocReviewCycleID_EmailSubject _AuthorEmail_AuthorEmailDisplayName_PreviousAdHocReviewCycleID_ReviewingToolsShownOnce"All 3 content filescvoegtli@emprend.comCinda Voegtli'|x  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry F-wData lI1Table7WordDocumentQSummaryInformation(DocumentSummaryInformation8CompObjr  F Microsoft Word 97-2003 Document MSWordDocWord.Document.89q