一、项目管理相关

1、流程规范化:立项–>评审–>版本号–>排期–>设计–>开发–>测试–>sit–>uat–>上线。
2、流程节点中每个节点根据情况留档,以备追溯。关键留档文件:需求文档,设计文档(业务架构流程图、数据架构流程图、技术架构流程图),开发文档,测试用例文档,上线方案文档。
3、git分支命名:

  • master(默认分支)
  • dev-版本号(版本分支,如dev-1.2.0)
  • dev-版本号-开发人员(开发分支,如dev-1.2.0-johnson)
  • fix-版本(修复分支)

4、项目等级划分,便于项目开发优先级的确定,以及事故处理优先级的确定:

应用级别

网络

用户量

核心业务

Pv

SLA

对公司形象影响

用户投诉情况

0级

公网

大量


较高


严重

较多

1级

公网

少量


较低


轻微

较少

2级

内网

-

影响线上核心业务

较高


轻微

-

3级

内网

-

不影响核心业务

较低



-

5、开发排期包括:开发开始时间(包含设计),开发结束时间(提测时间),测试开始时间,测试结束时间,上线时间。

二、团队管理相关

1、2-pizza rule
2、开会时明确会议议题,提前和与会人员简介,提高会议的效率。

三、运维管理相关

1、生产环境和测试环境严格隔离,仅运维人员可操作生产环境服务器,特殊情况下可以赋予开发测试人员服务日志读权限。
2、通过NAT配置生产环境和测试环境的机器IP,降低误操作率,如:

  • 生产环境内网IP映射为 10.250..-10.250.255.255
  • 测试环境内网IP映射为 10.251..-10.251.255.255

3、统一Linux服务器端口规则,防止端口冲突。

  • java:8080递增最大至8100(单机理论上20个服务足够了)。
  • jmxremote端口在tomcat端口+10000。
  • jdwp端口再tomcat端口+20000。
  • python:9000递增。
  • redis集群:7000、7001、7002、7003、7004、7005。

4、非DBA禁止操作线上数据库,如何初始化或修正数据,需要开发人员提交执行脚本及说明,经DBA确认无误后由DBA执行。
5、线上服务完善监控,报警下发相关负责人,及时响应处理问题,提升SLA。
6、规范测试环境机器服务路径及结构,如:

home
--alibaba
----app
------service1
--------0_项目简介10字以内.txt
--------server.jar
--------nohup.log
--------script.sh
------service2
--------0_项目简介10字以内.txt
--------server.jar
--------nohup.log
--------script.sh
----logs
------service1
--------20200101.zip
--------20200102.zip
--------audit.log
--------business.log
--------debug.log
--------error.log
--------info.log
--------warning.log
------service2
--------20200101.zip
--------20200102.zip
--------audit.log
--------business.log
--------debug.log
--------error.log
--------info.log
--------warning.log
----config
------service1
--------env.config
------service2
--------env.config
----data
------service1
--------aa.xtl
------service2
--------bb.docx

7、线上问题无论任何人发现第一时间抛出,同步到项目管理部+产品+开发+测试,评估事故评级,最短时间提出解决方法,并修复,禁止任何人私自盲目处理,时候追责。

四、开发管理相关

1、前后端交互参数,遵循restful风格,参数采用驼峰命名法,分页参数采用pageNum,pageSize, 排序参数采用sort,order,封装到pageBO(@ModelAttribute接收),排序字段后端通过NamingUtils转换成蛇形。
2、Class和method要有作者、时间、解释,复杂逻辑添加必要的注释,名称见名知意。如:BasePartnerApp、getBasePartnerApp、getBasePartnerAppList。
3、表设计尽量符合3NF以上,尽量减少冗余。表名根据业务模块添加前缀,字段命名见名知意,添加表字段说明。尤其枚举类型字段,妥善使用-1,0,1等字段值。
4、数据分页采用pageHelper,禁用内存分页。
5、实体类采用lombok减少代码量。
6、打印日志使用@Slf4j
7、集成swagger以便前端调试。
8、谨慎使用java8 stream处理复杂的业务逻辑,防止大大降低代码可读性。
9、controller(控制器)–>service(业务接口)–>serviceimpl(业务实现)–>persist(持久层)–>mapper(映射)–>xml(sql)