首页 新闻 搜索 短信 分类 聊天 导航
新浪首页 > 科技时代 > 软件 > 正文
第47期IT沙龙“现代软件工程”实录

http://www.sina.com.cn 2001年11月02日 11:01 新浪科技

  2001年10月21日下午,第47期IT沙龙在翠宫饭店举行,这次论坛的话题是“现代软件工程”,以下是这次沙龙的实录:

  主持人潘加宇:

  大家好,欢迎大家光临第47期IT沙龙,我是umlchina。本期沙龙主题是“现代软件工
程”,由我为大家主持。现在我们请本次IT沙龙的组织者,书生公司董事长王东临先生给大家做一个开场白。

  书生公司董事长王东临:

  大家好。我们这期主题是“现代软件工程”,其中特别强调“现代”这两个字,是因为我们软件业虽然经过了几十年的发展,但主流舆论对软件工程的认识还停留在七八十年代传统软件工程的水平,把软件工程机械化成教科书上所写的生命周期法,甚至还有很多人把软件工程片面理解成写足够多的文档。这是由于中国软件业所存在的一个问题,即软件行业的话语权并不掌握在做软件的人手里所造成的。

  应该说传统软件工程的原则基本还是正确的,但是从具体方法来说,90年代以来有已经不少发展和提高了。传统的教科书上的方法在已知条件充足、条件恒定不变时,给出一个静态的最优解应该说还是一个比较恰当的方法。但是应用在商业环境里面,条件还不是很充分,需求在不停变化,那就不太够了。

  我今年31岁,我上学时就学的这套方法,而几乎所有的专家学者年龄都比我大,他们更是受到这种传统方法的教育。而咱们国家有一点跟美国不一样,软件等高科技行业受科研单位、大专院校的影响比较大,这些单位的专家学者对政府、媒体、用户等的影响是很大的。我大致分析了一下,我国由于历史原因,早期只有国家科研单位、大专院校才具备从事软件开发的人才,因此早期的IT企业大多出自这些单位,如北大、清华和中科院,这也是我国特有的高校办企业现象的根源。而美国大学和企业的界线是很分明的,前者只管研究,后者负责商品研发和市场运作。如果大学里研究出了一项好技术,就会拉出来作为一个企业来运作,如CISCO最早就是斯坦福的老师研究出来的,他们夫妻俩就自己出来办了公司,与斯坦福是不相干的。总之,个人可以流动,但不管怎样在大学就作研究,要做商业就出来到企业去,而不是以做教学和研究为职责的大学下面再办一个商业的公司,最后什么都不像。目前,中国那些高校和科研单位办的IT企业很多已开始明白这个道理了,并开始逐步脱钩了,但还不彻底,明明是工业界的事却偏偏要去听学术界的人的意见,如果遇到周老师这样明白的人还好,遇到一些从教科书到教科书的所谓专家学者,就往往会有偏差,这就造成了前面所说的软件业的话语权不在做软件的人手里的现象。

  事实上,我本人在十多年从事软件行业的工作中,普遍感到无论是用户、媒体还是政府,都一直用七八十年代软件工程的标准来衡量我们。这样对行业造成一定的误导,而且这种误导现在还是有一定的作用,有一定的影响。

  所以今天希望借这个机会,请真正做软件的,如Microsoft,摩托罗拉,包括国内比较优秀的像金山,也有相对比较符合中国国情的,规模比较小的,像做超级解霸的等等,大家谈谈真正的实际软件工程到底怎么回事。当然也包括周老师,周老师虽然也是在高校里面,但是周老师本身对现代软件工程方面也有比较好的研究。我们的主持人潘加宇有个人网站umlchina,在软件业专业圈里面影响也比较大,他本身对软件工程也有很多了解。

  今天很荣幸请到这样几位主讲嘉宾和主持人,也希望今天大家都有很好的收获。

  谢谢大家。

  主持人潘加宇:

  今天我们非常荣幸邀请到了五位主讲嘉宾,他们分别是微软研发中心服务系统平台部经理杨永生先生,金山公司金山词霸研发部技术总监邹涛先生,摩托罗拉全球电信解决方案部网络方案技术中心高级经理胡大庆先生,清华大学著名教授周之英老师,还有一位是豪杰公司的总裁梁肇新先生。

  首先我们有请清华大学计算机系的周之英教授。周教授二十多年来一直从事软件工程方法的教学和研究工作,曾经和主持和参与多项软件工程有关的国家重大科技攻关项目和863项目,还有需要大型复杂网络的应用系统开发工程,连续十多年在清华讲授研究生课程“软件工程技术和设计”。可能大家对周教授最大的了解就是99年末的时候出过《现代软件工程》的书,当时涉及的内容是很新的。所以从当时很新的书里面,周老师对新知识的敏锐和软件工程推广的热情。

  周老师今天发言的主题是《现代软件工程的观点——尊重事实、认识极端,解决思想》。下面有请周老师。清华大学计算机系教授周之英:

  很高兴有机会跟大家一起探讨现代软件工程。我大概二十多年一直对软件工程很有兴趣。为什么呢?如果做软件是一个项目开发问题,那我们希望软件工程解决普通性的问题,超越一个项目。所以这个问题我认为很有挑战性,一直在搞这方面的工作。

  大概两年前我在科学出版社出了叫做《现代软件工程》的书。为什么加“现代”两个字?主要想界分一下现代软件工程跟软件工程的一些差别。什么是软件工程?希望改变小作坊式的软件开发方式,转向工业化,就是希望学习工厂的经验,物质生产的过程。物质生产过程基于一些规律,物理学原理力学等等,和工程的一些方法。能够使生产工作达到大规模生产,效率高,不需要很多的技艺。比如手工加工一个零件需要很高的手艺,按工程规范做,就不需要长期学手艺,学工程规范比用手艺实现简单。这是软件工程追求的理想。把软件变成一个有规律的物化的观念。

  但是90年代以后发现有很多矛盾,我参与了很多项目,觉得并不像那个样子。最大的矛盾是什么?软件不是纯物化的东西,这里面有人的因素,所以这就有很多变动的东西,不可能像理想的物质生产过程,基于物理学等的原理来做。人的(认识)规律,我们还没有认识得很清楚。现在有五花八门适应各种情况的东西出来,才能真正解决它的问题,适应变化的需求。所以我基于这样的观点:全球化形势下,变化多端;过去是很稳定的情况还可以;现在全世界这么大范围里面,任何一个地方发生变动,就可能影响到你这儿,所以变动显得是非常地迅速。这时,人的因素就更突出了,而且方法就更多种多样了。我就加上一个“现代”,强调仅用物的规律的不够,改变过去软件工程的想一成不变的用一个方法解决一切,出现多种多样的、丰富多彩的问题。

  到现在为止,我这观点,跟各方面交流不够。这次有机会跟大家谈谈觉得很高兴。能跟参加实际工作的朋友交流,可以更好地展开这些思想。

  我今天主要想提十个观点。主要是针对沙龙给我的参考文章里面提到的普遍问题。

  一个观点,现在的项目各个都不一样,每一个项目都应该有自己的规范,规范都是不一样的。软件工程是超越项目。就是说每一个项目不一样,但是项目之间有共性的、有规律性的东西,我们要把这些东西研究出来。所以软件工程是基于项目和产品,不可能脱离项目和产品,但要超越产品,超越开发组织、开发的团队、个人。要超越,就要有客观性。软件工程环绕事实进行,这事实就是软件过程中一系列的东西,包括文档等等。所有工作要建立在客观性基础上。这是第一点,就是说要超越项目;共性跟个性的问题;不能凭主观想象,要有事实作为基础。

  第二个观点,软件工程理论方面,经验实践,各式各样标准等等,跟物质世界相应的东西是有区别的,软件工程的这些理论、方法、标准、开发模式等等,是强烈依赖于具体环境和执行的人。就是说,这个人本身不像一个车间里一个机器,一种机器生产的东西可以是不变的,但是在软件过程中,人不可能一样的。人的能力,人的行为都不同。人的一些东西,比较难刻划,所以目前软件工程中所有理论是不充分的。因为人是在其中起很主要作用。虽然模型总是一种简化,但是人的简化往往是太简化了。我们应该看到这些理论到目前为止是不充分的。

  不充分以后,要去推广就有一定难度。我们说,所有理论要使用的前提是什么?可重复性。像CMM,最基本的条件是可重复性。但你的边界条件都是不重复的,整个过程就不太好重复了。所以要认识哪些东西重复,哪些东西不重复了,推广就难度比较大,不是不需要推广,而是难度比较大。常常需要人在软件过程中调整。有时因为有“人”的参与而能推广,隐含了人在过程里对差异的的能动性调整。所以学习的时候要有这样的理解。第二个,理论的东西是一个抽象纯化的东西,我们要在实际运用,要把纯化变成实际的情况。我觉得很奇怪,大家都对软件工程说,实际开发怎么跟书本上不一样,我想物理学书本说动者恒动,静者恒静,小球会在绝对光滑的水平面上不停地滚动。物理教这些,你从来没有要求实际是这样,这球在地毯上滚,一会儿就停住了。所以说,在这个问题上,你学到的理论是理想情况,对实际情形来说第一个就是不完整的,很多边界条件没讲清楚,也讲不清楚;第二,实际工作时,不能要求照着书本上理想模式来作范本,这样要求是不合理的。需要体会你的环境,理解为什么,对你有什么帮助。而不能希望百分之百照抄,这样你什么也学不到;不能学到对你有共性的东西。

  第三,对于文档。我们要客观性,这中间有一个很大的东西就是记录文档,通过文档记录一些东西。大家说文档里面的东西也有错,我要照着它做不是就错了。问题是文档你知道错,就可以改,如果没有文档你是不是就错更多。记录一些东西,便于大家交流。不要你想你的,我想我的,这是文档可起的一个方面的作用。第二个文档应该是记录了开发的历史,大家可以想人类社会的历史起了什么作用:了解过去,认识现在,展望将来。我更提高一些,说文档应该表示你把对问题的理解记录下来,工作进展应该记录下来,这是文档的作用;第二个从更深层次所起的历史作用:将来可以改进,记录下你的成就。所以对软件组织或者软件工程师个人来说,如果你有抱负,你希望能起历史作用你就得把你的工作记录下来。所以应该用更高、更深层次来思考这些东西,

  那么历史有什么作用?我们只能够根据历史去预测未来,并不是我们为了躺在老祖宗身上,而是我们为了向前看,为了现在的工作,为了将来的工作。现在工作怎么来看,我们还没有做,将来工作更不知道。那只有什么?只有靠历史,靠历史去预测未来。但是我们不能靠历史去计划未来,我们未来一定是跟历史不一样的,中国还停在封建社会?这是不可能的。还是在文化大革命?这是不可能的。我们为了更好的未来,我们希望未来比过去历史更好。所以我们不能照过去怎么现在就怎么样,而是要吸取历史经验教训来指导我们,这就是历史的作用。

  第五个,什么是历史,历史就是过去的事实,真实的事实。软件工程包含很好的项目的成功的经验的总结。我们软件工程有一些东西,分析得更多的是过去成功的经验。学习软件工程这些东西,是为了掌握历史的观点。一个人脱离了历史,就是没有文化的。有人问,学了有没有用?当然你要没有学历史,你也可以做事,但是往往是短期的。你要有更高要求的话,不仅是就事论事的话,就应该学习过去成功的经验,而不仅仅是为了当前这件事,对素养的提高很重要。

  历史要尊重事实;尊重事实有两方面,一方面是历史,一方面是现状,现状也是一个事实,跟历史不一样的,所以你要正确认识自己和别人的情况。

  第七点,在全球化的进程中,技术环境的变化非常多样,而且复杂,变化非常迅速。对一个具体个人或者一个企业来说,周围不确定因素太多了。针对这样情况,从软件工程本身来说,对它的要求实在太高了。为什么呢?现在使用软件工作已经不像四十年、五十年、七十年代是非常少的人群,现在有非常多的人群,各行各业,现在有很多不是学计算机的,学化学的、学机械的,有很多人甚至不是大学毕业的,也在搞软件,也搞工程。所以对软件工程希望的东西太多了。人群广泛以后,更希望简单好用,还要实用,还要有效。又要处理非常复杂的问题,各式各样的问题,所以给软件工程带来了很多的矛盾。根本的矛盾是什么呢?这是我的观点,我认为开发中所有能看到的东西,但运行时的情况发生了变化。现在面向对象技术出现以后,运行视图,运行时实际情况跟你开发时看到的东西不一样了。从前结构化的时候,还可以,差不多。因为结构化设计时的模块结构,在运行时是一样。设计是什么样的模式,运行也是差不多这样的模式。如果希望运行时效率提高,那就在什么地方去改一改。人可以看到的一些东西,就能够去做它。看不到的东西、在运行过程中,全放在脑袋里面,对人的要求太多了。处于这种状况下非常困难。

  运行模式是由硬件确定的;是开发平台确定的。也就是说,现在这种本质的硬件已从四十年代五十年代一直延续到现在。某种意义上,真正要解决这样有很多的难点的开发问题,得从根子上来解决。所以现在还有很多人在研究更基础的问题。国内这方面考虑少一点。我们应该认识到,什么方法能解决那么困难的问题,看不见啊!即使有的话,是会有困难的。有根本矛盾的困难。

  第八个,一般性的问题很难解决,但是具体问题并不难解决。一个一个成功具体的项目很多。项目为什么成功?因为把它主要问题、主要特征解决了。现在就有一些方法很极端,比方有人说XP,或者更极端一些,我什么方法也没有,就完全可以用黑客的方式、就可以去解决问题了等等。这种情况是强调某个片面,就是强调局部,针对具体问题可能是有效的;或者强调不是那么片面的,但也不是很全面,针对具体问题具体解决的有了各式各样的方法。各种情况的多样性。还有一种极端就是想全面,我也碰到,有时候审查论文,或项目,说想有一个知识库把所有知识都放进去等等。按这种东西照搬会超越你的控制能力,可以是一种想法,有道理。但是能用吗?得自己考虑。应该去理解和利用它的一些内涵的东西。比方说有一些方法很全面,把各种东西刻划了,也许对你全部做不合适,但是你可以当做一种参考模型,去理解所考虑的方方面面,帮助你找到自己需要的。但是找到自己需要的前提是什么?你得知道自己需要什么。首先得清楚自己的情况,然后还要清楚现在的技术提供一些什么。

  不同环境下情况可能不一样,甚至观点不一样。现在软件工程中,客观存在就有冲突的观点,有不一样的东西。这是在不同背景下,适应不同情况。得理解问题的边界条件。得承认这是客观事实。现在最好的观点是你不要违反常识,常识告诉你的往往是最有效的东西。不要盲目追求一些很出名的东西。在面对复杂而有冲突的问题,想获得成功,需要的是积极思考,认识自己的问题,通过理性思考,包括认识极端的方法,全面方法的作用,通过一些合作和交流去解决一些冲突,得到一定的平衡。软件工程是通过平衡解决问题,也可说软件工程处理的很多问题是得到“满意解”。另一方面“满意解”也等于“不满意解”。为什么?它仅是一种平衡,它遗留了一些不够满意的东西。对不满意的东西,就应该想办法再提高、去解决。所以应该有发展的观点,不要觉得协商“满意解”就解决一切了。还要考虑进一步创新。

  总的说起来,对每一个软件工程师来说,我们面对一个新问题以后,就要了解这些东西,有这样的过程:从(一些技术)不知道,到知道,知道以后要真正理解,理解后要去实践,开始不一定能正确地实践,正确地实践后,可能又能发现技术对你有不足的地方,可以得到一些创新的东西。开始,你不知道做事规律的话,可能一点约束也没有,就是没有规律的无序的工作,等到认识一点,有一些规律,可以防止你的一些错误,可以使你的道路走的更正确一些。起初,这样的规律可能只是一些限制,进一步认识,可以规范成一个过程,就等于规定一条道路,工作就更具体了。下一步,通过不足处,希望进一步提高认识,有一些突破性的工作,就能够在新条件下得到新的规律。这是一个循环的、不断的过程。

  通过学习软件工程,我对咱们中国老祖宗还觉得挺有价值,我画了这个中国最古老的太极图,看太极图我觉得很有新意。从整个现代软件工程观点里,反映了一个人跟机械(物)的关系。每一个人的一些工作里包含已经认识的一些机械的、可重复的,机械性的东西,可以做成一些机械。当你把你的工作中能够认识到的:那些东西是可重复的、可以机械化的东西做出来。假如太极图中人代表黑的一半,机械代表白的一半。那么代表人的黑的一半核心里面包含了白的、机械性的东西,逐步在旋转,人的具有机械性的东西慢慢转换成白的。当把人的主要工作都通过机械解决成自动化,则已经转到另外一半了。但是另外一半里面肯定包含需要人做的东西,你对自动化(机械)所不满意的东西:黑的小圆点。不满意的东西就是需要人去创意的东西。所以白的、自动的里面还包含黑的,不能够一片全部雪白的。还有黑的就需要人解决的。这部分成主导时,转为代表人的另一半了。而人解决后,对新的问题的认识就循环性提高,创造新自动工具。所以人跟机器关系,人和自动的过程是在不同的层次上逐步演化。

  更进一步可以讨论,很多人都感觉到的统一方法、不统一方法问题。看太极图,现在两半分别代表统一和不统一。咱们老祖宗也解释得很好:统一里包含不统一。总有一些不太满意的东西。有了统一方法后,随着环境条件的变化,统一方法不能代表的东西会越来越多,就是说会有各种各样的方法、平台、机器,越来越多。但不统一中,有共性部分,通过这个共性部分,如果能够慢慢超越不统一的根源问题后,又会变化成统一方法,所以这又是一个循环的过程。

  这是人跟机器关系的太极图。这是技术方法、体系结构、平台、软硬件划分、硬件、体系结构、计算原则,的统一和不统一关系也是符合太极图这样的规律。举个例子,看这个太极图,分析体系结构的统一性问题。原来都是用结构图这个体系结构。六、七十年代大家日子过得很好,体系结构都是基本一样:都画结构图;虽然也包含很多问题,但当时不突出。现在不行了,要层次结构、“Client/Server”结构、还有白板等等,各种各样体系结构。已经有很多很多不同的体系结构,但在某些场合还不够,还不满意。在因特网刚起来时,只有B/S模式,大家都觉得B/S模式好,一窝蜂都用B/S模式,就统一了。过了几年,B/S模式不满足了,黑的一半又转过来了。过一阵子可能又会有优势方法形成统一了。所以统一不统一也永远是循环,不要认为今天用统一的体系结构就是一辈子这样。今天不同的开发方法就一辈子用不同开发方法。更进一步可以画这样一个图,白的一半里面黑的核心也可用太极图表示。比方,外面看成软件工程方法,里面看成软件平台,或者硬件,硬件也在变化。我觉得老祖宗的这个东西很有生命力。可以通过太极图看软件工程的过去和未来。这是我对现代软件工程的看法:早期的软件开发仅考虑人的因素,传统的软件工程强调物性的规律,现代软件工程最根本的就是人跟物的关系,就是人和机器(工具、自动化)在不同层次的不断循环发展的关系。关键是观念改变。就讲到这儿。

  主持人潘加宇:

  非常感谢周老师的精采见解,从深层次上从思想给我们大家一个启发和提示。

  提问:

  刚才您提到很多公司可能不太清楚自己需要什么,这可能是很多目前国内公司的现状,周老师有什么方法解决这个问题呢?

  周之英:

  实际也是分层次的,不是说我有什么方法。我觉得所有的管理学都有这样思考模式。比方说,公司首先得要确定你商务目标是什么,要做什么事情,这就不是我能回答的。但办公司的人自己要明白,要确定市场对路的产品,或服务,你都要确定。然后怎么做,就是企业目标确定后怎么来实施;然后看实施中有什么问题,针对问题去解决。现在讨论软件过程改进,我最近也看见一些美国的资料、包括CMM,反复强调:首先从你目前状态做起,然后分析你的问题,拿CMM作为对比来分析。现在有很多方法可以做。但是首先自己总要做事,你什么都不做,然后说你告诉我,那是不可能的。比方说已经成立了公司,肯定知道要做什么,做出什么以后,你有没有提高的欲望?有没有改进欲望?如果你觉得很好,那你就继续好吧,也不用看别人了,你就很高兴了。如果你觉得这地方不够、那地方不够,你就针对自己的问题;再有一个,可以把自己的问题排排次序,逐步地进行解决,这都是软件工程最基本的思想。

  现代软件工程(二)

  现代软件工程(三)

  现代软件工程(四)

   订短信头条新闻 天下大事尽在掌握!
      新浪企业广场诚征全国代理


