软件的质量特性---《代码大全2》第20章

    “调查显示,软件产品的业界平均生产效率大约是每人每天10到50行的最终交付代码(包括所有非编码开支)。敲出10到50行的代码也就是几分钟的事情,那么每天剩下的时间都到哪里去了?

    这一生产数据显得如此低下,部分原因是这样的业界平均值把非程序员所花费的时间也纳入计算里了。包括测试人员,项目经理,行政支持的时间都包含在里面。还有需求开发和框架设计等种种非编码工作也被考虑了进去。但是,这都不是时间花费如此惊人的主要原因。

    绝大多数项目的最大规模的一种活动就是调试以及修正那些无法正常工作的代码。调试和与此相关的重构或者其他返工工作,在传统的不成熟的软件开发周期当中可能消耗大概50%的时间。只要避免引入错误,就可以减少调试时间,从而提高生产力!因此,改善产品的质量,是缩短开发周期的最佳方法,由此将大大减少花费在调试和软件返工的时间。

    NASA软件工程实验室在分析了总计400人年工作量的50个开发项目的300万行代码后发现,更多的质量保证工作能降低错误率,却不会增加开发总成本!

IBM的一个研究也得到了类似结论:缺陷最少的软件项目的开发时间最短,并拥有最高的开发生产效率!。。消除软件缺陷实际上是最昂贵且最好使的一种软件工作!另有相关研究表明了同样的结论:构建高质量软件的代码,并不会增加过多的开发时间,长远而言反而大大提高生产效率。”

    ”而现实中,快速而糟糕的编程几乎已经成为普遍现象,质量却常常被认为是次要目标。在有些组织中,有些胡乱堆砌劣质代码并能快速“完成”的程序员,甚至比那些编写完善程序,并能保证程序正常工作的程序员获得更高的报酬。长久而言,这无疑是弊大于利的。所以,组织本身必须向程序员们说明,应当把质量放在第一位,并把质量保证工作明确,如此一来程序员就会依此做出积极的响应。”


    “既然软件质量如此重要,那么应该怎样衡量软件质量呢?请看如下软件质量特性。

    软件同时拥有外在的和内在的质量特性。

外在特性指的是该产品的用户所能感受到的部分,包括如下内容:

1. 正确性  指系统规范,设计和实现方面的错误的稀少程度

2. 可用性  指用户学习和使用一个系统的容易程度

3. 效率  指软件是否尽可能少地占用系统资源,包括内存和执行时间

4. 可靠性  指在指定的必需条件下,一个系统完成所需要功能的能力-应该有很长的平均无故障时间

5. 完整性  指系统组织在程序或者书籍进行未经验证或者不正确的访问的能力。这里的完整性除了包括限制未经授权的用户的访问外,还包括确保书籍能够正确访问。例如那些保存着并行数据的表格能够正确地进行修改,确保日期字段一定是有效日期等等。

6. 适应性  指为特定的应用或者环境设计的系统,在不做修改的情况下,能够在其他应用或者环境中使用的范围。

7. 精确性  指对于一个已经开发出的系统,输出结果的误差程度,尤其在输出的是数量值的时候。精确性和正确性的不同在于,前者是用来判断系统完成工作的优劣程度,儿后者则是判断系统是否被正确地开发出来。

8. 健壮性  指系统在接收无效输入或者处理压力环境是继续正常运行的能力。


    以上这些特性,有一部分互相重叠,但它们都有不同的含义,并且在不同的场合下,重要性也有所不同。

    质量的外在特性是用户关心的唯一软件特性。用户只会关心软件是否容易使用儿不会关心对于程序员来说修改起来是否容易。他们关心软件是否能正确运行而不会关心代码是否可读,或者是否有良好的结构。


    而程序员除了关心软件质量的外在特性之外,还要关心它的内在特性:

1. 可维护性  指是否能够很容易对系统进行修改,改变或者增加功能,提高性能,以及修正缺陷。

2. 灵活性  指假如一个系统是为了特定用途或者特定环境而设计的,那么当该系统被用于其他目的或环境的时候,需要对系统做修改的程度。

3. 可移植性  指为了在原来设计的特定环境下运行,对系统所进行修改的难易程度。

4. 可重用性  指系统的某些部分可被应用到其他系统中的程度,以及此项工作的难易程度。

5. 可读性  指阅读并理解系统代码的难易程度,尤其实在细节语句的层次上。

6. 可测试性  指你可以进行何种程度的单元测试或者系统测试,以及在何种程度上验证系统是否符合需求。

7. 可理解性  指在系统组织和细节语句的层次上理解整个系统的难易程度。与可读性相比,可理解性对系统提出了跟高的内在一致性要求。


    同外在质量特性相仿,一些内在质量特性之间也是有所重叠的,同样,它们中的每一个在特定场合有着不同的重要性。

    要让所有的特性都表现得建善尽美是绝无可能的。需要根据一组相互竞争的目标寻找出一条优化的解决方案。下图显示了关注某些外在特性会如何影响另外一些特性。软件质量的内在特性之间也存在类似的相互关系。

软件的质量特性---《代码大全2》第20章_第1张图片

    图中有趣的是:关注某一个特性并非意味着必须牺牲另一个特性。有时一个特性会对另一个特性有所损害。有时候二者相互促进,而有时它们毫不相干。

    图中所示的是一些质量特性之间的典型关系。在任何一个项目中,两个特性之间的关系可能会与典型关系不同。思考软件的特定质量目标,以及每对目标的相互关系,这将是很有意义的一件事情。”

    

    

你可能感兴趣的:(软件的质量特性---《代码大全2》第20章)