软件测试

使用人工或自动的手段来测定软件系统的过程

软件测试

软件测试(英文:Software Testing)[0]是根据软件开发各阶段的规格说明和程序的内部结构而设计一批测试用例,并利用这些测试用例来执行程序的过程。[1]软件测试通过使用人工或自动的手段来运行软件系统,[2]发现软件中存在的缺陷,从而保证软件质量。[1]软件测试伴随着软件的产生而产生,20世纪50年代,软件测试主要以调试为主,直到1957年,随着查尔斯·贝克(Charles Baker)所著图书《软件测试发展》的出版,才开始与调试区分开来。[3]随着软件技术的发展,软件的复杂程度越来越高,软件测试的意义开始被重视,多名学者开始出版专著对软件测试的定义和目标进行描述。到了20世纪80年代,[4]开发团队不再只是找出并修复软件错误,而是在现实环境中测试应用程序。[5]20世纪90年代,软件行业开始迅猛发展,出现了从测试到更全面的质量保证流程的转变。[5]整个测试的生命周期扩展为由计划、分析、设计、开发、执行和维护组成,即测试开始贯穿整个软件的生命周期。[3]21世纪以来,软件质量的重要性得到了全球的认可,智能测试时代正式开启。[6]

软件测试(英文:Software Testing)[1]是根据软件开发各阶段的规格说明和程序的内部结构而设计一批测试用例,并利用这些测试用例来执行程序的过程。[2]软件测试通过使用人工或自动的手段来运行软件系统,[3]发现软件中存在的缺陷,从而保证软件质量[2]

软件测试伴随着软件的产生而产生,20世纪50年代,软件测试主要以调试为主,直到1957年,随着查尔斯·贝克(Charles Baker)所著图书《软件测试发展》的出版,才开始与调试区分开来。[4]随着软件技术的发展,软件的复杂程度越来越高,软件测试的意义开始被重视,多名学者开始出版专著对软件测试的定义和目标进行描述。到了20世纪80年代,[5]开发团队不再只是找出并修复软件错误,而是在现实环境中测试应用程序。[6]20世纪90年代,软件行业开始迅猛发展,出现了从测试到更全面的质量保证流程的转变。[6]整个测试的生命周期扩展为由计划、分析、设计、开发、执行和维护组成,即测试开始贯穿整个软件的生命周期。[4]21世纪以来,软件质量的重要性得到了全球的认可,智能测试时代正式开启。[7]

软件测试的方法有黑盒测试、白盒测试和灰盒测试等,按测试过程又可分为单元测试、集成测试、系统测试等。[4]软件测试的目的不仅是简单地纠正软件的错漏,也是促使项目管理人员及时、准确地了解软件中潜在的漏洞与风险,从而在明确错误的基础上,采取有效的弥补措施,研究其产生的原因和相应的分布特征。[8]

发展历程

软件测试是伴随着软件的产生而产生的,20世纪50年代,计算机刚诞生不久,英国计算机科学家图灵给出了软件测试的原始定义。他认为,测试是程序正确性证明的一种极端实验形式。但当时相对于软件开发而言,软件测试还处于次要位置。软件测试的含义比较狭隘,开发人员将测试等同于“调试”,主要针对机器语言和汇编语言[5][4]直到1957年,随着查尔斯·贝克(Charles Baker)所著图书《软件测试发展》的出版,才开始将其与调试区分开来,这也是软件测试史上一个重要的里程碑。[4]

直到20世纪70年代,随着软件技术的发展,软件的复杂程度越来越高,软件测试的意义开始被重视。1972年,在北卡罗莱纳大学举行了首届软件测试正式会议。1975 年,约翰·顾德那夫(John Good Enough)和苏珊·格哈特(Susan Gerhart)发表了名为《测试数据选择的原理》的文章,使软件测试得到了许多研究者的重视。1979 年,哥伦福德·迈尔斯(Glendford J.Myers)出版了软件测试领域非常重要的一本专著《软件测试的艺术》,该书中对软件测试的定义、目标等进行了描述。[5]

