
在规定的条件下对程序进行操作,以发现程序的错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
1 规定条件 --> 测试用例
2 发现程序的错误 --> 找bug
3 衡量软件质量 --> 根据各项指标评估软件的质量
4 满足设计要求 --> 是否满足用户需求、需求规格说明书、概要设计、软件设计等
按开发阶段划分:
1、单元测试(Unit Testing)
又称模块测试。对软件的组成单位进行测试,其目的是检验软件基本组成单位的正确性。测试的对象是软件测试的最小单位:模块。【例如:登录测试】
2、集成测试(Integration Testing)
集成测试也称联合测试(联调)、组装测试:将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成主要目的是检查软件单位之间的接口是否正确。【例如:京东购物用微信支付】
3、系统测试(System Testing)
将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。
【例如:房子能不能住人(功能) 房子抗不抗台风(性能);QQ能不能注册,能不能登录,能不能聊天发消息(功能) 人数太多会不会卡顿(性能)】
系统测试如何开展?
需求评审(功能需求、性能需求、接口需求) - 测试计划 - 测试用例 - 用例评审 - 测试环境搭建(平台、架构、web服务器、数据库) - 执行用例 - 提交问题 - 缺陷的跟踪和回归测试 - 测试报告
4、验收测试(Acceptance Testing)
是部署软件前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。向软件购买者展示该软件系统满足原始需求。
实施验收测试的策略有三种:
正式验收测试
非正式验收测试或α测试
β测试
按是否手工执行划分:
1、手工测试(Manual Testing)
手工测试是由人一个一个的输入用例,然后观察结果,和机器测试(指使用机器去测试,例如:手机、电脑)相对应,属于比较原始但是必须的一种。
2、自动化测试(Automation Testing)
所谓自动化测试,就是在预设条件下运行系统或应用程序,评估运行结果。(预先条件包括:正常条件和异常条件)。简单来说,自动化测试就是把人为驱动的测试行为,转化为机器执行的一种过程。
按是否查看代码划分:
1、黑色测试(Black-Box Testing)
黑盒测试也是功能测试,测试中把被测的软件当做一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入数据和输出数据。
2、白盒测试(White-Box Testing)
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是指打开盒子,去研究里面的源代码和程序结果。
3、灰盒测试(Gray-Box Testing)
灰盒测试是介于白盒测试和黑盒测试之间的一种,灰盒测试多用于集成测试阶段,不仅关注输入、输出的正确性,同时也关注程序内部的情况。
按是否运行划分:
1、静态测试(Static Testing)
静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。【静态测试属于白盒测试】
2、动态测试(Dynamic Testing)
动态测试是指通过运行被测程序,检查运行结果与预期结果的差异。【黑盒测试属于动态测试】
按测试对象划分:
(1)非功能测试
检查系统是否满足需求规格说明书中规定的性能。
通常表现在以下方面:
稳定性【例如:一万人的时候和十万人的时候,甚至一百万的时候系统会不会卡顿】
响应时间【例如:等待相应的时间是否过慢】
吞吐量(TPS)
安全测试是一个相对独立的领域,需要更多的专业知识。
如:WEB的安全测试、需要熟悉各种网络协议、防火墙、CDN、熟悉各种操作系统的漏洞、熟悉路由器等。
兼容性测试主要指软件之间能否很好的运作,会不会有影响、软件和硬件之间能否发挥很好的效率工作,会不会影响导致系统的崩溃。
平台测试【例如:各种不同品牌型号、不同操作系统(如:android、iOS)的手机是否兼容】
浏览器测试【例如:不同浏览器兼容性测试(火狐、谷歌、360等)】
软件本身是否向前或向后兼容【例如:本版本和上一版本是否兼容】
测试软件是否与其他相关软件兼容【例如:同时下载两款软件是否都能正常使用】
数据兼容性测试【数据之间有一定的隔离性,两个软件里面的数据不会串、相互隔离、兼容】
开发文件:可行性研究报告、软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明书、数据库设计说明书、模块开发卷宗。
用户文件:用户手册、操作手册,用户文档的作用:改善易安装性;改善软件的易学性与易用性;改善软件可靠性;降低技术支持成本。
管理文件:项目开发计划、测试计划、测试分析报告、开发进度月报、项目开发总结报告。
在实际的测试中,最常见的就是用户文件的测试,例如:用户操作说明书等。
文档测试关注的点:
文档的术语
文档的正确性
文档的完整性
文档的一致性
文档的易用性
易用性是交互的适应性、功能性和有效性的集中体现。又叫用户体验测试。
界面测试(简称UI测试),测试用户界面的功能模块的布局是否合理、整体风格是否一致、各个控件的放置位置是否符合客户使用习惯,此外还要测试界面操作便捷性、导航简单易懂性,页面元素的可用性,界面中文字是否正确,命名是否统一,页面是否美观,文字、图片组合是否完美等。
安装测试是指:测试程序的安装、卸载。最经典的就是APP的安装、卸载。
(2) 功能测试(Functional Testing)
功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。也是黑盒测试,测试中把被测的软件当做一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入数据和输出数据。
按测试实施的组织划分:
1、α测试(Alpha Testing)
2、β测试(Beta Testing)
α测试与β测试区别:
测试的场所不同:Alpha测试是指把用户请到开发方的场所来测试,Beta测试是指在一个或多个用户的场所进行的测试。【例如:游戏内测版本】
Alpha测试的环境是受开发方控制的,用户的数量相对比较少,时间比较集中。
Beta测试的环境是不受开发方控制的,用户数量相对比较多,时间不集中。
Alpha测试先于Beta测试执行。通用的软件产品需要较大规模的Beta测试,测试周期比较长。
3、第三方测试(Third-party Testing)
介于开发方和用户之前的测试组织。【例如:众测网】
按测试地域划分:
1、国际化测试(International Testing)
软件的国际化和软件的本地化是开发面向全球不同地区用户使用的软件系统的两个过程。而本地化测试和国际化测试则是针对这类软件产品进行的测试。由于软件的全球化普及,还有软件外包行业的兴起,软件的本地化和国际化测试俨然成为一个独特的测试专门领域。
2、本地化测试(Localization Testing)
本地化测试的对象是软件的本地化版本。
1、测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系统不能满足用户的需求。
2、程序员(开发)应该避免检查自己的程序,软件测试应该由第三方(测试人员)来负责。
3、设计测试用例时应考虑到合法的输入和不合法的输入。
4、在测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事,多余的工作会带来副作用,影响程序的效率,有时会带来潜在的危害或错误。
5、应长期保留所有测试用例,保留测试用例有助于以后修改程序后的回归测试。
1、选择测试方法:选择最合适当前项目的测试方法(比如项目紧急的时候?项目频繁发版)(例如:重复测试的工作可以采用自动化测试)
2、角色和职责:需要在测试策略里面明确定义各个角色,以及该角色的职责。比如项目经理、测试组长、测试工程师。
3、环境需求:这一点非常重要,它将描述测试时需要的系统环境(软件,服务器Linux,windows,数据库MySQL),包括软硬件以及网络环境等等。在澄清环境需求的时候,测试组织可以识别出资源方面的风险。
4、风险分析:影响测试过程的风险都应该尽早被识别出来,而且必须有相应的解决办法以便消除或减轻这些风险。(例如:人员休假、软件是否完成)
5、测试进度评估:测试进度将会评估完成测试所需要的时间。在设定进度的时候,首先需要明测试范围(比如说这次增加一个D模块,部分功能会影响原来已经上线的B模块的功能)然后根据测试资源的多少来指定能被各方面认可的测试进度计划。
6、回归测试(Regression Testing)策略:回归测试用来保证之前fix bug的代码不会影响软件的其他部分,这样需要我们选择已经执行过的测试用例重新运行。测试人员需要找到一个方法来确定哪些测试用例应该在回归测试中运行,用例不能太多,因为资源有限,用例也不能太少,否则会达不到必须的测试强度。
7、优先级:测试范围内的东西不会都是一样重要的,加上测试资源各种有限,所以为测试的模块排定优先级是十分的必要。
1、瀑布模型
瀑布模型适合于结构化方法。
软件项目或产品选择瀑布模型必须满足下列条件:

2、V模型
优点:包含了底层测试(单元测试)和高层测试(系统测试);清楚的标识了开发和测试的各个阶段;自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。
缺点:自上而下的顺序导致测试工作在编码后,不能及时的进行修改;实际工作中,需求经常变化,导致V模型步骤反复执行,返工量很大,灵活度较低。

V模型和瀑布模型有一些共同的特性,V模型中的过程从左到右,描述了基本的开发过程和测试行为。
优点:V模型的价值在于它非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各个阶段的对应关系。
局限性:(测试介入太晚)把测试作为编码之后的最后一个活动,需求分析等前期产生的错误知道后期的验收测试才能发现。
3、敏捷模型

4、W模型
定义:开发一个v,测试一个v,组合起来的模型(w模型也叫双v模型)。

5、H模型
相对于V模型和W模型,H模型将测试活动完全独立出来,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。

6、探索性测试
探索性测试可以说是一种测试思维模式。
他没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。
探索性测试强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。


最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!推荐软件测试交流学习群:914172719 里面会分享一些资深架构师录制的视频录像
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element