「北京环球度假区」项目是我第一次接触到非常正规的开发交付流程的项目,本次完成的软件开发虽然是整个园区开发的IT系统中比较基础的模块,但是整个项目开发、交付的流程还是值得去沉淀一下。

0. 项目背景

在园区项目开发的过程中,发现有些公共的功能可以抽离出来,做成单独的模块来对各个服务进行支持。所以本次做的项目中主要包含以下功能:

  • QR生命周期管理
  • 加解密服务
  • 短链生命周期管理

因为整个项目有明确的DL,明确的需求,所以要对整个功能开发和进行测试需要完成排期工作。每一个阶段要交付哪些东西,这一块没有具体的经验可以参考。

1. 个人职责

在这个项目中,承担了开发负责人的角色,主要的工作如下:

  • 需求、设计、测试、上线等各项工作的评审
  • 和甲方沟通系统架构设计,重点问题的解决方案
  • 系统的编码,文档产出
  • CR工作,上线工作

2. 项目收获

与其说是收获,应该是教训更加的确切。我本质上对整个项目进行把控,无论是研发进度还是产出质量。有几次因为工作上的不到位造成风险。

2.1.设计要做到极致,所有问题都要形成闭环

整个项目花费最长的时间就是在设计上,因为项目是作为整个大系统中基础功能的SaaS系统,很多系统对我的项目有依赖,所以前期定好接口这些是迫切的,也因为是供给其他系统调用,所以在api文档发出去之后,基本上就没有修改的可能,大项目就是这样,不然改来改去最后出问题是大概率事件,这也是现在很多项目越做越烂的原因。

举几个项目中的列子:

  • 1.关于二维码容量的承载

因为二维码识别的本质上就是解析图片,如果二维码中包含的信息过去,生成的二维码太密,最后设备识别不了或者说识别时间太长那么就严重影响了体验。所以我们前期生成不同密度的二维码图片供业务方去试验,最终得到一个合适的容量承载值。其实在前期没有对码内容的大小做限制,导致码发出去了,但是不能用的情况发生。最终为了对我项目进行兜底,我去查阅了大量关于QR的实现原理之内的文章,这在往常的项目中是不常见的。

  • 2.高并发访问导致服务瘫痪

因为是TO C的项目,所以要保证不能出生产事故。我们做的一个短链服务,没有

  • 按照流程和规范办事

1. 环境划分

对于To C的项目而言,环境的划分尤为重要。我们项目划分了以下四套环境:

环境名称作用
DEV用户开发内部自测,联调
QA用于交付给测试做功能做功能测试的环境
SIT集成测试完成,用于给第三方联调测试的环境
UAT用户验收测试,和生产环境只是一些性能和访问能力上区别
PROD生产环境,真正面客的项目

每个环境的作用和影响范围不通,每一次项目的功能迭代都要从DEV环境走到PROD环境,在每一个环境完成自己既有的任务。

1.1. DEV环境

在DEV环境下,项目的内部开发开发调试都在这个环境上,这个环境有以下特点:

  • 可以连接开发机,迅速将请求打到开发的开发机上,方便本地DEBUG
  • 不要对外界进行网络暴露,只需要在内网能够完成服务调用即可
  • 发布不受外界控制,完全由开发自己控制

1.2. QA环境

QA环境是开发在本地自测完成后,进行内部的小分支迭代到QA环境交付测试人员进行功能性的测试。QA环境的发布有以下的特点:

  • 分支管理好,每一个提测的分支和对应的修改项要完整的写到提测的记录中
  • 出现bug,不可以快速去迭代修复,而是应该记录下bug在下一个版本中去迭代修复
  • 开发人员对于数据存储类中间件(数据库,缓存…)只有只读权限,没有修改权限,防止因为对于数据的修正导致bug没有暴露出来
  • 发布只受内部控制,只要内部团队约定好,就可以对该环境进行发布
  • 不需要对外部进行网络暴露,只要能够在内网完成服务调用即可
  • 服务单节点即可满足需求

1.3. SIT环境

SIT涉及到和第三方系统的功能联调,是对通过QA环境测试的代码提供给第三方使用。SIT环境的发布有以下特点:

  • 出现bug,记录下来,按照bug级别来决定是hotfix还是下一次版本迭代中修复
  • 开发人员对于数据存储类中间件(数据库,缓存…)只有只读权限,没有修改权限,防止因为对于数据的修正导致bug没有暴露出来
  • 发布受内外部控制,每一次发布需要告知对接方,服务宕机时间应该控制在1小时之内
  • 需要对外部进行网络暴露,所有的网络请求都通过网关完成
  • 服务单节点即可满足需求

1.4. UAT环境

经过SIT测试之后,代码发布到UAT环境中,UAT环境用来体验类似生产环境的操作,他和生产环境之间的差别就是性能上的差别。UAT环境有如下的特点:

  • 出现bug,记录下来,按照bug级别来决定是hotfix还是下一次版本迭代中修复
  • 开发人员对于数据存储类中间件(数据库,缓存…)只有只读权限,没有修改权限,防止因为对于数据的修正导致bug没有暴露出来
  • 发布严格收到控制,每一次发布需要写上线计划(包含上线步骤,回滚方案)
  • 需要对外部进行网络暴露,所有的网络请求都通过网关完成
  • 服务至少2个节点,验证架构的合理性

1.5. PROD环境

PROD环境是直接面客的环境,整个环境要保证高可用,高性能,可伸缩。所以对于这生产环境的原则是能不动就不动,动之前要做好相应的备份工作。

2. 发版计划

每个项目的需求不同,所以对于软件的发版计划要求不同。软件从正式开始到正式定版应该主要有以下几个阶段:

  • pre-alpha
  • alpha
  • beta
  • Release Candidate
  • GA
  • Stable

参考