论软件架构师的角色和培养:架构与架构师[1]

(作者:张友生) 

随着 软件 系统的规模越来越大,复杂程度越来越高,软件设计的核心已经超越了传统的“算法+数据结构 =程序”的设计模式,取而代之的是对系统的总体结构的 设计 和规范[1]。软件架构在软件系统中充当着重要的角色,软件架构也是软件工程中迅速发展的一个研究实践领域,有很多的文献[2~4]讨论了如何构架一个好的软件系统。软件架构师作为软件架构的设计者是关系到软件成败的关键因素。然而,有关软件架构师的角色定位以及教育培养问题,仍然比较模糊,没有一致的结论。

  作者近年来在软件架构的理论研究和实践方面做了一些工作,也取得了一定的成绩。负责起草了全国计算机技术与软件 专业 技术资格(水平)考试中的系统分析师 和系统架构设计师考试大纲,主编了有关考试教材。本文主要讨论软件架构师的角色和培养问题。文章按如下方式组织:第1节介绍软件架构和软件架构师的定义。第2节讨论软件架构师在整个软件项目中所充当的角色,包括软件架构师的职责、软件架构师与系统分析师(系统分析员)的区别。第3节研究软件架构师的资格,包括知识体系和任职条件。第4节主要讨论如何评估软件架构师的 工作 。第5节研究软件架构师的培养和认证问题。第6节是全文的总结。

  1 软件架构与软件架构师

  1.1 软件架构

  架构(architecture)的 英文 本意是来源于建筑行业的建筑艺术、建筑风格和结构,引入到软件领域后,并没有一个统一的定义。IEEE-Std-1471-2000认为[5]:架构是一个系统的基本组织,它蕴含于系统的构件中、构件之间的相互关系中、构件与环境的相互关系中、以及呈现于其设计和演化原则中。其实,软件架构(Software architecture,软件体系结构 )一词早在20世纪60年代就被E.W.Dijkstra提出,但是直到20世纪90年代初才开始流行起来。为了提高软件需求和软件设计的的质量,软件 工程 界提出了需求分析工程技术和各种软件建模技术。但是在需求和设计之间仍然存在一条很难逾越的鸿沟,即缺乏能够反映做决策的中间过程,从而很难有效地将需求转化为相应的设计。为此,软件架构的概念应运而生,并试图在软件需求与软件设计之间架起一座桥梁,着重解决软件系统的结构和需求向实现平坦过渡的问题[6]。由于领域的不同,学术研究和应用实践的不同,人们对软件架构也有不同的理解和定义[7~9]。尽管各种定义都从不同的角度关注软件架构,但其核心内容都是软件系统的结构,并且都涵盖了如下一些实体:构件、构件之间的交互关系、配置、构件和连接件构成的拓扑结构、设计原则与指导方针。

  在此,作者对软件架构的理解和认识可用定义1进行描述。

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

  目前,软件架构的研究已发展为软件工程领域的一个独立学科分支,具有比较严格的理论基础和工程指导原则[10]。软件架构已经成为软件工程领域的研究热点以及大型软件系统与软件产品线 开发 中的关键技术之一。有许多相关的研究人员对软件架构描述语言[11~13],软件架构的描述与表示[14,15],软件架构的分析与验证[16~19],基于架构的软件维护与演化[20,21],软件架构的可靠性[22,23]等方面进行了研究。

  1.2 软件架构师

  一直以来,绝大多数的软件组织都缺乏软件架构师的编制。架构设计的工作基本上由项目经理、系统分析师与软件设计师 兼任或分摊,导致普遍轻视软件架构专业 人才 的培养与任用。事实上,软件构架师是目前很多软件组织最急需的人才,也是一个软件组织中的高级技术人才。那么,究竟什么是软件架构师、软件架构师在项目开发中起什么作用、如何定位一个软件架构师和如何成为一个软件架构师呢?这是许多组织、技术人员和 管理 人员都希望知道的或希望参与讨论的话题。下面对软件架构师这一概念作简单的阐述。

  所谓架构师,通俗的说就是设计师或结构设计者,这些定义如果用在建筑学上,则是很容易理解的。在软件工程领域中,软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者。对一些大型软件产品或项目的开发,这一角色显得很关键,因为缺乏好的软件架构师而导致项目失败的例子不胜枚举,一个没有经验和能力的软件架构师也会使软件项目失败的速度加快。正因如此,Martin Fowler指出[24]:架构师是对所有重要事情做出决定的人。

  软件架构师在整个软件开发过程中都起着重要作用,并随着开发进程的推进而其职责或关注点不断地变化。在需求阶段,软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等。此外,架构师还要经常审查客户和市场人员所提出的需求,确认开发团队所提出的设计;在需求越来越明确后,架构师的关注点开始转移到组织开发团队成员和开发过程的定义上;在软件设计阶段,架构师负责对整个软件架构、关键构件、接口的设计。在编码阶段,架构师则成为程序员顾问,并且经常性地要举行一些技术研讨会、技术培训班等;随着软件开始测试、集成和交付,集成和测试支持将成为软件架构师的工作重点;在软件维护开始时,软件架构师就要开始为下一版本的产品是否应该增加新的功能模块进行决策。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值