SoftEng 版 (精华区)

发信人: Sun (大灯泡), 信区: SoftEng
标  题: 周锡令教授谈软件工程
发信站: 哈工大紫丁香 (2000年08月08日10:03:11 星期二), 站内信件

[内容摘要]
  从周锡令教授的采访录中,你可以找到以下问题的答案: 
什么是软件工程?软件工程为什么那么难? 软件工程研究的热点在哪里?
我国的软件生产过程现状如何?我国在建立软件产业的进程中,应怎样加强与软件
工程有关的项目研究?


周锡令教授采访录
[返回]
  软件工程的研究与应用确实取得了长足的进展,但距离真正解决“软件危机”
的初衷还相距甚远。如何正确认识我国在该领域的研究现状,如何适当地把握我国
软件工程研究与应用和国际先进水平的接轨进程,特别是如何在竞争中寻得一种适
合自己发展的模式,都是许多软件工作者关心的问题。为此,我们近日采访了软件
工程国家工程研究中心研究员、北京信息工程学院软件工程研究开发中心主任周锡
令教授。让我们寻着周教授的思路,一起来为软件危机寻医问药。

问:
  人们总是谈论软件工程,工程的含义到底是什么?您认为作为这样一门具有较
高理论和应用水平的科学,在软件的开发和应用中是否起到了应有的作用? 

答:
  我们可以从考察工程这个概念入手来分析这个问题。沿用Webster大辞典1720
年的定义,“工程”一词是科学和数学的某种应用;通过这一应用,使自然界的物
质和能源的特性能够通过各种结构、机器、产品、系统和过程,成为对人类有用的
东西。因而,“软件工程”就是“科学和数学的某种应用;通过这一应用,使计算
机设备的能力借助于计算机程序、过程和有关文档成为对人类有用的东西。” 

  然而,当前我们在使用“工程”一词时,还隐含着如下意思:这是一件比较大
的工作,通常意味着需要较多人员的参与与合作,消耗较多的资源。换句话说,一
个人在家里打一件毛衣,编写一个小程序,都不能叫做“工程”。与此相应,软件
工程项目通常意味着Programming In Many和Programming In Large。由于消耗资
源较多,因此,它既关注人员的组织与参与情况,又关注资源的消耗情况。

  我们要求工程目标能在一定的时间、一定的预算之内完成。软件工程是针对软
件危机提出来的。从微观上看,软件危机的特征正是表现在完工日期一再拖后、经
费一再超支,甚至工程最终宣告失败等方面。而从宏观上、从整个社会对软件的需
求来看,软件危机的实质是软件产品的供应赶不上需求的增长。软件工程的成果不
是供最终用户使用的一般工具产品,而是为软件设计和开发人员提供的思想方法和
工具;而软件开发是一项需要良好组织,严密管理且各方面人员配合协作的复杂工
作。软件工程正是指导这项工程的一门科学。软件工程在过去一段时间内已经取得
了长足的进展,可以说在软件的开发和应用中起到了其应有的作用。

问:
  据我们所知,软件工程的研究与应用近年来虽然有不小的突破,但软件危机依
然存在,也就是说,软件工程任重道远,您能否分析一下原因何在?

答:
  的确,我们也看到,计算机硬件在性能价格比方面呈指数级的飞速发展常常使
人瞠目结舌。与之相比,计算机软件的发展不免相形见绌,但它仍然有相当大的发
展。最主要的表现之一是:软件产品的规模以及复杂程度与以前相比,也有了数量
级的增长。另一方面,如你所说的,软件危机依然存在。分析起来这里面有两方面
的原因:在宏观方面,这是由于软件日益深入社会生活各个层面,对软件的需求的
增长速度大大超过了技术进步所能带来的软件生产率的提高。而就每一项具体的工
程任务来看,许多困难来源于软件工程所面临的任务和其他工程之间的差异以及软
件和其他工业产品的不同。

  首先,我们要注意到,其他工业领域里的工程的建设目标(比如建设一座桥梁
)以及工程在整个工期内所处的环境是相对固定的。而软件工程则不然。众所周知
,许多软件项目(例如MIS)的用户往往说不清楚自己的需要是什么。不仅如此,
由于技术进步,由于软件的使用改变了用户的工作环境,由于用户周围环境的变迁
,由于用户自身对软件的功能和使用软件带来益处的认识的加深,软件工程的建设
目标在工程进行期间就会不断地变更。如果说传统工业领域里的工程任务好比去射
击一个十分清晰而又固定的目标,那么在软件工程领域里,你的任务往往是去捕捉
一团随风飞行而又边缘模糊的云团。

  其二,也是更为糟糕的,传统工业能够在相当短的时期内建立起一套与供应商
无关的部件分解体系以及与之相应的、受到全社会承认的工业标准,从而形成了严
密而有效的社会分工体系。反之,对于软件产业来说,在很长的时期里,每一项开
发工作几乎都要从头做起。软件部件的重复利用处于很低的水平。开发者很少能够
“从不同厂商采购软部件,再加上自己的东西,迅速形成一个系统”。这种情况只
是到近几年才开始改变。

  第三,工业产品只是软件的一个侧面。软件不仅可以是一种在市场上推销的工
