2 软件工程及架构师

每家公司软件工程的实施方式,以及实施人员的岗位职责的设定都不尽相同,通过本节课介绍希望能统一大家的一些基本认知,为后续课程的交流提供统一的上下文。

2.1 软件工程-生命周期

软件工程生命周期大体可以分为以下六个阶段:

  1. 需求阶段(做什么)
  2. 设计阶段(怎么做)
  3. 研发阶段(做)
  4. 测试阶段(保证做的好)
  5. 发布阶段(交付给用户)
  6. 运维阶段(确保运行正常)

    与地球生物进化史从单细胞生物开始,历经了亿万年的演化,甚至期间还经历过阶段性的毁灭重生,才达到如今的繁荣鼎盛一样,现代的复杂软件从基本功能上线,到功能逐渐完备,再到追求极致的用户体验,期间也会经历多轮迭代,甚至可能还会经历推倒重构,才有可能最终发展完善,在每一轮迭代中都会有上面提到的六个阶段。

2.2 软件工程-核心工作流程

在这里我从两个视角来介绍一下软件工程的最核心的工作流程:

2.2.1 项目级工作流程


从产品经理提出产品需求开始,之后有UED进行用户体验设计,架构师进行架构设计,研发进行详细设计和编码开发,开发好后交由测试人员测试,最终测试通过后,通过运维人员发布上线并交付给用户或业务人员使用,在使用过程中发现问题会产生线上事件并反馈研发团队修改,有时用户也会提出一些改进性意见,由产品经理分析汇总后进入到下一轮的需求迭代。在整个项目进行过程中,项目经理会负责整体把控项目进度和控制项目风险,协调各方资源,确保成功上线。

2.2.2 平台级工作流程


除了项目团队外,公司通常还会设置一些基础横向团队,比如运维团队、框架(或者叫系统)研发团队,这些团队通常会负责软硬件资源及环境、源代码、发布运维、项目管理等系统研发和运维,另外为了统一公司视觉、交互标准、管理标准,并降低项目团队技术实施门槛,框架/系统研发团队还会提供一些可重用的组件或关键系统中间件等供各项目团队接入或使用。

一般来说项目立项后,产品经理会在项目管理系统中创建产品信息、需求信息以及产品版本信息(包括一组具体的本期要实现的需求,通常对应项目),之后由这些需求派生出一个个具体的任务并指派到具体的参与人,任务完成后要经过验收确认,当所有的任务都完成并验收后代表本轮迭代完成,将偿试发布上线。

在产品版本或项目创建的同时,源代码管理系统会创建代码的仓库及分支,同时根据产品类型制定代码发布策略(如主干发布还是分支发布等等),在任务执行过程中,研发人员会不断的提交并合并代码,当任务完成并准备上线的时候,通常研发负责人会合并分支,标签并触发后续提测或发布流程。

当发布流程被触发时,发布系统会根据提前设置好的策略拉取指定分支、指定标签的源码,并在干净的环境中对源码进行编译打包构建,之后将构建的结果发布到构建库或镜像库,之后由发布脚本将成品最终发布到目标环境。

每一个上线的项目,通常会按照运维或框架的标准和规范接入日志、跟踪及指标等监控运维系统,同时会通过UAT、金丝雀等环境验证后才会最终发布至生产环境,当发布中或发布后产生任何问题时发布和运维系统应及时通知到各参与方,各参与方根据事件情况最终决定停止上线、紧急修复还是回退处理。

另外运维团队还会根据当前的运维情况,业务情况及对未来业务增长的预期和各部门的项目规划,阶段性的统一进行资源规划、预算申请、资源采购及环境准备等工作,当项目落地时,再进行具体项目资源分配。

在整个研发及运维横向体系构建和运营的过程中,架构师也应深度参与并提供架构建议,帮助界定每个系统的边界职责并制定相应的标准规范,之后这些边界职责标准规范等等都将成为后续架构设计时技术储备。

2.3 软件工程-参与方

通过上面的描述,软件工程的核心参与方及职责描述如下:

1.产品经理
运营逻辑:照我说的做一定能赚钱
2.UED
用户体验:照我说的做用户一定喜欢
3.架构师
确保可控:照我说的做一定能做出来
4.研发工程师
设计及实现:具体怎么做、做
5.测试工程师
质量保障:有我在线上质量没问题
6.运维工程师
运维保障:有我在运行环境没问题,产品运行有问题我马上告诉你
7.项目经理
项目管理:保证按时保质完成任务

2.4 架构师

在整个软件工程过程中,架构师的职责是不断变化的,在有需要的时候他可以是布道师,可以是预言家,可以是法官,更可以是脚踏实地的技术实干家。

架构师与其他参与方之间的关系如下:

架构师与产品经理
立项阶段架构师应向产品经理提供技术可行性支持;
产品经理是架构师的最大需求输入方,架构师应对产品经理的提供的需求有一定的要求。

架构师与项目经理
架构师应协同项目经理管理技术风险点并提供可能的解决方案支持;
项目经理负责确定项目范围、协调各方资源、跟进项目进度及风险情况,确保项目最终成功。

架构师与框架/系统研发
框架研发负责基础组件及中间件的开发,某种程度上比架构师更像技术专家;
架构师可以借力框架/系统研发来降低业务团队技术实施难度,确保架构落地。

