| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5201 人关注过本帖, 1 人收藏
标题:燃烧敬献:软件工程思想,每日一贴,大家一起学习!
只看楼主 加入收藏
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 
以下是引用ybhnwpu在2006-4-20 23:03:00的发言:
我的本科和研究生一直读的是导航、制导与控制专业,但是毕业后到单位工作,却开始开发软件,是基于C语言的仪器测试软件,刚开始是一头雾水,有任务压在头上,只能拼命了。
现在软件已经开发完了,但是感觉自己还是一个软件专业的门外汉,特别想通过系统的学习,增加自己在软件方面的基础。
想向楼主请教一下,从哪方面下手好一点?

因为我也是正在学习中,请教不不敢当了,我只能说说我自己的看法吧~~

我觉得学软件,要有好的数学基础和逻辑思维(呵呵,大家都知道的东西)其次就要掌握好几门语言,需要精通...其它向工程学的,我觉得就应该多看看那些论文了 ..


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-21 14:46
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

7.2 测试人员的选择

测试需要开发人员参与吗?

测试需要独立的测试小组吗?

测试需要用户参与吗?

让我们先看一看Microsoft公司关于测试的经验教训,再回答上述问题。

7.2.1 Microsoft公司的经验教训

在80年代初期,Microsoft公司的许多软件产品出现了“Bug”。比如,在1981年与IBM PC机一起推出的BASIC软件,用户在用“.1”(或者其他数字)除以10时,就会出错。在FORTRAN软件中也存在破坏数据的“Bug”。由此激起了许多采用Microsoft操作系统的PC厂商的极大不满,而且很多个人用户也纷纷投诉。

Microsoft公司的经理们发觉很有必要引进更好的内部测试与质量控制方法。但是遭到很多程序设计师甚至一些高级经理的坚决反对,他们固执地认为在高校学生、秘书或者外界合作人士的协助下,开发人员可以自己测试产品。在1984年推出Mac机的Multiplan(电子表格软件)之前,Microsoft曾特地请Arthur Anderson咨询公司进行测试。但是外界公司一般没有能力执行全面的软件测试。结果,一种相当厉害的破环数据的“Bug”迫使Microsoft公司为它的2万多名用户免费提供更新版本,代价是每个版本10美元,一共化了20万美元,可谓损失惨重。

痛定思痛后,Microsoft公司的经理们得出一个结论:如果再不成立独立的测试部门,软件产品就不可能达到更高的质量标准。IBM和其它有着成功的软件开发历史的公司便是效法的榜样。但Microsoft公司并不照搬IBM的经验,而是有选择地采用了一些看起来比较先进的方法,如独立的测试小组,自动测试以及为关键性的构件进行代码复查等。Microsoft公司的一位开发部门主管戴夫·穆尔回忆说:“我们清楚不能再让开发部门自己测试了。我们需要有一个单独的小组来设计测试,运行测试,并把测试信息反馈给开发部门。这是一个伟大的转折点。”

但是有了独立的测试小组后,并不等于万事大吉了。自从Microsoft公司在1984年与1986年之间扩大了测试小组后,开发人员开始“变懒”了。他们把代码扔在一边等着测试,忘了唯有开发人员自己才能阻止错误的发生、防患于未来。此时,Microsoft公司历史上第二次大灾难降临了。原定于1986年7月发行的Mac机的Word 3.0,千呼万唤方于1987年2月问世。这套软件竟然有700多处错误,有的错误可以破坏数据甚至摧毁程序。一下子就使Microsoft名声扫地。公司不得不为用户免费提供升级版本,费用超过了100万美元。[Cusumano 1995]

7.2.2 测试人员的分工

从Microsoft公司的教训中可知,公司内部对产品的测试(称为α测试),需要开发人员与独立的测试小组共同参与。开发人员应该执行“白盒”测试,即测试源程序的逻辑结构以及实现细节(“白盒”是指看得见程序的内部结构)。而独立测试小组应该执行“黑盒”测试,即按照规格说明来测试程序是否符合要求(“黑盒”是指看不见程序的内部结构)。比如在测试一个模块时,“白盒”测试方法要对模块的所有代码进行单步跟踪测试。而“黑盒”测试方法只需测试模块的接口是否符合要求,它关心程序的外部表现而不是内部的实现细节。