业产品,它往往又是与文学艺术作品相似的精神作品,有一种创作心理和效应在里
面(软件产权用版权法来加以保护的原因正在这里)。与体力劳动相比,精神活动
过程的特点是“不可见性”,这大大增加了组织管理上的困难。

  与其他工业产品相比,软件产品还有三个重要特点是:其一,用户界面十分复
杂。这意味着用户的使用学习(培训)投资巨大。其二,与其他工业产品相比,软
件产品的设计成本高昂而生产成本极低。第三,使用软件产品的用户相互之间经常
需要交换文件与通讯,从而使得用户在设备选型的问题上互相影响,“从众效应”
严重(洗衣机、电视机的用户之间不存在这类问题)。这三点给软件市场带来的后
果是市场的先入为主现象十分显著。一旦市场被某厂商的产品占领,其他与之不兼
容的产品即使在性能上更为优秀,也难以立足。由于软件大量生产(复制)十分方
便,优秀软件产品的扩大生产不像其他工业产品那样要受到原材料、能源、场地、
劳动力的限制,因而市场份额往往相对集中于一个或最多两三个优秀产品。综上所
述,软件产业涉及的问题十分广泛,除了工程技术问题之外,还有市场、人才、政
策、资金运作乃至文化方面的问题。“软件工程”终究只是从“技术”和“技术管
理”的角度来研究和探讨问题,充其量通过《软件工程经济学》把“微观经济”方
面也包括在内。所以我们不能说,只要解决软件工程问题就能推进软件产业。

问:
  软件工程的研究目前集中在哪些方面,也就是说,软件工程研究的热点在哪里


答:
  软件工程的研究热点是随着软件技术的发展而不断变化的。即便在软件工程的
领域内,研究热点也在不断转移。最初的重点自然是着眼于提高程序员的工作效率
。于是开发了形形色色的软件工具(编辑、编译、跟踪、排错、源程序分析、反汇
编、反编译等等)。随后把零散的工具归拢起来成为在一定程度上配套的工具箱。
再后来又增加了文件管理、数据库支持、版本管理、软件配置管理等功能,逐步形
成了所谓的软件工程环境。接下来,软件工程所关心的就是“模型”问题。也就是
如何划分软件开发过程的不同阶段(需求分析,概要与详细设计,编程,测试,维
护等等)。“瀑布模型”的出现就是企图把其他行业中进行工程项目的做法搬到软
件行业中来。其隐含的基本假设之一是“项目标固定不变”。因此强调一定要把“
需求”彻底弄个明白,“前一阶段的工作没有彻底做好之前决不进行下一阶段的工
作”。然而对于软件来说,“项目目标固定不变”这一假设多半不现实,因此做事
严格认真的日本人首先感到不对劲:大型项目进行到后期,往往发现几年前规定的
项目目标已经没有意义了。为了解决这一问题,在“瀑布模型”中添加了种种反馈
。随后又针对“用户自己也不知道自己到底需要什么”的问题提出了“原型开发(
Prototypi ng)”思想以及与之相关的若干变形。

  软件开发涉及许多十分复杂而微妙的思想与概念。用户与开发人员之间,开发
人员与开发人员之间的通讯与交流过程中常常引入许多误解。在有许多人参加的“
Programming In Many”的项目中,这一问题尤其严重。软件工程学中有很大一部
分内容是用来解决这一问题的。大致说来有以下几种途径。

  第一,强调文档的重要性。“口说无凭,立字为据!”是其格言。

  第二,在当前阶段,除了程序之外,软件文档几乎都是用自然语言书写的。然
而自然语言本身具有模糊性。因此有一部分专家从事“形式化描述与不同形式化语
言之间的转换”工作。这类工作难度较大,也不容易为一般人所接受,往往处于“
曲高和寡”的境地。但是由于越来越多的大型软件的复杂程度与日俱增以及这些软
件一旦出错所引起的后果十分严重,对“形式化”的要求正在增加。

  第三,一般用户绝对无法接受“形式化的描述”,因此“原型开发方法”和“
Demo示范”的做法日益流行。

  第四,一个工程项目中涉及的人数越多,当然通讯过程中可能发生的误解和延
误也越多。先进工具和开发环境的提供可以大大提高开发人员的效率,可以“以一
当十”,从而使开发队伍变得精干,这就从另一方面减轻了通讯问题带来的麻烦。


  第五,软件开发过程的质量控制将逐步得到重视。现在大家都已经知道,开发
过程一旦结束,想要通过测试来保证软件产品的质量是行不通的。

  第六,软件重用与软构件的思想不仅要建立,而且要在实施上有所表现。如前
所述,软件生产率提高缓慢的重要原因是不能像其他工业那样以合理而标准的方式
清晰地将系统划分为部件并重复使用已有的成果。近年来,软件技术的进步以及
CORBA,DCOM,JavaBean等标准的出现已经使情况开始改变。这给软件危机的真正
缓和带来了希望。

