1. 测试目的... 2
2. 测试内容... 2
3. 测试流程... 2
3.1 单元测试... 2
3.2 静态测试... 2
3.3 动态测试... 3
3.4 填写测试报告... 3
4. 附录一:单元测试用例... 4
5. 附录二:编码测试规范... 8
6. 附录三:功能测试规范... 14
7. 附录四:测试报告... 18
1. 测试目的
白盒测试技术 (White Box Testing)也称结构测试或逻辑驱动测试。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
白盒测试与黑和测试不同,白盒测试是深入到代码一级的测试,使用这种技术发现问题最早,效果也是最好的。该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码阶段,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。
2. 测试范围与主要内容
- 测试对象:类测试、接口测试、界面测试、功能测试
- 测试依据:《功能需求计划书》、《设计文档》、《编码规范》
- 测试标准:
- 单元测试:JUnit测试通过;
- 代码测试:创建的类、接口、方法、属性与《设计文档》保持一致;
程序的各种命名、注释、代码行的格式等符合《编码规范》;
- 代码走查:使用测试用例启发检测错误,沿程序逻辑走一遍;
检查程序结构和实现上没有问题;
- 界面测试:界面的样式、大小、颜色、整体布局的设置都符合《功能需求计划书》;
- 功能测试:使用正反用例,程序模块能独立稳定运行;
- 测试环境:
a. 测试工具:JUnit 4.0
b. 软件环境:
开发环境:MyEclipse 6.0 + J2EE 1.4
发布环境:Tomcat 6.0
待测试的源码包
3. 测试流程
3.1 静态测试
- 代码测试:创建的类、接口、方法、属性应与《设计文档》保持一致;
程序的各种命名、注释、代码行的格式等应符合《编码规范》;
《编码规范》见附录一;
- 代码走查:使用测试用例启发检测错误,沿程序逻辑走一遍;
检测程序结构和实现上是否有问题;
- 确定问题类别:分为三类:JAVA语言规范、数据类型规范、SQL语句规范
- 确定问题属性:分为四类:错误、缺陷、故障、失效
- 错误是指计算值、观测值、测量值之间,或条件与真值之间,不符合规定的或理论上的正确值或条件;
- 缺陷是指与期望值或特征值的偏差;
- 故障是指功能部件不能执行所要求的功能,故障可能由错误、缺陷或失效引起;
- 失效是指功能部件执行其功能的能力丧失,系统或系统部件丧失了在规定限度内执行所要求功能的能力;
- 单元测试:见附录二
3.2 动态测试
单元测试是编写高质量代码的前提,通过编写有效的单元测试即可以保证代码的质量又可以提高开发速度,因为大多数问题都可以通过单元测试发现并解决而不需要部署到应用服务器。
这一阶段测试以软件开发人员为主,在 JAVA 平台使用 JUnit工具进行测试, JUnit 测试工具是类一级的测试工具对每一个类和该类的方法进行测试。
a. 编写单元测试用例:
b. 使用JUnit工具测试
- 界面测试:界面的样式、大小、颜色、整体布局的设置都符合《功能需求计划书》,见附录三
- 功能测试:见附录三
- 界面初始化状态测试;
- 界面控件功能测试;(正反用例);
- 业务功能测试(正反用例);
- 数据流关联测试(涉及多表的增、删、改),并结合数据库表的字段、外键、字段类型、精度、小数位数、非空、默认值、备注、数据对象等。
- 数据传递和接收一致,数据计算或处理后状态正确;
- 组合模块整体运行稳定,不出现死机;
功能测试分为两个主要手段:非正常用例手段:此阶段主要是采用不合法的输入数据和非正常的操作手段。测试系统的错误控制与处理能力。保证系统不死机,能正常稳定运行。正常用例手段:此阶段主要采用合法的业务数据,正常的操作手段。保证UI符合设计要求和操作习惯,能正常稳定运行,能正确处理业务数据。
3.3 填写测试报告
测试记录需详细填写具体实施方法中的相关列表,上交的测试报告只需填写未通过的项。测试报告见附录四。
4. 附录一:编码规范
JAVA语言规范
|
序号 |
测试项 |
测试内容 |
质量保证标准 |
问题属性 |
出错频率 |
|
T1 |
代码与 设计对照 |
将功能需求计划书与编码对照,看是否完全地实现了所有的设计文档中规定的内容? |
完备性 |
错误 |
|
|
T2 |
代码与 设计对照 |
将功能需求计划书与编码对照,看是否创建了所需的数据库或其他初始化数据文件? |
完备性 |
错误 |
|
|
T3 |
参数 返回值 |
方法中被传递参数的类型、个数、顺序及返回值是否正确? |
正确性 |
错误 |
|
|
T5 |
参数的传递 |
当方法需要调用其它方法时,调用的参数是否正确? |
正确性 |
错误 |
|
|
T6 |
命名 |
是否按《命名规范》进行了类、方法、变量、属性的命名? |
正确性 |
错误 |
|
|
T7 |
公式 |
代码中的公式是否使用了设计文档中的相应数学公式。 |
正确性 |
错误 |
|
|
T8 |
注释 |
注释是否使用简洁明了的语言对每一个方法都进行了充分必要的描述?是否对复杂的代码进行了注释?当程序的运行是受某些特殊因素限制时,是否做了限制注释?是否列出限制模块运行特性的全部特殊因素? |
易理解性 |
缺陷 |
|
|
T9 |
冗余语句和变量 |
是否存在永远执行不到的语句和变量,而降低了程序的可理解性? |
易理解性 |
缺陷 |
|
|
T10 |
程序是否冗余 |
对于程序中的大量重复内容,是否使用了专门的类来实现? |
可验证性 |
缺陷 |
|
|
T11 |
代码整体规范 |
是否自始至终使用了《程序员开发手册》和《编码规范》中要求的格式、调用约定、结构等? |
一致性 |
缺陷 |
|
|
T12 |
代码与书写注释 |
在一个函数内代码的长度不允许超过100行。建议如果一个函数的代码长度超过一个屏幕,那么或许这个函数太长了。 使用统一的格式化代码。将‘{’放在所有者的后面,并且在下一行代码前加入TAB键缩进;(TAB键比用若干个空格更容易控制使用统一的缩进距离) 类的注释;接口的注释;函数的注释;类属性的注释;局部变量的注释; |
易理解性 |
缺陷 |
|
|
T13 |
包 |
命名是否符合程序包命名规范 |
易理解性 |
缺陷 |
|
|
T14 |
类 |
1.创建的属性(字段)是否完整,类型与命名是否规范,注释是否清楚合理。 2.创建的方法是否完整;命名是否规范;修辞是否正确;参数,参数类型,返回类型是否正确。 3.调用的方法和传递的参数是否正确。 1.参数传递、返回值是否正确 2.特殊校验、处理是否有注释 |
易理解性 |
缺陷 |
|
|
T15 |
类命名 |
第一个字母大写的英文正常语序 每个功能点的主程序(通常继承系统管理框架)统一采用ClientUI类名称。 |
易理解性 |
缺陷 |
|
|
T16 |
接口 |
接口名的开头加上字母‘I’前缀 从第二个字母起,用首字母大写的英文单词描述 |
易理解性 |
缺陷 |
|
|
T17 |
方法 |
1.是否正确定义了此方法(包括修辞词、返回类型、参数、参数类型) 2.注释是否清楚 3.命名是否正确: 方法函数名的第一个单词小写,后面的单词第一个字母大写; 第一个单词必须是动词,使函数的意义清晰明了; 存取对象的属性使用setXXX()和getXXX()函数形式 访问布尔类型的属性可以使用isXXX()函数 |
易理解性 |
缺陷 |
|
|
T18 |
类属性 |
所有类属性全部以m_开头,同其它变量区分开。 集合类型的域,如数组、向量,必须使用复数形式来指出它们多值特性。 所有的域都是私有的,用并且仅用getXXX和setXXX等的存取函数去访问域,。 存取函数的可见性尽量为protected属性的,getter函数可以是public属性的 存取函数的命名规则是: getter函数 = get + 域名 (非布尔类型域) is + 域名 (布尔类型域) setter函数 = set + 域名 |
易理解性 |
缺陷 |
|
|
T19 |
常量 |
常量的命名全部使用大写。用下划线来分隔单词。例:MAX_VALUE |
易理解性 |
缺陷 |
|
|
T20 |
类所实现的功能 |
是否实现了要求的所有功能 |
易理解性 |
缺陷 |
|
|
T21 |
类中的校验方法 |
1.界面级的校验是否齐全 2.业务级的校验是否齐全 |
完备性 |
错误 |
|
|
T22 |
继承性 封装性 多态性 |
面向对象程序是否体现继承、封装和多态的特性? |
易理解性 |
缺陷 |
|
|
T23 |
面向对象特性 |
面向对象程序中,编写类的方法时,是否同时考虑基类方法(Base::Function())的行为和继承类方法(Derived::Function())的行为 |
易理解性 |
缺陷 |
|
|
T24 |
数据封装性 |
数据成员是否满足数据封装的要求。 有时强制的类型转换会破坏数据的封装特性。 |
易理解性 |
缺陷 |
|
|
T25 |
类中成员方法 |
以OOD为依据,类中成员方法是否实现了设计中所要求的功能;如通过OOD仍不清楚,则还应依据OOA、及需求报告说明书 |
易理解性 |
缺陷 |
|
|
J1 |
下标 |
是否有下标变量越界错误? |
健壮性 |
错误 |
|
|
J2 |
除数 |
是否包含有除零错误的可能? |
健壮性 |
错误 |
|
|
J3 |
Get方法 |
当对一个不知是否为空的对象取其属性值会引起空指针异常。如果空指针异常没有被接收程序将终止。例如:BusinessData1.getBusinessDate2.getOid()当BusinessData1.getBusinessDate2为null时, BusinessData1.getBusinessDate2.getOid()将发生异常 |
健壮性 |
错误 |
|
|
J4 |
字符串 |
在字符串比较和将字符串写入数据表前应Trim()掉它的前后空格。 |
健壮性 |
错误 |
|
|
J5 |
字符串连结符"+" |
将字符串连结操作中的+操作符同加法运算中的+操作混淆将导致奇怪的结果。例如:y为int类型,y的值为5,g.drawString("y+2="+y+2,30,30);将显示y+2=52 |
正确性 |
错误 |
|
|
J6 |
Float double |
不要用等于或不等于来比较浮点值,而应该判断其差别是否小于某一指定小的值。例如:89.6 实际可能为89.59999232458 |
正确性 |
错误 |
|
|
J7 |
Float double |
不要对浮点值用做计数循环,应用整型值。 |
正确性 |
错误 |
|
|
J8 |
Float double |
不要使用类型float或者double的变量执行精确的计算。浮点数的不精确会导致引起不正确计算的错误。可定义若干类来完成不同的计算。 |
正确性 |
错误 |
|
|
J9 |
switch |
switch语句的末尾如果没有default语句将会不利于处理异常。 |
健壮性 |
缺陷 |
|
|
J10 |
switch |
是否在switch结构中的每一个case语句体结束时都有break语句? |
正确性 |
错误 |
|
|
J11 |
if语句 |
在if语句体右括号后紧跟一个分号常常是一个错误,会使if语句成为顺序语句。 |
正确性 |
错误 |
|
|
J12 |
循环语句 |
通过循环语句对一Vector型变量赋值时,其Vector变量的实例化语句是否被错误地包含在循环体内? |
正确性 |
错误 |
|
|
J13 |
循环语句 |
注意循环的条件中是否有差1的现象? |
正确性 |
错误 |
|
|
J14 |
循环语句 |
代码是否有无穷循环的可能?(循环条件永远为真) |
可预测性 |
错误 |
|
|
J15 |
数值范围 |
是否存在溢出错误 |
可预测性 |
错误 |
|
|
J16 |
This Super |
This和Super的用法是否正确 |
可预测性 |
错误 |
|
|
J17 |
构造子 |
是否缺少构造子方法 |
可预测性 |
错误 |
|
|
J18 |
方法声明、参数、 返回值 |
方法声明错误 参数错误 返回值错误 |
可预测性 |
错误 |
|
|
J19 |
计算 |
计算错误 |
可预测性 |
错误 |
|
|
J20 |
比较 |
比较错误 |
可预测性 |
错误 |
|
|
J21 |
控制流 |
控制流错误 |
可预测性 |
错误 |
|
|
J22 |
类的修饰符 |
修饰符是否符合以下原则: Public用于对所有的类可见, Private用于对本类可见 Protected不仅用于对子类可见,也用于对同一个包的其它所有类可见 |
可预测性 |
错误 |
|
数据类型规范
|
序号 |
测试项 |
测试内容 |
质量保证标准 |
问题属性 |
出错频率 |
|
D1 |
Null转化 |
在设置值对象VO时,在VO内部是否将空串""将转化null,数值型数据(整数、浮点数)null转为0。* |
|
|
|
|
D2 |
Null转化 |
在取得VO元素放到界面时(如放到UITextField)是否根据需要将null转化为""或"0"或”0.0”。 |
|
|
|
|
D3 |
控件数据类型的转换 |
编辑控件数据类型是否与表中对应字段数据类型一致 1.UITextField文本域数据类型在nc.ui.pub.beans.textfield包的UITextType接口中定义了TextStr、TextInt、TextDbl、TextDate和TextDateTime等5类,但布尔型使用UICheckBox或UIRadioButton控件,故没有定义布尔型。 |
|
|
|
|
D4 |
UFDouble的使用 |
去掉原UFCurrency类型,重新封装UFDouble,所有的数值型及运算是否采用UFDouble。 |
|
|
|
|
D5 |
UFDateTime的使用 |
去掉原UFTime类型,重新封装UFDateTime。 |
|
|
|
|
D6 |
某些数据封装类型的禁用 |
禁止使用的数据封装类型,如Boolean、Short、Long、Float、Double、Date。 |
|
|
|
|
D7 |
双精度型控件的范围控制 |
对双精度型控件是否控制最大长度范围:对双精度型,数据库表中字段设为Decimal类型,pricision为20位,Scale为8位 则需加入语句: ivjtxtShipUnitNum.setMaxLength(20); ivjtxtShipUnitNum.setNumPoint(8); |
|
|
|
|
D8 |
最大长度的设置 |
设置最大长度MaxLength(默认20位、对TextDate与TextDateTime无效) |
|
|
|
|
D9 |
小数位数的设置 |
设置小数位数NumPoint(默认4位、只对TextDbl有效) |
|
|
|
|
D10 |
禁止输入字符的设置 |
设置禁止输入的字符DelStr,整数和浮点数也可设置禁止字符串,如: //禁止输入负数 setTextType("TextStr"); setDelStr("-"); //只输入数字型字符 setTextType("TextDbl"); setDelStr("-."); |
|
|
|
|
D11 |
对齐方式 |
整数和浮点数默认右对齐,其它左对齐,可以改变 |
|
|
|
|
D12 |
左边字符锁定的设置 |
设置左边字符锁定 (1)setFixText(String)--设置串并锁定和字符串相同的长度 (2)setFixText(String,int)--设置串并锁定参数给定的长度 (3)setFixTextLen(int)--锁定参数给定的长度 (4)setText(String)--设置串并取消锁定 任何设置都会修改以前设定的锁定长度 |
|
|
|
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语法 |
当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语句包含多表连接时,是否加上表的别名。
例如: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返回的错误信息为主 |
|
|
|
|
S11 |
多数据库适配 |
SQL语法限制 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.参与左连接的列不能为常量例如,不允许如下语句: select * from t1 left outer join t2 on t1.f1='A'。 4.在Case when语句中只能出现 =、>=、<= 以及is null运算符,不能出现 <、>、 <>、!=、以及is not null运算符。 否则在Oracle的decode函数无法表达。 5.在Case when语句中参与比较的列只能有一个。例如不能使用如下 case……when语句:case when f1 > 1 then …...when f2 > 1 then ……end。 6.在对char类型比较时,要对列加上rtrim()函数,否则在Oracle中不会得到正确结果。 7.在Delete、Update、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 by、Group by、having、between…and、in、exists、is null 用法一致 |
|
|
|
|
S12 |
函数 |
不允许动态创建函数。 |
|
|
|
5. 附录二:单元测试用例
对数据库表的增、删、改、查操作进行测试(MySql数据库):
|
字段 |
类型 |
描述 |
|
id |
int |
主键,自增类型 |
|
url |
varchar |
网站地址,唯一不能重复 |
|
|
varchar |
Email地址 |
|
name |
varchar |
名称 |
接下来编写DAO及其实现类:
DAO接口:
/**
* @author tao.youzt
*/
public interface BizUrlDAO {
public Object insert(BizUrlDO bizUrlDO);
public int delete(String url);
public BizUrlDO getByUrl(String url);
}
DAO实现类,该类继承一个支持类,封装了对数据库的操作。
/**
* @author tao.youzt
*/
public class BizUrlIbatisImpl extends GodzillaDaoSupport implements BizUrlDAO {
private static final String GET_BY_URL = "SELECT-BIZ-URL";
private static final String DELETE = "DELETE-BIZ-URL";
private static final String INSERT = "INSERT-BIZ-URL";
public int delete(String url) {
return this.delete(DELETE, url);
}
public BizUrlDO getByUrl(String url) {
return this.queryForObject(GET_BY_URL, url, BizUrlDO.class);
}
public Object insert(BizUrlDO bizUrlDO) {
return this.insert(INSERT, bizUrlDO);
}
}
DO领域对象
/**
* @author tao.youzt
*/
public class BizUrlDO {
private int id;
private String url;
private String email;
private String name;
// getter and setter
}
测试用例使用Spring作为底层框架,因此这里需要编写Spring配置文件对DAO进行组装。
Godzilla-dao.xml
Godzilla-db.xml
DAO及其配置文件都已经准备完毕,我们接下来编写测试用例。Spring为单元测试提供了很多有用的支持类,我们在这里使用的是:
|
org.springframework.test.AbstractDependencyInjectionSpringContextTests |
该类提供了POJO属性自动注入的能力,只要为为你的属性字段提供一个Set方法即可。下面我们来看完整的测试用例:
/**
* @author tao.youzt
*/
public class TestBizUrlDAO extends AbstractDependencyInjectionSpringContextTests {
private BizUrlDAO bizUrlDAO;
@Override
protected String[] getConfigLocations() {
return new String[]{"godzilla-dao.xml","godzilla-db.xml"};
}
public void testInsert(){
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
public void testDuplicateInsert(){
bizUrlDAO.insert(generateDO());
try{
bizUrlDAO.insert(generateDO());
assertFalse("Must throw an exception!",true);
}catch(Exception e){
assertTrue(true);
}
}
public void testDelete(){
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
bizUrlDAO.delete("www.easyjf.com");
assertNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
private BizUrlSynchronizeDO generateDO() {
BizUrlDO bizUrlDO = new BizUrlDO();
bizUrlDO.setUrl("www.easyjf.com");
bizUrlDO.setName("EasyJWeb");
bizUrlDO.setEmail("webmaster@easyjf.com");
return bizUrlDO;
}
public void setBizUrlDAO(BizUrlSynchronzieDAO bizUrlDAO) {
this.bizUrlDAO = bizUrlDAO;
}
}
getConfigLocations()方法为AbstractDependencyInjectionSpringContextTests 提供配置,Spring会根据该配置文件自动注入bizUrlDAO属性。testInsert()方法用于测试插入新数据,注意这里有个问题,如果数据库中已经存在该URL的记录,则应用会报错,所以这里还要进行数据清除准备处理,我们称之为“测试环境准备”,以后会用到该名词;testDuplicateInsert()方法用于测试插入重复数据的情况,该方法同样存在上面的问题;testDelete()方法用于测试删除数据的情况,这里尽管准备了数据,但仍没有考虑数据库中已经有记录的情况。
6. 附录三:界面测试规范
界面测试分为两个主要手段:非正常用例手段:此阶段主要是采用不合法的输入数据和非正常的操作手段。测试系统的错误控制与处理能力。保证系统不死机,能正常稳定运行。正常用例手段:此阶段主要采用合法的业务数据,正常的操作手段。保证UI符合设计要求和操作习惯,能正常稳定运行,能正确处理业务数据。
用户界面测试的检查
|
检查项 |
测试人员的类别及其评价 |
|
窗口切换、移动、改变大小时正常吗? |
|
|
各种界面元素的文字正确吗?(如标题、提示等) |
|
|
各种界面元素的状态正确吗?(如有效、无效、选中等状态) |
|
|
各种界面元素支持键盘操作吗? |
|
|
各种界面元素支持鼠标操作吗? |
|
|
对话框中的缺省焦点正确吗? |
|
|
数据项能正确回显吗? |
|
|
对于常用的功能,用户能否不必阅读手册就能使用? |
|
|
对于常用的功能,用户能否不必阅读手册就能使用? |
|
|
执行有风险的操作时,有“确认”、“放弃”等提示吗? |
|
|
操作顺序合理吗? |
|
|
有联机帮助吗? |
|
|
各种界面元素的布局合理吗?美观吗? |
|
|
各种界面元素的颜色协调吗? |
|
|
各种界面元素的形状美观吗? |
|
|
字体美观吗? |
|
|
图标直观吗? |
|
|
窗体大小是否合适,控件布局是否合理 |
|
|
移动窗体.快速或慢速移动窗体,背景及窗体本身刷新是否正确 |
|
|
缩放窗体,窗体上的控件是否随窗体的大小变化而变化 |
|
|
显示分辨率.在不同的分辨率的情况下测试程序的显示是否正常 |
|
|
进行测试时图标执行操作是否有效,是否与菜单栏中图标显示一致 |
|
|
错误信息内容是否正确,无错别字,且明确 |
|
|
选择菜单是否可以正常工作,并与实际执行内容一致 |
|
|
是否有错别字 |
|
|
快捷键是否重复 |
|
|
不同级别权限的用户可以看到不同级别的菜单并使用不同级别的功能 |
|
|
是否显示了相关版权和产品信息 |
|
WEB页面测试
|
检查项 |
测试人员的类别及其评价 |
|
页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确 |
|
|
相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确 |
|
|
检查按钮的功能是否正确:如新建、编辑、删除、关闭、返回、保存、导入等功能是否正确 |
|
|
字符串长度检查:输入超出需求所说明的字符串长度的内容,看系统是否检查字符串长度 |
|
|
字符类型检查:在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型 |
|
|
标点符号检查:输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确 |
|
|
特殊字符检查:输入特殊符号,如@、#、$、%、!等,看系统处理是否正确 |
|
|
中文字符处理:在可以输入中、英文的系统输入中文,看会否出现乱码或出错 |
|
|
检查信息的完整性:在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致 |
|
|
信息重复:在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理 |
|
|
检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理 |
|
|
检查添加和修改是否一致:检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型 |
|
|
检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错 |
|
|
重复提交表单:一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统来说,可以通过浏览器返回键或者系统提供的返回功能 |
|
|
检查多次使用返回键的情况:在有返回键的地方,返回到原来页面,重复多次,看会否出错 |
|
|
搜索检查:有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确 |
|
|
输入信息位置:注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方 |
|
|
上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。 |
|
|
必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项 |
|
|
快捷键检查:是否支持常用快捷键,如Ctrl+C、Ctrl+V、Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制 |
|
|
回车键检查:在输入结束后直接按回车键,看系统处理如何,会否报错 |
|
|
刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错 |
|
|
回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。 |
|
|
直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要 |
|
|
空格检查:在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入 |
|
|
输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等 |
|
|
密码检查:一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128的Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符 |
|
|
用户检查:任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户 |
|
|
系统数据检查:这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同。对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据 |
|
|
系统可恢复性检查:以各种方式把系统搞瘫,测试系统是否可正常迅速恢复 |
|
7. 附录三:功能测试规范
需求3.1.2公文管理的模块
测试目的:完成公文的起草、审核、审批、发文和归档操作
|
用例ID |
输入/动作 |
期望结果 |
实际情况 |
Pass/ Fail /To do |
注释 |
执行人员 |
|
OA—12—1-1 |
选择公文处理流程 |
可以自由选择流程 |
|
|
|
|
|
OA—12—1-2 |
选择起草公文 |
能够起草公文 |
|
|
|
|
|
OA—12—1-3 |
下模公文模块 |
可以下载所选择的公文 |
|
|
|
|
|
OA—12—1-4 |
填写公文内容 |
可以在公文内输入内容 |
|
|
|
|
|
OA—12—1-5 |
上传WROA系统时,没有填写公文名称,但有选择公文上传地址 |
不能执行上传操作 |
|
|
|
|
|
OA—12—1-6 |
上传WROA系统时,有填写公文名称,但没有选择公文上传地址 |
不能执行上传操作 |
|
|
|
|
|
OA—12—1-7 |
上传WROA系统时,有填写公文名称和有选择公文上传地址 |
能执行上传操作 |
|
|
|
|
|
OA—12—1-8 |
科室主任审核公文 |
能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-9 |
科室工作人员审核公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-10 |
副局长审核公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-11 |
副局长审批公文 |
能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-12 |
科室工作人员审批公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-13 |
科室主任审批公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-14 |
公文分发 |
通过审批后公文会自动分发 |
|
|
|
|
|
OA—12—1-15 |
公文归档 |
起草后工作人员可以点击同意或不同意按钮进行归档 |
|
|
|
|
需求3.1.4用车管理的模块
测试目的:完成用车的申请、审批及交车等操作
|
用例ID |
输入/动作 |
期望结果 |
实际情况 |
Pass/ Fail /To do |
注释 |
执行人员 |
|
OA—14—1-1 |
提出用车申请,填写出行地、时间段、人员数目、行程简介、需车类型等资料 |
申请通过,等待审批 |
|
|
|
|
|
OA—14—1-2 |
提出用车申请,填写出行地、人员数目、行程简介、需车类型等资料,不填写时间段 |
申请不通过 |
|
|
|
|
|
OA—14—1-3 |
教育局局长对全局各处室发起的用车申请进行审批 |
可以点击同意或不同意按钮,并自动发送到办公室副主任安排 |
|
|
|
|
|
OA—14—1-4 |
主任对全局各处室发起的用车申请进行审批 |
不可以点击同意或不同意按钮 |
|
|
|
|
|
OA—14—1-5 |
分管办公室的副局长对各处室提交的用车申请进行审批 |
可以点击同意或不同意按钮,并自动发送到办公室副主任安排 |
|
|
|
|
|
OA—14—1-6 |
办公室副主任安排好后发送用车通知 |
司机、用车申请人及乘车人员会收到通知 |
|
|
|
|
|
OA—14—1-7 |
司机出车完成,执行交车动作 |
可以做下次出车 |
|
|
|
|
|
OA—12—1-8 |
科室主任审核公文 |
能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-9 |
科室工作人员审核公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-10 |
副局长审核公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-11 |
副局长审批公文 |
能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-12 |
科室工作人员审批公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-13 |
科室主任审批公文 |
不能点击同意或不同意按钮 |
|
|
|
|
|
OA—12—1-14 |
公文分发 |
通过审批后公文会自动分发 |
|
|
|
|
|
OA—12—1-15 |
公文归档 |
起草后工作人员可以点击同意或不同意按钮进行归档 |
|
|
|
|
8. 附录四:测试报告
8.1目的
8.2范围
8.3测试工具
8.4测试环境
8.5术语/缩写
|
术语/缩写 |
说明 |
|
|
|
|
|
|
8.6测试测模块
模块逻辑结构图
|
编号 |
类别名称 |
功能 |
|
F1 |
|
|
|
F2 |
|
|
|
F3 |
|
|
|
F4 |
|
|
|
F5 |
|
|
|
…… |
|
|
|
Fn |
|
|
8.7功能测试结果
本系统所有模块都能准确稳定的实现预定功能,并且覆盖全部需求项。
|
测试项目 |
测试子项目 |
测试结果 |
|
用户登陆 |
|
功能准确实现。 |
|
电子邮件 |
发送邮件 |
功能准确实现。 |
|
收件箱 |
功能准确实现。 |
|
|
发件箱 |
功能准确实现。 |
|
|
短信息 |
发送、接收、删除 |
功能准确实现。 |
|
公告通知 |
发表、修改、删除公告 |
功能准确实现。 |
|
查看公告 |
查看结果正确。 |
|
|
公文流转 |
新建、办理、委托、转交、word编辑公文(修订痕迹保留) |
功能准确实现。 |
|
查询公文及附件 |
查询结果正确。 |
|
|
业务管理 |
新建、办理、委托、转交 |
功能准确实现。 |
|
查询业务 |
查询结果正确。 |
|
|
考勤 |
个人考勤上下班、请假、外出 |
功能准确实现。 |
|
考勤管理统计查询 |
统计查询结果正确。 |
|
|
日程安排 |
新建、删除日程安排 |
功能准确实现。 |
|
工作日志 |
新建、修改、删除、查询日程安排 |
功能准确实现。 |
|
通讯簿 |
新建、修改、删除 |
功能准确实现。 |
|
个人信息设置 |
修改密码、个人资料 |
功能准确实现。 |
|
讨论区 |
查阅、发帖、回复、排行、搜索 |
功能准确实现。 |
|
讨论区设置 |
功能准确实现。 |
|
|
聊天室 |
发言、查看在线用户 |
功能准确实现。 |
|
聊天室设置 |
功能准确实现。 |
|
|
网络会议 |
发言、查看在线用户 |
功能准确实现。 |
|
网络会议管理、会议记录 |
功能准确实现。 |
|
|
文件柜 |
新建、修改、删除、附件管理 |
功能准确实现。 |
|
列车时刻查询 |
模糊查询、精确查询 |
功能准确实现。 |
|
电话区号查询 |
分类列表、查询 |
功能准确实现。 |
|
邮政编码查询 |
分类列表、查询 |
功能准确实现。 |
|
法律法规查询 |
分类列表 |
功能准确实现。 |
|
人事档案管理 |
新建、修改 |
功能准确实现。 |
|
工资上报 |
工资数据录入 |
功能准确实现。 |
|
新建上报流程、工资项定义、报表 |
功能准确实现。 |
|
|
流程设置 |
表单定义、字段定义、表单预览 |
功能准确实现。 |
|
|
定义流程步骤、经办人、可写字段 |
功能准确实现。 |
|
单位管理 |
单位信息修改 |
功能准确实现。 |
|
部门管理 |
部门新建、修改、删除 |
功能准确实现。 |
|
角色管理 |
角色称谓定义 |
功能准确实现。 |
|
员工管理 |
新建、修改、删除 |
功能准确实现。 |
|
在线员工 |
显示在线员工名字及人数 |
显示结果正确。 |
|
我的办公桌 |
显示通知、邮件、日程、代办事宜、常用网址 |
显示结果正确。 |
|
系统退出 |
|
成功退出。 |
8.8界面测试结果
用户界面比较友好,有必要的操作提示,每个页面都有相应的提示信息。页面布局合理,功能模块划分清晰。删除功能如有必要都有确认删除窗口,减少了用户误操作的可能性。用户界面可进行个性化设置。可隐藏/显示菜单,扩大了可视面积。
8.9测试数据表
|
测试数据表 |
||||||
|
测试类名: 方法名: |
测试人: 所属模块: |
编号: |
||||
|
序号 |
测试目的 |
输入数据 |
实际输出 |
期望输出 |
差异与否 (允许误差) |
估计错误原因 |
|
1 |
匹配条件 |
|
|
|
|
|
|
2 |
边界测试 |
|
|
|
|
|
|
3 |
条件分支 |
|
|
|
|
|
|
4 |
循环 |
|
|
|
|
|
|
5 |
不合法数据 |
|
|
|
|
|
|
备注 |
|
|
|
|
|
|
测试报告表
|
项目编号 |
1 |
类名称及版本 |
2 |
|||||||||||||||||
|
项目名称 |
3 |
测试人员 |
4 |
|||||||||||||||||
|
测试执行日期及版本 |
5 |
|
|
|
||||||||||||||||
|
方法名称 |
标识号 |
测试结果 |
问题描述 |
问题属性
|
问题类别 |
修改确认 |
确定修改人员 |
返回次数 |
确认修改状态 |
|||||||||||
|
1 |
2 |
3 |
4 |
5 |
6 |
|||||||||||||||
|
6 |
7 |
8 |
9 |
10 |
11 |
|
12 |
13 |
14 |
|||||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
浙公网安备 33010602011771号