《第2章软件质量评价19177.pptx》由会员分享,可在线阅读,更多相关《第2章软件质量评价19177.pptx(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章第二章 软件质量评价软件质量评价武汉大学武汉大学 计算机学院计算机学院 软件工程课程组软件工程课程组软件工程Software EngineeringSoftware EngineeringSoftware Engineering思考思考?n 什么是好的软件?什么是好的软件?n 软件质量好坏如何评价?软件质量好坏如何评价?Software EngineeringSoftware Engineering第二章第二章软件质量评价软件质量评价n 什么是好的什么是好的软件软件?有何特点?有何特点?n 软件评价的标准如何?软件评价的标准如何?n 什么是软件结构?什么是良软件结构?什么是软件结构?什么
2、是良软件结构?n 什么是模块化?什么是模块化?n 模块设计时应遵循的标准是什么?模块设计时应遵循的标准是什么?Software EngineeringSoftware Engineering一、软件质量评价标准一、软件质量评价标准n 有效可靠有效可靠n 结构清晰结构清晰q用户角度:达到需求、界面友好、简单易学用户角度:达到需求、界面友好、简单易学q开发人员角度:良结构、易测试、易维护、可开发人员角度:良结构、易测试、易维护、可移植移植 n 文档齐全文档齐全Software EngineeringSoftware Engineering二、软件结构二、软件结构F 软件的各个组成部分之间的关系软件
3、的各个组成部分之间的关系问题问题P同一个问题P的三种不同的软件结构Software EngineeringSoftware Engineering基本概念基本概念n n块:块:块:块:可以独立命名和编址可以独立命名和编址可以独立命名和编址可以独立命名和编址的单元的单元的单元的单元n n扇出扇出扇出扇出:直接由一个块所控:直接由一个块所控制的块数制的块数 n n扇入扇入扇入扇入:直接调用它的上级:直接调用它的上级块数目块数目n n深度深度深度深度:控制的总层数:控制的总层数 n n宽度宽度宽度宽度:跨度最宽层的跨度:跨度最宽层的跨度数数 MMM1M1M2M2M3M3N1N1N2N2N3N3N4N
4、4N31N31N32N32软件结构软件结构Software EngineeringSoftware Engineering1.良软件结构良软件结构F具有层次性,无回路块调用的软件结构。具有层次性,无回路块调用的软件结构。线性型线性型树型树型半序型半序型Software EngineeringSoftware Engineering非良结构的调整非良结构的调整网络结构网络结构A AB B合并循环节点合并循环节点良结构良结构ABAB模块内部模块内部复杂性增加了复杂性增加了Software EngineeringSoftware Engineering2.模块化(模块化(modularity)n模块
5、(模块(module):):又称构件,是能够单独命名又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合。并独立地完成一定功能的程序语句的集合。n模块化模块化n把程序划分成独立命名且可独立访问的模块,把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功成起来构成一个整体,可以完成指定的功能满足用户的需求。能满足用户的需求。n“模块化模块化”有助于复杂问题的求解有助于复杂问题的求解Software EngineeringSoftware Engineering模块化的依据模块化的依据c(x):
6、问题):问题 x 的复杂程度的复杂程度E(x):解决问题):解决问题 x 需要的工作量(时间)需要的工作量(时间)对于两个问题对于两个问题P1和和P2if C(P1)C(P2)then E(P1)E(P2)根据人们求解问题的经验,有规律:根据人们求解问题的经验,有规律:C(P1+P2)C(P1)+C(P2)则有则有 E(P1+P2)E(P1)+E(P2)即即“分而治之分而治之”有助于复杂问题的求解。有助于复杂问题的求解。如果把软件无限细分,如果把软件无限细分,会出现什么样的情况?会出现什么样的情况?Software EngineeringSoftware Engineering块的划分与总工作
7、量之间的关系块的划分与总工作量之间的关系接口成本接口成本最小成本区域最小成本区域总成本总成本块成本块成本成本成本(工作量)(工作量)模块数模块数M 模块划分的合理性。模块两个定性的标准:内聚和耦合。模块划分的合理性。模块两个定性的标准:内聚和耦合。Software EngineeringSoftware Engineering模块的重要特征模块的重要特征n 抽象(抽象(abstraction)q我们在考虑问题时,集中考虑和当前问题有关的方面,而忽略和我们在考虑问题时,集中考虑和当前问题有关的方面,而忽略和当前问题无关的方面,这就是抽象。或者说抽象就是抽出事物的当前问题无关的方面,这就是抽象。或
8、者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。本质特性而暂时不考虑它们的细节。q在对软件系统进行模块设计时,可以有不同的抽象层次。在对软件系统进行模块设计时,可以有不同的抽象层次。q忽略细节,分层理解问题,自顶向下层层细化忽略细节,分层理解问题,自顶向下层层细化n信息隐藏(信息隐藏(information hiding)F 细节隐藏细节隐藏 可理解性可理解性 修改副作用小修改副作用小 错误副作用小错误副作用小Software EngineeringSoftware Engineering例:开发一个例:开发一个CAD软件,实现一个二维绘图系统的全部功软件,实现一个二维绘图系统的全部功能
9、,供低级计算机辅助设计使用。能,供低级计算机辅助设计使用。抽象层次抽象层次抽象层次抽象层次I I I I 用问题环境的术语来描述这个软件用问题环境的术语来描述这个软件该软件包括一个计算机绘图界面,向绘图员显该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个和辅助视图都可以用这个CAD软件实现软件实现模块化的抽象特征模块化的抽象特征Software
10、 EngineeringSoftware Engineering模块化的抽象特征模块化的抽象特征抽象层次抽象层次抽象层次抽象层次IIIIIIII 任务需求的描述,列出任务需求的描述,列出“What”“What”而不是而不是“How”“How”CAD SOFTWARE TASKS:user interaction task;2-D drawing creation task;graphics display task;drawing file management task;ENDSoftware EngineeringSoftware Engineering模块化的抽象特征模块化的抽象特征抽象
11、层次抽象层次抽象层次抽象层次IIIIIIIIIIII 程序过程表示程序过程表示 (以(以2-D2-D绘图生成任务为例)绘图生成任务为例)PROCEDURE 2-D drawing creation REPEAT UNTILE(drawing creation task terminates)DO WHILE(digitizer interaction occurs)Digitizer interface task;DETERMINE drawing request CASE Line:line drawing task;Rectangle:rectangle drawing task;Circ
12、le:circle drawing task;END;DO WHILE(keyboard interaction occurs)keyboard interaction task;PROCESS analysis/computation CASE View:auxiliary view task;Section:cross sectioning task;END;END REPETITION;END PROCEDURE.Software EngineeringSoftware Engineering3.模块独立性(模块独立性(Module independence)n n好设计的关键:好设计的
13、关键:每个模块完成一个相对独立的子功能,并每个模块完成一个相对独立的子功能,并且与其它模块间的接口简单。且与其它模块间的接口简单。n n独立性的度量独立性的度量(Yourdon&Constantine,1978)qq 耦合耦合耦合耦合(CouplingCoupling)块间联块间联块间联块间联系系系系qq 内聚内聚内聚内聚(CohesionCohesion)块块块块内内内内联联联联系系系系Software EngineeringSoftware Engineering(1)耦合()耦合(Coupling)Great deal of dependenceIndependent Highly co
14、upledLoosely coupledUncoupled Goal:as loose as possible=as independent as possibleF 对一个软件结构内不同模块之间互连程度的度量对一个软件结构内不同模块之间互连程度的度量对一个软件结构内不同模块之间互连程度的度量对一个软件结构内不同模块之间互连程度的度量 Software EngineeringSoftware Engineering零耦合(零耦合(uncoupling)n彼此完全独立,这意味着模块间无任何连彼此完全独立,这意味着模块间无任何连接,耦合程度最低接,耦合程度最低Uncoupled ABSoftwar
15、e EngineeringSoftware Engineering数据耦合(数据耦合(Data Coupling)n一个模块访问另一个模块时,彼此间通过一个模块访问另一个模块时,彼此间通过参数交换信息,而且交换的信息仅仅是数参数交换信息,而且交换的信息仅仅是数据据 The most desirableThe most desirable ABDataSoftware EngineeringSoftware Engineering控制耦合(控制耦合(Control Coupling)n指一个模块调用另一个模块时,传递的信息中有指一个模块调用另一个模块时,传递的信息中有控制信息(尽管有时这种控制信
16、息以数据的形式控制信息(尽管有时这种控制信息以数据的形式出现)出现)ABFlagF2FnF1Flag控制耦合增加控制耦合增加了理解与编程了理解与编程及修改的复杂及修改的复杂性。性。Software EngineeringSoftware Engineering公共环境耦合(公共环境耦合(Common Coupling)n两个或多个模块通过一个公共数据环境相互作用两个或多个模块通过一个公共数据环境相互作用Global:V1 V2A:A1=V1+V2B:V1=B1Global:V1 V2A:V1+B:V2=B1+V1问题:问题:复杂程度随耦合模块的个数增加而增加复杂程度随耦合模块的个数增加而增加
17、公共部分的数据存取无法控制公共部分的数据存取无法控制 公共部分的改动将影响所有调用它的模块,可维护性差公共部分的改动将影响所有调用它的模块,可维护性差Software EngineeringSoftware Engineering内容耦合(内容耦合(Content Coupling)n一个模块访问另一个模块的内部数据一个模块访问另一个模块的内部数据n一个模块不通过正常入口而转到另一个模一个模块不通过正常入口而转到另一个模块的内部块的内部n两个模块有一部分程序代码重叠(只可能两个模块有一部分程序代码重叠(只可能出现在汇编程序中)出现在汇编程序中)n一个模块有多个入口一个模块有多个入口 The l
18、east desirable The least desirableSoftware EngineeringSoftware Engineering内容耦合内容耦合例例1.A访问访问C的内部的内部数据或不通过正数据或不通过正常入口而转入常入口而转入C的内部。的内部。ABCDA:goto C1C:C1:Software EngineeringSoftware Engineering内容耦合内容耦合例例2.部分代码重叠部分代码重叠(常出现在汇(常出现在汇编程序中)编程序中)B A例例3.一个模块有一个模块有多多个入口(功能)个入口(功能)A:entry 1:entry 2:Software Eng
19、ineeringSoftware Engineering耦合度与软件结构耦合度与软件结构类类 型型耦合度耦合度模块独立性模块独立性软件结构软件结构零耦合零耦合低低高高强强弱弱好好差差数据耦合数据耦合控制耦合控制耦合公共环境耦合公共环境耦合内容耦合内容耦合原则:尽量使用数据耦合,少用控制耦合,限制公共原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。环境耦合的范围,完全不用内容耦合。Software EngineeringSoftware Engineering思考题思考题ABDCFE132456模块互连图模块互连图模块接口描述模块接口描述编号编号输入输入输出输出1
20、飞机类型飞机类型状态标志状态标志2飞机零件清单飞机零件清单3功能代码功能代码4飞机零件清单飞机零件清单5零件编号零件编号零件制造商零件制造商6零件编号零件编号零件名称零件名称c 已知模块已知模块A、E和和F更新同一个数据库,更新同一个数据库,请确定模块之间的耦合类型。请确定模块之间的耦合类型。Software EngineeringSoftware Engineering(2)内聚()内聚(Cohesion)Goal:as cohesive as possible!F一个模块内各个元素彼此结合的紧密程度一个模块内各个元素彼此结合的紧密程度一个模块内各个元素彼此结合的紧密程度一个模块内各个元素彼
21、此结合的紧密程度 理想内聚的模块只做一件事情理想内聚的模块只做一件事情模块内的高内聚往往意味着模块间的松耦合模块内的高内聚往往意味着模块间的松耦合内聚更重要!内聚更重要!Software EngineeringSoftware Engineering偶然内聚(偶然内聚(Coincidental cohesion)nUnrelated functions,processes,or data are found in the same module(for convenience)A BA BC语句相同语句相同Software EngineeringSoftware Engineering逻辑内聚
22、(逻辑内聚(Logical Cohesion)nLogically related functions or data are placed in the same module A:Read inputsfrom diskfrom tapefrom Software EngineeringSoftware EngineeringXYZABC逻辑内聚逻辑内聚XYZABCSSoftware EngineeringSoftware Engineering时间内聚(时间内聚(Temporal cohesion)nThe functions are related only by the timing
23、 involvedinitial xInitial y这种模块在这种模块在这种模块在这种模块在20202020世纪世纪世纪世纪80808080年代的应用程年代的应用程年代的应用程年代的应用程序中使用较多。没有任何复用价值。序中使用较多。没有任何复用价值。序中使用较多。没有任何复用价值。序中使用较多。没有任何复用价值。Software EngineeringSoftware Engineering过程内聚(过程内聚(Procedural cohesion)nFunctions are grouped together in a module to ensure a certain order o
24、f performanceenter datacheck datamanipulate dataSoftware EngineeringSoftware Engineering通信内聚(通信内聚(Communicational cohesion)nAll the functions in a module operate on or produce the same data setX从文件从文件file读出数据读出数据由数据产生日报表由数据产生日报表由数据产生单项产品报表由数据产生单项产品报表Software EngineeringSoftware Engineering顺序内聚(顺序内聚(
25、Sequential cohesion)nThe output from one part of a module is the input to the next partX输入系数输入系数求根求根打印方程的根打印方程的根Software EngineeringSoftware Engineering功能内聚(功能内聚(Functional cohesion)nEvery processing element is essential to the performance of a single functionX报表打印报表打印Software EngineeringSoftware En
26、gineering内聚度与软件结构内聚度与软件结构软件结构软件结构模块独立性模块独立性内聚度内聚度内聚内聚评分评分差差好好弱弱强强低低偶然内聚偶然内聚0分分逻辑逻辑内聚内聚1分分时间时间内聚内聚3分分中中过过程内聚程内聚5分分通信内聚通信内聚7分分高高顺顺序内聚序内聚9分分功能内聚功能内聚10分分设计时力争做到高内聚设计时力争做到高内聚!不要低内聚!不要低内聚!Software EngineeringSoftware Engineering三、软件度量三、软件度量n 度量(度量(metrics)n 测量(测量(measure)n 估算(估算(estimation)软件度量的根本目的是为了管理的
27、需要。利软件度量的根本目的是为了管理的需要。利用度量来改进软件过程。用度量来改进软件过程。Software EngineeringSoftware Engineering软件度量软件度量n 软件复杂性度量软件复杂性度量q 规模规模q 文本复杂性文本复杂性q 控制结构的复杂性控制结构的复杂性n 软件可靠性度量软件可靠性度量q 系统故障率系统故障率q 软件修复与软件有效性软件修复与软件有效性q 软件可靠性估算软件可靠性估算Software EngineeringSoftware Engineering1.软件复杂性度量软件复杂性度量n 规模:程序代码的规模规模:程序代码的规模软件复杂度软件复杂度n
28、 文本复杂性文本复杂性n 控制结构的复杂性控制结构的复杂性Software EngineeringSoftware Engineering(1)规模度量()规模度量(Size-Oriented Metrics)代码行(代码行(Lines of code,LOC)度量)度量n LOCq 乐观值乐观值aq 一般值一般值mq 悲观值悲观值bnLOC的期望值的期望值Software EngineeringSoftware Engineering代码行(代码行(Lines of code,LOC)c 生产率(生产率(LOC per person-month)=代码行数代码行数/工作量工作量Pl=L/Ec
29、 每行代码的平均成本(每行代码的平均成本($per LOC)=总成本总成本/代码行数代码行数Cl=S/Lc 代码出错率(代码出错率(Errors per kLOC)=总错误数总错误数/代码行数代码行数EQRl=Ne/LSoftware EngineeringSoftware Engineering某软件项目记录某软件项目记录项目项目工作量工作量PM成本成本($)代码行代码行kLOC文档页数文档页数Pd错误数错误数Ne人数人数Maaa-012416800012.1365293ccc-046244000027.21224865fff-034331400020.21050646Pl=12.1 kLO
30、C/24 PM=504 LOC/PMCl=$168000/12.1 kLOC=$13.88/LOCEQRl=29个个/12.1 Kloc=2.4个个/kLOCSoftware EngineeringSoftware Engineering代码行数估算软件规模的特点代码行数估算软件规模的特点n优点:简单易行优点:简单易行n缺点:缺点:q软件软件程序程序 q 不能刻画算法的难易程度不能刻画算法的难易程度q 开发前或初期估算困难开发前或初期估算困难q 依赖于语言依赖于语言q只适用于过程式语言,不适用于只适用于过程式语言,不适用于4GLSoftware EngineeringSoftware Engi
31、neering(2)文本复杂性度量)文本复杂性度量n 程序语言符号长度程序语言符号长度 N=N1+N2N1:程序中操作符个数:程序中操作符个数n1:程序中不同操作符个数:程序中不同操作符个数N2:程序中操作数个数:程序中操作数个数n2:程序中不同操作数个数:程序中不同操作数个数 估算公式估算公式 N=n1log2n1+n2log2n2n 程序量程序量V=N log2(n1+n2)Software EngineeringSoftware Engineering(3)控制结构的复杂性度量)控制结构的复杂性度量n 1976,T.J.McCaben 基于程序拓扑结构的软件复杂性度量模型基于程序拓扑结构
32、的软件复杂性度量模型n 巡回秩数巡回秩数V(G)V(G)=e n+2=边数边数 结点数结点数+2可以证明:可以证明:V(G)=有界或无界的封闭区域个数有界或无界的封闭区域个数Software EngineeringSoftware Engineering程序控制结构的复杂性程序控制结构的复杂性R1R2abcdeR3R1顺序结构顺序结构R1R2选择结构选择结构R1R2While结构结构R1R2Repeat结构结构Software EngineeringSoftware Engineering2.软件可靠性度量软件可靠性度量n软件的可靠性软件的可靠性n在某个给定时间间隔内,程序按照规格说明在某个给
33、定时间间隔内,程序按照规格说明成功运行的概率成功运行的概率Software EngineeringSoftware Engineering软件修复与软件有效性软件修复与软件有效性n有效性函数有效性函数A(t)q系统在系统在t时刻正常运行的概率时刻正常运行的概率n可靠性函数可靠性函数R(t)q系统在系统在0,t时间间隔正常运行的概率时间间隔正常运行的概率A=MTTF/(MTTF+MTTR)Software EngineeringSoftware Engineering软件可靠性估算软件可靠性估算n错误植入模型错误植入模型N:池塘中的鱼尾数:池塘中的鱼尾数Nt:植入的带标记的鱼尾数:植入的带标记的
34、鱼尾数n:捞出的鱼尾数:捞出的鱼尾数nt:捞出的带标记的鱼数:捞出的带标记的鱼数Software EngineeringSoftware Engineering小小 结结 软件评价标准软件评价标准 软件结构软件结构 模块化模块化 模块独立性模块独立性 软件度量软件度量Software EngineeringSoftware Engineering思考题思考题n你认为评价软件好坏有哪些标准?你认为评价软件好坏有哪些标准?n在设计软件结构时应遵循哪些原则?在设计软件结构时应遵循哪些原则?n某某软软件件项项目目如如果果采采用用四四代代语语言言开开发发,LOC度量还有意义吗?为什么?度量还有意义吗?为什么?n一一个个程程序序能能既既正正确确又又不不可可靠靠吗吗?试试说说明明理由。理由。Software EngineeringSoftware Engineering谢谢观看/欢迎下载BY FAITH I MEAN A VISION OF GOOD ONE CHERISHES AND THE ENTHUSIASM THAT PUSHES ONE TO SEEK ITS FULFILLMENT REGARDLESS OF OBSTACLES.BY FAITH I BY FAITH