2024BUAA-OO-Unit3总结

测试过程

黑箱测试与白箱测试

黑箱测试

        也称功能测试、数据驱动测试,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试。黑盒测试是从一种从软件外部对软件实施的测试,也称功能测试或基于规格说明的测试。其基本观点是:任何程序都可以看作是从输入定义域到输出值域的映射,这种观点将被测程序看作一个打不开的黑盒,黑盒里面的内容(实现)是完全不知道的,只知道软件要做什么。因无法看到盒子中的内容,所以不知道软件是如何实现的,也不关心黑盒里面的结构,只关心软件的输入数据和输出结果。

优点:

  • 与软件具体实现无关,如果软件实现发生了变化,测试用例仍可用;
  • 设计黑盒测试用例可以和软件实现同时进行,因此可压缩项目总开发时间。

白盒测试

        也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。它是一种需要了解软件内部代码结构和实现细节的测试方法。其重点在于检查软件的内部逻辑是否正确,是否符合设计要求,以及代码是否达到预期的覆盖率。

优点:

  • 深入测试代码的内部逻辑,发现一些黑盒测试无法发现的错误。同时可以评估代码的覆盖率,更全面地了解测试的质量。

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

  • 单元测试:单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函数、方法、类、功能模块或者子系统。单元测试通常和白盒测试联系到一起。
  • 功能测试:测试软件的功能是否符合需求,通常采用黑盒测试方法,一般由测试人员独立执行。
  • 集成测试:通过测试发现与模块接口有关的问题(模块与模块之间的调用)。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成,而采用增量集成。(接口测试)
  • 压力测试:高负载的情况下进行的性能测试,目的不是为了获取性能指标,而是想要了解系统是否稳定。
  • 回归测试:回归测试是指在代码发生修改之后重新测试先前的测试用例以保证修改的正确性。

数据构造的策略

  • 对于person方面的测试数据,考虑图的相关性质,分为三类,构造了完全图、不含边的图、随机图。其中,随机图生成的数量较多,以尽可能提高方法的覆盖率。
  • 对于tag方面的测试数据,主要采用随机生成的方式。对于一些特殊要求,例如tag最大容量1111需要手动添加一些数据。
  • 对于message方面的测试数据,采用随机生成的方式,其中需要注意考虑到生成不同种类的message。

架构设计与优化策略

uml图

图模型构建与维护策略

第一次作业

        第一次作业主要需要维护两个变量——三角形数量和连通分支数。其中三角形数量在每次addRelation和删除relation时进行检查维护,而连通分支数通过并查集来进行维护,并查集采用压缩策略进行维护,需要每次删除关系时进行重建压缩。

第二次作业

        第二次作业主要需要优化tag类里的几个计算方法和network中的coupleSum与最短路径。tag中维护valueSum、ageSum、ageVarSum三个变量,需要在ar、mr、att、dft等涉及tag中person修改的地方进行维护,还需要注意计算方差时要进行合适的取整。对于coupleSum维护这一变量,在ar、mr时进行检查维护。对于最短路径问题,采用BFS方法进行查询,在每次查询后记录这个起点的结果,并设置dirty标志,在addRelation时设置dirty。

第三次作业

        第三次作业不需要特别的维护策略,按JML要求实现即可。

性能问题与修复

问题修复

        在前两次强测中均出现了CTLE问题,其中第一次是因为每次查询三角形均遍历导致的,第二次是因为ar、mr时检查tag相关变量时过于复杂。修复为上文相关维护策略。

规格与实现分离

        JML规格只是用精确的语言描述出方法的前置条件、后置条件、异常情况、返回值等,并不规定具体的实现,在实现具体的方法时,我们需要充分理解规格的要求,再结合已知的数据结构和算法进行实现。

JML规格与Junit测试

        Junit测试方法时要严格按照JML规格进行测试。对于每一句requires、asignment、ensures都要进行充分检查,对于抛出异常的情况也要进行检查。

心得体会

  • 本单元JML规格结合Junit测试让我学会了更有效的测试数据生成与方法测试。
  • 本单元作业中各方法的性能优化让我复习、学习了相关的数据结构与算法。
  • 本单元作业让我体会到JML是一种能精准描述方法前置条件、后置条件、返回值的语言。它在一些复杂的情况下相较于自然语言具备优势。然而在本单元这样的较简单情景下不如自然语言的简洁性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值