[软件测试] 软件测试基础问答

黑盒测试和白盒测试方法

答:
黑盒测试:
黑盒测试也称为功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明说的规定正常使用,程序是否能适当的接收输入数据而产生正确的输出信息,并保持外部信息(如数据库或文件)的完整性。

“黑盒”法着眼于程序的外部结构,不考虑内部逻辑结构,针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有的合法输入,而且还要对那些不合法但是可能的输入进行测试。

常用的黑盒测试方法有: 等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

白盒测试:
白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑错误,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然可能存在错误。因为: 穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

白盒测试需要遵循的原则有:
1. 保证一个模块中的所有独立路径至少被测试一次;
2. 所有逻辑值均需要测试真(true)和假(false)两种情况;
3. 检查程序的内部数据结构,保证其结构的有效性;
4. 在上下边界及可操作范围内运行所有循环。

常用白盒测试方法:
静态测试: 不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。
动态测试: 需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等等。
白盒测试中的逻辑覆盖包括 语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准发现错误的能力呈由弱到强的变化:

  1. 语句覆盖 每条语句至少执行一次
  2. 判定覆盖 每个判定至少执行一次
  3. 条件覆盖 每个判定的每个条件应取到各种可能的值
  4. 判定/条件覆盖同时满足判定覆盖条件覆盖
  5. 条件组合覆盖 每个判定中各条件的每一种组合至少出现一次
  6. 路径覆盖 程序中每一条可能的路径至少执行一次

黑盒测试和白盒测试有哪些方法

黑盒测试方法有等价类划分,边界值分析,错误推测,因果图法
白盒测试方法有逻辑覆盖法,程序插桩技术,基本路径法,符号测试,错误驱动测试

怎么看待测试,知道哪些测试的类型,有用过哪些测试方法?

测试是软件开发中不可或缺的一环,测试通过经济,高效的方法,捕捉软件中的错误,从而达到保重软件内在质量的目的。
测试分为功能测试和非功能测试,非功能测试又可以分为性能测试、压力测试、容量测试、健壮性测试、安全性测试、可靠性测试、恢复性测试、备份测试、协议测试、兼容性测试、可用性测试、配置测试、GUI测试。

测试方法用过等价划分法、边值分析法、错误推测法、因果图法。

怎么测试网络协议

协议测试包括四种类型的测试
1、一致性测试:检测协议实现本身与协议规范的符合程度
2、互操作性测试:基于某一协议检测不同协议实现间互操作互通信的能力
3、性能测试:检测协议实现的性能指标,比如数据传输速度,连接时间,执行速度,吞吐量,并发度,
4、健壮性测试:检测协议是现在各种恶劣环境下运行的能力,比如注入干扰报文,通信故障,信道被切断

什么是α测试和β测试,以及什么时候用到他们

α测试:在受控的环境中进行,由用户在开发者的场所进行,并且在开发者对用户的指导下进行测试,开发者负责记录发现的错误和使用中遇到的问题
β测试:在开发者不能控制的环境中的真实应用,由软件的最终用户们在一个或多个客户场所下进行,由用户记录在测试中遇到的一系列问题,并定期报给开发者。

手动测试与自动化测试的优缺点

答:
手动测试缺点:
1. 重复的手动回归测试、代价昂贵、容易出错
2. 依赖于软件测试人员的能力
手动测试优点:
1. 测试人员具有经验和对错误的猜测能力
2. 测试人员具有审美能力和心理体验
3. 测试人员具有是非判断和逻辑推理能力。
自动化测试的优点:
1. 对程序的回归测试更方便,这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。
2. 可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。
3. 可以执行一些手动测试困难或者不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。
4. 更好的利用资源,将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多的精力设计更好的测试用例。有些测试不适合自动测试,仅适用于手动测试,将可自动化测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。
5. 测试具有一致性和可重复性。由于测试是自动进行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。
6. 测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同测试过程中使用相同的用例。
7. 增加软件的信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。

自动化测试的缺点:
1. 不能取代手动测试。
2. 手动测试比自动测试发现的缺陷更多。
3. 对测试质量的依赖性极大。
4. 测试自动化不能提高有效性。
5. 测试自动化可能会制约软件开发。由于自动测试比手动测试更加脆弱,所以维护会受到限制,从而制约软件的开发。
6. 工作本身并无想象力。

你觉得自动化测试有什么意义,都需要做些什么

 自动化测试的意义在于:
  1. 可以对程序的新版本自动执行回归测试
  2. 可以执行手动测试困难或者不可能实现的测试,如压力测试,并发测试
  3. 能够更好的利用资源,节省时间和人力

执行自动化测试之前首先判断这个项目是不是和推广自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估。

测试相关流程

测试最规范的过程如下:
需求测试——概要设计测试——详细设计测试——单元测试——集成测试——系统测试——验收测试
来自W模型。

测试用例如何写

  1. 测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础
  2. 如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况
  3. 清楚输入输出的各种可能性,以及各种输入之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界值、判定表等方法找出大部分用例
  4. 找到需求相关的一些特性,补充测试用例
  5. 根据自己的经验分析遗漏的测试场景
  6. 多总结类似功能点的测试点,才能够写出质量越来越高的测试用例
  7. 书写格式一定要清晰

你觉得测试项目具体工作是什么?

搭建测试环境
撰写测试用例
执行测试用例
写测试计划,测试报告
测试,并提交bug表单
跟踪bug修改情况
执行自动化测试,编写脚本,执行,分析,报告
进行性能测试,压力测试等其他测试,执行、分析、调优、报告