小型的软件公司可能没有条件设立独立的测试小组,也有可能测试小组人员不多而忙不过来。这时,可以让开发小组的成员相互测试对方的程序。

这里要强调的是,α测试不能依赖于开发人员或者测试小组中的任意一方,必须是双方共同参与。“白盒测试”必须由开发者自己执行,因为别的测试人员无法了解到程序的内部实现细节。而“黑盒测试”必须由独立的测试人员执行,因为开发者难以做到客观、公正。开发者在测试自己的程序时存在一些弊病:

(1)开发者对自己的程序印象深刻,并总以为是正确的(自信是应该的)。倘若在设计时就存在理解错误,或因不良的编程习惯而流下隐患,那么他本人很难发现这类错误。

(2)开发者对程序的功能、接口十分熟悉,他自己几乎不可能因为使用不当而引发错误,这与大众用户的情况不太相似,所以自己测试程序难以具备典型性。

(3)程序设计有如艺术设计,开发者总是喜欢欣赏程序的成功之处,而不愿看到失败之处。让开发者去做“蓄意破坏”的测试,就象杀自己的孩子一样难以接受。即便开发者非常诚实,但“珍爱程序”的心理让他在测试时不知不觉地带入了虚假成份。

软件产品正式发行前,在公司外部邀请一些用户对产品进行测试,称为β测试。β测试的涉及面最广,最能反映用户的真实愿望,但花费的时间最长,不好控制。一般地,软件公司与β测试人员之间有一种互利的协议。即β测试人员无偿地为软件公司作测试,定期递交测试报告,提出批评与建议。而软件公司将向β测试人员免费赠送或者以很大的优惠价格发行软件的正式版本。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-21 14:47
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

7.3 测试的主要内容与常用方法

有一次文学考试,问高尔基是哪国人。一考生乐极而吟:“尔基啊尔基,你若不姓高,我怎知你是中国人。”这是一种瞎猜法。如果这种方法用于软件测试,人累死也测不出什么结果来。

不论是对软件的模块还是整个系统,总有共同的内容要测试,如正确性测试,容错性测试,性能与效率测试,易用性测试,文档测试等。“白盒测试”是指开发人员从程序内部对上述内容进行测试,而“黑盒测试”是指独立的测试人员从程序外部对上述内容进行测试。很多软件工程教材讲述了各种各样的测试方法并例举了不少示例[Pressman 1997] [Sommerville 1992] [杨文龙 1997]。本节简明地讲述常用的测试方法及其道理。

7.3.1 正确性测试

正确性测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。

基本的方法是构造一些合理输入,检查是否得到期望的输出。这是一种枚举方法。倘若枚举空间是无限的,那可惨了,还不如回家种土豆有盼头。测试人员一定要设法减少枚举的次数,否则没好日子过。关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下:

记(A, B)是命题f(x) 的一个等价区间,在(A, B)中任意取x1进行测试。

如果f (x1) 错误,那么f (x) 在整个(A, B)区间都将出错。

如果f (x1) 正确,那么f (x) 在整个(A, B)区间都将正确。

上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。

还有一种有效的测试方法是边界值测试。即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也“喜欢”在边界值处出错。

例如测试 的一段程序。凭直觉等价区间应是(0, 1)和(1, +∞)。可取x=0.5以及x=2.0进行等价测试。再取 x=0以及x=1进行边界值测试。

有一些复杂的程序,我们难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。

在用“白盒测试”方式进行正确性测试时,有个额外的好处:如果测试发现了错误,测试者(开发人员)马上就能修改错误。越早改正错误,付出的代价就越低。所以大多数软件公司要求程序员在写完程序时,马上执行基于单步跟踪的“白盒测试”。

