1、如何根据需求去设计测试用例?
1、验证需求的正确性,合理性,无二义性(没有歧义),逻辑自洽。 2、分析需求,细化需求,从需求中提取出测试项,根据测试项找到测试点,再根据测试点去具体的设计测试用例。
2、根据需求设计测试用例分为两个方面?
1、功能性 ??1.1、界面的所有功能不能遗漏(技巧:从上到下,从左往右,一层一层的扫描) ??1.2、把多个功能串联起来,形成 场景 / 业务,对 场景 / 业务 进行测试。 ??1.3、针对一个功能的多个输入进行测试,观察输出是否与预期结果一致。 ??1.4、同一个系统下,不同功能的交互性 ??1.5、功能的异常测试 ??1.6、功能所用到的算法,也是需要进行验证的。 2、非功能性 ??易用性,容错性,安全性,性能,可维护性,可靠性,可移植性,稳定性,兼容性等等。。。 需要注意的是:不同类型的软件,非功能性测试的侧重点是不一样的。 面向客户端的软件:对 稳定性 和 兼容性 要求高,对 安全性 和 性能要求低。 面向企业内部的软件:对 功能性 和 可靠性 要求高,对 兼容性 和 性能 要求低。 大型商用软件:对 非功能性的各个方面的要求都很高!
3、具体的设计测试用的方法有哪些?
1、等价类【有效等价类,无效等价】 ??等价类是为了解决测试无法穷举的情况。 根据输入(特殊情况下,才考虑输出),将具有某种共同特性的输入划分成一个类(等价类),从每一个等价类当中选择(一个或者几个)测试用例进行测试。 如果这几个测试用例,整个测试通过了。 ? 2、边界值 边界值通常取值为:上限-1,上限,上限+1,下限-1,下限,下限+1。 另外,边界值通常与等价类结合在一起,进行设计测试用例。 因为 边界值的取值 涉及到 有效等价类 与 无效等价类 ? 3、因果图: 因果图 是 一种逻辑图,它具有 恒等,与,或,非 逻辑。 用因果图来设计测试用例,就叫做因果图法。 其设计测试用例的步骤: 1、分析输入和输出 2、找到输入和输出之间的逻辑关系 3、根据输入输出之间的逻辑关系,画出因果图 4、根据因果图写出判定表 5、根据判定表设计测试用例 ? 4、错误猜测法 经验之谈,非常依赖个人能力。 通常是作为一种补充的设计测试用例的方法 ? 5、场景设计法:对 场景 / 业务 进行测试。【涉及多个功能的测试】 6、正交排列:利用正交性进行设计测试用例 【了解】
?
进阶篇
本文的主要目的:更深入的告诉大家具体从某一个方面来设计测试用例。
?
按测试对象进行划分
界面测试
大家一定要明确:用户是通过界面和软件之间进行交互的。
界面设计的好坏,直接影响了用户对软件的印象! 而界面的设计是由 UI(User interface - 用户界面)设计师 画出来的。 前端程序员照着 UI 的设计稿 进行制作的。 因此,界面测试又可称为 UI 测试。
?
那么,界面测试/UI测试 具体要测试那些?
1、测试软件界面元素的完整性,正确性,一致性.
在 UI 设计稿上,对于每个界面元素的尺寸,位置,效果,都有明确的标识。 因此测试软件界面元素是非常有必要的!
2、软件界面的排版布局要合理
除了页面布局,甚至包括字体的大小,颜色等等。。。 都可以向 UI 设计师进行反馈。
3、测试界面的自适应性,界面适应不同的页面大小
除了页面的大小之外,还有: 1、观察文字有没有重叠,消失 2、功能都在,并且可以正常使用。 3、图片清晰,排版合理 。。。。 为什么要测试这个? 你可以想象一下: 一个网页你可以使用 PC端打开,也可以使用移动端(移动)打开。 PC端 和 移动端 之间 最大的区别就是 屏幕的尺寸不同。 因此,如果对 移动端 使用 PC端显示的界面,很明显尺寸上是不匹配的。 很可能会导致页面显示错乱! 因此,我们需要观察页面是否会随着 页面的大小,自适应的改变界面元素的大小和排版。 另外,界面必须功能完整,文字完整,图片完整,不出现叠加,消失,功能无法使用的情况
4、界面的控件功能正常
控件:1、对话框,2、滚动条,3、各类按钮… 另外,按钮的有效状态 和 失效状态 是可以区分的。 有效状态:按钮高亮 无效状态:按钮置灰,不能进行点击操作。
5、界面设计(颜色,布局)考虑当下时事。
比如一些 特殊的纪念日 / 节日,根据其 意义 / 氛围 进行 界面设计。
?
界面常见的错误
1、不合适的快捷键
就是说:你设计的快捷键的内容,无法识别,导致显示出一些奇奇怪怪的字符。
2、文字的丢失 ? 3、截断 ? 4、文本未对齐 ? 5、文字的自动换行 ? 6、重叠 ? 7、重复的快捷键
?
可靠性测试
可靠性:是指 软件正常运行的能力。
可靠性,通常是百分之来表示的。 百分比:软件正常运行的时间 和 总体运行的时间的商。 百分比越高,可靠性越强;反之越低。 ? 百分比的计算: 可靠性 == 软件正常运行的时间 / (软件非正常运行的时间 + 软件正常运行的时间)
?
影响软件的可靠性的因数
1、网络 2、软件环境(安装环境) 3、硬件环境
不管是上面那个环境的异常,都会使 软件运行发生异常。
4、软件自身
这里有一个问题:如果软件的自身没有问题,但是 软件部署的环境(网络 / 软件 / 硬件) 出了问题,使得软件不能正常运行的时间。 这个时间是否算入 软件非正常运行的时间里面? 也就是在问你:这个时间是否算入可靠性里面? 这个需要分情况讨论!
总的来说:上面的这四点,都是指 服务器那边 出现的问题 会导致 软件的可靠性降低。
就这么说吧:如果你和其他有人都用不了 微信,那肯定就是 微信服务器 那边出了问题。 而这个非正常运行的时间,需要算入可靠性里面的。
另外,前面也说过:不同的软件对于 非功能性 的 要求是不一样的。 也就是说:不同的软件对可靠性的要求是不一样的。
非时性软件可靠性的要求一般为 99.99 %。【实时性为 99.95 %】 非时性的软件:邮件系统 邮件系统,发送的邮件,并不要求对方马上就能收到。 因为一般在公司里面,每天都会都是 N 份邮件,查看邮件一般都是挑选一个时候去查看的。因此其实邮件发送的快一点,慢一点,都是无所谓的。 我们只需要知道收到了即可。 非时性: 发送数据时,对方不是立马就收到的情况。 因此,由于发送时间的问题,我们必须得保证 发送的数据不会丢失。 ? 另外,还有一些特殊的软件(军事系统)对可靠性的要求更高:99.999 % 如果按一年365天来算的话: 可靠性为 99.99 %:它的非正常运行时间大约为 52 min 如果是 99.999 %,则为 5 min
那么,可靠性怎么去测试呢?
通常是将软件运行一周,将出现故障的时间记下来,去计算百分比。 【PS:测试可靠性,让软件运行一年肯定是不现实】
?
容错性
系统发生异常,或者由于用户的错误操作导致软件系统发生错误,软件自我消化掉错误,或者进行修改/修复,不让客户感知到系统内部的情况,就叫做 系统的容错性。
?
常见的容错性
1、数据的容错性
比如:取款机输入小于 100 的 取款数目,但是在中国的取款机,只能取出能被100整除的数目。 一般取款机在遇到这个问题的时候,都会弹出温馨提示“请修改你的取款金额之类的信息”。此时我们只需要点击确定,修改取款金额即可。 其实在提款机出现这个提示之前,也就是我们输入非整百的金额,并点击取款按钮的时候,这个数据已经在软件系统中走了一圈,引发了异常。 只不过表现的形式不是报异常,而是提示你重新输入整百的取款金额。 简单来说: 就是我们的输入已经触发了异常,但是系统并没有报出异常。 而是给予正确的提示。 其实这就已经是处理了异常。 而这种行为,就是容错性的体现 ? 除了提款机这个例子,还有一个很直观的例子,就是 时间。 假设我们输入了 一个 25时 72分,这肯定是不合适的! 因此,前端一般都是让用户去选择时间,而不会让用户去输入时间。 这样就不会出现时间不符合规则的情况。 这种让我们去选择时间,避免输入错误的机制,其实就是 容错性的体现。 ? 其实大家仔细想想 年月日 的 输入,也是一样的情况。 也是让我们去选择,避免我们输入错误的日期。
2、校验容错性
在搜索某些关键词的时候,在前后加上空格,系统会进行自动化过滤(将前后的空格移除掉)。 这个我其实在前面的博文中提到过: 在搜索某些关键词的时候,在前后加上空格。 哪怕服务器的数据库真空有对应的数据,都无找到。 原因就是 没有 去掉 关键词前后的空格,导致将 空格 也算入 关键词,从而无法找到对应的数据。 而系统会自动化进行过滤大的操作,是 校验容错性的 体现。 其实,除了校验省略关键字前后的空格之外,还有校验 忽略大小写字母。 忽略大小写字母,主要体现在验证码环节。 其实 验证码 在内部验证的时候,自动的将我门将输入的字母进行转换了。 然后,再去跟验证码进行比较。 ? 还有一个地方也体现出了 校验容错性的。 其实在我们 注册 / 修改 某个(软件/网站) 的账号密码的时候,它是不是会让我们输入 2 遍 密码? 如果我们后面输入的密码 和 前面的,不一致。 它就会提示我们前后输入的密码不匹配,请重新输入 这也是 校验容错性的体现
3、界面容错性
界面的容错性,体现在 复杂操作的提示。 有的时候,软件的操作有些复杂,导致有些用户拎不清楚。 因此,就需要软件界面给予下一步的操作提示,以免用户操作错误。 ? 除此之外,还有 危险操作的警告提示 和 危险按钮的屏蔽。 危险操作的警告提示:提示此操作具有危险性,并说明操作之后,会怎么怎么样,然后告诉你慎重选择! 危险按钮的屏蔽:该按钮被点击的话,会产生不好的效果,因此直接将其屏蔽,让其无法使用。 ? 其实 界面容错性,说白了就是: 在用户进行一些 复杂 / 危险/有风险 的操作,给予正确的提示,避免用户在不知情的情况做出错误操作。
4、环境容错性:
环境的容错性,主要体现于软件所在环境发生故障的时候,具有备用的处理方案,可以让用户无感知切换。 ? 环境的故障,主要体现于:网络,电源,硬件环境,软件的部署环境。 ? 举个例子: 淘宝618活动知道吧?各种秒杀价活动! 这个时候的用户的请求巨多!!! 如果软件所在环境发生故障,导致用户无法进行操作, 那么无疑对于淘宝来说是 损失是巨大的!!! 因此,对于环境要有各种各样的备用方案,以面对突发情况的发生。 在环境发生故障的时候,运维感知到之后,立马就给你切换成备用方案。 这个切换的过程,是用户感知不到的! 在背后就把事情都给做完了。
?
灾难恢复性测试 - 了解即可
人为让系统发生故障,看系统自身,对于用户数据的存储和恢复 是否 完整和快速。
?
总结
不管是 数据容错性 和 校验容错性,还是 界面容错性 和 环境容错性,都是对于软件系统发生故障的时候,具有备用的处理方案。 使得用户在无感知的情况完成对应的操作。
?
文档测试
文档测试:就是针对与软件开发相关的文档所进行的测试。
国家有关计算机软件产品开发文件编制指南中共有14 种文件,可分为3 大类。 1、开发文件:可行性研究报告、软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明书、数据库设计说明书、模块开发卷宗。 ? 2、用户文件: 用户手册、操作手册,用户文档的作用:改善易安装性;改善软件的易学性与易用性;改善软件可靠性;降低技术支持成本。 ? 3、管理文件:项目开发计划、测试计划、测试分析报告、开发进度月报、项目开发总结报告。 ?
在实际的测试中,最常见的是用户文件的测试,例如:手册说明书等。也会有一些公司对需求文档进行测试,来保证需求文档的质量。
?
文档测试的关注点:
1、文档的术语
因为这是给程序员看的东西,可以不用把一些专业术语描述的太过于详细。 直接一个专业术语就能带过的。这样能够提升阅读的效率。 如果写的太详细,人家还以为你有什么特殊需求,结果返现就是一些废话。
2、文档的完整性
将一个软件的所有的功能描述完整。切勿遗漏重要功能!
3、文档的一致性 && 4、文档的正确性
一些重要功能的效果,有时候也会写在文档中。 方便确认:做出来的功能是否达到了预期效果
5、文档的易用性
直白来说:通俗易懂,当然只是针对于我们技术人员。
?
兼容性测试
兼容性测试需求是指: 明确要测试的兼容环境,考虑软,硬件的兼容,就软件兼容来说,主要考虑以下几个方面: (1)软件自身的兼容性
软件“向前向后”的兼容性: ??软件开发的新功能,不能影响 旧功能 的使用。同时,也不能影响后续功能的开发。
(2)软件对于数据的兼容性(特别是用户数据)
每个软件肯定都是有用户在使用的,那么有一张存储用户的数据表(User)也是很正常的。 假设,我们给某个软件开发了某个功能,给 User 表 添加了一个字段【记录用户用户平均每个月的消费】 那么,此时就会出现一个问题:在开发这个功能之前的程序,是没有这个字段存在的。 我们需要给这个新的列 赋予 初始值(默认值)。 你不能说:新增的一个字段,以前的旧字段数据就放不进去了。]这就会导致出现异常。 ? 在设计功能的时候,要考虑到用户已有的数据!!!
(3)软件对应用平台的兼容性
比如: 1、安装的软件环境(Windows,iOS 等操作系统) 2、安装的硬件环境(电脑配置是否能支持软件的运行) 3、APP环境(手机的应用商店,WeGame,Steam等等) 4、浏览器(网页游戏,一些页面功能非常强大的网页) 总得来说,主要分为两种情况: ? 1、APP 常见的APP系统环境:iOS,Android 等等,,, 而硬件,体现在手机的品牌和版本上。不同品牌和版本的手机的制作方式,标准都是不同的。 ? 2、web网页 系统环境:不同的浏览器,其内核是不同的。【特指 IE,谷歌,搜狐这种浏览器,它们都是有着自己独特内核。】然后,不同的浏览器又是装在不同的电脑设备上,这就会有涉及兼容的问题。 这些都是关于平台兼容性的问题。
(4)软件对于第三方软件或者第三方软件数据的兼容性
很容易理解的! 就像我们使用免费的编辑器一样,想要完成各种各样的代码需要安装很多种插件。 我们没有说:安装插件之后,编译器原先的一些功能就不能使用了嘛,对不对?插件与编译器之间是互不影响的! 这就体现出了 软件 对于 第三方软件 的兼容性 和 第三方软件数据的兼容性。 因为,编译器 和 插件操作的数据都是同一份数据。 ? 这里需要注意的是: 第三方软件,并不只是插件! 更广泛的来说:是和某个软件有关联的软件。 比如 : 京东 和 微信。 京东付款,就可以使用微信的。 它们之间肯定是做到 软件的兼容 和 数据的兼容。 比如: 1、京东在付款的时候,会跳转的微信的支付页面,这就是软件兼容的体现 2、京东是可以使用微信来登录的,这就是 数据的兼容。
?
易用性测试
许多产品都应用人体工程学的研究成果,是产品在使用起来更加灵活和,舒适。软件产品也始终关注用户体验,让用户获得舒适,易用的体验,针对软件这方面的测试称之为易用性测试。 ? 易用性在ISO25020标准中指容易发现,容易学习和容易使用。易用性包含七个要素:符合标准和规范,直观性,一致性,灵活性,舒适性,正确性和实用性。 我们主要讨论以下几个方面: 1,标准性和规范性
对于现有的软件运行平台,通常其UI标准已经不知不觉地被确立了,成为大家的共识。多数用户已经习惯并且接受了这些标准和规范,或者说已经认同了这些信息所代表的的含义。 比如: 1、安装软件的界面的外观 2、在什么场合使用恰当的对话框 。。。 所以用户界面上的各种信息应该符合规范和习惯,否则用户使用起来会不舒适,并得不到用户的认可。 测试人员需要把??与标准规范,习惯不一致的问题报告 视为缺陷. 你没有见谁说过:红灯行,绿灯停的话吧? 除非他想要过马路只需两步。
2,直观性
用户界面的直观性,要求软件功能特性易懂,清晰。用户界面布局合理,对操作的响应在用户的预期之中。 比如: 数据统计结果用报表的形式(条形图,扇形图等)展示清晰直观;现在主流的很多搜索引擎和日历的设计也有直观性的特点;
3,灵活性
软件可以有不同的选项,用来满足不同使用习惯的用户来完成相同的功能。 但是灵活性的设计要把握好度.,不然可能由于太多的用户状态和方式的选择,增加了软件设计的复杂性,和程序实现的难度。 例如: 手机键盘有九宫格和全键盘,还支持手写,满足了不同用户的需求
4,舒适性
舒适性主要强调界面友好,美观,操作过程顺畅,色彩用运恰当,按钮的立体感等。 例如: 左手鼠标的设置给习惯用左手的人带来了便利,也为右手十分劳累时提供了另一种途径;
5、实用性
软件的定位与设计,与本身的功能要一致。 不要跑偏了!!!! 比如: 我们下载了一个视频软件用来看视频,结果软件的主页全是文章。 这就很奇怪,已读怀疑自己是否下错了软件。
?
安装卸载的测试
应用的安装和卸载在任何一款APP中都属于最基本功能。 一旦出错,就属于优先级为紧要Critical的缺陷(严重的缺陷)。 主要需要考虑以下方面: 软件在不同的安装和卸载方式的情况下: 应用是否可以在不同的环系统,版本下安装(安装兼容性) 安装或者卸载过程中是否可以手动暂停,或者取消,并且后续还可以正常安装和卸载 安装所需的内存空间不足的时候,系统是否有提示 是否可以正常的卸载,以及应用软件的各种卸载方式,并且如果在执行取消卸载命令之后,软件可以正常使用。【数据恢复】 卸载和安装过程中出现环境问题,软件是否可以正常并且合理的应对,比如死机,断电,断网等情况。
?
安全测试
安全性是指信息安全,是指计算机系统或网络保护用户数据隐私,完整,保护数据正常传输和抵御黑客,病毒攻击的能力。 安全性测试属于非功能性测试很重要的一个方面,系统常见的安全漏洞和威胁如下:
输入域【输入框中的内容】 如输入恶性或者带有病毒的脚本或长字符串; 代码中的安全性问题 如SQL/XSS注入 不安全的数据存储或者传递 数据文件,邮件文件,系统配置文件等里面有危害系统的信息或者数据; 有问题的访问控制,权限分配等 假冒ID:身份欺骗 篡改,对数据的恶意修改,破坏数据的完整性 权限要合理分配,防止用户看到它不该看到的东西。【超出自身权限】
安全性测试的方法有代码评审,渗透测试,安全运维等,常用的静态安全测试工具有,Coverity,IBM,Appscan Source,HPFortify,常用的动态安全测试有OWASP的ZAP,HP WebInspect等。其中静态安全测试是常用的安全性测试的方法。
?
性能测试
我们在使用软件的时候有时会碰到软件网页打开时越来越慢,查询数据时很长时间才显示列表,软件运行越来越慢等问题,这些问题都是系统的性能问题引起的。 要解决软件产品的性能问题,要对产品的性能需求进行分析,然后基于系统的性能需求和系统架构,完成性能测试的设计和执行,最后要进行持续的性能调优。常见的性能问题如下: 1、资源泄露
当我们的软件运行越来越慢,加载一个页面需要半天的时候,其原因就是 资源泄露。
2、资源瓶颈
,在不同压力下观察系统是否仍能正常运行,且各项性能指标满足要求?当无法满足指标要求或出现异常时,即判定为瓶颈出现.
3、线程死锁,线程阻塞 4、查询速度慢或效率低 5、受外部系统影响越来越大 6、响应速度越来越慢。。。 ? 衡量一个系统性能好坏的关键性指标有: 用户响应时间,事务平均响应时间(TPS),吞吐量,每秒点击次数,内存和CPU使用率等。
?
内存泄漏测试
很多软件系统都存在内存泄露的问题,尤其是缺乏自动垃圾回收机制的“非托管”语言编写的程序. 例如: C、CH、Delphi等。从用户使用的角度来看,内存泄露本身不会造成什么危害,一般用户可能根本不会感觉到内存泄露的存在。但是内存泄露是会累积的,只要执行的次数足够多,最终会耗尽所有可用内存,使软件的执行越来越慢,最后停止响应。可以把这种软件的问题比喻成软件的“慢性病”。
虽然内存泄露的问题不会一下子要了“我们的命”,但是放任不管,是绝对不行的。 这是一个很重要的bug!需要我们去重视!
造成内存泄露的原因有很多,最常见的有以下几种。 1、分配完内存之后忘了回收。 2、程序写法有问题,造成没办法回收(如死循环造成无法执行到回收步骤)。 3、某些API函数的使用不正确,造成内存泄露。
内存泄漏的检测方法
人工静态法:代码走读,人工查找未被回收的内存。 自动工具法:借助相应测试内存泄漏的工具,如Visual Leak Detector,记录每次内存分配,清楚告诉用户内存是如何泄漏的。
?
实战 - 微信发红包的测试用例
功能
?
性能
?
兼容
?
界面
?
安全
?
易用性(有点重复)
?
按是否查看代码划分
在软件测试岗位的面试中,常常被面试官问到的概念就是黑盒和白盒的测试了,下面就来彻底讨论一下。
?
黑盒测试(Black-box Testing)
黑盒测试就是在完全不考虑程序逻辑和内部结构的情况下,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当的接收输入数据而输出正确的结果,满足规范需求。 所以,黑盒测试又称之为数据驱动测试,只注重软件的功能
?
黑盒测试的优点
1、不需要了解程序内部的代码以及实现,不关注软件内部的实现。 ? 2、从用户角度出发设计测试用例,很容易的知道用户会用到哪些功能,会遇到哪些问题,锻炼测试人员的产品思维。 ? 3、测试用例是基于软件需求开发文档,不容易遗漏软件需求文档中需要测试的功能。
?
黑盒测试的缺点是不可能覆盖所有代码。
黑盒测试用到的测试方法有,等价类,边界值,因果图,场景法,错误猜测法等。
?
白盒测试(White-box Testing)
白盒测试又称为结构测试或逻辑测试,它一般用来分析程序的内部结构,针对程序的逻辑结构来设计测试用例进行测试。 ? 白盒测试的测试目的是,通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。 ? 主要包含六种测试方法: 语句覆盖
简单来说:就是把 所有代码都执行一遍,看看有没有问题。 但是,程序是非常讲究逻辑性的! 所以,一个简单的语句覆盖是不行的。还需要搭配其它的测试方法来使用。
路径覆盖
代码中涉及到路径的有: if? else switch ?case try catch finally
逻辑覆盖 :(判定覆盖、条件覆盖、判定组合覆盖 、判定和条件覆盖、条件和条件组合)
逻辑覆盖包含后面所有的测试方法。 判定覆盖,就是判断条件为 true,还是 false。 ? 条件覆盖,就是比如 a > 1 and b == 0,这种布尔类型的条件。 ? 判定组合覆盖,就是说 一个条件的真假,对数据操作的结果是不同的。 形象点来说就是 条件为 true 的是一条路径,条件为false的是一条路径。 将每个判定组合起来,验证每个组合的输出结果是否符合预期的结果。 ? 判定和条件覆盖,将条件的两个判定结果(true && false)的所有条件组合进行覆盖。 比如: ? 条件和条件的覆盖,将每个条件的“连接关系”,进行覆盖。
其实还有一个循环覆盖,就是 while,for 这些。
测试的前提是:需要进入到循环里面,然后给定一些参数,观察结果是否符合预期。
?
灰盒测试(Gray-Box Testing)
灰盒测试,是介于白盒测试与黑盒测试之间的一种测试. 灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。
?
按开发阶段划分
测试金字塔
? Java进阶 - MyBatis查询数据库 && Spring Boot 单元测试 - 细节狂魔 这一块就属于白盒测试的内容。 所以这个金字塔,越靠近顶部,就越接近用户层(应用层);越靠近底部,就越接近代码层。 ? 另外,越靠近低层,测试效率越高;定位问题越容易【毕竟是在代码层面进行测试的】而且,测试独立性越高,意思就是耦合性越低了。 测试的对象为一个最小单元(一个最小单元 等于 一个方法) ? 相反的是,越靠近顶层,越接近用户层。 而用户操作的是一个个功能模块的集成体。 操作起来,功能的耦合性就非常强! 所以,出现问题,想要定位问题也是非常难, ? 其实说白了,单元测试 就是 代码测代码,代码的执行肯定是比人要快的。所以越靠近底层,测试效率就越快。而且!因为是底层,所以测试发现问题的时候,直接就定位到错误代码位置了。 故:进行底层测试的时候,定位问题就非常快。 ? 另外,多说一句: 单元测试,其实并不太需要我们测试人员去做,因为 开发人员 在写代码的时候,就有测试代码的习惯。而且因为是他自己写的,所以他知道给什么参数合适。 因此,单元测试,一般都被开发人员 顺便给做了。
?
?
单元测试(Unit Tests)
单元测试是对软件组成单元进行测试。 其目的是检验软件基本组成单位的正确性。 测试的对象是软件设计的最小单位:模块。又称为模块测试 ? 测试阶段:编码后或者编码前(TDD - Test Driven Development - 测试驱动开发) 测试对象:最小模块(一个mapper接口的方法【单一功能的模块】) 测试人员:白盒测试工程师或开发工程师 测试依据:代码和注释+详细设计文档 测试方法:白盒测试 测试内容:模块接口测试、局部数据结构测试(局部变量测试)、路径测试、错误处理测试(try catch)、边界测试(for,while,测试是否存在越界问题),循环测试
?
集成测试(Integration Testing)
集成测试也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。 集成主要目的是检查软件单位之间的接口是否正确。 ? 测试阶段:一般单元测试之后进行 测试对象:模块间的接口 测试人员:白盒测试工程师或开发工程师 测试依据:单元测试的模块+概要设计文档 测试方法:黑盒测试与白盒测试相结合,即灰盒测试 测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性(黑盒)、全局数据结构、单模块缺陷对系统的影响
?
系统测试(System Testing)
将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。
新买手机都会有一个合格标签,在出厂前手机厂会所某型号的手机上的所有功能全部测试一遍。包括手机硬件本身,手机上自带的APP。
其实说白了,就是对软件系统进行全面的功能和非功能测试。 测试阶段:集成测试通过之后 测试对象:整个系统(软、硬件) 测试人员:黑盒测试工程师 测试依据:需求规格说明文档 测试方法:黑盒测试 测试内容:功能、界面、可靠性、容错性,易用性、可移植性,兼容性、安全性、性能,安装卸妆(新软件。。。 ?
?
回归测试(regression testing):
当软件系统引入了新代码的时候,测试人员往往需要验证新的代码对旧的功能产生的影响。 这种测试就是回归测试。
?
冒烟测试(Smoke Testing)
在软件开发完成后,要对软件的基础功能和核心流程进行测试,只有测试通过后,才可以进入正式的测试环境。 反之,测试不通过!测试人员是有权利打回项目,让开发人员进行修改,直到 “冒烟” 成功。 ? 其实说白了,冒烟测试,就是先验证软件的核心功能是否能正常工作。. 如果核心功能可以正常工作,就可以测试软件的其它功能了。 反之,核心功不能正常工作,其它的功能也就没有必要再测试了。
?
验收测试(Acceptance Testing)
软件在上线前最后一次测试,也称之为 交付测试。 ? 测试阶段:系统测试之后 测试对象:整体软件系统 测试依据: 用户需求 测试人员:用户(试用) 测试方法:黑盒测试 测试内容:同系统测试 (功能…各类文档等) ? 至于为什么要有文档测试,是因为有些甲方的要求比较严格。 交付的时候,不仅仅是产品要给他,所以相关的文档也需要给他。 比如: 可用性分析文档,需求设计文档,软件设计文档,软件开发文档,功能手册,用户手册等等。。。。
?
按测试实施组织
α测试(Alpha Testing)
α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。 ? 大型通用软件,在正式发布前,通常需要执行 Alpha 和 Beta 测试(a 和 β 测试)。α测试不能由程序员或测试员完成。
?
β测试(Beta Testing)
Beta测试是一种验收测试。Beta测试由软件的最终用户们在一个或多个场所进行。
?
α测试与Beta测试的区别:
测试的场所不同: Alpha测试是指把用户请到开发方的场所来测试;beta测试是指在一个或多个用户的场所进行的测试。 ? Alpha测试的环境是受开发方控制的,用户的数量相对比较少,时间比较集中。 beta测试的环境是不受开发方控制的,用户数量相对比较多,时间不集中。 ? alpha测试先于beta测试执行。 通用的软件产品需要较大规模的beta测试,测试周期比较长。
?
第三方测试
介于 开发方 和 用户方 之间的 组织的测试。 ? 或者说:该测试是有第三方测评机构来进行的,严格按照软件行业的标准规范进行测试的。人家是非常专业的!!! 你是需要给钱请别人来测试你的产品的。
就类似于 国家指定的食品安全标准,它都是有 规定指标的。 测试行业也是存在这样的指标的。
?
按照代码是否运行划分
静态测试(Static testing)
所谓静态测试(static testing)就是不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。 不以测试数据的执行而是对测试对象的分析过程,仅通过分析或检查源程序的设计、内部结构、逻辑、代码风格和规格等来检查程序的正确性。 ? 关于静态测试,有着一套标准(ISO25010)
?
动态测试(Dynamic testing)
动态测试(dynamic testing),指的是实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程,所以判断一个测试属于动态测试还是静态的,唯一的标准就是看是否运行程序。 大多数软件测试工作都属于动态测试。(程序运行中)
?
按是否手工划分
手工测试(Manual testing)
手工测试就是由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。 ? 总结优缺点: 优点:自动化无法替代探索性测试、发散思维结果的测试。【概括一下,就是灵活!】 缺点:执行效率慢,很容易出错。并且,在一些极端情况无法测试到。
?
自动化测试(Automation Testing)
就是按照人为预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。 简单说: 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 ? 自动化测试比如:功能测试自动化、性能测试自动化、安全测试自动化。 自动化测试按照测试对象来分,还可以分为接口测试、UI测试等。 接口测试的ROI(产出投入比)要比UI测试高。
?
自动化实施步骤:
1.完成功能测试,版本基本稳定 2.根据项目特性,选择适合项目的自动化工具,并搭建环境. 3.提取手工测试的测试用例转化为自动化测试的用例 4.通过工具、代码实现自动化构造输入,自动检测输出结果是否符合预期 5.生成自动测试报告 6.持续改进,脚本优化
?
按测试地域划分
什么是软件国际化? 是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,使创建不同语言版本时,不需要重新设计源程序代码的软件工程方法。 ? 说白了,软件国际化,就是进行软件设计和开发的时候,使用了一种工程技术,使得软件在转化为不同的国家语言的时候,可以不用修改密码,适用不同的语言,不同国家人民的风俗习惯。简洁来说:就是软件的通用性非常强!
?
国际化测试
软件的国际化和软件的本地化是开发面向全球不同地区用户使用的软件系统的两个过程。 而本地化测试和国际化测试则是针对这类软件产品进行的测试。 由于软件的全球化普及,还有软件外包行业的兴起, 软件的本地化和国际化测试俨然成为了一个独特的测试专门领域。 本地化和国际化测试与其它类型的测试存在很多不同之处。 ? 下面是本地化和国际化测试 的一些要点。 1、本地化后的软件在外观上与原来版本是否存在很大的差异,外观是否墼齐、不走样。 2、是否对所有界面元素都进行了本地化处理,包括对话框、菜单、工具栏、状态栏、提示信息(包括声音的提示)、日志等。 3、在不同的屏幕分辨率下界面是否正常显示。 4、是否存在不同的字体大小,字体样式设置是否恰当。 5、日期、数字格式、货币等是否能适应不同国家的文化习俗。例如,中文是年月日,而英文是月日年。 6、排序的方式是否考虑了不同语言的特点。例如,中文按照第一个字的汉语拼音顺序排序,而英文按照首字母排序。 7、在不同的国家采用不同的度量单位,软件是否能自适应和转换。 8、软件是否能在不同类型的硬件上正常运行,特别是在当地市场上销售的流行硬件上。 9、软件是否能在Windows或者其它操作系统的当地版本上正常运行。 10、联机帮助和文档是否已经翻译,翻译后的链接是否正常。正文翻译是否正确、恰当, 是否有语法错误。 ? 软件本地化和国际化测试是一个综合了翻译行业和软件测试行业的测试类型。它要求测试人员具备一定的翻译能力、语言文化,同时具备测试人员的基本技能。
?
本地化测试
之前我们所讲的全是本地化测试。
|