软件测试小结
软件测试小结
前言
本文参考《软件质量保证与测试》(第二版)秦航
对学期所学知识进行一个简单总结
一 、概述
1.1 软件特征
- 软件是计算机程序、规程以及可能的相关文档和运行计算机系统需要的数据。软件包含4个部分,即计算机程序、规程、文档和软件系统运行所需的数据。
- 当前计算机软件分为七大类:系统软件,应用软件,Web应用软件,工程和科学软件,嵌入式软件,产品线软件,人工智能软件。
- 软件工程是为了经济地或得可靠的和能在实际机器上高效运行的软件而建立、使用的好的工程原则。
- 软件工程也是一种层次化的技术。软件工程方法必须以质量保证为基础。软件工程的过程层是基础。过程定义了关键过程区域的框架,对软件工程技术的应用是必需的。
1.2 软件质量
-
软件工程方法的唯一目标是生产出高质量的软件。
-
而软件质量的特征是每个人在某种条件下需要它,每个人都觉得自己理解它,却又不愿意解释它
-
软件质量问题正在成为制约计算机发展的关键因素。
软件质量:
- 软件结构方面,软件应具备良好的结构。
- 功能与性能方面
- 开发标准与文档方面
-
不同的人会从各自的需求出发,对软件质量标准有不同的要求;管理人员要求软件服从一些标准,能够在计划的经费和进度范围内实现所需的功能;用户要求软件应使用方便,执行效率高;维护人员则要求软件文档资料清晰完整。
-
软件质量的概念:
-
IEEE关于软件质量的定义:
软件质量是系统、部件或者过程满足规定需求的程度。
软件质量是系统、部件或者过程满足顾客或者用户需要或期望的程度。
-
ANSI关于软件质量的定义:
软件产品中能满足用户给定需求的全部特性的集合
软件具有所期望的各种属性组合的程度
用户主观得出的软件是否满足其综合期望的程度。
决定所用软件在使用中将满足其综合期望程度的软件合成性。
-
-
软件质量的6个主要特征
- 功能性
- 可靠性
- 易使用性
- 效率
- 可维护性
- 可移植性
-
评价体系与标准
IEEE给出软件质量保证(SQA)的定义,一种有计划的、系统化的行动模式,是为了项目或者产品符合已有技术需求提供充分信任所必需的。
1.3 软件测试与可靠性
- 软件测试方法
- 静态方法;无须执行被测代码,通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性,借以发现程序的不足之处来减少错误概率。
- 动态测试:通过人工或使用工具运行程序,使被测代码在相对真实的环境下运行,从多角度观察程序运行时能体现的功能、逻辑、行为、结构等行为,并通过检查、分析程序的执行状态、程序的外部表现来定位程序的错误。
- 黑盒测试:也称功能测试或数据驱动测试,是已知软件所需功能,通过测试来检测每个功能是否都能正常使用。
- 黑盒测试方法:等价类划分、边值划分、因果图、错误推测,等等
- 白盒测试:也称结构测试或逻辑驱动测试,知道软件内部的工作过程,可通过测试来检测软件产品内部的动作是否按照规格说明书的规定正常进行,并且按照程序内部的结构测试程序来检验程序中的每条通路是否都按照预定要求正确工作,而不考虑功能是否正确。
- 灰盒测试:灰盒测试介于黑盒与白盒之间,关注输出对于输入的正确性,同时也关注内部表现。
- 软件开发阶段的测试方法
- 基于软件开发不同阶段的测试方法
- 需求测试
- 单元测试
- 集成测试
- 压力测试
- 容量测试
- 配置测试
- 安装测试
- 安全性测试
- 基于软件开发不同阶段的测试方法
- 软件测试工程师具备的素质
- 口头和写作技能
- 激情
- 技能
- 分析能力
- 态度
- 生产率
二、软件质量工程体系
2.1 软件质量控制的基本概念和方法
- 软件质量控制是对开发进程中软件产品(包括阶段性产品)的质量信息进行连续的收集、反馈。
- 软件质量控制的基本方法
- 目标问题度量法
- 风险管理法
2.2 软件质量控制模型
- 软件质量控制模型
- 软件质量控制模型参数
- 产品
- 过程
- 资源
- 软件质量控制的实施过程
- 预开发阶段
- 开发阶段
- 维护阶段
2.3 软件质量保证体系
- SQA是CNM2级中的一个重要的关键过程区域,是贯穿于整个软件过程的第三方独立审查活动,在CNM的过程中充当重要的角色。
三、软件质量度量和配置管理
3.1 度量和软件度量
-
软件度量
软件度量是对软件开发项目、过程、产品进行数据定义、收集、分析的持续性定量化过程,目的在于对此加以理解、预测、评估、控制、改善。
-
作用
- 可度量性是学科是否高度成熟的标志。
- 美国卡内基.梅隆大学软件工程研究所在《软件度量指南》中认为,软件度量在软件工程中的作用如下:通过软件度量增加理解;通过软件度量管理软件项目,主要是计划和估算、跟踪和确认;通过软件度量指导软件过程改善,主要是理解、评估、包装。
3.2 软件质量度量
-
软件质量和软件质量要素
CMM的定义如下:一个系统、组件、过程符合特定需求的程度;一个系统、组件、过程符合客户和用户的要求或者期望的程度。。
- 质量是指 “最适合于一定顾客的要求”。
- 只有极少数软件应该追求“零缺陷”。
-
影响软件质量的因素
- 软件业通过多年的实践总结出软件质量是人、过程和技术的函数,即Q={M,P,T}
-
软件过程可以分为三大类
- 软件工程过程
- 软件管理过程
- 软件支持过程
-
质量保证模型
- 常见的几种模型,即McCall模型、Boehm模型、FURPS模型、ISO9126.
- MeCall提出软件质量模型,把软件质量进行基于11个特性之上,分别面向软件产品的运行、修正、转移。
- FURPS,即功能性、可用性、可靠性、性能、支持度。
- ISO/IEC 9126 软件质量模型包括6个质量特性和21个质量子特性。
- 常见的几种模型,即McCall模型、Boehm模型、FURPS模型、ISO9126.
-
缺陷排除效率在项目级和过程级都能提供有益的质量度量。
- DRE=E/(E+D)最理想的DRE值是1,即软件中没有发现缺陷。
- E= 软件交付给最终用户之前所发现的错误数,D=软件交付之后所发现的缺陷数
- DRE=E/(E+D)最理想的DRE值是1,即软件中没有发现缺陷。
3.3 软件过程度量
- 软件过程度量的目标是对软件过程的行为进行目标管理i,并在度量的基础上对软件过程进行控制、评价、改善。最终,软件过程度量为项目管理和软件过程管理服务。
- 软件过程度量就其对象而言主要包括3个,即工作产品、软件项目、过程。
- 软件过程的度量方法是过程性方法,软件过程行为是事件行为,对过程的度量也具有过程性,从制定度量目标到收集数据再到数据分析表示出了典型的度量阶段。
- 软件过程度量的结果通常是软件产品的复杂度模型和可靠性模型等,对过程度量的结果模型、关系、进度与质量关系和由过程量化特征组成的过程基线。
- 基于目标的软件过程度量方法GQM,一种面向目标的、自上而下由目标逐步细化到度量的定义方法,用来告诉组织/机构要采集哪些数据。
3.4 软件配置管理
- 配置管理的概念源于美国空军,随着软件工程的发展,软件配置管理越来越成熟,从最初的仅仅实现版本控制发展到现在的提供工作空间管理、并行开发支持、过程管理、权限控制、变更管理等一系列全面的管理能力,形成了一个完整的理论体系。
- 软件配置管理作为CMM2级的关键域,在整个软件的开发活动中占有很重要的位置。
- 角色职责
- 项目经理
- 配置控制委员会
- 配置管理员
- 系统集成员
- 开发人员
- 过程描述
- 软件研发项目可以划分为3个阶段,即计划阶段、开发阶段、维护阶段。
四、软件可靠性度量和测试
4.1 软件可靠性
-
软件可靠性的定义
- 可靠性是软件的一个质量要素
- IEEE计算机学会对它进行了定义:在规定的条件下,在规定的时间内,软件不引起系统失效的概率,该概率是系统输入和系统使用的函数,也是软件中存在的错误的函数,系统输入将确定是否会遇到已存在的错误(如果错误存在);在规定的时间周期内,在所述条件下,程序执行所要求的功能的能力。
-
影响因素
- 需求分析定义错误
- 设计错误
- 编码错误
- 测试错误
- 文档错误
4.2 可靠性模型及其评价标准
- 根据模型使用的这两种数据将模型分成以下两类
- 给定时间间隔内的失效数模型
- 两相邻失效间的时间间隔模型
- 软件可靠模型:
- Musa模型,包括基本模型和对数模型
- Shooman模型
- Goel-Okumoto模型
- 测试成功模型
- 威布尔模型
- 模型的建立
- 软件可靠模型的建立是通过对所选模型关联参数的统计来确定失效情况,可靠性目标和实现这一目标的时间,并利用可靠性模型来制定测试策略,同时确定软件交付的预期可靠性。
五、软件质量标准
5.1 软件质量标准概述
-
软件质量标准分为5个级别,即国际标准、国家标准、行业标准、企业标准、项目规范。
-
能力成熟度模型的本质是软件管理工程的一个部分。
-
国际标准化组织(ISO)具有广泛的代表性、权威性,公布的标准也具有国际影响力。
-
国家标准
- GB-中华人民共和国国家技术监督局
- ANSI-美国国家标准协会
- FIPS- 美国商务部国家标准局
- BS- 英国国家标准
- DIN- 德国标准协会
- JIS- 日本工业标准
-
行业标准
- 中国GJB
- 美国IEEE
5.2 ISO 9001 和 9000-3 在软件中的应用
- ISO 9001 标准适用于所有的工程行业,ISO09003是为了在软件过程的使用中帮助解释该标准而专门开发的ISO指南的子集。
- ISO-9003 是ISO质量管理和质量保证标准在软件开发,供应、维护中的使用指南。
- 1987年,美国卡内基.梅隆大学软件研究所受美国国防部的委托,率先在软件行业从软件过程能力的角度提出了软件过程成熟度模型,随后在全世界推广实施一种软件评估标准,用于评价软件承包能力并帮助其改善软件质量的方法。
- CMM包括5个等级,共计18个过程域、52个目标、300 多个关键实践。
- CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行对过程监控、研究,以使其更加科学化、标准化,使企业能够更好的实现商业目标。
六、软件评审
- 评审的内容
- 主要包括管理评审、技术评审、文档评审、过程评审,等等。
- 技术评审是一种同行审查技术,主要特点是由一组评审者按照规范的步骤对软件需求、设计、代码或其他技术文档进行仔细的检查,以找出和消除其中的缺陷。
七、软件全面质量管理
- 六西格玛的概念属于品质管理范畴
- 是统计学里的一个单位表示与平均值的标准偏差,旨在生产过程中降低产品及流程的缺陷次数,防止产品变异,提升品质。
- 作为一种统计评估法,六西格玛管理法的核心是追求零缺陷生产,防范产品责任风险,降低成本,提高生产率和市场占有率,提高顾客满意度和忠诚度。
- 6个西格玛=3.4 失误/百万机会,意味着卓越的管理、强大的竞争力和忠诚的客户。
八、高质量编程
- windows程序命名规则
- 基本原则是 变量名= 属性+类型+对象描述
- 开闭原则是面向对象的可复用设计的基石。其他设计原则(里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则)是实现开闭原则的手段和工具。
- 依赖倒转原则
- 就是要依赖于抽象,不要依赖于实现,要针对接口编程,不要针对实现编程。
- 合成/聚合复用原则
- 在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用这些对象的目的。
九、软件测试
9.1 目的和原则
- 软件测试就是为了发现缺陷而运行程序的过程
- 测试是程序的执行过程,目的在于发现错误。
- 一个好的测试用例在于能发现至今未发现的错误。
- 一个成功的测试是发现了至今未发现的错误的测试。
- 软件测试的原则
- 在整个开发过程中要尽早地和不断地进行软件测试
- 在开始测试时不应默认程序中不存在错误。
- 在设计测试用例时要给出测试的预期结果。
9.2 软件测试的种类
- 单元测试
- 对于C语言这类面向过程的开发语言来说,单元常指一个函数或子过程。
- 对于C++,Java或C#等面向对象的开发语言来说,单元一般指一个类。
- 在图形化软件中,单元常指一个窗体或一个菜单。
- 测试内容
- 接口测试
- 局部数据结构测试
- 重要执行路径测试
- 错误处理测试
- 测试方法
- 在对模块进行测试时,每个模块在整个软件系统中并不是孤立的,不能独立运行,而需要由其他模块来调用和驱动,模块的执行还依赖于被它调用的下级模块。因此,为了模拟模块与周围模块的关系,需要设计者设计辅助测试模块。
- 分为两种:驱动模块、桩模块。
- 测试方法
- 测试技术
- 静态测试是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程,接口等来检查程序的正确性。
- 白盒测试也称结构测试或逻辑驱动测试,是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常运行,检验程序中的每条通路是否都能按预定要求正确工作。
- 白盒测试原则如下
- 每条语句至少执行一次
- 每个判定的每个分支至少执行一次
- 每个判定的每个条件应取到各种可能的值
- 每个判定中各条件的每一种组合至少出现一次
- 每一条可能的路径至少执行一次
十、黑盒测试
- 黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程
- 黑盒测试是在程序接口进行的测试,从理论上讲,黑盒测试只有采用穷举输入测试把所有可能的输入都作为测试情况考虑才能查出程序中所有的错误。实际上,测试情况有无穷多个,人们不仅要测试所有正常的输入,而且还要对那些不合法但可能的输入进行测试。
- 黑盒测试注重于测试软件的功能性需求;黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试,发现其他类型的错误。
- 等价类划分法
- 它是一种黑盒测试,不考虑程序的内部结构,把所有可能的输入数据(即程序的输入域)划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。
- 等价类指某个输入域的子集合
- 它又可以分为两种不同的情况
- 有效等价类
- 无效等价类
- 方法:
- 它是一种黑盒测试,不考虑程序的内部结构,把所有可能的输入数据(即程序的输入域)划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。
十一、白盒测试
- 白盒测试法与黑盒测试法相反,前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。所以白盒测试又称为结构测试或逻辑驱动测试。
- 白盒测试的目的
- 其中主要的原因在于软件自身的缺陷,逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。
- 白盒测试的特点
- 依据软件设计说明书进行测试
- 计划阶段
- 设计阶段
- 执行阶段
- 总结阶段
- 依据软件设计说明书进行测试
- 白盒测试方法
- 总体为静态方法和动态方法
- 静态分析是一种不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致、没有冲突或者没有歧义,描述的是纠正软件系统在描述,表示和规格上的错误,是任何进一步测试执行的前提。
- 动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前,之中,之后对软件系统行为的分析。在动态分析技术中最主要的技术是路径测试和分支测试,在路径测试中使程序能够执行尽可能多的逻辑路径。
- 逻辑驱动覆盖包括分支结构的测试和循环结构的测试,分支结构的测试又包括语句覆盖、分支覆盖、分支-条件覆盖、条件组合覆盖及路径覆盖。
- 语句覆盖的优点是很直观地从代码中得到测试用例,无须细分每条判断表达式,语句覆盖的缺点是对于隐藏的条件和可能到达的隐式分支是无法测试的,只在乎运行一次,而不考虑其他情况。
- 总体为静态方法和动态方法
十二、基于缺陷模式的软件测试
- 软件缺陷的特征
- 缺陷的发生都是有原因
- 缺陷的重现性
- 缺陷的累积性、放大性
- 缺陷的修复可能又引进新的缺陷
- 软件缺陷的属性
- 缺陷标识
- 缺陷类型
- 缺陷严重程度
- 缺陷优先级
- 缺陷状态
- 缺陷起源
- 缺陷来源
- 缺陷根源