到了20世纪80年代,人们的质量意识越来越高,[5]开发团队不再只是找出并修复软件错误,而是在现实环境中测试应用程序。[6]1983年,美国国家标准局提出了测试界很有名的两个名词:验证(Verification)和确认(Validation),即V&V理论。[4]同年,IEEE提出的软件工程术语中给软件测试也下了定义,指出软件测试是使用人工或自动手段来运行或测试某个软件系统的过程。[5]

20世纪90年代,软件行业开始迅猛发展,出现了从测试到更全面的质量保证流程的转变。[6]整个测试的生命周期扩展为由计划、分析、设计、开发、执行和维护组成,即测试开始贯穿整个软件的生命周期。[4]同时,软件规模的剧增映衬人工的测试效率非常低,一些测试工具开始发展,提高了软件测试的自动化程度。[5]

21世纪以来,软件质量的重要性得到了全球的认可。全球的标准化组织开始制定软件质量的标准和最佳实践。而随着人工智能和机器学习技术的发展,软件测试的方法也在不断进步,[7]敏捷测试开始受到欢迎,[9]它以小增量开发和测试系统,通常在编写代码、故事或功能之前开发测试。[10]在软件测试工具方面,商业化的软件测试工具,如捕获/回放工具、Web测试工具、性能测试工具、代码测试工具等大量涌现。[11]2023年,在2023世界人工智能大会上,出现了一种大模型测试技术,该技术可以更深入、全面的理解软件功能和性能,从而更准确找出软件开发中可能存在的问题和错误。[7]

测试目的

软件测试的目的在于检验被测系统是否满足规定的要求或弄清预期结果与实际结果之间的差别,通过测试分析错误产生的原因和错误的发生趋势,[11]促使项目管理人员及时、准确地了解软件中潜在的漏洞与风险,从而在明确错误的基础上,采取有效的弥补措施,研究其产生的原因和相应的分布特征。[1]最后证明软件的功能和性能与需求说明项目。[11]

测试原则

软件测试一般从用户和开发者两个角度来进行,通过测试,能够为开发者提供修改建议,以便其提供软件质量,同时为用户提供合格的软件产品。[2]测试原则可概括为以下内容:[5]

早期与持续测试

尽早地和不断地进行测试可以全面的发现缺陷。IBM360操作系统的历史教训[注1]表明,缺陷修复成本随着各个阶段的靠后而上升,软件缺陷的积累与放大效应是导致软件危机的最主要原因。另外,不应该把软件测试仅仅看作是软件开发的一个独立阶段,而应当把它贯穿于整个软件的生命周期中。[5]

不能完全覆盖

对一个程序进行完全测试就是意味着在测试结束之后,再也不会发现其他的软件错误了, 但这是不可能的。即使是规模很小的软件或者软件产品,其逻辑路径和输入数据的组合也几乎是无穷的,测试人员基本不可能实现对测试对象进行完全的检查和覆盖。[5]

避免开发者自测

测试工作应该由独立的软件测评机构或测试小组来完成,不能由开发人员承担,这是由于开发者有一定的思维定式,其设计的测试用例偏重于采用正常数据,而进行测试需要异常数据和边界数据。[2]

设计测试用例

测试用例是指执行条件和预期结果的集合,是针对要测试的内容所确定的一组信息,是为得到最佳的测试效果或高效地揭露隐藏的错误而设计的测试数据。[4]

测试用例应涵盖合法和非合法输入、边界条件及特殊状态,如网络中断或电源断电。[2]测试用例遵循“5C原则”:准确、清晰、简洁、完整、一致,以揭示隐藏错误。[4]

安排测试计划

在对软件进行测试之前所做的测试计划中,应该结合多种针对性强的测试方法,列出所有可使用资源,建立一个明确的测试目标,本着严谨、准确的原则做好测试前期的准备工作,避免测试的随意性。一个合理的测试计划有助于测试工作顺利有序地进行。[5]

