论软件架构师的角色和培养

1 软件架构与软件架构师

        定义1(软件架构)  软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。

软件架构师的作用主要体现在三个方面:

  (1)行业应用架构。行业架构师往往是行业专家,了解行业应用需求,其架构行为主要是将需求进行合理分析布局到应用模型中去,偏向于应用功能布局。

  (2)应用系统技术体系架构。技术架构师往往是技术高手中的高手,掌握各类技术架构、掌握应用设计模式,其架构行为考虑软件系统的高效性、复用性、安全性、可维护性、灵活性、跨平台性等。

  (3)规范架构。规范架构师是通过多年磨砺或常年苦思顿悟后,把某一类架构抽象成一套架构规范,当然也有专门研究规范而培养的规范架构师。他们的产物往往也分为应用规范和技术规范两类。

  综上所述,可以通过定义2对软件架构师进行认识和理解。

  定义2(软件架构师) 软件架构师是软件项目的总体设计师,是软件组织新产品开发与集成、新技术体系的构建者,是从宏观上驾驭大型系统的战略家,是对软件项目中所有重要架构事情做出决策的人,是策略制定者、组织协调高手、称职的顾问与领导者。

 2 软件架构师的角色与定位

软件架构师的主要任务就是规划与系统架构层次相关的事务,评估可能的风险与成本,并有效运用有限的人力、物力资源满足系统层次的需求。优秀的软件架构师是保证软件系统强大生命力的核心人物。专业架构师能够帮助组织全面研究现有架构和设计模式、评估系统设计的优缺点和可能存在的风险,通过一系列的专题指导和具体案例帮助组织掌握先进的、成熟的设计模式,简化复杂的业务逻辑和需求,确定系统最佳方案。在必要的情况下,还可就特定领域或课题,为开发人员提供定制指导。

     软件架构师与系统分析师的区别
     (1)项目管理师:掌握信息系统项目管理的知识体系,具备管理大型、复杂信息系统项目和多项目的经验和能力;能根据需求组织制定可行的项目管理计划;能够组织项目实施,对项目的人员、资金、设备、进度和质量等进行管理,并能根据实际情况及时做出调整,系统地监督项目实施过程的绩效,保证项目在一定的约束条件下到达既定的项目目标;能分析和评估项目管理计划和成果;能在项目管理进展的早期发现问题,并有预防问题的措施;能协调项目所涉及的相关人员。即项目管理师的主要职责是负责整个项目的实施和控制,协调各种资源(包括组织内部资源和客户资源)。

  (2)系统分析师:熟悉应用领域的业务,能分析用户的需求和约束条件,写出信息系统需求规格说明书,制订项目开发计划,协调项目开发与运行所涉及的各类人员;能指导制订企业的战略数据规划,组织开发项目;能评估和选用适宜的开发方法和工具;能按照标准规范编写系统分析、设计文档;能对开发过程进行质量控制与进度控制;能具体指导项目开发。即系统分析师的主要职责是获取并分析用户的需求,形成规范化的文档,指导整个项目的开发,需要与客户不断的交流,熟悉应用领域的业务。

  (3)系统架构师:能够根据用户需求,结合用户应用领域的实际情况,设计正确、合理的软件构架,维护系统构件及其接口,并确保系统构架具有良好的性能;能够对项目进行系统构架级的描述、分析、设计与评估;能够按照相关标准编写相应的设计文档;具有扎实的理论功底、广博的知识面,能够与系统分析师、项目管理师相互协作、配合工作。即系统架构师的职责是负责整体的、宏观的系统设计,重点在架构级别上。还要对架构进行描述、分析和评估,属于纯技术性的工作。

