内容摘要
从架构的本质,软件工程,架构师职责,成长路径等方面,介绍什么是架构,架构流程以及架构师职责和成长规划。

本篇主题
一、什么是架构
二、项目中的角色
三、架构师职责和工作内容
四、架构工作流
五、架构师成长路径
六、架构能力模型
七、扩展知识
八、本章总结

一、什么是架构
架构是系统的蓝图,描述了系统的结构和关键决策。包含系统的功能和非功能性需求,如何实现的,系统与子系统是如何划分的,系统之间如何通信的,系统功能如何设计的和交互的。
包含重要的架构决策,系统组成,功能设计,技术选型,成本分析等
架构的基础是设计满足客户需求的系统,其中包含功能性,非功能性以及质量和约束。

二、项目中的角色
客户:为系统开发买单的人,关注系统的业务价值。
用户:使用系统的人,关注是否满足功能需求,提升效率和易用性等。
项目经理:负责项目管理,组织,协调,沟通等管理工作。
需求分析师:负责需求相关工作,比如业务分析,需求获取,需求调研,需求管理,编写需求规格说明书等
系统架构师:负责整体的系统分析,架构规划,技术选型,核心功能需求和非功能性需求的架构设计。
系统设计师:在架构模型的基础上,进行核心功能和非核心功能的详细设计。
开发人员:根据架构设计和详细设计完成编码和单元测试,达到提测标准。
测试人员:验证开发功能是否满足需求,比如进行功能测试,集成测试,性能测试,压力测试,安全性测试,回归测试等。
运维人员:负责部署环境搭建,部署和日常维护。

三、架构师职责和工作内容
架构师在项目中起到承上启下的作用。建议参与到系统建设过程的全流程中。
架构师的职责如下:
1)支持售前或需求阶段,提供概念架构或技术咨询;
2)系统分析,架构设计,技术选型,产出架构解决方案;
3)指导项目团队成员,按照架构设计完成,开发,测试和发布;
4)开发或设计开发框架,制定编码/编程规范,设计架构原型,验证架构原型;
5)组织技术或架构培训,把握技术/架构方向;
6)方案平衡(实现与成本),干系人沟通,技术风险管理,技术领袖等;
按照项目阶段,简述工作内容,如下:
售前阶段,给予商务支持,提供系统解决方案和架构咨询。
需求阶段,与需求分析师一起,参与需求沟通,协助完成技术/业务咨询和需求模型。(好的架构师同时是业务专家)
架构阶段:进行系统分析和设计,进行系统抽象,设计系统模型,进行技术原型,开发架构原型等
设计阶段:指导设计人员完成详细设计;
开发阶段:指导开发人员按设计实现,解决技术难题。
测试阶段:指导测试人员测试工作,特别是非功能需求的测试。
发布阶段:指导部署人员按照部署架构进行部署,及时解答或反馈试运行期间的架构问题。
其他工作:技术选型,人员培训,技术指导

四、架构工作流程
架构工作流程是一个系统如何从需求,架构到实现的过程和方法。
良好的架构,需要架构师除具备技术和架构设计能力外,还要有良好(丰富)的业务知识。从软件工程角度,架构师除参与系统的架构设计阶段外,还需要参与需求分析阶段,开发,测试,发布,试运行阶段。
本节内容,从需求模型和解决方案模型,介绍架构工作的流程。
主要包括需求模型,架构模型,设计模型,解决方案模型,四个方面。
需求模型:参与需求分析和需求模型设计,提供技术建议或引导需求定义,提供解决方案指导。
主要参与者:需求分析师,业务分析师
辅助参与者:架构师,设计师
架构模型:根据需求模型,产出架构模型。
1)选择架构对象:关键流程,核心用例和非功能需求;
2)流程建模:梳理需求关键流程,分析业务对象,子系统,模块,设计出系统的交互流程;
3)领域建模:梳理业务流程中涉及的对象,子系统模块,划分子系统,模块,核心对象,通信机制,事务模型等
4)输出总体架构:根据领域模型和业务流程模型,结合组件架构,部署架构,通信机制,输出系统体架构方案。
5)架构验证:验证架构可用性,可以用评审或架构原型的方式,进行评审或实际测试验证。
主要参与者:架构师,架构委员会
辅助参与者:系统设计师,开发人员,测试人员
设计模型:在架构师指导下,根据系统架构,完成各子系统,模块,功能,接口的概要或详细设计。
主要参与者:系统设计师,高级工程师
辅助参与者:架构师
解决方案模型:架构模型,设计模型,架构原型等统一组成架构解决方案。
一个完整的系统架构应包括:整体架构,子系统,模块,功能概要或详细设计,通信机制,事务机制,接口定义(内部,外部),领域模型,业务流程,数据库设计,中间件,组件架构,部署架构等
系统架构解决方案标准
1)满足系统的功能和非功能性需求;
2)符合项目要求的规模和成本;
3)满足开发,测试和发布要求;

