软件测试是指在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
试错:在特定的条件下运行系统或构件,观察或记录结果,对系统的某个方面做出评价
度量:分析某个软件项以发现和显存的,以及要求的条件之差别
1.软件测试是证伪而非证真
2.尽早地和不断地进行软件测试
3.重视无效数据和非预期使用习惯的测试
4.程序员应该避免检查自己的程序
5.充分注意测试中的群集现象
6.用例要定期评审
复杂性:无论是穷举输入测试还是穷举路径测试,都不可能对被测程序进行彻底的测试
经济性:由于穷举测试工作量太大,实际上是行不通的,这就注定了一切实际测试都是不彻底的。软件测试的一个基本问题是经济学问题。为了降低测试成本,选择测试用例时应注意遵守测试的“经济性”原则:
第一,根据程序的重要性和一旦发生故障将造成的损失来确定它的测试等级;
第二,认真研究测试策略,以便能开发出尽可能少的测试用例,发现尽可能多的软件故障。
1.完全测试程序是不可能的
2.软件测试是有风险的
3.测试无法找到隐藏的软件故障
4.存在的故障数量与发现的故障数成正比
5.杀虫剂现象
6.并非所有软件故障都能修复
7.一般不要丢弃测试用例
8.应避免测试自己编写的程序
9.软件测试是一项复杂且具有创造性的和需要高度智慧的挑战性任务
1.没有开发过程就没有测试过程
2.测试过程是为保证开发过程的产出进行验证和确认的一系列活动
3.不同的软件开发过程模型中,测试在其中所处的位置不同
在软件开发中没有软件开发模型是不行的。软件开发模型描述开发阶段如何组合到一起,是软件开发活动以及它们之间关系的结构框架。它是对软件过程的建模,即用一定的流程将各个环节连接起来,并可用规范的方式操作全过程,好比工厂的流水线。软件开发模型能清晰。直观地表达软件开发全部过程,明确规定要完成的主要活动和任务,它用来作为软件项目工作的基础。
测试过程中计划-需求-设计-编码,前面3个阶段也可能引进错误,不单单是由编码错误引起。
单元测试 集成测试 系统测试 验收测试 文档测试/评审 缺陷跟踪 (不确定)
静态测试:通过评审文档、阅读代码等方式测试软件。主要包括各阶段的评审、代码检查、程序分析、软件质量度量等,用于对被测程序进行特性分析。其中评审通常有人来执行;代码检查程序分析、软件质量度量等即可人工完成,也可用工具来完成,但工具的作用和效果相对更大更好一些。
动态测试:通过运行程序测试软件。主要运行被测程序来检查运行结果与预期结果的差异,并分析运行效率和健壮性等指标;这种方法包括三部分:构造测试用例、执行程序、分析程序的输出结果。
是否查看源代码。可以,软件的整体功能和性能进行黑盒测试。软件的源代码采用白盒测试。(不确定)
程序员应该避免检查自己的程序。程序员与软件产品有着直接的利益关系,有很多理由支持这个原则。测试工 作需要严格的作风,客观的态度和冷静的情绪。但是心理学告诉我们,人们具 有一种不愿意否定自己的自然性心理,这是做好软件测试的一大心理障碍。
弱健壮等价类测试:对于有效输入,使用每个有效等价类的一个值;对于无效输入,测试用例只使用一个无效值,其余值都是有效的。
弱健壮等价类测试用例即1、2、3、4、7、10、13、16
程序的很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以发现不少程序缺陷。
边界条件即输入定义域或输出值域的边界,而不是内部。通常情况下, 软件测试所包含的边界检验有以下几种类型:数字、字符、位置、质 量、大小、速度、方位、尺寸、空间等。
给定一个程序p和一个测试数据集t,通过变异算子为p产生一组变异体Mi,对p和m都使用t进行测试运行,如果某mi在某个测试输入t上与p产生不同的结果,则该mi被杀死,若某mi在所有的测试数据集上都与p产生不同的结果,则该mi被杀死;若某mi在所有的测试数据集上都与p产生相同的结果,则称其为活的变异体。接下来对活的变异体进行分析,检查其是否等价于p;对不等价于p的变异体m进行进一步的测试,直到充分性度量达到满意的程度。
变异算子定义了从原有程序生成差别极小程序(即变体)的转换规则。
(1)测试需求的分析和确定 (2)测试计划 (3)测试设计 (4)测试执行 (5)测试记录和缺陷跟踪 (6)回归测试 (7)测试总结报告
测试需求评审的内容包括完整性审查和准确性审查。
完整性审查是检查测试需求是否覆盖了所有的软件需求,以及软件需求的各项特则,关注功能要求、数据定义、接口定义、性能要求、安全性要求、可靠性要求、系统约束、行业标准等。同时还要关注系统隐含的用户需求。
准确性审查是检查测试需求是否清晰、没有歧义、描述准确,是否能获得评审各方的一致理解,每一项测试需求是否都可以作为设计测试用例的依据。
等价类划分的步骤
(1)按严重程度划分 系统崩溃、严重、一般、次要、建议。 (2)按优先级划分 高、中、低。 (3)按测试种类划分 逻辑功能类、性能类、界面类、易用性类、兼容性类。 (4)按功能模块划分
(1)测试用例的选择 (2)测试人员的分工 (3)测试环境的搭建 (4)BVT测试与冒烟测试 (5)每日构建介绍
目的: (1)判断测试的有效性; (2)判断测试的完整性; (3)判断工作产品的质量; (4)分析和改进测试过程。 重要性: (1)度量可以用来提高质量、产品生产力、以及服务,从而提高客户满意度; (2)对于管理组织很容易分析数据并且深入下去; (3)对过程不受控时有不同的度量方式作为监控者; (4)度量提供当前过程改进。
代码行覆盖率=(已执行测试的代码行/总的代码行)100% 功能覆盖率=(已执行测试的功能模块数/总的功能模块数)100% 数据库覆盖率=(sql中出现的数据库的对象数/数据库总的对象数)*100%
(1)要制定明确的度量目标; (2)度量标准的定义应该具有一致性、客观性; (3)度量方法应该尽可能简单,可计算; (4)度量数据的手机应该尽可能自动化。
Web 系统具有动态性、异构性、并发性和分布性等特征
第三方测试是指独立于软件开发方和用户方之外的测试组织实施的测试。第三方测试也称为独立测试,它有独立的验证和确认活动。在模拟用户真实应用的环境下,进行软件确认测试。
意义:
模式:
定义:由开发者和用户以外的第三方进行的软件测试,其目的是保证测试的客观性。
实施主体: 狭义:独立的第三方测试机构;广义:非本软件的开发人员
测试阶段:● 集成测试 ● 系统测试 ● 验收测试
常见的测试内容:软件: ● 功能性 ● 易用性 ● 容错性 ● 安全性 ● 性能
文档: ● 正确性 ●一致性
数据库应用软件是基于数据库管理系统软件之上开发的应用层软件,而数据库管理系统属于重要的、复杂基础软件。数据库管理系统是为数据库应用软件提供底层的数据管理功能,客户通常使用数据库应用软件操作数据,对底层DBMS系统基本不用关心。
MySQL的SQL功能回归测试可以使用MySQLTest这个测试框架进行,具体回归测试过程如下,首先需要按照新功能测试步骤生成基准文件,其次按照回归测试流程测试,将测试结果与基准文件进行自动对比。
针对DBMS可以采用TPC-C或者TPC-H等基于某种基准测试,也可以按照数据库系统特点设计单独的测试场景。
性能测试中重点需要考虑的因素可以包括:
1)性能测试工具
2)性能度量指标
3)性能测试场景(基准或自定义场景)
4)性能测试数据量与数据分布
5)被测DBMS的架构特征
开放性问题。挑战举例:搭建各种高可用架构,模拟高可用场景的复杂故障等
DBMS的高可用性测试
● 高可用:指在DBMS发生故障时恢复业务运行的能力。
● 通常采用高可用架构:例如一主N备;三地两中心等
● 高可用测试:通过故障模拟(混沌测试),例如利用工具Jepsen、ChaosBlade等模拟网络故障,CPU超载,服务器宕机,内存不足等,测试在这些极端条件下系统的处理。
1.遗传算法
优点:搜索从群体出发,存在潜在的并行性,可以和多个个体同时比较;搜索使用评价函数启发, 过程简单;具有可拓展性,容易和其他算法结合
缺点:遗传算法的编程实现复杂,找到最优解以后还需要对问题进行编码,且因为不能及时利用网 络的反馈信息,导致算法的搜索速度较慢
2.蚁群算法
优点:采用正反馈机制,使得搜索过程不断收敛,最终逼近最优结果;搜索过程采用分布式计算方 式,多个个体同时进行并行计算,大大提高了算法的计算能力和运行效率
缺点:如果多样性过剩,系统过于活跃,会导致过多的随机运动,陷入混沌状态。如果多样性不 够,正反馈过强,会导致僵化,当环境变化时蚁群不能相应调整
云测试包含两层含义, 第一种是有效利用云计算环境资源对其他软件进行测试,即基于云计算的测试, 第二种是针对部署在“云”中的软件进行测试,即面向云计算的测试。
(1)通过有效的定义软件失效和选取恰当的工作负载度量方式,定义软件可靠性
(2)通过诊断软件故障信息,结合软件内部度量,提供其他产品质量度量
云计算工作负载保护平台、云访问安全代理(CASB)、托管检测和响应(MDR)、微分区等
1、安全边界模糊化
2、数据安全要求更高
3、责任共担模型
4、新环境中的错误配置
5、合规性要求升级
1.生成值(也叫做测试有效载荷)目的是实施测试
2.评估这些测试有效载荷可以暴露一个真实的漏洞
54.简述 SOFIA 检测 SQL 注入的过程。
1.对sql语句进行解析
2.裁剪,替换所有常量数值和字符串
3.计算树编辑距离,利用approxlib 工具,该工具实现了计算树编辑距离的算法,利用树编辑距离 进行分类,往往是不够的。
4.聚类,利用K-中心算法进行分类,
1、测试的对象和范围是什么(测试什么东西,哪些不需要测试)
2、测试目标是什么(为了让产品完全符合商业化的标准,还是小范围适用等)
3、测试的重点和难点有哪些(测试难点在哪里,需要什么样的支持)
4、如何安排各类测试活动(先测试什么再测试什么,什么时候集成测试等)
5、资源投入情况(测试时长、人员配置、环境等)
测试计划文档为完成测试的技术任务提供便利
测试计划文档改善测试任务和测试过程之间的联系
测试计划文档为组织、规划和管理测试项目提供结构
基于 CMMI 的测试流程建立了一个自动的、可扩展的框架。因而能够从总体上改进组织的质量和效率。 CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性4个方面。
通过CI/CD持续部署,让开发运维成为一个统一的生态系统,并进行各个环境部署