目录
设计测试用例方法(等价类、边界值、因果图、场景设计、正交法、错误猜错法)
selenium(实施Web自动化的测试,自动化测试脚本实现)
参数化(用户输入场景集合比较多,尽可能通过一个用例多组参数来模拟用户行为),参数化注解方法不能用@Test
在测试重发现bug,开发认为不是,与开发发生争执,怎么解决?
一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
测试用例设计的原则是什么?目前主要的测试用例设计方法有哪些?
您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试,性能测试,界面测试)
-
软件测试相关知识
定义
验证产品的特性是否满足需求(企业需要招聘测试人员去提高产品质量,同时提高收益) 面试题:软件测试的核心竞争力是什么? 早发现问题和发现别人无法发现的问题。 面试题:软件测试的目的是什么? 软件测试的目的在于(1)发现软件的缺陷和错误(2)保证软件的质量,确保能够满足用户以及产品的需求。 软件测试的目的是为了找bug,并不是为了验证软件没有bug。
软件测试生命周期
1.面试:项目测试完成后上线,出现产品质量问题怎么办? 1.尝试复现(是普遍都存在的问题还是个别问题),复现成功后通知项目其他成员进行问题定位 2.尝试定位,问题出现的原因 3.反思问题(为什么出现,怎么解决,后续如何避免) 2.面试:测试项目具体工作? 搭建测试环境 撰写测试用例 执行测试用例 写测试计划、测试报告 测试并提交BUG 跟踪BUG修改情况 自动化测试 性能测试、压力测试、安全测试等其他测试
-
Bug的相关面试题
BUG分级
按BUG严重程度划分等级: blocker:(崩溃)系统无法执行,崩溃,或严重资源不足,应用模块无法启动或异常退出,无法测试,系统不稳定。常见的:严重花屏、内存泄漏、用户数据丢失或破坏、系统崩溃/死机/冻结、模块无法启动或异常退出、严重的数值计算错误、功能设计与需求严重不符、服务器500等。 critical:(严重)影响系统功能或操作,主要功能存在严重缺陷,但不会影响到系统的稳定性。常见的有:功能未实现,功能错误、系统刷新错误、数据通讯错误、轻微的数值计算错误、影响功能及界面的错别字或拼写错误。 major:(一般)界面、性能缺陷、兼容性。常见的有:操作界面错误、边界条件错误、提示信息错误,长时间操作无法提示、系统未优化、兼容性问题。 minor/trivial:(次要)易用性及建议性的问题。 按BUG处理优先级划分: immediate:马上解决 urgent:急需解决 high:高度重视,有时间马上解决 low:在系统发布前解决或确认可以不用解决
创建一个Bug的生命周期
New(新建一个bug) Open(开发人员确认是否是bug,是则改成open,不是则改成rejected) Fixed(已修复) Rejected(被拒绝的) delay(确认是bug且优先级较低开发不着急修改) Closed(开发修改完成,已关闭) Reopen(bug修复未完成,再次打开)
-
设计测试用例方法(等价类、边界值、因果图、场景设计、正交法、错误猜错法)
等价类
定义:需求划分成若干的等价类,从等价类里面选出一个测试用例,如果测试用例通过,那么它所代表的等价类测试通过。 分类: 1.有效等价类 2.无效等价类 步骤: 1.拿到需求文档要先确定有效等价类和无效等价类 2.编写测试用例,写测试数据 例如: |用户名 | 必填,录入用户名 | 6至15 | 字符类型A-Z,不区分大小写| 用户名由长度为6-15位的字符串组成,那么针对字符有效等价类为A-Z,a-z,无效等价类为两个:数字:1, 0.1,-1 特殊字符:@,#,¥,空格
边界值
定义:对等价类划分法补充,测试用例来自等价类边界 例如:以注册邮箱的软件需求为例子 ,用户名要求长度为6-15位,边界值上点为:5,6,15,16 面试题: [1,2]数字为浮点型,它的有效边界和无效边界?
因果图
使用场景:输入条件的组合对应不同的结果 步骤:1.确认输入和输出条件 2.找到输入与输出条件之间的关系 3.画判定表 /画因果图 4.根据判定表编写测试用例
场景设计
场景:事件触发时的情景,同一个事件不同的触发顺序和处理结果形成事件流 步骤:1.基本事件流用例 2.备选事件流用例
正交法
定义:从大量的试验中挑选出适量的,有代表性的点,依据“正交表”,合理设计出测试用例 步骤: 1.找到因素数(输入的条件)和水平数(每个因素对应的水平数) 2.生成正交表(需要借助allparis来生成) 3.根据正交表来编写测试用例 4.补充可能存在遗漏的但是很重要的测试用例
错误猜测法(依赖测试人员工作经验的积累)
-
测试相关的模型
瀑布模型
过程:start----需求分析----计划----设计----编码---测试---end 特点:1.线性结构,多个阶段只能执行一次 2.测试后置(前面各个阶段遗留的风险推迟到测试阶段才发现,导致项目大面积返工 必须留有足够的时间给测试活动,否则测试就不充分,导致产品质量差) 3.产品周期太长,很长时间才可以被做好,导致需求过时 使用场景:需求固定的小项目
螺旋模型
特点:增加了风险分析和原型 缺点:1.项目可存在的风险和风险管理人员的技能水平有直接关系 2.需要人员,资金,时间增加,项目成本太高 使用场景:规模庞大,风险大的项目
增量模型和迭代模型
增量模型:把大的需求划分成一个个可以独立开发的功能,可以先开发AB,在开发CDE 迭代模型:先开发ABCDE的基础版本,在一点点完善功能
敏捷模型(拥抱变化)
不强调过程,只看重结果 特点:轻流程,轻文档,重目标,重产出 三个角色:产品经理 , 项目经理 ,研发团队 五个重要会议
面试:谈谈对敏捷的理解? 瀑布开发按项目为核心,一般都会有一个相对较长的项目周期,一开始把项目设计得大而全,完成项目并交付后,工作重心就会转移到另一个项目去。 敏捷开发是以需求为核心,一开始不会把产品设计得大而全,而是通过快速迭代的方式,不断采集需求,不断更新迭代。敏捷开发的开发周期更短,能够快速试错,快速迭代,敏捷开发比瀑布开发更顺应目前的软件开发趋势。 敏捷开发也对应着有敏捷测试,测试环节贯穿整个迭代周期,从需求评审到发布上线,都离不开测试快速跟进。 测试左移:需求评审、用例设计、自测工具、静态代码扫描等; 测试中:业务测试,接口测试,性能测试等; 测试右移:稳定性测试,回归测试,灰度测试等
V模型
特点:测试过程中存在不同测试类型 单元测试:对程序最小的功能单元进行测试 缺点:测试后置
W模型
开发模型+测试模型 面试题:测试流程是什么? 需求测试 -> 概要设计测试 -> 详细设计测试 -> 单元测试 -> 集成测试 -> 系统测试 -> 验收测试 实际工作中的测试流程: 需求评审 -> 技术评审 -> case评审 -> 开发自测以及冒烟测试 -> 整体提测(集成测试) -> 回归测试 -> 系统测试 -> 验收测试 特点:用户需求开始,就会有测试 缺点:1.两个V之间存在线性前后关系 2.w模型重流程(前一个阶段完成后才会有后一个阶段) W模型不能迎接变化
测试方法分类
面试题:列举出你所了解的软件测试方式? 按照软件的生命周期划分:单元测试、集成测试、系统测试、回归测试、验收测试。 按照测试关注点划分:功能测试、性能测试、稳定性测试、易用性测试、安全性测试。 按照测试实施者划分:开发方测试(α测试)、用户测试(β测试)、第三方测试。 按照技术/测试用例设计划分:白盒测试、黑盒测试、灰盒测试。 按照分析方法划分:静态测试、动态测试。 按照测试执行方式划分:手工测试、自动化测试。 按照测试对象划分:程序测试、文档测试
可靠性测试
可靠性=((正常运行时间)/总时 )*100%
容错性测试
输入异常数据或进行异常操作,以检验系统的保护性。 灾难恢复性测试。通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失
内存泄漏测试
造成内存泄漏原因: 分配完内存之后忘回收, 程序写成死循环 , 某些API函数使用不正确 内存泄漏检测方法: 人工静态扫描方法 , 借助工具进行代码静态扫描
弱网测试
通常低于3G网络速率和弱信号的Wifi都属于弱网。弱网测试主要是对网络带宽、丢包、延时等进行模拟弱网环境去测试不同应用软件,属于健壮性测试。 弱网测试:有时候网不好,可能会造成客户端频繁发送请求 面试题:如何做弱网测试: 弱网功能测试:2G/3G/4G、高延时、高丢包 健壮性测试。关注网页的响应时间、页面呈现是否完整一致等。高延迟和高丢包的网络环境需要借助工具来模拟,在windows环境下可以使用fiddler和network emulator for windows toolkit来模拟,在mac环境下则可以使用Charles和Xcode自带的开发环境网络异常模拟工具进行。 弱网功能测试建议将整体的功能测试用例在弱网环境下进行一轮测试,相同模块下的功能可以分多个网络条件进行测试。 wifi-2G/3G/4G、wifi-无网、2G/3G/4G-wifi、2G/3G/4G-无网、无网-2G/3G/4G、无网-wifi等。 主要关注页面的显示与交互,尤其是弱网到wifi,wifi到弱网的情况,是否会有页面的crash以及显示的错乱、session是否一致、请求堆积处理等。 用户体验关注:响应时间、页面呈现&超时文案&超时重连、安全及大流量风险 页面响应时间是否可以接受,关注包括热启动、冷启动时间、页面切换、前后台切换、首字时间,首屏时间等。 页面呈现是否完成一致。 超时文案是否符合定义,异常信息是否显示正常。 是否有超时重连。 安全角度:是否会发生dns劫持、登陆ip更换频繁、单点登陆异常等。 大流量事件风险:是否会在弱网下进行更新apk包、下载文件等大流量动作。
黑盒测试
纯功能测试:不关心具体怎么实现 面试题:黑盒测试用例设计常用的方法? 测试方法:等价类,边界值,因果图,场景设计法,错误猜测法等
白盒测试
关注程序内部实现------单元测试 面试题:白盒测试用例设计的常用方法? 答:静态测试:不用运行程序的测试,如文档测试、代码检查等 动态测试:需要执行代码,接口测试、覆盖率分析、性能分析、内存分析等。 逻辑覆盖法:主要包括语句覆盖,判断覆盖,条件覆盖,判断/条件覆盖,条件组合覆盖,路径覆盖等。 六种覆盖标准发现错误的能力由弱到强的变化: 语句覆盖,每条语句至少执行一次。 判断覆盖,每个判断的每个分支至少执行一次。 条件覆盖,每个判断的每个条件应取到的各种可能的值。 判断/条件覆盖,同时满足判断覆盖条件覆盖。 条件组合覆盖,每个判定中各条件的每一种组合至少出现一次。 路径覆盖,使程序中每一条可能的路径至少执行一次。
灰盒测试
面试题:什么是灰盒测试 介于黑和白之间,灰盒测试没有黑盒测试覆盖产品广度大,没有白盒测试那么详尽
冒烟测试
开发人员完成开发任务后,交给测试人员第一步(看大致流程,评估是否具备可测条件)
单元测试
面试题:什么是单元测试? 答:完成最小的软件设计单元(模块)的验证工作,确保模块被正确编码。通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早发现和解决不易显现的错误。
集成测试
集成测试也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口 及集成后的功能进行正确性检测的测试工作。 测试对象:模块间的接口
回归测试
对历史版本或者历史功能进行测试(借助自动化)来进行
开发方测试(α测试)、用户测试(β测试)
面试题:什么是a测试,什么是β 测试? α测试:在受控的环境下进行,由用户在开发者的场所进行,开发者指导用户测试,开发者负责记录发现的错误和使用中遇到的问题。 β 测试:在开发者不可控的环境下进行,由软件最终用户在一个或多个客户场所下进行,用户记录测试中遇到的问题,并定期上报给开发者。
面试题
单元测试、集成测试、系统测试、验收测试、回归测试这几步最重要的是哪一步? 答:这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,系统测试能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针对整个产品系统进行的测试,能够验证系统是否满足需求规格的定义,因此,我认为系统测试很重要。 集成测试和系统测试的区别,以及应用场景分别是什么? 答:区别: 执行顺序:先执行集成测试,待集成测试问题修复后,再做系统测试。 用例粒度:集成测试比系统测试用例更详细,集成测试对于接口部分也要重点写,而系统测试的用例更接近用户接受的测试用例。 应用场景: 集成测试:一般包含接口测试,对程序的提测部分进行测试。测试方法一般选用黑盒测试和白盒测试相结合。 系统测试:针对整个产品的全面测试,既包含各模块的验证性测试和功能性测试,又包含对整个产品的健壮性、安全性、可维护性及各种性能参数的测试。测试方法一般采用黑盒测试法。
-
自动化测试
定义
自动化测试:有效的减少人力消耗,同时提升生活质量 面试题:请说一下手动测试与自动化测试的优缺点? 答:1.手工测试缺点:(重复的手工回归测试,代价昂贵、容易出错,依赖于软件测试人员的能力) 2.手工测试的优点:(测试人员具有经验和对错误的猜测能力,测试人员具有审美能力和心理体验,测试人员具有是非判断和逻辑推理能力) 3.自动化测试的缺点:(不能取代手工测试,无法运用在测试复杂的场景,手工测试比自动化测试发现的缺陷更多,对测试质量的依赖性极大,自动化测试不能提高有效性,比手动测试脆弱,需要维护成本,工具本身并无想象力。) 4.自动化测试的优点:对程序的回归测试更方便。可以运行更多更繁琐的测试。可以执行一些手工测试困难或不可能进行的测试。更好地利用资源。测试具有一致性和可重复性。测试的复用性。增加软件的信任度。
自动化测试的分类
1.接口自动化测试 2.UI自动化测试 (移动端自动化测试和Web端自动化测试)
selenium(实施Web自动化的测试,自动化测试脚本实现)
1.面试题:为什么选择seleniue作为Web自动化测试工具? 答:1.开源免费 2.支持多个浏览器 3.支持多个系统 4.支持多语言 5.selenium包提供很多可供测试使用的Api 2.selenium编写的自动化脚本如何打开浏览器? 答:创建http请求并发送------包含http server接受请求-----操控浏览器---执行测试步骤 3.怎么实施自动化测试? 明确测试目的。 判断项目适不适合进行自动化测试。 对项目做测试分析。 制定测试计划和测试方案。 搭建自动化测试框架。 设计或编写测试用例。 执行自动化测试。 评估。
简单的自动化实例
面试题:创建一个简单自动化测试步骤: 1.创建驱动实例,创建会话 2.访问网络 3.查找元素 4.操作元素 5.结束会话 public class test1 { public void xiaojia() throws InterruptedException { //打开浏览器 EdgeOptions options = new EdgeOptions(); options.addArguments("--remote-allow-origins=*"); EdgeDriver driver = new EdgeDriver(options); Thread.sleep(2000); //在浏览器输入www.baidu.com driver.get("https://www.baidu.com"); Thread.sleep(2000); //访问百度首页,在百度首页找到输入框,输入元素 driver.findElement(By.cssSelector("#kw")).sendKeys("怎么样才能好好学习"); Thread.sleep(2000); //点击确认框 driver.findElement(By.cssSelector("#su")).click(); Thread.sleep(2000); //结束会话关闭浏览器 driver.quit(); } }
selenium常用元素
1.查找页面元素 findeIElement 返回值:WebElement driver.findElement(By.cssSelector("#kw")).sendKeys("怎么样才能好好学习"); 2.元素定位(自动化要求元素定位必须是唯一的) selector xpath 3.输入文本 sendkeys(适用于文本字段) 4.点击事件 click 5.提交时间 submit(仅适用于表单元素) 5.清除 clear 6.获取文本 getText 7.获取属性值 getAttribute 8.窗口大小设置 //窗口最大化 driver.manage().window().maximize(); //窗口最小化 driver.manage().window().minimize(); //全屏 driver.manage().window().fullscreen(); //手动设置 driver.manage().window().setSize(new Dimension(111,111)); 9.窗口切换(保留原有的窗口,浏览器每次打开一个标签页都会有一个标识(句柄)) public void test2() throws InterruptedException { EdgeOptions options = new EdgeOptions(); options.addArguments("--remote-allow-origins=*"); EdgeDriver driver = new EdgeDriver(options); Thread.sleep(3000); //打开百度网址 driver.get("http://www.baidu.com"); //找到图片超链接进行点击 driver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)")).click(); //获取当前元素的句柄 String curhandle=driver.getWindowHandle(); //获取所有句柄 Set<String> handles=driver.getWindowHandles(); for (String handle:handles) { if (handle!=curhandle){ //进行窗口切换 driver.switchTo().window(handle); } } Thread.sleep(3000); //找百度图片的百度按钮 driver.findElement(By.cssSelector("#homeSearchForm > span.s_btn_wr > input")); Thread.sleep(3000); driver.quit(); } 10.屏幕截图 1.在pom.xml里面导入commons-io包,2.6版本 2.屏幕截图 public class Test3 { private Cache FileUtils; public void test3() throws InterruptedException, IOException { EdgeOptions options = new EdgeOptions(); options.addArguments("--remote-allow-origins=*"); EdgeDriver driver = new EdgeDriver(options); Thread.sleep(3000); //打开百度 driver.get("http://www.baidu.com"); //找到搜索框搜索1234 driver.findElement(By.cssSelector("#kw")).sendKeys("杨幂"); //点击百度一下按钮 driver.findElement(By.cssSelector("#su")).click(); Thread.sleep(3000); //屏幕截图 File s=driver.getScreenshotAs(OutputType.FILE); //放在当前路径 String filename="my.png"; FileUtils.copyFile(s,new File(filename)); //查找杨民元素 driver.findElement(By.cssSelector("#\\31 > div > div > div > div > div > div.cos-row.row-text_Johh7.row_5y9Az > div > div.title-wrapper_5Uhbb > a > div > p > span > span")); driver.quit(); } public static void main(String[] args) throws InterruptedException, IOException { Test3 test3=new Test3(); test3.test3(); } }
selenium的基础方法
等待
强制等待:Thread.sleep(时间) 隐式等待:作用于driver的整个生命周期,会一直轮寻判断元素是否存在,如果不存在就等待设置好的时间里不断进行轮询,等到元素全被访问 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); 显示等待: 针对代码一条去设置 new WebDriverWait(driver,Duration.ofSeconds(间)).until(driver.findElement(By.cssSelector("")));
导航
//浏览器前进和后退 driver.navigate().back(); driver.navigate().forward(); //刷新 driver.navigate().refresh();
单元测试(Junit)
注解
1.@Test :表示方法是测试方法,可以自己去执行不需要调用,执行这个当前类时,会自动执行该类下带@Test的注解 public class aaaTests { @Test void aaa(){ System.out.println("aaa"); } @Test void bbb(){ System.out.println("aaa"); } @Test void ccc(){ System.out.println("aaa"); } } 2.@BeforeEach 当前方法需要在每个用例前执行一次 3.@BeforeAll 当前方法需要在所有执行前执行一次(需要静态方法) 4.@AfterEach 当前方法需要在每个用例执行之后执行一次 5.@AfterAll 当前的方法在当前类下所有用例之前执行一次,被注解修饰的方法必须为静态方法
测试用例执行顺序
1.先使用注解说明当下类所有用例需要使用order注解来排序,@TestMethodOrder要用在类上 2.使用order来决定用户执行顺序 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class JunitTest { @Order(3) void test1(){ System.out.println("111"); } @Order(1) void test2(){ System.out.println("222"); } @Order(2) void test3(){ System.out.println("3333"); }
参数化(用户输入场景集合比较多,尽可能通过一个用例多组参数来模拟用户行为),参数化注解方法不能用@Test
@ParameterizedTest //先声明该方法为参数方法 // @ValueSource(strings = {"lai","laaa","111"}) void SingTest(String name){ System.out.println(name); } @ParameterizedTest @CsvSource({"xiaohong,1","xiaoming,2","xiaohua,3"})//@CSVSource({" "," "}) 多参数 void MuchTest(String name,String password){ System.out.println("name: "+name+" password:"+password); } @ParameterizedTest @CsvFileSource(files = "E:\\Java ceshi\\111.csv") //从第三方CsV文件读取数据源 void FileTest(String name,int password){ System.out.println("name: "+name+" password:"+password); }
-
软件测试常见思维面试问题
走测试岗位为什么还要学习开发?
1.测试人员也需要代码的编写,比如自动化测试,性能测试,开发效率工具 2.测试人员需要看懂代码,了解框架,能够更好的发现问题
在测试重发现bug,开发认为不是,与开发发生争执,怎么解决?
1.先检查自身,bug描述是否清晰 2.开发对bug的定级不认可,测试人员需要有明确的企业bug定级规范,告诉开发为什么这么定级 3.提bug会增加开发的工作量,我们应该在用户的角度去想问题,合理有好的沟通 4.提高自身的业务水平 5.如果确定是bug,有好沟通不能解决问题,召开bug评审
测试开发需要哪些知识,具备什么能力?
需要的知识: 软件测试基础理论知识,如黑盒测试、白盒测试等; 编程语言基础,如C/C++、java、python等; 自动化测试工具,如Selenium、Appium等; 计算机基础知识,如数据库、Linux、计算机网络等; 测试卡框架,如JUnit、Pytest、Unittest等。 具备的能力: 业务分析能力、缺陷洞察能力、团队协作能力、专业技术能力、逻辑思考能力、问题解决能力、沟通表达能力和宏观把控能力。
测试和测试开发区别?
测试开发:保障产品质量,以测试为主,开发效率提升工具为辅 测试:保障产品质量,测试为主
给你一个网站如何测试?
一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。300个用户在一个客户端上,需要更大的带宽。 IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。 所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。
测试人员在软件开发过程中的主要任务?
1、尽可能早的找出系统中的Bug; 2、避免软件开发过程中缺陷的出现; 3、衡量软件的品质,保证系统的质量; 4、关注用户的需求,并保证系统符合用户需求。 总的目标是:确保软件的质量
对水杯进行测试
详细描述一个测试活动的完整过程?(瀑布模型)
项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪 开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。 测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。 测试用例完成后,测试和开发需要进行评审。 测试人员搭建环境 开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。 开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。 重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。 如果有客户反馈的问题,需要测试人员协助重现并重新测试。
测试用例设计的原则是什么?目前主要的测试用例设计方法有哪些?
代表性:能够代表并覆盖各种合理的和不合理、合法的和非法的、边界的和越界的、以及极限的输入数据、操作和环境设置等. 可判定性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果. 可再现性:即对同样的测试用例,系统的执行结果应当是相同的。 方法有等价类、边界值、因果图、状态图、正交法、大纲法
您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试,性能测试,界面测试)
功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。 界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。 区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试