论软件架构师的角色和培养:架构与架构师
随着软件系统的规模越来越大,复杂程度越来越高,软件设计的核心已经超越了传统的"算法+数据结构=程序"的设计模式,取而代之的是对系统的总体结构的设计和规范[1]。软件架构在软件系统中充当着重要的角色,软件架构也是软件工程中迅速发展的一个研究实践领域,有很多的文献[2~4]讨论了如何构架一个好的软件系统。软件架构师作为软件架构的设计者是关系到软件成败的关键因素。然而,有关软件架构师的角色定位以及教育培养问题,仍然比较模糊,没有一致的结论。
近年来在软件架构的理论研究和实践方面做了一些工作,也取得了一定的成绩。负责起草了全国计算机技术与软件专业技术资格(水平)考试中的系统分析师和系统架构设计师,主编了有关考试教材。主要讨论软件架构师的角色和培养问题。文章按如下方式组织:第1节介绍软件架构和软件架构师的定义。第2节讨论软件架构师在整个软件项目中所充当的角色,包括软件架构师的职责、软件架构师与系统分析师(系统分析员)的区别。第3节研究软件架构师的资格,包括知识体系和任职条件。第4节主要讨论如何评估软件架构师的工作。第5节研究软件架构师的培养和认证问题。第6节是全文的总结。
1 软件架构与软件架构师
1.1 软件架构
架构(architecture)的英文本意是于建筑行业的建筑艺术、建筑风格和结构,引入到软件领域后,并没有一个统一的定义。IEEE-Std-1471-2000认为:架构是一个系统的基本组织,它蕴含于系统的构件中、构件之间的相互关系中、构件与环境的相互关系中、以及呈现于其设计和演化原则中。其实,软件架构(Software architecture,软件体系结构)一词早在20世纪60年代就被E.W.Dijkstra提出,但是直到20世纪90年代初才开始流行起来。为了提高软件需求和软件设计的的质量,软件工程界提出了需求分析工程技术和各种软件建模技术。但是在需求和设计之间仍然存在一条很难逾越的鸿沟,即缺乏能够反映做决策的中间过程,从而很难有效地将需求转化为相应的设计。为此,软件架构的概念应运而生,并试图在软件需求与软件设计之间架起一座桥梁,着重解决软件系统的结构和需求向实现平坦过渡的问题。由于领域的不同,学术研究和应用实践的不同,人们对软件架构也有不同的理解和定义[7~9]。尽管各种定义都从不同的角度关注软件架构,但其核心内容都是软件系统的结构,并且都涵盖了如下一些实体:构件、构件之间的交互关系、配置、构件和连接件构成的拓扑结构、设计原则与指导方针。
在此,对软件架构的理解和认识可用定义1进行描述。
定义1(软件架构) 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
目前,软件架构的研究已发展为软件工程领域的一个独立学科分支,具有比较严格的理论基础和工程指导原则[10]。软件架构已经成为软件工程领域的研究热点以及大型软件系统与软件产品线开发中的关键技术之一。有许多相关的研究人员对软件架构描述语言[11~13],软件架构的描述与表示[14,15],软件架构的分析与验证[16~19],基于架构的软件维护与演化[20,21],软件架构的可靠性[22,23]等方面进行了研究。
1.2 软件架构师
一直以来,绝大多数的软件组织都缺乏软件架构师的编制。架构设计的工作基本上由项目经理、系统分析师与软件设计师兼任或分摊,导致普遍轻视软件架构专业人才的培养与任用。事实上,软件构架师是目前很多软件组织最急需的人才,也是一个软件组织中的高级技术人才。那么,究竟什么是软件架构师、软件架构师在项目开发中起什么作用、如何定位一个软件架构师和如何成为一个软件架构师呢?这是许多组织、技术人员和管理人员都希望知道的或希望参与讨论的话题。下面对软件架构师这一概念作简单的阐述。
所谓架构师,通俗的说就是设计师或结构设计者,这些定义如果用在建筑学上,则是很容易理解的。在软件工程领域中,软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者。对一些大型软件产品或项目的开发,这一角色显得很关键,因为缺乏好的软件架构师而导致项目失败的例子不胜枚举,一个没有经验和能力的软件架构师也会使软件项目失败的速度加快。正因如此,Martin Fowler指出[24]:架构师是对所有重要事情做出决定的人。
软件架构师在整个软件开发过程中都起着重要作用,并随着开发进程的推进而其职责或关注点不断地变化。在需求阶段,软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等。此外,架构师还要经常审查客户和市场人员所提出的需求,确认开发团队所提出的设计;在需求越来越明确后,架构师的关注点开始转移到组织开发团队成员和开发过程的定义上;在软件设计阶段,架构师负责对整个软件架构、关键构件、接口的设计。在编码阶段,架构师则成为程序员的顾问,并且经常性地要举行一些技术研讨会、技术培训班等;随着软件开始测试、集成和交付,集成和测试支持将成为软件架构师的工作重点;在软件维护开始时,软件架构师就要开始为下一版本的产品是否应该增加新的功能模块进行决策。
综上所述,软件架构师的作用主要体现在三个方面:
(1)行业应用架构。行业架构师往往是行业专家,了解行业应用需求,其架构行为主要是将需求进行合理分析布局到应用模型中去,偏向于应用功能布局。
(2)应用系统技术体系架构。技术架构师往往是技术高手中的高手,掌握各类技术架构、掌握应用设计模式,其架构行为考虑软件系统的高效性、复用性、安全性、可维护性、灵活性、跨平台性等。
(3)规范架构。规范架构师是通过多年磨砺或常年苦思顿悟后,把某一类架构抽象成一套架构规范,当然也有专门研究规范而培养的规范架构师。他们的产物往往也分为应用规范和技术规范两类。
综上所述,可以通过定义2对软件架构师进行认识和理解。
定义2(软件架构师) 软件架构师是软件项目的总体设计师,是软件组织新产品开发与集成、新技术体系的构建者,是从宏观上驾驭大型系统的战略家,是对软件项目中所有重要架构事情做出决策的人,是策略制定者、组织协调高手、称职的顾问与领导者。
作为一个软件架构师,在整个软件系统的开发过程中是乐趣无穷的,因为这个角色很具有挑战性,有时需要左右逢源八面玲珑,有时又需要果断坚定不留情面。Philippe Kruchten曾经说过[25]:当一个伟大的架构师领导开发团队时,团队的每个成员都感觉不到他的存在。次一点的架构师使开发团队的每个成员都喜欢他,再次一点的是害怕他,最次的是鄙视他。在国内,软件组织几乎没有独立的架构师,通常一个软件高手身兼数职,既是项目经理,又是软件架构师,甚至还是软件开发者,有时还要客串一个测试人员,这对软件的开发周期和产品质量是不利的。
编辑推荐:
温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)
点击加载更多评论>>