每家公司软件工程的实施方式,以及实施人员的岗位职责的设定都不尽相同,通过本节课介绍希望能统一大家的一些基本认知,为后续课程的交流提供统一的上下文。
软件工程生命周期大体可以分为以下六个阶段:
在这里我从两个视角来介绍一下软件工程的最核心的工作流程:
从产品经理提出产品需求开始,之后有UED进行用户体验设计,架构师进行架构设计,研发进行详细设计和编码开发,开发好后交由测试人员测试,最终测试通过后,通过运维人员发布上线并交付给用户或业务人员使用,在使用过程中发现问题会产生线上事件并反馈研发团队修改,有时用户也会提出一些改进性意见,由产品经理分析汇总后进入到下一轮的需求迭代。在整个项目进行过程中,项目经理会负责整体把控项目进度和控制项目风险,协调各方资源,确保成功上线。
除了项目团队外,公司通常还会设置一些基础横向团队,比如运维团队、框架(或者叫系统)研发团队,这些团队通常会负责软硬件资源及环境、源代码、发布运维、项目管理等系统研发和运维,另外为了统一公司视觉、交互标准、管理标准,并降低项目团队技术实施门槛,框架/系统研发团队还会提供一些可重用的组件或关键系统中间件等供各项目团队接入或使用。
一般来说项目立项后,产品经理会在项目管理系统中创建产品信息、需求信息以及产品版本信息(包括一组具体的本期要实现的需求,通常对应项目),之后由这些需求派生出一个个具体的任务并指派到具体的参与人,任务完成后要经过验收确认,当所有的任务都完成并验收后代表本轮迭代完成,将偿试发布上线。
在产品版本或项目创建的同时,源代码管理系统会创建代码的仓库及分支,同时根据产品类型制定代码发布策略(如主干发布还是分支发布等等),在任务执行过程中,研发人员会不断的提交并合并代码,当任务完成并准备上线的时候,通常研发负责人会合并分支,标签并触发后续提测或发布流程。
当发布流程被触发时,发布系统会根据提前设置好的策略拉取指定分支、指定标签的源码,并在干净的环境中对源码进行编译打包构建,之后将构建的结果发布到构建库或镜像库,之后由发布脚本将成品最终发布到目标环境。
每一个上线的项目,通常会按照运维或框架的标准和规范接入日志、跟踪及指标等监控运维系统,同时会通过UAT、金丝雀等环境验证后才会最终发布至生产环境,当发布中或发布后产生任何问题时发布和运维系统应及时通知到各参与方,各参与方根据事件情况最终决定停止上线、紧急修复还是回退处理。
另外运维团队还会根据当前的运维情况,业务情况及对未来业务增长的预期和各部门的项目规划,阶段性的统一进行资源规划、预算申请、资源采购及环境准备等工作,当项目落地时,再进行具体项目资源分配。
在整个研发及运维横向体系构建和运营的过程中,架构师也应深度参与并提供架构建议,帮助界定每个系统的边界职责并制定相应的标准规范,之后这些边界职责标准规范等等都将成为后续架构设计时技术储备。
通过上面的描述,软件工程的核心参与方及职责描述如下:
1.产品经理
运营逻辑:照我说的做一定能赚钱
2.UED
用户体验:照我说的做用户一定喜欢
3.架构师
确保可控:照我说的做一定能做出来
4.研发工程师
设计及实现:具体怎么做、做
5.测试工程师
质量保障:有我在线上质量没问题
6.运维工程师
运维保障:有我在运行环境没问题,产品运行有问题我马上告诉你
7.项目经理
项目管理:保证按时保质完成任务
在整个软件工程过程中,架构师的职责是不断变化的,在有需要的时候他可以是布道师,可以是预言家,可以是法官,更可以是脚踏实地的技术实干家。
架构师与其他参与方之间的关系如下:
架构师与产品经理
立项阶段架构师应向产品经理提供技术可行性支持;
产品经理是架构师的最大需求输入方,架构师应对产品经理的提供的需求有一定的要求。
架构师与项目经理
架构师应协同项目经理管理技术风险点并提供可能的解决方案支持;
项目经理负责确定项目范围、协调各方资源、跟进项目进度及风险情况,确保项目最终成功。
架构师与框架/系统研发
框架研发负责基础组件及中间件的开发,某种程度上比架构师更像技术专家;
架构师可以借力框架/系统研发来降低业务团队技术实施难度,确保架构落地。
架构师与开发经理
开发经理会负责管理研发资源、排期、组织详细设计及代码审查;
架构师应指导研发团队进行详细设计,必要时提供必要的技术支持与培训,帮助程序员成长,确保架构落地。
正如上节课提到过的架构师是一个需要多方面架构能力培养、广泛知识积累以及系统性深度思考的综合性职业,一个真正的架构师会让整个团队有一种极致的安全感,而想成为一个真正意义上的架构师也不是一朝一夕的事情,它需要大家长久的持续不断的学习和投入。真心希望猿猿趴架构实战系列课程能真正地帮到大家,在各位的架构师成长之路上与你一路相伴。