3 软件架构师的资格

   软件架构师的知识体系

  软件架构师作为整个软件系统结构的总设计师,其知识体系、技能和经验决定了软件系统的可靠性、安全性、可维护性、可扩展性和可移植性等方面的性能。因此一个优秀的软件架构师必须具备相当丰富的知识、技能和经验。

  通过对比软件架构师和系统分析师在软件开发中的职责和角色,不难发现软件架构师与系统分析师所必需的知识体系也是不尽相同的,系统分析师的主要职责是在需求分析、开发管理、运行维护等方面,而软件架构师的重点工作是在架构与设计这两个关键环节上。因此在系统分析师必须具备的知识体系中对系统的构架与设计等方面知识体系的要求就相对低些;而软件架构师在需求分析、项目管理、运行维护等方面知识的要求也就相对低些。

  那么,成为一名合格的软件架构师必须具备哪些方面的知识呢?总体上来说,软件架构师必须具备的知识体系可以分为两大方面,分别是信息系统综合知识体系和软件架构知识体系。下面就这两个方面进行详细的阐述。

3.1.1 信息系统综合知识体系

  (1)计算机系统综合知识:包括计算机组成与体系结构、嵌入式系统和操作系统等方面的知识。

  (2)系统配置和方法:包括系统配置技术和系统性能等方面的知识。

  (3)典型系统应用:包括网络应用、数据库应用和多媒体系统等方面的知识。

  (4)系统开发:包括程序设计语言、软件开发方法、需求分析和设计方法、测试评审方法、开发管理、应用系统构建、系统审计、外部资源使用和基于中间件的开发等方面的知识。

  (5)安全性和可靠性技术:包括数据安全与保密、防闯入和防病毒、容错技术、可靠性模型与分析技术、系统可靠性、安全规章和保护私有信息规则等方面的知识。

  (6)标准化:包括标准化的基础知识、标准化分级、编码标准、数据交换标准、软件工程标准、信息安全标准、基于构件的软件标准和标准化组织机构等方面的知识。

  (7)信息化基础:包括政府信息化与电子政务、企业信息化与电子商务、信息化的有关的法律和规定等方面的知识。

  (8)数学和英语:至少具有大学以上的数学和英语基础知识。

2) 软件架构知识体系

  (1)系统计划:包括项目的提出和可行性分析、系统方案的制定、评价和改进、新旧系统的分析与比较、现有软、硬件和数据资源的有效利用等。

  (2)软件架构设计:包括软件架构的概念、软件架构与设计、架构风格、特定领域的架构风格、基于架构的软件开发方法、架构评估、软件产品线和系统演化等。

  (3)设计模式:包括设计模式的概念、组成、分类和实现、模式和软件架构的关系等。

  (4)系统设计:包括处理流程设计、人机界面设计、文件与存储设计、数据库设计、网络应用系统的设计、系统运行环境的集成与设计、中间件与应用服务器、性能设计与性能评估等。

  (5)软件建模:包括定义问题与归结模型、结构化系统建模与数据流图、面向对象系统建模、数据库建模和逆向工程等。

  (6)分布式系统设计:包括分布式通信协议的设计、基于对象与web的分布式设计、基于消息和协同的分布式设计和异构分布式系统的互操作性设计等。

  (7)嵌入式系统设计:包括实施任务调度和多任务设计、中断处理和异常处理、嵌入式系统开发设计等。

  (8)系统可靠性分析与设计:包括系统故障模型和可靠性模型、系统的可靠性分析与可靠度计算、提高系统可靠性的措施、系统的故障对策和系统的备份与恢复等。

  (9)系统的安全性和保密性设计:包括系统的访问控制技术、数据的完整性、数据与文件的加密、通信的安全和系统的安全设计等。

  (10)复杂架构设计:包括操作系统的架构、编译器的架构和大型基础库的架构等。

 软件架构师的任职条件

  根据软件架构师的职责和角色定位,以及知识体系,从实践的角度考虑,合格的软件架构师应该具有以下能力和经验:

  (1)具有8年以上的软件项目开发实际工作经验,其中至少有3年以上的代码编写工作经验,4年以上的基于面向对象和构件开发方法的软件产品设计经验。

  (2)具有5个以上大中型开发项目的总体规划、方案设计经验,有大中型应用系统开发和实施的成功案例。

  (3)对相关的技术标准有深刻的认识,对软件工程标准和规范有良好的把握。

  (4)对.Net或Java技术及整个解决方案有深刻的理解及熟练的应用,精通Web Service和J2EE等流行的架构。

  (5)对设计模式有深刻的理解,并能在此基础上设计出适合产品特性和质量属性的框架。

  (6)具有面向对象的分析、设计和开发能力,精通UML和XML,能熟练使用Rational Rose、PowerDesigner等工具进行设计。

  (7)具有良好的团队意识和协作精神,有较强的沟通能力和书面表达能力。

  (8)具有旺盛的精力和学习能力,能快速掌握新技术和新方法。

 

