没有合适的资源?快使用搜索试试~ 我知道了~
首页系统架构设计师 复习精华
系统架构设计师 复习精华
需积分: 11 10 下载量 141 浏览量
更新于2023-03-16
评论 2
收藏 167KB DOC 举报
系统架构设计师 复习精华 系统架构设计师 复习精华 系统架构设计师 复习精华
资源详情
资源评论
资源推荐
上学吧
系统架构:系统架构师是怎样炼成的
坦率的讲,除了少数对开发程序极其热爱并愿意为之奋斗终身的编程者来说,对于大
多数开发人员,写代码只是他们未来获得职业提升的一个必不可少的积累阶段,在做开发
的时间里,他们会积极学习各种知识,经验,培养自己的商业头脑,包括扩展自己各方面
的资源,这些积累会为他们未来成为管理者或创业打下牢固的基础。
成为架构设计师是广大开发者职业发展道路之一,架构师究竟是个什么样的职业?需
要具备什么基本能力?如何才能成为一个优秀的架构设计师以及架构设计师需要关注哪些
内容?针对有关问题,本期我们为您采访了微软认证专家,系统分析员,希赛顾问团顾问,
中国计算机学会会员张友邦,他会就相关问题与大家分享他的看法。
“在我工作的六年多时间里,除了第一年是纯粹编码以外,其余时间都在做和架构设计
有关的工作,当然也还一直在写各种各样的代码。”张友邦认为架构设计可能看起来很神秘,
新入门或没有架构设计经验的程序员刚开始的时候会有种不知所措的感觉,但其实架构设
计是件很容易的事,它只是软件系统开发中的一个环节而已,整个软件系统的开发和维护
以及变更还涉及到很多事情,包括技术、团队、沟通、市场、环境等等。
同时,张友邦表示,虽然架构设计是件容易的事情,但也不是大多数没有架构设计经
验的程序员想象中的画画框图那么简单。把几台服务器一摆,每一台服务器运行什么软件
分配好,然后用网络连接起来,似乎每个企业级应用都是如此简间单单的几步。但现实生
活中的软件系统实实在在可以用复杂大系统来形容,从规划、开发、维护和变更涉及到许
许多多的人和事。架构设计就是要在规划阶段都把后面的事情尽量把握进来,要为稳定性
努力,还要为可维护性、扩扩展性以及诸多的性能指标而思前想后。除了技术上的考虑,
还要考虑人的因素,包括人员的组织、软件过程的组织、团队的协作和沟通等。
另外,架构设计还需要方法论的指导。张友邦强调,这些方法论的思路包括,至上而
下的分析,关注点分离,横向纵向模块划分等。有时候觉得架构设计决策就像是浏览
,实际上反映的是一种自上而下的决策过程。对问题的分解是软件思维的基本
素质,可以有横向分解、纵向分解以及两者的结合。能不能有效快速准确的分解问题,是
软件开发人员需要首先训练的项目。另外,架构设计中图形化的工具非常有用,它能把系
统的结构和运作机制以图形化的方式表达出来。也正因为这样才有了架构设计就是画框图
的误会。再者,架构设计是一个工程性质的工作,对当事人的实际从业经验要求较高。只
有对市场上的各种技术有较全面的了解之后才有可能设计出一个尽可能满足各种设计约束
的架构。
在谈到架构师需要具备的能力上,张友邦认为架构师首先必须具有丰富的开发经验,
是个技术主管。因为他必须清楚什么是可以实现的,实现的方式有哪些,相应的难度怎么
上 学 吧 为 您 提 供 系 统 架 构 设 计 师 考 试 资 料 下 载 : http://www.shangxueba.com/share/
e2 8 .html
上学吧
样,实现出来的系统面对需求变化的适应性等一系列指标。另外,需要对面向过程、面向
对象、面向服务等设计理念有深刻的理解,可以快速的察觉出实现中的问题并提出相应的
改进重构方案也就是通常说的反模式。这些都需要长期的开发实践才能真正的体会到,
单从书本上很难领会到,就算当时理解了也不一定能融会到实践中去。
在技术能力上,软件架构师最重要也是最需要掌握的知识是构件通信机制方面的知识
包括进程内通信对象访问、函数调用、数据交换、线程同步等以及进程外包括跨计算机
的通信如 、 、!"#$。在 !% 应用大行其道的今天,开发者往往对服务器
间的通信关注的比较多,而对进程内的通信较少关注。进程外跨机器通信是构建分布式应
用的基石,它是架构设计中的鸟瞰视图&而进程内的通信是模块实现的骨架,它是基石的基
石。如果具体到一个基于' 企业级架构设计,首先需要的是语言级别的认识,包括'(
的 )、继承特性、委托和事件处理等。然后是常用解决方案的认识,包括 *"+'(!
"#$、'(,、企业服务组件等。总之,丰富的开发实践经验有助于避免架构师
纸上谈兵式的高来高去,给代码编写人员带来实实在在的可行性。
其次,具有足够的行业业务知识和商业头脑也是很重要的。行业业务知识的足够把握
可以给架构师更多的拥抱变化的能力,可以在系统设计的时候留出一些扩展的余地来适应
可能来临的需求变化。有经验的设计人员可能都碰到过这样的事,一厢情愿的保留接口在
需求变化中的命中率非常低。也就是说,在系统设计之初为扩展性留下来的系统接口没能
在需求变化的洪流中发挥真正的作用,因为需求的变化并没有按照预想的方向进行,到最
后还是不得不为变化的业务重新设计系统。这就是因为对业务知识的理解和对市场或者商
业的判断没有达到一个实用的、可以为架构扩展性服务的水平。
再次,张友邦提到,架构设计师对人的关注必须提升到架构设计之初来纳入考虑的范
围,包括沟通以及对人员素质的判断。软件过程是团队协作共同构建系统的过程,沟通能
力是将整个过程中多条开发线粘合在一起的胶水。大家都应该碰到过事后说“原来是这样啊,
我不知道啊”或者某个开发人员突然高声呼喊“为什么这里的数据没有了”之类的。沟通的目
的就是尽量避免多条开发线的混乱,让系统构建过程可以有条理的高效进行。另外,对人
的关注还表现在对团队成员的素质判断上,比如哪些开发人员对哪些技术更熟悉,或者哪
些开发人员容易拖进度等。只有合理的使用人力资源,让合适的人做合适的事情才能让整
个软件过程更加高效。
另外,张友邦认为架构师应时刻注意新软件设计和开发方面的发展情况,并不断探索
更有效的新方法、开发语言、设计模式和开发平台不断很快地升级,软件架构师需要吸收
这些新技术新知识,并将它们用于软件系统开发工作中。但对新技术的探索应该在一个理
性的范围内进行,不能盲目的跟风。解决方案提供商永远都希望你能使用它提供的最新技
术,而且它们在推广自己的解决方案的时候往往是以自己的产品为中心,容易给人错觉。
比如数据库,往往让人觉得它什么都能做,只要有了它其它什么都不重要了。但事实上并
不是如此,对于小型应用可以将许多业务逻辑用 $ 的方式放入数据库中,但很少看到
大型应用采用这样的做法。对于新东西需要以一种比较的观点来判断,包括横向的比较和
纵向的比较,最后得出一些性能、可移植性以及可升级等指标。另外,新入行的开发人员
上 学 吧 为 您 提 供 系 统 架 构 设 计 师 考 试 资 料 下 载 : http://www.shangxueba.com/share/
e2 8 .html
上学吧
往往关心新技术动向而忽略了技术的历史,而从 " 时代一路杀过来的开发者就对现在的
技术体系有较全面的把握。
构架师不是通过理论学习可以搞出来的,不学习并且亲自实践相关知识肯定是不行的
就像前面说到的,架构设计是一个工程性质的事情,只有在不断实践的基础上才能逐渐熟
悉起来。实践的内容并不是去深挖各种语言的特性,因为系统架构师是设计应用系统架构
而不是设计语言除非你是要实现 ")。更多的时候需要带着一种比较的眼光去实践,把不
同的实现方式下的优缺点做个总结,做到自己心里有数,等具体的上下文环境下才好判断
采用什么样的方式方法。把基础打牢的同时掌握一定的方法,架构设计不是想象中的那么
难。
张友邦,男,微软认证专家,系统分析员,希赛顾问团顾问,中国计算机学会会员 。
-./0 年生于四川宜宾,1001 年获得国防科技大学宇航科学与工程系空间工程专业学士学位,
1002 年初成立长沙石斑软件有限公司并担任总经理,1003 年底出任广州快网信息技术有限
公司技术总监,1004 年 -0 月任湖南新邮信息技术有限公司软件中心副经理。主要研究领
域包括软件架构与设计、!%*、流媒体与计算机图形图像。受国家自然科学基金资助,
于 100- 年发表国家级核心刊物学术论文一篇。
系统架构:小议软件架构设计要点
100. 年上半年计算机技术与软件专业 技术资格(水平)考试日期: 100. 年 5 月
16、12 日。另外,部分考试科目从 100. 年上半年开始将采用新修编的考试大纲,具体见:
如何更好地进行软件架构设计,这是软件工程领域中一个永恒的重点话题。过去
几十年来,国际软件工程界在软件架构设计方面已经获得了长足发展,大量图书、文章和
文献记载了这方面的成熟经验与成果。软件架构设计往往是一件非常复杂的工作,涉及到
很多细节和方方面面,可探讨的话题也非常之多。囿于篇幅限制,以下只能根据笔者个人
理解,遴选出软件架构设计的个别要点,结合当前流行的敏捷软件工程思想,与大家分享
一下自己在软件架构设计方面的心得和体会。
架构决定成败
软件架构是软件产品、软件系统设计当中的主体结构和主要矛盾。任何软件都有架构
哪怕一段短小的 7!8 程序。软件架构设计的成败决定了软件产品和系统研发的成败。
软件架构自身所具有的属性和特点,决定了软件架构设计的复杂性和难度。
这几年流行一个说法(管理谚语):“细节决定成败”,这句话其实只说对了一半。细
节确实很重要,很多项目、产品就输在细节的执行上。一方面,战术细节固然很重要,但
另一方面,战略全局也同样重要,对应的我们可以说:“战略决定成败”。战略性失败,就
上 学 吧 为 您 提 供 系 统 架 构 设 计 师 考 试 资 料 下 载 : http://www.shangxueba.com/share/
e2 8 .html
上学吧
好比下一盘围棋,局部下得再漂亮、再凌厉,如果罔顾大盘,己方连空都不够了,还有官
子(细节)获胜的机会吗?必然是中盘告负。
类似地,正确的软件架构设计,应该既包括战略全局上的设计,也包括战术细节(关
键路径)上的设计。有一种错误的观点认为,软件架构设计只要分分层和包,画一个大体
的轮廓草图,就完事了。这种“纸上谈兵”型的架构师行为是非常有害的。事实上,既然软
件架构是软件建筑的主体结构、隐蔽工程、承重墙和要害部位,那么软件架构也必然要落
实到实际的算法和代码,不但要有实现代码,还要包括对这部分架构进行测试的代码,以
保证获得高质量的、满足各种功能和非功能质量属性要求的架构。除了完成概念、模型设
计 外 , 软 件架 构师 一 定 要 参 与 实 际 的编 码 、 测 试 和 调试 ,做 一 位 真 正 的 89
,,,这已经成为了敏捷软件工程所倡导的主流文化。
两个架构
我们在日常的软件产品和系统开发中,实际上会遇到两种、两个部分的软件架构,即
待开发的应用部分的软件架构(简称“应用架构”),以及既有的基础平台部分的软件架构
(简称“基础架构”)。这两部分架构之间是互为依赖、相辅相成的关系,它们共同组成了
整个软件产品和系统的架构。
基础架构的例子包括:'( 和 :1 等主流的基础平台和各种公共应用框架,由基础库
*+、对象模型、事件模型、各种开发和应用的扩展规则等内容组成。我们只有熟悉基础架
构的构造细节、应用机理,才能有效地开发出高质量、高性能的上层应用。然而,开发一
个面向最终用户的软件应用系统和产品,仅仅掌握一般的计算机高级编程语言知识和基础
平台架构、*+ 的使用知识显然是不够的,我们还需要根据客户应用的类型和特点,在基础
架构之上,设计出符合用户要求的高质量应用软件。
熟悉 *、 抽象建模技术、设计原则以及架构模式和设计模式等等方法技术,不
但有助于我们更好地理解和利用基础平台架构,也有助于我们设计开发出更高质量的应用
软件架构。
风险驱动、敏捷迭代的架构设计与开发
软件架构将随着软件产品和系统的生命周期而演化,其生命期往往超过了一个项目、
一次发布,甚至有可能长达数年之久,因而软件架构无论对于客户还是开发商来说都是一
项极其重要的资产。
软件架构的设计应该遵循什么样的开发过程?或者说,有没有更好的、成熟的软件架
构设计和开发过程?回答是,1- 世纪的软件架构设计应该优先采用敏捷迭代的开发方式和
方法。与 传统做 法不 同, 敏捷迭 代开发 主张 软件 架构采 用演进式设 计( #,;
8$),一个软件产品或系统的架构是通过多次迭代,乃至多次发布,在开发生命周期
中逐步建立和完善起来的。
好的软件架构不是一蹴而就的。在架构设计开发过程中,我们应该尽量避免瀑布式思
上 学 吧 为 您 提 供 系 统 架 构 设 计 师 考 试 资 料 下 载 : http://www.shangxueba.com/share/
e2 8 .html
上学吧
维,通过一个“架构设计阶段”来完成系统的架构设计乃至详细设计,然后再根据架构图纸
和模型,在“编码实现阶段”按图索骥进行架构的编码与实现。这种传统做法的错误在于认
为软件架构就是图纸上的模型,而不是真正可以高质量执行的源代码。几十年的软件工程
实践表明,没有经过代码实现、测试、用户确认过的架构设计,往往会存在着不可靠的臆
想、猜测和过度设计、过度工程,极易造成浪费和返工,导致较高的失败率。
风险是任何可能阻碍和导致软件产品系统研发失败的潜在因素和问题。软件架构是软
件产品和系统研发的主要矛盾和主要技术风险,软件架构的质量决定了整个软件系统和产
品的质量。不确定性往往是软件架构设计当中一种最大的潜在风险。因此,软件架构的设
计与开发应该遵循风险驱动的原则,在整个开发生命周期内至始至终维护一张风险问题清
单,随着迭代的前进,根据风险的实时动态变化,首先化解和处理最主要的架构风险,再
依次化解和处理次要的架构风险。
架构设计的可视化建模
软件架构设计的难度源于软件设计问题本身的复杂性,一个复杂的软件系统往往存在
大量复杂的、难于被人类所理解的细节和不确定因素。抽象与建模是人类自诞生以来就已
掌握的理解复杂事物的方法,因而人类所从事的软件设计工作本质上也是一个不断建模的
过程。我们可以通过各种抽象的模型和视图,从各个不同层次、宏观和微观的角度来理解
复杂的软件架构,以保证作出正确和有效的设计。
有人认为:“软件架构就是源代码(8)”以及“源代码就是设计”。这种说法
其实是片面的。什么是真正的软件?我们知道,最终可以在电脑上执行的真正的软件其实
是二进制代码 0 和 -,借助编译器我们把高级编程语言翻译成底层的汇编语言、机器语言
等,没有人能直接、完整地看到二进制程序在 +< 上的实际运行状况(,),人们大
多只能通过各种调试工具、窗口视图等方式来间接地动态观察这些真正的软件的运行片段
因此,:#、=、>>等等设计时(8$,)源代码在本质上也是一种模型,虽然是一
种经处理后可执行的静态模型,但显然它们并不是真实软件和软件架构的全部。可见,源
代码模型(有时也叫实现模型)与 <) 模型其实都是软件架构的一种模型(逻辑反映),
差别就在于抽象层次的不同。完整的软件架构(建筑)不仅仅包括源代码(实现模型),
还包括了需求模型、分析模型、设计模型、实现模型和测试模型等等许多模型,软件架构
本身就是一组模型的集合。
<)、";) 是当前国际上流行的软件系统架构可视化建模语言。在编写实际的代码
之前,利用包图、类图、活动图、交互图、状态图等等各种标准图形符号对软件架构进行
建模,探讨和交流各种可行的设计方案,发现潜在的设计问题,保证具体编码实现之前抽
象设计的正确性,被实践证明是一种非常有效和高效、敏捷的工作方式。
架构设计的重用
重用()是在软件工程实践中获得高效率、高质量产品和系统开发的一种基本手
段和主要途径,通过有组织的、系统和有效的重用,我们往往可以获得-0 倍率以上的效率
提升。而一个优秀的、有长久生命力的软件架构(比方主流的一些框架软件),其本身或
上 学 吧 为 您 提 供 系 统 架 构 设 计 师 考 试 资 料 下 载 : http://www.shangxueba.com/share/
e2 8 .html
剩余34页未读,继续阅读
quihaitang
- 粉丝: 0
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0