目录
为什么需要软件测试?
很多时候:
一款软件的诞生经历很多个阶段,每个阶段都有不同的人员参与,所以最终产品会或多或少的问题,因此为了保证软件的可用性,所以,我们必须经过测试环节,减少软件的问题。
哪个程序员也不敢说写的程序没有bug!但是我们使用的软件,基本上很少见到bug,这和软件测试是分不开的。
so,一个提供业务访问的软件,必须在严格测试,通过层层测试环境才可以正式的上线。就像游戏一样,也基本是先提出内测版,最后才是公测版,就是公司在验证程序的正确性!!
为什么选择软件测试行业?
发展前景
就目前而言,相对于国外的软件测试行业来说,国内的测试行业稍显落后,所以国内的软件测试行业对于专业的测试人员需求慢慢变大。
装逼语录
有人喜欢创造世界,所以,他们做了程序员。
有人喜欢拯救世界,所以,他们做了测试员。
其他
知乎上已经有了优秀的答案。
为什么不让开发自己做测试?
首先,开发不是不能做测试,甚至有的测试人员之前都做过开发。
而是说,软件测试和软件开发分属软件行业中两个不同的技术方向。所以,一个半吊子开发不如一个专业的测试!这就是专业度的问题了。
从逻辑角度来说,开发人员大多数时间都在思考如何实现具体的功能。而作为测试人员,大多数时间都站在用户的角度思考如何挑出软件的问题。
从测试力度来说,软件对于开发人员来说,那就是自己的孩子,我家孩子怎么可能有毛病?你家孩子才有毛病!这就会导致自己测试自己写的软件,下手可能不够狠!
什么是测试?
J. Myers在《软件测试的艺术》一书中有这样的一个定义:测试是为了发现错误而执行程序的过程。
另外,软件专家温伯格和Cem Kaner也提出了自己对软件测试的理解,在温伯格的《完美软件》一书中提到:测试是一个获取信息的过程,用来降低决策风险。Cem Kaner教授也提出:软件测试是一种技术调查,其目的是向关系人提供有关产品(软件、系统或服务)质量的实验信息。
除此之外,IEEE(电气和电子工程师协会,全称是 of and )和ISO(国际标准化组织,全称是 for )也不甘落后的发表了自己的看法。1983年IEEE曾这样定义软件测试:软件测试是使用人工或者自动化手段来运行或者测试定某个系统的过程,检验它是否满足规定的需求或是弄清楚预期结果与实际结果之间的差别,从这个定义中我们可以看出,软件测试不仅为了发现错误,而且需要验证软件是否满足了规定的需求。ISO 29119标准也尝试标准化软件测试。提到: focus on about a and as many as , as early as in , under given of costs and ,其中有两个重要的观点:一个是尽可能的早(early),一个是成本(cost)受限。测试发现bug应尽可能的早,这样造成的影响越小,修复成本越低。而测试活动往往是在时间和人力成本受限的情况下进行,在有限的资源下,测试人员应该有的放矢,对测试对象的进行选择排序,测试技术进行选择组合使用,这也是测试策略方面的东西。
说点人能听懂的。当你写的代码越多,你就越认同测试,曾经听过一个很贴切的比喻:写程序的人就像在造没有护栏的桥,自己去走那肯定安全无虞,那怕摸黑也不至于掉河里去;测试则像给桥修护栏的,让桥的普通使用者也能像开发那样来去自如。从这一点上说,测试远比开发重要。
总结,软件测试的定义:通过手工或者相关工具,对被测对象进行测试操作。从而验证实际与预期结果是否存在差异。
软件测试的作用?
通过测试工作可以发现并修复软件中存在的缺陷,从而提高用户对产品的使用信心。
测试可以通过记录软件运行过程中产生的一些数据,从而为决策提供数据支持。
测试可以降低同类型产品开发遇到的问题风险。
软件测试的诞生
这个标题让我想起了我喜欢的一首歌,学什么习,这个天气不适合学习,只适合Move your body,是不是很happy。OK,让我们随着音乐的节奏回到…….
在20世纪50年代,英国计算机科学家图灵已提出了程序测试的定义,测试是验证程序正确性的一种实验形式。
直到60-70年代,软件危机出现后,人们意识到测试的意义。软件测试慢慢的发展起来……
软件测试出现原因
软件复杂度
程序代码的复杂度,软件产品的并发性,复杂性越来越高,对程序的正确性检测也越来越高
行业竞争大
由于用户审美提升与需求越来越高,现在一个新闻类app,就有百度新闻,网易新闻,趣头条,今日头条,各家公司都想做到完美,用户喜欢自己的产品,那就得从易用性,美观性,趣味性,快速性,等等等等方面超过其他的产品,那么大公司都会配备专门的功能测试岗位,性能测试岗位,乃至于更强大的测试开发岗位。
软件测试的发展
国内处于起步和迅猛发展的阶段。
大公司非常重视测试,初创型小公司对测试关注较少。
主要还是手工测试为主,自动化测试为辅。
国外的软件测试基本成熟,软件企业非常重视软件测试部门。
测试流程化体系严谨。
一线大公司还会成立软件测试中心,服务于子公司的软件开发。
软件测试的目标
通过软件测试暴露软件中隐藏的错误和问题,便于考虑是否使用该产品。
例如我们去买手机,总得反反复复的观察,这个手机的CPU性能怎么样?内存是多大的?拍照怎么样?但是,反复观察有xx用?领导不换 X,你能用的上 8?
软件开发者的角度
通过软件测试证明软件中不存在错误和问题,给与自己产品质量足够的信心。
一个成功的测试,是不懈的挖掘软件的错误,不断的完善产品。
满足用户需求是产品成功的关键点。
确保交付的产品符合用户的需求。
在产品上线前尽可能的发现和修复bug。
用户角度
快看,摇了半天,终于有人加我微信了!
缺少软件测试发生的事故
软件中的Bug非常令人讨厌。但同时有缺陷的软件还有可能造成重大甚至致命的事故。下面是一些非常有名的软件事故:
因此公司中进行软件测试,是必须的!
软件测试常见的误区软件测试的主要工作测试原则
测试原则是指在执行测试工作时必须要遵守的一些规则:
测试对象
对于当前的测试行业来说,我们最常测试的主体就是软件(主体功能),但需要我们测试的也不仅仅是功能需求测试。我们可以将软件分为三个部分组成:
一款软件的诞生会经历不同的过程,我们将整个过程分为不同的阶段,然后每个阶段都会有相应的测试对象。那么每个阶段我们能进行什么测试呢?
软件架构
所谓的软件架构,简单理解为是用来指导软件开发的一种思想,目前来说,最常见的两种架构模式:
两种架构的比较:
再来补充两个知识点:
浏览器
浏览器本质上是一款软件,安装在操作系统之上,为用户提供网页浏览服务,目前,世界主流的五大生产厂商:
国内的浏览器及内核:
对于浏览器来说,最核心的技术,就是浏览器内核,当然,仅做了解即可。
图片
常见的图片类型有:
常见项目组织架构
项目组一般由项目经理领导并负责指定项目计划,分配任务。
参与人员:
软件测试用例
生活中,到处都是测试案例,比如你买个手机,买个显示器,都要测试一下,开关机、屏幕是否有漏光,按键是否好使、这些都是测试用例。
我们需要知道测什么和怎么测这两个问题。
什么是测试用例
测试用例的定义
测试用例(Test Case)是为特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求,通过大量的测试用例来检验软件的运行效果,它是指导测试工作进行的重要依据。
举个例子
比如我们买个电脑,要进行测试。
测试的前提条件
按下开机键,相当于输入一组测试数据,执行的条件是,是否达到开机的前提条件,比如电池是否有电,或者外接电源是否接入。
测试过程
按下开机键。
预期结果
当我们按下开机键,顺利的启动成功,那么在有电的前提下,启动成功就是我们的预期结果。
通过上面的测试过程,就会发现,测试用例主要解决的就是测什么?怎么测?
为什么需要测试用例
测试用例的优势在于:
测试用例的意义评估测试结果的基准。
测试用例的通过率以及错误率,是测试结束的一个重要依据,用来判断该软件测试结果是否可以通过,能否达到上线的标准。保证测试的时候不遗漏测试功能点。可以对测试工作进行牵引。在编写测试用例的过程,可以熟悉需求,对系统架构或者业务流程有一个整体深入的了解。测试用例的生命周期测试环境设计
测试环境(TE)
测试环境内容包括
测试环境设计原则
测试环境所需的知识
测试用例的八大要素
输出测试用例
最后,上图:
测试力度
测试用例力度
测试用例可以写的很简单,当然也可以写的非常复杂。
测试用例写得过于复杂或详细,会带来两个问题:一个是效率问题,另一个是维护成本问题。另外,测试用例设计的过于详细,留给测试执行人员的思考空间就比较少,容易限制测试人员的思维。
ps:大多数的测试团队编写的测试用例的力度介于两者之间。
测试用例的本质
测试用例的设计本质(测什么?怎么测?)应该是在设计的过程中理解需求,检验需求,并把对软件系统的测试方法的思路记录下来,以便指导将来的测试。
基于需求的测试用例设计:
不要认为测试用例设计是一个阶段,测试用例的设计也需要迭代,在软件开发的不同阶段都要回来重新评审和完善测试用例。
软件测试计划书
计划书是什么
测试计划是一个叙述了预定的测试活动的范围、途径、资源以及进度安排的文档,我们亲切地称为测试计划书。
此文档确认了测试项、被测特征、测试任务、人员安排,以及任何偶发事件的风险。
为什么要指定测试计划书
定制测试计划使得软件测试是有计划,有组织的软件质量保证活动。如果没有计划,工作就会很松散,随意。
测试计划的意义
测试计划
测试流程规范
参考:
测试计划书内容包含哪些内容
测试目标
产品的质量目标
测试活动的质量目标
资源配置
人力资源
测试环境资源配置
硬件资源:服务器,计算机,手机,打印机
软件资源:不同平台的操作系统,数据库软件,多种浏览器
网络环境:在什么网络环境下测试,是内网还是外网
测试工具:都是使用哪些工具
风险控制
风险指:不可预料的后果,如事件,危险,威胁等特殊情况的发生。
客观性风险:
如何制定测试计划
1.任务送达
2.分析测试任务
3.资源规划
4.制定测试计划
5.评审测试计划
5W1H方法
what 对象
when 时间
why 原因
who 有谁参与
where 场所
how 方法
工作经验之谈
计划是死的,人是活的….
图解软件测试计划
这年头,没有图过不了啊,虽然朕不看!
软件计划报告
最后,来看软件计划报告。
软件测试基础流程:一般是测试主管编写测试计划,测试计划是指在做完需求分析后,在开始整个测试工作之前的准备计划工作。
遵循5W + 1H原则进行测试:
测试报告范围:
软件兼容性
5W1H思想很流行啊!因为我们将基于这个思想来阐述软件的兼容性测试!
what,什么是软件兼容性测试
软件兼容性测试既是测试被测试软件能够与操作系统、网络环境、浏览器、相关其他软件(包括数据库)、外接设备等能够友好合作,不出现UI界面显示异常、同等分辨率下显示异常、改变颜色及显示大小改变、排版出错、CSS格式及颜色错误、滚动条相关问题、内容或者标签重叠、表格或者框架不完整等等兼容性软件缺陷。兼容性测试包括向前兼容性测试和向后兼容性测试。
向前兼容性测试( ):测试的应用程序或软件在新的或即将到来的版本,并且应用程序的早期版本能够打开较新版本中的文件并忽略早期版本中未实现的功能。比如USB1.0能够兼容USB3.0,或者是MS 能够使用转换器打开MS 的文件,并忽略MS 的新功能。
向后兼容性测试( ):测试的应用程序或者软件处于旧版本,并且应用程序的新版本能够顺利处理旧版本的程序数据。比如说USB3.0兼容USB1.0,或者MS 2007能够打开MS 2003的文件。
why,为什么要进行软件兼容性测试
从兼容性测试的概念中得知,软件的运行与操作系统类型及版本(、linux、mac等)、浏览器种类及版本(IE、火狐、谷歌等)、网络环境的带宽、数据库种类和版本(SQL、DB2、MySQL、等)、外接设备(打印机、传真机等)、其他相关软件(MS 、等)等因素有关,那么最终用户使用的环境我们不得而知,但在资源和时间有限的情况下,我们要尽可能的模拟用户使用的环境去确保我们的开发软件能够正确使用。所以兼容性测试是检查的是所有平台的应用程序的工作方式。通常开发团队和测试团队的测试是在单一平台中进行展开。但是,一旦发布应用程序,客户可以在不同的平台测试我们的产品,他们可能会发现在应用程序中的错误,要减少这些问题,在所有平台上测试应用程序是很重要的。换句话说,当最终的用户发现了应用程序的缺陷,这需要花费很多时间去开发补丁包去弥补错误的后果,但是经常发布产品补丁包会使用户感觉不安,所以产品的兼容性测试是无可避免的。
when,什么时候开始软件兼容性测试
当build已经相对稳定的时候就进行兼容性测试。
where,软件兼容性测试都要测什么
以浏览器兼容性测试实例展开,讨论在软件兼容性测试中要测试什么:
综上所述,对于浏览器的兼容性测试,我们要验证的是页面、字体大小和样式、特殊字符的编码、图像对齐与否、页面的头尾、页面对齐与否、文本对齐与否、控件的对齐情况、页面的放大放小测试、数据库提交信息验证、HTML视频播放格式验证、外部网站开发的插件验证、关闭和后的页面验证等。还有其他的验证内容,可以通过探索性测试中提到的一些方法,进行测试。如破坏测试法,懒汉测试法,一送一测试法,配角测试法,卖点测试法,指南测试法,超模测试法等等,可以将探索性测试用于软件的兼容性测试,更加有方向的进行兼容性测试。
who,谁来执行软件兼容性测试
测试人员和最终用户。测试人员只能模拟出大部分用户使用的环境进行软件的兼容性测试,尽可能的使大多数的用户在使用中出现较少的问题,由于时间和资源的有限性,不能够模拟出所有用户的环境,所以兼容性测试前期是测试人员进行的大范围的扫除盲点,加上后期用户的共同努力,来提升软件质量。
how,怎样执行兼容性测试
在执行兼容性测试之前要理解,在什么平台,怎样的环境,去验证哪个软件的兼容性,去根据对软件以及环境的认识,去制定有测试计划和测试策略的test plan (Test plan中包括了Test Scope, Test , , Test ),引入一些常用的测试方法,如探索性测试,手工测试,自动化测试,冒烟测试等方法,将软件的兼容性测试做活,不那么生硬,尽可能的找到更多之前没有发现的bug。 指定完test plan,就是执行这一轮的兼容性测试,配置相应的环境,采用局部自动化测试 + 手工测试的原则,去检测软件是否存在兼容性问题,完成这一轮CT,后。