一、关于面向系统测试(System Testing)的理解
面向系统测试(System Testing)是一种独特的测试方法论,其核心视角聚焦于系统本身,将被测系统视为一个不可分割的整体。这种测试方法强调从系统的宏观角度出发,全面考察其各项功能和性能,以确保系统作为一个整体能够稳定、高效地运行。在面向系统测试中,我们不再将系统拆分成单独的模块或组件进行逐一测试,而是将其视为一个完整的、有机的整体。这种测试方法有助于我们更全面地理解系统的结构和行为,从而发现那些可能在模块测试中难以察觉的问题和缺陷。
二、软件测试日常遇到的问题
在许多项目中,我们常常发现测试人员缺乏一个整体的测试概念。他们往往局限于对单一模块或功能的测试,而未能从整个系统的角度进行全面、综合的考量。
导致这种现象的原因有以下几个方面:一是源自测试任务的细分,在大型项目中测试任务往往被过度细分成多个模块或功能点,这种细分可能导致测试人员只关注自己负责的部分,而缺乏对整体系统或业务流程的全面理解。二是在紧张的项目进度和资源限制下,测试人员可能更关注于完成具体的测试任务,而不是花时间去思考和理解整个系统的结构和功能。三是一些测试人员可能过于关注细节和技术实现,而忽视了从战略和业务角度思考整体系统测试「1」的重要性。而上述这些现象,则可能会引发一系列的问题,这些问题可能涉及项目质量、进度、团队协作以及用户体验等多个方面,下面是笔者分析的可能出现的几个问题点:
1.测试覆盖率不足:缺乏整体测试概念的测试人员可能只关注特定部分或功能的测试,而忽视了其他关键部分。这可能导致一些重要的功能或业务流程没有得到充分的测试,从而增加了产品上线后出现问题的风险。
2.遗漏关键测试场景:没有整体测试概念可能无法全面识别和理解所有潜在的测试场景。这可能导致关键场景被遗漏,从而增加了产品在实际使用中遇到问题的可能性。
3.测试资源浪费:如果测试人员只关注细节而忽视整体,他们可能会在不重要的地方花费过多时间和精力,而忽略了更需要关注的关键点。这会导致测试资源的浪费,降低测试工作的效率。
4.团队协作问题:缺乏整体测试概念的测试人员可能与其他团队成员之间存在沟通障碍。他们可能难以理解开发人员的意图或产品经理的需求,导致团队协作出现问题,影响项目的整体进度。
5.用户体验受损:测试的目的是确保产品的质量和用户体验。如果测试人员没有整体测试概念,可能会忽视一些对用户体验至关重要的细节。这可能导致产品在实际使用中出现操作不便、界面不友好等问题,影响用户体验。
6.安全隐患:可能存在的安全漏洞。未经系统测试的软件在面临风险时,难以有效应对。
7.维护成本增加:复杂问题的排查和定位更加困难,难以进行持续的优化,进而影响产品的竞争力。
三、面向系统的测试
为了解决上述问题,笔者认为在项目初期就需要引入面向整体系统的测试方法。那么到底什么是面向整体系统测试呢?首先,面向系统的测试是指站在被测系统的角度,对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义。并且面向系统的测试可以验证方法函数是否正确,功能是否正常,需求是否满足。
3.1系统测试的测试类型
面向整体系统的测试方法论包含了以下几种测试类型:
3.1.1黑盒测试:
主要针对系统的功能和行为进行测试,不需要了解系统内部实现细节。
3.1.2白盒测试:
主要针对系统的内部结构和实现进行测试,需要了解系统具体实现细节。
3.1.3灰盒测试:
介于黑盒测试与白盒测试之间,主要是对接口进行测试。
3.1.4集成测试:
主要针对系统的各个模块之间的交互和数据传递进行测试,确保系统整体功能正常。
3.1.5冒烟测试:
主要对系统的主要功能进行测试,验证系统是否能够正常启动和运行。
3.1.6性能测试:
主要对系统的各种性能指标进行测试,如响应时间、并发用户数、吞吐量等。
3.2面向系统测试和传统功能测试比对
乍一看这些测试类型好像和传统的功能测试很相似,其实由于面向类型的不同,面向系统测试和传统功能测试在多个方面存在显著的区别。
3.2.1首先从测试对象的角度来看,传统测试主要关注系统的功能和流程,以验证系统的正确性和稳定性。而面向系统测试则更加关注系统本身的完善性和健全性,验证方法函数是否正确,功能是否正常,需求是否满足。这意味着传统测试更侧重于功能性验证,而面向系统测试则更全面地考虑系统的各个方面。
3.2.2其次从测试策略和方法上来看,传统测试通常具有明确的阶段性,从需求评审、设计评审、单元测试到集成测试、系统测试等,分阶段进行。而面向系统测试可能更强调持续测试和质量反馈,没有明显的阶段性界限。此外,传统测试往往是在编码之后进行,主要测试对象是程序代码。而面向系统的测试则可能在没有代码的情况下进行测试,贯穿软件开发的全过程。
3.3.3最后从测试人员的角色和责任上来看,传统测试通常将开发人员和测试人员角色分得比较清楚,测试人员主要负责执行测试用例和报告测试结果。而在面向系统测试中,测试人员可能需要更深入地参与到系统的设计和开发过程中,以便更好地理解系统的结构和功能,从而进行更有效的测试。
四、根据案例“在线购物系统”分析
4.1在线购物系统
上面说了很多介绍和理论知识,可能有些读者已经理解了,但估计还有一些仍然会存疑,为了帮助大家更好的理解,以下用一个具体的“在线购物系统”例子,展示了面向系统测试和传统测试在实际工作中的应用场景。
以上图为例,假设一个互联网公司正在开发一个在线购物系统,该购物系统包括用户管理、商品浏览、购物车管理、订单处理等多个功能模块。
4.2传统测试应用场景
传统测试的应用场景:
4.2.1功能验证:
测试人员根据需求文档和设计文档,编写测试用例,对系统的各个功能模块进行详细的测试。例如,测试用户注册、登录、浏览商品、添加商品到购物车、提交订单等功能是否正常工作。
4.2.2边界测试:
测试人员会关注输入数据的边界情况,如用户名长度限制、密码复杂度要求等,以确保系统在异常输入下能够给出正确的响应。
4.2.3回归测试:
当系统修复了某些已知问题或添加了新功能后,测试人员会重新执行之前的测试用例,以确保之前的功能没有受到影响,并且新添加的功能也能正常工作。
4.3面向系统测试的应用场景
4.3.1集成测试:
面向系统测试会关注各个功能模块之间的交互和集成情况。例如,测试人员会模拟用户从浏览商品到下单支付的整个流程,确保不同模块之间的数据传递和交互是正确的。
4.3.2性能测试:
测试人员会对整个系统进行性能测试,包括系统的响应时间、吞吐量、并发用户数等指标。通过模拟大量用户的并发访问和操作,测试人员可以评估系统的性能表现,并找出可能的性能瓶颈。
4.3.3安全测试:
面向系统测试还会关注系统的安全性。测试人员会尝试各种攻击手段,如SQL注入、跨站脚本攻击等,以检查系统是否存在安全漏洞。
在这个例子中,传统测试和面向系统测试是相辅相成的。传统测试确保了系统各个功能模块的正确性,而面向系统测试则从更高的角度考虑系统的整体性能和安全性。通过结合使用这两种测试方法,公司可以更加全面地评估在线购物系统的质量和稳定性,确保最终交付给用户的是一个可靠、高效的产品。
4.4系统测试的难点
所以通过上面这个真实案例,我们可以简单归纳一些面向系统测试的难点如下:
4.4.1测试环境和用户环境有出入:
在测试过程中,我们时常发现测试环境与用户环境存在差异,这主要是因为测试环境未能完全模拟用户环境的配置和条件。这种出入使得一些特定的BUG在测试环境中无法被重现,而它们却可能在用户环境中暴露出来。这种现象往往导致我们面临一个困境:一些只有在用户环境中才能出现的BUG,在测试阶段无法被及时发现和修复。这就需要加强与用户的沟通和反馈机制,以便及时发现并解决这些潜在的BUG。
4.4.2多个系统模块之间的单据状态没有统一规则:
使系统流向不明确,甚至有些系统之间的表单无法交互,在实际工作中我们常常遇到,一些系统的测试环境是不work的,这就导致了测试流程断裂。
4.4.3用户需求理解不到位:
在项目的推进过程中,由于测试人员与用户之间的视角差异,往往导致对用户需求的理解存在偏差。这种理解不到位的情况,直接影响了测试人员的工作效果,使得测试结果无法准确反映用户的真实需求和期望。
4.4.4测试周期被延长:
在项目的实施过程中,由于需要模拟完整的链路并进行详尽的测试,测试周期被不可避免地延长了。这一过程中,我们需要投入大量的时间和精力准备数据、调试环境,确保测试环境的稳定性和准确性。然而,这些额外的工作也带来了一个问题,那就是它们占用了原本就紧张的项目时间。这样的情况无疑给项目团队带来了更大的压力,我们需要在保证测试质量的同时,尽量缩短测试周期,确保项目能够按时交付。
除上述内容外,面向系统测试的难点还包括软件研发流程的变化、软件测试面临的挑战、测试开发工程师发展之路等。这些话题太大,在此就不做展开了,如果有兴趣的读者也可以私下联系笔者进行讨论。
4.5系统测试的收益
虽然有上面所说的各种各样的困难,但是在实际工作中必须要迎难而上,克服困难之后,也会有如下的一些可观的收益:
4.5.1能够显著提高产品质量:
质量始终是测试人员的重中之重,通过系统测试可以发现并纠正更多的问题,使软件系统的质量得到更好的保证。
4.5.2能够提高用户满意度:
系统测试的目的是确保软件系统满足用户需求和规格说明书的要求,提高了用户满意度。
4.5.3能够降低软件开发成本:
通过系统测试可以发现和解决软件系统中存在的缺陷和问题,避免在后期开发中出现重大问题,这样可以降低软件开发成本。
能够提高软件开发效率:通过系统测试可以发现系统中存在的各种缺陷和问题,并及时解决,避免对用户造成不必要的影响,这样可以提高软件开发的效率。
五、结束语:
研究面向系统的测试,旨在提升软件系统的质量与稳定性,确保系统精准满足用户的需求和规格说明书的要求。通过这一研究,我们不仅能够降低软件开发和测试的成本,提高软件开发和测试的效率,更能够全面揭示系统中可能存在的各类缺陷和问题,从而迅速解决,避免对用户造成任何不必要的影响。这样的做法将极大地提升用户的满意度和信任度,为软件产品的长期发展奠定坚实的基础。因此,面向系统的测试研究对于软件产品的研发和测试而言,具有至关重要的意义。它不仅有助于提升软件的整体质量,更是保障用户利益、提升用户体验的关键环节。
文末了:
可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。同时我邀请你进入我们的软件测试学习交流平台,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,了解测试行业的最新趋势,助你快速进阶Python自动化测试/测试开发,稳住当前职位同时走向高薪之路。