软件架构设计的思想与模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件架构设计的思想与模式
中科院计算所培训中心谢新华
第一章软件架构设计思想与体系创建
在软件组织中,架构师的作用是举足轻重的。本课程针对企业开发最关注的问题深入研讨,抓住投入产出比这个企业的核心价值,讨论架构设计如何使这个核心价值得以实现。我们认为,一个设计如果必须高手云集才能生产出符合质量要求的产品,并不一定是好的架构。架构设计的目标是力争使用总体上能力一般的队伍,通过组织和设计的力量,生产出符合质量要求的产品,从投资回报的角度,两者效果是完全不一样的。另一方面,由于需求变更不可避免,而需求的变更必然造成设计调整进而造成总体投入的增加,这会极大的影响到投资回报,所以我们必须研究架构设计如何更好的适应变更,通过设计确保变更、维护与升级的成本下降。对这一系列问题的深入思考,成为现代软件架构设计的核心思维。
软件企业必须认真研究如何培养高水平的架构人员,但仅仅把架构设计作为一个孤立的节点来讨论,或者仅仅就架构谈架构的在一个很窄的思维空间中研究问题是没有意义的。任何设计都来自于目的,我们应该把架构设计放在整个项目过程的大环境下来研究,针对每个关键节点对设计的影响特点进行研讨,这样才可能真正理解架构设计真正精髓的东西,使未来的设计工作就会变得极有主动性和想象力。
随着经济全球化进程的不断推进,知识经济的时代已经到来。要增加软件产品的国际竞争力,软件质量作为企业发展的战略问题变得越来越重要,软件质量正被视为软件企业的生命。软件质量管理开始在软件组织内全面开展,强烈的质量意识正慢慢扎根于软件技术和管理人员的心灵深处,直至整个组织质量文化的形成,所以,如何设计高质量的软件产品,也成为软件架构设计的重要主题。
统计表明,软件质量问题80%是由需求分析和架构设计两个环节造成的,因此,在需求分析的时候,我们必须研究如何充分理解用户需求,给各方面提供充分而有效的信息,在架构设计上,研究如何尽可能利用已有信息,合理组织技术方案,把人和任务作为一个重要因素进行考虑,在达到质量需求的基础上,使高的投资回报率成为可能,在项目过程管理上,如何与架构设计匹配协调,使技术方案的高质量实现成为可能,同时对于产品线架构和核心资产库构建的理论、方法、组织和技术给于足够的重视,这都需要项目经理、分析师、架构师具有很高的水平。
架构设计绝不是某个神秘人物冥思苦想然后又自鸣得意的产物,架构设计应该是集体智慧的成果,软件设计与开发也应该是集体共通劳动的结果,重要的是各种相互矛盾的要求的合理平衡,这都需要有非常良好的方法,把团队的智慧集中起来,如何充分激发集体的智慧,也是一个架构设计师必须具备的能力。
影响这个课程主体的主要思想,是21世纪是软件规模经济的时代,下图表达了工具、构件和过程的三个基本技术的进步,图中表达了在假定要求的质量和人员等级不变的情况下,投资回报(ROI)的关系,纵坐标表达了实现软件的单位成本(代码行、功能点),横坐标表达了软件规模,这里表示了随着时代的进步,同样规模的软件成本在大幅下降,投资回报在大幅上升。
伴随着非常大型的项目,比如由系统组成的系统,长生命力的产品以及多个相似项目的产品线,软件组织将达到更好的经济规模。这种规模软件经济的理念,对我的设计方法和思路提出了和过去完全不同的要求,重用、复用和变更促成为重要的主题。
架构设计应该从方法论的角度、从质量属性对架构设计影响的角度、从建立可度量的架构质量保证体系以及安全性和可扩展性的角度,在理论和实践两方面全方位研究问题。
1.1 软件架构师的角色和应掌握的知识体系
一、软件架构的定义与问题
软件架构(software archiecture)是一组有关如下要素的重要决策:
软件系统的组织,构成系统的结构化元素,接口和它们相互协作的行为的选择,结构化元素和行为元素组合成粒度更大的子系统的方式的选择,以及指导这一组织(元素及其接口、协作和组合方式)的架构风格的选择。
软件架构是对系统整体结构设计的刻划,包括全局组织与控制结构,构件间通讯、同步和数据访问的协议,设计元素间的功能分配,物理分布,设计元素集成,伸缩性和性能,设计选择等。
但是,所谓架构其实并不仅仅指的是软件产品体系结构设计,它还包括管理架构、过程架构以及质量保证架构等一系列问题的研究,因为高质量软件并不能只靠一个节点解决问题,而是需要有一个全面的解决方案。
重要的是要知道,一个软件系统的质量,很大程度上是由架构设计的质量决定的,所以,
研究架构设计的思想和方法,成为软件设计领域中一个十分引人注目的问题。但是很长时间以来,人们大都把目光关注在流程、方法、结构原理甚至编码的本身,而不太注意架构设计最本质的东西,思考的深度也欠深入,结果,很多产品即使设计出来,后期运行中也是问题百出。这就给我们提出了一个问题,架构设计的核心思维到底是什么?什么是好的架构设计呢?
首先,任何软件系统都是以满足需求作为目的,所以,好的架构设计必须以深入全面的需求分析作为基础,事实上架构设计是没有统一的模式的,任何模式只有针对问题才有意义。作为架构设计来说,必须对需求分析有足够的理解,这样才能有针对性地解决问题,才可能设计出真正优秀的产品来。但是,如果需求分析本身问题的信息就不足,那怎么可能设计出解决问题到位的架构来呢?
另一方面,任何架构思想的实现,都依赖于好的项目管理。项目管理必须与架构思想相匹配才能发挥作用。一个好的架构设计,必须关注成本,也必须关注时间,以期在约定的时间内、不超过规定的成本、生产出符合质量要求的软件产品来。因此,系统架构师应该仔细研究现代项目管理的思想和方法,吃透其中的精髓,根据自己的设计思想,提出项目管理的解决方案。
谈到项目管理,人们往往想到的是某种规范,某种文档模版,甚至某种流程。当然这些是重要的,不过,无论多么美好的规范,如果不能和自己的实际情况结合起来,尤其是和自己的架构特点结合起来,有的放矢的改进自己的过程,从而达到降低成本提高质量的目的,那什么样的规范都是没有意义的。
作为一个架构师来说,上述的讨论引发了三个核心思维,一个是架构设计的源泉来自于需求分析,第二个是架构设计重心和特点来自于质量需求(非功能性需求),第三个观点是,架构的实现依赖于好的项目管理。因此,软件架构设计是一个系统工程,它需要系统构架师有很宽的知识面,从需求分析、架构设计到类设计甚至代码实现一直到项目管理都需要有透彻的理解,这之间的关系是你中有我我中有你,是不可能截然分开的。必须说明,软件系统设计的方法不是一个僵化的规则,关键是在实践中实事求是的摸索规律,从而找出符合实际达到要求的设计来。
二、软件复用和系统架构
现代软件架构设计的原则来自于软件复用,软件复用是指重复使用“为了复用目的而设计的软件”的过程。在过去的开发实践中,我们也可能会重复使用“并非为了复用目的而设计的软件”的过程,或者在一个应用系统的不同版本间重复使用代码的过程,这两类行为都不属于严格意义上的软件复用。
通过软件复用,在应用系统开发中可以充分地利用已有的开发成果,消除了包括分析、设计、编码、测试等在内的许多重复劳动,从而提高了软件开发的效率,同时,通过复用高质量的已有开发成果,避免了重新开发可能引入的错误,从而提高了软件的质量。
良好的软件架构提供了构件组装的基础和上下文。一个典型的软件架构是由系统中的构件、连接和约束构成的配置格局。从这个观点看,架构决不是概要设计,架构设计本身就可以看成一个项目,架构的结果应该是一个可执行、可验证的产品,也必须通过评审,为最终产品的复用与可持续发展打下框架上的基础。
研究软件构架有利于发现不同系统的高层共性、保证灵活和正确的系统设计、对系统的整体结构和全局属性进行规范约束、分析、验证和管理。将构架作为系统构造和演化的基础,可以实现大规模、系统化的软件复用。
研究软件架构对于进行高效的软件工程具有非常重要的意义: