301
社区成员
发帖
与我相关
我的任务
分享我理解的,在本单元的NetWork测试中,所谓黑盒测试,或者说黑箱测试,
就是对所实现的程序的特定功能进行测试,只关注功能的输入和输出。
在本单元的作业中,对程序的Debug和补完就经常利用到黑箱测试;
对于一次输入,首先有个预期输出,
只需要将实际输出与预期进行对比,就可直接找到有问题的指令。
这样就能找到实际有问题的功能部件,再去对症下药进行处理。
而白箱测试则是对功能部件内的全部逻辑和属性进行测试
往往是在通过黑箱测试找到实际有问题的部件后
对功能部件的运行进行全面的行为、数据监控
观察得到与预期不符的部分,就可找到症结所在
单元测试是指对软件中的最小可测试单元进行检查和验证
“单元”可以是一个函数、方法、类、功能模块或者子系统
在Unit3的作业中,单元指的是一个个功能方法
我们对其中的某一方法进行的测试
并使用断言去判断运行是否符合预期
根据产品特性、操作描述和用户场景,测试产品的特征和可操作行为,以确定其满足设计需求。
功能测试是根据功能要求对软件进行的测试,确保程序按照预期的方式运行,
通过测试系统的所有特性和功能来确保程序与规范的一致性。
集成测试将已经通过单元测试的软件模块组合起来
并测试它们之间的交互和协作是否正常
集成测试的主要目的是确保不同的软件模块能够无缝协作
形成一个完整的软件系统,并且能够满足系统的需求和规格
压力测试是通过不断向被测系统施加“压力”
测试系统在压力情况下的性能表现,考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在
也就是我们可以模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作
回归测试是一个系统的质量控制过程
用于验证最近对软件的更改或更新是否无意中引入了新错误
或对以前的功能方面产生了负面影响
策略 :
首先是随机构造大量正常数据,对整个系统的功能进行测试
再去针对其中某一功能进行大量单一数据的输入测试
最后可以进行极端数据的测试
本单元基本是属于以下架构 :
NetWork -> Persons 、 Messages
Person -> Acquaintance 、 Tags ...
Acquaintance -> Person
Tag -> Persons...
即,关系网中存储所有人的信息和发送的消息
人与人之间的Relation存储在Person的Acquaintance中
同时每个人有标签组
每一个标签中又有相关的人
本单元为关系NetWork图
在NetWork中存储所有节点信息
同时在Person节点中存储边信息
为了优化效率,本次作业中引入并查集
这样通过根节点的统一,可以快速查看两点是否连通
在本次作业中,需要对许多特殊关系进行统计
故使用动态维护
每一次对点集和边集的修改
都维护一次这些动态数据,降低重复查询的时间损耗
本次作业中出现最大的性能问题就是
对BlockSum和TripleSum的查询
若每次都进行一次整体计算查询,则很容易出现超时
故需要对这类Sum类型的数据进行动态维护
同时,关于点是否连通的查询
如果一直使用DFS,也很容易因为递归导致时间度过于复杂
因此引入并查集,达到常数级别的查询速度
本单元的Junit测试,主要是针对对JML语言的熟练掌握
对于前置条件的检验
中间变量的断言
和后置条件的保证
并且过程中需要保证不能改变的属性不变
同时,在构造数据的时候,需要充分地考虑到对代码的覆盖率和分支的覆盖
做到有效的测试
本单元主要要求学习对JML语言的理解
并且能够在充分了解规格要求后
按照理解去对功能进行实现,而不是单纯按照JML语言去写
同时学会了去进行主动的性能优化
如数据的动态维护
以及并查集的使用等