OO-24-Unit3

王畅-22373217 2024-05-16 10:53:41

OO-24-Unit3


一、本单元的测试过程

1.黑箱测试与白箱测试

    黑箱测试是不关注程序内部代码的运作情况,在不知道代码结构的前提下对程序功能进行的测试;而白箱测试是针对程序的代码结构,对每条分支、每行代码进行充分覆盖的测试,更针对代码的逻辑。

    其中本单元要求进行的更偏向于黑箱测试,但测试的最小单元小于一般的黑箱测试 (方法而不是程序)。

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

单元测试:

    单元测试是指对软件中的最小可测试单元进行检查和验证,它可以确定程序中的最小单元的功能是否基本正确。

功能测试:

    功能测试是指针对程序各项功能进行的测试,用于验证程序的功能是否符合预期。通常与黑箱测试相联系。

集成测试:

    集成测试是指将所有模块按照设计要求 (如根据结构图) 组装起来进行测试,它可以用于验证各模块之间的接口是否符合预期。通常建立在单元测试的基础上。

压力测试:

    压力测试是指程序在高压极端环境下进行的测试,用于验证程序在高负载条件下的健壮性和性能。

回归测试:

    回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。它可以确保版本迭代过程中尽可能不对原本的功能产生影响。

3.数据构造策略

  • 1、构造大规模随机数据。通过尽可能提高图的复杂度和稠密度来暴露程序的问题。
  • 2、构造特化的边际数据。检验程序对边际条件的处理。

二、本单元的架构设计

1.图的构建

    采用基本的邻接表模式。每个节点使用HashMap保存自己相关的边和边权即可。由于Person类并不需要通过自己对其他Person进行操作,所以只需要根据id存储边权的一个HashMap即可满足需求,不需要保存对应的Person对象。

2.图的维护

    直接根据指令进行修改,同时对各项查询的数据进行同步维护。


三、性能问题及修复与规格和实现分离

    性能问题主要体现在高估了$O(n^2)$的处理速度,在tag的ValueSum查询的时候出现了问题。通过动态维护即可修复。 (不过既然$O(n^2)$能卡掉的话queryBlockSum为啥不卡呢,无论动态维护还是动态查找都能在极端情况下卡到平方复杂度啊)

    规格与实现分离则是一个老生常谈的问题了。事实上,除了一些简单的判断性和加边删边之类的功能性方法,应该基本没有方法的视线能够和规格一致的。这其实也是规格与实现的要求不一致导致的。对于规格,应该尽可能不影响实现的方法,尽可能简单地描述出类与方法的性质,方便之后根据规格实现方法。这样的要求就导致规格描述中应该尽可能避免复杂算法的出现,也不会避讳使用复杂度高的描述。而实现相反,需要考虑复杂度的问题,需要使用算法。所以规格与实现分离式必要的。


四、规格与测试

    规格信息直接为测试提供了正确性验证的条件。在数据构造策略合理的情况下,只需要根据结果、副作用等是否符合规格的描述即可完成测试的设计。


五、学习体会

  • 1、规格的引入对于程序设计带来了一定的便利,直观的体现出了各个类和方法的边际条件、错误来源等,保证了基本的正确性。
  • 2、过于依赖规格描述需求也对程序设计造成了麻烦。缺少自然语言的描述造成方法功能的理解不够直观等都是纯粹规格描述的副作用。采用规格与自然语言相辅相成的描述方式应该可以最大程度的便利程序设计。
  • 3、下次作业二修改了性能问题记得更新到作业三上。

...全文
46 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
洪陈天一 助教 2024-05-16
  • 打赏
  • 举报
回复

音理好

301

社区成员

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

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