BUAA OO 2024 Unit3 总结

张金涛-22373311 学生 2024-05-18 16:29:49

1.测试过程

1.黑箱与白箱

黑箱测试:

黑箱测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑箱子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口处进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑箱测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。

白箱测试:

白箱其实不是白色,而是透明的意思。这意味着我们能直观看到装在一个透明盒子里的程序。白盒测试又称为结构测试逻辑驱动测试,它允许测试人员利用程序内部的逻辑结构设计测试用例,对程序所有逻辑路径进行测试。

总结:黑箱测试只需要知其然,白箱测试则要知其所以然。

2.各种测试

1.单元测试

单元测试,是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函数、方法、类、功能模块或者子系统。

2.功能测试

功能测试,又称行为测试,根据产品特性、操作描述和用户场景,测试产品的特征和可操作行为,以确定其满足设计需求。功能测试软件,用来验证应用程序或网站是否能够为目标用户正常工作。用合适的平台、浏览器和测试脚本来确保目标用户的体验足够好,就像应用程序是为市场而专门开发的。功能性测试是根据功能要求对软件进行的测试,确保程序按照预期的方式运行,通过测试系统的所有特性和功能来确保程序与规范的一致性。

3.集成测试

通常,模块是由单个软件开发人员设计的,他们的理解和编程逻辑可能与其他程序员不同,必须进行集成测试,以验证软件模块可以统一工作。在模块开发时,客户有很大的机会改变需求。这些新要求可能未经过单元测试,因此必须进行系统集成测试。一个典型的软件项目由多个软件模块组成,这些模块由不同的程序员进行编码。集成测试的目的是在集成这些不同的软件模块时揭示它们之间交互中的缺陷。

4.压力测试

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

5.回归测试

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

3.数据构造策略

1.分类构造:将输入数据划分为若干个等价类,每个等价类代表一组具有相似特征的数据,在每个等价类中选择一个代表进行测试。类似于week数据点,每一类情况测试一次。

2.边界构造:测试输入数据的边界值,因为边界值往往是程序容易出错的地方。考验程序的极端情况。

3.随机构造:随机生成输入数据进行测试,以模拟用户随机操作或输入的情况。

2.架构设计

1.架构

 

3.维护策略

3.性能问题与修复

1.性能问题与修复

问题:遍历爆了,主要原因是在方法queryTagValueSum的实现中,每次都需要调用isLinked方法进行重新计算,且采用三重循环的方式,大大降低了代码的性能。

修复方式:引入缓存机制,保存每个tag的valueSum,并且当且仅当更新tag中的人或者关系时进行更新,减少重复计算,提高数据访问速度。

问题:

修复:qspTLE。

对于query_shortest_path指令,即查询非加权图两点最短路径问题,可以使用bfs或者双向bfs或者使用堆优化的dijkstra算法进行查询。

2.规格与实现分离

规格与实现相分离,是一种重要的编程思想。即规格给定的只是此方法的输入、输出,以及调用方法前后对于对象状态的规定,并不关心具体的实现方式。

规格与实现分离是指在软件开发过程中,将软件的需求规格和实现代码分开处理,使得两者的修改互相独立,从而提高软件的可维护性和可重用性。
在实现代码时,要确保自己的代码能够满足规格的要求,同时还要注意代码的复杂度,优化代码的长度,并且使代码有较强的鲁棒性。
总的来说,规格是实现的前提,实现要以规格为最低目标。

4.Junit测试

1.利用规格设计Junit测试

这里的测试仅仅包含了对功能正确性的测试,因此只需要保证输入输出符合要求,满足JML规定的不变式和限制条件即可,因此本质上,测试就是对JML的翻译。

利用规格信息:根据规格文档设计测试用例,确保覆盖所有功能需求和边界情况。

2.Junit测试检验代码实现与规格一致

对基本结构的翻译:前置条件,后置条件,副作用依次检验。
对关键细节的翻译:如对pure关键字需要验证前后未产生任何副作用。
对不变式的翻译:JML中会有全局的不变式,这是所有代码都要遵循的,因此此处也要验证。

测试用例全面:先编写测试用例,覆盖数据边界,确保实现过程严格遵循规格。

5.学习体会

通过第三单元的学习和实践,我深刻体会到规格在工业化流水线程序开发的重要性。写代码从来不是什么炫技和耍酷的事情,本质上和垒砖造墙是一样的。按照规格写代码,就像按照施工图纸建房子。通过规格,有利于培养我们作为程序员严谨的美德。

其次是软件测试在软件开发中的重要性。测试不仅是保证软件质量的关键,也是提升开发效率的重要手段。通过不同类型的测试方法,我们可以全面、系统地发现和解决问题,从而构建出高质量的软件产品。在未来的开发工作中,我将继续深入学习和应用这些测试技术,不断提高自己的专业能力。

...全文
78 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