白盒测试流程

上传人:只**** 文档编号:207488729 上传时间:2023-05-06 格式:DOCX 页数:22 大小:61.37KB
收藏 版权申诉 举报 下载
白盒测试流程_第1页
第1页 / 共22页
白盒测试流程_第2页
第2页 / 共22页
白盒测试流程_第3页
第3页 / 共22页
资源描述:

《白盒测试流程》由会员分享,可在线阅读,更多相关《白盒测试流程(22页珍藏版)》请在装配图网上搜索。

1、 欢迎阅读本文档,希望本文档能对您有所帮助!白盒测试指南(说明:此白盒测试指南主要给白盒测试人员提供一些基本的白盒测试方法和技术,由于涉及的问题广泛,测试内容中的细节不一定准确和完整,还有待于各位的共同参与和不断完善,欢迎多交流!)目的本方案主要实施NC产品程序代码的白盒测试。使界面符合设计规范,适用于用户;保证程序创建的类与接口的完整与正确,以及程序模块单独正常运行。保证局部模块功能完备性,运行正确性与稳定性。测试项所要测试的类。如:nc.ui.bd.*nc.bs.bd.*nc.vo.bd.*测试依据1. NC产品需求报告;需求规格说明书、用例描述清单2. 设计文档;(OOA、OOD、CRC

2、卡)如:AOM(Analysis Object Model)表示类间的静态关系,是多个相关的用例共用的。ASD(Analysis Sequence Diagram)是按业务工作的顺序表示每一工作步骤执行时类间的动态关系。一个用例对应一个ASD。CRC (Collaborators & Responsibilities Card)卡是一个类的完整表述3. 界面规范4. 编码规范5. 开发命名标准通过的准则1.界面测试通过的标准:界面的样式、大小、颜色、整体布局的设置;各种标签控件的使用及主题描述以及事件源控件的使用、快捷键使用都应符合NC系统应用框架需求报告和设计文档的相关规范。2.程序代码通过

3、的标准:创建的类、接口、方法、属性应与设计文档保持一致;程序的各种命名、注释、代码行的格式等应符合程序开发命名标准和编码规范;程序模块能独立稳定运行。测试环境配置1 测试工具:2 软件环境:Client端:操作系统:中文WINNT/2000开发环境:VA3.5 专业版待测试的源码包Server端:操作系统:WIN NT4.0开发环境:VA3.5 专业版通讯环境: Servlet 3 DB Server端:DBMS:SQL SERVER4 资源文件白盒测试总流程测试流程依据,请参见代码层次结构规范。NC系统中的对象主要分为如下几种: 界面对象(UIObject) 数值对象VO(ValueObje

4、ct) 业务对象BO(BusinessObject) 数据管理对象DMO(DataManageObject)测试流程可按二种方式,其优缺点对照:BODBDMOUIVO VO DBUIBODMO前者:优点是便于测试者从界面层直观地录入数据,缺点是做回归测试时,录入数据需重复后者:原则是从底层测试,底层测试通过了,再依次往上一层测试;否则不需往上层测试缺点:需给中间层做一测试小程序:根据程序中类的对象构造输入数据及将结果输出到控制台上,(可通过自行设计测试工具来改善,测试工具需求另附)优点:做回归测试时,不用再构造输入数据,只要再执行一遍小测试程序测试步骤:需要列出所测试类的调用关系和关键方法的调

5、用关系(依据为数据流)。(1) 类关系图。(2) 方法的功能调用关系图:只需要列出一些调用关系较复杂的方法。7.1. 配置好测试环境;7.2. 编写测试用例;另附7.3. 静态测试,走查代码;代码走查使用测试用例启发检测错误,沿程序逻辑走一遍,检测程序结构和实现上是否有问题7.4. 动态测试l 界面初始化状态测试;l 界面控件功能测试;(正反用例);l 业务功能测试(正反用例);l 数据流关联测试(涉及多表的增、删、改),并结合数据库表的字段、外键、字段类型、精度、小数位数、非空、默认值、备注、数据对象等。l 数据传递和接收一致,数据计算或处理后状态正确;l 组合模块整体运行稳定,不出现死机;

