51Testing软件测试论坛

标题: 大家可以相互留下QQ和MSN便于以后大家互相切磋,互相提高 [打印本页]

作者: zshf235    时间: 2005-11-17 17:29
标题: 大家可以相互留下QQ和MSN便于以后大家互相切磋,互相提高
我的QQ:40288916.
MSN:zshf235@hotmmail.com
作者: zshf235    时间: 2005-11-17 17:33
标题: 本人收集了点资料供大家分享
白盒测试指南

(说明:此白盒测试指南主要给白盒测试人员提供一些基本的白盒测试方法和技术,由于涉及的问题广泛,测试内容中的细节不一定准确和完整,还有待于各位的共同参与和不断完善,欢迎多交流!)
1.        目的
本方案主要实施NC产品程序代码的白盒测试。使界面符合设计规范,适用于用户;保证程序创建的类与接口的完整与正确,以及程序模块单独正常运行。保证局部模块功能完备性,运行正确性与稳定性。
2.        测试项
所要测试的类。如:
nc.ui.bd.*
nc.bs.bd.*
nc.vo.bd.*
3.        测试依据
1.        NC产品需求报告;
需求规格说明书、用例描述清单
2.        设计文档;(OOA、OOD、CRC卡)
如:AOM(Analysis Object Model)表示类间的静态关系,是多个相关的用例共用的。
ASD(Analysis Sequence Diagram)是按业务工作的顺序表示每一工作步骤执行时类间的动态关系。一个用例对应一个ASD。
CRC (Collaborators & Responsibilities Card)卡是一个类的完整表述
3.        界面规范
4.        编码规范
5.        开发命名标准
4.        通过的准则
1.界面测试通过的标准:界面的样式、大小、颜色、整体布局的设置;各种标签控件的使用及主题描述以及事件源控件的使用、快捷键使用都应符合《NC系统应用框架需求报告》和《设计文档的相关规范》。
2.程序代码通过的标准:创建的类、接口、方法、属性应与《设计文档》保持一致;程序的各种命名、注释、代码行的格式等应符合《程序开发命名标准》和《编码规范》;程序模块能独立稳定运行。
5.        测试环境配置
1.        测试工具:
2.        软件环境:
Client端:
        操作系统:中文WINNT/2000
开发环境:VA3.5 专业版
待测试的源码包
Server端:
        操作系统:WIN NT4.0
        开发环境:VA3.5 专业版
        通讯环境:   Servlet      
3.        DB Server端:DBMS:SQL SERVER
4.        资源文件
6.        白盒测试总流程

测试流程依据,请参见《代码层次结构规范》。
NC系统中的对象主要分为如下几种:
        界面对象(UIObject)
        数值对象VO(ValueObject)
        业务对象BO(BusinessObject)
        数据管理对象DMO(DataManageObject)

测试流程可按二种方式,其优缺点对照:

                                VO                                      VO
                                          








前者:优点是便于测试者从界面层直观地录入数据,缺点是做回归测试时,录入数据需重复

后者:
原则是从底层测试,底层测试通过了,再依次往上一层测试;否则不需往上层测试
缺点:需给中间层做一测试小程序:根据程序中类的对象构造输入数据及将结果输出到控制台上,(可通过自行设计测试工具来改善,测试工具需求另附)
优点:做回归测试时,不用再构造输入数据,只要再执行一遍小测试程序

7.        测试步骤:
需要列出所测试类的调用关系和关键方法的调用关系(依据为数据流)。
(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节)
作者: zshf235    时间: 2005-11-17 17:36
标题: 接#2
8.        具体实施方法:
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())的行为
作者: zshf235    时间: 2005-11-17 17:37
标题: 接#3
TT24        数据封装性        数据成员是否满足数据封装的要求。
有时强制的类型转换会破坏数据的封装特性。例如:
  class Hiden
  {private:
  int a=1;
  char *p= "hiden";}
  class Visible
  {public:
  int b=2;
  char *s= "visible";}
  …..
  …..
  Hiden pp;
  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        Float
double        不要对浮点值用做计数循环,应用整型值。        正确性        错误       
J9        Float
double        不要使用类型float或者double的变量执行精确的金融计算。浮点数的不精确会导致引起不正确金融计算的错误。可定义若干类来完成不同的金融计算。        正确性        错误       
J10        switch        switch语句的末尾如果没有defaul语句将会不利于处理异常。        健壮性        缺陷       
J11        switch        是否在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        Null转化        在取得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("-");
                        //只输入数字型字符
                        setTextType("TextDbl");               
                        setDelStr("-.");
                       
D14        对齐方式        整数和浮点数默认右对齐,其它左对齐,可以改变                       
D15        左边字符锁定的设置        设置左边字符锁定
                   (1)setFixText(String)--设置串并锁定和字符串相同的长度
                   (2)setFixText(String,int)--设置串并锁定参数给定的长度
                   (3)setFixTextLen(int)--锁定参数给定的长度
                   (4)setText(String)--设置串并取消锁定
                   任何设置都会修改以前设定的锁定长度                       


8.4).        SQL语句规范:(详见数据库处理规范)
序号        测试项        测试内容        质量保证标准        问题属性        出错频率
S1        书写规范        语句全部用小写                       
S2        SQL语法                禁止使用“select  *  from ”语法。
        禁止使用“insert into table_name values(?,?,……)”语法,
        统一使用“insert into table_name (col1,col2,……) values(?,?,…...)”。                       
S3        SQL语法        如果在语句中有not in(in)操作,是否考虑用not exists(exists)来重写。                       
S4        类型转换        避免显式或隐含的类型转换。例如在where子句中numeric 型和int型的列的比较                       
S5                当SQL语句含有运算符时,运算符需与其他字符串用空格区分。否则容易导致以下类似问题。在语句select a–b from table 中, a,b均为变量。拼写该语句时,如果a=6, b= -3,则语句变为select 6--3 from table。--变为Sql的注释,语句报错                       
S6        查询优化        为提高索引的效率,查询路径优化(尤其是要尽力减少查询嵌套)。                       
S7        视图        使用静态视图,不允许动态创建视图,索引,存储过程等数据库对象                       
S8        Null        不能将Null 与  空串“”视为相同                       
S9        多表连接        1.SQL语句包含多表连接时,是否加上表的别名。
3.        子查询问题。对于能用连接方式或者视图方式实现的功能,不要用子查询。
例如:select name from customer where customer_id in ( select customer_id from order where money>1000)。应该用如下语句代替:select name from customer inner join order on customer.customer_id=order.customer_id where order.money>100。
3. 多表关联查询时,写法必须遵循以下原则,这样做有利于建立索引,提高查询效率。格式如下select sum(table1.je) from table1 table1,  table2 table2,  table3  table3 where (table1的等值条件(=)) and (table1的非等值条件) and (table2与table1的关联条件) and (table2的等值条件) and (table2的非等值条件) and (table3与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返回的错误号统一为以Sql Server7.0为准,错误信息仍以不同JDBC返回的错误信息为主




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2