软件产业已经进入成熟期,影响软件产品与应用的关键因素是成本与质量。借鉴国际软件巨头们的软件开发与实施的成熟经验,通过关注软件工艺的持续改进,强化软件产业链条分工,将可以从实战层面克服当前制约中国软件

业竞争力的诸多问题。

汪须忠,美国科诺技术公司董事长、CEO,兼科诺(北京)技术有限公司总经理。拥有美国佐治亚大学计算机科学硕士、北京化工大学代工系统工程硕士和计算机应用学士学位。

他从事计算机软件的技术研究、产品研发常理与客户服务近20年,曾为数百家北美、欧洲、日本的大型企业应用软件的技术咨询服务。

当前的软件业竞争格局,迫使中国软件业再一次进入反思,到底软件行业目前处于什么发展阶段?未来应该向什么发展?当今软件行业问题的解决方案到底在哪里?

要回答这些问题,我们应该先从产业的发展规律上对比学习,然后才可以前瞻性地看到未来软件行业的发展方向和趋势。

产业阶段性分析

产业通常都可以分为婴儿期、青少年期、壮年期和老年期四个阶段。当前全球的软件产业正处于壮年期,它期待通过软件开发工艺的创新,来获得长期稳定的发展。

一个产业,一般可以分为四个时期。每一时期都有其不同的特点与主要矛盾,谁有了解决主要矛盾的方法和产品,谁就掌握了本产业在这一阶段发展的金钥匙。

第一个产业阶段为婴儿期。在这个阶段,事实上整个产业还没有真正的形成,而仅是以某一形式与其母产业结合在一起,并且慢慢从母产业中分离出来。这个阶段的主要矛盾是新概念的有与无。一个企业如果有一个符合未来产业发展远景的新概念,必定在媒体的炒作下而闻名。

第二个时期为青少年期。在这个阶段,产业开始形成规模,技术日新月异,公司如雨后春笋般出现,产业经营处于暴利阶段。这个产业阶段的主要矛盾是有没有新技术,谁掌握了新技术,谁就是“武林盟主”。

第三个阶段为壮年期。产业所需技术已基本成熟,分工越来越细,产业进入稳定持续发展期。产业链已经形成,公司经互相兼并,在产业链中都已找到自己的位置。因为技术不再是某几个公司的专利,在大家大打价格战之后,也已无暴利可言; 所以这个阶段的主要矛盾是“新工艺”——只有通过工艺的不断创新,才能降低成本、提高质量,才能在“价格战”中取胜,获得长期稳定的发展。

第四个产业阶段是老年期,俗称“夕阳工业”,就像某些制造业。在这个阶段,技术已经非常成熟,工艺也已无太大的改进空间,于是劳动力成本上升成为主要矛盾。“夕阳产业”总是向劳动力成本低的地区漂移。如今,我国已成了“世界制造中心”,就是因为我国的物美价廉的劳动力优势。外包、代工是这个阶段产业的典型特征。当然,新的更替产业在这个阶段的后期已经开始慢慢地萌芽。

目前,商业应用软件产业现在处于哪一阶段呢?在北美,应用软件作为产业出现于20世纪70年代末、80年代初(之前还不能叫产业),80年代末至今是新概念、新技术的爆发期,多种技术思想各领风骚三五年,在商业应用软件技术上,逐渐形成了.Net和J2EE两大阵营。随着技术越来越成熟,分工越来越细,基本上形成了操作系统、数据库、中间件和应用系统这样一个完整的产业链雏形。

所以,从全球角度来看,软件开发新技术风行的局面已经少见了,但软件产业还是“高级劳动力密集型”的手工作坊式生产,不管是软件产品开发,还是项目开发,都是靠人力的堆积来完成任务。生产效率、质量严重依赖软件开发者的个体素质,没有形成规模化效应。即使有些采用了软件工程思想,或ISO、CMM管理思想的企业,仍然以人日效率来计算软件开发的成本,软件生产的规模化、工业化效果还没看到。也就是说,在技术日新月异的同时,软件开发工艺(软件工程所研究的对象)并没有太大的进步。

按理说,当技术成熟之后,产业的发展就应该脱离了手工作坊式生产,而进入到工业化生产、自动化生产阶段,并且会出现软件生产工艺的苗头,但在软件行业,现在还看不到这一现象。

软件业需要工艺革新

软件工艺的实现需要一个过程。过程的正确往往是保证结果符合我们期望值得关键点。

软件产业的工艺是什么?它其实和传统产业的工艺没有本质的区别,它同样由生产过程、原料/零件配送流程、操作参数优化、公用工程等四个主要方面组成。

