全程软件测试

一、认知

面试时,一个常规的问题是你对软件测试的理解?不同的人理解不同,最常见的理解是:软件测试就是寻找bug,发现缺陷。从用户的角度来说,软件测试是要确认软件产品是否满足用户的实际需求;从质量的角度来说,软件测试是要对软件进行验证与确认,保证软件产品的质量;从设计的角度,软件测试是要检查软件产品是否符合设计的要求。看问题的角度不一样,对软件测试的理解也不一样。

为了做好测试相关工作,既要有深度,又要有广度;既要有效率,又要保证测试的质量。为此,我们可以将正向思维和逆向思维结合起来,做到效率和质量的平衡。

狭义的软件测试即动态测试,运行程序而进行的测试,测试工作在编程之后的阶段展开;广义的软件测试即动态测试和静态测试的结合,将需求评审、设计评审、代码评审等纳入测试之中,使软件测试活动贯穿到整个软件研发周期之中。软件测试应该贯穿到整个软件研发周期之中,软件研发的V模型和W模型与软件测试的对应关系如下:

软件测试V模型
软件测试的W模型

总体来说软件测试的主要目的是对产品质量进行评估,持续的反馈产品的质量,提升客户的满意度,预防产品的缺陷。


二、相关思想

软件测试要贯穿于整个开发过程,基本的测试流程:

2.1 从软件工程的角度:需求评审、设计评审、代码评审、单元测试、集成测试、系统测试、验收测试、产品缺陷原因分析、产品改进计划阶段,再进入下一个循环。

2.2 从项目管理的角度:测试分析、测试计划、测试设计、脚本开发、测试评审、测试执行与监控、测试过程与结果评估、测试与质量报告、项目总结,形成项目过程环。

在需求阶段:尽可能的把用户的需求全部挖掘出来,及时的找出需求文档中存在的问题。

在设计阶段:对不合理的设计提出质疑,及时的找出设计中存在的性能、安全性、可靠性等潜在的风险。

在代码评审阶段:及时的发现不规范的代码、不合理的算法、逻辑错误。

在单元测试阶段:及时发现代码功能的错误实现。

在集成测试阶段:及时的发现各个模块之间的问题。

。。。

软件研发与运维质量保证全流程


三、基础设施

3.1 虚拟机与容器技术

在软件测试中,在下一轮的测试时需要将测试环境恢复到最初的状态,不得不重新安装测试环境,浪费时间。在进行性能测试时,需要大量的测试机,工作量大、占用实验空间。针对这样的测试场景,可以采用虚拟机和容器技术来解决。

虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。

虚拟机技术是虚拟化技术的一种,所谓虚拟化技术就是将事物从一种形式转变成另一种形式,最常用的虚拟化技术有操作系统中内存的虚拟化,实际运行时用户需要的内存空间可能远远大于物理机器的内存大小,利用内存的虚拟化技术,用户可以将一部分硬盘虚拟化为内存,而这对用户是透明的。又如,可以利用虚拟专用网技术(VPN)在公共网络中虚拟化一条安全,稳定的“隧道”,用户感觉像是使用私有网络一样。

Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

3.2 持续集成环境

良好的持续集成环境能够实现自动构建、自动部署、自动验证、并能够实时的将这些环节的结果发布早Web服务器上,CI环境主要涉及的工具如下:

        代码管理工具:GitHub、GitLab、SubVersion等

        版本构建工具:Ant、Maven、Gradle等

        持续集成调度工具:Jenkins、BuildBot等

        自动部署工具:Capistrano、CodeDepoly等

        配置管理工具:Ansible、Bash等

        代码静态分析工具:Findbugs、C++Test等

        单元测试工具:JUnit、PyUnit、Mocha、CppUnit等

        版本验证工具:Selenium、Appium等

CI环境基本构成示意图    

3.3 自动化测试框架

自动化测试框架集成了测试脚本开发环境、测试执行引擎、测试资源管理、测试报告生产器、函数库、测试数据源、其他可复用模块和各种测试工具。

自动化测试框架基本构成  

3.4  DevOps完整工具链

DevOps完整工具链包含了5类常见的工具,构建、测试、工件管理、部署和评估,相对完整的DevOps工具链大概需要覆盖14类工具、如下:

编码/版本控制:维护和控制源代码库中的变更。

