Buaa_OO_三单元总结

Buaa_OO_三单元总结

题目背景

一个完备的单线程社交系统。

测试过程分析

黑箱测试

在不考虑程序内部结构和实现细节的情况下,对软件系统进行测试,主要关注系统的输入和输出是否符合预期,以及系统是否满足需求和规格说明。黑箱测试通常由测试人员执行,其目的是发现系统中的功能和性能问题,以提高软件质量和可靠性。

在实践中,使用测评机生成上千组数据对程序进行测试。针对出现错误的数据进行分析,利用此数据进行白箱测试。

白箱测试

在考虑程序内部结构和实现细节的情况下,对软件系统进行测试,主要关注系统中的代码逻辑和程序执行路径是否正确。白箱测试通常由开发人员执行,其目的是发现系统中的代码错误和逻辑问题,以提高软件的可维护性和可扩展性。

在实践中,利用黑箱测试产生错误的数据寻找bug。首先阅读代码,寻找其中的代码错误和逻辑问题。对于仍然出现错误的数据则针对导致错误的部分进行调试,确保找到bug,并将其修复。

单元测试

对软件系统中的最小可测试单元进行测试,通常是一个函数或一个模块。单元测试的目的是验证代码的正确性和可靠性,以及提高代码的可维护性和可重用性。

在实践中,选择复杂的函数或模块构造针对性的数据进行测试。

功能测试

对软件系统的功能进行测试,主要关注系统是否满足需求和规格说明,以及是否符合用户的期望。功能测试的目的是发现系统中的功能缺陷和性能问题,以提高软件的质量和可靠性。

集成测试

对软件系统中的不同模块进行测试,主要关注模块之间的接口和交互是否正确。集成测试的目的是发现模块之间的集成问题和性能问题,以提高软件的可靠性和可维护性。

压力测试

对软件系统进行负载测试,主要关注系统在高负载情况下的性能和稳定性。压力测试的目的是发现系统中的性能瓶颈和资源竞争问题,以提高软件的可靠性和可扩展性。

在实践中,构造复杂数据。将数据条数提升到10000条左右,并且由巨量的复杂命令组成,测试数据正确性的同时检测程序运行时使用的内存大小与运行时间。针对出现的问题进行性能优化。

回归测试

对已经测试过的软件系统进行再次测试,主要关注已修复的缺陷和新功能是否影响了系统的其他部分。回归测试的目的是确保软件的稳定性和可靠性,在软件发布前进行最后的确认。

在实践中,保持各模块的独立性,降低耦合度,这样在修复bug的同时就不易造成其他问题。

架构设计

使用Dijkstra算法寻找最短路径,构建邻接矩阵存储边的权值。

  • 利用 ArrayList<ArrayList<Integer>> 构建邻接矩阵,随着点的增多动态增加列表大小,可以节省大量的储存空间。

性能优化

没有既省空间又省时间的方法,需要在二者之间寻找到一种平衡。

  • 空间优化

  • 时间优化

    • qcs 指令

      使用一些动态维护的变量。

    • qts qbs 指令

      利用递归来进行深度优先遍历。

    • qlm 指令

      使用 PriorityQueue 优化可以解决 strong_9 的 CTLE;

      使用普通算法可以解决 strong_4 的CTLE。

OKTEST

OKTEST对于检验代码实现与规格的一致性具有重要作用。

严格按照 JML 规格编写OKTEST,可以帮助我们更好地理解规格要求,发现代码实现中的错误和缺陷,以确保代码的正确性和可靠性。

学习体会

经过三次的迭代开发,一个完备的单线程社交系统呈现在我们面前。

总的来说,这次作业我觉得很容易实现,但是难点在于性能优化。在多次解决 CTLE 的过程中,我对递归、Dijkstra算法的理解不断加深,同时也更加认识到空间与时间之间的平衡的重要性。

最后对老师以及助教们的付出致以衷心的感谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值