问:
  我国在软件工程管理中,软件生产过程质量管理的研究和应用水平是否实现了
与国际先进水平的接轨?

答:
  上面说到,软件开发过程中精神活动的“不可见性”大大增加了过程组织管理
上的困难。因此软件工程管理中的一项指导思想就是千方百计地使这些过程变为“
可见的”以及事后可以检查的记录。只有从一开始就在开发过程中严格贯彻质量管
理,软件产品的质量才有保证。否则,开发工作一旦进行到后期,无论怎样通过测
试和补漏洞,都会无济于事。这就是近年来国际上十分重视的“软件生产过程质量
管理”思想。

  为了考核软件公司是否认真地在软件生产过程中进行质量管理,国际标准化组
织ISO已经颁布了ISO9000-3(注:ISO9000族标准适用于所有工业产品,但考虑到
软件产品的特殊性,所以专门制定了ISO9000-3),它是在软件产业贯彻ISO9000族
标准的指南。英国政府连同英国计算机协会于几年以前发布了TickIT指南,指导软
件公司实施ISO9000保证。美国CarnegieMellon大学软件工程研究所根据美国国防
部的要求制定了SW-CMM(软件成熟度模型),描述了不断改进软件过程的科学方法
,根据软件公司在软件质量管理方面达到的成熟程度,将它们划分为五个级别,使软
件开发组织能自我分析,找出尽快提高软件过程能力的方法,这个方法已得到国际
软件产业界和软件工程界的广泛关注和认可。

  国际上已经有数以千计的软件公司通过了ISO9000标准认证,分别获得了
TickIT的称号或者达到CMM中的一定级别。我国这方面的工作也开始启动。国内软
件公司如用友、东大阿尔派已经通过了ISO9000标准认证。软件开发的质量保证作
为软件产业的重大课题,已受到电子工业部、国家科委和国家技术监督局等部门的
高度重视。

问:
  作为软件工程国家工程研究中心的专家,您认为我国在建立软件产业的进程中
,应怎样加强与软件工程有关的项目研究,使软件工程的研究和应用在软件产业的
建设中发挥更大的作用?

答:
  尽管软件工程涉及许多方面,但在当前,我认为最值得注意的重点有两个:一
个是开展中国软件过程评估,这牵扯到软件管理方面的内容;另一个是软构件的大
规模开发与使用,这直接涉及到软件技术方面的内容。

  软件过程评估就是说,所有的软件公司都必须严格按照软件工程的标准去做,
严格评估,一切都是有跟踪、有检查的。有眼光的软件企业领导人都在关注这一动
向,积极采取措施,使自己的企业达到ISO9000标准的要求。这一方面是为了提高
企业的声望,更重要的是可以利用这个机会,提高员工对质量问题的认识,通过这
一活动整顿企业的技术流程和组织情况,使企业的工作质量达到一个新的高度。

  如前所述,以往软件工程一直不能像其他产品一样,做到标准化,以一些现成
的工具为基础,“踩着别人的肩膀往上走”,而是一切都要从头开始。现在则不同
了,技术条件已经开始成熟,相应标准也已经出台,许多单位已经开始重视这方面
的工作。这实际上是将许多软件工作分成许多部件去构造。很有可能今后的软件队
伍会分为两个部分,一部分专门从事评估,另一部分专门从事集成。

  软构件的开发与运用可以说刚刚开了一个头。在一些公共领域,例如软件的用
户界面,通用软构件的使用已经屡见不鲜。国内许多单位在开发软件时,已经普遍
使用Delphi,PowerBuilder等环境和工具,大大提高了工作效率。然而,对于各行
各业的专业领域来说,领域构件(DomainComponent)的开发和使用还是基本处于
空白状态。这一工作的进行,一方面意味着各行各业对本专业领域内的知识形态加
以归纳整理,然后以最新的软件形式表达出来。如果全面铺开,就是一件规模浩大
的社会工程,需要各行各业的领域专家和软件专家通力合作才能完成。

  另一方面,在少数大型跨国公司对软件市场垄断的压力下,现在许多国家和地
区的软件行业感到发展空间日益缩小,纷纷讨论一个问题:“难道我们只好替别人
做代理,搞推销?我们的niche在那里?”如果这上述软件生产的“构件-集成”
格局的趋势成为现实,各种应用领域里的构件的设计与生产将开辟出一个十分广阔
的新天地,产生出巨大的市场需求。由于软构件的使用可以渗透到符合软构件标准
规范的所有系统中,做到“你中有我,我中有你”,不必耗费巨资开发自己的系统
去与大公司竞争,即使中小公司也可以在市场中找到自己的位置,从而将给这些国
家和地区的软件产业带来另一个新的发展机会。

[返回]
 

--
    太阳就是个大灯泡。
    那灯泡是什么呢?
    是光光!

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
※ 修改:·Sun 於 08月08日10:04:18 修改本文·[FROM: sunner.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:7.387毫秒