软件业需要工艺革新,首要的任务就是改变我们现有的软件的生产方式。我们要采用流水线自动化的生产方式,并且要如同传统产业一样工厂化的管理。现在,我们有很多的组织一直在做这方面的研究,也取得了一定的成果,比如CMM、ISO9001等。

我们必须优化应用软件的质量,而应用软件的优化,将体现在两方面:一是作为应用软件业务组成的惟一原材料,业务对象与业务对象间关系的优化。这就是业务组件的划分大小的优化。如果业务组件大了,灵活性就小了; 如果业务组件粒度过小了,其耦合度和组装成本就高了。所以,必须找到一个最优点。另一方面是优化客户需求中的业务流程。

要工艺革新,我们就必须解决原材料的来源问题。应用软件的惟一原材料就是业务组件。所以,我们必须能够完成业务组件的自动生成、自动配送。

同理,在应用软件里,有非常多的资源是可以公用的。比如处理操作系统间关系的支撑体系、处理和数据库间高效交互的技术体系,都是可公用的资源,这些资源,也就构成我们今天所提的“中间件”的概念。应用软件是企业管理活动的映射,在一定意义上说,它就是虚拟的企业。企业的管理活动一直在变,但是,随着它成熟度的增加,已经有一部分管理活动变得越来越规范,比如企业组织架构等。这些资源,在任何一个应用软件中基本都是同质的,也就是说,可以形式化成为我们的业务支撑体系,即业务通用平台进行公用。以上种种资源都不应该由应用软件集成商去完成其生产,必须由专业的产商来完成,这样才能够真正降低我们应用软件生产的成本。

以上四大部分构成了我们今天所阐释的软件工艺。今天的软件产业还非常年轻,虽然概念已经成熟,但技术还在不断发展。对于整个产业发展方向上的探讨,已经有了非常多的论证,而最为统一的观点就是软件需要工业化。当然,任何一个产业的工业化都是一个漫长而痛苦的过程。从成熟的产业来看,工业化真正完成的时间的标志点就是工艺的成熟。软件需要工业化,我们不能仅仅做出一条自动化的生产线,或者仅仅能够自动化的生产业务组件;这些仅仅是工业化过程中的一个点,而我们追求的应该是整个工业化的面的总体层次的上升,这就是要实现软件工艺。

然而,软件工艺的实现需要一个过程。过程的正确往往是保证结果符合我们期望值的关键点。所以,在如何顺利实现软件工艺的问题上,我们提出了“软件四化”的解决方案。

所谓“软件四化”就是构架平台化、组件业务化、编码自动化和管理工厂化。这四大部分既是独立的,又是相辅相成的,它们共同协作,完成软件工艺化的整体功能。其中,构架平台化解决的是公用工程的问题,组件业务化解决了产品优化策略的问题,编码自动化解决了产品原材料的自动化生产与配送的问题,管理工厂化解决了生产过程中的管理问题。将一个先进的工艺配以工具来辅助实现,这就是一个产业走向工业化、工艺化的过程。

国际厂商软件工艺化行动

从北美软件产业发展的一些新动向,我们仍然可以看出软件产业向工艺革命发展的苗头。

北美软件业正在将许多老产品的服务与二次开发转向印度等海外市场,其实质是北美软件业正寻求和酝酿着一场新的革命。这一革命,肯定会在最短的时间内转向以软件开发自动化和业务组件灵活组装为核心的软件开发工艺革命。面向服务和面向事件的构架等理念的提出,并不是一种巧合,而是业界发展阶段的必然。这次工艺革命可能在几年内将应用软件开发效率提高数倍,甚至数十倍。

软件开发自动化是多少年来无数人的梦想,但最多还只是停留在理论层次,在实用性上几乎都失败了。主要原因之一是技术还不成熟,在技术不成熟的时候谈工艺是奢望; 其次,大多数研究都是针对整个开发流程的某一点上的自动化,没有成链的自动化,不能产生太大的实际效益; 其三,工艺化改革必须是对先进工艺技术、优秀工程师经验的固化,所以,没有丰富的软件从业经验的积累,工艺化也将仅仅是想法,而不是现实。

如今,情况已发生变化,技术逐步走向成熟,具备多年从业经验的优秀工程师越来越多,软件工艺化这个梦想也就离我们越来越近。

1.SAP的做法

作为提出“管理软件是先进的管理理念”的始作俑者,SAP并没有沉醉在这个市场理念被世人所接受的狂喜中,而是非常明白传统软件开发的弱点。他们一直在潜心流程引擎和开发效率的研究,NetWeaver开发平台的推出,就是其开发工艺革新的开始。这显然是SAP的“核心”技术,不会作为产品销售,但其自身开发的产品成本与产品对不同企业、不同市场的适应性将大大改进。

2.Oracle/PeopleSoft的应对

PeopleSoft正在研制新一代People Tool,新一代的开发工具将流程技术与开发自动化相结合,虽然它有很大的历史包袱,但在开发效率与对变化的适应性方面都将有质的飞跃。甲骨文收购PeopleSoft后短短一、两个月,就开始将People Tool在易用性上的好处与Oracle的纯Java平台相结合,开始Oracle的新平台研发工作。

3.IBM和BEA

IBM和BEA在把个体的Java语言和开发工具能力推到极致之后,已开始面向应用系统的开发,提出了SOA等新的概念。当我们抛开这一概念的表象,应该可以看到,软件产业的发展正在从基础上出现分工的协作,未来的应用系统会越来越多地强调产业链的合作,那将是一场工艺化革命的前兆。

国际厂商已经在工艺方面醒过来了,做了很多工作,未来的企业及应用软件将是基于业务组件而随需组合的,其工艺革命所降低的成本将超越我们在劳动力成本方面的优势。

走整体工艺化道路

针对当前困扰我国软件企业的一些问题,业内人士已有过相关的探讨和研究,但要真正实现“上规模,上水平”,就必须打破软件工业化的技术、人才限制,从工艺化上进行突破。

一家著名的IT咨询公司的调查表明,困扰我国软件企业的主要问题表现在以下几个方面:企业经营者缺乏有效的管理手段,难以准确掌握并控制产品及项目的开发成本;研发部门苦于人员流动造成的开发文档、源代码及其他知识资源流失;项目经理苦于开发过程失控,使得产品的质量和交付期得不到保障;开发人员陷入修改黑洞,深入的技术研究和创新能力受损,员工满意度下降;项目计划和财务预算缺乏科学依据及可靠的模型支持。

1.外包不是长久之计。

对于国内软件产业的发展和出路,已经有过一些探讨和研究。比如学习印度模式,走外包之路。从企业发展的角度来看,外包是可行的、可参考的,但对于国家软件产业来说,外包除可以作为过渡性的行为之外,不值得学习,也不值得提倡。

首先,通过外包、代工的方式可以学习,但不可能实现超越。日本汽车业并不是靠外包、代工发展起来的,印度的BOMBAY永远不可能使美国的硅谷变成“鬼城”(Ghost Town)。

其次,从竞争优势的角度分析,与印度相比,中国在外包和代工方面已经没有太大的价格优势。我最近从美国公司给印度的单子看到,价格是17美元/小时,约合人民币140元,差不多是22400元人民币/月,这与当今国内软件企业接单价的2万元人民币/月已相差无几。加上印度工程师在语言上的优势,其实我们在外包代工方面的优势一点都不明显。而罗马尼亚等东欧国家在美国打出低于15美元/小时的报价,使得外包的价格战越演越烈。

再者,随着人民生活水平的提高,劳动力价格就会提高,凭一时的低廉劳力,不可能支撑国家一个重要产业的发展。这一点,从目前广东的“劳工荒”就应该清醒地看到。目前劳工集中的长三角地区,如果不改造他们的劳动密集型产业结构,未来几年也会重走广东劳工荒的旧路。

所以,我们要清醒地认识到,印度的软件产业外包模式是建立在“软件产业是高级劳动力密集型”这一假设之上的,而新工艺所带来的这种游戏规则的变化,可以将印度的模式在一朝一夕之间变得无关紧要,这种打击将可能是毁灭性的。毕竟软件产业才刚进入壮年期,外包、代工作为“夕阳工业”的典型特征,在这一阶段还不是主要矛盾,所以,随时都有“出局”的可能。既然我们在产业发展上已经是后来者,那么想要居上,就不能一味紧跟别人的脚步,一定要有新的突破。

2.CMM管理模式缺乏实用性。

与代工、外包相呼应的是建立规模化的软件工厂,用CMM的管理方式来管理软件开发过程。但工业化的管理方式对于可复制的制造过程非常有效,而软件开发更像是一个研究和设计过程,就不像制造过程那么有效了。所以,照搬CMM管理模式而产生实际效益的例子几乎没有。况且CMM管理模式的成本是非常高的。在中国当前公司规模都很小的情况下,实用性就更小了。

3.基于开放的标准,才有机会战胜垄断的强者。

从技术上讲,业务平台、业务基础件相当于在已有的应用服务器、中间件等业内格局上加入有中国特色或自己公司特有的技术标准(如自己的解释器),另辟一块市场出来。

在国外,大家更多地说“解决方案服务器”这样的思路,在一个世界公认的开放标准平台上,针对不同的业务提供和共享解决方案,以开放的态度解决问题,共同推进产业的发展和壮大,而不是人为设置某些技术壁垒。所以,那些试图制定自己标准的业务平台从一定意义上说,限制了中国软件企业国际化进程。因为这个行业的历史证明,只有垄断的强者才能制定标准,而开放的标准才可能有机会战胜强者。

4.中国软件业需从整体工艺化角度,谋求跨越式发展。

我们从产业的分析中发现,软件业当前的所有问题上升到产业高度来看,归根结底是成本(产量)与质量的问题,所以国家才提出要“上规模,上水平”。但如何上规模,如何上水平?也就是说,如何解决成本与质量的问题。现在业界的各种尝试都只是在某些点上寻找答案。

对于中国产业来说,应用系统的发展速度越来越快,单纯地靠人力堆积的方式远远无法满足用户的需求。而规模化生产,也历经了软件工程、ISO、CMM等阶段。其实,前面提到的各种尝试都是整体开发工艺改进的一部分、几个点。这些尝试都是有益的,能产生一定的效益,但点上的改进却满足不了应用系统复杂度的增加速度。如修路的速度总是赶不上车辆的增长速度一样。所以,要想打赢软件产业的国际攻坚战,必须跨越式发展——从整体工艺化角度出发,甩掉软件产业手工作坊式生产的帽子,打破软件工业化的技术、人才限制,从工艺化上进行突破。我们应该以先进的行业经验重新规划软件产业理论和技术布局,掌握话语权,引领国际潮流,这样才能实现中国软件产业真正的崛起。

(本文作者还将在后续文章中详细阐述“软件四化”这一概念,敬请关注。)

链 接

软件革命从传统产业中的借鉴

在传统产业发展史上,有一个后来居上的先例,那就是日本的汽车产业。日本汽车制造业并不是靠外包、代工发展起来的。二战后的日本经过十几年的发展后,各行各业元气恢复,但所有的工业还是受美国的支配,这时的日本急需建立自己的支柱产业。

当时的美国汽车业以汽车城底特律为代表,工业化程度很高,完全打破了手工作坊的生产,汽车业的生产效率第一次得到大幅度的提高。但是,日本发明了敏捷制造(JIT,Just In Time Inventory)这一集管理技术、生产工艺于一体的工艺革命,并以日本人特有的在细节上精益求精的精神对工艺的每一个操作参数进行优化、在零部件的质量上下功夫,把汽车工业化、自动化效能大大提高,实现了汽车制造工艺的第二次革命。而日本就是凭借第二次的工艺革命取代了美国在汽车行业的垄断,使美国汽车城底特律成了“鬼城”。

可见,工艺化生产不仅是对工业化的革命,更是一种深度发挥和产业阶段的更替,是一个自然规律。

所以,产业的发展,必然要从手工作坊式生产,进步到工业化、自动化生产,再进一步到工艺化革命,充分发挥个体的高技能和工艺化精益求精在效率、质量上的作用,从而让整个产业进入规模化的、高速的、平稳发展的新阶段。

传统产业曾经赖先进的生产工艺来解决产品成本与质量的问题。在传统产业的过程系统工程理论中,工艺的范畴包括生产过程、原料/零件配送流程、操作参数优化、公用工程等四个主要方面。传统产业对这几个方面进行改造革新,从而降低产品的成本和提高产品质量。

工艺解决的已经不是产品能否生产的问题。而是如何生产更为优质的产品,也就是说,工艺处理的已经不是在产品生产过程中的“能与不能”的问题,而是规模化产品和用户需求的“实时满足”的优化问题。所以,我们说,在工艺的实施过程中,产品必须是可优化的。对于产品的优化,一般表现为两大方面,一是生产过程的优化,二是产品零组件/原材料的优化。

我们现在软件业仍然采用非常落后的手工作坊的方式生产应用软件。劳动密集型产业中,产能的落后,成本的居高不下,质量低下等等问题让所谓的“高新”产业变得有点尴尬。所以,我们需要革新工艺,软件开发工艺就是软件产业实现跨越式发展的动力。(汪须忠)

转载于:https://www.cnblogs.com/vicker/archive/2006/01/11/314972.html

软件工艺的革命 [转]相关推荐

  1. 《软件工艺师:专业、务实、自豪》一3.7.2 软件工艺概念走向全球

    本节书摘来华章计算机<软件工艺师:专业.务实.自豪>一书中的第3章 ,第3.7.2节,[英]桑德罗·曼卡索(Sandro Mancuso)著 爱飞翔 译, 更多章节内容可以访问云栖社区&q ...

  2. atitit.提升开发效率---mda 软件开发方式的革命

    atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...

  3. 《软件工艺》目录—导读

    版权声明 软件工艺 Authorized translation from the English language edition, entitled Software Craftsmanship: ...

  4. 【读书笔记】代码大全34章:软件工艺主题

    这本书大部分讲的都是软件开发的细节,本章节讲的主要是从宏观角度讲解软件工艺. 控制复杂度 软件开发的精髓就是控制复杂度 降低复杂度的方法 将系统拆分成子系统 精心设计接口,尽量隐藏设计细节 避免使用全 ...

  5. 读书笔记:《代码大全第2版》软件工艺

    征服复杂度 软件开发的核心是降低复杂度 降低复杂度的方法 将系统拆分成多个子系统 设计抽象的接口,隐藏底层细节(抽象最能降低复杂度) 避免使用全局变量 避免深层次的继承 避免深度嵌套的循环或条件判断 ...

  6. ERP新平台促管理软件第三次革命(转)

    ERP新平台促管理软件第三次革命 今天,中国的管理软件市场是该高唱一首胜利普及的凯歌?还是在供需矛盾激烈碰撞下爆发一场轰轰烈烈的革命? 近日,金蝶国际软件集团携手IBM等众多合作伙伴,在北京举行&qu ...

  7. 软件隐喻的本质与模式

    1.引言 隐喻思维具有普遍性,是人类认知得以深化的前提之一,隐喻是丰富人类语言的有效手段. 然而,一直以来,对于隐喻的讨论主要限于语言学和修辞学,从而将隐喻狭隘化,局限化,使得隐喻在其他领域中的作用未 ...

  8. 《软件工艺师:专业、务实、自豪》一第3章

    本节书摘来华章计算机<软件工艺师:专业.务实.自豪>一书中的第3章 ,[英]桑德罗·曼卡索(Sandro Mancuso)著 爱飞翔 译, 更多章节内容可以访问云栖社区"华章计算 ...

  9. 《软件工艺师:专业、务实、自豪》一2.8 小结

    本节书摘来华章计算机<软件工艺师:专业.务实.自豪>一书中的第2章 ,第2.8节,[英]桑德罗·曼卡索(Sandro Mancuso)著 爱飞翔 译, 更多章节内容可以访问云栖社区&quo ...

最新文章

  1. php图片特效,php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
  2. oracle ebs fah,EBS常用表
  3. python对外发布的时间_Python如何进行时间处理
  4. select查询中@作用_SQL学习第四关:复杂查询
  5. C# 程序运行耗时测试类
  6. 头部数据人才24小时图鉴
  7. mysqlbinlog恢复误删数据
  8. 计算机一级b考试教程,全国计算机等级考试一级B教程
  9. 使用Visual Studio Code设置Python开发环境
  10. Java学习之路 之 使用技巧篇
  11. Javashop 支持全业务模式电商系统
  12. linux sdcc stc12c5a60s2,STC12C5A60S2单片机最小系统板20个参考例程分享
  13. 计算机找不到WPS云盘,wps网盘在哪里打开及如何应用?
  14. FTP Server端的使用
  15. QT 插入视频并实现循环播放
  16. 一、初识GVR ---- Android VR视频/Google VR for Android /VR Pano/VR Video
  17. 岩板铺地好吗_**岩板铺地「泉州泰亨石材供应」
  18. cloudflare解析域名+CDN
  19. 使用Linux命令删除Android的一些垃圾文件
  20. 苹果x怎么关机_苹果12怎么关机 iPhone12关机方法汇总

热门文章

  1. oracle的常见问题--听博森瑞老邱公开课整理的笔记
  2. 亚马逊erp是什么?大卖为何钟爱积加ERP系统
  3. 2017无盘服务器,2017支持多服务器分流的网吧虚拟磁盘软件
  4. 三大期指IF、IC、IH的区别
  5. 实验楼勋章、成就系统上线!这里有一份完整的收集攻略
  6. 怎么实现一个分布式kv系统 #1 local database
  7. kangle怎么找php.ini_kangle主机伪静态规则怎么配置
  8. c语言-20补码多少,C语言 关于补码的几个小知识
  9. 常见水果的日语单词汇总
  10. jq制作樱花飘落特效