6、7.5. 确定问题属性:分为四类:错误、缺陷、失效、故障错误是指计算值、观测值、测量值之间,或条件与真值之间,不符合规定的或理论上的正确值或条件缺陷是指与期望值或特征值的偏差故障是指功能部件不能执行所要求的功能。故障可能由错误、缺陷或失效引起。失效是指功能部件执行其功能的能力丧失,系统或系统部件丧失了在规定限度内执行所要求功能的能力7.6. 确定问题类别:问题类别分为以下几大类:1.各层公用问题2.JAVA语言规范3.数据类型4.SQL语句规范5 界面UI6.VO数值对象7.BO业务对象8.DMO数据管理对象9.业务逻辑重点10.事务处理与隔离级别测试(详见总体技术部相关文档)11效率测试(详

7、见总体技术部相关文档)7.7. 填写测试报告测试记录需详细填写具体实施方法中的相关列表;上交的测试报告只需填写未通过的项。(详见第10节)具体实施方法:8.1). 各层公用问题:序号测试项测试内容质量保证标准问题属性出错频率T1代码与设计对照按需求、UI,CRC设计文档与编码对照,看是否完全地实现了所有的UI设计文档和CRC卡中规定的内容?完备性错误T2代码与设计对照按需求、UI,CRC设计文档与编码对照,看是否创建了所需的数据库或其他初始化数据文件?完备性错误T3参数返回值方法中被传递参数的类型、个数、顺序及返回值是否正确?以符合UI设计文档和CRC卡为准。正确性错误T5参数的传递当方法需要

8、调用其它方法时,调用的参数是否正确?(UI设计文档和CRC卡中有调用说明)正确性错误T6命名是否按命名规范进行了类、方法、变量、属性的命名?正确性错误T7公式代码中的公式是否使用了设计文档中的相应数学公式。正确性错误T8注释注释是否使用简洁明了的语言对每一个方法都进行了充分必要的描述?是否对复杂的代码进行了注释?当程序的运行是受某些特殊因素限制时,是否做了限制注释?是否列出限制模块运行特性的全部特殊因素?易理解性缺陷T9冗余语句和变量是否存在永远执行不到的语句和变量,而降低了程序的可理解性?易理解性缺陷T10程序是否冗余对于程序中的大量重复内容,是否使用了专门的类来实现?可验证性缺陷T11代码

9、整体规范是否自始至终使用了程序员开发手册和编码规范中要求的格式、调用约定、结构等?一致性缺陷T12代码与书写注释在一个函数内代码的长度不允许超过100行。建议如果一个函数的代码长度超过一个屏幕,那么或许这个函数太长了。使用统一的格式化代码。将放在所有者的后面,并且在下一行代码前加入TAB键缩进;(TAB键比用若干个空格更容易控制使用统一的缩进距离)类的注释;接口的注释;函数的注释;类属性的注释;局部变量的注释;请详见:代码与注释书写风格规范易理解性缺陷TT13包命名是否符合程序包命名规范TT14类1.创建的属性(字段)是否完整,类型与命名是否规范,注释是否清楚合理。2.创建的方法是否完整;命名

10、是否规范;修辞是否正确;参数,参数类型,返回类型是否正确。3.调用的方法和传递的参数是否正确。1. 参数传递、返回值是否正确2. 特殊校验、处理是否有注释TT15类命名第一个字母大写的英文正常语序每个功能点的主程序(通常继承系统管理框架)统一采用ClientUI类名称。业务逻辑代码类以BO结尾,如:GeneralLedgerBO数值对象类以VO结尾,如:EmployeeVO数据管理对象类以DMO结尾,如:EmployeeDMO查询对象类以QO结尾,如:EmployeeQO非参照对话框类以Dlg结尾,如:EditEmployeeDlg参照对话框类以Ref结尾,如:WorkCenterRef面板类

11、以Panel结尾,如:GeneralLedgerPanelTT16接口接口名的开头加上字母I前缀从第二个字母起,用首字母大写的英文单词描述TT17方法1是否正确定义了此方法(包括修辞词、返回类型、参数、参数类型)2注释是否清楚3命名是否正确:l 方法函数名的第一个单词小写,后面的单词第一个字母大写;l 第一个单词必须是动词,使函数的意义清晰明了;l 存取对象的属性使用setXXX()和getXXX()函数形式l 访问布尔类型的属性可以使用isXXX()函数TT18类属性 所有类属性全部以m_开头,同其它变量区分开。 集合类型的域,如数组、向量,必须使用复数形式来指出它们多值特性。 所有的域都是

12、私有的,用并且仅用getXXX和setXXX等的存取函数去访问域,。 存取函数的可见性尽量为protected属性的,getter函数可以是public属性的 存取函数的命名规则是:getter函数 = get + 域名 (非布尔类型域) is + 域名 (布尔类型域)setter函数 = set + 域名TT19常量常量的命名全部使用大写。用下划线来分隔单词。MAX_VALUESTART_DATEMINIMUM_BALANCETT20类所实现的功能是否实现了要求的所有功能TT21类中的校验方法1 界面级的校验是否齐全2 业务级的校验是否齐全完备性错误TT22继承性封装性多态性面向对象程序是否