7.3.2 容错性测试

容错性测试是检查软件在异常条件下的行为。容错性好的软件能确保系统不发生无法意料的事故。

比较温柔的容错性测试通常构造一些不合理的输入来引诱软件出错,例如:

(1)输入错误的数据类型,如“猴”年“马”月。

(2)输入定义域之外的数值,上海人常说的“十三点”也算一种。

粗暴一些的容错性测试俗称“大猩猩”测试,除了不能拳打脚踢嘴咬,什么招术都可以使出来。这里我举不出例子,因为我没有对程序粗暴过,并且这辈子也不打算学会粗暴。

7.3.3 性能与效率测试

性能与效率测试主要是测试软件的运行速度和对资源的利用率。有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特。有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。

在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如计算机主频,总线结构和外部设备都可能影响软件的运行速度;若与多个计算机共享资源,软件运行可能慢得像蜗牛爬行。

在获取测试的“相对值”时,我们要确保被测试的几个软件运行于完全一致的环境中。硬件环境的一致性比较容易做到(用同一台计算机即可)。但软件环境的因素较多,除了操作系统,程序设计语言和编译系统对软件的性能也会产生较大的影响。如果是比较几个算法的性能,就要求编程语言和编译器也完全一致。

性能与效率测试中很重要的一项是极限测试,因为很多软件系统会在极限测试中崩溃。例如,连续不停地向服务器发请求,测试服务器是否会陷入死锁状态不能自拔;给程序输入特别大的数据,看看它是否吃得消。

7.3.4 易用性测试

易用性测试没有一个量化的指标,主观性较强。调查表明,当用户不理解软件中的某个特性时,大多数人首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30%的用户会查阅用户手册。[Cusumano 1995]

一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性。

7.3.5 文档测试

文档测试主要检查文档的正确性、完备性和可理解性。好多人甚至不知道文档是软件的一个组成部分。

正确性是指不要把软件的功能和操作写错,也不允许文档内容前后矛盾。

完备性是指文档不可以“虎头蛇尾”,更不许漏掉关键内容。有些学生在证明数学题时,喜欢用“显然”两字蒙混过关。文档中很多内容对开发者可能是“显然”的,但对用户而言不见得都是“显然”的。

文档不可以写成散文、诗歌或者侦探、言情小说,要让大众用户看得懂,能理解。

很多程序员能编写出好程序,却写不出清晰的文档。不要说自己以前语文学得差,现在已没救了,找借口不是办法。没有人天生就能写出好程序,都是练出来的。同理,若第一次写不好文档,就多写几次文档,慢慢地就会写出好文档来。我上大学前不会说普通话,不会写作文,现在我极能说会写,当个秘书或书记已绰绰有余。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-22 10:53
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

7.4 改 错

在软件测试时如果发现了错误,必须请程序员改错,否则测试工作就白干了。

改错是个大悲大喜的过程,一天之内可以让人在悲伤的低谷和喜悦的颠峰之间跌荡起伏。如果改过上万个程序错误,那么少男少女们不必经历失恋的挫折也能变得成熟起来。

我从大三开始真正接受改错的磨练,已记不清楚多少次汗流浃背、湿透板凳。改不了错误时,恨不得撞墙。改了错误时,比女孩子朝我笑笑还开心。

在做本科毕业设计时,一天夜里,一哥们流窜到我的实验室,哈不拢嘴地对我嚷嚷:“你知道什么叫茅塞顿开吗?”
我象白痴似的摇摇头。

他说:“今天我化了十几个小时没能干掉一个错误,刚才我去了厕所五分钟,一切都解决了。”

他还用那没洗过的手拉我,一定要请我吃“肉夹馍”。那得意劲儿仿佛同时谈了两个女朋友。

在本节,我要替程序员们总结关于改错的几点思想方法:

(1)要有勇气。东北有个林场工人,工作勤奋,一人能干几个人的活。前三十年是伐树劳模,受到周总理的接见。忽有一天醒悟过来,觉得自己太对不起森林,决心补救错误。后三十年成了植树劳模,受到朱总理的接见。此大勇也。

