软件测试的过去,现在,将来
本篇文章为闲暇之余所做,主要目的是回顾过去,展望未来。
软件测试的过去
迄今为止,软件测试的发展一共经历了五个重要时期:
1957年之前-调试为主(Debugging Oriented)
1957–1978-证明为主(Demonstration Oriented)
1979–1982-破坏为主(Destruction Oriented)
1983–1987-评估为主(Evaluation Oriented)
1988–至今-预防为主(Prevention Oriented)
调试为主
20世纪50年代,计算机刚诞生不久,只有科学家级别的人才会去编程,需求和程序本身也远远没有现在这么复杂多变,相当于开发人员一人承担需求分析,设计,开发,测试等所有工作,当然也不会有人去区分调试和测试。然而严谨的科学家们已经在开始思考 “怎么知道程序满足了需求?”这类问题了。
- Tips 历史时刻
软件测试的五个重要时期是从1957年开始的,但是还有更老的小典故:
1.1878年,美国发明家托马斯·阿尔瓦·爱迪生(Thomas Alva Edison)在给西奥多·普斯卡斯(Theodore Puskas)的一封信中使用了“bug”一词来描述系统中的一个缺陷。
2.1906年,帕累托原则(80/20规则)
3. 1945年,冯诺依曼计算机的设计被提出,基于存储的计算机设计
4. 1946年,国际标准化组织(ISO)正式成立。
5. 1949年,在论文“检查大例程”中,艾伦·图灵(Alan M. Turing)提出了一个问题的答案,即如何检查一个例行程序,确保它是正确的。----电影【模仿游戏】
6. 1951年,在着名的“全面质量控制”一书中,Armand Vallin Feigenbaum将质量定义为客户决心。质量取决于客户的观点。该产品应满足客户的实际需求和预期的需求。全公司对质量负责。
证明为主
1957年,Charles Baker在他的一本书中对调试和测试进行了区分:
调试(Debug):确保程序做了程序员想它做的事情
测试(Testing):确保程序解决了它该解决的问题
这是软件测试史上一个重要的里程碑,它标志测试终于自立门户师出有名了。
当时计算机应用的数量,成本和复杂性都大幅度提升,随之而来的经济风险也大大增加,测试就显得很有必要了,这个时期测试的主要目就是确认软件是满足需求的,也就是我们常说的“做了该做的事情”。
- Tips 历史时刻
1975年,微软成立
1976年,苹果成立
这期间主要是有一些测试和质量的理论出现。
破坏为主
1979年,《软件测试的艺术》 (The Art of Software Testing)第一版问世,这本书是测试界的经典之作。书中给出了软件测试的经典定义:
The process of executing a program with the intent of finding errors.
测试是为发现错误而执行程序的过程。
这个观点较之前证明为主的思路,是一个很大的进步。我们不仅要证明软件做了该做的事情,也要保证它没做不该做的事情,这会使测试更加全面,更容易发现问题。
- Tips 历史时刻
1981年,IBM发布为大众市场计算机产品制定标准的个人电脑(IBM-PC或IBM 5150)
评估为主
1983年,美国国家标准局(National Bureau of Standards)发布“Guideline for Lifecycle Validation, Verification and Testing of Computer Software”,也就是我们常说的VV&T。VV&T提出了测试界很有名的两个名词:验证(Verification)和确认(Validation)
人们提出了在软件生命周期中使用分析,评审,测试来评估产品的理论。软件测试工程在这个时期得到了快速的发展:
出现测试经理(test manager),测试分析师(test analyst)等职称
开展正式的国际性测试会议和活动
发布相关国际标准
以上种种都预示着:软件测试正作为一门独立的,专业的,具有影响力的工程学发展起来了。
预防为主
预防为主是当下软件测试的主流思想之一。STEP(Systematic Test and Evaluation Process)是最早的一个以预防为主的生命周期模型,STEP认为测试与开发是并行的,整个测试的生命周期也是由计划,分析,设计,开发,执行和维护组成,也就是说,测试不是在编码完成后才开始介入,而是贯穿于整个软件生命周期。
我们都知道,没有100%完美的软件,零缺陷是不可能的,所以我们要做的是:尽量早的介入,尽量早的发现这些明显的或隐藏的bug,发现得越早,修复起来的成本越低,产生的风险也越小。
- Tips 历史时刻
1993年,Scrum被提出
1993年,W模型被提出
1996年,google上线
1997年,UML(统一建模语言)第一版发布
1998年,Jmeter第一版发布
2001年,敏捷宣言和Saas概念的发布
2004年,Selenium第一版
软件测试的现在
软件测试的根本目的在于提高软件质量,并对最终软件质量做出评估。
QA是英文Quality Assurance的简称,中文含义是质量保证, QA的定义是“质量管理的一部分,致力于提供质量要求会得到满足的信任”。
QC是英文Quality Control的简称,中文含义是质量控制,QC的定义则是“质量管理的一部分,致力于满足质量要求”。
- Tips
- 很多国外的软件测试都叫QA,是因为他们多少都有过程质量的部分工作
- QA的工作,其实都是为QC做的铺垫,否则会导致很多弯路
大部分开发模型都是以下一种或者几种的结合,一般会根据实际需要进行调整:
手工作坊式的软件开发
瀑布模型
迭代模型
敏捷开发(测试)
敏捷开发流程:
测试技术又根据实际情况,大致分为以下几种:
功能测试
接口测试
性能测试
自动化测试
测试分析
- Tips
功能测试是最基本的,所有的测试都围绕着功能测试
接口测试是偏底层的,能杜绝很多问题
性能测试的发起,一定是建立在业务需要的基础上
思考:为什么自动化测试这么多年,没有带来多少产出,我们还要继续做?
测试资本:我们知道,测试不仅仅是对功能验证,要做好测试,必须掌握以下技术
环境管理
配置管理
持续集成(CI)
流程管理
WiKi管理
- Tips
测试环境和开发环境必须分开
代码的管理必须清晰,文档要确保唯一性
持续集成大大降低了测试成本,也为自动化铺平了道路
流程---QA
信息内部公开化
软件测试的将来
看近一点的将来:职业规划
业务 ---某方面的业务专家---BA 咨询 业务架构师 独立门户
技术 ---测试架构师 测试专家 独立门户(性能自动化框架搭建,性能测试承接)转开发
管理 ---测试经理 项目经理 交付经理 质量总监 独立门户
- Tips
以上三个方向只是有侧重点,想要做好其中一项,必须懂其它两项
很快就会到来的将来:
自动化测试和性能测试的工具进一步发展,导致相关投入成本大大降低
软件发布将变的更简单,不用集中发布新功能和修复bug
所有的软件体系慢慢向云靠拢,本地客户端的概念逐渐被淡化
未来:
随着AI等技术的发展,软件完全实现私人化,定制化,软件测试退出历史舞台