高质量软件开发之道

2019-03-16 13:08

第1章 高质量软件开发之道 .............................................. 0

1.1软件质量基本概念 ........................................................................... 错误!未定义书签。 1.1.1 如何理解软件的质量 ............................................................... 错误!未定义书签。 1.2.2 提高软件质量的基本方法 ....................................................... 错误!未定义书签。 1.2.3 “零缺陷”理念 ......................................................................................................... 1 1.2 细说软件质量属性 .......................................................................... 错误!未定义书签。 1.2.1 正确性 ...................................................................................... 错误!未定义书签。 1.2.2 健壮性 ...................................................................................... 错误!未定义书签。 1.2.3 可靠性 ...................................................................................... 错误!未定义书签。 1.2.4 性能 .......................................................................................... 错误!未定义书签。 1.2.5 易用性 ...................................................................................... 错误!未定义书签。 1.2.6 清晰性 ...................................................................................... 错误!未定义书签。 1.2.7 安全性 ...................................................................................... 错误!未定义书签。 1.2.8 可扩展性 .................................................................................. 错误!未定义书签。 1.2.9 兼容性 ...................................................................................... 错误!未定义书签。 1.2.10 可移植性 ................................................................................ 错误!未定义书签。 1.3 人们关注的不仅是质量 ................................................................................................... 1 1.3.1 质量、生产率和成本之间的关系 ............................................................................. 2 1.3.2 软件过程改进基本概念 ........................................................... 错误!未定义书签。 1.4 高质量软件开发的基本方法 ........................................................................................... 3 1.4.1 建立软件过程规范 ..................................................................................................... 3 1.4.2 复用 ............................................................................................................................ 6 1.4.3 分而治之 .................................................................................................................... 7 1.4.4 优化与折衷 .............................................................................. 错误!未定义书签。 1.4.5 技术评审 .................................................................................. 错误!未定义书签。 1.4.6 测试 .......................................................................................... 错误!未定义书签。 1.4.7 质量保证 .................................................................................................................... 8 1.4.8 改错 ............................................................................................................................ 9 1.6 关于软件开发的一些常识和思考.................................................................................. 11 1.6.1 有最好的编程语言吗 ............................................................................................... 11 1.6.2 编程是一门艺术吗 ................................................................................................... 11 1.6.3 编程时应该多使用技巧吗 ....................................................................................... 11 1.6.4 换更快的计算机还是换更快的算法........................................................................ 12 1.6.5 错误是否应该分等级 ............................................................................................... 12 1.6.6 一些错误的观念 ....................................................................................................... 12

0

第1章 高质量软件开发之道

本章讲述高质量软件开发的道理。

为了深入理解软件质量的概念,本章阐述了十个重要的软件质量因素,即正确性、

健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性。并介绍了消除软件缺陷的基本方法。

人们开发软件产品的目的是赚钱。为了获得更多的利润,人们希望软件开发工作“做得好、做得快并且少花钱”,所以软件质量并不是人们唯一关心的东西。本章论述了“质量、生产率、成本”之间的关系,并给出了能够“提高质量、提高生产率并且降低成本”的软件开发方法。

1.2.3 “零缺陷”理念

质量的最高境界是什么?是尽善尽美,即“零缺陷”。

“零缺陷”理念来源于国际上一些著名的硬件厂商。尽管软件的开发与硬件生产有人在做一件事情时,由于存在很多不确定的因素,一般不可能100% 地达到目标。

很大的区别,但我们仍可以借鉴,从中得到启迪。

假设平常人做事能完成目标的80%。如果某个人的目标是100分,那么他最终成绩可达80分;如果某个人的目标只是60分,那么他最终成绩只有48分。我们在考场上身经百战,很清楚那些只想混及格的学生通常都不会及格。即使学习好的学生也常有失误,因而捶胸顿足。

做一个项目通常需要多个人的协作。假设某系统的总质量是十个开发人员的工作质量之积,记最高值为1.0,最低值为0。如果每个人的质量目标是0.95,那么十个人的累积质量不会超过0.598。如果每个人的质量目标是0.9,那么十个人的累积质量不会超过0.35。只有每个人都做到1.0,系统总质量才会是1.0。只要其中一人的工作质量是0,那么系统总质量也成了0。因系统之中的一个缺陷而导致机毁人亡的事件已不罕见。

上述比喻虽然严厉了一些,但从严要求只有好处没有坏处。如果不严以律已,人的堕落就很快。如果没有“零缺陷”的质量理念,也许缺陷就会成堆。

从理念到行动还是有一定距离的,企业在开发产品时应当根据自身实力和用户的期望值来设定可以实现的质量目标。过低的质量目标会毁坏企业的声誉,而过高的质量目标也有可能导致成本过高而拖累企业(请参见本章1.3节)。