测试模型

V模型

V模型体现开发任务和测试任务是相互对等的活动且同等重要的思想,V模型的左右两侧组成英文字母V的两个边,左侧代表软件开发过程,右侧则描述相应的集成和测试过程,通过不断组合软件组件,形成更大的子系统。V模型将测试分成了不同的级别,每个不同的测试级别都有各自主要的测试关注点和不同的测试目的,主要开发活动有用户需求、需求分析与系统设计、概要设计、详细设计和编码,相应的测试级别有单元测试、集成测试、确认测试与系统测试和验收测试[12]

V模型示意图
V模型示意图

W模型

W模型在V模型的基础上增加了软件开发各个阶段的验证和确认活动,由两个V组成,分别代表开发和测试过程[4],避免将最初的设计错误带入代码中再进行验证,造成程序错误难以回溯的问题。其强调测试过程伴随着整个软件的开发过程,测试的对象不仅是可运行的程序,还包括软件需求说明、设计以及源代码等,有利于尽早地全面发现软件设计过程中的问题。[12]在W模型中,开发、测试活动都保持着一种前后关系,只有上一阶段结束,才可以正式开始下一阶段的工作。[2]

W模型示意图
W模型示意图

H模型

H模型将测试准备和测试执行分离,[4]形成一个完全独立的流程,[2]测试准备包括测试需求分析、测试计划、测试设计、测试用例和测试验证等,而测试执行则包括测试运行、测试报告、缺陷分析和回归测试[4]当某个测试时间点就绪时,软件测试就从测试准备阶段进入测试执行阶段,[12]开展测试执行活动,并且不同的测试活动课按照某个次序先后进行,也可以反复进行。[4]

H模型示意图
H模型示意图

X模型

X模型强调单元测试和集成测试,[2]是对V模型和W模型的改进,X模型左边描述的是针对单独的程序片段进行相互分离的编码和测试,然后通过频繁的交接,最终集成为可执行的程序。[12]X模型还定位了探索性测试,这是一种不进行事先计划的特殊类型的测试,能够帮助测试人员在测试计划之外发现更多的软件错误。[2]

X模型示意图
X模型示意图

静态测试

静态测试是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程和接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序进行结构分析流程图分析、符号执行来找错。静态测试包括代码检查、静态结构分析、代码质量度量等。[4]静态测试从软件开发过程的早期开始进行,识别开发早期的缺陷,以助于提高软件质量[13]

动态测试

动态测试是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,动态测试由三部分组成:构造测试实例、执行程序、分析程序的输出结果。[4]动态测试是在编码和开发完成后进行的,目的是验证软件在不同场景中的功能和行为,结果包括功能、基础、系统、性能和可用性测试[13]

白盒测试

白盒测试专注于程序内部逻辑和结构,从开发者视角出发,直接对源代码进行测试,其核心在于不需基于功能测试,而是通过分析代码来发现潜在缺陷或错误。[14]这种测试方法能深入检查代码的每条分支和路径,确保代码覆盖率高,但缺点也比较明显,如对软件规格的正确性不进行验证,而且对测试人员的要求较高。[4]白盒测试的类型包括分支测试、路径测试和语句测试。[14]

白盒测试的过程
白盒测试的过程

对白盒测试设计测试用例时,依据程序的内部逻辑结构,一般采用逻辑覆盖法设计测试用例,常用的逻辑覆盖有:语句覆盖、判定覆盖、表达式覆盖、条件覆盖、判定条件覆盖、条件值组合覆盖、路径覆盖。[15][16]

语句覆盖设计足够的测试用例,使每一可执行语句至少执行一次
判定覆盖设计足够的测试用例,使每个判定的取真分支和取假分支至少经历一次
表达式覆盖设计足够的测试用例,使每个判定的每个条件至少计算一次
条件覆盖设计足够的测试用例,使每个判定的每个条件的所有可能取值至少执行一次
判定条件覆盖设计足够的测试用例,使每个判定中每个条件的所有可能取值至少执行一次,同时,判定的取真分支和取假分支至少经历一次
条件组合覆盖设计足够的测试用例,使每个判定的所有可能的条件取值的组合至少执行一次
路径覆盖设计足够的测试用例,使程序中所有可能的路径至少执行一次

