软件度量——基本理论
原⽂来⾃ "现代软件⼯程" 周之英编著 (上)
度量的基本理论
度量就是实际指定数据的进程。这种指定也可被称之为度量的(对实体的⼀种)映射。因此,度量其⾃⾝不是数字⽽是我们所考虑的实体或属性的映射。事实上,度量的理论研究者往往有意放松了这个界限。
假设我们想度量源代码程序的长度这个属性。⼀个可选的度量是把源代码的长度属性定义(或映射)为可执⾏代码的语句数。另外⼀个可选的度量是把源代码的长度属性定义为其在计算机中的存储字节数。对⼀个指定的程序在度量其长度的时候我们可以说它有100⾏可执⾏语句。但是这只是⼀种在我们要定义的问题⾮常清楚明了的情况下的不严格的术语学的说法。如果只有两种可选定义⽅法的话,是可⾏的。但是事实上有很多定义可执⾏源语句的⽅法,在这种情况下,我们是不能简单的说源程序有100⾏可执⾏语句⽽不提及是如何定义的。
为了进⾏度量我们必须知道我们度量的实体是什么以及实体具有那些属性(或特性)。尽管这⼀点很明显,但是在数据收集的过程中我们往往却忽略了这⼀点。
为了对度量加深认识,我们可以对度量进⾏分类:
客观度量:⼀般为定量的度量。
主观度量:⼀般反映为专家意见。
在这些基本度量(直接度量)的基础上,经过计算得到进⼀步的附加的度量(或称推导度量,间接度量等)。
⼀旦我们确定了要度量的属性和度量的⽅法之后,我们就可以开始积累数据了。对积累的数据分析的结果往往可以澄清该属性或得到⼀个新的认识。这继⽽使我们改进和软提⾼度量的准确性。
⼀、直接和间接度量
我们可以直接度量对象的规模⼤⼩、长度等属性⽽不需要参考其它的属性。但是在度量象密度等这样的属性的时候也要度量其它的属性(象长度和⼤⼩等)。为了区分不同的度量我们定义如下:
直接度量:是指属性的度量不依赖于其它属性的度量。
间接度量:是指该属性的度量与⼀个或多个其它属性的度量标准有关。
直接和间接度量是指的属性的度量定义(映射)⽽不是指的属性本⾝。在此我们讨论的主要是直接度量。
这是理解实体及其属性的最⾃然的过程,⽽并不需要先度量⼀些其它的属性。但这并不排除使⽤间接度量将获得更精确的度量。
⼆.度量理论——表⽰法
度量理论的框架是数学化的,由集合、关系、定理和函数组成。其各主要组成部件分述如下:
.关系系统:即⽤获得的对实体深层理解和观察经验来给出关于实体的属性的⼀些定律。这主要表现为实体之间的关系。例如:液体的属性"热"是指液体⽐其它的液体热⼀些,从⽽可得出⼀个⼆元关系:A⽐B热。 ⽽且这个关系是满⾜传递律的。
即若 A⽐B热,B⽐C热;则A⽐C热。
表⽰法则:即使⽤⼀种数学的数字符号系统来表⽰实体之间的关系。例如:我们可以⽤符号">" 表⽰ "….⽐…热"这个关系。那么"A⽐B热"可表⽰为"A>B"。
单⼀法则:表⽰任何两个关于实体或表⽰实体属性的数字的函数是相关的。例如:我们知道"热"的液体是指⽐其它的液体更热⼀些⽽且这个关系是传递的,那么,⼀个单⼀法则的断⾔是:任何两个表⽰热的函数是以⼀种递增的关系相关的。
我们在这⾥讨论了数字系统的表⽰法,但这并不是说我们必须局限于这种特定的实际的数据之中。我们在使⽤⼤量复杂的数据的同时要排除这样⼀种错误的认识,那就是在度量中只有具体的数据是最重要的。在后⾯度量算法的效率的时候我们可以看到只有在我们扔掉了实际数字的限制之后我们才能真正实现对算法的度量。
⽽且,把⼀组实体分类是⼀种特殊形式的度量,我们是希望使⽤各种各样的符号⽽不仅仅是数字来达到这个⽬的的。
⼀般地说,软件度量的尺度可以不同:
-分类(列名):⽆次序概念。例如:错误位于"⽤户界⾯,通信,数据库,…"。
-次序:⽆距离概念。例如:⽤户满意程度为"⾮常满意,满意,⼀般,不满意,很不满意"。
-区间:有距离。例如:项⽬A超⽀⼆万元;项⽬B节余⼗万元。
-⽐例:例如:A的重量是B的两倍。
三、度量和软件度量
在软件度量中,度量主要⽤于以下⼏个⽅⾯:
(1).从产品、过程、和资源中得来的数字。如:功能点数或代码⾏(LOC〕/每⼈每⽉等。
(2).度量的分类。
(3).可识别的属性。
(4).⼀个理论或数据驱动的模型,其描述的是⼀个依赖于独⽴变量(如⼤⼩)函数的可变变量;这种模型通常是⽤于预测的⽬的的。
四、软件度量的框架
1、度量对象:
从前⾯的论述我们知道任何软件度量活动最想做的是识别我们想度量的实体和实体  的属性。在软件中我们想度量其属性的实体可以分为三类,他们是:
1.过程。是与软件相关的⼀些活动。这些活动都有⼀个时间因素。
2.产品。是指在软件开发过程中产⽣的各种中间产品、发布的资料和⽂档        等 。
3.资源。是指在开发过程中输⼊给过程的东西。
做个app的费用大概多少
在软件中想度量或预测的属性都是上述三种实体之⼀的属性。同时我们有必要区分⼀下外部属性和内部属性:
内部属性:是能够纯粹⽤过程或产品或资源其⾃⾝来度量的属性;
外部属性:是指由过程或产品或资源及与其相关的环境⼀起共同才能度量        的属性。
下表B-1代表不完全的⼀些度量属性:
实体  属性
内部属性    外部属性
产品  规格说明书    规模、可复⽤性、模块化、冗余、功能、语法正确… 可理解性 、可维护性…
设计  规模、可复⽤性、模块化、耦合、聚合、功能…    质量、复杂性、可维护性
编码  规模、可复⽤性、模块化、耦合、功能、算法复杂性、控制流、结构性… 可靠性、可⽤性、可维护性…
测试数据    规模、覆盖度… 质量…
过程  构造规格说明书 时间、⼯作量、需求变动数、事件(故障与变化)… 质量、费⽤、稳定性…
详细设计 时间、⼯作量、在规格说明书中到的缺陷数…    费⽤、性能/价格⽐…
测试  时间、⼯作量、到的缺陷数    费⽤、性能/价格⽐、稳定性…
资源  ⼈员  年龄、⼯资待遇…    ⽣产率、经验、智⼒…
团队  规模、交流活动⽔平、结构…    ⽣产率、质量…
硬件  价格、速度、内存容量… 可靠性…
软件  价格、规模…  可⽤性、可靠性…
办公地点    ⾯积、温度、照明…    舒适程度、质量…
表B-1分类的软件度量例⼦
外部属性是管理者和软件⽤户通常喜欢加以度量和预测的。例如:软件管理者希望知  道某些过程的费
⽤、效率或者是他开发组的⽣产率;⽽⽤户可能想知道软件系统的可靠性、可⽤性或他们想购买的系统的可安装性。但是,外部属性从其⾃⾝的天性来说是最难以加以度量的。⽽且,对外部属性通常没有达成⼀致的看法;象质量等这种属性太⼀般性以⾄于他们看起来⼏乎毫⽆意义可⾔。于是我们不得不使⽤其它可度量的属性来描述这些属性的定义。例如:有⼈⽤在正式测试(过程的⼀种内部属性)中发现的Bugs的数量来定义软件系统(产品的⼀种外部属性)的质量;这样看来,我们度量外部属性需要使⽤内部属性。
外部属性和内部属性是相关的;同样直接和间接属性也是相关的。从我们的定义中  我们可以看出内部属性是可以直接度量出来的。正如我们在前⾯曾经指出过这并不排除使⽤间接度量⽅法可以获得更精确的度量。需要指出的是,外部属性不能直接加以度量。
2、度量、预测和模型的概念:
在此,有必要区别⼀下度量、预测和模型这⼏个概念。 当我们谈到想进⾏度量的时候,我们是说想评价某个实体已存在的属性。但是,在很多情况下,我们可能也想对实体的某⼀个尚未存在的属性进⾏预测。例如:尽管我们只能在软件可以操作、运⾏之后才能真正对软件的可靠性进⾏估计;但事实上,在我们开发的过程中我们总是试图根据我们对系统的已有的理解来估计其可能的可靠性。
为了更好地区别与度量有关的这⼏个概念,需要给出下⾯这个定义:模型是⼀个实体的抽象表⽰。这个
定义很抽象,存在很多种模型。软件度量感兴趣的模型有以下两种不同类型:
1。是不同产品或过程或资源的抽象表⽰的模型。为了明确的定义度量我们需要使⽤这些模型。这些模型必须针对我们要度量的属性构造。例如:源代码的流程图模型包含有与程序的控制结构有关的属性。值得注意的是即使是定义⼀个象程序源代码的长度这样看起来⾮常简单明了的属性,我们仍需要⼀个正式的程序源代码模型。
2。是不同的实体之间的关系的抽象表⽰的模型。这种模型通常⽤⼀个数学公式表⽰两个或两个以上的属性之间的关系。事实上间接度量使
⽤的就是这种模型。
这⾥举⼀个很简单的例⼦:m = x / a
其中,X是⼀个变量,表⽰的是对源程序代码长度的度量(LOC);⽽M是源程序代码页数的度量,a是⼀个常量。
这样的⼀个模型进⾏估计的程度,与解决⼀个预测问题相反,主要依赖于我们对这个模型的参数的了解程度。在上⾯这个例⼦中,假设在某⼀特定的环境中a为55。如果某⼀已知程序的X也知道;⽤这个公式去计算代码页数时我们并不能说⽤这个间接度量的公式真正解决了⼀个预测问题。但是,如果我们只知
道程序的规格说明书,⽽⼜想知道最后完成时整个程序⼤概有多少页,这时,我们就可以使⽤这个公式来解决这个预测问题。在真正情况下,我们将需要⼀个预测程序,然后根据我们对程序的规格的理解来决定未知的X的值,最后得出M的值。
这个简单的例⼦表明对软件度量中有关的模型很重要的⼀点:模型⾃⼰本⾝是不⾜以  完成所需的预测的。我们也需要⼀些⽅法来给定模型的参数;另外还需要⼀个步骤来解释所得到的结果。LittleWood为此曾给出如下定义:
预测系统是由数学模型,和⼀组对未知参数进⾏预测的步骤,和⼀个解释得到的结果  的步骤组成的。
使⽤相同的模型,如果使⽤的预测步骤不同,得到的结果也将是不同的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。