协作开发:在线评审工具、在线会议平台等。

构建:版本控制、代码合并、构建状态。

持续集成:完成自动构建、部署、测试等调度。

测试:自动化测试开发与执行、生成测试报告等。

打包:二进制仓库、docker镜像仓库。

部署:完成在服务器或集群上自动部署软件包。

容器:运行自己的进程、文件系统和网络栈。

发布:变更管理、发布审核、自动发布。

编排:计算机系统之间的协作和集成,保证业务需求和用户自己设施资源相匹配。

配置管理:维护硬件和软件最新的、细节的记录,包括版本、需求、网络地址、设计、运维。

监视:性能监视、用户行为反馈。

警告与分析工具:根据事先设定的警戒线发出警告、日志分析、大数据分析等。

维护工具:应用服务器、数据库、云平台等。


四、技能提升

给即将踏入工作的自己的小期许,刚入职时需要学会日常所需的工具,Bug工具、用例工具、代码管理工具、项目管理工具、Linux客户端工具、Mysql客户端工具等;根据实习的经验要注意以下几点:1、不会的自己先百度,百度后还是搞不定的,问下同事不要瞎浪费时间。2、然后要清楚公司的组织架构情况,了解下哪些部门,与哪些部门需要强协作的;3、开展工作前若不确定具体的目标,先跟老大确认下 ;4、工作中可能遇到的所有问题同事都已经遇到过 ,汇总自己不懂的问题后,一次问完;5、遇到问题也可以看看历史Bug库、用例库,便于快速了解系统现状,存在的问题,通过问题,快速熟悉系统,特别是你即将要负责的业务模块,一定要弄懂;6、有时间,多用用自己的公司产品 ,以熟悉相关产品并发现产品的缺陷 ;7、认真完成老大交付的每个任务,完成后要及时的反馈结果 。

不断地提升自己的测试技能,测试技能的发展方向:

1、技术管理,走经理、总监等职业发展路径,需要团队管理、协调、领导能力、计划能力、风险控制能力等。

 2、测试开发或者专项测试, 侧重自动化测试框架、平台开发和性能测试等,成为测试架构师、技术专家、需要业务建模、系统架构设计、编程、脚本开发与调试、环境构建等技能。

3、业务测试,侧重产品的功能测试、易用性测试等,成为资深测试工程师、业务测试专家,需要业务分析、测试策略制定、测试用例执行、情境性思维等技能。

不管向哪个方向发展,需要如下的基本能力和基础知识。

测试基础理论:软件工程学、测试技术知识、操作系统、数据库、形式化方法、心理学等。

基本测试能力:计算机操作能力、测试基本方法、测试工具的使用等。

基本软实力:沟通能力、学习能力、观察能力、专注力、测试思维等。

软件测试能力模型
web测试工程师测试技术栈    
敏捷测试关注的项能力  

基础技能如下:

4.1,基础:软件的安装与使用:安装SVN、安装JDK、Java环境搭建、安装Navicat、安装VM虚拟机、搭建linux系、安装xshell和XFTP、安装Jmeter和badboy、安装soapui、monkey环境搭建、搭建tomcat、 数据库的安装与使用、安装Fiddler、安装LoadRunner

4.2、概念:软件测试的定义&分类、软件的生命周期、软件测试工作流程、用例设计方法之:等价类、边界值;用例设计方法之:错误推测法、场景法;软件测试需求分析工作、软件测试用例的编写、软件测试用例的评审、bug的定义&生命周期、bug状态的处理、bug管理系统禅道的使用、版本控制工具SVN的使用、浏览器兼容性测试

4.3、项目立项:软件测试-需求评审、软件测试-需求讲解、讲解测试计划编写、编写软件测试用例实战、用例评审、web项目实战、bug项目实战

4.4、软件系统知识计算机网络知识:Linux操作环境的准备、Linux相关命令、Linux下MySQL数据库、禅道的安装与使用、掌握创建数据库库,表的sql命令;掌握数据库操作之增删改的sql命令;掌握数据库操作之查询的sql命令;掌握数据库其他高级查询sql命令的用法;项目核心业务流程测试梳理和对应数据流;

4.5、fiddler原理介绍+环境准备:学会从抓取到的会话信息分析请求资源类型;掌握过滤器和常见过滤命令的用法;掌握Composer,AutoResponder的用法以及断点调试;利用Fiddler抓包来分析定位APP/WEB前后端 bug;

