创建网站的app,有了 ftp服务器密码 怎么改网站,pc官网 和手机网站,玩客云 做网站服务器单元测试又称模块测试#xff0c;是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验#xff0c;检查程序在语法、格式和逻辑上的错误#xff0c;并验证程序是否符合规范#xff0c;以发现单元内部可能存在的各种缺陷。
单元测试的对象是软件设计的最… 单元测试又称模块测试是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验检查程序在语法、格式和逻辑上的错误并验证程序是否符合规范以发现单元内部可能存在的各种缺陷。
单元测试的对象是软件设计的最小单位——模块、函数或者类。在传统的结构化程序设计语言(如C语言)中单元测试的对象一般是函数或者过程。在面向对象设计语言(如Java、C#)中单元测试的对象可以是类也可以是类的成员函数/方法。由此可见单元测试与程序设计和编码密切关联测试者需要根据详细设计说明书和源程序清单来了解模块的I/O条件和逻辑结构。
本节利用风靡全球的“俄罗斯方块游戏排行榜”的程序作为案例来串讲单元测试的内容。
01、测试策划
1. 目的
俄罗斯方块游戏(Tetris)的排行榜功能经过编码后在与其他模块进行集成之前需要经过单元测试测试其功能点的正确性和有效性。以便在后续的集成工作中不会引入更多的问题。
2. 背景
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏它由俄罗斯人阿列克谢·帕基特诺夫发明故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块使之排列成完整的一行或多行并且消除得分。
排行榜功能是俄罗斯方块游戏中不可或缺的一部分其用于将当前用户的得分与历史得分记录进行比较并重新排序。
该程序主要涉及的功能点有历史记录文件的读取、分数排名的计算与排序、新记录文件的保存、新记录的显示等。这些功能将在一局游戏结束并获取到该局游戏的得分后启动。
3. 待测源代码
private void gameOver (int score)//游戏结束
{//Display game over
string s您的得分为:;
string al .
char[]A{};
int i1;
_blockSurface.FontStyle new Font(FontFace,BigFont);//设置基本格式_blockSurface.FontFormat.Alignment StringAlignment.Near;
_blockSurface.DisplavText GAME OVER!!
string sc Convert.ToString( score);//得到当前玩家的分数//write into file;
string pathD: test2.txt;//文件路径
try{
FileStream fs newFileStream
(path,FileMode.OpenOrCreate,FileAccess.ReadWrite);
StreamReader strmreader new StreamReader(fs);//建立读文件流
String[] str new String[5];
String[] split new String[5];
while(strmreader.Peek()! -1)
for(i0;i5;i)
strli] strmreader.ReadLine();//以行为单位进行读取赋予数组
//str[i]
split [i]split[i] str[i].split(:)[1];//按照:将文字分开赋予数组
person1 Convert.ToInt32(split[0]); //splt[0]的值赋予第一名
person2 Convert.ToInt32(split[1]); //splt[1]的值赋予第一名
person3 Convert.ToInt32(split[2]); //splt[2]的值赋予第一名
person4 Convert.ToInt32(split[3]); //splt[3]的值赋予第一名
person5 Convert.ToInt32(split[4]); //splt[4]的值赋予第一名
strmreader.Close(); //关闭流
fs.Close();
FileStream ffs new
FileStream(path, FileMode.OpenOrCreate,
FileAccess.ReadWrite));
StreamWriter sw new StreamWriter(ffs)//建立写文件流
if(_score person1)//如果当前分数大于第一名排序
{
person5person4; person4 person3; person3 person2; person2 person1;
person1score;
}
else if(_score person2)//如果当前分数大于第二名排序
{
person5 person4; person4 person3; person3 person2; person2
_score;
}
else if(_score person3)//如果当前分数大于第三名排序
{
person5 person4; person4 person3; person3 _score;
else if(_score person4)//如果当前分数大于第四名排序
{
person5 person4; person4 _score;
}
else if(_score person5)//如果当前分数大于第五名排序
{
person5 _score;
//在文件中的文件内容
string ppl 第一名:“ Convert.ToString(person1);
string pp2 第二名: Convert.ToString(person2);
string pp3 第三名:” Convert.ToString(person3);
string pp4 第四名: Convert.ToString(person4);
string pp5 第五名 Convert.ToString(person5);
string
ppR pp1r\n pp2 r\n pp3 r\n pp4r\n pp5 r\n;
byte[] info new UTF8Encoding(true).GetBytes(ppR);
sw.Write(ppR); //将内容写入文件
sw.Close();
ffs.Close();
}
Catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
Ss sC;
//Draw surface to display text;
MessageBox.Show(s); //在界面中显示排行榜内容
}
02、测试设计
下面将利用相关静态和动态(白盒测试、黑盒测试)方法对案例进行相应的测试得到测试报告与错误列表在实际项目中可进一步反馈给开发方进行Bug的确认与修复。
1. 代码走查
利用代码走查的方法检查该模块的代码对代码质量进行初步评估。具体实现如表1所示。
■ 表1 代码走查情况记录 从表1的分析中可以看出本模块的代码基本情况如下。
(1) 代码直观。
(2) 代码和设计文档对应。
(3) 无用的代码已经被删除。
(4) 注释过于简单。
2. 基本路径测试法
基本路径测试法是在程序控制流图的基础上通过分析控制构造的环路复杂性导出可执行的路径集合从而设计测试用例的方法。首先需要简化程序模块绘制程序模块如图2所示。接着按照模块图的设计路径来覆盖策略。主要可分为以下4步执行。 ■ 图2 程序模块图
1) 绘制程序的控制流图
基本路径测试法的第一步是绘制控制流图根据程序模块图的逻辑关系获得该程序块的控制流图如图3所示。 ■ 图3 程序模块的控制流图
2) 计算环路复杂度
其次是根据控制流图计算环路复杂度环路复杂度是一种为程序逻辑复杂性提供定量测度的软件度量该度量将用于计算程序基本的独立路径数目为确保所有语句至少执行一次的测试数量的上界。
V(G)P1516
根据以上公式确定至少要覆盖6条路径。
3) 导出独立路径
根据控制流图可以方便地得到以下6条路径。
path11—2—11。
path21—3—4—11。
path31—3—5—6—11。
path41—3—5—7—8—11。
path51—3—5—7—9—10—11。
path61—3—5—7—9—11。
4) 设计测试用例
最后设定一组初始参数以此来设计测试用例。令
person123
person220
person310
person46
person54
作为测试输入可设计测试用例如表2所示。
■ 表2 基本路径法测试用例 3. 边界值分析
边界值分析法利用输入变量的最小值、略大于最小值、输入范围内任意值、略小于最大值、最大值等来设计测试用例。
由于输入的只会是数据且数据均大于0因此可令
person1 23
person2 20
person3 10
person4 6
person5 4
采用边界值法设计测试用例如表3所示。
■ 表3 边界值法测试用例 03、测试执行
将设计的测试用例整理合并为测试用例集合必要时需要开发相应的驱动模块和桩模块。本次测试需要开发一个驱动模块用于初始化相应的参数并调用待测模块以达到测试效果。驱动模块代码如下。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main(){
public static void main(String[]args)
throws IOException{
int person1 23,person2 20, person3 10,person4 6,person5 4;
int score;
String s;
BufferedReader bf new BufferedReader(newInputStreamReader(System.in));
s bf.readLine():
score Integer.valueOf(s);
_gameOver(score);
}
}
04、测试总结
测试结果可利用Bug记录平台进行记录在实际项目中则可反馈给开发人员由开发人员确认并修复。
测试结束后形成测试报告。