黑盒测试

黑盒测试侧重于被测软件的功能实现,被测对象的内部结构、运作情况对测试人员是不可见的,测试人员把测试的软件系统看做一个黑盒子,不需要关心盒子的内部结构和内部特性,而只关注软件产品的输入数据和输出结果,从而检查软件产品是否符合它的功能说明。[14]相对于白盒测试而言,黑盒测试的测试数据的生成比较容易,但会造成程序路径的漏洞,难以发现复杂程序中隐藏的问题。[4]黑盒测试用例的设计方法主要有等价类划分法、边界值分析法、决策表法[14]因果图分析等。[17]

黑盒测试的过程
黑盒测试的过程
等价类划分等价类划分法是将程序所有可能的输入情况分成若干个子集,并从子集中挑选典型数据作为测试用例。[14]最为常用有效和无效两个等价类的划分,有效等价类是指软件规格说明书中规定的数据的集合,无效等价类是指超出软件规格说明书中规定的数据的集合[18]
边界值分析边界值分析是使某个等价类的每个边界都要作为测试条件,它的基本思想是选取正好等于、刚刚大于或小于边界的值作为测试数据[14]
决策表法决策表法是分析和表达多逻辑条件下执行不同操作情况的工具,能够将复杂的逻辑关系和多种条件组合的情况表达得具体又明确。决策表通常由条件桩、动作桩、条件项和动作项组成[18]
因果图法因果图是一种形式语言,相当于一种数字电路,一个组合的逻辑网络,使用简化的符号,包括恒等、非、或和与。[14]因果图法提供了一种把需求规格说明书转化为决策表的系统化方法,适合于检查程序输入条件的各种情况,[18]可以辅助测试人员明确测试对象、确定测试依据[14]

灰盒测试

灰盒测试是一种综合测试法,介于白盒测试与黑盒测试之间,它不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试以程序的主要功能和主要性能为测试依据,测试方法主要根据程序流程图、需求说明书以及测试者的实践经验来设计测试方法。[4]

单元测试

单元测试是对代码中的最小可测试部分进行检查的过程,它针对应用程序中的单个组件(通常是函数或方法)进行验证,以确保其正确性。单元测试的目的是验证代码块是否按照开发人员的预期逻辑执行。在单元测试中,通过提供输入值并检查输出结果的断言(真或假)来与代码块交互。 [19]

集成测试

集成测试是在单元测试的基础上,将所有的模块按照设计的要求进行集成,主要验证组装后的功能以及模块之间的接口是否正确安装的测试工作,主要目的是检测软件与概要设计说明说的符合程度。[4]

系统测试

系统测试是将已经通过集成测试的软件系统,与计算机硬件、外设、数据库、网络等其他元素结合在一起,在实际运行环境下,进行的一系列的测试工作,其目的是验证系统是否满足了需求规格,找出与需求规格不符或与之矛盾的地方,其通常由独立的测试团队来完成。[4]

验收测试

验收测试是部署软件应用之前的最后一个测试操作,分为正式验收测试(UAT)和非正式验收测试(α测试和β测试)。[4]

UAT即用户验收测试,在这个阶段,软件由目标受众或业务代表在“现实世界”中进行测试。这种类型的测试不是菜单驱动的,而是由用户执行,以验证应用程序是否满足最终用户的需求,并具有代表现场实际使用情况的场景和数据[20]
α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试,即软件在一个自然设置状态下使用,开发者坐在用户旁边,随时记下错误情况和使用中的问题,主要目的是评价软件产品的FLURPS(即功能、局域化、可用性、可靠性、性能等),尤其注重产品的界面和特色[4]
β测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试,与α测试不同的是,β测试时开发者通常不在测试现场,由用户记录在遇到的所有问题,包括客观的和主观认定的,定期向开发者报告,开发者在综合用户的报告后做出修改,再将软件产品交付给全体用户使用[4]

