2024OO第三单元反思与总结

蒋孝淳-22373369 学生 2024-05-17 15:19:10

本单元主要学习了JML入门规格的理解与对应代码的实现,并在作业中实现了一个简单的社交网络。

测试过程分析

黑箱测试与白箱测试

  • 黑箱测试:黑箱测试(Black Box Testing)是一种测试方法,测试人员不需要了解内部代码结构,只关注输入和输出。其目的是验证软件功能是否按预期工作。黑箱测试通常用于功能测试和用户界面测试。

  • 白箱测试:白箱测试(White Box Testing)则要求测试人员了解代码的内部结构和实现逻辑。通过代码分析,设计测试用例来覆盖所有的代码路径,确保没有遗漏的逻辑错误。白箱测试通常用于单元测试和集成测试。

本单元的作业中,两种测试逻辑都有应用。对拍中应用黑盒测试,即只注重输入与输出,检查不同的程序在相同输入的情况下输出是否相同。Junit编写采用白盒测试,按照JML中给定的方法规格,对方法进行测试,保证其功能的完善与正确,并具有一定的鲁棒性和可拓展性。

单元测试 & 功能测试 & 集成测试 & 回归测试

  • 单元测试:单元测试(Unit Testing)是对软件中最小的可测试单元进行验证的过程,通常是一个函数或一个类的方法,其目标是验证每个单元在隔离状态下的正确性,使用JUnit等框架可以方便地创建和运行单元测试。

  • 功能测试:功能测试(Functional Testing)主要关注软件的功能需求是否被满足,通过模拟用户操作来验证软件的功能,通常是在黑箱测试的框架下进行的。

  • 集成测试:集成测试(Integration Testing)是将多个单元组合在一起进行测试,确保它们能够协同工作。集成测试可以发现单元之间接口的不兼容或交互中的错误。

  • 压力测试:压力测试(Stress Testing)用于确定系统在高负荷情况下的性能和稳定性,通过模拟高强度的工作负荷、庞大的数据量和长时间工作来发现系统的瓶颈和弱点。

  • 回归测试:回归测试(Regression Testing)是在软件修改后进行的测试,目的是验证新代码是否引入了新的错误,确保先前正常工作的功能仍然正确。

数据构造策略

  1. 边界值分析:测试数据选择在边界值处,确保系统在极端情况下的稳定性。
  2. 随机测试:随机生成测试数据,增强测试的覆盖范围和随机性。
  3. 异常测试:输入非法数据或异常情况,测试系统的健壮性和错误处理能力。

架构设计与分析

类图

img

作业中,基于课程组提供的Person Network Tag Message等jml规格,实现了对应的MyPerson MyNetwork等类,实现了一个简单的社交网络,可以实现向网络中添加人、关系,或进行简单的关系查询,消息发送等。

图模型构建与维护策略

采用链式前向星的方式存储图内的边。
维护一个并查集,用来计算blocksum等,每当删除了存在于同一个的边,标记该并查集不可用,并在下次查询并查集时进行重建。
对于triplesum等可能被连续多次查询的值进行维护,当涉及到的person或relation发生改变的时候,标记其不可用,并在下一次查询时进行更新。

性能问题与修复情况

本单元第10次作业中,出现了TLE的错误,其主要原因是在方法queryTagValueSum的实现中,每次都需要调用isLinked方法进行重新计算,且采用三重循环的方式,大大降低了代码的性能。

解决

  • 代码优化:删除冗余代码(如每次qtvs需要重新检查连接性),提高执行效率。
  • 缓存机制:引入缓存机制,保存每个tag的valueSum,并且当且仅当更新tag中的人或者关系时进行更新,减少重复计算,提高数据访问速度。

规格与实现相分离

规格与实现相分离,是一种重要的编程思想。即规格给定的只是此方法的输入、输出,以及调用方法前后对于对象状态的规定,并不关心具体的实现方式。
在实现代码时,要确保自己的代码能够满足规格的要求,同时还要注意代码的复杂度,优化代码的长度,并且使代码有较强的鲁棒性。
总的来说,规格是实现的前提,实现要以规格为最低目标。

Junit测试与JML

规格信息提供了方法调用前后对象内部成员的“变化规律”和“不变量”,严格依据规格信息进行测试,可以保证方法的正确性。在撰写Junit测试的过程中,总结了以下两点经验:

  • 利用规格信息:根据规格文档设计测试用例,确保覆盖所有功能需求和边界情况。
  • 测试用例全面:先编写测试用例,覆盖数据边界,确保实现过程严格遵循规格。

学习体会

通过第三单元的学习和实践,我深刻体会到软件测试在软件开发中的重要性。测试不仅是保证软件质量的关键,也是提升开发效率的重要手段。通过不同类型的测试方法,我们可以全面、系统地发现和解决问题,从而构建出高质量的软件产品。在未来的开发工作中,我将继续深入学习和应用这些测试技术,不断提高自己的专业能力。

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

301

社区成员

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

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