13、体现继承、封装和多态的特性?TT23面向对象特性面向对象程序中,编写类的方法时,是否同时考虑基类方法(Base:Function())的行为和继承类方法(Derived:Function())的行为TT24数据封装性数据成员是否满足数据封装的要求。有时强制的类型转换会破坏数据的封装特性。例如:class Hidenprivate:int a=1;char *p= hiden;class Visiblepublic:int b=2;char *s= visible;.Hiden pp;Visible *qq=(Visible *)&pp;在上面的程序段中,pp的数据成员可以通过qq被随意访问TT

14、25类中成员方法以OOD为依据,类中成员方法是否实现了设计中所要求的功能;如通过OOD仍不清楚,则还应依据OOA、及需求报告说明书8.2). JAVA语言规范走查内容序号测试项测试内容质量保证标准问题属性出错频率J1下标是否有下标变量越界错误?健壮性错误J2除数是否包含有除零错误的可能?健壮性错误J4Get方法当对一个不知是否为空的对象取其属性值会引起空指针异常。如果空指针异常没有被接收程序将终止。例如:BusinessData1.getBusinessDate2.getOid()当BusinessData1.getBusinessDate2为null时,BusinessData1.getBu

15、sinessDate2.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不要对浮点值用做计数循环,应用整型值。正确性错误J9Floa

16、tdouble不要使用类型float或者double的变量执行精确的金融计算。浮点数的不精确会导致引起不正确金融计算的错误。可定义若干类来完成不同的金融计算。正确性错误J10switchswitch语句的末尾如果没有defaul语句将会不利于处理异常。健壮性缺陷J11switch是否在switch结构中的每一个case语句体结束时都有break语句?正确性错误J12if语句在if语句体右括号后紧跟一个分号常常是一个错误,会使if语句成为顺序语句。正确性错误J13循环语句通过循环语句对一Vector型变量赋值时,其Vector变量的实例化语句是否被错误地包含在循环体内?正确性错误J14循环语句注

17、意循环的条件中是否有差1的现象?正确性错误J15循环语句代码是否有无穷循环的可能?(循环条件永远为真)可预测性错误J16数值范围是否存在溢出错误J17ThisSuperThis和Super的用法是否正确J18构造子是否缺少构造子方法J19方法声明、参数、返回值方法声明错误参数错误返回值错误J20计算计算错误J21比较比较错误J22控制流控制流错误J23类的修饰符修饰符是否符合以下原则:Public用于对所有的类可见,Private用于对本类可见Protected不仅用于对子类可见,也用于对同一个包的其它所有类可见8.3). 数据类型:序号测试项测试内容质量保证标准问题属性出错频率D1Null转

18、化在设置值对象VO时,在VO内部是否将空串将转化null,数值型数据(整数、浮点数)null转为0。*D2Null转化在取得VO元素放到界面时(如放到UITextField)是否根据需要将null转化为或0或”0.0”。D4控件数据类型的转换编辑控件数据类型是否与表中对应字段数据类型一致1UITextField文本域数据类型在nc.ui.pub.beans.textfield包的UITextType接口中定义了TextStr、TextInt、TextDbl、TextDate和TextDateTime等5类,但布尔型使用UICheckBox或UIRadioButton控件,故没有定义布尔型。D5

19、UFDouble的使用去掉原UFCurrency类型,重新封装UFDouble,所有的数值型及运算是否采用UFDouble。D6UFDateTime的使用去掉原UFTime类型,重新封装UFDateTime。D7某些数据封装类型的禁用禁止使用的数据封装类型,如Boolean、Short、Long、Float、Double、Date。D9双精度型控件的范围控制对双精度型控件是否控制最大长度范围:如:对双精度型,数据库表中字段设为Decimal类型,pricision为20位,Scale为8位 则需加入语句:ivjtxtShipUnitNum.setMaxLength(20);ivjtxtShip

20、UnitNum.setNumPoint(8);D11最大长度的设置设置最大长度MaxLength(默认20位、对TextDate与TextDateTime无效),D12小数位数的设置设置小数位数NumPoint(默认4位、只对TextDbl有效)D13禁止输入字符的设置设置禁止输入的字符DelStr,整数和浮点数也可设置禁止字符串,如:/禁止输入负数setTextType(TextStr);setDelStr(-);/只输入数字型字符setTextType(TextDbl);setDelStr(-.);D14对齐方式整数和浮点数默认右对齐,其它左对齐,可以改变D15左边字符锁定的设置设置左边字