发表评论】【应用软件】【短信推荐】【关闭窗口

 相关链接
第47期IT沙龙“现代软件工程”将举办(2001/10/17 13:51)
第46期IT沙龙:投资者与经营者的定位(2001/09/04 14:23)
第45期IT沙龙--在线游戏的“钱”景(2001/08/24 11:35)
第45期IT沙龙在线游戏的钱景即将举办(2001/08/06 13:46)
第44期IT沙龙--WTO与电信改革(2001/08/02 11:30)
第44期IT沙龙纪要:WTO与电信改革(2001/07/31 11:05)
WTO门槛前的中国电信业--第44期IT沙龙(2001/07/31 10:07)
第44期IT沙龙WTO与电信改革即将举办(2001/07/10 09:32)
软件沙龙专题

新 闻 查 询

新浪个人家园全面升级,买一送二超值大礼!




分 类 信 息
:1.8元租别墅办公
   国谊宾馆写字楼
   北大燕园外研培训
   可信赖的富康之家
:具备雅思出国留学
   同飞指纹门禁系统
:惊险刺激极限运动
   去看看虹桥中华园
:20余克重百科全书
   0.38元的国际长途
:泰隆写字间招租
   让倒立健身器技术
:环保产品暖通空调
   最新人才招聘信息
:加盟友邦早日圆梦
   高薪诚聘货代精英
分类信息刊登热线>>



新浪商城推荐
  商城数码假日专题
  • MD数码音乐随心听
  • 数码相机560
  • 数码摄像机伴你游
  • 摄录拍E体机
  • 索尼P20数码相机
  • 便携CD/VCD播放器
     (以上推荐一周有效)
  • 更多精品特卖>>


    科技时代意见反馈留言板 电话:010-82612286 或 010-82628888-3488   欢迎批评指正

    网站简介 | 用户注册 | 广告服务 | 招聘信息 | 中文阅读 | Richwin | 联系方式 | 帮助信息

    Copyright © 1996 - 2001 SINA.com, Stone Rich Sight. All Rights Reserved

    版权所有 四通利方 新浪网