白盒测试指南(说明:此白盒测试指南主要给白盒测试人员提供一些基本的白盒测试方法和技术,由于涉及的问题广泛,测试内容中的细节不一定准确和完整,还有待于各位的共同参与和不断完善,欢迎多交流!)目的本方案主要实施NC产品程序代码的白盒测试。使界面符合设计规范,适用于用户;保证程序创建的类与接口的完整与正确,以及程序模块单独正常运行。保证局部模块功能完备性,运行正确性与稳定性。测试项所要测试的类。如:nc.ui.bd.*nc.bs.bd.*nc.vo.bd.*测试依据1.NC产品需求报告;需求规格说明书、用例描述清单2.设计文档;(OOA、OOD、CRC卡)如:AOM(AnalysisObjectModel)表示类间的静态关系,是多个相关的用例共用的。ASD(AnalysisSequenceDiagram)是按业务工作的顺序表示每一工作步骤执行时类间的动态关系。一个用例对应一个ASD。CRC(Collaborators&ResponsibilitiesCard)卡是一个类的完整表述3.界面规范4.编码规范5.开发命名标准通过的准则1.界面测试通过的标准:界面的样式、大小、颜色、整体布局的设置;各种标签控件的使用及主题描述以及事件源控件的使用、快捷键使用都应符合《NC系统应用框架需求报告》和《设计文档的相关规范》。2.程序代码通过的标准:创建的类、接口、方法、属性应与《设计文档》保持一致;程序的各种命名、注释、代码行的格式等应符合《程序开发命名标准》和《编码规范》;程序模块能独立稳定运行。测试环境配置1.测试工具:2.软件环境:Client端:操作系统:中文WINNT/2000开发环境:VA3.5专业版待测试的源码包Server端:操作系统:WINNT4.0开发环境:VA3.5专业版通讯环境:Servlet3.DBServer端:DBMS:SQLSERVER4.资源文件白盒测试总流程测试流程依据,请参见《代码层次结构规范》。NC系统中的对象主要分为如下几种:界面对象(UIObject)数值对象VO(ValueObject)业务对象BO(BusinessObject)数据管理对象DMO(DataManageObject)测试流程可按二种方式,其优缺点对照:VOVO前者:优点是便于测试者从界面层直观地录入数据,缺点是做回归测试时,录入数据需重复后者:原则是从底层测试,底层测试通过了,再依次往上一层测试;否则不需往上层测试缺点:需给中间层做一测试小程序:根据程序中类的对象构造输入数据及将结果输出到控制台上,(可通过自行设计测试工具来改善,测试工具需求另附)优点:做回归测试时,不用再构造输入数据,只要再执行一遍小测试程序测试步骤:需要列出所测试类的调用关系和关键方法的调用关系(依据为数据流)。(1)类关系图。(2)方法的功能调用关系图:只需要列出一些调用关系较复杂的方法。7.1.配置好测试环境;7.2.编写测试用例;另附7.3.静态测试,走查代码;代码走查使用测试用例启发检测错误,沿程序逻辑走一遍,检测程序结构和实现上是否有问题UIBODMODBDMOBOUIDB7.4.动态测试界面初始化状态测试;界面控件功能测试;(正反用例);业务功能测试(正反用例);数据流关联测试(涉及多表的增、删、改),并结合数据库表的字段、外键、字段类型、精度、小数位数、非空、默认值、备注、数据对象等。数据传递和接收一致,数据计算或处理后状态正确;组合模块整体运行稳定,不出现死机;7.5.确定问题属性:分为四类:错误、缺陷、失效、故障错误是指计算值、观测值、测量值之间,或条件与真值之间,不符合规定的或理论上的正确值或条件缺陷是指与期望值或特征值的偏差故障是指功能部件不能执行所要求的功能。故障可能由错误、缺陷或失效引起。失效是指功能部件执行其功能的能力丧失,系统或系统部件丧失了在规定限度内执行所要求功能的能力7.6.确定问题类别:问题类别分为以下几大类:1.各层公用问题2.JAVA语言规范3.数据类型4.SQL语句规范5界面UI6.VO数值对象7.BO业务对象8.DMO数据管理对象9.业务逻辑重点10.事务处理与隔离级别测试(详见总体技术部相关文档)11.效率测试(详见总体技术部相关文档)7.7.填写测试报告测试记录需详细填写具体实施方法中的相关列表;上交的测试报告只需填写未通过的项。(详见第10节)具体实施方法:8.1).各层公用问题:序号测试项测试内容质量保证标准问题属性出错频率T1代码与设计对照按需求、UI,CRC设计文档与编码对照,看是否完全地实现了所有的UI设计文档和CRC卡中规定的内容?完备性错误T2代码与设计对照按需求、UI,CRC设计文档与编码对照,看是否创建了所需的数据库或其他初始化数据文件?完备性错误T3参数返回值方法中被传递参数的类型、个数、顺序及返回值是否正确?以符合UI设计文档和CRC卡为准。正确性错误T5参数的传递当方法需要调用其它方法时,调用的参数是否正确?(UI设计文档和CRC卡中有调用说明)正确性错误T6命名是否按《命名规范》进行了类、方法、变量、属性的命名?正确性错误T7公式代码中的公式是否使用了设计文档中的相应数学公式。正确性错误T8注释注释是否使用简洁明了的语言对每一个方法都进行了充分必要的描述?是否对复杂的代码进行了注释?当程序的运行是受某些特殊因素限制时,是否做了限制注释?是否列出限制模块运行特性的全部特殊因素?易理解性缺陷T9冗余语句和变量是否存在永远执行不到的语句和变量,而降低了程序的可理解性?易理解性缺陷T10程序是否冗余对于程序中的大量重复内容,是否使用了专门的类来实现?可验证性缺陷T11代码整体规范是否自始至终使用了《程序员开发手册》和《编码规范》中要求的格式、调用约定、结构等?一致性缺陷T12代码与书写注释在一个函数内代码的长度不允许超过100行。建议如果一个函数的代码长度超过一个屏幕,那么或许这个函数太长了。使用统一的格式化代码。将‘{’放在所有者的后面,并且在下一行代码前加入TAB键缩进;(TAB键比用若干个空格更容易控制使用统一的缩进距离)类的注释;接口的注释;函数的注释;类属性的注释;局部变量的注释;请详见:《代码与注释书写风格规范》易理解性缺陷TT13包命名是否符合程序包命名规范TT14类1.创建的属性(字段)是否完整,类型与命名是否规范,注释是否清楚合理。2.创建的方法是否完整;命名是否规范;修辞是否正确;参数,参数类型,返回类型是否正确。3.调用的方法和传递的参数是否正确。1.参数传递、返回值是否正确2.特殊校验、处理是否有注释TT15类命名第一个字母大写的英文正常语序每个功能点的主程序(通常继承系统管理框架)统一采用ClientUI类名称。业务逻辑代码类以BO结尾,如:GeneralLedgerBO数值对象类以VO结尾,如:EmployeeVO数据管理对象类以DMO结尾,如:EmployeeDMO查询对象类以QO结尾,如:EmployeeQO非参照对话框类以Dlg结尾,如:EditEmployeeDlg参照对话框类以Ref结尾,如:WorkCenterRef面板类以Panel结尾,如:GeneralLedgerPanelTT16接口接口名的开头加上字母‘I’前缀从第二个字母起,用首字母大写的英文单词描述TT17方法1.是否正确定义了此方法(包括修辞词、返回类型、参数、参数类型)2.注释是否清楚3.命名是否正确:方法函数名的第一个单词小写,后面的单词第一个字母大写;第一个单词必须是动词,使函数的意义清晰明了;存取对象的属性使用setXXX()和getXXX()函数形式访问布尔类型的属性可以使用isXXX()函数TT18类属性所有类属性全部以m_开头,同其它变量区分开。集合类型的域,如数组、向量,必须使用复数形式来指出它们多值特性。所有的域都是私有的,用并且仅用getXXX和setXXX等的存取函数去访问域,。存取函数的可见性尽量为protected属性的,getter函数可以是public属性的存取函数的命名规则是:getter函数=get+域名(非布尔类型域)is+域名(布尔类型域)setter函数=set+域名TT19常量常量的命名全部使用大写。用下划线来分隔单词。MAX_VALUESTART_DATEMINIMUM_BALANCETT20类所实现的功能是否实现了要求的所有功能TT21类中的校验方法1.界面级的校验是否齐全2.业务级的校验是否齐全完备性错误TT22继承性封装性多态性面向对象程序是否体现继承、封装和多态的特性?TT23面向对象特性面向对象程序中,编写类的方法时,是否同时考虑基类方法(Base::Function())的行为和继承类方法(Derived::Function())的行为TT24数据封装性数据成员是否满足数据封装的要求。有时强制的类型转换会破坏数据的封装特性。例如:classHiden{private:inta=1;char*p=hiden;}classVisible{public:intb=2;char*s=visible;}…..…..Hidenpp;Visible*qq=(Visible*)&pp;在上面的程序段中,pp的数据成员可以通过qq被随意访问TT25类中成员方法以OOD为依据,类中成员方法是否实现了设计中所要求的功能;如通过OOD仍不清楚,则还应依据OOA、及需求报告说明书8.2).JAVA语言规范走查内容序号测试项测试内容质量保证标准问题属性出错频率J1下标是否有下标变量越界错误?健壮性错误J2除数是否包含有除零错误的可能?健壮性错误J4Get方法当对一个不知是否为空的对象取其属性值会引起空指针异常。如果空指针异常没有被接收程序将终止。例如:BusinessData1.getBusinessDate2.getOid()当BusinessData1.getBusinessDate2为null时,BusinessData1.getBusinessDate2.getOid()将发生异常健壮性错误J5字符串在字符串比较和将字符串写入数据表前应Trim()掉它的前后空格。健壮性错误J6字符串连结符+将字符串连结操作中的+操作符同加法运算中的+操作混淆将导致奇怪的结果。例如:y为int类型,y的值为5,g.drawString(y+2=+y+2,30,30);将显示y+2=52正确性错误J7Floatdouble不要用等于或不等于来比较浮点值,而应该判断其差别是否小于某一指定小的值。例如:89.6实际可能为89.59999232458正确性错误J8Floatdouble不要对浮点值用做计数循环,应用整型值。正确性错误J9Floatdouble不要使用类型float或者double的变量执行精确的金融计算。浮点数的不精确会导致引起不正确金融计算的错误。可定义若干类来完成不同的金融计算。正确性错误J10switchswitch语句的末尾如果没有defaul语句将会不利于处理异常。健壮性缺陷J11switch是否在switch结构中的每一个case语句体结束时都有break语句?正确性错误J12if语句在if语句体右括号后紧跟一个分号常常是一个错误,会使if语句成为顺序语句。正确性错误J13循环语句通过循环语句对一Vector型变量赋值时,其Vector变量的实例化语句是否被错误地包含在循环体内?正确性错误J14循环语句注意循环的条件中是否有差1的现象?正确性错误J15循环语句代码是否有无穷循环的可能?(循环条件永远为真)可预测性错误J16数值范围是否存在溢出错误J17ThisSuperThis和Super的用法是否正确J18构造子是否缺少构造子方法J19方法声明、参数、返回值方法声明错误参数错误返回值错误J20计算计算错误J21比较比较错误J22控制流控制流错误J23类的修饰符修饰符是否符合以下原则:Public用于对所有的类可见,Private用于对本类可见Protected不仅用于对子类可见,也用于对同一个包的其