博主资料

留言 加为好友 收藏

用户名:  maoxs

个人统计

用户名: maoxs
等级: 初来乍到
威望: 300
积分: 530
在线时间: 23 小时
日志总数: 32
评论数量: 355
访问次数: 282742
建立时间: 2006-03-23
RSS订阅       手机访问

最新评论

文章搜索

文章列表

友情链接

最近访问的人:

直流电源,直流稳压..
2008-08-20 09:55:27
电子商务研究(B2C)
2008-08-05 09:19:08
彩钢板
2008-07-30 00:37:34
taotao
2008-07-15 14:16:40
您有2条短消息
2008-07-10 05:06:34
88blog
2008-07-08 17:48:18
海阔天空
2008-07-05 09:20:28
TnT
2008-06-29 00:25:41
blueliuv
2008-06-25 16:59:24
搜索引擎优化(SEO..
2008-06-25 11:20:59

日志文章

2007年01月01日 09:34:37

关于 SOA 中需求分析的讨论

关于 IEEE COMPSAC 2007 的介绍,本来是为了宣传一下这个会,一进来,看到这么多讨论,吃了一惊,也很高兴,我很喜欢讨论中所隐现的“独立之精神”。IEEE 的主事们应该开心,他们的会提前开场了。

今天既然是2007第一天,让我们回顾一下需求分析的历史,然后讨论 SOA 中如何来进行面向服务的分析和建模吧。

软件工程方法中,需求分析的方法跟问题域的复杂度和类型,紧密相关。在早期,计算需求主要来自科学计算,其抽象手段主要是“数据结构+算法”,在沟通需求的时候,技术人员跟业务人员以自然语言为基础来沟通,然后以过程和/或函数以及数据结构为主要抽象手段,来建立分析模型,分析结果包含过程/函数、流程图、数据流图,复杂一些的,引入模块和子系统来分割。然后,用自然语言描述为主的文档来作为沟通的手段。如果我们还记得关于 GOTO 的讨论,我们了解,这个计算时代经过多年的发展,推动了结构化编程的发展和成熟。

伴随着商业计算逐渐成为主流,商业计算从早期类似于科学计算的财务等,转向更为广泛的领域,其计算的复杂度和类型,发生了很大的变化,这中间各种数据库技术曾经领衔主演了一段时间,我们按下不表。这期间,在“软件危机”的推动下,对象成为基本的抽象手段,将其高度内耦合的数据、状态和行为结合在一起,不仅提高了抽象度,也自然地反映人们认识和描述这个世界的方式。经过多年的实践、争吵和合作,人们总结出了很多关于对象分析和建模的方式,组件、接口、各种分析和设计模式,逐渐地被认识和流行,UML 建立了图例和文档规范,以便沟通。这是软件界的一个巨大进步。在这种软件工程方法中,技术人员通常用自然语言同业务人员沟通,然后用“Use Case”(用例)来建立各种角色所看到的系统边界,再辅助以用户交互(UI)等必要的其他模型,建立一个系统的分析视图,然后,以对象(和组件)为基本手段,建立系统的分析模型,最后,用 UML 和一些过程如 RUP 提供的文档模板为基础,提供需求分析结果。这种分析方法,今天非常流行,也很有效。

但是,商业计算的情况再次发生巨大的变化 -  “整合”和“灵活性”成为主要的需求。经过几十年的发展,商业计算已经不再是过去白手起家的时刻,我们已经有了很多的“历史”,那就是我们已经建立起来的这么多的系统:每个企业都有 IT 系统,少到几个、几十个,多到几千甚至上万。人类花了这么多钱、这么多时间在这些系统上,没有了这些系统,核心业务会崩溃。但这些系统也给我们带来了巨大的麻烦 -- 它们能够满足不同业务部门(Line of Business,LoB)的垂直需求,可是相互不往来、也不能或者很难相互往来,难以满足跨业务部门的水平需求,更不要说在今天这个平的世界里,如何将合作伙伴、客户连接起来,建立一个动态的商业价值网络。但是,全球化的经济结构和运作模式,互联网作为全球化的 IT 基础设施,从商业和技术两个角度,透过竞争,既给富有创新和执行能力的企业带来了一个前所未有的商业机会,又迫使跟随的企业不得不起而迎战 -- 将业务模式调整到以客户为中心,将自己内部的业务系统连接起来,水平整合业务活动成为端到端的业务流程,透过这些流程,让整个公司的员工可以自由地得到业务活动需要的信息,轻松地相互协作,从而将整个企业的运作模式转化为一个扁平的结构,打破业务部门的边界,极大地提高企业的效率,得到更好的客户满意度。即便如此,用户需求、市场情况、商业环境的快速变化作为这个时代的特点,要求企业能够快速调整自己的商业模型,因此,在整合的基础上,还要加上快速应变的灵活性要求。这就涉及到了软件的两个魔鬼:复杂度和演变。全面整合(整个企业,客户,合作伙伴)的系统,其复杂度再次提升,而灵活应变能力,在一个整合的世界里,大家都变,自己也没办法以不变应万变,究竟如何因变?所以,我们需要发展软件系统的构造方法,它既可以帮助我们将问题域进行良好的分割,分解映射为分布世界里的独立单元,又可以帮助我们灵活地将它们组合起来以完成一个完整的业务活动,这样一种新型的、富有弹性的分布式系统,是今天的商务世界所需要的,是商业计算的主要发展方向。SOA 也好,正在热吵的 Enterprise Web 2.0 也好,都是我们期望用来解决上面这个问题的方法。

虽然,我们还处在这个早期,有赖于过去多年的 EAI、分布式系统的构造实践,尤其是 Web 的发展,IT 行业积累了不少的经验和技术来求解。让我们简要地看看现在这个阶段的解的重点:一个是将业务本身作为一个独立的实体,由业务人员自己自觉(而不是自发)地以业务世界的元素,比如业务活动,业务流程,业务规则,业务性能及其测评,建立起数字化的模型,其核心概念就说所谓的“服务”。在这个模型中,我们将看到一个清晰的图景:业务活动是如何影响业务绩效的,业务模型的问题在那里,如何改善。这就是所谓的“商业科学化”,请参看我在 Service Science 方面的介绍。了解 BPR (Business Process Reengineering)  的话,应该了解这件事情会在什么状态,它的困难在哪里 :)。有了这个为基础,业务人员可以自己跟自己玩:市场需求变了(他们的需求),那业务模型怎么变化来适应?或者,有了一个市场图谋,如何变化自己的业务模型来适应?过去要猜,要靠某些精英的个人特质,有了这个模型,我们期待一个魔术的出现,就是可以用数学的方法来演算,模拟,推断,哪怕结果不是高度精确的,也可以给决策者一个合理的、基于数字的决策依据。然后,这个模型要清晰地被分解和映射到 IT 系统中的服务接口、组件和业务规则描述等等,然后将它们分配到各个应用(包括已经存在的)中,再在这个基础上,使用用例、组件(细粒度)和对象建立应用或者子系统的需求模型,我们可能需要增加新的模型,比如整合各个应用的模型,安全模型(整合情况下安全更复杂)等等。看得到,这个模型对过去的业务分析(尤其是从 BPR,或者其他以业务流程为基础的)是有继承的,但要看到,他们的出发点和追求的目标,有交叉但并不能等同,所基于的概念和方法,即使有所借用,却有很不相同的重点。站在发展的角度,我们期待着业务模型数字化、科学化的突破。