4 软件架构师工作的评估

  通过上面的介绍,读者对软件构架师有了的较深刻的认识,明白了软件构架师的地位和作用、工作职责及任职条件,同时还区别出与其他角色的不同。既然在软件组织中要设置软件架构师的职位,那么,就存在一个绩效考核的问题。对于软件架构师的绩效考核,可以根据对工作职责和任职条件的考察,通过以下方面来评估软件架构师的工作成绩:

  (1)是否是某一技术领域的专家。

  (2)能否指导软件设计师的工作,发现并指出设计存在的问题并提出解决方法,评审他们的工作。

  (3)能否及时有效地解决设计、开发人员所提出的问题,解决技术上的难题。

  (4)能否经常组织并带领内部人员研究、学习与项目相关的新技术和新方法。

  (5)能否组织和管理好内部的技术研究和攻关工作。

  (6)能否给项目、产品开发实施团队提供技术保障。

  (7)所设计的软件架构是否合理,技术是否先进,能否满足客户的需求,满足产品的功能和性能要求。

  (8)所设计的软件架构是否具有可扩展性和安全性,能否经受压力测试等。

  (9)是否具有分析、识别并尽可能地回避风险,降低风险所引发问题成本的能力。

  (10)能否为组织降低开发成本,提高开发效率。

  (11)能否与系统分析师和项目管理师协调工作,工作是否和谐。

  (12)是否具有良好的团队意识和协作精神,是否有较强的沟通能力和书面表达能力。

5 软件架构师的培养与认证

5.1 软件架构师的培养

  软件架构师一般都是具备计算机科学或软件工程的知识,由程序员做起,然后再慢慢发展为架构师的。在国内,很多大学目前还没有设立软件架构的学位课程,虽然IT业界对设计和架构的兴趣日渐高涨,但各学校还无法在课程中增加相应的内容来体现这一趋势。从这个方面来说,学校教育已经远远落后于产业发展。因此,促进和发展软件架构学课程的任务将落在现在的软件架构师身上。目前的软件架构师应该帮助各大院校建立相关课程体系,一旦教育课程建立起来,知识体将不仅通过新毕业生的工作成果来得到扩展,同时也会从适合软件架构的教育研究和出版物中得到扩展[28]。

  虽然大学要加强软件架构学课程的建设,但是,软件架构师的成长应该有一个实践的教育过程,并不是简单的学校的理论学习或者通过大型软件公司的认证就能成为合格的软件架构师。除了信息系统综合知识在学校学习外,软件架构师的大部分知识和经验将来自实际开发工作。根据软件架构师的任职条件,一名合格的软件架构师的成长应该经历8年以上的软件项目开发实际工作经验。一般需要经历程序员、软件设计师等阶段,然后再发展成为软件架构师。

  当然,并不是每一位程序员经过8年后都可以成长为软件架构师的。一个软件工程师在充分掌握了软件架构师工作所必需的基本理论和技能后,如何得到和利用机会、如何利用所掌握的技能进行应用系统的合理架构、如何不断的抽象和总结自己的架构模式、如何深入行业成为能够胜任分析、架构为一体的精英人才,这就在于机遇、个人的努力和天赋了。

  就目前来看,国内软件架构师的培养途径主要有两种方式,一种是大学(软件学院)教育方式,另一种是个人自我培养然后再进行相应的培训和认证。但是,不管哪种方式都有其不足之处。

  软件学院的培养方式能够系统的学习软件架构师必需的知识体系,但是,软件架构师不是简单的通过理论学习就能够培养出来的,软件学院的学生可能缺乏必要的设计、开发经验和相关的领域知识。尽管软件学院也强调给予学生实践的机会,但毕竟这种机会是有限的。有关“三分之一的师资来自企业”的规定,在部分软件学院中也没有得到真正落实,导致传授给学生的还是一些纯理论知识。

  自我培养方式的主要对象是具有一定年限的软件开发和设计人员,如Microsoft、IBM、Sun等公司的软件架构师认证对学员的基础并没有具体的要求,只要交纳规定的费用,然后进行几天的集中培训,通过考试就发给学员证书,甚至不需要考试就直接发放证书。这些开发人员在自我培养的过程中不一定能够系统的学习软件架构师的理论知识,他们只具有一定的开发和设计经验,仅仅经过几天的培训,是不太可能培养出合格的软件架构师的。而且,作为某个厂商的培训和认证,其最终目的是培育自己的市场,培养一批忠诚的用户,而不是为中国培养软件架构师。因此,也存在很大的问题和缺陷。