21、符锁定 (1)setFixText(String)-设置串并锁定和字符串相同的长度 (2)setFixText(String,int)-设置串并锁定参数给定的长度 (3)setFixTextLen(int)-锁定参数给定的长度 (4)setText(String)-设置串并取消锁定 任何设置都会修改以前设定的锁定长度 8.4). SQL语句规范:(详见数据库处理规范)序号测试项测试内容质量保证标准问题属性出错频率S1书写规范语句全部用小写S2SQL语法l 禁止使用“select * from ”语法。l 禁止使用“insert into table_name values(?,?,)”语法,l

22、 统一使用“insert into table_name (col1,col2,) values(?,?,.)”。S3SQL语法如果在语句中有not in(in)操作,是否考虑用not exists(exists)来重写。S4类型转换避免显式或隐含的类型转换。例如在where子句中numeric 型和int型的列的比较S5当SQL语句含有运算符时,运算符需与其他字符串用空格区分。否则容易导致以下类似问题。在语句select ab from table 中, a,b均为变量。拼写该语句时,如果a=6, b= -3,则语句变为select 6-3 from table。-变为Sql的注释,语句报错

23、S6查询优化为提高索引的效率,查询路径优化(尤其是要尽力减少查询嵌套)。S7视图使用静态视图,不允许动态创建视图,索引,存储过程等数据库对象S8Null不能将Null 与 空串“”视为相同S9多表连接1.SQL语句包含多表连接时,是否加上表的别名。3. 子查询问题。对于能用连接方式或者视图方式实现的功能,不要用子查询。例如:select name from customer where customer_id in ( select customer_id from order where money1000)。应该用如下语句代替:select name from customer inner

24、 join order on customer.customer_id=order.customer_id where order.money100。3. 多表关联查询时,写法必须遵循以下原则,这样做有利于建立索引,提高查询效率。格式如下select sum(table1.je) from table1 table1, table2 table2, table3 table3 where (table1的等值条件(=)) and (table1的非等值条件) and (table2与table1的关联条件) and (table2的等值条件) and (table2的非等值条件) and (t

25、able3与table2的关联条件) and (table3的等值条件) and (table3的非等值条件)。S10复杂SQL语句对复杂SQL语句必须单独测试:如多表查询拚写语句是否符合业务要求S11多数据库适配1.Sql语句转换类。调用方法:SqlTranslator trans = new SqlTranslator(); destSql = trans.getSql(sourceSql, databaseType)。2提供SQLException信息转换。同一个SQL在不同数据库操作,JDBC返回的错误号以及错误信息不同。SQLException信息转换器将不同JDBC返回的错误号统一

26、为以Sql Server7.0为准,错误信息仍以不同JDBC返回的错误信息为主S11多数据库适配3SQL语法限制(1) 字符串连接必须用“|”符号。例如: select f1 | f2 from test:而不是: select f1 + f2 from test; 如果用“+”号,则Oracle不支持。(2) 左连接的写法必须带“outer”关键字。例如:select f1 from t1 left outer t2 on t1.f1 = t2.f1;而不是: select f1 from t1 left t2 on t1.f1 = t2.f1。(3) 参与左连接的列不能为常量例如,不允许如

27、下语句: select * from t1 left outer join t2 on t1.f1=A。(4) 在Case when语句中只能出现 =、=、= 以及is null运算符,不能出现 、 、!=、以及is not null运算符。 否则在Oracle的decode函数无法表达。(5) 在Case when语句中参与比较的列只能有一个。例如不能使用如下 casewhen语句:case when f1 1 then .when f2 1 then end。(6) 在对char类型比较时,要对列加上rtrim()函数,否则在Oracle中不会得到正确结果。(7) 在Delete、Upda

28、te、Insert、Select语句中char类型的数值引用使用单引, 例如语句:Insert into t vlaues(“book”,5)在SQL Server中可以使用,而在Oracle、DB2中不支持。应为:Insert into t vlaues(book,5) 。(8) 通配符不能使用a-c%这种形式,应写成如:select * from table_name where col1 like a% OR col1 like b% OR col1 like c% 。(9) 不能通过来top n/percent限制查询结果集的记录数,oracle不支持(10) Union、order

29、by、Group by、having、betweenand、in、exists、is null 用法一致S12函数不允许动态创建函数。8.5). 界面UI层:为提高测试效率,界面UI层测试可将黑盒测试技术和白盒测试技术结合起来进行测试8.5.1. 代码规范:序号测试项测试内容质量保证标准问题属性出错频率UI1继承类1从ToftPanel继承一个类。每个界面类都要继承ToftPanel: public class myUI extends ToftPanelUI2添加按钮2. 是否为界面类添加它需要的按钮。 a) 添加按钮属性。b) 添加按钮组属性c) 将按钮设置到界面上。在构造方法中是否添加如

