《软件测试技术大全:测试基础 流行工具 项目实战(第3版)》—第1章1.2节软件测试的发展

简介: 现在,大部分开发工具都把调试工具集成进来,调试已经成为开发人员开发工作中不可或缺的一部分。甚至测试脚本的开发工具也会把基本的调试功能集成进来。

本节书摘来自异步社区《软件测试技术大全:测试基础 流行工具 项目实战(第3版)》一书中的第1章,第1.2节软件测试的发展,作者陈能技 , 黄志国,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 软件测试的发展
伴随着软件行业的发展,软件测试也在不断地发展,软件测试大概经历了如图1.2所示的几个重要的阶段。


262ca754d3b0e13e69a05d41168278de2178ed5f

1.2.1 软件调试
早期软件的复杂度相对较低,软件规模也比较小,因此软件错误大部分在开发人员的调试阶段就发现并解决掉了。这个阶段的测试就等同于调试。

现在,大部分开发工具都把调试工具集成进来,调试已经成为开发人员开发工作中不可或缺的一部分。甚至测试脚本的开发工具也会把基本的调试功能集成进来。如图1.3所示为TestComplete的调试工具栏。


d06308a4d42186f4230d85baa3c4882f9442e27f

1.2.2 独立的软件测试
在20世纪五六十年代,人们开始意识到仅仅依靠调试还不够,必须引入一个独立的测试组织来进行独立的测试。

这个阶段的测试绝大部分是在产品完成后进行的,因此测试的力度、时间都非常有限,软件交付后还是存在大量的问题。

这个阶段没有形成什么测试方法论,主要靠错误猜测和经验推断,也没有对软件测试的定位以及软件测试的真正含义进行深入的思考。

1.2.3 软件测试的第一次定义
1973年,Bill Hetzel博士给出了软件测试的第一个定义,即“软件测试就是对程序能够按预期的要求运行建立起一种信心”。

1983年,Bill Hetzel博士对这个定义进行了修订,改成“软件测试就是以评价一个程序或系统的品质或能力为目的的一项活动。”

因此这个阶段对软件测试的认识是:软件测试是用于验证软件产品是正确工作的、符合要求的。

但是同一时期,Glenford J. Myers则认为,软件测试不应该专注于验证软件是工作的,而是将验证软件是不工作的作为重点,他提出的软件测试定义是“测试是以发现错误为目的而进行的程序,或系统的执行过程”。

1.2.4 软件测试成为专门的学科
20世纪80年代后,软件行业飞速发展,软件规模越来越大,复杂度越来越高。人们对软件的质量开始重视。软件测试的理论和技术都得到了快速的发展。人们开始把软件测试作为软件质量保证的重要手段。

1982年,在美国北卡罗来纳大学召开了首次软件测试的正式技术会议,软件测试理论开始迅速发展,随之出现了各种软件测试方法和技术。

1983年,电气电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)对软件测试做出了如下定义。

使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。
这个阶段认为,软件测试是一门需要经过设计、开发和维护等完整阶段的软件工程。
因此,从这个阶段开始,软件测试进入了一个新的时期,软件测试成为一个专门的学科,形成了各种测试的理论方法和测试技术,某些测试工具开始得到广泛应用。

1.2.5 开发与测试的融合趋势
20世纪90年代后,软件工程百花齐放,出现了各种软件开发的新模式,以敏捷开发模式为代表的新一代软件开发模式开始步入历史的舞台,并且赢得很多开发团队的拥护。

由此带来的是对软件测试的重新思考,而大部分人倾向于软件测试将与软件开发融合的趋势的观点,开发人员将担负起软件测试的责任,测试人员将更多地参与到测试代码的开发中去。软件开发与测试的界限变得模糊起来。TDD把测试作为起点和首要任务。

1.2.6 为什么软件测试发展比较缓慢
尽管软件测试经过几十年的发展,已经得到了长足的进步,但是与软件开发的发展比较起来,可以看到软件测试的发展还是比较缓慢的。

软件开发得益于计算机硬件的发展、计算速度的提高,还有计算机语言的发展、编译器的发展、开发工具的发展,因此比起软件早期的开发,无论是开发速度还是工作效率都有了很大的提高。

软件开发摆脱了早期的机器语言编码方式和汇编语言,跨越了结构化编程语言,进入面向对象的时代,开发人员的编程能力得到了很大的提高。而开发工具的不断改进,则起到了推波助澜的作用,使得开发人员无论是在编码速度还是调试方面都受益匪浅。

反观软件测试,虽然测试工具层出不穷,但是并没有革命性的发展。测试人员大部分情况下还是要依赖手工的测试。

软件测试受到越来越多人的重视,但是大部分的软件测试方法和理论还是沿用20世纪的研究结果。因此,软件测试的发展还需要更多热爱测试的人投入,需要更多的研究,无论是在测试的理论、方法,还是工具上。

软件测试发展比较缓慢的另外一个原因是质量成熟度模型和质量风险评估没有一个比较广泛和可用的业界标准,测试的发展还会比较缓慢。

相关文章
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
595 11
|
10月前
|
Web App开发 人工智能 JavaScript
主流自动化测试框架的技术解析与实战指南
本内容深入解析主流测试框架Playwright、Selenium与Cypress的核心架构与适用场景,对比其在SPA测试、CI/CD、跨浏览器兼容性等方面的表现。同时探讨Playwright在AI增强测试、录制回放、企业部署等领域的实战优势,以及Selenium在老旧系统和IE兼容性中的坚守场景。结合六大典型场景,提供技术选型决策指南,并展望AI赋能下的未来测试体系。
|
10月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
903 0
|
9月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
785 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
9月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
747 6
|
9月前
|
人工智能 Java 测试技术
单元测试覆盖率的自动控制技术
Jacoco是Java程序覆盖率工具,可以在pom.xml通过配置来自动控制程序的覆盖率
214 5
|
10月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
2062 10
|
10月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1612 23
|
11月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。