程序中的错误只有开发者自己才能找出并改掉。如果因畏惧而拖延,会让你终日心情不定,食无味,睡不香。所以长痛不如短痛,要集中精力对付错误。

(2)不可蛮干。都说急中生智,我不信。我认为大多数人着急了就会蛮干,早把“智”丢到脑后。不仅人如此,动物也如此。

我们经常看到,蜜蜂或者苍蝇想从玻璃窗中飞出,它们会顶着玻璃折腾几个小时,却不晓得从旁边轻轻松松地飞走。我原以为蜜蜂和苍蝇长得太小,视野有限,以致看不见近在咫尺的逃生之窗,所以只好蛮干。可是有一天夜里,有只麻雀飞进我的房间,它的逃生方式竟然与蜜蜂一模一样。我用灯光照着那扇打开的窗户为其引路,并向它打手势,对它说话,均无济于事。它是到天亮后才飞走的,这一宿我俩都没息好。

(3)找出错误的根源。有人问阿凡提:“我肚子痛,应该用什么药?”阿凡提说:“应该用眼药水,因为你眼睛不好,吃了脏东西才肚子痛。”

我们应该运用归纳、推理等方法尽早确定错误的根源。

(4)在改错之后一定要马上进行重新测试,以免引入新的错误。有人在马路上捡到钱包后得意忘形,不料自己却被汽车撞倒。改了一个程序错误固然是喜事,但要防止乐极生悲。更加严格的要求是:不论原有程序是否绝对正确,只要对此程序作过改动(哪怕是微不足道的),都要进行重新测试。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-23 08:20
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

7.5 小 结

优秀的程序员敢于声称自己的代码没有错误,这种自信让人羡慕不已。一个错误自身也许很微小,但是程序存在错误这件事很严重。能否做好测试与改错工作,思想认识和办事态度是最关键的。

程序员应该把测试当成份内之事,不要依赖于外界的“黑盒测试”。“黑盒测试”就象通过提问题来判断一个人是否是个疯子,但无法知道他为什么成了疯子。让程序员对所有的代码执行单步跟踪测试听起来很费时间,但习惯了你就感觉不到有什么不方便。单步跟踪测试将使你以后的日子更轻松。

程序出了错误一定要改错,但是“编写优质无错”的程序才是根本的解决之道。在此,我竭力建议大家阅读Steve Maguire著的《Writing Clean Code : Microsoft Techniques for Developing Bug-free C Programs》(有中文译本,[Maguire 1993])。我深受此书的教诲,获益非浅。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-23 08:21
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

第八章 维护与再生工程

编程大师曾说:“哪怕程序只有三行长,总有一天你也不得不对它维护。”

很多软件产品不是一次性的买卖。比如在电信、金融等领域,有些软件系统要用十几年,对软件进行维护是必不可少的。8.1节将介绍“软件维护的常识”,对维护活动进行分类,并解释为什么维护比较困难。

软件公司的经理们没有哪一个喜欢被维护的费用吓一跳,但软件维护的代价通常是高昂的。7.2节将说明影响维护代价的一些主要技术因素与非技术因素。

如果希望提高已有软件的质量并且提高商业竞争力,却又无法靠维护来实现,只好对已有软件进行全部或者部分的改造,这种活动叫再生工程(Reengineering)。7.3节将解释什么是再生工程,并论述再生工程的三种类型:重构(Restructure)、逆向工程(Reverse Engineering)和前向工程(Forward Engineering)。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-24 17:11
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

8.1 软件维护的常识

对软件而言,“维护”是个不太直观的术语,因为软件产品在重复使用时不会被磨损,并不需要进行像对车辆或电器那样的维护。软件维护是人们对既丰富多彩又会令人心酸的活动的统称。其中丰富多彩的活动是指那些反映客观世界变化、能使软件系统更加完善的修改和扩充工作。令人心酸的活动是指那些永无修止、并且改了旧错却引起新错让人欲哭无泪的工作。