5.2 软件架构师的认证

  在国外,软件架构师的培养与认证具有严格的过程,明确规定了教育目标、认证的要求和学习课程等方面的内容。下面,介绍三个组织的软件架构师认证情况。

  (1)UC Irvine。在UC Irvine的软件架构师认证计划[27]中,为了拿到软件架构师C级认证,学员必须完成11个单元的必修课程和至少4个单元的选修课程。这些课程包括:
  ·必修课程:软件系统建模和分析概论(2个单元)、系统分析基础(3个单元)、用户需求的分析和文档化(3个单元)、软件架构项目(3个单元)。
  ·选修课程:信息系统项目管理(2个单元)、系统性能建模(2.5个单元)、管理业务改进项目(2.5个单元)。

  UC Irvine的软件架构师认证要求学员具有业务系统建模,决定用户需求,评价业务过程的能力,掌握项目管理技术,能设计完善的、具有最佳可适应性和可扩展性的架构。该认证程序以一门实践课程结束,在实践课程中,学员从头开始,设计一个大规模软件解决方案的架构。

  (2)CMU/SEI。SEI在软件架构师方面的认证[42]包括三个职位,分别是软件架构师、ATAM评估师和ATAM主任评估师。这些认证都需要学习2年的课程。其中软件架构师需要学习的课程有软件架构:原理与实践、软件架构文档化、)软件架构设计与分析和软件产品线。

  (3)iCMG。iCMG对软件架构师的认证强调7个层次的课程学习,如图2所示[30]。在该认证体系中,上面的3个层次由其合作伙伴完成,iCMG只负责下面4个层次的知识体系。


  目前,软件架构师的认证在国内基本上是空白,既没有专业的培训机构,也没有专门的认证指南和权威的教育认证机构。而软件架构师作为软件的总设计师,其水平和能力直接决定了软件系统的总体性能。根据教育部2004年9月8日关于紧缺人才的报告,2005年国内软件架构和系统分析人才缺口在6万人以上,是目前软件开发中急需的高层次技术人才。人事部和信息产业部[2003]39号文件决定在全国计算机技术与软件专业技术资格(水平)考试中设立系统架构设计师级别的认证考试,试图解决软件架构师认证问题。但是,由于各种原因,该考试未能如期举行,一拖再拖。其实,这些措施也只是暂时起到一个过渡的作用,只有建立完善的软件架构师教育培训方案和权威的教育认证机构,才是当前急需解决的问题。

