版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,软件质量,与结构化测试,2,内容提要,什么是软件质量 软件质量特性与质量模型 软件质量的度量 常用软件度量方法 McCabe复杂度 结构化测试技术,3,软件开发,4,Maintenance,软件开发的工作分配,Design,Coding,Testing,5,什么是软件质量,“The totality of features and characteristics of a product or service that bear on its ability to satisfy stated or implied needs” (ISO 8402) 与软件产品满足规定的和隐含的需求的能力
2、有关的特征或特性的全体,The degree of excellence 软件的优秀程度,“The ability of a software product to satisfy its specified requirements” (DoD-STD-2168) 软件产品满足其规定的需求的能力,6,什么是软件质量,“The degree to which a system, component, or process meets specified requirements.” (IEEE standard 610.12-1990) 一个系统、组件或过程满足规定的需求的程度,“The de
3、gree to which a system, component, or process meets customer or user needs or expectations.” (IEEE standard 610.12-1990) 一个系统、组件或过程满足客户或用户的需求的程度,或满足期望值的程度,7,ISO 9126,Software Quality:软件质量 The totality of features and characteristics of a software product that bear on its ability to satisfy stated or
4、 implied needs. 与软件产品满足规定的和隐含的需求的能力有关的特征或特性的全体,Software Quality Characteristics:软件质量特性 A set of attributes of a software product by which its ability is described and evaluated. A software quality characteristic may be refined into multiple levels of sub-characteristics.软件质量特性是软件产品的一组属性,用来对软件的能力进行描述
5、和评估。软件质量特性可细分为多层次的子特性。,Software Quality Metric:软件质量度量 A quantitative scale and method which can be used to determine the value a feature takes for a specific software product.用于确定软件产品质量特性的定量的衡量和分析方法,8,Quality in Software,9,缩短时间表,“Quality does not happen by mistake!”,为什么质量差?,压缩的预算,人员的变化,用户需求的改变,提高或增加
6、功能或性能,Bug Fixing,无效的测试,10,软件质量保证(QA),原则 质量不必是“最好”的 质量是用户想要的和愿意购买的,范围 QA is more than testing QA not only at the end of the project QA of product and process,格言 Moving from quality controlling (ex post) to prevention by quality service.通过质量服务把质量控制变换到预防,11,Quality Characteristics质量特征,12,Software Compl
7、exity,A software product is a solution of a problem. The complexity of the solution generally depends on the complexity of the problem.,13,Quality Models,分配用户需求 Quality Factors(质量因素),到开发标准 Quality Criteria(质量标准),到可证明的和测量的值 Metrics(度量),14,软件质量的因子-标准-度量关系,15,可维护性,16,Boehm 质量模型,17,McCall Model,18,质量与质量
8、管理,质量要用需求,可接受性和它们达到的证据来衡量,质量是通过解决问题实现的,质量管理确保前面解决过的问题不再出现,没有质量测量来做质量管理只能是幻想,19,测量工具的好处,支持质量管理系统,开发工程师可以自己检查,支持代码评审,评价外部软件,支持测试,20,Software,Metrics,21,什么是度量( Metric )?,任何测量的单位 e.g. Cm, Litre, Ohm, Second, Color,描述一个实体的属性,度量的类型: 和项目相关 时间表/开支 估算测量 功能点 软件度量,22,You cant control what you cant measure.,De
9、Marco, 1982,软件质量度量,23,测量非常有用,但我们必须先解决如下问题:,5.1o-1s,测量,What do we want to measure?测量什么,How do we measure?如何测,What do the measurements mea 测量的意义何在,24,5.2o-2s,What to Measure?,25,直观的,Good Metrics should:,和错误出现有直接关系,好的度量,客观的,语言独立,和测试努力直接有关,自动化,简单,26,提高质量,4.1s,确定质量,防止质量退化,辅助做出决策,提高生产力,确定变更的影响,风险分析,确保质量,提
10、高测试效率,27,Metrics+,Halstead Metrics 霍尔斯特德度量,可用的软件度量包括:,Function Point 功能点,Line Count Metrics 线计数度量,McCabe Metrics 圈复杂度,Data Metrics,System Level Metrics,OO Metrics,Derived Metrics,28,Halstead Metrics,起源:,1977年,由Maurice Halstead 开发介绍,计算模块的操作数和操作符,直接得出模块的复杂程度的一种定量测试方法,通过源代码测量模块的复杂度,重点是复杂性的计算,应用于代码,经常作为
11、一种维护性度量,自诞生之日起,就充满争议,29,技术,Halstead度量主要基于以下四层源自程序代码的统计数值:,n1 = the number of distinct(独立的 )operators 操作符 n2 = the number of distinct operands 操作数 N1 = the total number of operators N2 =the total number of operands,Measure Symbol Formula Program length长度 N N= N1 + N2 Program vocabulary词汇量 n n= n1 + n
12、2 Volume 容量V V= N * (LOG2 n) Difficulty难度 D D= (n1/2) * (N2/n2) Effort 工作量E E= D * V,from the above, five measures are derived.,Halstead Metrics,30,Halstead Metrics,优势:,不必深入分析程序的结构,预测错误的数目,预测维护的工作量,对报告和计划项目的健康程度有帮助,对整个程序有帮助,计算简单,适合任何编程语言,经过很多工业研究,都支持使用Halstead 来预测开发工作量和平均bugs,31,Function Points,起源:,
13、1977 由 A.J.Albrecht 开发设计,测量软件的大小和生产力,技术:,将基本功能点分为5组: outputs输出 inquiries查询 inputs输入 files文件 interfaces接口 功能点就是最终用户的业务功能,比如对输入的查询.,和软件完成的功能紧密相关,32,Function Points,优势:,对以下情况,通常被公认为是一种有效方法:,较大的用户群;International Function Point Group (IFPG) 多于 1,200 会员公司,建立每小时功能点的生产率,评估对需求的支持,评估软件工程的大小 (以及周期),软件模块比较的标准化,
14、评估系统变更的开销,IFPG提供功能点实践手册,以及标准化的实践活动,Source: Software Engineering Institute Carnegie Mellon,33,Line Count Metrics,表明每个模块的行数, 包括代码,注释, 空白行, 混合代码和注释.,技术,LOC 可分为以下几类:,Lines-of-Code (LOC) metrics 提供代码的总额, 但是对内容的测量不太好,blanks - Lines with only space (eg. space and tabs) or no text comment,code - Source line
15、s of code that contain only code and white space,comments - Source lines of code that are purely comments,Mixed - Lines that contain both code and comments,34,Line Count Metrics,优势:,测量软件的物理尺寸,鉴别特殊行, 如注释行和空行,帮助查明难以理解的模块. (Comment lines often increase readability, although an unusually large number of
16、 comments can indicate that the module is difficult to understand.),35,McCabe Metrics,起源:,圈复杂度(Cyclomatic Complexity)由Thomas McCabe于1976提出,测量贯穿程序模块的独立线性路径数,提供了比较两个程序复杂度的一种简单的指标,通常被称为程序复杂度或McCabe复杂度,36,McCabe Metrics,优势:,广泛应用的静态软件度量,和其他度量互补,独立于开发语言,扩展到可以包括设计和结构复杂度,基于软件结构的严格的数学分析,37,McCabe Metrics,优势:
17、,可以应用到几个领域:,维护的风险分析 Code complexity tends to increase through maintenance over time. By measuring before and after complexity can be monitored, managed and minimise the risk of change.,代码开发的风险分析: while under development, complexity can be measured for inherent risk and risk buildup.,测试的计划 Cyclomatic
18、 complexity gives the exact number of tests needed to test every decision point. This aids in test planning. Highly complex modules require a prohibitive number of test steps, that number can be reduced to a more pragmatic size by breaking the module into smaller less complex sub modules.,再工程 Cyclom
19、atic complexity analysis provides insight to the structure of code. Reengineering risk is related to the code complexity. This insight helps with cost and risk analysis.,38,McCabe Metrics,McCabe 度量包括.,Cyclomatic complexity (v(G),Essential complexity (ev(G),Module design complexity (iv(G),Design comp
20、lexity (S0),Integration complexity (S1),Data complexity,Global data complexity (gdv(G),Specified data complexity (sdv(G),39,Is constructed from written code,分析一个模块,结构流图.,一种描述软件模块逻辑的结构图,Is a visualization of the modules decision logic,40,分析一个模块,流图符号 (箭头)称为“边”(edge),代表控制流 (圆圈)称为“节点”(node),代表一个或多个语句动作
21、由节点和边围成的范围称为“域”(region),在计算域时,图形外的区域也应算做一个“域” 判定节点,指包含条件的节点,41,If . then,If . then . else,If . and . then,If . or . then,Do . While,While . Do,Switch,分析一个模块,C语言流图符号,42,分析一个模块,FlowgraphsC程序举例,function_test(y) 0 x=3;,1if ( y 4) 2x=sin(y); else 3x=cos(y);,4x=x*x; 5,43,分析一个模块,FlowgraphsC程序举例,0,function_
22、test(y) 0 x=3;,1if ( y 4) 2x=sin(y); else 3x=cos(y);,4x=x*x; 5,44,分析一个模块,FlowgraphsC程序举例,0,1,3,2,function_test(y) 0 x=3;,1if ( y 4) 2x=sin(y); else 3x=cos(y);,4x=x*x; 5,45,分析一个模块,FlowgraphsC程序举例,0,1,3,4,5,2,function_test(y) 0 x=3;,1if ( y 4) 2x=sin(y); else 3x=cos(y);,4x=x*x; 5,46,分析一个模块,Exercise on
23、 Flowgraphs,1IF condition 2statement 3ENDIF 4statement 5WHILE condition 6DO SWITCH 7Label1 8statement 9Label 2 10statement 11Default 12statement 13END SWITCH 14END WHILE,47,分析一个模块,圈复杂度 (v(G).,是模块结构复杂程度的一种度量。定义为贯穿模块的独立线行路径数,因此,它也是预防错误所需的最小测试路径数,缩写为 v(G),圈复杂度过高,表明模块的质量较差,且难于理解与维护,经验研究表明,在模块错误与圈复杂度之间存在
24、较强的关联性,48,三种方法:,All methods provide same result,公式,断言(判定节点),区域,分析一个模块,圈复杂度的计算.,49,公式法,分析一个模块,圈复杂度的计算.,计算所有的边(e)和节点(n),使用公式 V(G) = e - n + 2,Example,V(G) = e - n + 2,50,分析一个模块,圈复杂度的计算.,公式法,计算所有的边(e)和节点(n),使用公式 V(G) = e - n + 2,Example,e=15,51,分析一个模块,圈复杂度的计算.,公式法,计算所有的边(e)和节点(n),使用公式 V(G) = e - n + 2,
25、Example,n=12,52,分析一个模块,圈复杂度的计算.,公式法,计算所有的边(e)和节点(n),使用公式 V(G) = e - n + 2,Example,V(G) = 15 - 12 + 2,V(G) = 5,53,断言(判定节点)法,分析一个模块,圈复杂度的计算.,计算所有的断言(P),使用 V(G) = P + 1,Example,V(G) = 4 + 1,V(G) = 5,V(G) = P + 1,54,区域法,分析一个模块,圈复杂度的计算.,计算所有的由边和节点所围成的区域(R),注意最外围也算一个区域,使用 V(G) = R,Example,V(G) = R,V(G) =
26、5,1,4,3,2,5,如果线条有交叉时会发生错误,55,分析一个模块,v(G) = e - n +2 v(G) = 22 - 18 +2 v(G) = 6,练习:Cyclomatic Complexity (v(G),56,圈复杂度度量法的优势,预测软件潜在错误的比率,指出过于复杂需要分解的模块,通过限制程序的逻辑量来指导测试过程,帮助管理测试和维护的资源 (基于复杂度),分析一个模块,应用任何语言和易于应用,使程序易于理解,易于测试,57,分析一个模块,基本复杂度Essential Complexity (ev(G).,一个模块包含“非结构化结构”的程度,缩写为 (ev(G),基本复杂度高
27、,表明模块的结构“不够良好”,降低代码的质量,维护工作加重,很难分割模块,在维护时修改一个错误经常引入其他错误,58,分析一个模块,基本复杂度的计算方法.,将模块结构流图按结构化方法进行简化(去除结构良好的部分),再计算简化后的圈复杂度就得到基本复杂度ev(G),59,Cyclomatic Complexity = 4,McCabes Essential Complexity ev(G) Remove structured elements and recalculate the complexity,Essential Complexity = 1,分析一个模块,流图的简化.,60,分析一个
28、模块,非结构化逻辑举例.,分支出来的一个循环,分支为一个循环,分支出来的判定,分支内的判定,61,v(G) = 5,分析一个模块,基本复杂度: 流图简化.,简化后流图 v(G) = 3,因此 ev(G) = 3,有层次的流图 v(G) = 5 ev(G) = 3,62,好的设计,可以迅速恶化,v(G) = 10 ev(G) = 1,v(G) = 11 ev(G) = 10,分析一个模块,基本复杂度可以帮助我们发现非结构化代码,63,基本复杂度的优势:,揭示代码的质量,预测维护代码和分接代码所需的工作量,适用于任何编程语言,分析一个模块,测量程序逻辑非结构化程度,64,Analysing a M
29、odule,分析一个模块,模块设计复杂度Module Design Complexity (iv(G).,模块不会孤立存在,测试模块是如何“管理”的,测量将模块集成到系统中需要多少测试工作量?,模块通常要调用子模块,模块依赖于其他模块所提供的服务,模块间相互调用,我们知道.,那么我们能否.,65,分析一个模块,模块设计复杂度(iv(G).,模块设计复杂度是一个模块与调用其他模块相关的结构复杂程度,缩写为 iv(G),量化了一个模块和相关模块集成的测试工作量,模块设计复杂度高意味着:,控制耦合程度高。对以下情况来说,困难程度加大:,隔离,维护,重用,66,分析一个模块,模块设计复杂度的计算方法.
30、,模块设计复杂度是程序流图按下述方法简化后的圈复杂度. 简化方法是去除那些不影响子模块调用控制的判定、循环、和节点(直接子模块),67,所以,iv(G) = 3,v(G) = 3,iv(G) = 3,main() if (a = b) progd(); if (m = n) proge(); switch(expression) case value_1: statement1; break; case value_2: statement2; break; case value_3: statement3; ,v(G) = 5,分析一个模块,Example.,68,模块设计复杂度的优势,度量
31、一个模块对其子模块的管理任务,评估一个模块与其直接子模块之间的最小的集成测试量,区别两个模块,分析一个模块,适用于任何编程语言,且使用简单,通过复杂的计算逻辑 ,以及使程序设计真正复杂化的因素,作为程序设计和集成复杂度计算的基础,69,分析一个模块,低复杂度模块举例.,Cyclomatic 7 Essential 1 Design 4,可靠,Simple logic,Not error-prone,Easy to test,可维护,Good structure,Easy to understand,Easy to modify,70,分析一个模块,适度复杂度模块举例.,Cyclomatic 1
32、6 Essential 1 Design 3,不可靠,Complicated logic,Error-prone,Hard to test,可维护,Can be understood,Can be modified,Complexity can be reduced,71,分析一个模块,高复杂度模块举例.,Cyclomatic 22 Essential 22 Design 6,不可靠,Error-prone,Very hard to test,不可维护,Hard to understand,Hard to modify,Hard to reduce complexity,72,分析一个模块,C
33、yclomatic192 Essential 151 Design 36,Problem: 大小和复杂度远在限定边界之外的软件没有希望,To error-prone to use,Too complex to fix,Solution: 在开发和维护过程中控制复杂度,远离限定边界,Too large to redevelope,73,程序级度量,测量程序设计的复杂性,确定最少的、有效的集成测试量,帮助评估变更的影响,74,设计复杂度Design Complexity (S0),定量评估程序中模块间的相互影响,缩写为 S0,系统各组成部分模块设计复杂度的汇总,程序级度量,评估自底向上集成测试所需
34、的工作量,全面评测程序设计复杂度和程序大小,不考虑单个模块的内部计算结果,设计复杂度高的系统经常:,Have complex interactions between components,Tend to be difficult to maintain,75,设计复杂度的计算方法,S0 是系统中各模块设计复杂度的综合,用下式计算,程序级度量,S0 = iv(G),76,程序级度量,How can we assess the complexity of this design ?,S0计算举例:.,77,程序级度量,System Design Complexity S0 = Module De
35、sign Complexity (iv(G),S0 = iv(G),S0 = 2 + 3 + 2 + 1 + 1,S0 = 9,S0计算举例:.,78,设计复杂度的优势:,适用于整个程序,包括子系统,说明总的设计复杂度, 反映每个模块和所有内部模块的控制的复杂性,揭示代码的质量,揭示程序中模块调用的复杂度,方便计算集成复杂度integration complexity (S1 ),程序级度量,79,集成复杂度Integration Complexity (S1),衡量必须的集成测试量。换句话说,集成复杂度就是程序中独立的线性子树的数目。 所谓子树, 是调用子模块和从子模块返回的顺序,缩写为 S
36、1,程序级度量,80,集成复杂度的计算方法.,集成复杂度的计算类似于模块圈复杂度的计算. 先计算好完全测试所需的集成测试数n, S1 由下式计算:,程序级度量,S1 = S0 - n + 1,81,程序级度量,What is required to test the integration of this system?,What is the minimum number of tests to exercise the interaction of each of these modules?,集成复杂度计算举例.,82,程序级度量,S0 = iv(G),S0 = 2 + 3 + 2 +
37、1 + 1,S0 = 9,集成复杂度计算举例.,83,程序级度量,S1 = S0 - n + 1,S1 = 9 - 5 + 1,S0 = 9,S1 = 5,集成复杂度计算举例.,84,集成复杂度的优势:,作为集成测试的基础,量化了集成测试的工作量,描述了系统设计的复杂度,从总量中分离出系统复杂度,无判定逻辑的模块对 S1不产生影响,程序级度量,85,全局数据复杂度Global Data Complexity (gdv(G).,模块中与全局数据、参量相关联的结构复杂性的一种定量描述。全局数据指可以被多个模块访问的数据,缩写为 gdv(G),表明模块对外部数据的依赖程度,数据度量,评估与全局数据有
38、关的测试工作量,也可衡量每个模块对系统数据耦合的影响,因此可以查出潜在的维护问题,86,全局数据复杂度的计算方法.,将所有不包含全局变量和参数的判定和循环都视为直线代码,再计算此时的圈复杂度就得到全局数据复杂度,数据度量,不大于原流图的圈复杂度,典型值都很小,87,数据度量,subroutine(x) if (c1) if (c2) x = y + n; if (c3) z = y + m; else printf (message1); if (z 10) printf (message2); flaga = 1; if (c5) moda(x); else printf (message3
39、); ,gdv(G)x = 3,全局数据复杂度计算举例.,88,全局数据复杂度的优势.,分离出具有最高外部数据耦合的模块,揭示代码的质量,结合控制流和数据分析给出软件的全面评价,数据度量,89,指定数据复杂度Specified Data Complexity (sdv(G).,模块中与用户数据相关联的结构复杂度的一种定量描述,缩写为 sdv(G),数据度量,90,指定数据复杂度的计算方法.,将所有不包含指定数据元素的判定和循环都视为直线代码,再计算此时的圈复杂度就得到指定数据复杂度,数据度量,指定数据复杂度就是简化后流图的圈复杂度,91,指定数据复杂度计算举例,数据度量,sdvz = 3,ma
40、in() if (c1) if (c2) x = y + n; if (c3) z = y + m; else pritf (message1); if (z 10) printf (message2) flaga = 1; if (c5) moda(x); else printf (message3); ,92,指定数据复杂度的优势.,表明一个模块与指定数据相关联的数据复杂程度,等于(用来测试指定数据所有应用的)基本测试路径数,可分析数据结构变化对软件的影响,数据度量,93,其他复杂度度量.,Henry and Kafura metrics,模块之间的耦合(parameters, global variables, calls),其他度量,模块和系统复杂性; 通过参数和全局变量的耦合程度,模块性或耦合; 结构的复杂度 (结构图的最大深度); 调用,结构流图的模块性,Bowles metrics,Troy and Zweben metrics,Ligier metrics,Source: Software Engineering Institute Carnegie Mellon,94,McCabe 度量,McCabe度量标准与软件质量.,Cyclomatic Complexity v(G),易理解,测试工作量,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 足疗店免责的协议书
- 《高品质客户服务》课件
- 2024年度二手房产首付款退赔合同7篇
- 《成功的途径》课件
- 全新股东内部协议范文
- 公司员工劳务合同电子版
- 买卖农村自建房合同
- 房产中介劳动合同范本开发商合作协议
- 2024年度柑橘市场调查与分析合同
- 二零二四年度工程建设项目安全评价合同
- 电力设备预防性试验规程
- 4.3《课间》 (教案)-2024-2025学年一年级上册数学北师大版
- GB/T 44312-2024巡检机器人集中监控系统技术要求
- 福建省历年中考语文现代文阅读真题17篇(含答案)(2003-2022)
- 侵入性操作相关感染防控
- 小学科学评课稿科学课
- 2024全科医学科理论考试试题及答案
- 2024年下半年教师资格考试初中体育与健康学科知识与教学能力测试试卷与参考答案
- 语文教师职业生涯规划
- 大国兵器智慧树知到期末考试答案章节答案2024年中北大学
- 不动产登记查询委托书范文
评论
0/150
提交评论