软件测试用例经典方法 | 单元测试法案例

简介: 单元测试又称模块测试,是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验,检查程序在语法、格式和逻辑上的错误,并验证程序是否符合规范,以发现单元内部可能存在的各种缺陷。

640.jpg


单元测试的对象是软件设计的最小单位——模块、函数或者类。在传统的结构化程序设计语言(如C语言)中,单元测试的对象一般是函数或者过程。在面向对象设计语言(如Java、C#)中,单元测试的对象可以是类,也可以是类的成员函数/方法。由此可见,单元测试与程序设计和编码密切关联,测试者需要根据详细设计说明书和源程序清单来了解模块的I/O条件和逻辑结构。
本节利用风靡全球的“俄罗斯方块游戏排行榜”的程序作为案例来串讲单元测试的内容。
# 01、测试策划

##1. 目的

俄罗斯方块游戏(Tetris)的排行榜功能经过编码后,在与其他模块进行集成之前,需要经过单元测试,测试其功能点的正确性和有效性。以便在后续的集成工作中不会引入更多的问题。

##2. 背景

俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。

排行榜功能是俄罗斯方块游戏中不可或缺的一部分,其用于将当前用户的得分与历史得分记录进行比较并重新排序。

该程序主要涉及的功能点有历史记录文件的读取、分数排名的计算与排序、新记录文件的保存、新记录的显示等。这些功能将在一局游戏结束,并获取到该局游戏的得分后启动。

##3. 待测源代码
js private void gameOver (int score)//游戏结束 {//Display game over string s="您的得分为:"; string al =". char[]A=; int i=1; blockSurface.FontStyle= new Font(FontFace,BigFont);//设置基本格式 blockSurface.FontFormat.Alignment = StringAlignment.Near; blockSurface.DisplavText ="GAME OVER!! string sc = Convert.ToString( score);//得到当前玩家的分数 //write into file; string path="D: test2.txt";//文件路径 try{ FileStream fs = new FileStream (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(i=0;i<5;i++) strli] = strmreader.ReadLine();//以行为单位进行读取,赋予数组//str[i] //按照":"将文字分开,赋予数组 split [i]split[i]= str[i].split(':')[1]; person1 = Convert.ToInt32(split[0]); //splt[0]的值赋予第一名= Convert.ToInt32(split[1]); //splt[1]的值赋予第二名person2person3 = Convert.ToInt32(split[2]); //split[2]的值赋予第三名person4 = Convert.ToInt32(split[3]); //splt[3]的值赋予第四名person5 = Convert.ToInt32(splt[4]); //split[4]的值赋予第五名strmreader.Close(); //关闭流fs.Close();FileStream ffs = newFileStream(path, FileMode.OpenOrCreateFileAccess.ReadWrite)); StreamWriter sw = new StreamWriter(ffs)//建立写文件流if(_score > person1)//如果当前分数大于第一名,排序person5=person4; person4 = person3; person3 = person2; person2 = person1;person1=score;else if(_score> person2)//如果当前分数大于第二名,排序person5 = person4; person4 = person3; person3 = person2; person2= score; else if(_score> person3)//如果当前分数大于第三名,排序 84的533N5558的的086 person5 = person4; person4 = person3; person3 =score;else if(_score> person4)//如果当前分数大于第四名,排序person5 = person4; person4 =score;lelse 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= pp1+"rn"+ pp2 +"rn" + pp3 +"rn"+ pp4+"rn"+ pp5 +"rn";bytel] info = new UTF8Encoding(true).GetBytes(ppR);sw.Write(ppR); //将内容写入文件 sw.Close();ffs.Close(); Catch(Exception ex) Console.WriteLine(ex.ToString()); S=s+""+ sC;//Draw surface to display text;//在界面中显示排行榜内容MessageBox.Show(s);
#02、测试设计

下面将利用相关静态和动态(白盒测试、黑盒测试)方法对案例进行相应的测试,得到测试报告与错误列表,在实际项目中可进一步反馈给开发方进行Bug的确认与修复。

##1. 代码走查

利用代码走查的方法检查该模块的代码,对代码质量进行初步评估。具体实现如表1所示。

■ 表1代码走查情况记录


640.png


2bb62ead74670355f1ef5736dcc32bb2.png


99e2c1f3ca6d1b3bac41f8e007f3c8de.png


2ab57c1e33e74885accd8f5537effeaf.png


从表1的分析中可以看出,本模块的代码基本情况如下。

(1) 代码直观。

(2) 代码和设计文档对应。

(3) 无用的代码已经被删除。

(4) 注释过于简单。

##2. 基本路径测试法

基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出可执行的路径集合,从而设计测试用例的方法。首先需要简化程序模块,绘制程序模块如图2所示。接着按照模块图的设计路径来覆盖策略。主要可分为以下4步执行。

640.png


■ 图2程序模块图

1) 绘制程序的控制流图

基本路径测试法的第一步是绘制控制流图,根据程序模块图的逻辑关系,获得该程序块的控制流图,如图3所示。

640.png


■ 图3程序模块的控制流图

2) 计算环路复杂度

其次是根据控制流图计算环路复杂度,环路复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,该度量将用于计算程序基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。
V(G)=P+1=5+1=6

根据以上公式确定至少要覆盖6条路径。

3) 导出独立路径

根据控制流图可以方便地得到以下6条路径。

path1:1—2—11。

path2:1—3—4—11。

path3:1—3—5—6—11。

path4:1—3—5—7—8—11。

path5:1—3—5—7—9—10—11。

path6:1—3—5—7—9—11。

4) 设计测试用例

最后设定一组初始参数,以此来设计测试用例。令:

person1=23

person2=20

person3=10

person4=6

person5=4

作为测试输入,可设计测试用例如表2所示。

■ 表2基本路径法测试用例

640.png

3. 边界值分析

边界值分析法利用输入变量的最小值、略大于最小值、输入范围内任意值、略小于最大值、最大值等来设计测试用例。

由于输入的只会是数据,且数据均大于0,因此可令:

person1 = 23

person2 = 20

person3 = 10

person4 = 6

person5 = 4

采用边界值法设计测试用例如表3所示。

■ 表3边界值法测试用例

640.png

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记录平台进行记录,在实际项目中则可反馈给开发人员,由开发人员确认并修复。

测试结束后,形成测试报告。

目录
相关文章
|
2月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
72 4
|
13天前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
72 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
12天前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
41 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
3月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
76 6
|
3月前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
79 6
|
3月前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
152 4
|
3月前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
3月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
643 2
|
1月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
15天前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
84 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡

热门文章

最新文章

  • 1
    小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
  • 2
    3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密
  • 3
    Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
  • 4
    基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 7
    「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
  • 8
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
  • 9
    AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
  • 10
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描