是故,我们认为 SOA 将业务建模作为一个全新的因素引入,如何建立一个好的业务模型,然后递次分解、映射到传统技术世界主导的分析和建模,如何保证其可追溯性(Tracability)将是以服务为中心的分析、建模的重要环节。

最后,再次感谢提出尖锐问题的 #2 楼,为鼓励讨论,谨建议使用自己的代号,而非 Guest 参与讨论 -- 讨论有理,我所求也。

Tags: SOA   需求分析  

类别: 技术 |  评论(16) |  浏览(6464) |  收藏
一共有 16 条评论
16楼 [匿名]勇敢的心 2008年07月04日 15:14:05 Says:
  SOA作为整合历史的系统,和现有的各个分立的系统有先天的优势,但SOA作为一个革命性的新软件开发方法论的面目出现,更深层次的原因在于它对于复杂性的处理方式有别于以前的方法论。

我们可以简单的将开发的复杂性归结为对各个领域对象的状态的控制上,意思就是如果在任何时刻系统的领域对象的所有状态是明确可知的,那么就可以说这个系统是可控的。

可以推出随着业务领域的复杂程度提高,领域对象会不断增长,这个问题还不是很大,线性增长,毕竟还是可控的,但是考察整个业务领域的状态来看,其复杂度是和领域对象个数成指数增加的。



在简单的业务范围,领域对象少,那么用结构化的方式也可以应付的,到底领域对象增长到多少这种方法就无法应付呢。这个没有具体统计,只是看到用这个方法论来指导的开发在实践中不断的失败。

这时候OOAD的方法论出来了,通过封装,继承,和多态的手段,各种设计模式如雨后春笋一样,可管理的领域对象数量得以大大增加,成功的案例不断增多,但是通过统计,我们还是不断的听到有一些大型的项目的投资失败了。