你觉得软件测试的核心竞争力是什么

测试人员的核心竞争力在于提早发现问题,并能够发现别人无法发现的问题

  1. 早发现问题: 问题发现的越早,解决成本越低,如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。
  2. 发现别人无法发现的问题: 所有人都能发现的问题,你发现了,说明你是可以被替代的,别人发现不了,你发现了,那么你就是无法被替代的。

怎么看待软件测试的潜力与挑战

软件测试是正在快速发展,充满挑战的领域。尽管现在许多自动化测试软件的出现使得传统手工测试的方式被替代,但自动化测试工具的开发、安全测试、测试建模、精准测试、性能测试、可靠性测试等专项测试中仍需要大量具有专业技能与专业素养的测试人员,并且随着云计算、物联网、大数据的发展,传统的测试技术可能不再适用,测试人员也因此面临挑战,需要深入了解新场景并针对不同场景尝试新的测试方法,同时敏捷测试、Devops的出现也显示了软件测试的潜力。

分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试

  1. 单元测试:
    完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则,程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。

  2. 集成测试:
    通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。

    自顶向下集成:模块集成的顺序首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度有限的方式集成到整个结构中去。
    自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。

  3. 系统测试:
    是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。

  4. 回归测试:
    回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但是已经修复好的缺陷不再重复出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。

  5. 验收测试:
    验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。验收测试包括Alpha测试和Beta测试。
    Alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。
    Beta测试: 由软件的最终用户在一个或多个场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后得修改,并开始准备发布最终的软件。

你知道的自动化测试框架

  1. 模块化测试框架
    模块化测试脚本框架(TEST MODULARITY FRAMEWORK)需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。在五种框架中,模块化框架是最容易掌握和使用的。在一个组件上方建立一个抽象层使其在余下的应用中隐藏起来,这是众所周知的编程技巧。这样应用同组件中的修改隔离开来,提供了程序设计的模块化特性。模块化测试脚本框架使用这一抽象或者封装的原理来提高自动测试组合的可维护性和可升级性。

  2. 测试库框架
    测试库框架(Test Library Architecture)与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。

  3. 关键字驱动或表驱动的测试框架
    对于一个独立于应用的自动化框架,关键字驱动(KEYWORD DRIVEN)I9LJJ试和表驱动(TABLE DRIVEN)测试是可以互换的术语。这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用数据表来产生各个测试用例的同时被复用。

  4. 数据驱动测试框架
    数据驱动(DATA DRIVEN),LJ试是一个框架。在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测 试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。这个框架意图减少需要执行所有测试用例所需要的总的测试脚本数。数据驱动需要很少的代码来产生大量的测试用例,这与表驱动极其类似。

  5. 混合测试自动化(Hybrid Test Automation)框架
    最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的

web测试和app测试的不同点

系统架构方面:
web项目,一般都是b/s架构,基于浏览器的
app项目,则是c/s的,必须要有客户端,用户需要安装客户端。
web测试只要更新了服务器端,客户端就会同步会更新。App项目则需要客户端和服务器都更新。
性能方面:
web页面主要会关注响应时间
而app则还需要关心流量、电量、CPU、GPU、Memory这些。
它们服务端的性能没区别,都是一台服务器。
兼容方面:
web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容
app测试则要看分辨率,屏幕尺寸,还要看设备系统。
web测试是基于浏览器的所以不必考虑安装卸载。
而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件 。
此外APP还有一些专项测试:如网络、适配性。

PC网络故障,以及如何排除障碍

(1)首先是排除接触故障,即确保你的网线是可以正常使用的。然后禁用网卡后再启用,排除偶然故障。打开网络和共享中心窗口,单击窗口左上侧“更改适配器设置”右击其中的“本地连接“或”无线网络连接”,单击快捷菜单中的“禁用”命令,即可禁用所选网络。接下来重启网络,只需右击后单击启用即可。
(2)使用ipconfig查看计算机的上网参数
1、单击“开始|所有程序|附件|命令提示符“,打开命令提示符窗口
2、输入ipconfig,按Enter确认,可以看到机器的配置信息,输入ipconfig/all,可以看到IP地址和网卡物理地址等相关网络详细信息。
(3)使用ping命令测试网络的连通性,定位故障范围
在命令提示符窗口中输入”ping 127.0.0.1“,数据显示本机分别发送和接受了4个数据包,丢包率为零,可以判断本机网络协议工作正常,如显示”请求超时“,则表明本机网卡的安装或TCP/IP协议有问题,接下来就应该检查网卡和TCP/IP协议,卸载后重装即可。
(4)ping本机IP
在确认127.0.0.1地址能被ping通的情况下,继续使用ping命令测试本机的IP地址能否被ping通,如不能,说明本机的网卡驱动程序不正确,或者网卡与网线之间连接有故障,也有可能是本地的路由表面收到了破坏,此时应检查本机网卡的状态是否为已连接,网络参数是否设置正确,如果正确可是不能ping通,就应该重新安装网卡驱动程序。丢失率为零,可以判断网卡安装配置没有问题,工作正常。
(5)ping网关
网关地址能被ping通的话,表明本机网络连接以及正常,如果命令不成功,可能是网关设备自身存在问题,也可能是本机上网参数设置有误,检查网络参数。

posted @ 2022-02-08 15:50  寄生的鱼  阅读(220)  评论(0编辑  收藏  举报