1.3 人们关注的不仅是质量

企业开发产品的目的是赚钱,为了使利润极大化,人们希望软件开发工作“做得好、做得快并且少花钱”。用软件工程的术语来讲,即“提高质量、提高生产率并且降低成本”。古代哲学家曾为“鱼和熊掌不可得兼”的问题费尽心思,我们现在却梦想鱼、熊掌、美

1

酒三者兼得,现代人的欲望真是无止境啊。

让我们先谈谈质量、生产率和成本之间的关系。

1.3.1 质量、生产率和成本之间的关系

质量无疑是客户最关心的问题。客户即使不图物美价廉,也要求货真价实。软件开

发商必须满足客户对质量的要求(不论是写在合同上的还是约定俗成的),否则做不成买卖。现在就连做盗版光盘生意的人也讲究质量,如果盘片不好,是可以退货的。高质量既是软件开发人员的技术追求,又是职业道德的要求。

在关注质量的同时,软件开发商又期望生产率能高些并且成本能低些。老板和员工们谁不想用更少的时间赚更多的钱!

质量与生产率之间存在相辅相成的关系。高生产率必须以质量合格为前提。如果质量不合格,软件产品要么卖不出去,要么卖出去了再赔偿客户的损失。这种情况下“高生产率”变得毫无意义。别看开发商和客户双方的代表能在餐桌上谈笑风生,一旦出了质量问题,那就不会很亲热了。从短期效益看,追求高质量可能会延长软件开发时间,一定程度上降低了生产率。从长期效益看,追求高质量将使软件开发过程更加成熟和规范化。日积月累,当开发过程成熟到一定地步后,必将大大降低软件的测试和改错的代价,缩短产品的开发周期,实质上是提高了生产率,同时又获得了很好的信誉。所以质量与生产率之间不存在根本的对立。

提高质量与生产率需要一个过程,企业不可操之过切。一般地,软件过程能力比较低的企业(例如低于CMM 2级),应该将质量放在第一位,生产率放在第二位。只有这样才可能持久地提高质量与生产率。(“能力成熟度模型CMM”将在后面解释)

如果一个企业的软件过程能力低于CMM 2级,表明其开发能力与管理能力还很薄弱。就其目前的实力而言,无论下多大的决心去做,都不可能一开始就把质量与生产率改善得一样好。并不是我们刻意贬低生产率的“地位”,是公司的现实情况要求在质量与生产率之间分个“轻重缓急”。由于人们天生就有“急功近利”的倾向,如果公司领导人认可“生产率第一、质量第二”,那么员工们做着做着必定会回到混乱的局面。这样的教训实在是太多了!老话说得好:磨刀不误砍柴功。用它类比上述理念最合适不过了。

俗话说“一分价钱一分货”,人们买东西的时候大多认可“质量越好价格就越高”。除了垄断性的产品外,一般来说成本是影响价格的主要因素。

对于软件开发而言,质量与成本之间有什么关系?高质量必然会导致高成本吗? 经验表明,如果软件的“高质量”是“修补”出来的,毫无疑问会导致低生产率和高成本。如果能研制出某些好方法,将高质量与高生产率内建于开发过程之中,那么就能自然地能降低开发成本,这是软件过程改进的目标。

要提醒大家的是,大公司与小公司对成本的关注程度是不尽相似的。

首先谈一下“市场价”(Marketing Price)与“成本价”(Cost Price)的概念。在某

2

个领域,当市场上只出现尚未形成竞争格局的一个或几个产品时,产品价格基本上是由厂商自己制定,称为“市场价”。由于缺乏竞争,无论成本多高,总能获得高额利润。电影《大腕》里那个搞房地产的精神病人说“不求最好,但求最贵”,真是实话实说。

当产品之间形成竞争时,就会出现“杀价”现象。由于各家产品的功能、质量旗鼓相当,竞争实质上是在拼成本。谁的成本低,谁就有利可图。这时的产品价格叫做“成本价”。

中国的彩电业是一个活生生的例子。若干年前彩电价格极高,彩电远离百姓人家,一部分人即使买得起也买不到。如今连超市里都充斥着各种品牌的彩电,价格战打得呜呼哀哉,把厂商逼到“微利”的地步。现在工薪阶层人士很少有买不起彩电的。商场里TOTO品牌的马桶价格为2000~3000元,比同体积的国产纯平彩电还贵,并且利润高得多。唉,我们坐在这样的马桶上真的要为民族工业忧心忡忡哪。

由于“市场价”与“成本价”的差价十分悬殊,IT行业的大公司都想吃“市场价”这块肥肉。大公司的资金雄厚,销售力量强,只要能抢先推出产品,就不愁卖不出去。怎样才能达到目的呢?通常有两种方式。