回归测试

回归测试主要指软件在测试或其他活动中发现的缺陷经过修改后重新进行测试,目的是验证修改后缺陷是否得到了正确的修复,同时需要关注有没有引入新的缺陷或导致其他代码产生缺陷或错误。[4]

回归测试流程图
回归测试流程图

功能和非功能性测试

功能性测试用于验证软件应用程序的功能,在功能测试性中,每个函数都通过给出值、确定输出以及用期望值验证实际输出来进行测试,[21]它涉及测试软件的特性和功能,例如输入/输出、错误处理和用户界面。[22]

非功能测试用于测试非功能参数,[23]侧重于测试软件的非功能方面,[22]例如软件的可靠性、负载测试、性能和问责制。非功能测试的主要目的是根据非功能参数测试软件系统的读取速度。[23]

性能测试

性能测试是指在一定软件、硬件及网络环境下,对系统的各项性能指标来进行测试,主要检测其特性能否满足特点的性能需求,常用的性能指标包括并发数、响应时间、每秒处理的事务数、吞吐量、点击率、访问量以及硬件资源等。[4]

自动化测试

自动化测试是一种让计算机代替测试人员进行软件测试的技术,通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试。[24]软件测试自动化实现的原理和方法主要有:直接进行静态和动态分析、测试过程的捕获和回放、测试脚本技术、虚拟用户技术和测试管理技术等。[25]基本的自动化测试框架有模块化测试框架、测试库框架和关键字驱动或者表驱动测试框架。[25]

容量测试

容量测试是指检查当系统运行在大量数据,甚至最大或更多的数据测试环境下,系统是否会出问题,即设定的界限或极限值,容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。[4]

破坏性测试

破坏性测试(DT),通过将软件应用程序置于极端条件下以识别漏洞和弱点。该方法包括各种技术,如输入模糊测试、故障注入和压力测试,这些技术被系统地应用于评估软件在胁迫下的响应方式。通过模拟不利场景,破坏性测试有助于发现和解决漏洞,从而增强软件应用程序的整体健壮性和安全性。[26]

蜕变测试

蜕变测试(MT),通过验证程序执行结果是否满足某一个特定的“关系”来判断其是否正确,该技术能够有效解决预期结果难以构造的问题。蜕变测试过程包括筛选原始测试用例、构造一组蜕变关系、基于蜕变关系将原测试用例转化成衍生测试用例、用原始与衍生测试用例两次执行程序,判断程序的正确性。[27]

恢复测试

恢复测试是测试工程师测试应用程序以检查软件或应用程序从灾难或崩溃中恢复的程度,是为了验证应用程序在经历任何软件、硬件崩溃或网络故障等之后,可以多快、多好地改进或学习软件的功能。[28]

安全测试

安全测试用于发现系统中的漏洞,并确定系统的数据和资源是否受到保护,免受可能的入侵者的侵害。[29]安全测试包括渗透测试、应用程序安全测试、API安全测试、漏洞管理、配置扫描等[30]

压力测试

压力测试是用于检查软件的可访问性和健壮性超出常规功能限制的测试,主要考虑关键软件,执行压力测试的主要目的是确认软件不会因缺少计算资源而崩溃、有助于确定软件应用程序在整个极端负载中的数据完整性,可以使用压力测试来发现硬件和数据损坏问题。[31]

软件质量特性

ISO/IEC 9126质量特性国际标准将质量属性归纳为6个质量特性,即功能性、可靠性、易用性、效率、可移植性和可维护性。[32]

