《《软件质量评价》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《软件质量评价》PPT课件.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件工程软件工程Software Engineering武汉大学武汉大学 计算机学院计算机学院Software EngineeringSoftware Engineering第第2章章软件质量评价软件质量评价n 什么是好的什么是好的软件软件?有何特点?有何特点?n 软件评价的标准如何?软件评价的标准如何?n 什么是软件结构?什么是良软件结构?什么是软件结构?什么是良软件结构?n 什么是模块化?什么是模块化?n 模块设计时应遵循的标准是什么?模块设计时应遵循的标准是什么?Software EngineeringSoftware Engineering一、软件质量评价标准一、软件质量评价标准n 定
2、性评价定性评价q用户角度:达到需求、界面友好、简单易学用户角度:达到需求、界面友好、简单易学q开发人员角度:良结构、易测试、易维护、可开发人员角度:良结构、易测试、易维护、可移植移植 n 定量评价:软件度量定量评价:软件度量Software EngineeringSoftware Engineering宏观标准宏观标准n 良软件结构良软件结构n 文档齐全文档齐全n 可靠性可靠性Software EngineeringSoftware Engineering二、软件结构二、软件结构F 软件的各个组成部分之间的关系软件的各个组成部分之间的关系问题问题P同一问题的三种不同软件结构同一问题的三种不同软
3、件结构 Software EngineeringSoftware Engineering基本概念基本概念n n块块块块n n扇出扇出扇出扇出:由一个块所直:由一个块所直接控制的块数接控制的块数 n n扇入扇入扇入扇入:直接调用它的:直接调用它的上级块数目上级块数目n n深度深度深度深度:控制的总层数:控制的总层数 n n宽度宽度宽度宽度:跨度最宽层的:跨度最宽层的跨度数跨度数 MMM1M1M2M2M3M3N1N1N2N2N3N3N4N4N31N31N32N32软件结构软件结构Software EngineeringSoftware Engineering1.良软件结构良软件结构F具有层次具有层
4、次性,无回路块调用的软件结构性,无回路块调用的软件结构。线性型线性型树型树型半序型半序型Software EngineeringSoftware Engineering非良结构的调整非良结构的调整网络结构网络结构A AB B合并循环节点合并循环节点良结构良结构ABAB模块内部模块内部复杂性增加了复杂性增加了Software EngineeringSoftware Engineering2.模块化(模块化(modularity)n模块(模块(Module)、单元)、单元(Cell)n模块化模块化F把程序划分成把程序划分成独立命名独立命名且可且可独立访问独立访问的模的模块,每个模块完成一个子功能,
5、把这些模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定块集成起来构成一个整体,可以完成指定的功能的功能,满足用户的需求。满足用户的需求。Software EngineeringSoftware Engineering模块化的依据模块化的依据c(x):问题):问题 x 的复杂程度的复杂程度E(x):解决问题):解决问题 x 需要的工作量(时间)需要的工作量(时间)对于两个问题对于两个问题P1和和P2if C(P1)C(P2)then E(P1)E(P2)若若P能分解为能分解为P1、P2两个部分,由经验有:两个部分,由经验有:C(P)C(P1)+C(P2)E(P)E(P1
6、)+E(P2)Software EngineeringSoftware Engineering块的划分与总工作量之间的关系块的划分与总工作量之间的关系接口成本接口成本最小成本区域最小成本区域总成本总成本块成本块成本成本成本(工作量)(工作量)模块数模块数M在一个在一个16开页面内可写完,若开页面内可写完,若50行代码行代码Software EngineeringSoftware Engineering模块的重要特征模块的重要特征n 抽象(抽象(abstraction)q 忽略细节,分层理解问题,自顶向下层层细化忽略细节,分层理解问题,自顶向下层层细化n 信息隐藏(信息隐藏(informatio
7、n hiding)F 细节隐藏细节隐藏q 可理解性可理解性q 修改副作用小修改副作用小q 错误副作用小错误副作用小Software EngineeringSoftware Engineering例:开发一个例:开发一个CAD软件,实现一个二维绘图系统的全部功软件,实现一个二维绘图系统的全部功能,供初级计算机辅助设计者使用。能,供初级计算机辅助设计者使用。抽象层次抽象层次抽象层次抽象层次I I I I 用问题环境的术语来描述这个软件用问题环境的术语来描述这个软件该软件包括一个计算机绘图界面,向绘图员显该软件包括一个计算机绘图界面,向绘图员显示图形;一个数字化界面,用于绘图员绘制直示图形;一个数字
8、化界面,用于绘图员绘制直线、折线、矩形、圆及曲线等;所有几何图的线、折线、矩形、圆及曲线等;所有几何图的计算、所有的剖面图和辅助视图都可以用这个计算、所有的剖面图和辅助视图都可以用这个CAD软件实现软件实现模块化的抽象特征模块化的抽象特征Software EngineeringSoftware Engineering模块化的抽象特征模块化的抽象特征抽象层次抽象层次抽象层次抽象层次IIIIIIII 任务需求的描述,列出任务需求的描述,列出“What”“What”而不是而不是“How”“How”CAD SOFTWARE TASKS:user interaction task;2-D drawing
9、 creation task;graphics display task;drawing file management task;ENDSoftware EngineeringSoftware Engineering3.模块独立性(模块独立性(Module independence)n n分解模块的关键:分解模块的关键:分解模块的关键:分解模块的关键:1 1)可命名)可命名)可命名)可命名名字有隐含语义名字有隐含语义名字有隐含语义名字有隐含语义2 2)每个模块完成一个相对独立的子功能,并且与其)每个模块完成一个相对独立的子功能,并且与其)每个模块完成一个相对独立的子功能,并且与其)每个模块完
10、成一个相对独立的子功能,并且与其它模块间的接口简单。它模块间的接口简单。它模块间的接口简单。它模块间的接口简单。n n独立性的度量独立性的度量独立性的度量独立性的度量(Yourdon&Constantine,1978)qq 耦合耦合耦合耦合(CouplingCoupling)块间联块间联块间联块间联系系系系qq 内聚内聚内聚内聚(CohesionCohesion)块块块块内内内内联联联联系系系系Software EngineeringSoftware Engineering(1)耦合()耦合(Coupling)Great deal of dependenceIndependent Highly
11、 coupledLoosely coupledUncoupled Goal:as loose as possible=as independent as possibleF 对一个软件结构内不同模块之间互连程度的度量对一个软件结构内不同模块之间互连程度的度量对一个软件结构内不同模块之间互连程度的度量对一个软件结构内不同模块之间互连程度的度量 Software EngineeringSoftware Engineering零耦合(零耦合(uncoupling)n彼此完全独立,这意味着模块间无任何连彼此完全独立,这意味着模块间无任何连接,耦合程度最低接,耦合程度最低Uncoupled Softwa
12、re EngineeringSoftware Engineering数据耦合(数据耦合(Data Coupling)n两个模块彼此间通过参数交换信息,而且两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据交换的信息仅仅是数据 The most desirableThe most desirable ABDataSoftware EngineeringSoftware Engineering控制耦合(控制耦合(Control Coupling)n传递的信息中有控制信息(尽管有时这种控制信传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现)息以数据的形式出现)ABFlagF2FnF
13、1Flag接口单一,接口单一,但仍然影响但仍然影响被控模块的被控模块的内部逻辑。内部逻辑。Software EngineeringSoftware Engineering公共环境耦合(公共环境耦合(Common Coupling)n两个或多个模块通过一个公共数据环境相互作用两个或多个模块通过一个公共数据环境相互作用Global:V1 V2A:A1=V1+V2B:V1=B1Global:V1 V2A:V1+B:V2=B1+V1问题:问题:公共部分的改动将影响所有调用它的模块公共部分的改动将影响所有调用它的模块 公共部分的数据存取无法控制公共部分的数据存取无法控制 复杂程度随耦合模块的个数增加而增
14、加复杂程度随耦合模块的个数增加而增加Software EngineeringSoftware Engineering内容耦合(内容耦合(Content Coupling)n一个模块访问另一个模块的内部数据一个模块访问另一个模块的内部数据n一个模块不通过正常入口而转到另一个模一个模块不通过正常入口而转到另一个模块的内部块的内部n两个模块有一部分程序代码重叠(只可能两个模块有一部分程序代码重叠(只可能出现在汇编程序中)出现在汇编程序中)n一个模块有多个入口一个模块有多个入口 The least desirable The least desirableSoftware EngineeringSof
15、tware Engineering内容耦合内容耦合例例1.A访问访问C的内部的内部数据或不通过正数据或不通过正常入口而转入常入口而转入C的内部。的内部。ABCDA:goto C1C:C1:Software EngineeringSoftware Engineering内容耦合内容耦合例例2.部分代码重叠部分代码重叠(常出现在汇(常出现在汇编程序中)编程序中)B A例例3.一个模块有一个模块有多多个入口(功能)个入口(功能)A:entry 1:entry 2:Software EngineeringSoftware Engineering耦合度与软件结构耦合度与软件结构类类 型型耦合度耦合度模块
16、独立性模块独立性软件结构软件结构零耦合零耦合低低高高强强弱弱好好差差数据耦合数据耦合控制耦合控制耦合公共环境耦合公共环境耦合内容耦合内容耦合原则:尽量使用数据耦合,少用控制耦合,限制公共原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。环境耦合的范围,完全不用内容耦合。Software EngineeringSoftware Engineering(2)内聚()内聚(Cohesion)Goal:as cohesive as possible!F一个模块内各个元素彼此结合的紧密程度一个模块内各个元素彼此结合的紧密程度一个模块内各个元素彼此结合的紧密程度一个模块内各个
17、元素彼此结合的紧密程度 n理想的模块内聚只做一件事情理想的模块内聚只做一件事情n模块内的高内聚往往意味着模块间的松耦合模块内的高内聚往往意味着模块间的松耦合n内聚更重要!内聚更重要!Software EngineeringSoftware Engineering偶然内聚(偶然内聚(Coincidental cohesion)nUnrelated functions,processes,or data are found in the same module(for convenience)A BA BCSoftware EngineeringSoftware Engineering逻辑内聚(逻
18、辑内聚(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 i
19、nvolvedinitial xInitial ySoftware EngineeringSoftware Engineering过程内聚(过程内聚(Procedural cohesion)nFunctions are grouped together in a module to ensure a certain order of performanceenter datacheck datamanipulate dataSoftware EngineeringSoftware Engineering通信内聚(通信内聚(Communicational cohesion)nAll the fu
20、nctions in a module operate on or produce the same data setX从文件从文件file读出数据读出数据由数据产生日报表由数据产生日报表由数据产生单项产品报表由数据产生单项产品报表Software EngineeringSoftware Engineering顺序内聚(顺序内聚(Sequential cohesion)nThe output from one part of a module is the input to the next partX输入系数输入系数求根求根打印方程的根打印方程的根Software EngineeringSo
21、ftware Engineering功能内聚(功能内聚(Functional cohesion)nEvery processing element is essential to the performance of a single functionX报表打印报表打印Software EngineeringSoftware Engineering内聚度与软件结构内聚度与软件结构软件结构软件结构模块独立性模块独立性内聚度内聚度内聚内聚评分评分差差好好弱弱强强低低偶然内聚偶然内聚0分分逻辑逻辑内聚内聚1分分时间时间内聚内聚3分分中中过过程内聚程内聚5分分通信内聚通信内聚7分分高高顺顺序内聚序内聚
22、9分分功能内聚功能内聚10分分设计时力争做到高内聚设计时力争做到高内聚!Software EngineeringSoftware Engineering三、软件度量三、软件度量n 度量(度量(metrics)n 测量(测量(measure)n 估算(估算(estimation)Software EngineeringSoftware Engineering软件度量软件度量n 软件复杂性度量软件复杂性度量q 规模规模q 文本复杂性文本复杂性q 控制结构的复杂性控制结构的复杂性n 软件可靠性度量软件可靠性度量q 系统故障率系统故障率q 软件修复与软件有效性软件修复与软件有效性q 软件可靠性估算软件
23、可靠性估算Software EngineeringSoftware Engineering1.软件复杂性度量软件复杂性度量n 规模规模n 文本复杂性文本复杂性n 控制结构的复杂性控制结构的复杂性Software EngineeringSoftware Engineering(1)规模度量()规模度量(Size-Oriented Metrics)c 代码行(代码行(Lines of code,LOC)c 生产率(生产率(LOC per person-month)=代码行数代码行数/工作月工作月Pl=L/Ec 每行代码的平均成本(每行代码的平均成本($per LOC)=总成本总成本/代码行数代码行
24、数Cl=S/Lc 代码出错率(代码出错率(Errors per kLOC)=总错误数总错误数/代码行数代码行数EQRl=Ne/LSoftware EngineeringSoftware Engineering某软件项目记录某软件项目记录项目项目工作量工作量PM成本成本($)代码行代码行kLOC文档页数文档页数Pd错误数错误数Ne人数人数Maaa-012416800012.1365293ccc-046244000027.21224865fff-034331400020.21050646Pl=12.1 kLOC/24 PM=504 LOC/PMCl=$168000/12.1 kLOC=$13.88
25、/LOCEQRl=29个个/12.1 Kloc=2.4个个/kLOCSoftware EngineeringSoftware Engineering代码行数估算软件规模的特点代码行数估算软件规模的特点n优点:简单易行优点:简单易行n缺点:缺点:q 依赖于语言依赖于语言q 不能刻画算法的难易程度不能刻画算法的难易程度q 开发前或初期估算困难开发前或初期估算困难q 只适用于过程式语言,不适用于只适用于过程式语言,不适用于4GLSoftware EngineeringSoftware Engineering(2)文本复杂性度量)文本复杂性度量n 程序语言符号长度程序语言符号长度 N=N1+N2N1:
26、程序中操作符总个数:程序中操作符总个数n1:程序中不同操作符个数:程序中不同操作符个数N2:程序中操作数总个数:程序中操作数总个数n2:程序中不同操作数个数:程序中不同操作数个数 估算公式估算公式 N=n1log2n1+n2log2n2n 程序量程序量V=N log2(n1+n2)Software EngineeringSoftware Engineering(3)控制结构的复杂性度量)控制结构的复杂性度量n 1976,T.J.McCaben 基于程序拓扑结构的软件复杂性度量模型基于程序拓扑结构的软件复杂性度量模型n 巡回秩数巡回秩数V(G)V(G)=e n+2=边数边数 结点数结点数+2可以
27、证明:可以证明:V(G)=有界或无界的封闭区域个数有界或无界的封闭区域个数Software EngineeringSoftware Engineering程序控制结构的复杂性程序控制结构的复杂性R1R2abcdeR3R1顺序结构顺序结构R1R2选择结构选择结构R1R2While结构结构R1R2Repeat结构结构Software EngineeringSoftware Engineering2.软件可靠性度量软件可靠性度量n软件的可靠性软件的可靠性F在某个给定时间间隔内,程序按照规格说在某个给定时间间隔内,程序按照规格说明成功运行的概率明成功运行的概率Software EngineeringS
28、oftware Engineering(1)系统故障率)系统故障率FailurerateTimeInfant mortalityWear outFailure curve for hardwareidealized curvechangeincreased failurerate due to side effectsactual curveSoftware EngineeringSoftware Engineering(2)软件修复与软件有效性)软件修复与软件有效性n有效性函数有效性函数A(t)F系统在系统在t时刻正常运行的概率时刻正常运行的概率n可靠性函数可靠性函数R(t)F系统在系统在0
29、,t时间间隔正常运行的概率时间间隔正常运行的概率A=MTTF/(MTTF+MTTR)MTTF为平均无故障时间,为平均无故障时间,MTTR为平均修为平均修复时间,复时间,A为机器的稳定性为机器的稳定性Software EngineeringSoftware Engineering(3)软件可靠性估算)软件可靠性估算n错误植入模型错误植入模型N:池塘中的鱼尾数:池塘中的鱼尾数Nt:植入的带标记的鱼尾数:植入的带标记的鱼尾数n:捞出的鱼尾数:捞出的鱼尾数nt:捞出的带标记的鱼数:捞出的带标记的鱼数Software EngineeringSoftware Engineering小小 结结 软件评价标准软件评价标准 软件结构软件结构 模块化模块化 模块独立性模块独立性 软件度量软件度量Software EngineeringSoftware Engineering思考题思考题n你认为评价软件好坏有哪些标准?你认为评价软件好坏有哪些标准?n在设计软件结构时应遵循哪些原则?在设计软件结构时应遵循哪些原则?n某某软软件件项项目目如如果果采采用用四四代代语语言言开开发发,LOC度量还有意义吗?为什么?度量还有意义吗?为什么?n一一个个程程序序能能既既正正确确又又不不可可靠靠吗吗?试试说说明明理由。理由。
限制150内