架构师与开发经理
开发经理会负责管理研发资源、排期、组织详细设计及代码审查;
架构师应指导研发团队进行详细设计,必要时提供必要的技术支持与培训,帮助程序员成长,确保架构落地。

正如上节课提到过的架构师是一个需要多方面架构能力培养、广泛知识积累以及系统性深度思考的综合性职业,一个真正的架构师会让整个团队有一种极致的安全感,而想成为一个真正意义上的架构师也不是一朝一夕的事情,它需要大家长久的持续不断的学习和投入。真心希望猿猿趴架构实战系列课程能真正地帮到大家,在各位的架构师成长之路上与你一路相伴。

猿猿趴架构实战--02 软件工程及架构师相关推荐

  1. 微服务架构案例(02):业务架构设计,系统分层管理

    本文源码:GitHub·点这里 || GitEE·点这里 更新进度(共6节): 01:项目技术选型简介,架构图解说明 02:业务架构设计,系统分层管理 一.业务架构设计 1.基础概念 服务的架构设计决 ...

  2. 中台架构究竟是什么?为什么这么火?通过阿里中台架构实战让你的架构思维有所成长

    背景 中台是一剂良药, 对症下药能治顽疾,用药不当,会送了你的命. 你真的知道中台吗? 最近有不少于两百个小伙伴问到了我关于中台的事,本文聊聊中台. 今年在IT圈内,中台的概念确实比较火,你可能在朋友 ...

  3. Go微服务架构实战-中篇 1. k8s架构介绍

    Go微服务架构实战-公粽号:[堆栈future] 本系列文章主要是针对云原生领域微服务架构的实战,包括网关,k8s,etcd以及grpc等相关技术的应用,同时也会把服务发现与注册,熔断,降级,限流以及 ...

  4. ecshop nginx php,Nginx网站架构实战——10、安装ecshop

    前言: Nginx网站架构实战--01.Nginx介绍及编译安装: Nginx网站架构实战--02.Nginx信号量: Nginx网站架构实战--03.nginx虚拟主机配置: Nginx网站架构实战 ...

  5. 基于.NET平台的分层架构实战(二)——需求分析与数据库设计

    基于.NET平台的分层架构实战(五)--接口的设计与实现 · 基于.NET平台的分层架构实战(四)--实体类的设计与实现 · 基于.NET平台的分层架构实战(三)--架构概要设计 · 基于.NET平台 ...

  6. 最新亿级流量电商详情页系统的大型高并发与高可用缓存架构实战第一版附全套资料

    课程介绍(非升级版) 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握red ...

  7. 亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 目录

    对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memcache ...

  8. 微服务架构实战第一节 Spring Cloud介绍

    开篇词 为什么你要学习微服务架构? 你好,我是萧然,长期从事分布式系统的构建和优化工作,负责过大型电商以及健康类系统的设计和开发,曾带领团队完成大规模微服务架构建设,在基于 Spring Cloud ...

  9. 为开发者准备的Linux架构实战课-陈玉龙-专题视频课程

    为开发者准备的Linux架构实战课-4870人已学习 课程介绍         本课程是web开发技术人员及Linux运维工程师的进阶课程,训练营所有应用场景全部来自真实项目,内容由易到难,除了指导生 ...

  10. 程序小猿猿,你的数学好吗?

    2019独角兽企业重金招聘Python工程师标准>>> 今天在论坛上面看到这样一个话题:程序小猿猿,数学好是怎样一种感觉呢?由此就想问你们,你们数学怎么样啊~求教互联网程序猿如何ge ...

最新文章

  1. arraylist 后往前遍历_面试官:谈谈常用的Arraylist和Linkedlist的区别
  2. 中国LINUX内核开发大会 ppt演讲资料 与 会议视频
  3. Unity3D开发——LeRunning的人物角色信息的显示
  4. [LeetCode] 1091. Shortest Path in Binary Matrix
  5. c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)
  6. 解析大型.NET ERP系统 高质量.NET代码设计模式
  7. 如何保护网页按钮不被XSS自动点击
  8. ci如何使用中$.ajax 中的 url 如何使用php的代码,CI框架中使用ajax操作数据库有关问题...
  9. Java 数组在内存中的结构
  10. Linux下apache和fcgi的关系,Linux下编译安装Apache httpd 2.4
  11. 【NOIP2014】【Luogu2118】比例简化(枚举)
  12. python深复制浅复制_Python复制–深层复制
  13. [转贴] 刷机利器 Rom Manager 的简单用法
  14. PHP支付宝转账到支付宝账号
  15. 实验三 循环程序设计
  16. 游戏程序常规设计模式
  17. 计算机设备名称在哪里找,如何查看电脑驱动
  18. 王立柱《C语言程序设计》3.5.3
  19. java html转pdf的几种方式_java 有关word,excel,pdf转换成html 有几种方式
  20. redis---incr命令

热门文章

  1. c语言文件断电保护,.如果计算机突然断电,存放在()的信息会丢失。
  2. 【nginx】nginx读书笔记
  3. python+gdal+numpy计算ndvi
  4. APP性能测试——启动时间
  5. 一个树莓派集群 (VAX)
  6. Java项目第24期springboot实现简单点餐系统
  7. HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板
  8. TensorFlow Objection Detection API使用教程
  9. android x86 remix,Phoenix OS X86 与 Remix OS X86 对比体验
  10. Spark MLlib数据挖掘2--基础统计分析