功能性软件产品所实现的功能达到它的设计规范和满足用户需求的程度
可靠性用户使用的根本目标,是在规定的时间和条件下,软件产品所能维持期正常的功能操作、性能水平的程度
易用性对于软件产品,用户学习。准备输入和理解输出所做努力的程度,如安装方便、易于使用、界面友好,并能适用于不同特点的用户
效率指在规定条件下,与软件的开发水平和所使用资源之间有关的一组属性
可移植性是与软件从某一环境转移到另一环境的能力有关的一组属性
可维护性是在运行软件中,当环境改变或软件发生错误时,进行相应修改所做努力的简易程度,与灵活性密切相关

软件质量度量

软件产品的度量项包括四个方面,分别是规模、工作量、进度和质量-缺陷。[32]

规模规指软作产品的大小如 SRS(格说书)文档页数HID(高级设计)文档页数LLD(初级设计)文档页数代量(KLOC)UT 用例IT 用例数ST用例数等
工作量工作量指完成各软件工作产品和活动所用时/(人·天),如 SRS所用人时数、HLD人时数编码人时数、ST测试人时数等
进度进度指软件工作产品和活动开始和结束的时间
质量-缺陷质量缺陷指各软件工作产品和活动中产生的缺陷数如SRS评审发现缺陷数、HLD评审发现缺陷数、LLD发现缺陷数和ST现陷数等

缺陷分类

软件缺陷是指在程序中存在的错误,如语法错误、拼写错误或一个不正确的程序语句等,按照定义,可以将软件缺陷分为文档缺陷、代码缺陷、测试缺陷和过程缺陷。[2]

文档缺陷指对文档进行静态检查过程中发现的缺陷,通过测试需求分析、文档审查,可以发现文档的缺陷
代码缺陷代码缺陷是指对代码进行通行评审、审计或代码走查过程中发现的缺陷
测试缺陷测试缺陷是指通过测试执行活动发现的被测对象的缺陷
过程缺陷过程缺陷是指通过过程审计、过程分析、管理评审、质量评估、质量审核等活动发现的关于过程的缺陷和问题

缺陷状态

缺陷状态是指缺陷通过一个跟踪修复过程的进展情况,[33]从缺陷的初始状态开始,软件缺陷的状态共有十种,分别是:New、Open、Fixed、Close、Reopen等。

[4]

New新建缺陷的初始状态
Duplicate重复缺陷已被其他人员提交
Open打开开发人员开始修改缺陷
Fixed修复开发人员修改完毕
Close关闭回归测试通过
Reopen重新打开回归测试不通过
Postpone延期推迟修改
Rejected拒绝开发人员认为不是程序的问题
Abandon非问题被拒绝和重复问题,测试人员再次确认后不是问题
Pending挂起经CCB[注2]裁决后暂不处理或推迟处理

测试流程

软件测试的流程大致分为测试计划与控制、测试分析与设计、测试实现与执行、测试评估与报告和测试结束活动。[17]

测试计划与控制

测试计划是描述了要进行的软件测试活动的范围、方法、资源和进度的文档;是对整个信息系统应用软件组装测试和确认测试安排。这个阶段确定测试项、被测特性、测试任务、谁执行任务、各种可能的风险等。实施测试计划可以有效预防计划的风险,保障计划的顺利实行。[12]

测试计划的制定过程
测试计划的制定过程

测试分析与设计

测试设计阶段就是将测试计划阶段制定的测试需求进行细化分解为若干个可执行的测试过程,[17]测试工作的开展确立了目标、方向、策略、进度、风险控制等事项,[12]主要体现在测试策略、测试方法的选取以及测试规程的设计上,即编写测试方案。测试方案主要是对测试需求进行细化,分析测试用例设计方法,规划测试环境以及对测试工具的选取等。[17]

测试计划到测试执行之间的测试设计
测试计划到测试执行之间的测试设计

测试实现与执行

测试实现阶段主要根据测试方案设计来完成,包括测试脚本的开发和测试用例的写作,测试脚本通常用在自动化测试和性能测试中,根据自动化测试的目标、性能测试场景来开发相应的测试脚本,测试用例主要用来指导测试执行。[17]在这个阶段,测试人员需要搭建和维护测试环境,保证测试执行环境和测试管理(配置管理缺陷管理)的可用。[12]