一些学者将软件维护划分为主要的三类:纠错性维护(Corrective maintenance)、适应性维护(Adaptive maintenance)和完善性维护(Perfective maintenance):

(1)纠错性维护。由于前期的测试不可能揭露软件系统中所有替在的错误,用户在使用软件时仍将会遇到错误,诊断和改正这些错误的过程称为纠错性维护。

(2)适应性维护。由于新的硬件设备不断推出,操作系统和编译系统也不断地升级,为了使软件能适应新的环境而引起的程序修改和扩充活动称为适应性维护。

(3)完善性维护。在软件的正常使用过程中,用户还会不断提出新的需求。为了满足用户新的需求而增加软件功能的活动称为完善性维护。

Lientz 和Swanson调查发现(1980年),完善性维护约占65%,适应性维护约占18%,纠错性维护约占17%[Sommerville 1992]。上述调查已是20年前的事了,我们不必太关心具体的比例,心里有数即可。

以下一些因素将导致维护工作变得困难:

(1)软件人员经常流动,当需要对某些程序进行维护时,可能已找不到原来的开发人员。只好让新手去“攻读”那些程序。

(2)人们一般难以读懂他人的程序。在勉强接受这类任务时,心里不免嘀咕:“我又不是他肚子里的虫子,怎么知道他如何编程。”

(3)当没有文档或者文档很差时,你简直不知道如何下手。

(4)很多程序在设计时没有考虑到将来要改动,程序之间相互交织,触一而牵百。即使有很好的文档,你也不敢轻举妄动,否则你有可能陷进错误堆里。

(5)如果软件发行了多个版本,要追踪软件的演化非常困难。

(6)维护将会产生不良的副作用,不论是修改代码、数据或文档,都有可能产生新的错误。

(7)维护工作毫无吸引力。高水平的程序员自然不愿主动去做,而公司也舍不得让高水平的程序员去做。带着低沉情绪的低水平的程序员只会把维护工作搞得一塌糊涂。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-24 17:11
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

8.2 维护的代价及其主要因素

软件维护是既破财又费神的工作。看得见的代价是那些为了维护而投入的人力与财力。而看不见的维护代价则更加高昂,我们称之为“机会成本”,即为了得到某种东西所必须放弃的东西[Mankiw 1999]。把很多程序员和其它资源用于维护工作,必然会耽误新产品的开发甚至会丧失机遇,这种代价是无法估量的。

影响维护代价的非技术因素主要有:

(1)应用域的复杂性。如果应用域问题已被很好地理解,需求分析工作比较完善,那么维护代价就较低。反之维护代价就较高。

(2)开发人员的稳定性。如果某些程序的开发者还在,让他们对自己的程序进行维护,那么代价就较低。如果原来的开发者已经不在,只好让新手来维护陌生的程序,那么代价就较高。

(3)软件的生命期。越是早期的程序越难维护,你很难想像十年前的程序是多么的落后(设计思想与开发工具都落后)。一般地,软件的生命期越长,维护代价就越高。生命期越短,维护代价就越低。

(4)商业操作模式变化对软件的影响。比如财务软件,对财务制度的变化很敏感。财务制度一变动,财务软件就必须修改。一般地,商业操作模式变化越频繁,相应软件的维护代价就越高。

影响维护代价的技术因素主要有:

(1)软件对运行环境的依赖性。由于硬件以及操作系统更新很快,使得对运行环境依赖性很强的应用软件也要不停地更新,维护代价就高。

(2)编程语言。虽然低级语言比高级语言具有更好的运行速度,但是低级语言比高级语言难以理解。用高级语言编写的程序比用低级语言编写的程序的维护代价要低得多(并且生产率高得多)。一般地,商业应用软件大多采用高级语言。比如,开发一套Windows环境下的信息管理系统,用户大多采用Visual Basic、Delphi或Power Builder来编程,用Visual C++的就少些,没有人会采用汇编语言。

