我在Motorola的网络部(注:今年4月份该部门被Nokia Siemens Networks收购,所以我现在是NSN的员工)担任架构师(Software Architect)一职至今近两年了,最近因为微博上的博友询问起软件架构师的职责一事,所以想到写一篇文章来分享现有公司的要求。至于软件架构师所需掌握的技能,我打算后面写另一篇博文来分享。

 
这里的话题主要牵涉公司的系统工程(System Engineering)和开发工程(Development Engineering)两个部门。系统工程部主要的责任是根据市场需求文档(由市场部编制)实现系统级与子系统级的技术需求定义与分解,并将分解的结果形成一定的文档。文档类型包括需求文档、接口控制文档、系统架构文档、信息模型文档等。系统工程部的工程师被称为系统架构师(System Architect)或直接称为系统工程师(System Engineer)。开发工程部则根据系统工程部的输出文档开发出最终的软件产品。软件开发架构师(Development Architect)是开发工程部最早参与产品开发的人,他们的职责包括:
 
1) 参与审查(Review)系统工程部的所有文档。系统工程部门的设计方案必须得到所有网元(Network Element,这是电信行业的术语,它是指一个系统中的子产品)级软件架构师都理解和认可以确保其可开发性,这是通过让软件架构师审查系统工程部的输出文档来保证的。软件架构师在审查的过程中可以让相关的开发工程师参与进来,以保证审查质量。出现这种情形,是因为软件架构师存在对具体实现细节不如工程师了解这种情形。 
 
2) 作为系统工程部与开发工程部的接口人。在系统工程部需要开发工程部的帮助以了解软件实现细节时,系统工程部会通过软件架构师获得帮助。反之,开发工程部需要系统工程部的帮助时软件架构师就是桥梁。
 
3) 主导网元级研发工作量的评估。在公司计划开发一个新功能或特性时,需要先评估其工作量,软件架构师需要组织网元级工作量的评估,并负责将评估结果录入相应的管理工具中。值得一提的是,评估工作是发生在系统工程部和开发工程部开始具体开发工作之前。 
 
4) 实现技术需求网元级的细化和参与需求管理。软件架构师需要根据系统工程部的技术需求做进一步的细化,使得软件开发工程师能实施开发工作。细化后的需求需要与系统工程部的需求进行关联,关联工作也是由软件架构师来完成的。
 
5) 编制软件架构文档。软件架构文档描述了网元的实现包含哪些软件模块,并定义各模块的角色和模块间的消息交互(包括消息名和消息格式)。软件架构文档与网元级的需求(由前面第2项产生)是软件开发工程师工作的输入内容。
 
6) 帮助软件开发工程师答疑解惑,内容包括软件业务逻辑方面的和编码方面的。软件开发工程师如果对需求所描述的业务逻辑存在疑惑,会向软件架构师寻求帮助。如果软件架构师也无法解决,则软件架构师需要向系统工程部获取帮助。软件架构师需要接触软件代码,并在必要的时候需要亲自实施软件设计和编码工作。
 
7) 审查概要设计和详细设计。开发工程师完成概要设计后,需要招开设计审查会议,软件架构师是审查会议中的重要角色。同样地,开发工程师完成详细设计后,也需要邀请软件架构师参与到代码审查会议中。
 
8) 审查测试用例。开发工程师用于验证软件实现的测试用例需要经过软件架构师的审查。
 
9) 参与或发起开发流程的改善工作。对于系统工程部发起的大范围的流程改善工作,软件架构师是开发工程部的代表。对于开发工程部内部的流程改善工作,软件架构师是发起者和组织者。
 
10) 领导软件疑难问题的攻坚工作。软件架构师因为大多有丰富的经验,自然在解决软件疑难问题时需要扮演重要的角色。
 
11) 负责项目在不同研发中心的技术转移工作。当一个项目需要从一个研发中心转移到另一个研发中心时,软件架构师是主要的技术负责人和领导者。
 
从上面列出的职责来看,软件架构师在软件实现阶段起着非常重要的角色。读者可能对系统工程师与软件架构师的区别还有疑惑,下面做一个简单的总结:
 
1) 系统工程师专注于业务逻辑,不关注代码实现。因此,系统工程师需要对行业规范有很全面和深入的了解。
 
2) 软件架构师对行业规范的了解程度不需要象系统工程师那样高,但需了解不少代码实现细节。尽管软件架构师对行业规范的要求不是太高,但必须具备快速查找系统工程部所编制的各种文档。
 
3) 另一个区别前面已经讲了,系统工程师来自系统工程部,而软件架构师来自开发工程部。