30、下语句: setButtons(m_aryButtonGroup);UI3响应按钮3. 响应按钮。在onButtonClicked(ButtonObject bo)方法中,处理按钮事件: public void onButtonClicked(ButtonObject bo) if (bo = m_boNormalButton) onNormalButtonClicked(); else if (bo = m_boXxxButton) / other button disposing UI4界面标题4. 设置界面标题。在getTitle()方法中,返回界面的标题: public String

31、getTitle() return 我的标题; UI5其他业务代码5. 完成其他业务代码。 在完成业务代码时,可能需要用到帐套编码、单位编码、用户编码等信息,这些信息保存在ClientEnvironment类中。你可以在ToftPanel的继承类中使用方法getClinetEnvironment()获得一个ClientEnvironmentUI6客户端调用BO对象 对在客户端用到的每个BO类XxxBO,都要生成一个客户端的代理类XxxBO_Client。XxxBO_Client和XxxBO的方法一一对应,XxxBO_Client实际上是XxxBO对象在客户端的一个包装。在UI层中,只使用Xxx

32、BO_Client访问BS层。例如:如果你要调用XxxBO类中的一个update(MyVO vo)方法,那么在客户端的代码是: XxxBO_Client.update(vo); UI7对话框须继承和使用的类 对话框继承nc.ui.pub.beans.UIDialog 对于提供消息的对话框,使用nc.ui.pub.beans.MessageDialog,不允许使用javax.swing.JOptionPane,因为JOptionPane在浏览器中运行时存在问题 UI8表格模型须继承和使用的类表格模型继承nc.ui.pub.beans.table.VOTableModel或使用NCTableMod

33、el8.5.2. UI功能测试分为两个主要手段:l 非正常用例手段:此阶段主要是采用不合法的输入数据和非正常的操作手段。测试系统的错误控制与处理能力。保证系统不死机,能正常稳定运行。l 正常用例手段:此阶段主要采用合法的业务数据,正常的操作手段。保证UI符合设计要求和操作习惯,能正常稳定运行,能正确处理业务数据。1、界面规范测试2.界面初始化测试3、编辑控件(除功能按钮以外的控件)应用测试;4、通用对话框测试5、参照框测试;6、状态栏测试 7、业务功能测试(新建、保存、删除、查询、浏览、退出)8. 界面级校验测试序号测试项测试内容质量保证标准问题属性出错频率UI20界面规范测试1 同一界面,不

34、能同时在同一屏上打开多个。2 菜单、控件的一致性测试:与设计文档相比较。主要查看菜单与控件是否齐全,控件的类型是否正确。3 界面的整体布局测试:控件的整体布局是否协调,颜色,尺寸是否合理。具有操作逻辑的控件,其摆放的先后位置是否合理。4 图标、标题、标签测试:各种图标使用是否符合规范;标题文本、标签文本是否正确合理。5 控件的鼠标提示文本测试:是否有鼠标提示,提示文本是否正确合理(针对重要的控件)。UI21界面初始化测试1.“增加”、 “退出”、“浏览”按钮是否被激活,“取消”按钮是否变灰。2.界面是否自动列示最后(或最前)一条记录?(如在列表/卡片型界面中的卡片中)3.各种标签文本和图标提示

35、文本是否正确UI22界面控件功能测试1. 最小化、最大化、关闭按钮是否有效。2. 菜单各种功能按钮是否有效。3. 按增加按钮是否刷新界面,处于待输入状态。增加按钮、删除变灰,并激活取消、确定按钮。光标是否定位于第一个文本域内。4. 文本域内是否能输入正常长度、数据类型的数据(各提示键显示的内容是否正确);可根据前面已知文本自动显示关联的文本是否自动显示。5. 输入非正常的数据,系统是否有相应的错误提示,术语是否正确6. 在增加状态下按取消按钮,是否放弃当前操作,返回前一界面,并激活增加按钮。7. 按删除按钮是否能删除选中的记录。8. 状态栏显示是否正确。9是否响应键盘事件(Enter,Dele

36、te,Tab)10。按退出按钮是否能正常终止主应用程序。UI23编辑控件的应用测试:1 显示控件和编辑控件应该加以区分2 .属性是否齐全3 控件的应用是否合理4 能否正常接收数据,对非法类型数据是否进行了控制。5 允许输入的数据长度是否符合要求。6 控件的边界状态是否设定。如文本框的滚动条等。7 是否有快捷键,快捷键是否有效。8 主要的功能按钮是否响应键盘事件。(Esc:退出; :前删;delete:删除选定的项;F1:调出帮助;F5:调出定位或查找界面;Enter:确定和光标移动;alt+F4:调出参照框;键盘上的4个浏览按钮适用于树的扩展与伸收,及控件内部的光标移动,其中向下的箭头用于下拉

37、框;Tab:用于控件的焦点移动;Alt-浏览按钮:用于选定菜单功能)UI24通用对话框测试:1 图标,标题是否正确。2 标签,提示文本是否正确合理。3 功能按钮是否齐全,是否合理有效。(包括关闭小按钮:X,相当于取消对话框的功能。)UI25参照框测试:参照:分树型、树表、列表型参照:l 对于树型参照,是否应只显示末级记录,而不是所有记录l 可选择参照编码,名称或者助记码l 模糊参照和预过滤的功能l 参照可以设置栏目l 可以对参照记录进行快速匹配定位,且该定位记录自动显示在当前屏(目前存在此问题)l 可以对参照记录进行主,次关键字排序,或者通过单击表头对任一列排序l 参照的自动检查l 参照文本框

