BUAA_OO_Unit3总结

本单元测试过程

黑箱测试与白箱测试

黑箱测试:又称功能测试,主要用于集成测试和确认测试阶段。它把软件看作一个不透明的黑箱,完全不考虑(或不了解)软件的内部结构和处理算法,它只检查软件功能是否能按照软件需求说明书的要求正常使用,软件是否能适当地接收输入数据并产生正确的输出信息,软件运行过程中能否保持外部信息(例如文件和数据库)的完整性等。

白箱测试:又称结构测试,主要用于单元测试阶段。它的前提是可以把程序看成装在一个透明的白箱子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部逻辑设计测试用例,检测程序中的主要执行通路是否都能按预定要求正常工作。

区别:黑盒测试只在软件接口处进行,黑盒顾名思义,我们把测试对象看作一个黑盒子,我们无法看清里面具体是什么,只能给定输入,通过观察输出来判断是否有效。
白盒测试则是可以看见程序内部,是对于一个模块一个模块进行较为精细的测试。

单元测试、功能测试、集成测试、压力测试与回归测试

单元测试:是完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。

功能测试:也叫行为测试, 通常是黑箱测试的一部分, 即测试人员完全不知道程序的内部如何运行。功能测试是所有测试工作中占比最大, 也是最重要的部分。主要是需求分析师根据用户需求编写出功能的用例, 然后由测试工程师编写测试用例, 并逐项进行测试验证, 确保执行结果与预期的结果一致。

集成测试:也叫组装测试或联合测试,是单元测试的逻辑扩展。集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。

压力测试:是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力,并确保软件在危急情况下不会崩溃。它甚至可以测试超出正常工作点的测试,并评估软件在极端条件下的工作情况。

回归测试:是指在软件项目中,开发人员在修改了软件的代码以修复已经发现的bug后,测试人员在需要重新测试前面已经测试过的内容,以确认此次修改没有引入新的错误。 也就是说,回归测试的目的就是检查开发人员在修复已有bug时是否又导致了新的bug。

数据构造的策略

1.构造边界数据:构造会触发边际条件的数据,测试在极端条件下是否会发生异常。

2.构造大规模数据:测试程序的综合性能表现。

3.构造针对性数据:构造对各个方法的针对性测试,测试每个方法的性能表现。

架构分析

图模型构建

在MyPerson类中使用 HashMap<Person,Integer> 储存与其相连的Person,其中HashMap的value值表示Person的id。这样储存无论是添加、删除还是查找的复杂度都为O(1),应该是性能最优的储存方式了。

同样在MyNetwork类中仍然使用HashMap储存person,message,tag和emojis。

图维护策略

对每个针对图的修改,都根据JML语言直接执行,只需使用一些算法保证程序的最大复杂度为O(n),就不会超时。

性能问题与修复

性能问题都是由于未采用最优算法,导致部分方法的复杂度大于O(n),这就导致针对这种方法的测试中出现超时的问题。

修复方法是采用更优的算法,将这些方法的复杂度降到O(n)。如MyNetwork中的queryTripleSum()方法,最终采用动态维护的方法降低了复杂度、

对规格与实现分离的理解

规格与实现分离是一种软件设计原则。在这种原则下,对于给定的规格,开发者并不需要严格按照规格的定义去编写代码。相反,他们应该寻找一个算法或好的方法来完成规格要求,而不是简单地翻译规格的定义。

这种分离的思想体现在,规格的作用是描述系统应该做什么,而不是限定实现方式。开发者在实现过程中,可以根据实际情况选择最合适的算法、数据结构或技术来完成任务。只要最终结果满足规格的前置和后置条件,就可以认为实现是正确的。

这就好比一道编程题,规格相当于题面,它只会告诉你需要实现的功能,但具体的实现方法并没有规定,需要你自己去实现。

Junit测试

设计

在设计JUnit测试时,充分利用规格信息至关重要。通过明确方法的输入、输出、前置条件、后置条件以及异常行为,我们能够编写出更准确、更全面的测试用例,确保代码按照预期运行。从规格中提取功能需求,设计测试用例保证每个功能点都被覆盖。同时,可以根据规格的信息设计边界测试,保证程序的正确性。

效果

通过设计JUnit测试,能覆盖多种数据情况,测出了部分方法的bug。

学习体会

虽然本单元的作业整体难度较为简单,但我作业处理的情况并不是很好,主要问题有两个,一是算法选择的错误,导致部分测试点超时。二是过分依赖别人的评测机,导致部分bug只在强测暴露出来。所以以后还是要充分做好课下的测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值