5.3 寻求合适的培养方法

  针对软件架构师在软件组织中的作用和其在国内的培养现状,作者认为有必要将软件架构师的教育、培训和认证作为发展民族软件产业的一个基本决策,制定详细的软件架构师培养方案。因此,提出以下一些关于软件架构师培养的基本方法和途径。

  (1)确定软件架构师在软件组织中的职责和充当的角色,确定其相应的必须具备的知识体系,确定软件架构师的职业及其相关制度,制定软件架构师的培养目标和培养方案。

  (2)坚持以大学教育为主(特别是各软件学院在这方面可以大施身手),以项目实践为辅的教育方针。大学可以聘请现有的软件架构师担任核心课程的讲师,通过学校教育,系统学习软件架构师所必需的知识体系;通过项目实践使其具有初步的软件开发和设计经验,逐步成长为一名合格的软件架构师。

  (3)对国外一些大公司的软件架构师的培训和认证予以支持,但是在认证的过程中必须坚持符合我国实际情况的原则。例如,在认证考试之前对考生的知识体系进行系统的测试和评估,在通过认证后的适当时间内进行重新认证和继续教育。

  (4)建立完善的软件架构师教育和认证制度,使得通过认证的人员能够在实际的软件开发中成为称职的和优秀的软件架构师。并通过此制度能够为国家培养出更多、更优秀的软件架构师,解决当前软件架构师急缺问题。

6 结束语

  软件架构师是软件组织中必不可少的人才,对软件整体结构及性能都起着重要的作用,直接关系到软件产品的成功与否。但是当前绝大多数软件组织都没有配备专门的软件架构师,这对软件组织和软件产品都存在一定的隐患。因此对软件架构师这一角色必须有一个新的认识,对软件架构师的培养也要有一个详细的方案和措施。

  本文针对软件架构师的现状,着重讨论了软件架构师的概念,软件架构师在整个软件项目中所充当的角色,以及与其他职位之间的区别。阐述了软件架构师应该具备的知识体系和任职条件,提出了如何评估软件架构师工作业绩的方法。对软件架构师的培养和认证进行了系统的分析,提出了完善软件架构师培养和认证的应对措施。

  本文根据作者的实践经验,基于作者的理解和认识,讨论了软件架构师的角色定位和培养问题,旨在抛砖引玉。由于作者学识有限,其中观点可能不完善,甚至有错误之处,欢迎同行和专家斧正。为此,作者将不胜感激。

主要参考文献