4.6、接口测试:接口项目之需求分析;接口项目之测试用例编写;接口项目之测试环境部署(必须上课带着实操);接口测试用例评审;接口测试工具Jmeter之常见测试元件;接口测试工具jmeter之http、jdbc、soap请求;接口测试工具jmeter之参数化、关联、断言

4.7、APP测试重点:APP项目常见测试问题;APP专项测试(压力稳定性、性能、网络);APP日志分析(崩溃、无响应问题)

4.8八、敏捷开发:敏捷开发模式开展APP项目实战;敏捷开发模式之任务划分及领取;敏捷开发模式之测试点整理;敏捷开发模式之执行测试&提交bug&测试报告提交;敏捷开发模式之项目总结

4.9、python自动化测试:python基础语法+常用数据类型;python常用运算符&控制流&字典&列表;python内置 函数&函数的学习;python的requests请求;python利用Excel读取和存储测试数据;python之接口自动化实战

4.10、loadrunner:loadrunner录制压力测试脚本;loadrunner优化脚本&参数化;loadrunner脚本终极优化;loadrunner之controller场景设计;loadrunner之Analysis结果分析;loadrunner性能测试项目实践;loadrunner编写压力测试报告


五、项目启动

软件测试的目标在某种意义上说就是为了保证软件产品质量具有较高的水平。软件产品的质量在很大程度上依赖于软件测试的开展以及执行的结果。要做好软件测试,必须了解以下内容。

用户是谁?

确定用户是来自企业还是大众用户,了解用户来自的具体行业或领域。从用户的角度去想用户想做什么、会做什么、分析用户的角色行为。

对质量有什么要求?

软件的质量需求从根本上说是为了引导和满足客户的需求,软件质量具体表现在软件产品的具体特性上,基于这些属性结合产品的特点进行更加深入的分析。

产品质量模型

此外,软件测试的展开要参考国际或者国内的行业标准。国际软件测试标准为ISO 29119,在实际的软件测试中,很少参照该模型,但相应的行业标准必须参考。

为了更好的分析被测对象,可以从哪些方面进行分析?

结构:软件系统的结构体现在层次性、组件化和接口标准化等,以此测试也可以分层进行、面向接口镜像、针对组件进行测试等。

功能:业务需求一般都是由功能承载的,需要了解系统功能之间的依赖关系、功能之间的交互作用等。

数据:从测试覆盖来看,可以分为控制流和数据流,控制流体现在代码逻辑覆盖、基本路径覆盖、业务流程覆盖等;数据流体现在业务数据覆盖上。

平台:软件运行的平台,包括操作系统、数据库、浏览器、虚拟机、云平台、平台的参数组合等,可以理解为软件运行环境的兼容性测试。

操作:用户的行为和操作方式。

时间:嵌入式系统、实时应用系统对时间具有较强的敏感性,需要着重关注。

具体的测试规范?

1.角色的确定:任何项目的实施,需要考虑的是人的因素。在软件测试中,需要把涉及的人员进行分类,并按角色进行职责划分。

软件测试中最基本的角色定义  

2.进入准则:软件项目立项并得到批准就意味着软件测试的开始,对于各个阶段,也需要重新定义测试进入准则。

3.输入项:软件测试需要相关的文档作为测试设计和测试过程中判断是否符合要求的依据和标准,包括需求描述、系统设计、程序代码和软件配置计划等。

软件测试输入项

4.活动过程:

制定测试计划

测试设计

开发测试工具和脚本

执行单元测试

执行集成测试

执行系统测试

评估测试

5.输出项:主要包括软件测试计划、测试用例、测试缺陷记录、测试结果分析报告等。

软件测试输出项

6.评审与评估:对测试输出项、按照相应的检查项或者模板进行评审、对测试过程和结果进行评审和评估。

软件测试评审与评估项    

7.退出准则:退出准则满足项目测试结束的标准。

8.度量:测试活动结束之后,软件质量度量工作,一般由SQA人员通过一系列活动收集数据,利用统计学知识对软件质量进行统计分析,得出比较准确的软件质量可靠性评估报告,提供客户和组织内部的管理层。


六、测试框架与用例设计

5.1 测试框架的设计

