内容摘要
从架构的本质,软件工程,架构师职责,成长路径等方面,介绍什么是架构,架构流程以及架构师职责和成长规划。
本篇主题
一、什么是架构
二、项目中的角色
三、架构师职责和工作内容
四、架构工作流
五、架构师成长路径
六、架构能力模型
七、扩展知识
八、本章总结
一、什么是架构
架构是系统的蓝图,描述了系统的结构和关键决策。包含系统的功能和非功能性需求,如何实现的,系统与子系统是如何划分的,系统之间如何通信的,系统功能如何设计的和交互的。
包含重要的架构决策,系统组成,功能设计,技术选型,成本分析等
架构的基础是设计满足客户需求的系统,其中包含功能性,非功能性以及质量和约束。
二、项目中的角色
客户:为系统开发买单的人,关注系统的业务价值。
用户:使用系统的人,关注是否满足功能需求,提升效率和易用性等。
项目经理:负责项目管理,组织,协调,沟通等管理工作。
需求分析师:负责需求相关工作,比如业务分析,需求获取,需求调研,需求管理,编写需求规格说明书等
系统架构师:负责整体的系统分析,架构规划,技术选型,核心功能需求和非功能性需求的架构设计。
系统设计师:在架构模型的基础上,进行核心功能和非核心功能的详细设计。
开发人员:根据架构设计和详细设计完成编码和单元测试,达到提测标准。
测试人员:验证开发功能是否满足需求,比如进行功能测试,集成测试,性能测试,压力测试,安全性测试,回归测试等。
运维人员:负责部署环境搭建,部署和日常维护。
三、架构师职责和工作内容
架构师在项目中起到承上启下的作用。建议参与到系统建设过程的全流程中。
架构师的职责如下:
1)支持售前或需求阶段,提供概念架构或技术咨询;
2)系统分析,架构设计,技术选型,产出架构解决方案;
3)指导项目团队成员,按照架构设计完成,开发,测试和发布;
4)开发或设计开发框架,制定编码/编程规范,设计架构原型,验证架构原型;
5)组织技术或架构培训,把握技术/架构方向;
6)方案平衡(实现与成本),干系人沟通,技术风险管理,技术领袖等;
按照项目阶段,简述工作内容,如下:
售前阶段,给予商务支持,提供系统解决方案和架构咨询。
需求阶段,与需求分析师一起,参与需求沟通,协助完成技术/业务咨询和需求模型。(好的架构师同时是业务专家)
架构阶段:进行系统分析和设计,进行系统抽象,设计系统模型,进行技术原型,开发架构原型等
设计阶段:指导设计人员完成详细设计;
开发阶段:指导开发人员按设计实现,解决技术难题。
测试阶段:指导测试人员测试工作,特别是非功能需求的测试。
发布阶段:指导部署人员按照部署架构进行部署,及时解答或反馈试运行期间的架构问题。
其他工作:技术选型,人员培训,技术指导
四、架构工作流程
架构工作流程是一个系统如何从需求,架构到实现的过程和方法。
良好的架构,需要架构师除具备技术和架构设计能力外,还要有良好(丰富)的业务知识。从软件工程角度,架构师除参与系统的架构设计阶段外,还需要参与需求分析阶段,开发,测试,发布,试运行阶段。
本节内容,从需求模型和解决方案模型,介绍架构工作的流程。
主要包括需求模型,架构模型,设计模型,解决方案模型,四个方面。
需求模型:参与需求分析和需求模型设计,提供技术建议或引导需求定义,提供解决方案指导。
主要参与者:需求分析师,业务分析师
辅助参与者:架构师,设计师
架构模型:根据需求模型,产出架构模型。
1)选择架构对象:关键流程,核心用例和非功能需求;
2)流程建模:梳理需求关键流程,分析业务对象,子系统,模块,设计出系统的交互流程;
3)领域建模:梳理业务流程中涉及的对象,子系统模块,划分子系统,模块,核心对象,通信机制,事务模型等
4)输出总体架构:根据领域模型和业务流程模型,结合组件架构,部署架构,通信机制,输出系统体架构方案。
5)架构验证:验证架构可用性,可以用评审或架构原型的方式,进行评审或实际测试验证。
主要参与者:架构师,架构委员会
辅助参与者:系统设计师,开发人员,测试人员
设计模型:在架构师指导下,根据系统架构,完成各子系统,模块,功能,接口的概要或详细设计。
主要参与者:系统设计师,高级工程师
辅助参与者:架构师
解决方案模型:架构模型,设计模型,架构原型等统一组成架构解决方案。
一个完整的系统架构应包括:整体架构,子系统,模块,功能概要或详细设计,通信机制,事务机制,接口定义(内部,外部),领域模型,业务流程,数据库设计,中间件,组件架构,部署架构等
系统架构解决方案标准
1)满足系统的功能和非功能性需求;
2)符合项目要求的规模和成本;
3)满足开发,测试和发布要求;
五、架构师成长路径
本质:学习,实践,总结,个人进步和能力成长的过程。
开发工程师:主要在指导下进行开发或独立进行简单功能开发。本阶段的核心是学好技术本身,多做一些项目,勤奋,思考,总结。这个时期就是学习,实践让自己的技能水平不断提升。空闲时间可以学一些设计模式,软件工程方面的知识,用于拓