北航OO第三单元总结

测试分析

        1.黑箱测试

              以输入数据和输出数据的对应关系为出发点,只使用程序的输入输出接口,不考虑内部结构和内部实现,检查程序能否接收数据并且正确的输出数据。具体而言,对拍和评测机都是黑箱测试。

        2.白箱测试

                针对程序具体的内部实现逻辑,在程序各个部位进行检测,希望逻辑上和结果上俩个方面均正确,比较耗时,具体形式有JUNIT,而对于OO作业而言,如此耗时的测试方法并不适合。

        3.单元测试

                单元测试是针对软件中最小的可测试单元进行的测试,通常是对单个函数、方法或类进行测试。本质是一种白箱测试,检查代码的逻辑和输出是否正确。

        4.功能测试

                顾名思义,对功能进行测试,本质是黑箱测试,只关注单个或单组功能的实现,不关注功能与功能之间的影响。只要实现功能,即视作通过功能测试,所谓“黑猫白猫,抓住老鼠的就是好猫”

        5.集成测试

                对整个系统的测试,检查功能与功能之间的联动是否正确,可以检测接口问题,数据传输问题以及模块之间的兼容性问题。

        6.压力测试

                构造极端条件的数据对程序进行测试,具体为构造数据范围内的最大样例和调用大量线程,模拟大量用户并发和大数据量,并且限制系统的处理时间,观察系统能否在规定时间内处理大量数据,从而监测系统的性能,资源消耗情况和死锁等问题。

        7.回归测试

                一般在迭代开发中使用,如果已测试过的代码被修改后,需要保证仍然可以实现预期的行为,并且不会引入新的错误而对其重新进行测试,保证代码的增量是符合正确性的。

测试工具

        JUNIT可以进行单元测试,自动生成测试框架,但其实框架当中的内容仍然需要自己填写,使用JNUIT本质上增加了测试的工作量,不如直接编写测试点,所以我并没有使用测试工具JUNIT。

数据构造

        对于高开销指令针对性的构造压力测试,具体方法为提高此种指令在全部指令中的占比。

        对于稀疏图和稠密图分别进行测试,覆盖全部指令。

架构设计

        单元架构根据JML规格所提供的的架构进行构建。

        维护策略是动态维护,第九次作业中的isCircle使用并查集和bfs俩种方法,这俩种方法都可以实现动态维护。

        对于queryBlockSum,根据并查集的实现,加点时一定是初始点,此时blockSum加1,加边时,假如俩个点不属于一个集合,那么意味着俩个集合会因为这一条新增的边而合为一个集合,此时blockSum减1。而关于删边,假如俩个点仍联通,则blockSum不变,否则因为一个集合分为俩个集合,blockSum加1。在以上情况发生的时候对blocksum进行修改,则在调用queryBlockSum函数的时候只需要取值,这是O(1)的复杂度,而不需要根据规格所说的多重循环计算,从而节约了开销。

        以上为例子,总结而言,需要确定维护的信息,并且在每个修改的操作后对信息进行维护。

规格与实现分离

        性能问题:举例而言,queryBlockSum函数的JML提出的方法是O(n^2)的复杂度,qcs本身的JML复杂度是O(n^2),但qcs内部调用的方法复杂度是O(n),这导致qcs本身的复杂度达到了O(n^3)。

        我想,在这种情况下,除非数据点比较宽容,否则这样的复杂度是很难通过测试的。

        因此,需要理解JML规格的意义,其意义在于明确了方法的功能,指出需要改变的变量,挑明返回的值和前置条件。但规格所提供的的方法并不适合直接翻译,而需要我们在实现的时候选取合适的数据结构,恰当的算法,以满足规格的形式下实现。

OKTest

        检查特定方法是否符合规格的前置条件和后置条件。编写OkTest的时候可以回顾规格的每一条,帮助我们再次审视方法的实现是否满足了全部的前置条件和后置条件,是不错的复习。

心得体会

        刚开始接触JML规格的时候还以为是注释呢,后来发现是用代码写的规格觉得好高级。后来慢慢理解规格的意义,理解规格与实现分离的思想。

        同时,对于测试的理解更加深入,理解了上述讨论的测试方法,学会保证程序正确性的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值