双人俄罗斯方块软件测试课程报告内容.docx
《双人俄罗斯方块软件测试课程报告内容.docx》由会员分享,可在线阅读,更多相关《双人俄罗斯方块软件测试课程报告内容.docx(40页珍藏版)》请在冰豆网上搜索。
双人俄罗斯方块软件测试课程报告内容
双人俄罗斯方块项目测试报告
--课程报告
课程名称:
软件测试
课程类别:
专业主干课
开课学期:
2016秋季学期
编写单位:
信息工程学院
项目测试人:
编写人:
指导教师:
提交班级:
提交时间:
2017/1/2
1项目目的和任务
本课程实践的目的和意义在于通过实际测试一个Java应用程序,使学生更深刻地领会软件测试的工作原理、测试用例的设计、测试工具及框架的使用方法,使学生比较全面地、系统地掌握软件测试的基本概念和基本知识,为将来从事软件测试的研究、应用奠定坚实的基础。
本项目来源于中国地质大学〔北京〕信息工程学院软件测试课程实践,测试周期为5天。
本项目的测试代码来自中国地质大学〔北京〕信息工程学院***开发团队研发,可实现双人俄罗斯方块的小游戏。
系统将分为2部分:
双人对战部分及情侣合作部分。
1.1项目背景
双人俄罗斯方块项目是***开发团队在中国地质大学〔北京〕信息工程学院JAVA程序设计的课程实践项目,基于Java语言开发。
此项目在传统的俄罗斯方块游戏的基础上进行了改良,实现了双人对战以及情侣合作的功能。
1.2项目测试目标
项目目标是确保最终交给用户的产品的功能符合用户的需求,把尽可能多的问题在产品交给用户之前发现并改正。
最终的测试方案要到达如下要求:
1.确保产品完成了它所承诺或公布的功能。
2.确保产品满足性能和效率的要求
3.确保产品是健壮的和适应用户环境的
本测试主要根据用户需求说明书和软件需求规格说明书以及相应的文档进行系统测试,包括功能测试、用户界面测试、业务逻辑部分的单元测试。
1.3项目测试任务
1.采用黑盒测试的方法进行功能测试及用户界面测试。
2.采用白盒测试的方法对重要业务逻辑部分进行测试
1.4任务分工
系统设计阶段的任务分工如表1-1所示
表1-1系统设计阶段任务分工
组员
组内角色
组内分工
组长
完成游戏主控模块方法的白盒测试,所有测试结果分析,完成文档撰写,答辩
组员
完成形状构件类的白盒测试
组员
完成功能测试、用户界面测试部分的黑盒测试,制作PPT
2
项目测试计划
本项目测试流程如表2所示
表1-2系统开发流程表
时间
工作安排
具体内容
12月23日-12月25日
黑盒测试
完成功能测试、用户界面测试部分的黑盒测试
12月25日-12月28日
白盒测试
完成游戏主界面类、四个形状构件类的白盒测试
12月29日-1月1日
完成文档、制作答辩PPT
完成文档、制作答辩PPT、准备答辩
3项目测试大纲
1.白盒测试部分采用基本路径测试方法,当所有的基本路径都被覆盖,即语句覆盖率到达100%时停止测试。
2.黑盒测试覆盖软件的所有功能及用户界面,当测试完所有功能及用户界面后停止测试。
4白盒测试
本项目的业务逻辑部分都在俄罗斯方块的七个形状类以及主控模块中,故将白盒测试的测试范围确定在形状构建类以及主控模块中。
⏹形状构件类
形状构件类的业务逻辑部分十分相近,故从中抽取了ShapeI及ShapeLeftL作为典型进行测试,以期在最短的时间内迅速找出错误。
●ShapeI类
1.reset函数:
图1reset函数流程图
图2reset函数流图
基本路径测试:
路径分析:
环形复杂度:
2
基本路径集:
{路径1:
〔1->2->3->4->6〕路径2:
〔1->2->3->5->6〕}
测试用例:
输入条件
覆盖路径
预期结果
state=0
1
smallblock[0].m=4,smallblock[0].n=0
smallblock[1].m=5,smallblock[1].n=0
smallblock[2].m=6,smallblock[2].n=0
smallblock[3].m=7,smallblock[3].n=0
state=1
2
smallblock[0].m=5,smallblock[0].n=0
smallblock[1].m=5,smallblock[1].n=1
smallblock[2].m=5,smallblock[2].n=2
smallblock[3].m=5,smallblock[3].n=3
2.turn函数:
图3turn函数流程图
图4turn函数流图
基本路径测试:
路径分析:
环形复杂度:
2
基本路径集:
{路径1:
〔1->2->3->4->7〕路径2:
〔1->2->5->6->7〕}
测试用例:
输入条件
覆盖路径
预期结果
state=0
smallblock[0].m=2,smallblock[0].n=3
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=4,smallblock[2].n=3
smallblock[3].m=5,smallblock[3].n=3
1
state=1
smallblock[0].m=3,smallblock[0].n=2
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=3,smallblock[2].n=4
smallblock[3].m=3,smallblock[3].n=5
state=1
smallblock[0].m=3,smallblock[0].n=2
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=3,smallblock[2].n=4
smallblock[3].m=3,smallblock[3].n=5
2
state=0
smallblock[0].m=2,smallblock[0].n=3
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=4,smallblock[2].n=3
smallblock[3].m=5,smallblock[3].n=3
3.canTurn函数:
图5canTurn函数流程图
图6canTurn函数流图
基本路径测试:
路径分析:
环形复杂度:
4
基本路径集:
{路径1:
〔1->2->3->5->9〕
路径2:
〔1->2->3->6->9〕
路径3:
〔1->2->4->7->9〕
路径4:
〔1->2->4->8->9〕}
测试用例:
输入条件
覆盖路径
预期结果
state=0
map[3][2]=1
smallblock[0].m=2,smallblock[0].n=3
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=4,smallblock[2].n=3
smallblock[3].m=5,smallblock[3].n=3
1
canTurn()=false
state=0
map[3][2]=0
smallblock[0].m=2,smallblock[0].n=3
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=4,smallblock[2].n=3
smallblock[3].m=5,smallblock[3].n=3
2
canTurn()=true
state=1
map[2][3]=1
smallblock[0].m=3,smallblock[0].n=2
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=3,smallblock[2].n=4
smallblock[3].m=3,smallblock[3].n=5
3
canTurn()=false
state=1
map[2][3]=0
smallblock[0].m=3,smallblock[0].n=2
smallblock[1].m=3,smallblock[1].n=3
smallblock[2].m=3,smallblock[2].n=4
smallblock[3].m=3,smallblock[3].n=5
4
canTurn()=true
4.canMoveLeft函数:
图7canMoveLeft函数流程图
图8canMoveLeft函数流图
基本路径测试:
路径分析:
环形复杂度:
6
基本路径集:
{路径1:
〔1->2->4->12〕
路径2:
〔1->2->5->12〕
路径3:
〔1->3->6->8->12〕
路径4:
〔1->3->6->9->12〕
路径5:
〔1->3->7->10->12〕
路径4:
〔1->3->7->11->12〕}
测试用例:
输入条件
覆盖路径
预期结果
State=0,m=11,设置map[10][0]=1使得小方块左边有障碍
1
FALSE
State=0,m=14,设置map[][]使得小方块左边无障碍
2
TRUE
State=1,m=2,设置map[][]使得小方块左边有障碍
3
FALSE
State=1,m=2,设置map[][]使得小方块左边无障碍
4
TRUE
State=1,m=17,设置map[16][0]=1使得小方块左边有障碍
5
FALSE
State=1,m=17,设置map[][]使得小方块左边无障碍
6
TRUE
●
shapeLeftL类
1.reset函数:
图9reset函数流程图
图10reset函数流图
基本路径测试:
路径分析:
环形复杂度:
4
基本路径集:
{路径1:
〔1->2->3->4->10〕
路径2:
〔1->2->3->5->6->10〕
路径3:
〔1->2->3->5->7->8->10〕
路径4:
〔1->2->3->5->7->9->10〕}
测试用例:
输入条件
覆盖路径
预期结果
state=0
1
smallblock[0].m=6,smallblock[0].n=0
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=2
smallblock[3].m=7,smallblock[3].n=2
state=0
2
smallblock[0].m=7,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=5,smallblock[2].n=1
smallblock[3].m=5,smallblock[3].n=2
state=2
3
smallblock[0].m=6,smallblock[0].n=2
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=0
smallblock[3].m=5,smallblock[3].n=0
state=3
4
smallblock[0].m=5,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=7,smallblock[2].n=1
smallblock[3].m=7,smallblock[3].n=0
2.turn函数:
图11turn函数流程图
图12turn函数流图
基本路径测试:
路径分析:
环形复杂度:
4
基本路径集:
{路径1:
〔1->2->3->5->13〕
路径2:
〔1->2->4->6->8->13〕
路径3:
〔1->2->4->7->9->11->13〕
路径4:
〔1->2->4->7->10->12->13〕}
测试用例:
输入条件
覆盖路径
预期结果
state=0
smallblock[0].m=6,smallblock[0].n=0
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=2
smallblock[3].m=7,smallblock[3].n=2
1
state=1
smallblock[0].m=7,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=5,smallblock[2].n=1
smallblock[3].m=5,smallblock[3].n=2
state=1
smallblock[0].m=7,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=5,smallblock[2].n=1
smallblock[3].m=5,smallblock[3].n=2
2
state=2
smallblock[0].m=6,smallblock[0].n=2
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=0
smallblock[3].m=5,smallblock[3].n=0
state=2
smallblock[0].m=6,smallblock[0].n=2
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=0
smallblock[3].m=5,smallblock[3].n=0
3
state=3
smallblock[0].m=5,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=7,smallblock[2].n=1
smallblock[3].m=7,smallblock[3].n=0
state=3
smallblock[0].m=5,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=7,smallblock[2].n=1
smallblock[3].m=7,smallblock[3].n=0
4
state=0
smallblock[0].m=6,smallblock[0].n=0
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=2
smallblock[3].m=7,smallblock[3].n=2
3.canTurn函数:
图13canTurn函数流程图
图14canTurn函数流图
基本路径测试:
路径分析:
环形复杂度:
8
基本路径集:
{路径1:
〔1->2->3->5->17〕
路径2:
〔1->2->3->6->17〕
路径3:
〔1->2->4->7->9->17〕
路径4:
〔1->2->4->7->10->17〕
路径5:
〔1->2->4->8->11->13->17〕
路径6:
〔1->2->4->8->11->14->17〕
路径7:
〔1->2->4->8->12->15->17〕
路径8:
〔1->2->4->8->12->16->17〕}
测试用例:
输入条件
覆盖路径
预期结果
state=0
map[7][1]=1
smallblock[0].m=6,smallblock[0].n=0
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=2
smallblock[3].m=7,smallblock[3].n=2
1
canTurn()=false
state=0
map[7][1]=0
smallblock[0].m=6,smallblock[0].n=0
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=2
smallblock[3].m=7,smallblock[3].n=2
2
canTurn()=true
state=1
map[6][2]=1
smallblock[0].m=7,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=5,smallblock[2].n=1
smallblock[3].m=5,smallblock[3].n=2
3
canTurn()=false
state=1
map[6][2]=0
smallblock[0].m=7,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=5,smallblock[2].n=1
smallblock[3].m=5,smallblock[3].n=2
4
canTurn()=true
state=2
map[5][1]=1
smallblock[0].m=6,smallblock[0].n=2
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=0
smallblock[3].m=5,smallblock[3].n=0
5
canTurn()=false
state=2
map[5][1]=0
smallblock[0].m=6,smallblock[0].n=2
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=6,smallblock[2].n=0
smallblock[3].m=5,smallblock[3].n=0
6
canTurn()=true
state=3
map[6][0]=1
smallblock[0].m=5,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=7,smallblock[2].n=1
smallblock[3].m=7,smallblock[3].n=0
7
canTurn()=false
state=3
map[6][0]=0
smallblock[0].m=5,smallblock[0].n=1
smallblock[1].m=6,smallblock[1].n=1
smallblock[2].m=7,smallblock[2].n=1
smallblock[3].m=7,smallblock[3].n=0
8
canTurn()=true
⏹主控模块
1.keyPressed函数
图15Keypressed函数流程图
图16Keypressed函数流图
基本路径1:
1-2-15
基本路径2:
1-3-15
基本路径3:
1-3-9-15
基本路径4:
1-4-15
基本路径5:
1-4-9-15
基本路径6:
1-5-15
基本路径7:
1-5-11-15
基本路径8:
1-6-15
基本路径9:
1-6-12-15
基本路径10:
1-7-15
基本路径11:
1-7-13-15
基本路径12:
1-8-15
基本路径13:
1-8-14-15
测试用例:
输入
覆盖路径
预期结果
VK_DOWN
1
Interval=100
VK_W
2
dqfk[0]横纵坐标变化
VK_W且将map[][]设置为旋转后会碰到障碍物
3
dqfk[0]横纵坐标无变化
VK_UP
4
dqfk[1]横纵坐标变化
VK_UP且将map[][]设置为旋转后会碰到障碍物
5
dqfk[1]横纵坐标无变化
VK_A
6
dqfk[0]横坐标m-1
VK_A且将map[][]设置为左移后会碰到障碍物
7
dqfk[0]横坐标无变化
VK_LEFT
8
dqfk[1]横坐标m-1
VK_LEFT且将map[][]设置为左移后会碰到障碍物
9
dqfk[1]横坐标无变化
VK_D
10
dqfk[0]横坐标m+1
VK_D且将map[][]设置为右移后会碰到障碍物
11
dqfk[0]横坐标无变化
VK_RIGHT
12
dqfk[1]横坐标m+1
VK_RIGHT且将map[][]设置为右移后会碰到障碍物
13
dqfk[1]横坐标无变化
2.CanVanish函数
图17canVanish函数流程图
图18canVanish函数流图
基本路径1:
1-2-4-5-4-7-8
基本路径2:
1-2-4-5-4-5-6-8
基本路径3:
1-3-4-5-4-7-8
基本路径4:
1-3-4-5-4-5-6-8
测试用例:
输入条件
覆盖路径
预期结果
row=1,a=0,且map[][row]表示的此行没有空格
1
true
row=1,a=0,且map[][row]表示的此行含空格
2
flase
row=1,a!
=1,且map[][row]表示的此行没有空格
3
true
row=1,a!
=1,且map[][row]表示的此行没有空格
4
false
3.
vanish函数
此函数的复杂部分在于消行的部分有3个for循环,故把循环部分与主要逻辑部分别离进行考察。
图19vanish函数流程总图
图20vanish函数流程图分图1
图21vanish函数流程三层循环分图2
对三层循环的流程图的具体分析,假设采用基本路径法,有大部分路径无法覆盖,采用循环测试,对于for语句这种固定循环次数的控制流程无法在外部改变for循环的执行过程,故将此部分三层循环抽象成总业务流程的一个顺序模块。
图22vanish函数主要逻辑流图
基本路径1:
1-2-6-7
基本路径2:
1-3-4-6-7
基本路径3:
1-3-5-6-7
测试用例:
输入条件
覆盖路径
预期结果
style=0,且ma