38、获得焦点时显示编码,离开显示名称l 模糊参照:输入01* 再按参照按钮,将只显示以01开头的记录l 输入0101?显示编码为8为且以0101开头的记录l 参照预定位,输入01,再按参照按钮,光标停在01开头的记录l 双击参照表格的一行,结束参照并返回l 对应参照返回的数据,在保存数据库时也要进行业务合法性检查,因为参照返回的数据不一定是数据库中存在的,可能在写数据库前基础数据已发生改变,UI26状态栏测试增加,修改,保存,删除等操作应在状态栏显示其操作状态(成功、失败等)。随操作不同,状态应做相应的变化。在查询大数据量时,是否有提示用户等待窗口。UI27界面级校验测试如起始日期不能大于截止日期

39、,如果大于是否有错误提示,提示文本是否正确。UI28业务功能测试系统初始化状态测试1 系统初始化分为两种,初次使用本系统时各界面的初始化和再次使用本系统时各界面的初始化。主要测试各菜单和功能按扭的缺省状态(变灰与激活)是否合理;各种控件的缺省值是否正确。2对于母子表的界面,注意母子表是否能同步显示,显示的明细记录是否正确。UI29新增:l 操作逻辑是否合理(包括业务数据输入的先后顺序)。比如应先定位树节点,再按新增按钮;l 按下新增按钮后,各功能按钮和菜单状态变化是否正确;界面的编辑框是否刷新(注意合理的保留值不应刷新);光标定位是否合理。l 能否输入合法的数据;能否正常地调出参照框,并导入所

40、需的数据(包括下拉框,参照对话框,右键菜单等)。能否正常修改或清除数据(需要注意参照框的此项要求)。l 在没保存所编辑的记录时,进行其他操作,系统是否提示保存新增记录,对话框文本是否正确合理。l 按保存按钮后,是否进行全面的逻辑校验(与设计文档相符),与正常的业务逻辑保持一致;提示文本是否正确合理,对话框能否正常操作(见非正常用例阶段的通用对话框测试描述)。退出对话框后光标定位是否合理。l 能否正常保存数据。界面数据显示是否正确。菜单、其它功能按钮及控件状态变化是否合理。l 能否查询到此记录,查询到的结果是否与输入的一致。UI30修改:l 能否正常修改数据。l 不应该修改的编辑框是否锁死。l

41、在没保存所编辑的记录时,进行其他操作,系统是否提示保存新增记录,对话框文本是否正确合理。l 按保存按钮后,是否进行全面的逻辑校验(与设计文档相符),与正常的业务逻辑保持一致;提示文本是否正确合理,对话框能否正常操作(见非正常用例阶段的通用对话框测试描述)。退出对话框后光标定位是否合理。l 能否正常保存修改数据,界面数据显示是否正确。菜单、其它功能按钮及控件状态变化是否合理。l 能否查询到此记录,查询到的结果是否与输入的一致。UI31删除:l 删除分为记录删除和行删除两种。l 删除操作逻辑是否合理。如先定位后删除,一次性删除多条等。l 按删除按钮是否有提示,提示文本是否正确合理。l 具有业务逻辑