5.1.1、从需求到测试用例

产品中要实现的功能都来自用户的实际需求;针对不同的功能需求不同的用户角色的使用是不一样的,这就是用例,即用户角色的行为分析;每个用例(用户行为)又可能在不同的应用场景下产生;在不同的场景中融入测试数据、测试条件等方法便形成了测试用例。从需求到功能、从功能到用例、从用例到应用场景,逐步分解,到最后就形成了一个庞大的测试用例。

从需求到测试用例的演绎  

5.1.2、基于SUT结构来组织设计

测试可以从被测系统(system under test,SUT)的结构、质量、项目因素等方面来考量。测试用例和功能结构有对应关系,呈现出层次结构。 

测试用例框架示意图

从SUT结构的角度来看,测试涉及涉及以下4个方面

基于SUT结构的测试系统架构  

5.2 测试设计要考虑的因素

在测试设计与执行时,不可能穷举所有的测试场景或组合,所以在设计测试用例时,需要抓住测试的重点和关键点。测试设计主要考虑的因素如下:

测试需求目标,包括功能新测试需求目标和非功能性测试目标;

用户实际使用的场景,从用户的角度来模拟程序的输入,是产品更能贴近用户的请求;

软件功能需求说明规格说明书、产品设计文档等,是测试设计的主要参考文档;

测试的方法对测试用例设计的影响,在测试用例的设计上,白盒测试主要从内部逻辑思路来考虑,黑盒测试方法主要从外部功能思路来考虑。

被测试的对象,客户端软件和服务端系统、分布式系统和集中式系统、异步系统和同步系统等,测试用例的侧重点是不同的。

5.3 如何运用测试设计方法

测试设计方法主要包括以下几种:基于逻辑覆盖的方法、基于路径覆盖的方法、基于输入域的方法、基于模型的测试方法、基于场景的测试方法、基于直觉和经验的方法、基于故障模式的测试方法、组合测试方法、模糊测试方法。

5.3.1、测试覆盖率

衡量测试设计是否成功,主要评估测试的充分性,测试充分性的量化指标即为测试覆盖率。

代码层次各种覆盖及其强弱关系  

5.3.2、控制流和数据流

在代码层,控制流体现在语句覆盖、判定覆盖和基本路径覆盖,数据流体现在变量的定义和使用。

在业务层,控制流体现在业务流程图,数据体现在数据流程图。

eg 用户登录界面测试用例设计

根据业务流程设计测试用例,首先分为自动登录和不能自动登录两类;其次,对于不能自动登录的测试,要考虑分别输入账号和邮箱地址,考虑不同输入项的错误,包括账号、邮箱地址、密码、验证码等。这样,可以设计以下16个测试用例:

(1)输入错误的账号,其他各项正确;

(2)输入错误的邮箱地址,其他各项正确;

(3)输入正确的账号,输入错误的密码,验证码正确;

(4)输入正确的账号和密码,输入错误的验证码;

(5)输入正确的邮箱地址,输入错误的密码,验证码正确;

(6)输入正确的邮箱地址和密码,输入错误的验证码;

(7)输入正确的账号、密码和验证码;

(8)输入正确的邮箱地址、密码和验证码;

(9)输入正确的账号、密码和验证码,单击“看不清,换一张”;

(10)输入正确的账号、密码和验证码,标记“下次自动登录”;

(11)输入正确的账号、密码和验证码,去掉“输入输入正确的账号、密码和验证码”标记;

(12)输入正确的邮箱地址、密码和验证码,标记“下次自动登录”;

(13)输入正确的账号,输入错的密码,验证码正确,单击“登录”按钮,重复进行三次以上;

(14)输入错的账号,输入正确的密码和验证码,单击“登录”按钮,重复进行三次以上;

(15)输入邮箱地址,单击“忘记密码”,按提示进行操作;

(16)什么都不输、单击“忘记密码”,按提示进行操作;

用户登录的流程图

5.3.3、清楚某种方法的应用场景

每个方法都有特定的应用场景,也就是说需要在特定的场景下选择合适的方法。

5.4 测试执行过程

测试执行的前阶段强调测试效率,侧重发现缺陷,后阶段重点是降低风险,系统的覆盖测试范围。

测试执行的立体过程

全程软件测试就是从头到尾,覆盖每一个环节。图文来自全程软件测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270