软件测试的目的和原则
软件测试目的:
- 用最少的人力、物力、财力,找到软件中的问题并修复,从而降低商业风险
软件测试原则
- 只能证明软件存在问题,不能证明不存在问题
- 不能进行穷尽(穷举)测试,应该分类别测试
- 测试工作要尽早的介入,降低修复成本(需求文档--ui、程序、测试)
- 缺陷存在集群现象,二八原则:20%的模块中存在80%的缺陷
- 测试依赖环境(系统、浏览器)
- 杀虫剂现象
- 不存在缺陷谬论
软件开发模型
开发模型(软件生命周期模型)是指软件从开始研制到最终被废弃所经历的各个阶段。在不同的阶段里, 由不同的组织和人员执行不同的任务。在软件开发的几十年实践中,人们总结了很多软件开发模型用来描述和表示一个复杂的开发过程。如:
软件测试与软件的开发模式有着紧密的联系,作为一名测试人员,应该充分理解软件的开发模型,以便找准自己在其中的位置,从而发挥自身的价值。
瀑布模型
特点
- 是线性模型的一种,每一个阶段只执行一次。以文档驱动,每个阶段执行一次,按线性顺序进行软件开发。在所有的开发模型中占有重要地位,是其他模型的基础。
优缺点:
- 开发的各个阶段比较清晰,当前阶段完成后,只关注后续阶段 。
- 依赖于在其的需求分析,不适应需求的变化。风险往往在后期显露,失去及早纠错的机会
快速原型模型
在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。
特点
- 快速得构建软件的原型 ,支持用户参与
优缺点
- 克服瀑布模型的缺点,减少由于软件需求不明确带来的项目开发风险。
- 不适合大型系统的开发(适合开发小型的、灵活性高的系统)
螺旋模型
特点
- 引进了风险分析活动
优缺点
- 螺旋模型很大程度上是一种风险驱动的方法体系。
- 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识。
软件测试模型
在软件测试的实施中,针对于测试过程出现的问题,通过经验总结得到测试过程模型,旨在提高软件开发测试过程中的效率与效果
V模型
V模型是最具有代表意义的测试模型,最早是由Paul Rook在20世纪80年代后期提出,由英国国家计算机中心 文献中发布,旨在改进软件开发的效率和效果。它本身是软件开发中瀑布模型的变种,它反映了测试活动与分析和设计的关系。 V模型标明了测试过程中本身存在的不同阶段,从左到右,描述了开发过程和测试过程间的阶段对应关系。
优点:
- 展示测试由底层(代码)到高层(用户业务)按阶段测试的实现过程
缺点:
- 不适用于需求变化,灵活性差
W模型
测试伴随着整个软件开发周期,并且测试的对象不仅仅是程序,需求和设计同样要测试。 W模型,简称 “ 双 V” 模型,即以开发主导的一个 “V” ,和以测试主导的另一个“V”。为了克服 V 模型的缺点,引入了 W 模型
优点:
- 测试伴随整个产品开发周期,测试对象不仅是程序还有需求、设计文档
- 测试介入较早,及早发现问题,降低修复成本
缺点:
- 实施起来比较复杂,难度大,对于需求阶段和设计阶段的测试设计要求较高(计算机技术、业务知识、管理能力、测试素质等)
尽早测试的必要性
软件质量模型
软件质量,就是软件与明确地和隐含地定义的需求相一致的程度。 ISO9126软件质量模型是评价软件质量的国际标准,这个模型是软件质量标准的核心,对于大部分的软件,都可以考虑从这这6 个特性和 27 个子特性去测试、评价一个软件。
详解:
- 功能性:满足某种功能需求的一种属性或能力
- 可靠性:产品在规定条件下,在规定的时间内完成规定功能的能力
- 易用性:在指定使用条件下,产品被理解、学习、使用和吸引用户的能力
- 效率性:在规定条件下,相对应所用资源的数量,软件产品提供适当性能的能力
- 维护性:在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力
- 移植性:从一种环境迁移到另一种环境的能力
软件测试分类
按测试阶段划分
- 单元测试 :又称模块测试,针对软件设计中的最小模块,进行正确性检查的测试工作。单元测试需要从程序内 部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。C中指一个函数,Java中指一个类。
- 集成测试:又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。
- 系统测试:指的是将整个软件系统看为一个整体进行测试,测试的依据是软件需求说明书
- 验收测试:检验软件是否符合用户需求的测试,又可以细分为α测试(Alpha 是内测版本 ,该版本软件的bug较多,普通用户最好不要安装 )丶β测试 (Beta是公测版本,是对所有用户开放的测试版本)丶γ测试(Gamma版本,指的是软件版本正式发行的候选版)
按是否查看源代码
- 黑盒测试:又称数据驱动测试,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求,只关心软件的输入数据和输出数据。
- 白盒测试:指的是把盒子打开,去研究里面的源代码和程序结构。
- 灰盒测试:灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,不仅关注输出、输入的正确性,同时也关注程序内部的情况。
按是否运行分类:
- 静态测试: 指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程。
- 动态测试: 是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
按照是否自动化分类
- 人工测试:也叫做手工测试,测试人员手动去进行的测试
- 自动化测试 :利用代码或者工具帮助人工进行测试
软件测试的更多分类
- 冒烟测试:冒烟测试就是对系统进行最基本功能的测试,保证基本的功能和流程能走通
- 回归测试:当修复一个BUG后,把之前的测试用例在新的代码下进行再次测试
- 随机测试:随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分
- 探索性测试 :探索性测试意味着同时设计测试和执行测试。测试人员通过测试来不断学习被测系统。