42、时,是否遵循逻辑删除规则,是否有提示,提示文本是否正确。l 记录是否从界面上清除。是否显示上一条记录,菜单、功能按钮、各种编辑控件状态是否正确。l 通过查询,验证是否正常删除。UI32保存l 按保存后是否进行所有的业务逻辑校验。是否有提示,提示文本是否正确。l 保存后,记录是否从界面上清除。是否显示上一条记录,菜单、功能按钮、各种编辑控件状态是否正确。UI33查找l 输入正常的匹配值能否查询到合适的记录。l 对于较长时间的查询是否有等待提示窗口。l 注意条件为时间段的查询。l 如果没有缺省条件,直接按查询按钮是否能查出所有的记录。l 对于组合查询,应进行互相匹配验证查询。l 注意通过双击记录带

43、出明细的操作模式。l 所有条件是否能单独和组合查询,列表框数据刷新是否正确。UI34定位输入合理的值,光标能否定位在适当的位置。UI35退出l 在新增或修改状态直接退出,系统是否提示保存,提示文本是否正确。l 能否正常退出操作界面。8.6). ValubleObject:数值对象一个VO类包装一组代表业务含义的数据,负责在系统各层之间传递业务数据。通常一个VO对应一个数据库表,但也可以对应多个数据库表,或对应一个数据库表的部分字段。 序号测试项测试内容质量保证标准问题属性出错频率VO1继承性该类是否继承于VO类正确性错误VO2get()和set()方法是否齐全VO类是否包含每个需要持久化属性的

44、setXXX和getXXX方法。在set方法中是否对属性进行合法性校验,校验失败抛出ValidationException异常 正确性错误VO3构造子该类应包含无参构造子、只含参数OID的构造子正确性错误VO5参数全参构造子中参数的顺序是否与set语句的顺序一致?(去掉)正确性错误VO6语句体在每个set方法中是否有修改对应属性的语句体?正确性错误VO7语句体在每个get方法中是否有返回对应属性的语句体?正确性错误VO8空值问题所有为保存操作员的录入数据而创建VO对象的类属性应初始化为null,直到操作员录入数据时才为相应属性分配空间和赋值。在保存到数据库时,把空属性(null)映射为数据库相

45、应字段的null。VO9Integer、Double包装类型由于Java的Primitive Type类型(如int、double)不是对象,所以不能使用它们作为类属性类型,应该采用对应的Integer、Double等相应的包装类型。8.7). BO业务对象层:每个BO类都继承BusinessObject类。BO对象通过操纵DMO对象和其他BO对象完成业务逻辑。序号测试项测试内容质量保证标准问题属性出错频率BO1 BO类中是否存在名称相同且参数个数相同的方法一个BO类中不能有名称相同且参数个数相同的两个方法同时存在。因为目前中间件生成工具处理此情况存在问题BO3事件监听器和处理事件不建议使用可

46、视化进行事件处理,请手工注册事件监听器和处理事件因为可以减少不必要的代码B4打印异常所有异常应打印出来,可使用下述语句:e.printStackTrace(System.err);B5抛出异常BO的所有业务方法都必须抛出异常:java.rmi.RemoteException;否则将不能生成EJB辅助代码B6BO对象中使用其它BO对象或环境变量时在BO对象中如要使用其它BO对象或环境变量,必须使用getBeanHome()和getEnvProperty()方法获得,不要直接使用JNDI查询。使用其它BO对象的方法代码示例如下: BO2Home home = getBeanHome(“BO2Nam

47、e”, BO2Home.class); BO2 bo2 = BO2Home.create();B7EJB规范基类BusinessObject包含了SessionBean接口中的setSessionContext()、ejbCreate()、ejbActivate()、ejbPassivate()、ejbRemove()方法。这是提供给EJB Server的调用接口,不要在你的BO类中调用这几个方法。B8工具生成代码是否可用在CodeSeed为一个数据库表生成代码时,你可以选择包含BO类以及home、remote接口、BO_Client(客户端代理)。所有这些代码演示系统各层之间的调用关系,这些

48、类是否根据业务要求加以调整B9BO类的设计要遵循大粒度(coarse-grained)的原则即尽量将一项业务的所有方法放入同一个BO类中。这是设计EJB(尤其是Stateless Session Bean)的一项原则,它能有效的提高对系统资源的利用。具体到我们的编码实践中,虽然CodeSeed针对每个DMO类生成了一个BO类,但我们要将相关的BO类整合成一个BO类。B10BO类中方法的命名是否反映该方法的业务含义虽然CodeSeed生成的代码中将方法命名为insert()、update()等,还应将它们更名为addBill()、auditBill()等业务名称B11BO类是否生成供客户端调用B

49、S端的代码当设计完BO类后,需调用NC EJB开发工具集生成和部署代码,生成瘦客户端,供客户端调用BS端的代码。B12在BO、DMO类中调用另一个BO对象时是否保证一个事务内的正确实现在BO和DMO类中,如要使用其它BO对象,必须使用getBeanHome()方法获得。假如BO1的一个方法内要使用BO2,那么示例如下: BO2Home home = getBeanHome(“BO2Name”, BO2Home.class); BO2 bo2 = BO2Home.create(); bo2.method1();其中,getBeanHome()方法的第一个参数(“BO2Name”)是一个字符串,代