原因是什么呢,关键是对这个复杂性的处理,目前有两种手段,一个是加强对复杂性的管理水平,尽量穷尽各种手段来分解并管理复杂性。一种方法是减少复杂性。
OOAD方式是前一种,而SOA则是后一种。也许大家很奇怪,业务领域本来就是这么复杂,怎么减少他的复杂性呢?答案是分区,当你将业务领域分开为多个完全独立的区域的时候,复杂性就不是指数增加,而是变成线性增加的方式了,SOA通过提供软件自治概念,松耦合,无状态的Web服务,将各个部分变成完全独立的地址透明的服务,原来看来非常复杂的业务领域就突然变的不那么复杂了。至少复杂度不再指数增加了。
也许大家可能说什么自治,松耦合,无状态这些概念在OOAD里面也有啊,我也会将系统水平和垂直划分为很多个子系统和层啊,这个我相信,好的架构师会做到的,但是就整体来看,子系统并没有脱离系统,和系统在逻辑上和硬件上的耦合还是很多。
  说了这么多,大家都是对OOAD是不是很失落呢,毕竟大家都是从OOAD走过来的,是不是要放弃OO思想呢,这个我想不是的,在一个相对小的领域,用OOAD的方式可以很好工作,范围大了后,可以考虑在这个系统上提供出Web服务来也是可以的。当然SOA有自己的一套方法论,以前结构化编程的自顶向下的思想又重新回来了,所以说没有什么是绝对的,要考虑上下文环境。
  时间仓促,写的很粗糙。 欢迎大家和我交流 dfchengcn@yahoo.com.cn.
15楼 [匿名]Bob 2007年09月21日 18:12:52 Says:
Mr.毛好,您提到的现在企业里面遗留了很多系统,soa是用来解决各个系统之间的整合,这种整合能够做到什么层面呢?
我们知道,很多遗留系统都不是web的,有dos界面的,foxpro的,有delphi的,几乎每段时期都会有一个工具当主角,现在是j2ee,web.我们如何去整合这些系统呢?如果只是基于数据层面的整合,岂不是又要做大量的开发工作?
14楼 [匿名]jackyrong 2007年07月22日 09:04:36 Says:
HI,想问下,IBM有integration developer的试用版下载么?我一直找不到呀,很郁闷
13楼 [匿名]guest 2007年01月16日 15:17:22 Says:
新生,很久不更新了吧?呵呵,新年开始,大家都很忙 :)
12楼 [匿名]guest 2007年01月15日 16:43:48 Says:
谢谢,
11楼 [楼主]毛新生 2007年01月15日 06:38:12 Says:
呵呵,很抱歉,我不大用 QQ,请用 icymaoxs@gmail.com 在 MSN 或者 GTalk 上联系我吧。
10楼 [匿名]guest 2007年01月14日 20:39:19 Says:
你的博客做的蛮不错的,你QQ是多少?可以加吗?
我QQ:284216570
9楼 [匿名]guest 2007年01月06日 00:07:30 Says:
读了很有启发啊,好文章,高屋建瓴
8楼 [匿名]guest 2007年01月05日 10:08:13 Says:
怎么这两天,这里静悄悄的,有些不适应了......
7楼 [楼主]毛新生 2007年01月03日 16:08:56 Says:
IBM 不仅是提倡者,也是实践者,它正在内部实施着 SOA,虽然不是每个IBM 人都知道。
6楼 [匿名]guest 2007年01月02日 15:08:09 Says:
作为ibm一个无名小辈,非常荣幸您能为我写这么一篇大作,读后还是有些收获,不过感觉您后面的部分有点形而上了,对我这学计算机的人太高深了。

据我所知,ibm在整天向别人鼓吹SOA的时候,自己内部的系统好像根本没有任何要SOA的迹象。
5楼 [楼主]毛新生 2007年01月02日 06:18:00 Says:
Zhang Ling, 这厢先谢谢了,等我把个人域名申请下来,就去找你。

谢谢#2楼的讨论,深思明辨,没有讨论,没有进步。
4楼 [匿名]guest 2007年01月01日 17:54:34 Says:
这是一个比较全面的阐述需求分析发展的帖子,贴过来,大家共享。http://blog.csdn.net/l1t/archive/2004/10/26/152621.aspx

3楼 [匿名]guest 2007年01月01日 11:57:01 Says:
还有就是毛毛你是站在众览整个企业的高度来看这个问题的。我们在校的学生由于缺乏大企业的项目经验,对于现在的企业内部的运作、业务功能的划分和协作没有一个清楚的认识。前两天刚看了一本名叫《企业重组》(Reengineering the coopration)的书,对于前面的那些东西有一个感性的认识,但还是不是很明白。对于BPR,我个人觉得它太技术化了,对于企业不仅仅是IT人员对于管理人员的素质要求都很高。

2楼 [匿名]guest 2007年01月01日 11:19:31 Says:
晕死,昨天心里还在想毛毛在哪呢,今天就有长篇大论出来了。呵呵......还是guest比较好,其实我们认识。

1楼 NA 2007年01月01日 10:44:52 Says:
赛迪的博客系统不是很好用,一定要注册用户才可以非匿名回帖。您可以申请个域名,我来提供blog系统和空间好了,呵呵。
发表评论