(3)编程风格。良好的编程风格意味着良好的可理解性,可以降低维护的代价。

(4)测试与改错工作。如果测试与改错工作做得好,后期的维护代价就能降低。反之维护代价就升高。

(5)文档的质量。清晰、正确和完备的文档能降低维护的代价。低质量的文档将增加维护的代价(错误百出的文档还不如没有文档)。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-24 17:11
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

8.3 再生工程

再生工程主要出于如下愿望:(1)在商业上要提高产品的竞争力;(2)在技术上要提高产品的质量。但这种愿望无法靠软件的维护来实现,因为:(1)软件的可维护性可能极差,实在不值得去做;(2)即使软件的可维护性比较好,但也只是治表不治本。再生工程干脆对已有软件进行全部或部分的改造,赋予软件新的活力。

在对待一个不良之徒时,可以进行思想教育并给予他关心和帮助,这种方式类似于“软件维护”;也可以把他关进监狱,送去劳改,这种方式相当于软件的“再生工程”;如果此人坏透顶了,就毙掉算了。

再生工程与维护的共同之处是没有抛弃原有的软件。如果把维护比作“修修补补”,那么再生工程就算是“痛改前非”。再生工程并不见得一定比维护的代价要高,但再生工程在将来获取的利益却要比通过维护得到的多。

再生工程主要有三种类型:重构、逆向工程和前向工程。

8.3.1 重构

重构一般是指通过修改代码或数据以使软件符合新的要求。重构通常并不推翻原有软件的体系结构,主要是改造一些模块和数据结构。重构的一些好处如下:

(1)使软件的质量更高,或使软件顺应新的潮流(标准)。

(2)使软件的后续(升级)版本的生产率更高。

(3)降低后期的维护代价。

要注意的是,在代码重构和数据重构之后,一定要重构相应的文档。

8.3.2 逆向工程

逆向工程来源于硬件世界。硬件厂商总想弄到竞争对手产品的设计和制造“奥秘”。但是又得不到现成的档案,只好拆卸对手的产品并进行分析,企图从中获取有价值的东西。我的很多同学从事集成电路设计工作,他们经常解剖国外的集成电路,甚至不作分析就原封不动地复制该电路的版图,然后投入生产,并美其名曰“反向设计”(Reverse Design)。

软件的逆向工程在道理上与硬件的相似。但在很多时候,软件的逆向工程并不是针对竞争对手的,而是针对自己公司多年前的产品。期望从老产品中提取系统设计、需求说明等有价值的信息。

8.3.3 前向工程

前向工程也称预防性维护,由Miller倡导。他把这个术语解释成“为了明天的需要,把今天的方法应用到昨天的系统上”。[Pressman 1999]

乍看起来,主动去改造一个目前运行得正常的软件系统简直就是“惹事生非”。但是软件技术发展如此迅速,与其等待一个有价值的产品逐渐老死,还不如主动去更新,以获取更大的收益。其道理就同打预防性针一样。所以,预防性维护是“吃小亏占大便宜”的事。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-24 17:11
燃燒
Rank: 9Rank: 9Rank: 9
来 自:磁盘驱动器
等 级:贵宾
威 望:56
帖 子:9878
专家分:2
注 册:2006-4-20
收藏
得分:0 

8.4 小 结

大学科研机构里的软件维护工作恐怕是做得最差的了。几乎每一批新的研究生都会把毕业生留下的软件臭骂一通,然后全部推到重做。到他毕业该走时,就轮到别人骂他的工作了。如此轮回,最终没有什么成果留下。

如果希望软件系统能活下,必须要对它进行维护。如果希望软件系统有效益,则必须设法降低维护的代价。


Thinking in life, thinking in love, thinking in dream,thinking in you !
月光倾泻,岁月沉沦
[url=http://58189.]http://58189.[/url]
2006-04-24 17:11
快速回复:燃烧敬献:软件工程思想,每日一贴,大家一起学习!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018476 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved