301
社区成员
发帖
与我相关
我的任务
分享黑箱测试是不关注程序内部代码的运作情况,在不知道代码结构的前提下对程序功能进行的测试;而白箱测试是针对程序的代码结构,对每条分支、每行代码进行充分覆盖的测试,更针对代码的逻辑。
其中本单元要求进行的更偏向于黑箱测试,但测试的最小单元小于一般的黑箱测试 (方法而不是程序)。
单元测试是指对软件中的最小可测试单元进行检查和验证,它可以确定程序中的最小单元的功能是否基本正确。
功能测试是指针对程序各项功能进行的测试,用于验证程序的功能是否符合预期。通常与黑箱测试相联系。
集成测试是指将所有模块按照设计要求 (如根据结构图) 组装起来进行测试,它可以用于验证各模块之间的接口是否符合预期。通常建立在单元测试的基础上。
压力测试是指程序在高压极端环境下进行的测试,用于验证程序在高负载条件下的健壮性和性能。
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。它可以确保版本迭代过程中尽可能不对原本的功能产生影响。
采用基本的邻接表模式。每个节点使用HashMap保存自己相关的边和边权即可。由于Person类并不需要通过自己对其他Person进行操作,所以只需要根据id存储边权的一个HashMap即可满足需求,不需要保存对应的Person对象。
直接根据指令进行修改,同时对各项查询的数据进行同步维护。
性能问题主要体现在高估了$O(n^2)$的处理速度,在tag的ValueSum查询的时候出现了问题。通过动态维护即可修复。 (不过既然$O(n^2)$能卡掉的话queryBlockSum为啥不卡呢,无论动态维护还是动态查找都能在极端情况下卡到平方复杂度啊)
规格与实现分离则是一个老生常谈的问题了。事实上,除了一些简单的判断性和加边删边之类的功能性方法,应该基本没有方法的视线能够和规格一致的。这其实也是规格与实现的要求不一致导致的。对于规格,应该尽可能不影响实现的方法,尽可能简单地描述出类与方法的性质,方便之后根据规格实现方法。这样的要求就导致规格描述中应该尽可能避免复杂算法的出现,也不会避讳使用复杂度高的描述。而实现相反,需要考虑复杂度的问题,需要使用算法。所以规格与实现分离式必要的。
规格信息直接为测试提供了正确性验证的条件。在数据构造策略合理的情况下,只需要根据结果、副作用等是否符合规格的描述即可完成测试的设计。
音理好