一、软件的定义
软件是计算机系统中不可或缺的组成部分,不同标准对其定义如下:
软件包括计算机程序、相关文档及与计算机系统操作有关的数据。
① 与计算机系统操作相关的计算机程序、规程、规则及可能存在的文件与数据;
② 与计算机系统操作相关的程序、规程、规则及任何与之有关的文件
软件是能够使计算机硬件完成计算和控制功能的计算机指令与数据定义的组合。
综上,广义的软件是 程序 + 数据 +文档,而狭义的软件是 程序 + 数据。
二、软件测试的定义
软件测试是软件工程中的关键活动,其定义随时代发展逐步完善:
“软件测试是为程序能够按预期运行建立足够信心的过程。”
在《软件测试的艺术》中提出:“测试是为了发现错误而执行程序或系统的过程。”
“软件测试是一系列活动,旨在评估程序或软件系统的特性或能力,并确定其是否达到预期效果。”
“使用人工或自动手段运行或测量软件系统的过程,目的是检验系统是否满足规定要求,并找出与预期结果的差异;测试需经历设计、开发和维护等完整阶段。”
Cem Kaner
在其著作《Testing Computer Software》第一版提出“Testing is an empirical, technical investigation conducted to provide stakeholders with information about the quality of the product or service under test.”
“测试是一种经验的、技术性的调查,旨在为利益相关者提供关于被测试产品或服务质量的信息。”
完成了测试角色从“错误发现者”到“信息提供者”的范式转换,是上下文驱动测试学派的理论基石。
IEEE Standard Glossary of Software Engineering Terminology(IEEE 软件工程术语标准 glossary)
“在特定条件下运行系统或组件,观察并记录结果,以评估其特定方面的过程。”
“通过比较预期与实际结果,评估软件产品特性(如完整性、正确性、适用性)并发现差异的过程。”
标准部分 | 标题 | 首次颁布时间 |
---|---|---|
ISO/IEC/IEEE 29119-1 | 概念和定义 | 2013年9月 |
ISO/IEC/IEEE 29119-2 | 测试过程 | 2013年9月 |
ISO/IEC/IEEE 29119-3 | 测试文档 | 2013年9月 |
ISO/IEC/IEEE 29119-4 | 测试技术 | 2015年12月 |
ISO/IEC/IEEE 29119-5 | 关键字驱动测试 | 2016年10月 |
“从无限执行域中选择有限测试用例,对程序期望行为进行动态验证的活动过程。”
“Software testing is a process consisting of all life cycle activities, both static and dynamic, concerned with planning, preparation, and evaluation of software products and related work products to determine that they satisfy specified requirements, to demonstrate that they are fit for purpose and to detect defects.”
(软件测试是一个包含所有生命周期活动的过程,包括静态和动态,涉及软件产品和相关工作产品的策划、准备和评估,以确定它们满足规定的需求,证明它们适合其目的,并发现缺陷。)
2018年的大改版:ISTQB 在 2018年 发布了 CTFL 大纲的重大更新版本(v3.1.1 之后直接跳到了 v2018)。这个版本更加强调了敏捷环境、 DevOps 理念和整个软件生命周期中的测试,进一步巩固和现代化了其“全生命周期”的视角。
三、中国国家标准(GB)中的定义
通过人工或自动手段运行或测定软件系统,以检验是否满足需求或澄清预期与实际结果的差异。
强调通过对比预期与实际结果评估软件特性,确保符合标准与需求。
总结
软件测试的核心目标是通过系统化的方法验证软件质量,早期定义侧重“发现缺陷”(逆向思维),而现代定义更强调“评估与验证”(正向思维),并覆盖从静态分析到动态执行的全生命周期活动。标准化的定义(如IEEE、ISO、GB)进一步明确了测试的规范性、过程性和目标导向性。
顾翔凡言:人工智能未来的发展瓶颈在于对知识的更新。唯一不变的是变化,知识发生了变化,人工智能软件能否及时跟进变化,可能阻碍人工智能的使用。