白盒测试流程Word格式文档下载.docx
《白盒测试流程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《白盒测试流程Word格式文档下载.docx(85页珍藏版)》请在冰豆网上搜索。
![白盒测试流程Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/3/007cbb2d-7e08-48f2-a5e0-4434c1d0013f/007cbb2d-7e08-48f2-a5e0-4434c1d0013f1.gif)
SQLSERVER
4.资源文件
白盒测试总流程
测试流程依据,请参见《代码层次结构规范》。
NC系统中的对象主要分为如下几种:
✧界面对象(UIObject)
✧数值对象VO(ValueObject)
✧业务对象BO(BusinessObject)
✧数据管理对象DMO(DataManageObject)
测试流程可按二种方式,其优缺点对照:
BO
DMO
UI
VOVO
前者:
优点是便于测试者从界面层直观地录入数据,缺点是做回归测试时,录入数据需重复
后者:
原则是从底层测试,底层测试通过了,再依次往上一层测试;
否则不需往上层测试
缺点:
需给中间层做一测试小程序:
根据程序中类的对象构造输入数据及将结果输出到控制台上,(可通过自行设计测试工具来改善,测试工具需求另附)
优点:
做回归测试时,不用再构造输入数据,只要再执行一遍小测试程序
测试步骤:
需要列出所测试类的调用关系和关键方法的调用关系(依据为数据流)。
(1)类关系图。
(2)方法的功能调用关系图:
只需要列出一些调用关系较复杂的方法。
7.1.配置好测试环境;
7.2.编写测试用例;
另附
7.3.静态测试,走查代码;
代码走查使用测试用例启发检测错误,沿程序逻辑走一遍,检测程序结构和实现上是否有问题
7.4.动态测试
●界面初始化状态测试;
●界面控件功能测试;
(正反用例);
●业务功能测试(正反用例);
●数据流关联测试(涉及多表的增、删、改),并结合数据库表的字段、外键、字段类型、精度、小数位数、非空、默认值、备注、数据对象等。
●数据传递和接收一致,数据计算或处理后状态正确;
●组合模块整体运行稳定,不出现死机;
7.5.确定问题属性:
分为四类:
错误、缺陷、失效、故障
错误是指计算值、观测值、测量值之间,或条件与真值之间,不符合规定的或理论上的正确值或条件
缺陷是指与期望值或特征值的偏差
故障是指功能部件不能执行所要求的功能。
故障可能由错误、缺陷或失效引起。
失效是指功能部件执行其功能的能力丧失,系统或系统部件丧失了在规定限度内执行所要求功能的能力
7.6.确定问题类别:
问题类别分为以下几大类:
1.各层公用问题
2.JAVA语言规范
3.数据类型
4.SQL语句规范
5界面UI
6.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结尾,如:
GeneralLedgerPanel
TT16
接口
接口名的开头加上字母‘I’前缀
从第二个字母起,用首字母大写的英文单词描述
TT17
方法
1.是否正确定义了此方法(包括修辞词、返回类型、参数、参数类型)
2.注释是否清楚
3.命名是否正确:
●方法函数名的第一个单词小写,后面的单词第一个字母大写;
●第一个单词必须是动词,使函数的意义清晰明了;
●存取对象的属性使用setXXX()和getXXX()函数形式
●访问布尔类型的属性可以使用isXXX()函数
TT18
类属性
Ø
所有类属性全部以m_开头,同其它变量区分开。
集合类型的域,如数组、向量,必须使用复数形式来指出它们多值特性。
所有的域都是私有的,用并且仅用getXXX和setXXX等的存取函数去访问域,。
存取函数的可见性尽量为protected属性的,getter函数可以是public属性的
存取函数的命名规则是:
getter函数=get+域名(非布尔类型域)
is+域名(布尔类型域)
setter函数=set+域名
TT19
常量
常量的命名全部使用大写。
用下划线来分隔单词。
MAX_VALUE
START_DATE
MINIMUM_BALANCE
TT20
类所实现的功能
是否实现了要求的所有功能
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
除数
是否包含有除零错误的可能?
J4
Get方法
当对一个不知是否为空的对象取其属性值会引起空指针异常。
如果空指针异常没有被接收程序将终止。
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
J7
Float
double
不要用等于或不等于来比较浮点值,而应该判断其差别是否小于某一指定小的值。
89.6实际可能为89.59999232458
J8
不要对浮点值用做计数循环,应用整型值。
J9
不要使用类型float或者double的变量执行精确的金融计算。
浮点数的不精确会导致引起不正确金融计算的错误。
可定义若干类来完成不同的金融计算。
J10
switch
switch语句的末尾如果没有defaul语句将会不利于处理异常。
J11
是否在switch结构中的每一个case语句体结束时都有break语句?
J12
if语句
在if语句体右括号后紧跟一个分号常常是一个错误,会使if语句成为顺序语句。
J13
循环语句
通过循环语句对一Vector型变量赋值时,其Vector变量的实例化语句是否被错误地包含在循环体内?
J14
注意循环的条件中是否有差1的现象?
J15
代码是否有无穷循环的可能?
(循环条件永远为真)
可预测性
J16
数值范围
是否存在溢出错误
J17
This
Super
This和Super的用法是否正确
J18
构造子
是否缺少构造子方法
J19
方法声明、参数、
方法声明错误
参数错误
返回值错误
J20
计算
计算错误
J21
比较
比较错误
J22
控制流
控制流错误
J23
类的修饰符
修饰符是否符合以下原则:
Public用于对所有的类可见,
Private用于对本类可见
Protected不仅用于对子类可见,也用于对同一个包的其它所有类可见
8.3).数据类型:
D1
Null转化
在设置值对象VO时,在VO内部是否将空串"
"
将转化null,数值型数据(整数、浮点数)null转为0。
*
D2
在取得VO元素放到界面时(如放到UITextField)是否根据需要将null转化为"
或"
0"
或”0.0”。
D4
控件数据类型的转换
编辑控件数据类型是否与表中对应字段数据类型一致
1.UITextField文本域数据类型在nc.ui.pub.beans.textfield包的UITextType接口中定义了TextStr、TextInt、TextDbl、TextDate和TextDateTime等5类,但布尔型使用UICheckBox或UIRadioButton控件,故没有定义布尔型。
D5
UFDouble的使用
去掉原UFCurrency类型,重新封装UFDouble,所有的数值型及运算是否采用UFDouble。
D6
UFDateTime的使用
去掉原UFTime类型,重新封装UFDateTime。
D7
某些数据封装类型的禁用
禁止使用的数据封装类型,如Boolean、Short、Long、Float、Double、Date。
D9
双精度型控件的范围控制
对双精度型控件是否控制最大长度范围:
对双精度型,数据库表中字段设为Decimal类型,pricision为20位,Scale为8位
则需加入语句:
ivjtxtShipUnitNum.setMaxLength(20);
ivjtxtShipUnitNum.setNumPoint(8);
D11
最大长度的设置
设置最大长度MaxLength(默认20位、对TextDate与TextDateTime无效),
D12
小数位数的设置
设置小数位数NumPoint(默认4位、只对TextDbl有效)
D13
禁止输入字符的设置
设置禁止输入的字符DelStr,整数和浮点数也可设置禁止字符串,如:
//禁止输入负数
setTextType("
TextStr"
);
setDelStr("
-"
//只输入数字型字符
TextDbl"
-."
D14
对齐方式
整数和浮点数默认右对齐,其它左对齐,可以改变
D15
左边字符锁定的设置
设置左边字符锁定
(1)setFixText(String)--设置串并锁定和字符串相同的长度
(2)setFixText(String,int)--设置串并锁定参数给定的长度
(3)setFixTextLen(int)--锁定参数给定的长度
(4)setText(String)--设置串并取消锁定
任何设置都会修改以前设定的锁定长度
8.4).SQL语句规范:
(详见数据库处理规范)
S1
书写规范
语句全部用小写
S2
SQL语法
●禁止使用“select*from”语法。
●禁止使用“insertintotable_namevalues(?
?
……)”语法,
●统一使用“insertintotable_name(col1,col2,……)values(?
…...)”。
S3
如果在语句中有notin(in)操作,是否考虑用notexists(exists)来重写。
S4
类型转换
避免显式或隐含的类型转换。
例如在where子句中numeric型和int型的列的比较
S5
当SQL语句含有运算符时,运算符需与其他字符串用空格区分。
否则容易导致以下类似问题。
在语句selecta–bfromtable中,a,b均为变量。
拼写该语句时,如果a=6,b=-3,则语句变为select6--3fromtable。
--变为Sql的注释,语句报错
S6
查询优化
为提高索引的效率,查询路径优化(尤其是要尽力减少查询嵌套)。
S7
视图
使用静态视图,不允许动态创建视图,索引,存储过程等数据库对象
S8
Null
不能将Null与空串“”视为相同
S9
多表连接
1.SQL语句包含多表连接时,是否加上表的别名。
3.子查询问题。
对于能用连接方式或者视图方式实现的功能,不要用子查询。
selectnamefromcustomerwherecustomer_idin(selectcustomer_idfromorderwheremoney>
1000)。
应该用如下语句代替:
selectnamefromcustomerinnerjoinorderoncustomer.customer_id=order.customer_idwhereorder.money>
100。
3.多表关联查询时,写法必须遵循以下原则,这样做有利于建立索引,提高查询效率。
格式如下selectsum(table1.je)fromtable1table1,table2table2,table3table3where(table1的等值条件(=))and(table1的非等值条件)and(table2与table1的关联条件)and(table2的等值条件)and(table2的非等值条件)and(table3与table2的关联条件)and(table3的等值条件)and(table3的非等值条件)。
S10
复杂SQL语句
对复杂SQL语句必须单独测试:
如多表查询拚写语句是否符合业务要求
S11
多数据库适配
1.Sql语句转换类。
调用方法:
SqlTranslatortrans=newSqlTranslator();
destSql=trans.getSql(sourceSql,databaseType)。
2.提供SQLException信息转换。
同一个SQL在不同数据库操作,JDBC返回的错误号以及错误信息不同。
SQLException信息转换器将不同JDBC返回的错误号统一为以SqlServer7.0为准,错误信息仍以不同JDBC返回的错误信息为主
3.SQL语法限制
(1)字符串连接必须用“||”符号。
selectf1||f2fromtest:
而不是:
selectf1+f2fromtest;
如果用“+”号,则Oracle不支持。
(2)左连接的写法必须带“outer”关键字。
selectf1fromt1leftoutert2ont1.f1=t2.f1;
selectf1fromt1leftt2ont1.f1=t2.f1。
(3)参与左连接的列不能为常量例如,不允许如下语句:
select*fromt1leftouterjoint2ont1.f1='
A'
。
(4)在Casewhen语句中只能出现=、>
=、<
=以及isnull运算符,不能出现<
、>
、<
>
、!
=、以及isnotnull运算符。
否则在Oracle的decode函数无法表达。
(5)在Casewhen语句中参与比较的列只能有一个。
例如不能使用如下
case……when语句:
casewhenf1>
1then…...whenf2>
1then……end。
(6)在对char类型比较时,要对列加上rtrim()函数,否则在Oracle中不会得到正确结果。
(7)在Delete、Update、Insert、Select语句中char类型的数值引用使用单引,
例如语句:
Insertintotvlaues(“book”,5)在SQLServer中可以使用,而在Oracle、DB2中不支持。
应为:
Insertintotvlaues(‘book’,5)。
(8)通配符不能使用‘[a-c]%’这种形式,应写成如:
select*fromtable_namewherecol1like‘[a]%’ORcol1like‘[b]%’ORcol1like‘[c]%’。
(9)不能通过来topn/percent限制查询结果集的记录数,oracle不支持
(10)Union、orderby、Groupby、having、between…and、in、exists、isnull用法一致