OO UNIT3 单元总结

摸鱼特等奖选手 学生 2024-05-17 11:41:12

 

  • 分析本单元的测试过程

  • 谈谈你对黑箱测试、白箱测试的理解

黑箱测试:是根据功能需求来测试程序是否按照预期工作,是要从用户的角度分析,尽量发现代码所表现的外部行为的错误。一般来说用评测机进行测试就是黑箱测试。

白箱测试:是测试人员要了解程序结构和处理过程,按照程序内部逻辑测试程序,检查程序中的每条通路是否按照预定要求正确工作,主要针对源代码。阅读代码找bug行为就属于白箱测试。

对于本单元的代码编写任务,我大部分时候采用的都是黑箱测试。当出现输出内容与预期不符时再采用白箱测试,可以节省一些时间,提高测试效率。而针对部分方法的Junit的编写则属于白箱测试。

  • 对单元测试、功能测试、集成测试、压力测试、回归测试的理解

单元测试:是指对软件中的最小可测试单元进行检查和验证。Java中的单元指一个类。

功能测试:同上文的黑箱测试。

集成测试:在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。

压力测试:给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷。然后做针对性测试与分析,找到影响系统性能的瓶颈,评估系统在实际环境下的效率状况。比如在强测中输入大量qcs行为

回归测试:是指修改了旧代码后,重新进行测试以确认修改没有引入的新的错误或导致其它代码产生错误。bug修复阶段采用了回归测试。

  • 数据构造有何策略

在构造数据时,尽量考虑能够全面地测试方法。

第一次作业时,需要测试的方法是TripleSum。采用的方式是尽量增加Network中数据组数,使得计算复杂度增加,方便检验方法正确性。

第二次构造方式和第一次类似。

第三次作业需要测试的方法是deleteColdEmoji()。在构造数据时,构造三个heat[]值,分别为10,5,10;构造三个limit,分别是0,6,10(确保上下限以及中间值都能够被测试)。能够测试到方法的不同情况。

  • 梳理本单元的架构设计,分析自己的图模型构建和维护策略

图模型:

在Network中维护一个persons数组,每个person类中维护两个数组,分别是acquaintance和value,用来存储对应的关系以及关系值。

并查集:

判断两个结点之间的连通性时,我用的是并查集的方式。在加入关系时,合并并查集,修改时删除对应结点,并重建。

dijkstra:

本单元的qps求的是最短路径。我的思路是,先加入结点,然后遍历其所有相邻结点,选出最短路径。遍历所有节点之后的值就是最后答案。

维护策略:

第一次作业时,对于图中三角形的计数,采用动态维护。每加入一对新关系就遍历与其所有邻接的点,如果三个点之间互相联通,就将三角形的数量加1,删除则同理。

第二次作业时,由于需要计算最短路径,需要加入dijkstra算法。在计算qtvs和qtav指令时,采用动态维护的方式,在每个tag加人或者减人的时候修改。

  • 分析作业中出现的性能问题及其修复情况,谈谈自己对规格与实现分离的理解

hw10出现ctle的现象,一是在计算tag的valueSum时没有进行动态维护,导致在方法执行过程中出现了双层循环;二是在计算方差时调用了两次求平均值的方法,使得复杂度增加了很多。在修复过程中,将valueSum改为动态维护形式,且注意需要修改MyNetwork中的addRelation和modifyRelation方法。在计算方差前,先求出average,计算时直接带入average。

规格与实现分离是一种软件开发中的设计原则,它强调在软件开发过程中要将规格和实现分离开来。具体来说,规格是指软件需要满足的功能需求和性能要求,而实现则是指讲这些需求转化为实际的软件代码。优点在于可以时软件开发更加模块化和可维护。通过将规格和实现分离开来,可以将软件的各个部分独立开发,测试和维护。这样不仅可以提高软件的可靠性和稳定性,还可以减少软件修改时的风险和成本。

  • 本单元中同学们实现了Junit测试方法,总结分析如何利用规格信息来更好的设计实现Junit测试,以及Junit测试检验代码实现与规格的一致性的效果

确保每个ensure中的内容都被测试。测试的内容为assignable后面的内容。

例如deleteColdEmoji方法,在实现的过程中,分别检验messages[],emojilist[],emojiHeatlist[]中前后的内容,确保每个ensure都能够满足。

  • 本单元学习体会

通过本单元的学习,掌握了一些jml的语法,也学会了利用规格信息来实现方法的测试。觉得在学习过程中最大的难点在于读懂jml提供的信息并且将其翻译为代码,因为部分jml提供的规格并不能直接地被利用。例如第一次作业中的TripleSum,第二次作业中的最短路径等等。在学习过程中,也学习了一些图论的算法,包括并查集和最短路径算法,来提高程序的性能。因为对于Junit测试的了解不够,在刚开始学习测试方法的时候花了较多时间。不过在后续完善的过程中逐渐掌握了利用规格信息来写,思路清晰了很多。希望日后再接再厉,能将所学化为所用。


 

 

 

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

301

社区成员

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

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