IT项目经理辩论:软件工程有用吗? 整理:上海健生实业股份有限公司 张翼(dill) //感谢dill主持并整理该次辩论!感谢! 洪水大劫之后,天下人都讲一样的语言,都有一样的口音。诺亚的子孙越来越多,遍布地面,于是向东迁移。在示拿地,他们遇见一片平原,定居下来。由于平原上用作建筑的石料很不易得到,他们彼此商量说:“来吧,我们要做砖,把砖烧透了。”于是他们拿砖当石头,又拿石漆当灰泥。他们又说:“来吧,我们要建造一座城——巴比伦城,和一座塔,塔顶通天,为要传扬我们的名,免得我们分散在全地上。”由于大家语言相通,同心协力,建成的巴比伦城繁华而美丽,高塔直插云霄,似乎要与天公一比高低。没想到此举惊动了上帝!上帝深为人类的虚荣和傲慢而震怒,不能容忍人类冒犯他的尊严,决定惩罚这些狂妄的人们,就像惩罚偷吃了禁果的亚当和夏娃一样。他看到人们这样齐心协力,统一强大,心想:如果人类真的修成宏伟的通天塔,那以后还有什么事干不成呢?一定得想办法阻止他们。于是他悄悄地离开天国来到人间,变乱了人类的语言,使他们分散在各处,那座塔于是半途而废了。 ——《圣经•旧约》11章 从此以后,再也没有人妄想建造通天塔,就使亚历山大大帝有过一闪之念,也终因工程浩大而不得不退却。 通天塔的故事给我们讲了人们语言相通、齐心协力,将会统一强大,创造一切人间奇迹。然而,笔者刻意挪揄了这段故事,拉开了IT项目经理辩论的序幕: 5000年之后,天下人都讲不一样的语言,都有不一样的思想。诺亚的子孙越来越多,遍布地面,进入信息时代。在21世纪,他们遇见一个发展的机遇,静下心来。由于应用很难满足不同的需要,他们彼此商量说:“来吧,我们要做组件,把组件做好了。”于是他们拿组件当石头,又拿通讯当灰泥。他们又说:“来吧,我们要建造一个村——地球村,和一座塔,塔顶通天,为要传扬我们的名,弥补我们分散在全地上。”由于大家语言不通,虽然同心协力,建成的地球村奢华而美丽,高塔却摇摇欲坠,号称要与天公一比高低。此举虽然惊动了上帝!上帝却为人类的虚荣和无知所不齿,不能容忍人类冒犯他的尊严,决定惩罚这些狂妄的人们,就像惩罚偷吃了禁果的亚当和夏娃一样。他看到人们这样齐心协力,统一而不强大,心想:如果人类再修不成宏伟的通天塔,那以后还有什么事干得成呢?一定得想办法磨炼他们。于是他悄悄地离开天国来到人间,给了人类系统工程方法,使他们分散在各处,却一直在修缮着那座塔。。。 波博来萨铭文中写道:“……我把塔基牢固地建在地界的胸膛上,而尖顶要直插云霄。”那是痴心妄想。 用软件工程能建造通天塔吗?那也是痴心妄想。 5000年后的今天,也没有人想建造通天塔了,那要软件工程干嘛? 系统工程有用吗?2005年4月,项目管理者联盟IT项目经理论坛就此展开了辩论。笔者荣幸地担任这次辩论擂台的擂主,守擂方的论点是“系统工程没用”,攻擂方由苏州的张浩先生(网名:lookmezh)带队,论点是“系统工程有用”。 一、 辩论概况 思想的火花一经闪现,就像导火索一样迅速蔓延开来了。“系统工程没用”的论点一提出,就得到守擂方的热烈响应,他们从软件工程的作用、软件存在的bug、项目失败的因素等方面加以旁证。 攻方也不示弱,迅即展开强烈的攻击,4月3日中午lookmezh的帖子直入要害、侃侃而谈,把辩论推向了高潮,双方激烈的辩论就此展开了,畅所欲言、针锋相对,在一周的时间内,陆续发表了近30个帖子。 版主camer把论题作了细化,分别了项目的多种情况,指出软件工程不是必需的,提出系统化的思维更为重要。 这并没有缓解守方的争辩,4月7日下午,笔者类比传统的工程,进一步论证软件工程没有用,再次招来强烈的攻击。lookmezh的辩驳论据详实,机智幽默,词锋犀利,入木三分,咄咄逼人气势,为攻方取得了明显的优势。 经过几天的唇枪舌战,双方意识到应该把论战引入正题,给出软件工程的定义和内容,小飞熊(flybear)道出了软件工程的来源,easywork也谈及软件工程的概念,参加辩论的都是专业人员,因此双方都没有系统化地阐述软件工程的概念。 笔者考虑,辩论仅仅是一种形式,目的还是要把软件工程弄明白,让网友们在参与辩论和读贴时,能够有所收益,深化对软件工程的理解。为此,抛出了立论贴,在肯定软件工程带来变化的同时,仍不失时机地指出软件工程没有带来应有的效果。 之后,由于辩论规则不够完善,中性的论题令网友无所适从等原因,使辩论开始显现颓势,逐渐进入尾声,虽然还有几名网友陆续加入,但再也没有掀起新的高潮。 最后一周,笔者谈起切身的体会,引用查伯尔希尔“没有银弹”的预言和十年后的回顾,总结了软件工程无法令人信服的论点。 二、 概念 [攻擂方:马踏飞雁,4月4日]: “今天,我比以往更加确信,概念的完整性是产品质量的核心。……这个原理决不仅限于软件系统,它适合于所有的复杂事物。”——Brooks《人月神话》 首先,让我们来看看软件工程的概念: 软件工程是一类工程。工程是将理论和知识应用于实践的科学。就软件工程而言,它借鉴了传统工程的原则和方法,以求高效地开发高质量软件。其中应用了计算机科学、数学和管理科学。计算机科学和数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理。 其次,我们再来看看软件工程的目标: 软件工程的主要目标是:生产具有正确性、可用性以及开销合宜的产品。正确性意指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜性是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多问题有待解决,它们形成了对过程、过程模型及工程方法选取的约束。 接下来让我们来看看软件开发中最关键的问题是,软件开发组织如何很好的定义和管理其软件过程,从而使好的软件开发方法和技术起到所期望的作用。 中国的软件开发过程没有明确的规定,文档不完整,也不规范,软件项目的成功往往归功于软件开发组的一些杰出个人或小组的努力。这种依赖于个别人员上的成功并不能为全组织的软件生产率和质量的提高奠定有效的基础,只有通过建立全组织的过程改善,采用严格的软件工程方法和管理,并且坚持不懈地付诸实践,才能取得全组织的软件过程能力的不断提高。 [攻擂方:flybear,4月2日 16:36]: 首先,软件工程的出现不是一个偶然的现象,而是软件领域为解决已经出现的“软件危机”问题而发展起来的新的领域。因此,从根本上讲,软件工程是解决问题的方法。但和任何工程领域一样,其不可能解决所以问题。因此,软件工程通常采用“折中”而非“完美”的思路。 第二,软件工程的研究内容是非常丰富的,不同时期的软件工程包含不同内容。这不仅包含现在为人熟知的面向对象、构件(Component,也称组件)等设计方法学,而且包括各种现实使用的软件。有谁能说,编译技术、高级语言、操作系统、网络等的发展不是软件工程发展的一个有机组成部分呢?正是这些技术的出现,改变了现在的软件设计方法?实际上,编译器、操作系统等不恰恰是我们今天最常“重用”的构件? 第三,软件工程从来就没有说过将会“消除bug”的问题。恰恰相反,软件测试理论的研究一再告诉人们,“消除bug”即使对于最简单的程序也是及其困难的。而“程序设计方法学”等基于形式化验证的程序正确性理论的研究,也在实际应用中遇到了重重困难(当然,这不说明这方面的研究没有价值)。 第四,软件工程中人的因素。作为复杂的有组织的人的活动,软件工程中对人的管理也是非常突出的一个方面。这对于大多数管理人员来说,似乎更为熟悉。然而,对人的管理和技术的进步本身就不可完全割裂。面向对象和面向构件的方法学,对软件开发组织结构、软件过程的影响即是最实际的例子。 第五,从软件工程的历史上来看,这是一个年轻和快速发展地学科,是在实践中不断完善地学科。 综上所述,软件工程既不完善也不能解决所有问题,但这不说明软件工程是无用的。正是在不断完善和发展的过程中,问题才会不断被发现和解决,这就是软件工程发挥其效能的真实方式。 [攻擂方:stevekxs,4月4日 11:28]: 尽管1+1=2,但是人们现在追逐的是1+1>2。 正是因为软件在开发的过程中没有一个很好的系统体系作为支持,就像工业的发展是从劳动密集型向知识密集型转变过程一样。因此,软件工程可算是这一改变的工具。 所以我认为,软件工程的出现正是体现了,软件行业目前层出不穷的问题得以解决的保证!! [守擂方:Dill,4月5日 12:20]: [flybear]有谁能说,编译技术、高级语言、操作系统、网络等的发展不是软件工程发展的一个有机组成部分呢? 我就说:当然不是!这是工具,就象泥水匠手里的砌刀,是搭建高楼的脚手架,组件、平台也不是软件工程的组成部分,它们有如是砖头、水泥、钢筋。 你们说软件工程是构造软件系统的方法。 可有谁听说过砌刀、脚手架、砖头、水泥、钢筋是搭建高楼的方法?它们预示着一些方法,但不是方法的组成部分。 同样,编译技术、高级语言、操作系统、网络、组件、平台也不是构造软件系统的方法,它们预示着一些方法,包括软件工程,但不是软件工程的组成部分。 [攻擂方:easywork,4月7日 10:31]: 软件工程是方法、工具和技术的系统应用,以实现所规定的需求和目标,获取一个有效的、高效的软件系统。 软件工程是一个项目成功的必要条件,但不是充分的。项目成功的三个主要条件包括:项目管理的成功、软件系统工程的成功 和 软件工程的成功。 项目管理对整个项目负责,并有分配资源的权力。 软件系统工程确定整个项目宏观的技术途径,确定技术方面与客户的接口,并验收最终的软件产品。 软件工程负责软件设计、编码和测试,一般情况下,负责软件配置项的开发。 [攻擂方:Larryluo,4月18日 12:23]: 我们有必要搞清楚什么叫软件工程,抄一段定义:“软件工程学就是建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”,包括3个要素:方法、工具、过程。 [守擂方:Dill,4月7日 16:22]: 经过多年的发展,“软件工程”(Software Engineering),有其科学、准确的定义,在辩论中,我们双方都应该遵循这个定义。 软件工程的出现不是一个偶然的现象,而是软件领域为解决已经出现的“软件危机”问题而发展起来的新的领域——攻擂方:flybear 早期的软件开发没有系统的方法可以遵循,基本是一个个体化的过程。但随着软件的数量不断增长,需求日趋繁多,开发成本急剧提高,维护难度也越来越大,而失败的软件开发项目却屡见不鲜,导致大量的财产流失。“软件危机”就这样被提出来了:1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”(software crisis)这个名词。 概括地说,软件危机包含两方面问题: (1)如何开发软件,以满足不断增长,日趋复杂的需求; (2)如何维护数量不断增长的软件产品。 具体地说,软件危机主要有以下表现: (1)对软件开发成本和进度估计不准,成本超出预算、进度严重超期的项目时有所见; (2)开发的软件系统无法满足用户的要求; (3)质量不可靠,Bug一大堆,Patch一个接一个; (4)可读性差,不利于修改扩充; (5)软件的维护跟不上硬件环境和用户需求的变化,可维护程度非常低,产品退化速度快; (6)软件开发需要投入大量、高强度的脑力劳动,成本非常高; (7)软件开发生产率的提高赶不上硬件的发展和应用需求的增长。 为了探寻摆脱“软件危机”的对策,北约的科技委员会提出了“软件工程”的概念,并在之后的几十年中不断完善和提高,以下是“软件工程”的定义: 软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。 软件工程包括两方面内容:软件开发技术和软件项目管理。 软件开发技术包括软件开发方法学、软件工具和软件工程环境。 软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。 三、 作用 [攻擂方:马踏飞雁,4月4日 13:51,Forsberg,K.《可视化项目管理》]: “模型可以澄清相互间的关系,识别出关键元素,有意识地减少可能引起的混淆。” [攻擂方:flybear,4月1日 10:44]: 偶的问题是,什么样的软件工程有用,什么样的没用。没有软件工程是不行的,但有了软件工程不一定行。 [攻擂方:lookmezh,4月3日 17:18]: 软件的作用和软件工程的作用到底是什么呢?自1959年第一台晶体管计算机问世到70年代微处理器的问世,一种新的力量正在改变世界,这就是计算机时代的到来。与计算机时代一同出现的就是软件,因为计算机硬件只是载体,只有其中看不见摸不到的软件才起到巨大的作用。随着计算机时代到来,人们开始习惯在商店购物用银行卡支付,习惯了在网络阅读当天发生在世界各国的新闻,习惯了将照片存到计算机里并刻成光盘。既然这种强大的力量在改变着人们的生活,因此人们也要与它进行更多的接触。税务机构通过金税实现报帐,公安机关通过网络通辑联合专案,就连学校都建立网上学校。随着人们与软件的深入接触,软件工程也逐渐大众化,标准化。各种各样的软件规范也随之诞生。正如我方所谈到的:从软件工程的历史上来看,这是一个年轻和快速发展地学科,是在实践中不断完善地学科。 [攻擂方:花式九球,4月20日 21:13]: 软件工程最重要的功能是在于规范流程。 1、 满足需要? [守擂方:sxj236,4月3日 11:49]: 软件工程的作用是什么?做软件开发又是为了什么呀?业主和承约商的合作,花费那么的资金和时间来做系统集成又是为了什么?其实答案很简单,就是为了满足客户的当前以及未来几年的需要,要不我们还要软件开发干什么呀?客户要的是开发的产品能够给他们带来业务上的利润提高和简化工作程序的复杂度。 [攻擂方:lookmezh,4月3日 17:18]: 根据sxj236的描述,我们可以作如下推论,当然是按守方的逻辑。 软件工程的作用是什么?答案:满足客户需要。 软件开发又是为了什么?答案:满足客户需要。 业主和承约商投入人力时间资金为了什么?答案:满足客户需要。 单单一句“满足XX需要。”就已经说明这很不容易了。试想一下,研发汽车的公司为了什么要生产汽车?为了满足客户需要。家俱厂为什么砍树来生产家俱?为了满足客户的需要。养鸡厂的作用是什么?也是为了满足客户需要。可见,以一个看似简单的回答来解释所有的问题,本来就是错误的。 [守擂方:sxj236,4月3日 20:57]: 说白了,不管是软件工程还是软件开发还是项目的执行,对于一个正常的企业来说最终的目的都是在如潮的商场中找到自己的价值来获得一定的利润。难道不是吗??就算是软件工程还是项目的开发或者新产品的面世最终的目的难道不是为了满足他所在的客户群的最大利益吗??如果连最起码的客户需求都不能满足,我们还开发什么新产品,还做什么软件工程和软件项目。 [攻擂方:flybear,4月3日 21:56]: lookmezh的说法只是说明需求是个非常复杂的事情,并没有说需求是不重要的。需求工程何尝不是软件工程的组成部分? [攻擂方:lookmezh,4月4日 8:14]: 我想我们不应该把视线停留在软件是干什么的。 [守擂方:sxj236,4月4日 8:44]: 其实这个话题我们没有必要再讨论了,大家都知道我们所做的工作最终都是为了满足客户的需求,试想我们软件工程项目的目标是什么?连目标都不能实现的话,还提软件工程做什么??站在客户的角度想一下,问题就很清晰了。 2、 bug问题 [守擂方:steveli2008,4月1日 20:48]: 想象看,现在那么多软件企业或公司都声称我们的产品都遵循软件工程规范,那产品怎么会有bug呢? [攻擂方:lookmezh,4月2日 14:26]: 软件工程的规范的作用不是减少BUG,提高质量。就像法律条款的增加不能减少违法的活动一样。遵循软件工程的规范是为了让软件开发的清晰明确,减少其发展的不确定性。 [守擂方:sxj236,4月3日 11:49]: 如果我们团队开发的软件一大堆的BUG,客户根本就没有办法使用,我们还要软件工程干什么,这不是行同虚设吗?现在我们也遇到了这样的问题,我现在负责的是医院住院系统的软件开发,4月1日开始试运行,可以说是一大堆的BUG。 [攻擂方:flybear,4月3日 21:56]: 软件工程从来就没有说过将会“消除bug”的说法,并不意味着软件质量的问题不是软件工程的重要内容。无论是软件测试技术、软件质量保证、需求工程,没有那个不是为提高软件质量服务的。 [守擂方:sxj236,4月4日 8:44]: 软件工程在中国发展到今天,大家作为行业人士都应该知道目前的状况,特别是在软件开发的流程当中相信各个公司都存在着一定的问题,流程的不合理就直接导致软件质量的下降,软件开发的过程当中肯定就会有bug的伴随发生,对于软件工程的提高质量这个说法,在整个过程当中你就要减少这些bug的出现,不要都等到软件测试的时候才想着去消除bug。那样只会造成一个瓶颈,在我几年的经验过程当中消除bug,要在整个开发的过程中,在最初的调研中就要详细,做好一个清晰明确的计划。 3、 沟通问题 [守擂方:digime,4月4日 14:18]: 任何事物都有它的两面性,如果他的好的一面能够发挥着重要的作用,那么它的存在就是有意义的,如果它好的一面不能发挥重要的作用,或者因为其他的因素不能得以发挥很好的作用的话,那么它的存在就会阻碍着发展,这个时候它的反面就影响着它的正面。 见到过不少的企业在作规范化,实施软件工程,以前一个项目他们能够很快的开发并交互,而实施软件工程之后,工期老是延迟,公司里面一团糟。如果说软件工程是能够发挥重要作用的话,那么这些公司就是还没有到应该实施软件工程的地步,或者实施过程出现了问题,但是怎样把软件工程能够成功的应用于我们的项目当中呢,买鞋不能削足吧。 对于软件公司如果按照规范实施了软件工程,反而起不到好的作用的,那么要软件工程还有什么用? [守擂方:sxj236,4月3日 11:49]: 如果在软件工程中我们没有做好团队成员以及和客户之间的沟通,我们还要软件工程做什么? [攻擂方:lookmezh,4月3日 17:18]: 如果没有好的成员,没有好的沟通,那么软件工程做的再好也没有用。大家知道,使一个项目失败的因素有几百个,时间因素,地点因素,人物因素,环境因素等等,任何因素都可以导致项目的失败,难道对方认为软件工程是万能药吗?可以改为时间因素,地点因素,人物因素,环境因素? [守擂方:sxj236,4月3日 20:57]: 当然在一个项目中失败的因素是很多,来自各方面的因素都能导致项目的失败,可是象您所说的时间因素、地点因素、环境因素,这些可是都在你最初做项目调研时就应该做好的事情,在做风险的时候您应该考虑到这些事情的发生,试问如果这些风险你在开始的时候没有预测到,这个项目的实施是不是很被动,是不是从开始就注定了是一个失败的项目??您的老板又怎么会同意您去和客户签订这么大风险的项目??既然签订了合同,时间、地点、环境在合同中就都已经注明了,难道这还是一个项目失败后给自己找的借口吗?? 而沟通这个因素始终贯串在项目的始末,沟通不单单是和客户进行,还要在项目团队、以及公司企业的上层领导中进行沟通,试想如果这些必要的关键的沟通都没有做好的话,你怎么又会在企业团队内部中达成一个清晰而又明确的目标那?没有达成一致的目标可想这个软件工程项目又怎么会能够满足客户的需要,又怎么会做成一个成功的软件项目那? [攻擂方:flybear,4月3日 21:56]: 作为一个整体,软件工程涉及软件开发的各个方面。其中自然也包含团队成员以及和客户之间的沟通,而且为沟通提供技术和方法的支持。 [攻擂方:lookmezh,4月4日 8:14]: 如果说上一段落是对方对软件工程的认同,那么这句话更好的证明的这点。对方已经谈到,做软件项目要分阶段,如项目调研;做项目要有风险管理和沟通管理等。这些都是软件工程所要求的。特别是对方提出,如果没有按软件工程的规范来做,将导致项目的失败。可见对方不但认同的软件工程存在的必要性,还认同了其重要性。 4、 金字塔 [攻擂方:马踏飞雁,4月4日]: 有了软件工程不一定可以建起高耸入云的高楼,但是没有软件工程是一定不能建起稳固的高楼! 软件的架构就犹如金字塔的地基,没有完善或至少是理论上的正确的架构可言如何去实现,如何能成为产品,天方夜潭罢了。 软件工程可以使开发更明确,过程更加可控。只是用得好不好就另当别论了。 [守擂方:Dill,4月5日 12:19]: ??——现在谁还在建造金字塔? 巴比伦塔,据19世纪末期的考古学家科尔德维实际的测量和推算,塔基边长约96米,塔和庙的总高度也是约96米。 多占地方啊!试想,我们的地球家园,有多大的面积,能建造几座金字塔? 现在谁会放弃用钢筋水泥建造垂直建筑,而去建造金字塔呢? 谁又需要软件工程构造的金字塔塔基呢? [攻擂方:lookmezh,4月5日 16:45]: Dill也许是一个好的地球关爱者,知道金字塔会占用很多地。也许这些地用来种粮食或种水果可以让人们进入小康水平。那是否我们再讨论一下长城建造是否用了太多的砖,或者根本就是浪费地球资源呢? [攻擂方:stevekxs,4月5日 13:14]: 之所以人们会认为金字塔的土地使用率太低,是因为在现代工程技术的支持下,人们拥有了合理利用土地的理念。我们当然不愿意再浪费一村土地!同样,怎样能够使软件行业的建设更加合理有效,必然需要一套更加先进的理念来加以支持,这就是软件工程存在的必要性,不是么? [攻擂方:马踏飞雁,4月5日]: 工程技术水平再高,也不能建出空中楼阁,就连倒金字塔都很难建出,这不就是一个很好的反例么? 软件行业的建设需要合理先进的理念,更需要不断完善的软件工程系统做坚强的后盾! 之所以举这个例子只是想要证明没有坚实的理论基础就犹同没有地基的高楼而无法实现,软件工程的系统架构越是合理可靠,再想向尖端发展不是就相对简单了么? 用不到软件工程,和软件工程没有可是两个完全不同的概念! 无论是建金字塔还是建高楼,都需要稳固的地基。我方认为,软件开发中遵守软件工程就是保证软件的地基牢固。 四、 效果 [守擂方:camer,4月17日 18:59]: 软件工程到底提高了软件多少成功率? 另外在你身边的项目中,软件工程实施成功的又有多少? 在软件开发中,工程的因素大还是人的因素大?“人月神话”就是按照所谓工程学的思路得出的,但是人月神话并不存在,软件工程也不是解决软件开发问题的“银弹”。 软件开发对人(甚至非智力因素)的依赖已经和传统的资源转移型有本质的区别。。。人不是机器,应该更多的重视人的因素,而应该轻视工程因素。。 关注人本身!找寻软件开发的“银弹” [守擂方:dorothy,4月25日 22:57]: 如果这个世界上真的有一种能够医治百病的良药,那么就不会还有那么多陷于痛苦中的人;如果软件工程真的是能够适用于任何类型的项目的良方,世界上项目的成功率就不会那么低,就不会还有那么多失败的项目。 据统计“根据Standish Group CHAOS报告中描述2000年全球有26%的软件项目成功完成了。那也就意味着有多达74%的软件项目失败了!失败的数字令各种规模的软件公司感到同样沮丧。在大型公司里的项目成功率仅仅为9%。在规模中等和小型的公司成功的比例分别为16.2% 和28%,成功率还稍显高一些。” 谁能说这些失败的项目,没有应用软件工程呢? 任何一种理论都有一个适用的范围,都是在一定时期一定条件下一定范围内才能够成立的。 如果有一个定义,包含了世界上最美好的东西,而且定义的永不过时,那就是软件工程,“采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而怎么正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程”。如果你只看重定义的后半部分,那么任何好的方法都可以归入软件工程了 扪心自问,你真的觉得软件工程将是这样一种永胜不衰的方法吗? [守擂方:Dill,4月5日 12:20]: 有没有用当然不是绝对的。 中国古代有一种建塔方法,一边建一边堆土,土随塔涨,塔建好后把土扒开,塔成矣。这种方法耗费大、效率低,早没人用了,所以说没用。 许许多多技术的出现,改变了现在的软件设计方法,软件工程也是其中之一,但它就象堆土建塔一样,耗费大、效率低,所以没用。 [攻擂方:lookmezh,4月5日 16:45]: 为什么使用软件工程比喻成堆土建塔,而不是用软件工程比喻都江堰工程呢?如果他们的相同点是耗费大、效率低,那么任何人类伟大的工程不都是耗费大、效率低吗?那我们是否可以得到如下结论,软件工程像人类伟大的工程一样,造福人类呢? [守擂方:Dill,4月7日 16:22]: “软件工程”,本来就是为了摆脱“软件危机”而提出的对策,值得我们注意的是:这只是一种愿望。 三十几年过去,我们来看看这种愿望是否已经实现,对策是否已经找到: “自从软件工程概念提出以来,经过30多年的研究与实践,虽然‘软件危机’没得到彻底解决,但在软件开发方法和技术方面已经有了很大的进步。” “今天,尽管‘软件危机’并未被彻底解决,但软件工程30年的发展仍可以说是硕果累累。” “软件工程给我们带来了前所未有的智力上的乐趣,我们一旦掌握了软件工程的基本原理,我们就能象走路、骑车、游泳、说话一样自然地运用,用来理解软件开发中的现象。但我们每个企业的发展的顺流逆流,却似乎有着它本来的走向。” …… ——愿望而已!30多年的发展,还是没有解决问题。 软件工程在短短时间里迅速发展,成为推动软件产业发展的动力,吸引了成千上万的科学家和热血青年投身其中,创造了大量的就业机会,并造就了一大批百万、亿万富翁,软件工程成为他们释放聪明才智的绝佳场所——软件工程有用。 软件工程无法兑现自己的承诺,它解决不了软件危机的问题——软件工程没用。 他举起了猎枪,瞄准一头奔跑的麋鹿 “砰”地一声枪响,子弹出膛了 麋鹿早跑没影了 正在追赶麋鹿的豹子,一下子撞到了枪口上,倒在了血泊中 ——好一个猎手! [攻擂方:stevekxs,4月7日 18:53]: 三十年的应用给我们带来了很多东西,人们从中也总结出了不少可以借鉴的经验以及应该避免的错误,也许你觉得这个进展太慢了,但这已经不是有用没用的判断了,而是一个怎样发展更加完善的讨论了! 五、 适用场合 [守擂方:digime,4月1日 10:38]: (不采用软件工程),不拘一格,迅速而机灵,简单而实用。 [守擂方:steveli2008,4月1日 20:48]: 软件工程至少在咱这代人没有用处或者用处不大,因为它根本不算完美的软件工程,除非它象1+1=2那样让人信服。 [守擂方:sxj236,4月3日 20:57]: 计算机的发展的确是给人们的生活带来了极大的方便和简化,可是你别忘了,中国有多少人口?中国有多少人口生活在农村?中国还有多少人还不知道什么是计算机?中国还要多少人口根本就没有听说过软件、什么是软件工程?? [攻擂方:lookmezh,4月4日 8:14]: 对方提到中国的人口数量大,分布广,IT程度不同,这是事实。但这与本次辨论的题目离的是否太远了?如果我没理解错的话,守方应站的立场是:在软件开发中,软件工程是没有用的。而不是软件对中国是否有用,或者软件是否应该以客户带来利益最大化为目的还是以为社会带来变化为目的。 [攻擂方:Larryluo,4月16日 15:42]: 软件工程这个概念所包含的内容很多,有技术方面的,有过程方面的,也有管理方面的。如果这些东西都不用,那我们用什么来做软件呢? 就算我们不使用别人总结出来的一套方法,我们要做软件,总得自己创造出自己做软件的技术和方法吧,难道创造出的这些技术和方法不是软件工程范畴的内容吗? 我认为,不是软件工程有没有用的问题,而是别人总结出的软件工程知识的哪些东西适合自己使用,哪些东西不适合自己使用。 [守擂方:camer,4月4日 14:41]: 1、小项目不需要软件工程:对于一个只需要2个人,一个月以内的软件项目,软件工程的确没有用。。。 2、可控的里程碑不需要软件工程:按照项目管理的方法,把项目目标分解在“2个人,一个月以内”,那么软件工程的作用又在什么地方呢? 3、软件工程太多非目标的工作内容:软件工程的多阶段,多角色增加了在沟通成本,降低了信息的质量,主要通过纸介质的方式传递信息,太多的文档,实际的价值并不大,用得不当,软件工程弊大于利 4、软件工程不是必需的:软件工程也不是让软件项目成功的“银弹”,不是项目成功的必要条件,如果有另外更合适的方法,完全可以抛弃软件工程方法论 5、系统化思维更重要:软件工程是一种思维方式,包含了按照系统化、工程化的概念去对待日益复杂的软件产品开发,这种思维方式的重要性远远大于软件工程方法本身。。。 [守擂方:Dill,4月24日 23:14]: 我们尝试作些量化: 1个人做1个项目,大多数人都认为,软件工程没用,或者得不偿失; 那么,10个人做10个项目、100个人做100个项目呢? 这里肯定存在一个临界点,那这个临界点在哪里? 相信这样的分析我们在实际工作中都会碰到。 [fuxiarong,4月21日 13:51]: 说有用或者是没有用都是不恰当的,根据我自己的了解任何的事情不把它放在一个地方或者说是给他一个前提的话都是没有用的,这个问题就像这样一个问题 那就是钱有用吗?谁能说钱没有用或是说钱有用呢? 六、 看看Bill [攻擂方:Larryluo,4月19日 16:28]: 一个骨骼清奇、天赋异禀、百年难遇的武林奇才,其天赋比张三丰强上n倍。 他自恃自己是个天才,根本看不起其他的武林门派和招数,“降龙十八掌”?幼稚!“六脉神剑”?可笑!“九阴白骨爪”?小孩的玩意! 于是他从来不去也不屑于去学各门各派的武功,想着“凭我的天赋,我还用练什么武功吗?练这些武功的人”哪是我的对手。 一天,他想我这么一个武林奇才,不称雄武林也太对不起自己了。说干就干,打点好行装,踏上了与各派武林高手切磋的行程。。。 你认为他能称雄武林吗? [守擂方:Dill,4月5日 12:20]: lookmezh阐述了计算机和软件的发展历程,可遗憾的是,在这里面我们没有发现软件工程的痕迹。比尔盖茨用MS DOS征服了全球,没用软件工程,后来用了,生产了Windows。啊,Windows,如何评价它?有如七寸金莲的裹脚布…… [攻擂方:lookmezh,4月5日 16:45]: 谁说比尔盖茨开发MS DOS时没有用软件过程?是他没有用到,还是对方不知道呢而假设的呢?以下是一段比尔盖茨开发MSDOS的报导: “1980年7月,盖茨事业上的又一重要时刻到来了。当时,IBM公司正在设计自己的个人计算机,希望盖茨能帮助设计与之匹配的软件。IBM公司派出数名代表赴西雅图与Microsoft公司商恰此事。盖茨非常正式地接待他们,可是第一次会晤没有什么结果。同年8月,两家公司举行了第二次会晤。IBM公司的代表在会谈时向盖茨透露了关于设计制作IBMPC这一高度机密的计划,并聘请他出任IBM公司的顾问。盖茨答应起草一份关于可运行微软软件的一种微型计算机设计方案的报告。 “IBMPC机将是16位机而不是8位机,而那时16位的软件尚不存在,因此设计全新的操作系统势在必行。盖茨开始设计MSDOS。他写出了报告,并与IBM公司签定了合同。盖茨作为非IBM的正式成员而与前者如此紧密合作,这在计算机界尚属首次。” “盖茨答应起草一份关于可运行微软软件的一种微型计算机设计方案的报告。。。。。写出了报告,并与IBM公司签定了合同” 从以上两句可以看出,BILL在与IBM合作开发MSDOS时就已经采取标准化的开发流程,他认真的写可行性报告,并不断的汇报。这已经是软件过程的雏形,因为软件这种行业正在呱呱坠地,所以软件工程也逐渐长大。这是不可避免的事实。 再看一下对方提到的这句话:“生产了Windows。啊,Windows,如何评价它?有如七寸金莲的裹脚布”。如果不在Windows的平台上,哪有这个论坛的存在?哪有这个辩论的存在?请问,MYPM网友有几个是专攻UNIX的?有哪个上网不使用WINDOWS呢?对方可以称WINDOWS怎么不好怎么不好,可是另一方面却不得不依赖于它,这是否表里不一呢? 七、 切身体会 [守擂方:Dill,4月24日 23:30]: 读书时,根本不知道有软件工程理论的存在,认为软件就是一个指令的集合,软件开发完全就是个体行为,软件开发方法也是由老师口传心授的。虽然我学的不是计算机专业,但在那时,即使有计算机专业的同学向老师提及软件工程的思路,老师也会回答:你的想法太尖端了,现在还用不上——当时就算搞研究的大学教授,也无法认识到软件工程的重要性。 那我们是怎么做软件的?老师说,要构思,要设计,要有整体思路,那时的系统分析通常叫做总体设计,然后,就画框图,要模块化、抽象出子程序、按照框图写程序,程序调通了,软件就完成了。 Bill所接受的教育比我还早几年,虽然美国的教育和行业发展当时比我们超前了许多,但我认为,他所接受的也不外乎这些。 显然没有系统地接受软件工程的理论教育。 因此,本人断言,比尔盖茨开发MS DOS没有用软件工程,有的只是我前面所说的口传心授的、个体的开发方法和过程。 没错,这些东西是体现了软件工程的一些思路,但被你捡到篮子里的东西,不能说这本来就是你的,而应该说软件工程是在这些方法基础上的总结。 后来由于工作的机遇,毕业后就接触了不少有志于软件应用的人,他们给了我很多指导,从用户界面、总体设计、开发方法到具体的实现、代码优化,还是口传心授。当时代表计算机应用发展主流的《计算机世界》讨论的也就这些,根本看不到系统化的方法论。 很多年,我就是这么做软件的,直到我离开软件开发的岗位。 等我再回来主持软件开发工作,微软的东西已经有了控件、有了层次、有了结构化,软件工程的管理方法有了用武之地。应该说,从技术上,软件工程的管理对象和管理过程有了合理的映象。 但这时候,面向对象和软件工程之类的资料还是很难觅到。 一个偶然的机会,碰到一位老者,谈起我开发管理中的困惑,不料他哈哈大笑,笑我空入宝山,白白背着一身财富,不知道使用。 在大学时学过运筹学,其中的线性规划和图论是我仅有的两门得了优秀的课——用的就是这个!经过他的指点,我找出了其中的联系,也把相关的方法运用到了具体的工作中。 直到后来找了一些更有针对性的书,参加一些相关的讲座、讨论,还有灌水,才逐渐形成和接受了软件工程系统化的思路。 闲时,翻出一本大学时的闲书《管理的数量方法》,其中的一节:进度表应用问题,居然完全包含了Project(软件)的思想,让我狂晕! 可惜,这一本30几万字的书里,找不到任何“软件工程”的字眼。 软件工程的理论方法,只是运用于软件项目的众多有效的管理方法归纳到一起而形成的,它们在软件工程理论和方法存在之前早已存在,而不是软件工程所独有和固有的。 很多人,包括我、我的老师,可能也包括Bill,在前期,他们在运用这些方法时,根本就不知道软件工程的存在,那么,怎么能说他们运用的是软件工程呢? [守擂方:Dill,4月24日 23:14]: 《没有银弹》——查伯尔希尔预言:“没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。” 这句话就是针对软件工程的,1986年。 “现在,有可能,我们可以在软件生产率上取得逐步的进展,而不是等待不大可能到了的突破”——1995年。 又十年过去了,这个进展如何?软件工程能令人信服吗? 八、 不断完善 [守擂方:sxj236,4月3日 20:57]: 软件工程在中国还没有标准化,还没有规范化?在它的发展过程中还有很长很长的路要走!!不要忽视它的客观环境,就是我们这个正在成长中的社会主义初级阶段的基本国情! [攻擂方:lookmezh,4月4日 8:14]: 很高兴对方能够赞同我方的观点,并提出:软件工程还有很长的路要走。这说明对方已经承认的软件工程存在的必然性,而且希望软件工程能在中国的客观环境下越来越规范,越来越发挥效果。 [守擂方:sxj236,4月4日 12:29]: 你所提到的正是因为软件在开发的过程中没有一个很好的系统体系作为支持,是的在中国目前的状况来说软件行业还真的是没有一个全面系统的体系,这是我们的国情所决定。我们的起步比较晚,我们还有差距!就目前的情形来说要想利用软件工程这个工具来改变中国的现状还有些困难! 既然是工具,那么它就是一个使用和执行的手段,它并不能解决我们目前所遇到的所有问题! 软件工程的出现并不能真正解决目前层出不穷的问题! [攻擂方:stevekxs,4月4日 13:56]: 可能在实际操作上我了解得不多,但是可以肯定的是从软件业发展的趋势看,从理论上加以体概念化和系统化是必然的,这也是软件工程的依托。当然了,任何事物都有它的两面性和它生存的环境,对于这方面的工作可以说是必修课,怎样利用和是否可以利用得好的确是个难题,但这显然并不能成为软件工程无用的理由。 [攻擂方:马踏飞雁,4月5日 15:19]: 软件行业需要规范,需要合作,那就需要合理的标准,统一的规范! 中国的软件行业需要发展当然就需要有统一的标准,难道十年之后,中国的软件业仍然是手工作坊式的管理发展,永远谈不到什么合作开发,永远是这个企业开发过的项目,另一个企业还在那里兢兢业业重新开发;或是即便是合作谁都看不懂谁的程序,仍然是一团糟,还不如自己开发。这些都需要都统一、成熟的系统理论,可控工程理念,统一合理的标准,这不就是软件工程存在的必要性么? [攻擂方:sukevin,4月19日 9:39]: 当然有用,否则为什么会出现,认为无用的是因为还没认识到。 九、 结束语 我认为,作为第一个辩题,应该先拎出行业的总纲,而不宜讨论太具体的问题。 经过近一个月的论战,辩论擂台拉下了帷幕。相信盟友们与我有着同样的体会,虽然辩论还不够深入,但这是个好的开始,通过辩论,我们更深入地理解了软件工程,作为一个从业者,我们更清晰地认识到肩上的重担,软件工程还有很长的路要走,让我们携起手,同心协力打造一片蔚蓝的天空! 感谢项目管理者联盟,为我们提供了沟通交流的平台; 感谢IT版的版主团队,是他们极力促成本次辩论; 感谢易风盟主,是他敦促我把辩论内容整理成文; 感谢各位盟友的热情参与。 感谢王春来先生,我引用了他《“巴别”通天塔之谜》中关于通天塔的描述,并因为论证的需要挪揄故事的含义,在此表示歉意; 感谢中国信息技术论坛《AKA 杂志》的waterbird,他的《软件工程综述:软件、软件危机、软件工程》为我提供了论证的素材,为了论证的需要修改了部分文字,一并表示歉意。 在本文的整理过程中,对辩友的发言,修改了少数的文字,有不妥之处欢迎指正。 希望大家就软件工程的相关问题继续深入思考、充分讨论、广泛交流、多多灌水。 辩论原贴 http://www.mypm.net/bbs/article.asp?titleid=27011&ntypeid=5005
|