50、表BO2的JNDI名称。我们技术部的中间件默认的JNDI名称由“包名.remote接口名”构成,例如,对上述BO2(假定它位于nc.bs.mypackage包中),默认的JNDI名称是“nc.bs.mypackage.BO2”。不可直接New一个BO对象的实例,否则中间件将无法控制和确保其事务属性的正确实现B13向数据库插入一条记录时,是否为它获得唯一主键(OID)提供OID的算法由系统管理统一处理,通过在DMO基类的两个接口方法getOID(String pk_corp)和getOIDs(String pk_corp, int amount)提供给业务模块使用。其中,参数pk_corp是此记

51、录所属的公司的主键。如果参数pk_corp为null,则默认为集团公司的数据。B14业务级校验业务级校验方法是否齐全8.8). DMO(数据管理对象):序号测试项测试内容质量保证标准问题属性出错频率DM0继承类每个DMO类是否都继承DataManageObject。DM1数据库的利用效率为了提高数据库的利用效率,是否尽量使用PreparedStatement执行SQL操作,不要使用StatementDM2DMO类中方法的完整性1 通常DMO类中应包含insert()、delete()、update()方法。还可以包括其它的查询方法。2 对一些特殊的继承类,如处理参数设置的DMO类,可能不需要i

52、nsert()和delete()方法。DM3数据库连接在DMO类中,数据库连接必须通过getConnection()方法获得,不允许直接使用JNDI查询DM4数据库资源的获得和释放应在DMO类每个方法的获得Connection、PreparedStatement两种数据库资源,并在方法的结束位置释放数据库资源。DM5库表主键值在DMO类的一个方法中向数据库插入(insert)数据时,是否使用getOID()方法获得一个自动产生的库表主键值。DM7是否尽量使用VO数组如果DMO类中的方法需要返回业务数据,则通常是VO对象或VO对象的数组(或集合)。当客户端需要多个VO对象时,是否尽量使用VO数组

53、的形式返回,以提高数据库和网络效率,不要将多个VO一个一个的查询和返回DM9DMO对象调用另一个BO对象时如果你在DMO对象中需要使用BO对象(通常是提供公共服务的BO),必须使用getBeanHome获得BO对象的home接口。DM11自动生成代码的调整在CodeSeed生成的代码中包含了delete(VO)、insert(VO)、update(VO)、insertArray(VO)、queryAll()等方法。是否根据业务需要增加、删除、调整DMO类中的方法。DM12参数pk_corp的使用在DMO中的insert()等方法中,向数据库插入记录时,要通过getOID(String pk_c

54、orp)或getOIDs (String pk_corp, int amount)为该记录获得一个记录主键(OID),如果参数pk_corp为null,则默认为集团公司。DM13用VO对象写库时数据库表中加一字段时,执行stmt = con.prepareStatement(sql)后,执行stmt.setString(3, invcl.getInvclasscode()语句中的序号是否与数据库表中字段顺序一致(举例附后)DM14条件拚写语句条件拚写语句是否符合业务逻辑DM15DMO类的查询、增加、修改方法查询:执行完查询Sql语句ResultSet rs = stmt.executeQuer

55、y()后,是否对查询vo对象正确地赋值,且赋值属性是否有遗漏增加:执行完插入Sql语句stmt = con.prepareStatement(sql); 是否对stmt正确地赋值,且赋值属性是否有遗漏,然后执行stmt.executeUpdate()更新数据库更新:执行完更新Sql语句stmt = con.prepareStatement(sql); 是否对stmt正确地赋值,且赋值属性是否有遗漏,然后执行stmt.executeUpdate()更新数据库错误码DM13举例,如:数据库表bd_invcl中加一字段avgprice,执行完后sql语句后,PreparedStatement类型的s

56、tmt中执行set语句的顺序要与数据库表中字段顺序一致。否则出错String sql = insert into bd_invcl(pk_invcl, invclassname, invclasscode, endflag, avgprice, invclasslev) values(?, ?, ?, ?, ?, ?);Connection con = null;PreparedStatement stmt = null;try con = getConnection();stmt = con.prepareStatement(sql);/ set PK fields:String newOid = getOID();stmt.setString(1, newOid);/ set non PK fields:if (invcl.getInvclassname() = null) stmt.setNull(2, Types.CHAR);else stmt.setStri

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!