1、1,软件测试方法和技术 - Ch.2软件测试的基本概念和方法,计算机工程系,杨晓花,2,第1章回顾,1.1 软件的含义 1.2 软件开发过程模型 1.3 UML代表着软件建模的发展趋势1.4 软件测试的重要性,3,第2章 软件测试的基本概念,2.1 软件缺陷 2.2 验证和确认 2.3 软件测试的分类 2.4 测试模型 2.5 软件测试的工作范畴,4,缺陷是质量的对立面,要了解什么是缺陷(defect),就必须清楚“质量(Quality)”概念,因为缺陷是相对质量而存在的,违背了质量、违背了客户的意愿,不能满足客户的要求,就会引起缺陷或产生缺陷。,5,2.1 软件缺陷,2.1.1 软件质量的内
2、涵 2.1.2 软件缺陷的定义 2.1.3 软件缺陷的产生 2.1.4 软件缺陷的构成 2.1.5 修复软件缺陷的代价,6,软件质量 的内涵,1 质量(Quality)的概念在RUP(“Rational标准过程”理论)中,质量被定义为:满足或超出认定的一组需求,并使用经过认可的评测方法和标准来评估,还使用认定的流程来生产。,RUP:Rational Unified Process,7,软件质量 的内涵,2 软件质量的内涵总结说来,高品质软件应该是相对的无产品缺陷(bug free)或只有极少量的缺陷,它能够及时递交给客户,所花费用都在预算内,并且满足客户需求,是可维护的。但是,有关质量好坏的最
3、终评价依赖于用户的反馈。,8,高质量软件标准体系,产品质量 是人们实践产物的属性和行为,是可以认识,可以科学地描述的。并且可以通过一些方法和人类活动,来改进质量.质量模型: McCall 模型, Boehm 模型, ISO 9126 模型 过程质量: 软件能力成熟度模型 CMM ( Capability Maturity Model).国际标准过程模型 ISO 9000软件过程改进和能力决断 SPICE ( Software Process Improvement and Capability dEtermination) 在商业过程中有关的质量内容: 培训、成品制作、宣传、发布日起、客户、风
4、险、成本等,9,产品质量的标准,- 功能性 Functionality - 可用性 Usability (简单安装; 轻松使用; 友好界面) - 可靠性 Reliability (用户使用的根本) - 性能 Performance - 容量 Capacity - 可测量性 Scalability - 可维护性 Service manageability - 兼容性 Compatibility - 可扩展性 Extensibility,10,软件质量特征 ( ISO9126),功能:与一组功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。可靠:在规定的一段时间和条件下,
5、与软件维持其性能水平的能力有关的一组属性。可用:由一组规定或潜在的用户为使用软件所需作的努力和所作的评价有关的一组属性。效率:与在规定条件下软件的性能水平与所使用资源量之间关系有关的一组属性。可维护:与进行指定的修改所需的努力有关的一组属性。可移植:与软件从一个环境转移到另一个环境的能力有关的一组属性。 其中每一个质量特征都分别与若干子特征相对应。,11,ISO 9126软件质量三层模型,- SQRC 软件质量需求评价准则(高层) - SQDC 软件质量设计评价准则(中层) - SQMC 软件质量度量评价准则(低层),12,McCall软件质量模型,产品操作,产品修改,产品转换,13,什么是
6、Bug?,2.1.2 软件缺陷的定义,Any problem/disfigurement/limitation in product design & development Feature or function cant work Unreasonable design Partly realization in function Data error Run error Limitation in features Difference between actual results and expected results Unfriendly UI, Low performance O
7、thers,任何程序、系统中的问题,和产品设计书的不一致性,不能满足用户的需求,14,软件缺陷,IEEE (1983) 729 软件缺陷一个标准的定义:从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。,15,软件开发描述图,16,软件缺陷,软件错误产生的可能原因是: 需求规格说明书包含错误的需求、或漏掉一些需求,或没有准确表达客户所需要的内容 需求规格说明书中有些功能不可能或无法实现 系统设计(system design)中的不合理性 程序设计中的错误 程序代码中的问题,包括错误的算法、复杂的逻辑等,17,
8、软件缺陷,软件缺陷的主要类型/现象:功能、特性没有实现或部分实现设计不合理,存在缺陷实际结果和预期结果不一致运行出错,包括运行中断、系统崩溃、界面混乱数据结果不正确、精度不够用户不能接受的其他问题,如存取时间过长、界面不美观,18,软件缺陷的种类: 按照严重性级别的定义不尽相同,但一般可以概括为4种类型: 致命的(fatal):致命的错误,造成系统或应用程序崩溃(crash)、死机、系统悬挂,或造成数据丢失、主要功能完全丧失等。 严重的(critical):严重错误,指功能或特性没有实现,主要功能部分丧失,次要功能完全丧失,提示信息不太准确,或致命的错误声明 一般的(major):不太严重的错
9、误,这样的软件缺陷虽然不影响系统的基本使用,但没有很好地实现功能,没有达到预期效果。如次要功能丧失,提示信息不太准确,或用户界面差,操作时间长 微小的(minor):一些小问题,对功能几乎没有影响,产品或属性仍可使用,如有个别错别字、文字排列不整齐等。 此外,有时还需要“建议(Suggestion)”级别来处理测试人员所提出的建议或质疑。,软件缺陷,19,软件缺陷的状态 软件缺陷除了严重性以外,还存在反映软件缺陷处于一种什么样的状态,便于跟踪和管理某个产品的缺陷,可以定义不同的bug状态: 激活状态(Active或Open):问题没有解决,测试人员新报的bug,或验证后bug依然存在 已修正状
10、态(Fixed或Resolved):开发人员针对所存在的缺陷,修改程序,认为已解决问题,或通过单元测试 关闭或非激活状态(Close或Inactive):测试人员验证fixed bug后,确认bug不存在之后的状态。 此外,还有下面一些中间状态: 保留(Hold):bug目前无法解决或是由第三方软件产品引起的 延期(Differed):bug暂时不需要解决或在下一版本中解决更彻底一些,软件缺陷,20,造成软件缺陷产生的主要原因有: 1.技术问题 主要包括:算法错误、语法错误、计算和精度问题、系统结构不合理、算法不科学,造成系统性能低下、接口参数传递不匹配,导致模块集成出现问题 2.团队工作 对
11、客户的需求不是十分清楚,或者和用户的沟通存在一些困难; 开发人员相互理解不一致; 设计或编程上的一些假定或依赖性,没有得到充分的沟通 3.软件本身 文档错误、用户使用场合(user scenario),时间上不协调、或不一致性所带来的问题。 系统的自我恢复或数据的异地备份、灾难性恢复等问题,软件缺陷的产生,21,软件缺陷构成,22,软件缺陷在不同阶段的分布,在真正的程序测试之前,通过审查、评审会可以发现更多的缺陷。 规格说明书的缺陷会在需求分析审查、设计、编码、测试等过程中会逐步发现,而不能在需求分析一个阶段发现,23,缺陷成本,软件缺陷的发现随着时间的推移带来的成本越来越大。,24,2.2
12、验证和确认,2.2.1 验证和确认 2.2.2 评审 2.2.3 质量保证和测试的关系,25,验证和确认(V & V),Verification:Are we building the product right? 是否正确地构造了软件?即是否正确地做事,验证开发过程是否遵守已定义好的内容。验证产品满足规格设计说明书的一致性Validation: Are we building the right product? 是否构造了正是用户所需要的软件?即是否正在做正确的事。验证产品所实现的功能是否满足用户的需求,26,评审,通过软件评审,可以更早地发现需求工程、软件设计等各个方面的问题,大大减少大
13、量的后期返工,将质量成本从昂贵的后期返工转化为前期的缺陷发现。 评审是对软件元素或者项目状态的一种评估手段,以确定其是否与计划的结果保持一致,并使其得到改进。检验工作产品是否正确地满足了以往工作产品中建立的规范。 软件评审是软件测试的组成部分。,27,评审分类,管理评审 技术评审 文档评审 流程评审,28,什么是 SQA ?,软件质量保证是通过对软件产品和活动有计划的进行评审和审计来验证软件是否合乎标准的系统工程活动.,确保SQA活动要自始至有计划的进行 审查软件产品和活动是否遵守适用的标准、规程和要求并得到客观验证。 SQA的活动和结果要保证全员参与,沟通顺畅。 逐级解决不符合问题,29,S
14、QA与软件测试有什么关系和区别?,30,SQA与软件测试的关系,SQA 是管理工作、审查对象是流程、强调以预防为主 测试是技术工作、测试对象是产品、主要是以事后检查SQA指导测试、监控测试 测试为SQA提供依据,31,2.3 软件测试的分类,32,不同的分类,按测试的对象或范围分类,如单元测试、文档测试、系统测试等) 按测试目的分类,如功能测试、回归测试、性能测试、可靠性测试、安全性测试和兼容性测试等 根据测试过程中被测软件是否被执行,分为静态测试和动态测试 根据是否针对系统的内部结构和具体实现算法来完成测试,可分为白盒测试和黑盒测试,33,2.4.1 软件测试模型:V模型,34,2.4.2
15、软件测试模型:X模型,35,2.5 软件测试的工作范畴,软件测试工作的组织与管理:制定测试策略、测试计划,确认所采用的测试方法与规范,控制测试进度,管理测试资源。 测试工作的实施:编制符合标准的测试文档,搭建测试环境,开发测试脚本、与开发组织协作实现各阶段的测试活动 。,36,测试工作流程,37,2.5.1 测试计划制定,在测试计划中,主要包括以下内容: 1.制定测试策略 制定测试策略主要分析测试的目标和指标,确定测试的对象和依据,明确测试的重点和采用的方法 2.确定测试范围 测试主要依据“产品设计规格说明书”,根据产品的新特性或功能修改需求所做的代码变化,以及这种变化可能引起的问题或给其他模
16、块造成的影响。 3.所需资源和日程安排 资源包括计算机硬件、软件和人力资源。 在进行资源安排时,更重要的是设置不同的角色,清楚地定义每个人的工作内容和责任。 对于日程安排,主要是设置整个测试周期的项目进程。为了合理、准确地安排日程,对测试工作量要进行正确的估计。,38,2.5.2 设计测试用例,在单元测试阶段,主要用白盒测试方法设计测试用例;在功能测试阶段,主要用黑盒测试方法来设计测试用例。 测试用例定义了为执行测试所需要的条件或环境、输入或操作步骤,以及所期望的结果。 测试环境是测试的基础。要尽量模拟软件系统实际应用的环境。 输入值。除了正常的输入值,关键是需要寻找哪些是属于边界条件的输入值
17、和正常输入值。 期望结果或标准。是根据系统设计规格说明书来确定的输出结果、标准。有时是由经验作出正确判断、理解所确定。,39,2.5.3 执行测试,执行测试主要有下列一些活动: 建立必要的测试环境 按照所写的测试用例,编写测试脚本 根据测试对象和目的,构造测试用例的集合 运行测试脚本或手工按测试用例进行 记录测试结果 结果比较分析,找出软件缺陷 将软件缺陷记录到缺陷数据库中,清楚地描述该缺陷 跟踪和管理软件缺陷 验证被处理的软件缺陷,并进行回归测试 对测试过程进行管理,保证测试工作执行的正确性,实现资源调拨和相关合作方的协调。对测试中的问题进行全程跟踪,40,2.5.4 测试结果分析和质量报告
18、,一个好的测试报告建立在测试结果的基础之上,不仅要提供必要测试结果的实际数据,同时要对结果进行分析,发现产品中问题的本质,对产品质量进行准确的评估。 分析的对象和内容是: 测试的覆盖率 bug分析 产品总体质量分析,41,习题,1单元测试是以 a 说明书为指导,测试源程序代码;集成测试以 b 说明书为指导,测试软件结构; 确认测试以 c 说明书为指导。,a.详细设计 b.概要设计 c.需求分析,2软件是包括 a 、 b 、 c 、 d 的完整集合。,a.程序 b.文档 c.数据 d.服务,填空题:,3动态测试分为 a 即功能测试,和 b 即结构测试。,a.黑盒测试 b.白盒测试,42,习题,1
19、测试是为了验证软件正确地实现了用户需求。,2确认测试主要测试软件功能是否满足用户的合理需求,以“需求规格说明书”为测试依据。,判断题:,3如果发布的软件有质量问题,那是软件测试人员的错。,4. 设计实现测试,软件测试是开发后期的一个阶段。,对,错,错,错,43,习题,1.软件测试是按照特定的规程,_的过程。A发现软件错误 B说明程序正确C证明程序没有错误 D设计并运行测试用例 2一个成功的测试是_。A发现错误 B发现了至今尚未发现的错误C没有发现错误 D证明发现不了错误 3测试过程的活动几乎贯穿整个开发过程,他大体分为_和系统测试阶段。A模块测试、集成测试、有效性测试 B模块测试、功能测试、回归测试C单元测试、功能测试、用户测试 D单元测试、集成测试、确认测试,A,B,D,44,习题,4测试过程的三个测试阶段分别以_文档为指导。A需求规格说明书、概要设计、详细设计 B产品目标设计、产品设计、测试计划C产品需求分析、产品设计、产品测试计划 D测试计划、测试用例设计、测试报告 软件测试的目的_ 。A. 避免软件开发中出现的错误 B. 发现软件开发中出现的错误C. 尽可能发现并排除软件中潜藏的错误,提高软件的可靠性 D. 修改软件中出现的错误,B,A,45,作业,第2章 3、5,46,Q & A,