2024 面向对象设计于构造U3博客作业

谢宇隆-78066015 2024-05-19 18:30:04

测试过程

本单元课中多次提到了黑箱测试和白箱测试,另外在软件工程开发中的测试环节还有单元测试、功能测试、集成测试、压力测试、回归测试等,下面我就以自己的理解来简述这些测试。

黑箱测试和白箱测试

黑箱测试:给与所测试的程序输入符合程序设计时所设定数据范围的数据,依照程序实现的功能检测程序输出所得是否与预期输出相等,不关心程序如何获得输出。

白箱测试:测试者需要知道程序实现的逻辑,细节等,并设置特定极端数据来测试程序处理数据范围边界的策略是否符合预期。

测试环节

单元测试:将复杂的程序按照模块特征拆分成多个单元,并依据单元测试结果来判断单元内模块实现逻辑的正确性。

功能测试:主要针对实现单一功能的函数/模块进行的测试。

集成测试:涉及程序中多个模块/多个单元协作处理数据的测试,主要针对多个单元协作时可能出现的预期之外的情况。

压力测试:用大量的涉及复杂运算的输入数据来判断程序处理数据时使用的时间与空间代价,主要用于判断程序的逻辑实现是否有优化的需求。

回归测试:程序因拓展或优化进行了修改之后,对修改后的程序重新进行的测试,以保证程序修改过程中不影响其逻辑正确性。

数据构造策略

正确性:尽可能例举出程序所接受的数据范围内的多种情况,并且对每一种情况都准备最少一个样例进行测试。

性能:对涉及可能造成时间复杂度高的功能进行重复,次数多的测试。

图模型构建和维护策略

本次作业一开始使用了DFS算法来判断两点是否连通,后来发现若每次对isCircle的调用就跑一轮DFS性能就太慢了,于是使用了并查集算法来优化。但是由于没有真正找到/想到并查集算法删边的实现,依旧保留了DFS用来做删边后涉及删边的两点的头节点的判断。对于最短路径的实现采用了BFS算法。

规格与实现分离的理解

规格说明了一个函数需要做什么,也就是负责的业务,而实现则是该函数完成业务的方式。对一些较为复杂的数据处理,可以通过拆分其工作细节并根据特定规律,使用算法,函数调用等方法来简化函数实现的代价。

JUnit测试

通过课程组提供的JML规格直接编写了Junit测试,将JML规格保证不变的内容全部检查一遍,结果正确就行。
其中比较需要关注的有对JML中 requires ensures assignable 等行为。

学习体会

本单元主要围绕着契约式程序设计的方式学习。通过拟定规格,可以让开发者明确自己工作时编写的模块需要遵循的规则。并且测试程序也可以参照所写规格对实现程序进行测试。在这让我印象比较深刻的是在拟定了测试程序之后,在对代码进行修改,优化后,可以很方便的通过测试程序确认自己的优化是否改变了程序的正确性。

...全文
113 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