软件架构师工作流程
开学第一课我们观看了《梦想改造家》,在这个案例中小冯家的老房子位于上海市黄浦区一栋“纸片楼”的顶层,总体呈三角形,面积为25平米,最宽的地方有6米,最窄的地方却只有0.2米。设计师王平仲再度回归,极限挑战了这一畸形户型。在他的精心改造下,纸片屋最终华丽逆袭,极致利用空间的创意,充满人性关怀的设计细节,无一不让人惊叹和感动。这位有着“暖男”称号的设计师,再一次让我们感受到了设计师“提供有借鉴意义的设计,同样与我们相关的软件架构师跟建筑设计师有相类似工作性质的。一个建筑设计师的工作流程类似于一个软件架构师的工作流程。
软件体系架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。主导系统全局分析设计和实施、负责软件构架和关键技术决策的人员。通俗的说,主导系统全局得分析设计和实施、负责软件构架和关键技术决策的人员就是软件架构师。
首先,软件架构是用来沟通的,架构师首先要进行需求分析,就像王平仲第一时间去拜访了委托人一样,得到真实可靠的需求。有人认为架构师是在需求规格说明书完成后介入的,只对最终的需求审核和确认,提出需求不清和不完整的部分。一个合格的·软件架构师第一要了解软件的基本边界和功能需求,软件架构必须满足软件项目所有步众代表都有自己立场与视角的模型、文档说明,且这些模型文档说明仅清晰包含自己立场与视角关注与有关的事物,不能有任何遗漏,也最好不要有多余往往不会深入挖掘需求,有很多隐藏的需求客户自己可能意识不到,而架构师则可以依靠敏感的软件嗅觉发现这些需求,另外,分析人员往往脱离开发团队,盲目接受客户需求,而架构师能够清楚把握现有的研发团队能做什么,不能做什么,提前预知风险,降低项目失败的机率。
其次,软件架构的每一步都是决策过程,而且关键需求决定架构,软件架构必须充分清楚地表达出这些决策与决策理由。众多的需求中为什么这些需求是关键需求?为满足这些关键需求,采用了什么样的关键机制、核心技术与第三方框架?什么选择这些关键机制、核心技术与第三方框架而不选用其它的?为什么说它们是可行的?
再则,软件架构必须为以后的开发提供足够的指导与限制,因此软件架构必须确定系统各元素间的关系、职责、交互接口与协作机制。仅仅划出几个层与层中包含的元素而不约束它们间的关系、职责、交互接口与协作机制,就如同一个公司,它的组织结构图就挂在墙上——再清晰不过了,但如果接口不清、机制不明,来了任务、出了事情不清楚找谁、如何汇报、怎样处理。
然后,软件架构必须突出强调通信机制、持久化机制和消息机制等公用模块的深入设计。通信机制、持久化机制和消息机制等公用模块较多的涉及软件的不同部分之间的交互,对系统的功能实现、非功能满足等成功因素起着举足轻重的作用。
最后,由于软件项目的不同、开发组织结构的不同、开发团队情况的不同,软件架构的设计粒度是不一定的。比如,航天航空领域中的软件系统对系统的可靠性等质量属性要求非常高甚至可以认为是荷刻,这种情况下对架构的设计详细程度的要求也会比较高;象大的团队中又有小的团队共同开发,架构的设计粒度到子系统级就足够了,各个小团队精通的技术各不相同,可以让其对子系统采用敏捷开发,对缩短工期、人尽其材有好处;有类似项目经验或项目团队所有成员整体技术水平较高的团队架构粒度可适当粗犷,而分布团队或涉及外包的情况则更强调架构的明确性。总之,架构设计对软件的不同部分的设计程度不应是整齐划一的,特别是具体的业务功能模块在架构设计中往往设计程度不深。
软件架构师在技术全面、成熟练达、洞察力强、经验丰富,具备在缺乏完整信息、众多问题交织一团、模糊和矛盾的情况下,软件架构师能迅速抓住问题要害,并做出合理的关键决定的能力 l、具备战略性和前瞻性思维能力,善于把握全局,能够在更高抽象级别上进行思考。