社区
2024年北航面向对象设计与构造
作业提交
帖子详情
2024 BUAA OO 第三单元总结
余欣实-22373040
学生
2024-05-16 22:18:00
目录
一、三次作业的程序结构和度量分析
Homework1
Homework2
Homework3
二、本单元的测试过程
三、性能问题与修复情况
四、对规格与实现分离的理解
五、利用规格信息来更好的设计实现Junit测试,以及 Junit 测试检验代码实现与规格的一致性的效果
六、本单元学习体会
(2024
BUAA OO 第三单元总结)
一、三次作业的程序结构和度量分析
Homework1
第一次作业架构的类图如下:
本次作业将 Person 之间的关系作为 Person 类的静态成员进行存储,通过一个专门设置的 Division 类,将联通的 Person 进行分组,便于 query_block_sum 等指令返回值的动态存储
同时动态存储并修改 query_circle、query_triple_sum 指令的返回值,将程序的时间复杂度降到最低
Homework2
第二次作业架构的类图如下:
本次作业将 Person 的 Acquaintance 增加了新的数据结构,使得 Acquaintance 能实现按照题目给定的指标进行排序,便于 query_best_acquaintance、query_couple_sum 返回值的计算
对于 query_tag_value_sum、query_tag_age_var 指令的返回值,则在 MyTag 中对于中 Person 的 value 的总和与平方和的进行动态维护,并通过如下公式进行计算:
同时对于 query_shortest_path 指令的返回值,尽管只能以 BFS 进行遍历,但我另外使用了 Cache 为同一个连通分支存储已经查询过的 query_shortest_path 的值,进一步提高了查询和遍历的效率
Homework3
第三次作业架构的类图如下:
本次作业没有新增的优化内容,只是按照题目要求实现了 Message 相关的功能
二、本单元的测试过程
黑箱测试和白箱测试是软件测试中常用的两种方法
黑箱测试是基于软件的功能需求和规格说明进行测试,测试人员不需要知道软件内部的实现细节。测试者将输入数据输入系统,然后检查输出结果是否符合预期。这种测试方法类似于用户的角度,测试的是系统的功能和用户体验
白箱测试则是基于软件的内部结构和代码进行测试,测试者需要了解软件的内部逻辑和结构。白箱测试主要用于检查代码的正确性、执行路径覆盖率等,以确保软件在内部实现上是正确的
单元测试是对软件中的最小单元进行测试,通常是函数或方法。功能测试是验证软件的功能是否按照规格说明正常工作
集成测试是测试多个模块或组件在一起协作时的表现
压力测试是评估系统在负载压力下的表现
回归测试是在软件修改后重新执行之前的测试用例,以确保修改没有引入新的错误或影响了现有功能
在数据构造方面,有几种策略可以使用。一种是使用真实的生产数据,这样可以更接近真实环境,但可能涉及隐私问题。另一种是使用随机数据生成器生成测试数据,以覆盖各种边界条件和异常情况。还可以使用边界值分析和等价类划分等技术来选择测试数据,以确保测试覆盖全面
三、性能问题与修复情况
本单元主要产生的性能问题来自 query_shortest_path 的计算,由于性能上的微小差异,直接使用深度搜索的方法会在极特殊的情况下产生 TLE 问题,因此我加入了 Cache 机制以实现效率的提高
另一个值得警醒的教训就是关于 CompareTo 函数的重写,一定要考虑整形溢出的问题,不应简单地使用减法而是 Integer 类提供的静态方法来进行大小比较
四、对规格与实现分离的理解
规格与实现分离是软件工程中一项重要的设计原则,指的是将软件系统的规格与实现分开,以便更好地管理和维护软件系统
清晰的责任分离:规格描述了系统应该做什么,而实现则描述了如何实现这些功能。通过将规格与实现分离,可以使软件系统的责任更加清晰明确,有利于团队成员在不同层次上的协作与沟通
提高可维护性:当规格与实现分离时,如果需要修改系统的功能或行为,只需修改规格而不影响实现。这样可以降低修改的风险,并且更容易理解和验证系统的行为,从而提高软件系统的可维护性
支持多种规格:规格与实现分离使得系统可以支持多种规格,例如可以根据不同的需求编写不同的规格,而共享相同的实现。这样可以提高系统的灵活性和适应性,更好地满足用户的需求
测试与验证:规格与实现分离也有利于测试和验证软件系统。通过将规格作为测试的基础,可以更好地设计和编写测试用例,并且能够更容易地验证系统的正确性和一致性
总的来说,规格与实现分离是一种良好的软件设计原则,有助于提高软件系统的可维护性、灵活性和测试性,从而促进软件开发的质量和效率
五、利用规格信息来更好的设计实现Junit测试,以及 Junit 测试检验代码实现与规格的一致性的效果
设计 Junit 测试用例:基于JML规格信息,可以更准确地确定需要测试的行为和约束。例如,如果某个方法有前置条件和后置条件,可以将这些条件转化为测试用例中的测试条件。这样设计的测试用例将更全面地覆盖代码的各种情况,从而提高测试的有效性
验证规格的一致性:
通过编写 Junit 测试来检验代码实现是否符合JML规格的约束。测试用例可以检查方法的前置条件和后置条件是否得到满足,以及方法的行为是否符合预期。如果测试失败,说明代码实现与规格存在不一致,需要进一步调查和修复
利用JML注解:在编写 Junit 测试时,可以使用 JML 注解来指示测试用例的前置条件、后置条件和不变量。这样做可以使测试代码更加清晰和可读,同时也能更好地与 JML 规格对应,帮助验证代码的一致性
六、本单元学习体会
JML规格要求我们对软件系统的需求有深入的理解,包括对输入、输出、边界条件等方面的考虑。通过学习和编写JML规格,我更加清晰地理解了软件系统的功能和约束。同时JML规格可以作为测试用例的基础,帮助我们设计和编写更加全面和有效的测试用例,通过编写JML规格并将其转化为测试用例,我意识到了测试在软件开发过程中的重要性,并学会了如何编写高质量的测试用例
在架构和规格设计层面来编写 JAVA 程序,的确给人以全新的体验,程序开发又有了新的思维高度
...全文
49
回复
打赏
收藏
2024 BUAA OO 第三单元总结
目录一、三次作业的程序结构和度量分析Homework1Homework2Homework3二、本单元的测试过程三、性能问题与修复情况四、对规格与实现分离的理解五、利用规格信息来更好的设计实现Junit测试,以及 Junit 测试检验代码实现与规格的一
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BUAA
OO
2024
第三
单元
总结
文章讲述了在
BUAA
的
第三
单元
中,学生学习了如何构建人物联系网络MyNetWork,处理异常类统计输出,利用并查集判断节点连通性,增加Tag功能及维护相关统计,以及进行
单元
测试和黑盒/白盒测试的方法。JML规范在代码中的应用和实践是关键内容。
2024
BUAA
OO
第三
单元
文章讲述了如何根据JML语言实现MyNetwork和MyPerson类,采用HashMap存储数据以提高查询效率。涉及异常类处理、并查集优化isCircle查询、动态维护queryBlockSum和queryTripleSum方法,以及
单元
测试和性能优化策略。,
2024
年春
BUAA
OO
第三
单元
总结
本文探讨了JML在软件设计中的应用,特别是契约式编程思想,涉及
单元
测试、黑盒与白盒测试方法,以及如何通过层次化设计和架构优化来提高性能。作者还分享了在面向对象课程中的学习心得和体会到的
OO
原则实践。
BUAA
-
2024
春-
OO
-
第三
单元
总结
本文探讨了软件测试中的黑盒和白盒测试方法,以及
单元
测试、功能测试、集成测试、压力测试和回归测试的作用。同时,讲述了数据构造策略在软件开发中的应用,以及如何通过规格化编程和Junit测试提高代码质量。作者分享了对架构设计、性能问题修复和规格与实现分离的理解,强调规格在复杂方法设计和测试中的重要性。
BUAA
2024
面向对象设计与构造
OO
第三
单元
总结
本文详细阐述了在根据JML构建社交关系网络的过程中,涉及的测试策略、各种测试方法如黑盒白盒测试、
单元
测试等,重点讲解了并查集算法在并查集类设计和关系网络构造中的应用,以及如何通过Junit进行有效测试。作者还反思了算法选择对性能的影响和学习体会。,
2024年北航面向对象设计与构造
301
社区成员
738
社区内容
发帖
与我相关
我的任务
2024年北航面向对象设计与构造
2023年北航面向对象设计与构造
复制链接
扫一扫
分享
社区描述
2023年北航面向对象设计与构造
学习
高校
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章