[1]   Perry D E, Wolf A L. Foundations for the study of software architecture [J]. ACM SIGSOFT Software Engineering Notes, Oct. 1992, 17(4): 40~52
[2]   Liles, D.H. and Presley, A.R. Enterprise Modeling within an Enterprise Engineering Framework [C], Proceedings of the 28th Conference on Winter Simulation. Coronado, CA, ACM Press, 1996,pp. 993~999
[3]   Armour, F.J. et al. A Big Picture. Look at Enterprise Architecture [J], IT Professional, July/August, 1999, pp.31~39
[4]   Smolander, K. and Paivarinta, T. Describing and Communicating Software Architecture in Practice: Observation on Stakeholders and Rationale [C], Proceedings of CaiSE’02-The Fourteenth International Conference on Advanced Information Systems Engineering, Toronto, Canada, May 27-31, 2002, pp.117~133
[5]   IEEE. IEEE Recommended Practice for Architecture Description of Software-Intensive System [R]. IEEE Std 1471-2000, Oct 2000
[6]   孙昌爱,金茂忠,刘超. 软件体系结构研究综述[J].软件学报,2002(7):1228~1337
[7]   Clark, C., Abd-Allah, A., Clark, B.K., et al. On the definition of software system architecture [C]. In: Garlan D., ed. Proceeding of the 1st International Workshop on Architecture for Software System. New York: ACM Press. 1995, 85~95
[8]   IEEE. IEEE Glossary of Software Engineering Terminology [R]. 610.12-1990, 1998
[9]   Garlan, D., Shaw, M. An Introduction to Software Architecture [R]. Technique Report, CMU/SEI-94-TR-21, Carnegie Mellon University, 1994
[10]   Garlan D, Perry D E. Introduction to the special issue on software architecture [J]. IEEE Transaction on Software Engineering, April 1995, 21: 269~274
[11]   Eric M. Dashofy, Andre van der Hoek, Richard N. Taylor. A Highly-Extensible, XML-Based Architecture Description Language[J]. IEEE, 2001,3:103~112
[12]   Medvidovic, N., Rosenblum, D.S., Taylor, R.N. A Language and Environment for Architecture-Based Software development and evolution [C]. In: Proceedings of the 21st International Conference Software Engineering (ICSE’99). 1999. 44~53
[13]   Magee, J., Kramer, J. Dynamic structure in software architecture [J]. In: Kaiser, G.E., and ed. Proceedings of the ACM SIGSOFT’96: the 4th Symposium, Foundations of Software Engineering (FSE4). New York: ACM Press, 1996. 3~14
[14]   Kruchten, P.B. The 4+1view model of architecture [J]. IEEE Software, 1995,12(6): 42~50
[15]   Kazman, R., Bass, L., Abowd G.,et al. SAAM: a method for analyzing the properties of software architecture [J]. In: Proceedings of the ICSE 16.CA: IEEE Computer Society, 1994. 81~90
[16]   Mario, R., Barbacci, S., Jeromy, C., et al. Steps in an architecture tradeoff analysis method: quality attribute models and analysis [R]. Technical Report, CMU/SEI-97-TR-029, Carnegie Mellon University, 1997.
[17]   Inveradi, P., Wolf, A.L., Daniel, Y. Behavioral type checking of architectural component based on assumptions [R]. Technical Report, 1998. http://www.sei.cmu.edu/publications/cu-cs-861-98.ps.
[18]   Wen-Li Wang, Dan Scannell. An Architecture-Based Software Reliability Modeling Tool and Its Support for Teaching, In 35th ASEE/IEEE Frontiers in Education Conference, Oct,2005, 15~20
[19]   Vibhu Saujanya Sharma, Kishor S. Trivedi. Architecture Based Analysis of Performance, Reliability and Security of Software System [C]. In WOSP’05 Conference, 2005,6: 217~227
[20]   Martin Fowler. Who Needs an Architect? [J]. IEEE Software, 2003,7/8
[21]   Philippe Kruchten. The tao of the software architect. 2005,4, http://www-128.ibm.com/developerworks/rational/library/4032.html
[22]   Rebecca J. Parsons. Enterprise Architects Join the Team [J]. IEEE Software 2005, 9/10, 22(5): 16~17
[23]   UC Irvine. Software architect Certificate Program [J]. UC Irvine Extension, October, 2004,1~3
[24]   张友生.软件体系结构[M].北京:清华大学出版社,2004.1
[25]   张友生,王胜祥,殷建民. 系统架构设计师教程[M].北京:电子工业出版社,2006.1
[26]   Marc T. Sewell, Laura M. The Software Architect’s Profession: An Introduction [M]. Prentice Hall, 2002
[27]   Raphael Malveau, Thomas J, Mowbray. Software Architect Bootcamp [M]. Prentice Hall, 2001
[28]   蒋慧等译. 软件架构师职业导读[M].北京:机械工业出版社,2003.4
[29]   申峻嵘,黄星琪,王帅等译. 软件架构师教程[M].北京:电子工业出版社,2003.10
[30]   Mark Cade, Simon Roberts. Sun Certified Enterprise Architect for J2EE Technology Study Guide [M]. Prentice Hall, 2002
[31]   Noname. The Load of Architect. http://bbs.csai.cn/bbs/view.Asp?Id=%7BF53AA008-5201-4E9F-B529-DE3EF7B63BBB%7D
[32]   CMU/SEI. Software Architecture Certificate Programs.

你可能感兴趣的:(软件设计,构架)