301
社区成员
发帖
与我相关
我的任务
分享黑箱测试是只知道程序功能而不关心内部实现的一种测试,不关心程序内部实现而是对程序的接口的正确性进行验证是否能得到正确的输出。白箱测试时根据程序内部流程、逻辑对于来进行测试整个流程的正确性。
黑箱测试更抽象,测试更为简单便捷,但是准确性略差。白箱测试则更加具体,测试的数据构造更复杂,但是覆盖率高,可以更好测试程序正确性。
单元测试是对代码最小单元的测试,更加详细具体
功能测试是对代码的功能进行测试,检测程序的各个功能是否能正常完成
继承测试是对耦合后模块之间是否能正常交互的测试。
压力测试是对高压环境呀程序是否能够正常运行和运行效率的测试
在代码经过迭代之后,回过头测试之前测试过的功能,以确保迭代不会影响已经完成的部分。
需要根据程序每一部分的行为来制定有目的性、有特点的数据进行检测,这样的效果比随机的效果更好
数据需要有一定的规模,需要与边界条件接触,这样能更充分的测试程序的正确性,但规模并非越大越好,也需要考虑到调试的问题
本次任务需要实现图的加点,加边,修改边,连通性查询,三元环计数
类的结构与 JML 中基本保持一致,只是使用 HashMap 对点和边进行保存和查询。
连通性和三元环计数均放到加边删边的操作中进行维护
本次需要额外实现一个 Tag 的类及加 Tag,查询 Tag 之类的操作。此外还添加了 bestAcquaintance 和 couple 的查询
对于 Tag 的添加人和添加 Tag 都可以直接实现,仍然使用 HashMap。查询 Tag 中人的信息可以在 Tag 中加减人的时候进行维护,然后查询直接调用。
查询 TagValue 的时候枚举边即可保证复杂度
对于 bestAcquaintance 的查询,暴力实现不会影响复杂度,而 couple 的实现可以通过记忆 bestAcquaintance 保证复杂度。
本次需要额外实现一些 Message 类,完成相应操作
直接按照 JML 实现即可保证复杂度。
在任务的完成中,直接根据规格的实现是无法得到复杂度合适的做法的,需要根据规格理解函数的输入输出,通过合适的算法方法进行实现,这样才能做到合适的复杂度,也是规格与实现的分离。
从上述过程能看出来,规格只是规定了类和方法的黑盒行为,对于里面的实现和内容是没有规定的,而这个内容也就是实现是与规格相分离的,只要能满足即为合适的实现,也就是规格与实现的分离。
Junit 测试首先要对于各类 ensure 进行测试,只需要实现它的式子,进行判断即可。
其次对 not_assigned 进行测试,将原本的进行保存,再判断是否相等即可。
最后需要注意数据的强度和覆盖的范围
学习了 JML 的阅读和书写。我认为 JML 是一个非常有用的东西,对于复杂的作业和方法来说,其功能无法用简单的自然语言描述,并且可能会产生各种歧义,此时用准确无歧义的 JML 进行表达就可以保证接口在多人作业和维护的时候的准确性,这是在维护复杂的项目的时候所必须的。