老码农眼中的软件测试

码农的产品和服务大都是以软件形式存在的,我们存在的价值之一就是快速提供高质量的软件产品或服务。如何保障软件的高质量呢?这与软件测试分不开的,测试是保证软件质量的关键环节之一。

老码农早年曾经做过两年的软件测试,现斗胆介绍一下老码农眼中的测试。

老码农眼中的软件测试

什么是软件测试?

软件测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。——《软件测试完全指南》

远在1983年,IEEE对软件测试是:使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。也就是说,软件测试的最初目的是为了检验软件系统是否满足需求。

虽然测试是为了发现程序中的错误而执行程序的过程,但并不仅仅是为了找出错误。通过分析错误产生的原因和发生趋势,还可以帮助我们发现当前软件开发过程中的缺陷,以便及时改进。当然,没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。

简单地说,软件测试就是证明软件不存在错误的过程。

测试与QA的区别

QA是quality assurance的缩写,也就是质量保证。软件测试只是QA的一部分,是QA 的子集。QA的内容比测试大多了,能对产品、工作流程、组织方式等跟公司经营有关的事情进行反馈,很多外企的高层都是QA出身,尤其在制造业。 简单的来说,测试从技术上保证软件质量,QA从过程上保证软件质量。

QA关注的重点不仅仅是软件的质量,而是整个软件过程,尤其是过程和体系,例如ISO 9000系列的质量体系等。一句话,所有和质量相关的事都是QA的事。

测试的领域

刚入行的时候,从硬件工程师转作测试。严格遵循贝尔北方实验室的软件工程流程,将测试领域分为13个,由于年代的久远,现在只能记得11个了。

功能性测试 functionaliy

软件的功能性是第一要务,完成一半功能的成品也要强于完成了全部功能的半成品。 软件实现了哪些功能?是否真正完成了这些功能呢?

健壮性测试 Robustness

健壮性是指软件的容错能力,违约的输入能否导致故障的引入呢?长时间的压测是否会导致程序异常呢?

性能测试 performance

用户体验至上的背后是性能至上,良好的运行性能才能满足用户的预期。性能测试是和时间赛跑,测试软件的运行速度, 以及资源的使用率。

互操作性测试 interoperability

很多软件不是孤立存在的,不能因为用户使用了我们的软件,导致用户所使用的其他软件不能正常使用,同时还要保证用户正在使用的软件不会对我们的软件产出不良影响。尤其注意的是,软件间存在相互调用的情况。

辅助性测试 Accessibility test

可用性主要针对不同用户和不同场景。例如,前些天“饿了么”听障骑手的故事就说明了这个问题, 可用性测试没有过关,好在后来雪峰说新版本可以让听障骑手方便使用了。

易用性测试 usability

方便用户的使用又是一个比较泛的领域。用户的使用习惯,单双手操作,按钮的位置,实现目标功能的路径深度等等,都是易用性的考量指标,有时也会把审美考虑进去。

安全性测试 security

和健康一样,只有失去它的时候才知道它的可贵。数据源的安全,传输信道的安全,数据存储的安全等等,尽管安全的重要性众所周知,但真正为安全投入的公司并不是很多。

恢复性测试 recovery

恢复性测试一般指系统在正常或异常退出后,是否能够恢复到之前的运行状态。例如,很多手机都有recovery模式, 拔电源等破坏性测试有时也作为测试手段。

兼容性测试 compatibility

兼容性涉及的领域也较多。常见的如多浏览器测试,app的多机型测试等等,好在现在有一些云测试平台可以帮我们解决环境的兼容性问题。 我们更多的关注软件自身的不同版本间的兼容性,包括前向兼容和后向兼容。

发布测试 deliverable

发布测试更多是在软件的下载,安装,卸载等。一般地,把升级和热更新等也放到发布测试中,包括灰度升级。

文档完整性测试 documentation

文档是一个老话题,程序员经常抱怨文档不足,又往往讨厌写文档,陷入自相矛盾中。测试文档的完整性会被认为不那么重要,好的方式可能是从产品侧解决,让产品自身具有自解释性,代码也是如此。

测试的过程

测试的领域是从空间的维度对测试进行的分类,从时间的维度来看,又可以大概分为4个过程。

单元测试

单元测试:是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。通常情况下,单元测试(模块测试)是RD编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

集成测试

集成测试也叫组装测试或联合测试。在单元测试的基础上,将所有函数或程序模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。通常情况下,集成测试是RD进行的一种检验程序内部各函数或各模块联合起来是否存在问题的一种方式。

端到端测试

端到端测试(E2E),其实就是对多个系统进行系统测试。在端到端测试中,业务流程是最重要的,端到端测试是范围最广的测试。集成测试主要关注系统之间的接口。系统之间需要交换信息,所以集成测试是端到端测试的先决条件。E2E的测试并不局限于功能性。在端到端的测试环境中,需要对服务的许多非功能性属性进行评估,如性能和安全性。

用户场景测试

用户场景测试是指部分真实用户对产品或服务的真实使用测试,在过去的电信类产品中是现场测试(field trial),或者beta测试。 对互联网产品往往是友好用户测试(公测),或者灰度升级测试。

基于阶段目标的测试

至于大家常说的黑白灰盒测试,是从产品细节的透明度来看的,程序员可以不必仔细区分。但是,对一些特定阶段的测试还需给予关注。

上一页123下一页


留言