一种方式是从别处购买快要成形的产品,改头换面,贴上大公司的标签就可以上市销售。所以IT行业的“公司收购”特别盛行。如果Cisco公司的网络产品全部让原班人马来开发,它很难能够那么快就发展成为网络业的霸主!

另一种方式是自行开发新产品,让公司的研发队伍加班加点地干活。这么辛苦是值得的,产品成功会让员工们有很大的成就感。

无论通过哪种方式抢先推出产品,前提条件都要求产品的质量合格。如果产品因质量不合格而被市场拒绝,那么损失的不仅仅是成本,更惨重的是失去机会和信誉。象Intel这样了不起的公司也会吃败仗。每当Intel公司的CPU芯片出现缺陷时,就会骂声一片。Intel公司不得不大量回收芯片并向用户道歉,此时竞争对手如AMD公司就会乘虚而入,抢走象IBM、Compaq这些大客户的部分定单。

在信息高度发达的社会里,你能想得到的产品别人也能想得到。只有少数大公司能够享受到“市场价”的利益,但是好景不会太长。大多数公司在大部分时间里开发的是“成本价”的产品。所以树立“降低开发成本”的理念仍然十分重要。

1.4 高质量软件开发的基本方法

1.4.1 建立软件过程规范

人们意识到,若想顺利开发出高质量的软件产品,必须有条理地组织技术开发活动和项目管理活动。我们把这些活动的组织形式称为过程模型。软件企业应当根据产品的特征,建立一整套在企业范围内通用的软件过程模型及规范,并形成制度。这样开发人员与管理人员就可以依照过程规范有条不紊地开展工作。

我们曾与国内很多研发人员和各级经理交流过,大家都对软件开发的混乱局面表示了不满和无奈。尽管“土匪游击队”的开发模式到处可见,但是没有人真的喜欢混乱。“规范化”是区别“正规军”和“土匪游击队”的根本标志。大家无不渴望以规范化的

3

方式开发产品。这是现状、是需求、也是希望。

对软件开发模型的研究兴起于60年代末70年代初,典型成果是1970年提出的瀑布模型。人们研制了很多的软件开发模型,常见的有“瀑布模型”、“喷泉模型”、“增量模型”,“快速原型模型”、“螺旋模型”、“迭代模型”等。

这么多软件开发模型,企业应该如何选择并应用呢?

企业在选择软件开发模型时,不要太在乎学术上的“先进”与“落后”,正如有才华的人并不一定要出自名牌大学或拥有高学历那样。关键是看该模型能否有效地帮助企业顺利地开发出软件产品,并且要考虑员工们使用起来是否方便。简而言之,就是考察模型是否“实用、好用”。

最早出现的软件开发模型是瀑布模型。它太理想化、太单纯,看起来已经落后于现代的软件开发模式。如今瀑布模型几乎被学术界抛弃,偶而被人提起,都属于被贬对象,未被留一丝惋惜。说它如何如何地差,为的是说明新模型是怎样怎样地好。

然而企业界不同于学术界,我认为瀑布模型对企业太有价值了,我要为它声辩,恢复它应有的名誉。瀑布模型的精髓是“线性顺序”地开发软件。我们应该认识到“线性化”是人们最容易掌握并能熟练应用的思想方法。当人们碰到一个复杂的“非线性”问题时,总是千方百计地将其分解或转化为一系列简单的线性问题,然后逐个解决。一个软件系统的整体可能是复杂的,而细分后的子程序总是简单的,可以用“线性化”的方式来实现,否则干活就太累了。

让我们引用Albert Einstein的话作为信条——“任何事物都应该尽可能地简洁”。“线性”是一种简洁,简洁就是美。当我们领会了“线性”的精神,就不要再呆板地套用“线性”的外表,而应该用活它。例如增量模型实质就是分段的线性模型。螺旋模型则是迭代的弯曲了的线性模型。在其它模型中大都能够找到“线性”的影子。

软件开发模型只关注技术开发活动,并不考虑项目管理,这对开发产品而言是不够的,所以开发模型只是软件过程模型的一部分。奇怪的是,我迄今为止尚未找到论述软件过程模型的软件工程书籍。我就自己创作了一个基于CMMI 3级的软件过程模型,称为“精简并行过程”(Simplified Parallel Process, SPP)。

SPP模型如图1-2所示。“精简并行过程”的含义是:

(1)对CMMI 3级以内的关键过程域以及关键实践作了“精简”处理; (2)项目管理过程、技术开发过程和支撑过程“并行”开展。

瀑布模型是如此的简洁,所有的软件开发人员天生就能学会(如果学不会,那他就别干软件这一行了)。所以瀑布模型特别适合于企业,请大家别轻易贬低它。

4


高质量软件开发之道.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018部编版二年级语文下册第3单元-达标测试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: