第1章软件交付的今天“2000年左右我们进入了一个新的纪元全球化3.0。全球化3.0使得这个世界进一步缩小到微型,同时平坦化了我们的竞争场地。如果说全球化1.0版本的主要动力是国家,全球化2.0的主要动力是公司,那么全球化3.0的独特动力就是个人在全球范围内的合作与竞争,而这赋予了它与众不同的新特征。”——托马斯·弗里德曼奏响软件交付的爵士乐——Jazz平台实践者之路2相信很多朋友都看过托马斯写的“世界是平的”这本书。它向我们描述了全球化发展趋势对企业发展和竞争环境的影响,对团队协作模式的影响以及对每个人日常生活方式的影响。环顾与审视“平的世界”这个市场、资源和竞争的大网,全球化的企业开始调整其在全球范围内的业务发展策略,优化业务流程,整合资源配置,从而更加关注在全球化“战役”中的胜利,而不仅仅是一城一池的得失。与此同时,全球化趋势也对企业的业务灵活性提出了更高的要求,要求企业要有更快的市场反应速度、更灵活的业务模式和全球化的资源整合能力。平坦的世界强迫我们不得不去思考,全球化企业、全球化业务、全球化市场和全球化竞争到底对IT世界提出了什么样的挑战?这些挑战又给软件工程领域带来哪些变化?而适应这些变化,未来的软件工程领域会有哪些发展趋势?“善弈者谋一局之胜,不善弈者求数子之得”,只有掌握了软件工程的本质和领域的发展趋势,企业才能顺应潮流,洞悉先机,打造软件交付的核心竞争力,在全球化的竞争中保持不败之地。2008年Rational软件开发高峰论坛上,IBM软件集团Rational总经理DanielSabbah博士向我们描述了当今创新的世界:“去年世界生产出了很多的晶片,这些晶片上面的晶体管的数量比同年生产出的大米粒还要多。同时,每一个晶体管的生产成本是小于一粒大米的。现在互联网群体已经超过10亿,而在互联网上的信息也以万亿计。超级计算能力现在为越来越多的人掌握。在2010年以前,超级计算机将可以进行每秒1000万亿次的计算,这是非常了不起的一个数字。最后,在2010年之后,通过通信、计算和互联网上种种应用的有效运用,全世界的信息总量每11小时将要增加一倍,这又是非常了不起的一个创新。这一切都表明当今时代是一个创新的时代。”第1章软件交付的今天3创新时代对软件能力提出了更高的要求。人类需要更伟大的软件去创造历史,去保护地球,去建设绿色家园;企业需要更智能的软件支持其创新的业务发展,需要更高质量的软件支持其业务运营;每个个体也需要更有智慧的软件去实现价值。但是,我们到底依靠什么来快速交付软件呢?我们是否已经拥有足够的软件交付能力确保软件的快速和高质量交付?1.1软件交付面临的挑战创新时代企业发展速度的加快和全球化软件交付模式的出现,给软件交付团队带来了很多挑战。但从软件交付过程的本质来看,软件交付团队的挑战可以归纳为以下4个方面:复杂性、团队、流程和工具,如图1.1所示。图1.1软件交付面临的挑战奏响软件交付的爵士乐——Jazz平台实践者之路41.1.1复杂性的挑战从某种意义上说,我们正生活在一个软件的世界:新的空客A380中包含超过10亿行的软件代码;通用汽车预测到2010年平均每辆汽车有超过1亿行代码。而比较而言,WindowsXP只有4千万行代码。在这种情况下,软件的需求和软件生产环境本身的复杂度,为我们制造了很多的麻烦。复杂性的挑战除了我们所构建的软件世界本身的复杂性以外,另一个重要的原因则是历史遗留系统的复杂性。在漫长的IT系统的建设过程中,技术的进步、开发语言的变迁、系统平台的演进、Web2.0的出现,给企业留下了错综复杂的IT基础架构和异构的应用系统。同时,为了满足各种业务发展需求,企业每年都要扩展现存系统并开发新系统,统计数据表明:企业78%的IT投资用于维护现有的应用和架构,而不是创新和新系统的开发。但许多企业核心应用的架构就像是个黑箱,错综复杂,无人能够说清道明。就像一个重磅炸弹,每次应用功能的改进、系统升级,企业都战战兢兢,如履薄冰。由此可见,如何有效管理整个IT环境的复杂度,明确现有核心系统架构,建立整合的软件交付生产线,这些因素正日益成为企业不断创新、快速响应面临的重大挑战。企业软件环境的复杂性可用图1.2来表示。另外,随着全球化市场竞争的加剧、软件外包市场成熟和软件工程技术的进步,越来越多的企业正在开始打造软件交付的日不落帝国。他们在美国完成项目概念设计,在欧洲完成系统架构设计,在中国完成软件编码和测试,在印度为软件用户提供售后支持。在强大的软件工程工具和平台的支撑下,他们开始与时间赛跑,在全球化软件交付环境中,他们几乎实现了24小时第1章软件交付的今天5不间断的软件交付和支持服务,他们实现了在尊重每个软件从业人员人权(不加班)的同时,软件交付速度的最大化。图1.2企业软件环境的复杂性全球化的发展趋势对软件和软件交付环境提出了新的挑战,它不仅催生了越来越多企业的并购和全球化发展,留给IT人更为复杂的基础架构、异构的开发流程和应用系统。同时,也带给软件交付团队更多人、流程和工具的竖井,包括分布式团队地域本身的障碍、组织结构的障碍、流程和工具等基础结构的障碍等,如图1.3所示。由此可见,全球化经济、分布的软件交奏响软件交付的爵士乐——Jazz平台实践者之路6付团队,都增加了软件交付过程的复杂度和挑战。图1.3全球化软件交付面临的挑战1.1.2团队、流程和工具的挑战团队的挑战一方面体现在随着软件本身的复杂度日益增加,软件交付团队也日益扩大,由此带来的跨部门的团队共享、沟通、协作和可视化正变得至关重要;另一方面,全球化软件交付模式对团队管理和团队协作方面也带来新的挑战。流程方面的挑战主要体现在如何通过合适的流程,加速业务价值的交付;如何通过流程的敏捷性,提高业务的响应速度。而工具的挑战主要体现在由于缺乏统一的标准工具平台,导致无法实现跨团队的协作、软件第1章软件交付的今天7交付过程的自动化和实时报告;现实中的工具竖井,导致不同的界面和使用方式、流程和数据无法整合,无法提供软件资产全生命周期的追踪能力。为了更好地分析软件交付在团队、流程和工具方面的挑战,下面让我们一起来看一下软件企业的软件交付能力的建设过程。目前,大多数企业的软件交付能力建设过程都是一个随需应变、先局部后整体的过程。基于木桶短板原理,企业首先定位软件交付过程能力最薄弱的环节,然后基于业务发展对软件交付能力改进的要求,开展能力建设。例如,某个企业首先发现自己的项目管理、质量管理比较弱,于是从这两方面入手进行改进,分别建立了项目管理方法管理方法、工具平台和质量管理方法及工具平台。然后在企业发展过程中,他们又会发现变更及发布管理比较弱,再后来又会发现部署过程管理比较弱……,于是企业在发展过程中逐步建立起了软件工程很多环节的管理能力,如图1.4所示。图1.4软件交付能力建设的现状奏响软件交付的爵士乐——Jazz平台实践者之路8经过多年建设后,蓦然回首,我们会发现两个问题:首先,在企业软件交付能力建设过程中,不同环节能力水平不均衡。软件交付的总体生产力是由整个软件生产线的效率决定的,而生产线的效率又由整个软件交付过程最弱的环节决定。其次,在企业软件交付能力建设过程中,由于先局部后整体的思维模式,导致整个软件开发过程存在较多的能力竖井。不同的工作团队使用不同的流程,不同的流程由不同的工具实现,不同的工具有不同的风格。最为令人沮丧的是不同工具间信息无法互通,整个软件开发生命周期缺乏可追踪性,阻碍了企业建立端到端的治理能力以提高软件交付效率。同时企业还面临越来越多的法律、法规、规范的遵从性要求。作为软件从业者,今夜您是否可以安眠,不再在睡梦中担心是否能够按时交付高质量的软件,担心系统的宕机、数据的安全和业务的连续性,担心您的软件是否足以支持企业的业务发展和创新。如果还不能,那么您并不孤单,Alinean的研究报告表明:在过去5年的软件开发项目中,17%的项目在部署前被取消,33%的是问题项目(预算超支、进度延期或者只有部分功能实现)。每年全世界被取消的项目价值810亿美金。而且,在所谓成功交付的50%的项目中,28%并未产生预期的业务价值。1.2迎接挑战,分析软件工程领域发展趋势达尔文的进化论告诉我们,自然界本身就是一个不断适应新的变化和挑战的适者生存的发展演进过程。软件工程领域也是一样,今天面临的挑战和压力,恰恰决定了其明天的发展方向。复杂性的挑战推动了模块化技术和第1章软件交付的今天9SOA的快速发展;流程和工具的挑战以及软件生产环境本身复杂性的挑战,加速了开放计算和软件开发治理的不断发展;全球化环境下团队的挑战则催生了新的全球化软件协作交付模式。易经的思想告诉我们:观其变易,以顺势而为;观其不易,以驭势而行;知变易与不易,可造势也。顺应趋势,洞察先机,为了在新的全球化环境中获得新的竞争优势,我们不得不仔细审视软件工程的发展趋势,如图1.5所示。图1.5挑战催生趋势1.2.1软件工程发展趋势一:模块化随着全球化的发展趋势和全球化市场竞争压力的增加,一方面企业需要更多的业务灵活性和创新能力;另一方面企业面临的IT环境复杂度的增加和历史遗留系统的增加,对企业的IT提出了新的挑战。模块化的思想恰恰奏响软件交付的爵士乐——Jazz平台实践者之路10能够帮助企业从根本上解决了这一问题,它一方面通过抽象、封装、分解、层次化等基本的科学方法,对各种软件构件和软件应用进行打包,提高对企业现资产的重用水平和能力;另一方面,基于模块化思想,业界提出了SOA技术,它提供一组基于标准的方法和技术,通过有效整合和重用现有应用系统和各种资源,对各种服务进行服务组件化,并基于服务组件实现各种新的业务应用的快速组装,帮助企业很好应对业务的灵活性要求。它通过有效平衡业务的灵活性和IT的灵活性、平衡业务的灵活性和IT的复杂度,为IT人提供了一个业务视角,让IT人学会用业务的眼睛看世界,有效的拉近了IT和业务的距离,如图1.6所示。图1.6模块化发展趋势1.2.2软件工程发展趋势二:开放计算“开放标准的最好例子就是互联网本身。互联网建立了一套任何人都可以使第1章软件交付的今天11用的标准,其创建的目的就是允许任何人参与。”——经济发展委员会数字连接理事会虽然软件工程方法、技术和工具的发展可谓百花齐放,但谈到趋势,我们必须首先强调的是能够确定行业基础框架,指导行业发展和技术融合的“开放计算”,它融合了“开放标准”、“开放架构”和“开源软件”三个方面,如图1.7所示。通过坚持“开放标准”,不同企业开发和使用的软件可以互连互通,不同的软件工程工具能够更好地集成,不同国界和不同文化能够更好地协作交流,用户的投资能够得到很好的保证。正是它为全球化趋势奠定了重要基础;“开放架构”通过一组开放的架构标准和技术,有效地解决了商业模式的创新对IT灵活性要求的增加和现有IT环境的复杂度之间的矛盾,第一次使IT和业务走得如此之近,其典型代表包括SOA、REST等。图1.7开放计算而“开源软件”不但书写了Linux、Eclipse、Jazz等一个又一个的神奇奏响软件交付的爵士乐——Jazz平台实践者之路12故事,而且它还有效地促进了开放标准的发展,同时有效利用社区驱动的开发与协作创新,优化软件设计中的网络效应,开源软件越来越被中小企业和个人用户所认可。1.2.3软件工程发展趋势三:合适的开发治理软件开发治理的研究对象是软件开发团队,其目的是在软件开发生命周期中,通过定义整个开发组织中的各种角色、职责和技能要求,明确“谁”、在“什么时间”、做“什么”、“怎么做”和如何评测等内容,不断改进软件团队的生产效率和软件产品质量。软件开发流程和软件工程工具是软件开发治理的两个重要组成部分,如图1.8所示。图1.8软件开发治理框架第1章软件交付的今天13首先,全球化的软件交付和社区驱动的软件交付模式对软件工程方法提出了新的要求。环顾当今软件开发方法,RUP、敏捷开发、MSF可谓百花齐放,当不同学说的支持者互相不屑一顾的同时,其实我们不难看到,不管是哪一种软件开发过程,它都有自己合适的软件开发团队和软件开发场景。这