测试评估与报告

测试工程师根据缺陷的记录,进行分析与评估,主要分析缺陷的分布、密度以及发展趋势,还要分析软件在整个研发过程中引发缺陷的根本原因,最后编写缺陷报告,为软件产品的质量提供真实的数据依据。[17]

测试结束活动

测试结束是在测试执行全部完成后,完成相关部门的检查归档工作,除了测试报告的写作之外,还要对测试中涉及到的所有文档、数据以及相关资料进行整理归档。[17]

常见的测试工具

图标工具名称说明
LoadRunnerLoadRunner是HP公司开发的用了测试应用程序性能的工具,它通过模拟一个多用户并行工作的环境来对应用程序进行负载测试,是一种预测系统行为和性能的工业标准级负载测试工具[14]
Junit一种用于单元测试的工具,[4]是Java编程语言的单元测试框架[34]
Apache Jmeter一种集成测试工具,[4]Jmeter是一个Java应用程序,用于对功能行为进行负载测试并衡量性能,最初是为测试Web应用程序而设计的,后来开始扩展到其它测试功能[35]
Silk TestSilk Test是一种自动化测试工具,可加速使用 Microsoft、Java、Web 和许多其他分布式技术开发的复杂应用程序的功能测试,为开发测试自动化提供了视觉测试和基于VB的.NET脚本[36]
FindBugs是一个使用静态分析来查找 Java 代码中的错误程序,检查已编译的 Java 类的字节码,以查找指示可能缺陷的已知错误模式,然后报告它们,并提供有关其检测到的模式以及它可能成为问题的原因的详细信息[37]

缺陷管理工具

JIRAJIRA是Atlassian公司推出的问题跟踪工具,广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域,注重可配置性和灵活性,通过简洁的Web交互方式来满足用户的需求
BugZillaBugZilla是Mozilla公司提供的一款产品缺陷记录及跟踪工具,能够建立一个完善的Bug跟踪体系:报告Bug、查询Bug记录并产生报表、处理解决Bug等
MantisMantis是一个轻量级开源缺陷跟踪系统,支持多种可运行PHP的平台,以Web操作的形式提供项目管理以及缺陷跟踪服务,能够满足中小型项目额缺陷管理及跟踪应用
禅道禅道是中国第一款项目管理软件,其集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,将产品人员、开发团队和测试人员三者分立,通过需求。任务和缺陷来交互互动

应用于软件工程

软件工程项目需要精细化项目管理和集中项目管理两者协调统一。在进行软件工项目的整个实施过程中,无论是整体设计还是精细化管理,都需要软件测试参与其中,以测试角度对软件工程项目的设计和实施进行指导和辅助,从而纠正一些设计上的错误和细节上的缺陷。设立软件测试机构,能够对项目细分的各阶段、各模块进行软件测试,从而确保软件质量。[38]

应用于Web开发

软件测试在Web开发中可以用来评估代码质量、检测软件功能、用户端测试反馈和内存检测等。由于软件开发过程中是使用多种语言共同编成的,可能在程序中存在很多细节方面的问题,软件测试能够将问题建立为一个资源库,通过分析资源库,避免类似错误的重复产生,为其他软件项目的研发提供借鉴,并且有效地解决代码冗多难以检查的难题,大大减少时间成本。[39]

应用于信息工程建设

信息工程建设中软件测试工作是基于企业及单位网络平台构建需求提供的数据检测措施。凭借软件测试工作的全面性,巩固信息工程平台构建的稳定性,并确保系统运行具备可持续化的优势,同时能够提升整体维修人员的工作效率。应用在信息工程安全方面,软件测试可以保证信息工程建设的安全性,避免恶意系统的攻击,避免病毒的侵袭。[40]

发展趋势