五、架构师成长路径
本质:学习,实践,总结,个人进步和能力成长的过程。
开发工程师:主要在指导下进行开发或独立进行简单功能开发。本阶段的核心是学好技术本身,多做一些项目,勤奋,思考,总结。这个时期就是学习,实践让自己的技能水平不断提升。空闲时间可以学一些设计模式,软件工程方面的知识,用于拓展视野和为高级工程师做准备。
当自己的技术能力,项目经验,编码水平,设计能力达到一定程度后,就可以升级为高级工程师。
一句话:写好代码,积累经验。
高级工程师:可以独立或带领工程师负责某模块/系统的设计和开发,在技术和项目上有一定的经验。本阶段可以根据自己的职业目标选择深入技术或学习管理知识。
学习的方向:技术深度,技术广度,分布式,架构知识和管理知识等。
一句话:技术深入全面,思考完善的系统设计。
系统架构师(技术专家):在某一方面技术达到一定深度,在某些方面有自己的见解和独立解决问题的能力。可带领一个技术团队进行开发和管理工作。可完成需求分析,系统设计,技术选型,架构设计,开发管理等工作。
一句话:技术专家,架构实践和管理能力。
资深架构师:具备丰富的大型项目,多种项目的需求分析,系统架构,系统设计,项目管理等经验。在技术的广度和深度方面,业务知识方面具备专业的建树。
一句话:大型项目,领域专家和解决方案。
技术总监,CTO,技术副总裁:负责公司整体技术规划,技术管理,把握技术方向,精通业务和技术,具备良好的沟通,组织和协调能力。
一句话:方向,流程,制度,规范,管理。
以上是个人对职位和能力的总结,供参考。

六、架构师能力模型
从宏观角度和专业领域,简单介绍架构师的能力模型。
6.1 宏观角度
深度:在某一项或多项技术领域有一定深度,掌握技术的特点,适应场景和缺点
广度:多项技术,掌握非技术知识,比如需求,项目,管理等
6.2 专业领域
技术:精通一方面或多方面技术,有自己的见解和实践经验;
业务:精通负责领域的业务知识,达到或基本达到领域专家级别;
架构:精通需求分析,系统架构,设计模型,架构模型,具备丰富的架构经验;
管理:精通技术管理,项目管理和通用管理知识和能力;

七、架构扩展知识
以下内容可自行脑补。
1. 软件工程
2. 需求工程
3. 项目管理
4. 干系人,涉众

八、本章总结
从架构的本质,项目角色,架构师职责,软件工程,成长路径等方面,介绍了什么是架构,架构流程以及架构师职责,成长路径和能力模型。
本篇是根据学到的知识,工作经验和个人思考 ,进行的总结,供学习参考。不足之处,欢迎大家一起交流。
预告: 第二篇 架构知识领域
2.1架构方法论:面向过程,面向对象,面向方面,面向服务
2.2系统划分:系统,子系统,模块,功能,接口
2.3架构基本原则:通用专用,职责分离等
2.4模式:设计模式,架构模式,基础设施模式
2.5架构视图:4+1视图