软件工程思想的重要性

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件工程思想的重要性

在谈软件工程的重要性前,我先说说软件工程的思想。软件工程主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总结。软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会,关键在于运用。我们不可以把软件工程方法看成是诸葛亮的锦囊妙计─—在出了问题后才打开看看,而应该事先掌握,预料将要出现的问题,控制每个实践环节,并防患于未然。研究软件工程永远做不到理论家那么潇洒:定理证明了,就完事。

软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。质量是软件需求方最关心的问题,用户即使不图物美价廉,也要求个货真价实。生产率是软件供应方最关心的问题,老板和员工都想用更少的时间挣更多的钱。质量与生产率之间有着内在的联系,高生产率必须以质量合格为前提。如果质量不合格,对供需双方都是坏事情。从短期效益看,追求高质量会延长软件开发时间并且增大费用,似乎降低了生产率。从长期效益看,高质量将保证软件开发的全过程更加规范流畅,大大降低了软件的维护代价,实质上是提高了生产率,同时可获得很好的信誉。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。软件的质量因素很多,如正确性,性能、可靠性、容错性、易用性、灵活性、可扩充性、可理解性、可维护性等等。有些因素相互重叠,有些则相抵触,真要提高质量可不容易啊!软件工程的主要环节有:人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试、维护等。

最早出现的软件工程模型是线性模型(又称瀑布模型)。线性模型太理想化,太单纯,已不再适合现代的软件开发模式,几乎被业界抛弃。偶而被人提起,都属于被贬对象,未被留一丝惋惜。但我们应该认识到,“线性”是人们最容易掌握并能熟练应用的思想方法。当人们碰到一个复杂的“非线性”问题时,总是千方百计地将其分解或转化为一系列简单的线性问题,然后逐个解决。一个软件系统的整体可能是复杂的,而单个子程序总是简单的,可以用线性的方式来实现,否则干活就太累了。线性是一种简洁,简洁就是美。当我们领会了线性的精神,就不要再呆板地套用线性模型的外表,而应该用活它。人们都有自己的世界观和方法论,能自然而然地运用于生活和工作中。同样,程序员脑子里的软件工程观念会无形地支配其怎么去做事情。软件工程三十年的发展,已经积累了相当多的方法,但这些方法不是严密的理论。实践人员不应该教条地套用方法,更重要的是学会“选择合适的方法”和“产生新方法”。有谋略才会有好的战术。几千年前,我们的祖先就在打闹之际写下了很多心得体会,被现代人很好地运用于工业和商业。

下面我就结合一些实际生活中的例子来从几个方面谈谈软件工程的应用,进而说明软件工程在计算机领域的重要性。

著名的3D游戏软件Quake,能够在PC机上实时地绘制高度真实感的复杂场景。Quake 的开发者能把很多成熟的图形技术发挥到极致,例如把Bresenham画线、多边形裁剪、树遍历等算法的速度提高近一个数量级。我第一次看到Quake时不仅感到震动,而且深受打击。

这个PC游戏软件的技术水平已经远胜于我所见识到的国内领先的图形学相关科研成果(我为此查过了许多资料已经证实了这一点)。这对我们日益盛行的点到完止的研发工作真是莫大的讽刺。所以当我们开发的软件表现出很多不可救药的病症时,不要怨机器差。真的是我们自己没有把工作做好,写不好字却嫌笔钝。3D动画软件的瓶颈通常是速度,但如果为了提高速度而在程序中取消光照明计算,那么场景就会丧失真实感,3D动画也就不再有意义了。为此我们可以运用软件工程中的一些结构优化思想来解决这些矛盾。人都有惰性,如果允许滥用折衷的话,那么一当碰到困难,人们就会用拆东墙补西墙的方式去折衷,不再下苦功去做有意义的优化。所以我们有必要为折衷制定严正的立场:在保证其它因素不差的前提下,使某些因素变得更好。3D游戏软件Quake中为了提高游戏的速度,又不使光照效果变弱在游戏软件的整体结构上下了很大的功夫。像显示角度上,虽然每一个游戏都有它自己不同的显示视角,但是通常可以归纳为以下几类。象Command & Conquer 和Starcraft 这样的游戏是斜45度俯视的角度, Quake 是第一人称的视角, Civilization则是概览地图的视角. 每一个游戏都有至少一种显示的视角。象在NFS3中,玩家在开车时既可以以身临其境的第一人称视角操作, 也可以以第三人称的尾随视角来操作.而在回放时, 更是以多种摄像的角度来表现,大大丰富了玩家的视觉感觉. 作为一个设计者,你必须决定游戏以什么样的视角来展现给你的玩家。由此在设计是作者在光线照明,游戏声音上均采用了折衷的方法,从而在整体上给人以极其赏心悦目的感觉。这一点上很是符合软件工程上的设计优化的思想。游戏的速度即是软件运行的时间,在软件工程中:在不考虑时间因素的前提下开发并精化软件结构;在详细设计阶段选出最耗时间的那些模块,仔细的设计它们的处理过程(算发),以求提高效率;使用高级程序设计语言编写程序;在软件中孤立出那些大量占用处理机资源的模块;必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。这些均是在编写软件时时间所要起的作用。即遵守了一句格言:“先使它能工作,然后再使它快起来。”其实我并不是要说明软件工程的某个方面的重要性,而以某个方面来说明软件工程整体的重要性。

再就软件工程的可行性分析,软件的项目管理和模块设计说说例子吧。

谈到软件产业,不能不提及比尔·盖茨与Microsoft公司。因为比尔·盖茨创建了Microsoft 公司并成为世界首富的事实,使得无数从事软件工作的人们心存同样的梦想。有太多人急着想做中国的比尔盖茨。有个年青人发明了一种汉字输入法,便在媒体上放言欲覆盖比尔·盖茨。近几年来,一批Internet英雄企业如Yahoo、Netscape兴起。尤如打破了秦始皇一统的天下,重返春秋战国时代。让软件人员走出了Microsoft的阴影,看到了阳光灿烂的软件世界。于是各色各样小不点儿的软件公司在国内遍地开花。

打破水缸的小孩子很多,但并不见得就会有司马光的业绩。由于“经济、技术、社会环境、人的因素存在差异,有些事情美国人能做成,我们模仿着做未必就能做得成功。虽然“星星之火、可以燎原”,但我们的国力薄弱,实在容不得把有限的火种扔到不毛之地。所以要进行可行性分析,如果不可行,就不要急着去做。

我的小舅舅从本科三年级开始编写图形程序,一见钟情后便如痴如醉,不管一切地抛弃了本科与硕士的微电子专业。1997年春季,他到了向往已久的浙江大学CAD&CG国家重点实验室读博士学位,幸福地幻想着大干一番自己喜爱的专业。他颇费周折地考入CAD&CG 实验室,却尚未热身就全力而退,决心自立门户。

那时他省吃检用买了一台计算机,就在宿舍里开发软件。1997年8月,他还去北京参加首届中国大学生电脑大赛软件展示。后来他竟然拿到了名次,且做了一个广告:万事俱备,只待投资。由于他的获奖引来近10个投资者。最后他选择了一位年龄比他大一倍、非常精明的商人作合伙人,成立了“杭州图形软件开发有限公司”。彼时,我们全家都因他而骄傲。

相关文档
最新文档