软件测试行业正在向智能测试、测试服务化等方向发展,[7]以往的传统的手工测试满足不了对软件的要求,于是自动化测试开始出现。[41]而大数据时代下,传统的软件测试平台达不到处理大规模数据的要求,云计算平台应运而生,[42]它为软件测试提供强大支撑,提供了大量资源,测试者可以在短时间内使用云服务器进行大量测试。同时,云计算也能够在多种不同的环境下对软件进行测试,以保证软件的兼容性和可靠性,提供一个全面的软件测试环境。[43]

此外,在2023世界人工智能大会上,用大模型测试大模型的技术趋势已经开始涌现。大规模测试技术可以通过机器自动化进行大部分的测试工作,提高了效率的同时,还能够更深入、更全面地理解软件的功能和性能,从而更准确地找出可能的问题和错误。[7]

参考资料 43

  1. https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMxMjI2EhJ4ZGpzai14YnkyMDIzMTIwMDcaCGVhZnBoZXRh
  2. 参考 2
  3. 参考 3
  4. 参考 4
  5. 参考 5
  6. 什么是软件测试? — IBM
  7. 软件质量发展历程, 大模型开启智能测试新时代 — 中国日报中文网
  8. https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMxMjI2EhJ4ZGpzai14YnkyMDIzMTIwMDcaCHZmaWU1NmF3
  9. Agile Testing Has Evolved! Trends To Watch In 2023 — accelq
  10. Agile Testing — Safe Studio
  11. 参考 11
  12. 参考 12
  13. Static Testing VS Dynamic Testing – Key Differences — testsigma
  14. 参考 14
  15. 测试用例设计方法和系统 — Google Patents
  16. https://d.wanfangdata.com.cn/Patent/ChJQYXRlbnROZXdTMjAyMzA5MDESEENOMjAwNTEwMDM2MTg5LjAaCDZuNzd5M2Jw
  17. 参考 17
  18. 参考 18
  19. 什么是单元测试? — AWS
  20. User Acceptance Testing — Stanford University
  21. Functional Testing — JavaTpoint
  22. Difference Between Functional and Non-Functional Testing — JavaTpoint
  23. Why Non-Functional Testing — JavaTpoint
  24. 参考 24
  25. 参考 25
  26. Destructive Testing Techniques in Software Testing — testsigma
  27. 蜕变测试研究进展及其在并行程序测试中的研究展望 — 软件学报
  28. Recovery testing — JavaTpoint
  29. SecurityTesting — Geekforgeeks
  30. Security Testing: Types, Tools, and Best Practices — Brightsec
  31. Stress Testing — JavaTponit
  32. 参考 32
  33. 软件缺陷管理 — 清华大学出版社
  34. JUnit Tutorial — tutorialspoint
  35. Apache JMeter? — Apache
  36. Introduction to Silk Test Workbench — microfocus
  37. FindBugs — The University of Texas at Austin
  38. https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMxMjI2EhBzempzeXl5MjAxNTEyMTkyGghoMW92amhtNg%3D%3D
  39. https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMxMjI2Eg1mamRuMjAyMDEwMDQ5Gghpcnl6dnFyOA%3D%3D
  40. https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMxMjI2Eg5reHljZjIwMTgyNjEwMRoIcnp4MXFxMjk%3D
  41. https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMxMjI2Eg9zenl4c2oyMDIwMDIwOTkaCHVkenR4dXVz
  42. https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMxMjI2Eg5zemh5aDIwMTkwNzEzMhoIb3N2czU4bGg%3D
  43. https://qikan.chaoxing.com/detail_38502727e7500f26bc8520a28c1fa25bdb1f166ed684e1e91921b0a3ea255101fc1cf1fbb4666ae688766e5bc0300db6bf334016d37f20b73980ea0dd84e2073dcd2e81f3f3ec9d9955c7e0576b01040

注释

  1. IBM公司曾交付了一批有软件问题的OS/360操作系统,为了解决这个问题,使得公司在软件方面的投入比计划用于整个系统的开发还多
  2. 变更控制委员会
广告位:底部(ad-bottom)—— 请到中台「公共区块」编辑此内容