feat: add China Telecom R&D project template
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# 01-总体规范
|
||||
|
||||
## 1. 研发工作流
|
||||
|
||||
软件研发过程包含 6 大工作流:
|
||||
|
||||
```
|
||||
需求 → 分析与设计 → 实现(编码) → 测试 → 发布和部署 → 配置和变更管理
|
||||
```
|
||||
|
||||
## 2. 项目角色
|
||||
|
||||
| 角色 | 职责 |
|
||||
|------|------|
|
||||
| **项目经理** | 项目整体管理、进度控制、资源协调 |
|
||||
| **产品经理** | 需求定义、产品规划 |
|
||||
| **需求工程师** | 需求调研、分析、编写、跟踪 |
|
||||
| **架构师** | 技术选型、架构设计 |
|
||||
| **开发工程师** | 编码实现、单元测试 |
|
||||
| **测试工程师** | 测试方案、用例编写、执行测试 |
|
||||
| **配置管理员** | 代码/制品/文档版本管理 |
|
||||
| **QA 工程师** | 质量保证、过程审计 |
|
||||
|
||||
## 3. 各工作流交付成果
|
||||
|
||||
| 工作流 | 交付物(C1 必选) |
|
||||
|--------|-------------------|
|
||||
| 需求 | 《软件需求规格说明书》、《需求追踪表》 |
|
||||
| 分析与设计 | 《概要设计说明书》(C1)、《详细设计说明书》(C2) |
|
||||
| 实现 | 源代码、单元测试代码 |
|
||||
| 测试 | 《测试方案》、《测试用例》、《测试报告》、《缺陷追踪表》 |
|
||||
| 发布和部署 | 部署计划、实施方案、回退方案 |
|
||||
| 配置管理 | 配置项清单、变更记录 |
|
||||
|
||||
## 4. 开发模式
|
||||
|
||||
- **【推荐 C2】** 采用迭代式开发,推荐 2-4 周为一次迭代
|
||||
- **【强制 C1】** 每个迭代需建立功能、需求和测试用例间的双向追踪关系
|
||||
- **【强制 C1】** 迭代结束需建立基线,进行版本打标
|
||||
|
||||
## 5. 配置和变更管理
|
||||
|
||||
- **【强制 C1】** 源码、需求文档、设计文档、测试用例纳入配置管理
|
||||
- **【强制 C1】** 所有配置项必须存储在电信内部服务器,不得使用外部云存储
|
||||
- **【强制 C2】** 需求、迭代、测试用例、代码版本、制品版本、产品版本间建立双向追踪
|
||||
- **【强制 C1】** 源码、制品、发行版本必须维护可回溯性
|
||||
|
||||
## 6. 评审要求
|
||||
|
||||
### 评审方式
|
||||
- **预评审**:提前 3 个工作日申请,≥50% 评审成员反馈预评审结果
|
||||
- **会议评审**:正式会议评审,输出评审记录和缺陷汇总
|
||||
- **离线评审**:邮件/平台分发材料,限时提交评审结果
|
||||
|
||||
### 评审通过标准
|
||||
| 结论 | 说明 |
|
||||
|------|------|
|
||||
| **通过** | 无背离需求的缺陷,少量细微修改 |
|
||||
| **有条件通过** | 少量重要缺陷,修正后不影响主要结构,经评审专家确认即可 |
|
||||
| **不通过** | 较多重要缺陷或修改影响主要结构,需重新评审 |
|
||||
|
||||
## 7. 技术栈要求
|
||||
|
||||
- **【强制】** 新项目 100% 使用天翼云底座、统一技术组件
|
||||
- **【强制】** 技术选型须符合《中国电信软件开发统一技术栈要求(试行版)》
|
||||
- **【推荐 C0】** 优先复用统一制品库中已有自主研发组件
|
||||
- **【强制 C1】** 编码工作在云电脑内进行,所有代码不出研发云
|
||||
- **【强制 C4】** 系统/模块间接口调用参照 OpenAPI 规范
|
||||
|
||||
## 8. 域名规则
|
||||
|
||||
共享代码/组件域名格式:
|
||||
```
|
||||
cn.chinatelecom.<分公司/专业公司缩写>.<自定义名称>
|
||||
```
|
||||
|
||||
## 9. 质量度量指标
|
||||
|
||||
代码质量扫描需获取以下指标:
|
||||
- 阻断级问题数量、严重级问题数量
|
||||
- 可靠性评级、安全性评级、可维护性评级
|
||||
- 代码重复率
|
||||
- 行覆盖率、分支覆盖率
|
||||
@@ -0,0 +1,106 @@
|
||||
# 02-Python 编码规范
|
||||
|
||||
> 以 PEP8 为基础,结合中国电信实际整理
|
||||
|
||||
## 1. 命名规范
|
||||
|
||||
### 包和模块
|
||||
- **【强制】** 包命名全小写
|
||||
- **【推荐】** 通过功能命名
|
||||
- **【推荐】** 模块名全小写,多单词用下划线连接
|
||||
|
||||
### 类
|
||||
- **【强制】** 驼峰命名(大写开头:`ClassName`)
|
||||
- **【推荐】** 接口已文档化时可用函数命名风格
|
||||
|
||||
### 函数
|
||||
- **【推荐】** 全小写,下划线连接单词(`do_something`)
|
||||
- **【强制】** 单下划线 `_` 开头 = protected 模块函数
|
||||
- **【强制】** 双下划线 `__` 开头 = 类内私有
|
||||
|
||||
### 变量
|
||||
- **【强制】** 全小写,下划线连接
|
||||
- **【强制】** 单下划线开头 = protected,双下划线开头 = 类内私有
|
||||
- **【推荐】** 全局变量适用函数命名规范
|
||||
|
||||
### 常量
|
||||
- **【推荐】** 全大写 + 下划线(`MAX_SIZE`)
|
||||
|
||||
### 异常类
|
||||
- **【推荐】** 若抛出错误,异常名加 `Error` 后缀
|
||||
|
||||
### 通用原则
|
||||
- **【推荐】** 名字使用英文单词,不能用拼音
|
||||
- **【推荐】** 3~30 个字母,不超过 4 个单词
|
||||
- **【强制】** 命名不能和关键字冲突
|
||||
|
||||
---
|
||||
|
||||
## 2. 注释规范
|
||||
|
||||
### 文件注释
|
||||
- **【强制】** 使用文档字符串(三个双引号)
|
||||
- **【参考】** 应包含:描述(Description)、作者(Author)、版本(Version)、日期(Date)、记录(Record)
|
||||
|
||||
### 类注释
|
||||
- **【强制】** 类定义下必须有文档字符串
|
||||
- **【推荐】** 有公共属性时,文档中应有 Attributes 段
|
||||
|
||||
### 函数注释
|
||||
- **【强制】** 外部可见函数必须有文档字符串(非常短小/简单明了的除外)
|
||||
- **【强制】** 文档字符串应描述做什么、输入/输出
|
||||
- **【参考】** 使用 Args / Returns / Raises 格式
|
||||
|
||||
### 通用注释原则
|
||||
- **【推荐】** 有效注释量 ≥ 30%
|
||||
- **【强制】** 避免装饰性内容,保持简洁;避免行尾注释
|
||||
- **【强制】** 复杂分支流程必须注释
|
||||
- **【推荐】** 代码质量不高但能运行用 `# TODO:`;有隐患用 `# FIXME:`
|
||||
|
||||
---
|
||||
|
||||
## 3. 格式规范
|
||||
|
||||
### 缩进
|
||||
- **【强制】** 4 个空格,禁止混用空格和 Tab
|
||||
|
||||
### 换行
|
||||
- **【推荐】** 每行 ≤ 80 字符(导入语句和 URL 除外)
|
||||
|
||||
### 空行
|
||||
- **【强制】** 顶层函数/类之间 2 个空行
|
||||
- **【强制】** 类中方法之间 1 个空行
|
||||
|
||||
### 导入
|
||||
- **【强制】** 每个导入独占一行(`import` 开头时)
|
||||
- **【强制】** 导入顺序:标准库 → 第三方库 → 应用指定
|
||||
- **【推荐】** 推荐绝对路径导入
|
||||
- **【强制】** 禁止隐式相对导入(如 `import bench`)
|
||||
- **【推荐】** 可使用显式相对导入(`from . import bench`)
|
||||
|
||||
### 字符串
|
||||
- **【强制】** 避免循环中用 `+` 或 `+=` 累加字符串(用 `join`)
|
||||
- **【推荐】** 同一文件内单/双引号保持一致
|
||||
|
||||
### 空值比较
|
||||
- **【推荐】** 使用 `if foo is None:` 而非 `if foo == None:`
|
||||
|
||||
### 空格
|
||||
- **【推荐】** 二元运算符两侧各一个空格
|
||||
- **【强制】** 函数名和参数列表的 `(` 之间不加空格
|
||||
- **【推荐】** 逗号、分号、冒号前面不加空格
|
||||
|
||||
### 关系运算
|
||||
- **【强制】** 常量在左、变量在右(如 `if None is foo:`)
|
||||
|
||||
---
|
||||
|
||||
## 4. 安全编码(与安全分册交叉)
|
||||
|
||||
- **【强制】** 禁止在日志中保存口令、密钥
|
||||
- **【强制】** 禁止使用私有/弱加密算法(必须用 SM4/SM2/SM3)
|
||||
- **【强制】** 口令哈希存储必须加入盐值(至少 8 字节随机数,迭代 50000+ 次)
|
||||
- **【强制】** 禁止硬编码敏感信息
|
||||
- **【强制】** 使用强随机数(`secrets` 模块或 `os.urandom`)
|
||||
- **【强制】** 类型变量定义统一放在 `import` 之后
|
||||
- **【强制】** 类变量放在类注释之后、所有类函数之前
|
||||
@@ -0,0 +1,131 @@
|
||||
# 03-前端编码规范
|
||||
|
||||
## 1. HTML
|
||||
|
||||
### 文档结构
|
||||
- **【强制】** 使用 HTML5 DOCTYPE
|
||||
- **【推荐】** 指定 `<html lang="...">`
|
||||
- **【推荐】** 使用 UTF-8 编码(`<meta charset="utf-8" />`)
|
||||
- **【推荐】** 移动端设置 viewport
|
||||
|
||||
### 资源加载
|
||||
- **【推荐】** CSS 在 `<head>` 引入,JS 在 `</body>` 前引入
|
||||
- **【推荐】** 引入 CSS/JS 无需指定 type
|
||||
|
||||
### 页面标题
|
||||
- **【强制】** 必须有且仅有 1 个 `<title>`
|
||||
|
||||
### 编码风格
|
||||
- **【推荐】** 2 个空格缩进
|
||||
- **【强制】** HTML 注释中不允许出现任何敏感信息
|
||||
- **【强制】** 标签名统一小写
|
||||
- **【推荐】** 自闭合标签结尾加斜线
|
||||
|
||||
### 属性
|
||||
- **【强制】** 属性值用双引号
|
||||
- **【推荐】** Boolean 属性不添加取值
|
||||
- **【推荐】** 自定义属性以 `data-` 为前缀
|
||||
|
||||
---
|
||||
|
||||
## 2. CSS
|
||||
|
||||
### 文件引用
|
||||
- **【强制】** 一律使用 `<link>` 引入外部样式
|
||||
- **【推荐】** 不要在 `<style>` 块中使用 `@import`
|
||||
|
||||
### 命名
|
||||
- **【强制】** 由字母、中划线、数字组成,不能以数字或中划线开头
|
||||
- **【强制】** 禁止拼音与英文混合,禁止中文
|
||||
- **【参考】** 不依据表现形式命名,依据内容/功能命名
|
||||
- **【强制】** 缩写后仍能保持原单词意思
|
||||
|
||||
### 编码风格
|
||||
- **【强制】** 所有声明以分号结尾
|
||||
- **【推荐】** 2 个空格缩进
|
||||
- **【推荐】** 选择器和 `{` 之间保留一个空格
|
||||
- **【推荐】** `:` 和属性值之间保留一个空格
|
||||
- **【推荐】** 单行不超过 100 字符
|
||||
|
||||
### 属性
|
||||
- **【参考】** 不要使用 id 选择器
|
||||
- **【推荐】** 不使用 `!important`
|
||||
- **【推荐】** 十六进制统一小写
|
||||
- **【推荐】** 属性声明顺序:定位 → 盒模型 → 文字排版 → 外观 → 其他
|
||||
|
||||
---
|
||||
|
||||
## 3. JavaScript
|
||||
|
||||
### 变量
|
||||
- **【强制】** 使用 `const` 或 `let`,禁止 `var`
|
||||
|
||||
### 字符串
|
||||
- **【强制】** 使用单引号或反引号
|
||||
- **【推荐】** 模板字符串代替拼接
|
||||
|
||||
### 比较
|
||||
- **【强制】** `===` 和 `!==` 代替 `==` 和 `!=`
|
||||
|
||||
### 函数
|
||||
- **【强制】** 不要定义 `arguments` 参数
|
||||
- **【强制】** 不要用 `Function` 构造函数
|
||||
- **【强制】** 不要在块中声明函数
|
||||
- **【强制】** 不使用 `arguments` 对象,用 `...` 替代
|
||||
- **【推荐】** 使用默认参数语法
|
||||
- **【参考】** 圈复杂度 ≤ 10,认知复杂度 ≤ 15
|
||||
|
||||
### 数组/对象
|
||||
- **【推荐】** 字面语法创建
|
||||
- **【强制】** `map/filter/reduce` 等回调必须有 return
|
||||
- **【推荐】** 使用 `...` 展开运算符
|
||||
|
||||
### 模块
|
||||
- **【推荐】** 使用 ES6 modules
|
||||
- **【强制】** 禁止重复 import 同一模块
|
||||
- **【强制】** import 放到模块最上方
|
||||
- **【强制】** 禁止 default import 与其他 export 同名,禁止自引用、循环引用
|
||||
|
||||
### 代码风格
|
||||
- **【强制】** 2 个空格缩进
|
||||
- **【推荐】** 添加尾随分号
|
||||
- **【推荐】** 文件最大行数 1000,函数最大行数 80
|
||||
- **【推荐】** 单行最大字符数 100
|
||||
|
||||
### 命名
|
||||
- **【强制】** 避免单字母名
|
||||
- **【参考】** 变量/函数用小驼峰(camelCase),类用大驼峰(PascalCase)
|
||||
|
||||
---
|
||||
|
||||
## 4. TypeScript
|
||||
|
||||
### 类型声明
|
||||
- **【强制】** interface/type 中成员分隔符统一用分号
|
||||
- **【强制】** 类型声明时冒号前无空格、冒号后一个空格,箭头前后各一个空格
|
||||
- **【强制】** 优先使用 `Interface` 而非 `type`
|
||||
- **【强制】** interface 和 type 定义时必须声明成员类型
|
||||
- **【推荐】** 简单数组用 `T[]`,复杂类型用 `Array<T>`
|
||||
- **【强制】** 禁止无意义的 void 类型
|
||||
|
||||
### 类
|
||||
- **【参考】** 为类成员声明可访问类型(public/private/protected)
|
||||
- **【推荐】** 字面量属性用 `readonly` 而非 getter
|
||||
|
||||
### 变量
|
||||
- **【强制】** 不得使用 `var`
|
||||
- **【推荐】** 优先用 `const`,必要时用 `let`
|
||||
- **【推荐】** 如非必要不使用 `any`
|
||||
- **【参考】** 优先使用 `undefined`,避免 `null`
|
||||
|
||||
### 断言
|
||||
- **【强制】** 类型断言使用 `as Type` 语法
|
||||
|
||||
### 枚举
|
||||
- **【参考】** 使用联合类型替代枚举,避免在新代码中使用枚举
|
||||
|
||||
### 其他
|
||||
- **【强制】** 禁止使用三斜杠 `///` 导入
|
||||
- **【强制】** 禁止使用 `namespace`
|
||||
- **【强制】** 重载函数写在一起
|
||||
- **【强制】** 即使是单行语句,if/else/for/while 不得省略大括号
|
||||
@@ -0,0 +1,144 @@
|
||||
# 04-数据库设计规范
|
||||
|
||||
> 涵盖通用规范及 MySQL、PostgreSQL、TiDB、UDAL 四种主流数据库
|
||||
|
||||
---
|
||||
|
||||
## 一、通用设计规范
|
||||
|
||||
### 命名规范
|
||||
|
||||
| 对象 | 规则 |
|
||||
|------|------|
|
||||
| **库名** | 【强制】仅字母/数字/下划线,全小写,≤32字符,禁止关键字 |
|
||||
| **表名** | 【强制】仅字母/数字/下划线,全小写,`t_` 开头,≤32字符 |
|
||||
| **字段名** | 【强制】全小写,下划线分隔,≤32字符,禁止关键字 |
|
||||
| **索引** | 【推荐】非唯一=`idx_字段1_字段2`,唯一=`uidx_字段1_字段2`,全小写 |
|
||||
| **用户名** | 【推荐】`库名_app`(生产)、`库名_read`(只读)、`库名_monitor`(监控) |
|
||||
| **临时表** | 【强制】`tmp` 开头 + 日期后缀 |
|
||||
| **备份表** | 【强制】`bak` 开头 + 日期后缀 |
|
||||
|
||||
### SQL 设计规范
|
||||
|
||||
- **【强制】** 创建表时所有表和字段必须添加注释
|
||||
- **【强制】** 禁止使用外键(业务端实现)
|
||||
- **【强制】** SELECT/UPDATE/DELETE 的 WHERE 条件列必须添加索引(低基数列除外)
|
||||
- **【强制】** WHERE 条件索引列禁止数学运算和函数运算
|
||||
- **【强制】** 禁止 LIKE `%xxx` 前缀模糊匹配
|
||||
- **【强制】** 禁止在开发代码中使用 TRUNCATE TABLE
|
||||
- **【强制】** DELETE/UPDATE 必须带 WHERE 条件
|
||||
- **【强制】** SELECT 语句必须指定具体字段,禁止 `SELECT *`
|
||||
- **【强制】** SQL 语句禁止隐式转换
|
||||
- **【推荐】** 事务要简单,多事务小事务原则
|
||||
- **【推荐】** 避免超过 3 张表关联
|
||||
- **【推荐】** IN 操作集合元素控制在 500 个以内
|
||||
|
||||
### 流程规范
|
||||
|
||||
- **【强制】** DDL 操作至少提前 1 天向 DBA 申请
|
||||
- **【强制】** 批量读写超过 5 万条记录必须通知 DBA
|
||||
- **【强制】** 业务高峰期禁止大批量更新(超 10 万条)/ALTER 表/创建索引
|
||||
- **【强制】** 禁止从开发/测试环境直连生产数据库
|
||||
- **【强制】** 严禁在从库执行 SELECT 以外的语句
|
||||
- **【强制】** 禁止在主库执行导出操作
|
||||
- **【强制】** 生产数据导出到非生产环境需脱敏处理
|
||||
- **【强制】** 创建用户时限制登录主机(IP/网段),禁止 `%`
|
||||
- **【强制】** 密码复杂度 ≥ 16 位,包含大小写+特殊字符
|
||||
- **【推荐】** 生产表结构应设有主键
|
||||
- **【推荐】** 对超 100 万行大表修改结构须 DBA 审核,低峰期执行
|
||||
|
||||
### 设计范式
|
||||
- 逻辑模型满足第三范式即可
|
||||
- 物理模型可适当增加数据冗余以提高查询性能
|
||||
|
||||
---
|
||||
|
||||
## 二、PostgreSQL 开发规范
|
||||
|
||||
### 对象命名
|
||||
- **【强制】** DB name 与 table name ≤ 64 位
|
||||
- **【强制】** 对象名仅小写字母、数字、下划线
|
||||
- **【推荐】** 主键索引 `pk_` 开头,唯一索引 `uidx_` 开头,普通索引 `idx_` 开头
|
||||
- **【推荐】** 不同业务用不同 database 区分,默认使用 public schema
|
||||
|
||||
### 设计规范
|
||||
- **【强制】** 创建表结构时需考虑对应索引
|
||||
- **【强制】** 多表 join 列需保证列名和数据类型一致
|
||||
- **【强制】** 表结构类型与应用程序定义一致
|
||||
- **【推荐】** 字符编码 UTF-8,时间使用 UTC
|
||||
- **【强制】** 避免使用触发器
|
||||
- **【强制】** 大表(>10GB 或 >1000 万行)考虑分区
|
||||
- **【强制】** 频繁使用的大对象需定时删除
|
||||
|
||||
### 查询规范
|
||||
- **【强制】** 禁止 `SELECT *`
|
||||
- **【强制】** 使用 `count(*)` 而非 `count(col)` 或 `count(1)`
|
||||
- **【强制】** 避免向客户端返回大量数据
|
||||
|
||||
### 稳定性
|
||||
- **【强制】** 避免长事务(会造成垃圾膨胀)
|
||||
- **【强制】** 程序必须有重连机制
|
||||
- **【强制】** 使用合理的隔离级别
|
||||
- **【强制】** 高并发下务必使用连接池
|
||||
- **【强制】** OLTP 高峰期拒绝长 SQL、大事务、大批量
|
||||
|
||||
---
|
||||
|
||||
## 三、MySQL 开发规范
|
||||
|
||||
### 对象设计
|
||||
- **【强制】** INT 不使用 unsigned 无符号属性
|
||||
- **【强制】** 自增用 8 字节 BIGINT
|
||||
- **【强制】** 字符集使用 UTF8MB4
|
||||
- **【强制】** 日期使用 DATETIME 类型
|
||||
- **【强制】** 敏感字段需加密(动态盐 + 非固定加密算法 + 多轮加密)
|
||||
|
||||
### 数据操作
|
||||
- **【强制】** 禁用 `UPDATE/DELETE ... LIMIT`
|
||||
- **【强制】** 禁用关联子查询
|
||||
- **【强制】** 禁用 `INSERT ... ON DUPLICATE KEY UPDATE`
|
||||
- **【强制】** 禁用联表更新
|
||||
- **【强制】** 生产环境禁止使用 hint
|
||||
|
||||
### 查询优化
|
||||
- **【推荐】** SELECT 建议 UNION ALL(不超过 5 个子句)
|
||||
- **【强制】** DML 语句必须有 WHERE 条件,且使用索引查找
|
||||
- **【推荐】** order by/group by/distinct 尽量利用索引
|
||||
|
||||
---
|
||||
|
||||
## 四、TiDB (HTAP) 开发规范
|
||||
|
||||
### 核心约束
|
||||
- **【强制】** 单行数据 ≤ 6 MB,单表字段 ≤ 60 个
|
||||
- **【强制】** 单个事务默认 ≤ 100 MB,大事务需拆分(每 100~500 行一批)
|
||||
- **【强制】** 建表使用 utf8mb4 编码
|
||||
- **【强制】** 禁止 `SELECT *`
|
||||
- **【强制】** 高并发交易场景,单语句关联表 ≤ 2 张;分析场景 ≤ 10 张
|
||||
- **【强制】** 自增列仅保证唯一,不保证连续/有序
|
||||
|
||||
### 分区表
|
||||
- **【强制】** 查询条件必须包含分区字段
|
||||
- **【推荐】** 分区记录数控制在十亿级别
|
||||
|
||||
---
|
||||
|
||||
## 五、UDAL 开发规范
|
||||
|
||||
### 核心约束
|
||||
- **【强制】** 对象名仅小写字母、数字、下划线,≤ 32 位
|
||||
- **【强制】** 表必须设置主键
|
||||
- **【强制】** 禁止使用外键、分区表、存储过程、函数、触发器、视图
|
||||
- **【强制】** 字符集仅 utf8/utf8mb4
|
||||
- **【强制】** 存储引擎必须为 InnoDB
|
||||
|
||||
### 查询规范
|
||||
- **【强制】** 查询必须带 WHERE 条件,尽量使用分片键
|
||||
- **【推荐】** 避免跨分片 Join/Union
|
||||
- **【强制】** 关联表分片算法和拆分节点必须一致
|
||||
|
||||
### 数据操作
|
||||
- **【强制】** 禁止不带 WHERE 的 Update/Delete
|
||||
- **【强制】** 禁止 Truncate table
|
||||
- **【强制】** 禁止 Update/Delete 带 LIMIT 或 ORDER BY
|
||||
- **【强制】** 禁止更新分片键值
|
||||
@@ -0,0 +1,108 @@
|
||||
# 05-代码管理规范
|
||||
|
||||
## 1. 代码仓库设置
|
||||
|
||||
### 管理工具
|
||||
- **【强制 C1】** 必须使用 Git 管理代码
|
||||
|
||||
### 命名规范
|
||||
- **【强制 C1】** 名称仅使用英文字母、数字、中划线(`-`);首字符仅为字母
|
||||
- **【强制】** 禁止使用下划线 `_` 和特殊字符
|
||||
- **【强制 C1】** 项目内全部仓库命名规则必须一致(全驼峰/全大写/全小写选一种)
|
||||
|
||||
### 必要文件
|
||||
- **【强制 C1】** 每个项目必须有 `README.md`(包含工程介绍、结构说明、文档地址)
|
||||
- **【强制 C1】** 除文档仓库外,必须有 `.gitignore`
|
||||
|
||||
### 仓库划分
|
||||
- **【强制 C1】** 核心代码和非核心代码分库管理
|
||||
- **【强制 C1】** 每个仓库仅使用一种技术栈
|
||||
- **【推荐 C0】** 每个仓库不超过 5 个微服务
|
||||
|
||||
### 仓库大小
|
||||
- **【强制 C1】** 每个仓库不超过 1GB
|
||||
|
||||
### 权限设置
|
||||
- **【强制 C1】** 遵循权限最小化原则
|
||||
- **【强制 C1】** 仅项目负责人/管理员可创建仓库
|
||||
- **【强制 C1】** 离职/离开团队必须收回权限
|
||||
- **【强制 C1】** 仓库管理员不超过 3 人
|
||||
- **【强制 C1】** 禁止外协开发人员设为仓库管理员
|
||||
- **【推荐 C0】** 严格控制 master/develop 分支写权限
|
||||
|
||||
---
|
||||
|
||||
## 2. 分支设置
|
||||
|
||||
### 必要分支
|
||||
- **【强制 C1】** 必须有主干分支(master)
|
||||
|
||||
### Git Flow 工作流(推荐 C0)
|
||||
|
||||
| 分支类型 | 名称格式 | 说明 |
|
||||
|----------|----------|------|
|
||||
| 主干分支 | `master` | 对外稳定发布版本 |
|
||||
| 开发分支 | `develop` | 包含全部最新特性 |
|
||||
| 紧急修复 | `hotfix-*` | 以 master TAG 为基础修复 |
|
||||
| 集成测试 | `release-*` | 以 develop 为基础,验收后合入 master |
|
||||
| 功能分支 | `feature-*` | 以 develop 为基础,完成后删除 |
|
||||
|
||||
### 代码评审
|
||||
- **【强制 C3】** 所有提交必须经过代码评审
|
||||
- **两种模式**:单分支 code review 或多分支 merge request
|
||||
|
||||
---
|
||||
|
||||
## 3. 开发人员操作规范
|
||||
|
||||
### 用户信息设置
|
||||
- **【强制 C1】** 须与远端仓库账号、邮箱一致
|
||||
- "【强制 C1】** 密码不少于 8 位,包含数字、大小写字母及特殊符号
|
||||
|
||||
### Commit 规范
|
||||
- **【强制 C1】** 保持清晰的 commit 历史
|
||||
- **【强制 C1】** 推送前合并精简 commit(一个任务不超过 5 个 commit)
|
||||
|
||||
### Commit Message 格式(C3)
|
||||
```
|
||||
type(scope): subject
|
||||
%workItemId
|
||||
```
|
||||
|
||||
| type | 含义 |
|
||||
|------|------|
|
||||
| `feat` | 新功能 |
|
||||
| `fix` | 修复 bug |
|
||||
| `docs` | 文档变更 |
|
||||
| `style` | 代码格式 |
|
||||
| `refactor` | 重构 |
|
||||
| `perf` | 性能优化 |
|
||||
| `test` | 增加测试 |
|
||||
| `build` | 构建工具变更 |
|
||||
| `revert` | 撤销提交 |
|
||||
| `chore` | 辅助工具变动 |
|
||||
|
||||
示例:`%1011 fix(core): set a to b`
|
||||
|
||||
### 代码文件约束(C0)
|
||||
- **【强制】** 不允许提交含数据库账号、密码等敏感信息的文件
|
||||
- **【强制】** 不允许提交与项目无关的二进制文件
|
||||
- **【强制】** 单个文件不超过 10MB
|
||||
- **【强制】** 第三方依赖包必须引用制品库,不得直接放入仓库
|
||||
- **【强制】** 不允许提交 pdf/doc/ppt/xls/压缩包/音视频等文件
|
||||
|
||||
---
|
||||
|
||||
## 4. 代码版本管理
|
||||
|
||||
### 版本号
|
||||
- **【强制 C1】** 发布版本必须打 tag
|
||||
- **【强制 C2】** 版本号格式:`X.Y.Z`(主版本.次版本.修订号)
|
||||
- 主版本号:不兼容的 API 修改
|
||||
- 次版本号:向下兼容的功能新增
|
||||
- 修订号:向下兼容的问题修正
|
||||
- **【强制 C1】** 制品版本号与代码版本号一致
|
||||
|
||||
### 版本信息
|
||||
- **【强制 C3】** Tag Message 记录版本日期、说明
|
||||
- **【强制 C3】** Release Notes 记录 feature、fixed、关联任务
|
||||
@@ -0,0 +1,78 @@
|
||||
# 06-制品管理规范
|
||||
|
||||
## 1. 制品全生命周期
|
||||
|
||||
```
|
||||
开发构建 → 安全扫描 → 存储管理 → 测试 → 部署
|
||||
```
|
||||
|
||||
### 总体原则
|
||||
- 源代码及需求来源可追溯
|
||||
- 制品安全质量可管控
|
||||
- 存储管理安全可靠
|
||||
- 制品唯一可信(部署 = 测试通过版本)
|
||||
- 操作及流转日志可审计
|
||||
|
||||
## 2. 开发构建
|
||||
|
||||
- **【强制 C1】** 开发构建须连接统一制品库,第三方依赖从统一制品库代理下载
|
||||
- **【强制 C1】** 构建制品必须上传到统一制品库
|
||||
- **【强制 C3】** 制品须收集构建信息(构建时间、人员、工具、第三方依赖)
|
||||
- **【强制 C3】** 制品须通过元数据关联代码仓库、分支、commit id
|
||||
- **【强制 C4】** 制品须进一步关联对应需求或缺陷
|
||||
|
||||
## 3. 安全扫描
|
||||
|
||||
- **【强制 C3】** 制品关联源代码质量及安全扫描信息
|
||||
- **【强制 C4】** 根据扫描结果确定制品能否进入测试
|
||||
- **【强制 C2】** 制品关联第三方组件安全漏洞扫描
|
||||
- **【强制 C2】** 存在高中危漏洞且可修复时必须在开发阶段修复
|
||||
- **【强制 C3】** 制品关联第三方组件许可协议扫描
|
||||
|
||||
## 4. 存储管理
|
||||
|
||||
### 仓库类型选择
|
||||
| 场景 | 仓库类型 |
|
||||
|------|----------|
|
||||
| 云原生应用 | docker 仓库(镜像)+ helm 仓库(配置) |
|
||||
| 直接部署安装 | generic 仓库 |
|
||||
| 项目构建依赖 | 对应类型:maven/npm/go/pypi |
|
||||
|
||||
### 仓库命名格式
|
||||
```
|
||||
项目名[-子项目名]-生命周期-制品类型-仓库类型
|
||||
```
|
||||
示例:`myproject-snapshot-maven-local`
|
||||
|
||||
生命周期:snapshot(开发快照)/ release(生产发布)
|
||||
|
||||
### 权限与审计
|
||||
- **【强制 C1】** 设置严格的访问权限(管理员、读写、只读三类)
|
||||
- **【强制 C2】** 上传/下载/修改/删除必须留痕,日志保存 ≥ 6 个月
|
||||
|
||||
## 5. 版本管理
|
||||
|
||||
- **【强制 C1】** 制品版本号与源代码版本号保持一致
|
||||
- **【强制 C1】** 开发测试阶段使用快照版本(SNAPSHOT)
|
||||
- **【强制 C1】** 快照版本测试完成后发布正式版本做回归测试
|
||||
- **【强制】** 正式版本号不允许覆盖升级
|
||||
|
||||
### 制品晋级
|
||||
- **【强制 C3】** 测试和安全检查通过后从快照仓库自动晋级到发布仓库
|
||||
- **【强制 C4】** 晋级到生产仓库前可增加人工审核
|
||||
|
||||
### 清理
|
||||
- **【强制 C1】** 快照仓库最多保留 10 个版本
|
||||
- 生产发布仓库已部署版本建议永久保存
|
||||
|
||||
## 6. 第三方组件管理
|
||||
|
||||
- **【强制 C1】** 统一制品库作为第三方组件依赖源
|
||||
- **【强制 C2】** 通过 SCA 工具对第三方组件进行安全扫描
|
||||
- **【强制 C4】** 制定第三方组件使用规范:黑名单拦截、基线管控、新增组件审批
|
||||
|
||||
## 7. 制品溯源
|
||||
|
||||
- **【强制 C3】** 制品元数据包括:构建信息、关联源码、安全扫描结果、测试结果
|
||||
- **【推荐 C0】** 收集制品软件物料清单(SBOM)
|
||||
- **【推荐 C0】** 通过 SBOM 快速定位有安全漏洞的组件
|
||||
@@ -0,0 +1,70 @@
|
||||
# 07-流水线管理规范
|
||||
|
||||
## 1. 配置要求
|
||||
|
||||
### 命名规范
|
||||
- 流水线名称:英文小写字母 + 数字 + 中划线 `-`,字母开头
|
||||
- 建议格式:`{业务名称}-{模块名称}-{语言}`
|
||||
- 示例:`srdcloud-usercenter-java`
|
||||
- **【强制】** 禁止使用 `test`、`demo` 等意义不明字样
|
||||
|
||||
### 步骤命名
|
||||
- 可由小写字母、数字、中文组成
|
||||
- 根据实际用途命名,禁止无意义名称
|
||||
|
||||
### 其他
|
||||
- **【强制】** 流水线属于单个项目组,不允许跨项目使用
|
||||
- **【强制】** 运行环境必须和开发环境保持一致
|
||||
|
||||
## 2. 触发类型
|
||||
|
||||
| 类型 | 说明 |
|
||||
|------|------|
|
||||
| 手动触发 | 开发人员手动触发 |
|
||||
| 定时触发 | 按定时规则自动触发 |
|
||||
| 事件触发 | 代码库/制品库事件触发(如代码提交、代码合入、代码更新) |
|
||||
|
||||
## 3. 流水线阶段内容
|
||||
|
||||
### 持续集成(CI)
|
||||
1. **获取代码** — 流水线对代码库具有下载权限
|
||||
2. **单元测试** — 人工静态检查 + 动态执行跟踪
|
||||
3. **代码检查** — 代码安全扫描(安全漏洞)+ 代码质量扫描(编码违规)
|
||||
4. **编译构建** — 源码编译成目标文件并打包
|
||||
5. **制品构建** — 制作成最终可运行文件
|
||||
6. **上传制品** — 上传到统一制品库
|
||||
|
||||
### 持续交付
|
||||
1. 执行测试用例
|
||||
2. 部署测试环境
|
||||
3. 测试环境测试
|
||||
4. 部署预生产环境
|
||||
5. 预生产环境测试
|
||||
|
||||
### 持续部署
|
||||
1. 灰度发布
|
||||
2. 卡点检查
|
||||
|
||||
## 4. 按流水线类型推荐内容
|
||||
|
||||
| 流水线类型 | 触发事件 | 推荐内容 |
|
||||
|------------|----------|----------|
|
||||
| VerifyCI | 代码提交评审 | 构建 + 单元测试 + 质量扫描 |
|
||||
| MergeCI | 代码合入 | 构建 + 制品上传 |
|
||||
| ReleaseCI | release 分支代码更新 | 安全漏洞扫描 |
|
||||
| 测试任务 | 代码更新 | 自动测试任务 |
|
||||
|
||||
## 5. 分级要求(按能力等级)
|
||||
|
||||
| 内容 | C1 | C2 | C3 | C4 |
|
||||
|------|:--:|:--:|:--:|:--:|
|
||||
| 代码获取 | ● | ● | ● | ● |
|
||||
| 编译构建 | ● | ● | ● | ● |
|
||||
| 单元测试 | ○ | ● | ● | ● |
|
||||
| 代码质量扫描 | ○ | ● | ● | ● |
|
||||
| 代码安全扫描 | ○ | ● | ● | ● |
|
||||
| 制品上传 | ○ | ○ | ● | ● |
|
||||
| 自动化测试 | ○ | ○ | ● | ● |
|
||||
| 自动部署 | ○ | ○ | ○ | ● |
|
||||
|
||||
(● 必选 ○ 可选)
|
||||
@@ -0,0 +1,85 @@
|
||||
# 08-测试管理规范
|
||||
|
||||
## 1. 角色与职责
|
||||
|
||||
| 角色 | 职责 |
|
||||
|------|------|
|
||||
| **测试负责人** | 制定测试方案/计划、组织评审、把控进度 |
|
||||
| **测试执行人** | 编写测试用例、执行测试、记录缺陷 |
|
||||
| **研发人员** | 修复缺陷、配合回归验证 |
|
||||
| **产品经理** | 缺陷延期处理决策 |
|
||||
|
||||
## 2. 测试流程
|
||||
|
||||
```
|
||||
测试计划 → 测试准备 → 测试执行 → 测试总结
|
||||
```
|
||||
|
||||
### 测试计划阶段
|
||||
- 测试人员全程参与需求分析与评审
|
||||
- 从测试角度评估需求可行性、可测性
|
||||
- 制定测试方案/计划:确定范围、策略、工作量、资源、风险
|
||||
- 组织测试方案评审
|
||||
|
||||
### 测试准备阶段
|
||||
- 设计测试用例/脚本(覆盖业务场景、系统功能、条件分支、边界值)
|
||||
- 组织测试用例评审
|
||||
- 按需部署测试环境并验证
|
||||
|
||||
### 测试执行阶段
|
||||
- 依据测试计划逐一执行
|
||||
- 不通过则记录于缺陷管理工具
|
||||
- 根据测试充分性判断是否需要增加测试内容
|
||||
|
||||
### 测试总结阶段
|
||||
- 测试结果分析
|
||||
- 输出测试报告
|
||||
- 测试文档归档
|
||||
|
||||
## 3. 测试分级
|
||||
|
||||
| 级别 | 对象 | 目的 |
|
||||
|------|------|------|
|
||||
| **单元测试** | 可独立编译的模块 | 检查功能/性能/接口 |
|
||||
| **集成测试** | 模块间接口 | 验证已集成软件是否符合设计 |
|
||||
| **系统测试** | 完整系统 | 验证真实环境下的系统需求符合性 |
|
||||
| **验收测试** | 完整系统(用户环境) | 确定是否接收该软件 |
|
||||
|
||||
## 4. 缺陷管理
|
||||
|
||||
### 缺陷类别
|
||||
需求缺陷、架构缺陷、设计缺陷、编码缺陷、测试缺陷、集成缺陷
|
||||
|
||||
### 缺陷严重等级
|
||||
| 等级 | 说明 |
|
||||
|------|------|
|
||||
| 致命 | 导致系统崩溃、安全漏洞 |
|
||||
| 严重 | 影响主要功能 |
|
||||
| 一般 | 影响非核心功能 |
|
||||
| 轻微 | 不影响功能,建议性改进 |
|
||||
|
||||
### 缺陷优先级
|
||||
立即解决 → 优先解决 → 一般 → 较低
|
||||
|
||||
### 缺陷处理流程
|
||||
```
|
||||
提交缺陷 → 确认缺陷 → 修复缺陷 → 缺陷验证 → 关闭
|
||||
↓ 失败
|
||||
重新指派修复
|
||||
```
|
||||
关闭后可激活(复现时)
|
||||
|
||||
## 5. 测试环境划分
|
||||
|
||||
根据不同测试活动目的划分环境,也可多个测试活动共用同一环境。
|
||||
|
||||
## 6. 分级测试验收要求
|
||||
|
||||
| 项目级别 | 单元测试 | 集成测试 | 系统测试 | 验收测试 |
|
||||
|----------|:--------:|:--------:|:--------:|:--------:|
|
||||
| C4(战略级) | ● | ● | ● | ● |
|
||||
| C3(国家级) | ● | ● | ● | ○ |
|
||||
| C2(省级) | ● | ● | ○ | ○ |
|
||||
| C1(创新探索) | ● | ○ | ○ | ○ |
|
||||
|
||||
(● 必选 ○ 可选/视情况)
|
||||
@@ -0,0 +1,141 @@
|
||||
# 09-安全规范
|
||||
|
||||
> **最重要分册之一**,涵盖安全原则、开发规范、扫描要求
|
||||
|
||||
---
|
||||
|
||||
## 一、软件安全基本原则
|
||||
|
||||
### 安全设计原则
|
||||
- **默认拒绝** —— 无授权即不允许访问
|
||||
- **开放设计** —— 安全不依赖机制保密,依赖密钥/口令
|
||||
- **特权分离** —— 细分特权分给多个主体;禁止 root 远程访问
|
||||
- **最小特权** —— 每个程序/用户仅拥有完成任务所需最小权限
|
||||
- **最少公共机制** —— 共享机制降到最少
|
||||
- **完全仲裁** —— 授权检查覆盖每个访问操作
|
||||
- **零信任** —— 假设用户/外部部件都不安全
|
||||
- **访问控制** —— 严禁用用户输入参数作为访问控制依据;使用 RBAC;基于角色展示前端页面
|
||||
|
||||
### 会话管理原则
|
||||
- Session ID 必须足够随机且无法预测
|
||||
- 含敏感信息的会话必须 SSL 加密
|
||||
- **权限变动时必须重新生成 Session ID**
|
||||
- 同一用户尽量只允许一个会话存在
|
||||
- 建议尽可能缩短会话寿命
|
||||
|
||||
### 缓存管理原则
|
||||
- 所有缓存数据必须设置过期时间
|
||||
- 要求强一致性的系统不能使用缓存
|
||||
- 预防缓存雪崩/缓存穿透
|
||||
|
||||
### 安全开发原则
|
||||
- **输入验证** —— 所有输入都需安全验证;**所有输入必须在服务端验证**
|
||||
- **客户端不可信任** —— 敏感数据从服务端获取,不直接使用客户端身份信息
|
||||
- **错误消息** —— 仅显示一般错误信息,不暴露系统/网络/应用敏感信息
|
||||
- **URL 加密传输** —— URL 中敏感信息应加密
|
||||
- **注释代码** —— 不能包含敏感信息
|
||||
- **最小化** —— 输入信息最小化、返回信息最小化,错误信息对用户屏蔽
|
||||
- **失败终止** —— 不符合验证的数据直接终止,不修正继续
|
||||
|
||||
### 安全部署原则
|
||||
- **【强制】** 禁用 root 权限运行业务应用;不要在容器内以 root 运行
|
||||
- **【强制】** 创建服务专属账号启动服务
|
||||
- **【强制】** Linux 下避免文件权限设为 777
|
||||
- **【强制】** 防火墙默认禁止所有域间流量
|
||||
- **【强制】** 为临时安全策略设置生效时间段
|
||||
- 记录日志、定期审计
|
||||
|
||||
### 禁止弱口令
|
||||
- 长度 ≥ 8 位
|
||||
- 包含数字、小写字母、大写字母、特殊符号 4 类中至少 3 类
|
||||
- 口令与用户名无相关性
|
||||
- 更换默认出厂口令
|
||||
- 避免键盘排序密码
|
||||
|
||||
---
|
||||
|
||||
## 二、通用安全开发规范
|
||||
|
||||
| 编号 | 规则 | 级别 |
|
||||
|------|------|:----:|
|
||||
| 1 | 禁止在日志中保存口令、密钥和其他敏感数据 | **强制** |
|
||||
| 2 | 禁止使用私有或弱加密算法 | **强制** |
|
||||
| 3 | 口令哈希存储必须加入盐值 | **强制** |
|
||||
| 4 | 禁止将敏感信息硬编码在程序中 | **强制** |
|
||||
| 5 | 使用强随机数(禁止 `java.util.Random`) | **强制** |
|
||||
| 6 | 禁止在生产环境保留任何后门程序 | **强制** |
|
||||
|
||||
### 推荐加密算法
|
||||
| 类型 | 推荐算法 | 最低密钥长度 |
|
||||
|------|----------|:----------:|
|
||||
| 对称加密 | SM4 | 128 位 |
|
||||
| 非对称加密 | SM2 | 256 位 |
|
||||
| 数字签名 | SM2 | — |
|
||||
| 摘要算法 | SM3 | — |
|
||||
|
||||
### 盐值(Salt)要求
|
||||
- 至少 8 字节,由安全随机数产生
|
||||
- 每个存储入口盐值不同
|
||||
- 推荐进行 50000 次哈希迭代(有性能限制时至少 5000 次)
|
||||
|
||||
---
|
||||
|
||||
## 三、Java 安全开发规范(关键项)
|
||||
|
||||
| 规则 | 说明 |
|
||||
|------|------|
|
||||
| **SQL 注入防护** | 使用参数化查询(`PreparedStatement`),禁止拼接用户输入 |
|
||||
| **XML 注入防护** | 白名单校验 + 使用安全的 XML 库 |
|
||||
| **命令注入防护** | 系统命令做白名单限制 |
|
||||
| **XSS 防护** | 前端输出必须安全过滤/正确转义 |
|
||||
| **文件上传** | 校验文件扩展名 + 大小限制 |
|
||||
| **URL 跳转** | 白名单验证 URL 参数 |
|
||||
| **异常处理** | 禁止抛出敏感数据信息;不允许忽略异常;不允许抛出 RuntimeException/Exception/Throwable |
|
||||
| **序列化** | 不要序列化未加密敏感数据(用 `transient`);避免内存泄漏;反序列化避免恶意代码 |
|
||||
| **I/O 操作** | 临时文件及时删除;避免在共享目录操作文件;避免外部进程阻塞在 I/O 流 |
|
||||
| **密码存储** | 建议用字符数组存储密码(非 String) |
|
||||
|
||||
### 输入验证核心规则
|
||||
1. **【强制】** 禁止对用户输入未过滤的参数进行 SQL 拼接
|
||||
2. **【强制】** 禁止对用户输入未过滤的参数进行 XML 拼接
|
||||
3. **【强制】** 禁止用户输入未经校验的系统命令作为入参
|
||||
4. **【强制】** 禁止向前端输出未经安全过滤的数据
|
||||
5. **【强制】** 禁止上传未经安全校验的文件
|
||||
6. **【强制】** 页面跳转 URL 参数做白名单验证
|
||||
7. **【强制】** 禁止向 `Runtime.exec()` 传递不可信数据
|
||||
|
||||
---
|
||||
|
||||
## 四、代码安全扫描要求
|
||||
|
||||
### 扫描时机
|
||||
- **【强制 C1】** 软件上线发布前必须进行源代码安全扫描
|
||||
- **【强制 C2】** 开发期间提交代码评审时需进行代码质量扫描
|
||||
- **【强制 C3】** 代码安全扫描缺陷处理、审计、代码安全基线
|
||||
|
||||
### 扫描类型
|
||||
| 类型 | 说明 |
|
||||
|------|------|
|
||||
| SCA | 软件成分分析 |
|
||||
| SAST | 静态应用安全测试 |
|
||||
| DAST | 动态应用安全测试 |
|
||||
| SonarQube | 代码质量扫描 |
|
||||
|
||||
### 安全评估分级
|
||||
- 阻断级问题 → 必须修复才能上线
|
||||
- 严重级问题 → 必须修复
|
||||
- 一般级问题 → 建议修复
|
||||
- 轻微级问题 → 可选修复
|
||||
|
||||
---
|
||||
|
||||
## 五、研发云平台安全要求
|
||||
|
||||
- **【强制】** 系统接入须提供安全扫描、漏洞扫描、渗透测试报告
|
||||
- **【强制】** API 对接使用 TLS 1.3+,敏感数据应用层加密(AES-256)
|
||||
- **【强制】** 页面集成通过 iframe 须用 HTTPS + 公网可信证书
|
||||
- **【强制】** CSP 头严格限制 iframe 来源,添加 sandbox 属性
|
||||
- **【强制】** 链接跳转实施白名单机制
|
||||
- **【强制】** 日志保留至少 6 个月
|
||||
- **【强制】** 具备安全事件应急处置预案
|
||||
- **【禁止】** 研发云与接入系统间禁止批量同步:用户信息、项目信息、用户角色和权限
|
||||
@@ -0,0 +1,77 @@
|
||||
# 10-部署管理规范
|
||||
|
||||
## 1. 部署流程
|
||||
|
||||
```
|
||||
部署准备 → 部署审批 → 部署任务设置 → 部署执行 → 部署验证
|
||||
```
|
||||
|
||||
## 2. 部署准备
|
||||
|
||||
### 测试工作
|
||||
- **【强制 C1】** 部署前完成上线测试工作,符合测试准入准出要求,提交测试报告
|
||||
|
||||
### 需提供的信息和文档
|
||||
|
||||
**版本及关联信息**
|
||||
- **【强制 C1】** 应用/产品版本信息
|
||||
- **【强制 C3】** 对应的需求及编号
|
||||
- **【强制 C1】** 制品版本及各制品对应的代码版本
|
||||
|
||||
**部署计划和实施方案**
|
||||
- **【强制 C1】** 部署计划、实施方案:操作步骤、执行脚本、回退方案、数据备份方案
|
||||
|
||||
**其他**
|
||||
- 配置参数、数据初始化要求
|
||||
- 资源和权限申请
|
||||
|
||||
## 3. 部署审批
|
||||
- **【强制 C1】** 完成准备后发起审批流程
|
||||
- 研发平台侧流程应通过系统或手工对接生产平台侧
|
||||
|
||||
## 4. 部署任务设置
|
||||
|
||||
### 命名规范
|
||||
- 小写字母 + 数字 + 中划线 `-`,小写字母开头
|
||||
- 建议格式:`{业务名称}-{模块名称}-{服务名称}-{环境}`
|
||||
- 示例:`srdcloud-usercenter-web-pro`
|
||||
- **【强制 C3】** 部署任务针对单个项目,不允许跨项目使用
|
||||
|
||||
### K8S 部署任务
|
||||
- 使用 YAML 文件描述部署资源
|
||||
- **【强制】** 镜像明确具体版本号,**禁止使用 `latest`**
|
||||
- 资源配置不得超过命名空间限制
|
||||
|
||||
### 主机部署任务
|
||||
- 使用 tgz 压缩包,包含:
|
||||
- `deploy/init.sh` — 初始化准备
|
||||
- `deploy/start.sh` — 服务启动
|
||||
- `deploy/stop.sh` — 服务停止
|
||||
- `deploy/monitor.sh` — 监控服务
|
||||
- `deploy/clean.sh` — 停止并清理
|
||||
|
||||
## 5. 部署执行
|
||||
- 生产环境部署选择手动触发(需每次审批)
|
||||
- 其他环境可通过流水线触发
|
||||
|
||||
## 6. 部署验证
|
||||
- 通过事先准备好的用例验证部署正确性、完整性、服务可用性
|
||||
|
||||
## 7. 部署环境
|
||||
|
||||
### 环境类型
|
||||
|
||||
| 环境 | 说明 |
|
||||
|------|------|
|
||||
| **云网环境** | 集团 IT 和业务上云环境(集团云网运营部统筹管理) |
|
||||
| **私有环境** | 各单位自行管理的部署环境 |
|
||||
|
||||
### 云网环境要求
|
||||
- 符合生产环境相关要求
|
||||
- 提供同步研发云制品库到本地制品库的接口
|
||||
- 能接收研发云平台侧部署任务并执行
|
||||
|
||||
### 私有环境要求
|
||||
- 必须支持 K8S 部署或主机部署之一
|
||||
- 必须能访问研发云制品库拉取制品
|
||||
- 能接收部署任务并执行(特殊网络情况可离线部署)
|
||||
@@ -0,0 +1,75 @@
|
||||
# 11-需求管理规范
|
||||
|
||||
## 1. 需求开发过程
|
||||
|
||||
```
|
||||
制定计划 → 需求调研 → 需求分析 → 需求评审 → 用户确认 → 需求变更 → 需求跟踪 → 需求验收
|
||||
```
|
||||
|
||||
### 各阶段产出物
|
||||
|
||||
| 阶段 | 产出物 |
|
||||
|------|--------|
|
||||
| 需求调研 | 《需求调研记录》、《客户访谈记录》 |
|
||||
| 需求分析 | 《软件需求规格说明书》、原型 |
|
||||
| 需求评审 | 《评审记录表》、修订后的文档 |
|
||||
| 用户确认 | 确认单/邮件/签字留档 |
|
||||
| 需求变更 | 变更申请 → CCB 评审 → 修订文档 |
|
||||
| 需求跟踪 | 《需求跟踪表》持续更新 |
|
||||
| 需求验收 | 验收确认单 |
|
||||
|
||||
## 2. 需求分析准则
|
||||
|
||||
### 分析维度
|
||||
- **合理性**:是否细化到设计人员可直接实现的程度
|
||||
- **可行性**:成本、性能角度评估
|
||||
- **优先级**:高(本次必须)→ 中(可下版本)→ 低(资源允许时)
|
||||
- **产品线关系**:新增 / 待优化 / 共性 / 特例
|
||||
- **质量**:清晰明确、完整、一致、可验证、可跟踪
|
||||
|
||||
### 不同类型需求细化要求
|
||||
|
||||
| 类型 | 细化要求 |
|
||||
|------|----------|
|
||||
| **查询统计类** | 明确查询条件、查询结果、统计口径 |
|
||||
| **性能类** | 明确响应时间、用户数、并发数、吞吐量、资源利用率 |
|
||||
| **流程类** | 流程图 + 关键环节说明 |
|
||||
| **外部接口类** | 接口协议、字段名称、备选值、约束条件、性能指标 |
|
||||
| **业务数据类** | 输入条件、计算逻辑、输出结果 |
|
||||
|
||||
## 3. 需求编号规则
|
||||
|
||||
```
|
||||
[系统标识]_(模块标识)_[编号](_二级编号)
|
||||
```
|
||||
- 系统标识和模块标识用英文或拼音缩写
|
||||
- 未确定需求前加 `TBD_` 前缀
|
||||
|
||||
## 4. 需求状态跟踪
|
||||
|
||||
| 状态 | 说明 |
|
||||
|------|------|
|
||||
| 新需求 | 用户提出需求申请 |
|
||||
| 需求已确认 | 已被分析且用户已确认 |
|
||||
| 已开发 | 开发完成提交测试 |
|
||||
| 已测试 | 功能测试和回归测试通过 |
|
||||
| 已上线 | 发布上线,用户认可 |
|
||||
| 已验收 | 用户验收通过,可关闭 |
|
||||
|
||||
## 5. 需求变更
|
||||
|
||||
### 流程
|
||||
```
|
||||
变更申请 → 评估审批(CCB) → 制定计划并执行 → 验证发布
|
||||
```
|
||||
|
||||
### 关键点
|
||||
- **【强制】** 客户变更需书面提交(单位盖章或领导签字)
|
||||
- **【强制】** 一周内答复变更申请结果
|
||||
- 变更视为新需求,按本规范重新执行需求开发流程
|
||||
|
||||
## 6. 内部/外部评审
|
||||
- **内部评审**:项目经理组织,需求/开发/测试/QA/配置共同参与
|
||||
- **外部评审**:通知用户发起,需求确认
|
||||
- 评审通过后上传配置库,邮件通知相关人员
|
||||
- 项目经理组织需求讲解和澄清
|
||||
@@ -0,0 +1,116 @@
|
||||
# 12-研发云平台互联互通
|
||||
|
||||
> 研发云平台与外部系统的集成规范
|
||||
|
||||
---
|
||||
|
||||
## 一、互联互通方式(5 类)
|
||||
|
||||
| 方式 | 说明 |
|
||||
|------|------|
|
||||
| **系统接入** | 外部平台与研发云集成,单点登录、界面跳转/集成 |
|
||||
| **能力开放** | 通过 OpenAPI 及消息事件订阅向外部开放平台能力 |
|
||||
| **数据开放** | 提供研发效能类数据(系统级/组织级) |
|
||||
| **数据接入** | 外部平台研发过程数据同步到研发云 |
|
||||
| **服务接入** | 脚手架等服务接入研发云 |
|
||||
|
||||
---
|
||||
|
||||
## 二、系统接入
|
||||
|
||||
### 认证方式(三种)
|
||||
1. **天翼认证** — 按天翼认证系统要求
|
||||
2. **云认证** — 按云认证系统要求
|
||||
3. **研发云认证** — 通过 OIDC/OAuth2.0 协议
|
||||
|
||||
### 集成方式
|
||||
- **界面跳转**:研发云菜单点击跳转
|
||||
- **界面集成**:iframe 嵌入,使用 `postMessage` 通信
|
||||
|
||||
```javascript
|
||||
window.postMessage({
|
||||
valueType: "xxx", // 双方约定事件名称
|
||||
data: {}, // 具体参数
|
||||
}, "*");
|
||||
```
|
||||
|
||||
### 系统接入安全要求
|
||||
- 系统接入须提交安全扫描、漏洞扫描、渗透测试报告
|
||||
- 集成页面须使用 HTTPS + 公网可信证书
|
||||
- CSP 头严格限制 iframe 来源
|
||||
- 链接跳转实施白名单机制
|
||||
|
||||
---
|
||||
|
||||
## 三、OpenAPI 能力开放
|
||||
|
||||
### 鉴权方式
|
||||
| 方式 | 适用场景 |
|
||||
|------|----------|
|
||||
| **平台级鉴权** | 使用"外部用户账号",SHA256 + Base64 签名 |
|
||||
| **用户级鉴权** | OAuth 获取 auth_token,通过 `id_token` 传递 |
|
||||
|
||||
### 已开放的能力模块
|
||||
用户管理、安全中心、版本中心、部署中心、测试中心、代码库、流水线、敏捷管理、文档空间、问需管理、我的工作、Wiki、自研工作项、数据中台、组件广场、Codefree、制品中心、资源中心
|
||||
|
||||
### 平台级鉴权格式
|
||||
```
|
||||
Header:
|
||||
srdcloud-user-account: <外部账号>
|
||||
time-stamp: <时间戳>
|
||||
authorization: SHA256({account},{timestamp},{secret}) 再 Base64
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、数据开放与接入
|
||||
|
||||
### 数据开放范围
|
||||
- 基本对象维度信息(组织、项目、用户)
|
||||
- 研发过程效能度量明细数据
|
||||
- 效能度量汇总模型数据
|
||||
- 研发成果数据(专利等)
|
||||
- **不涉及**源代码文件、制品内容
|
||||
|
||||
### 数据订阅方式
|
||||
| 方式 | 说明 |
|
||||
|------|------|
|
||||
| DCOOS(云桥) | 推送至 DCOOS 地址 |
|
||||
| HTTPS/HTTP | 仅组织级,推荐 HTTPS |
|
||||
| Kafka | 需 1124VPN,JDK 11+ |
|
||||
|
||||
### 数据接入方式
|
||||
- 通过消息中心(CloudEvents 格式)
|
||||
- 通过其他中心(如测试中心,按业务要求)
|
||||
|
||||
---
|
||||
|
||||
## 五、消息事件订阅
|
||||
|
||||
### 已开放事件
|
||||
| 中心 | 事件 |
|
||||
|------|------|
|
||||
| 用户中心 | 账号开通、密码重置 |
|
||||
| 代码中心 | 代码库变更 |
|
||||
| 集成中心(流水线) | 配置变更、任务执行状态、错误日志 |
|
||||
| 安全中心 | Sonar 扫描结果 |
|
||||
| 部署中心 | 资源部署对象删除事件 |
|
||||
|
||||
---
|
||||
|
||||
## 六、网络对接方案
|
||||
|
||||
| 方案 | 适用条件 |
|
||||
|------|----------|
|
||||
| CN2-1124 直通 | 主机可直接访问 CN2-1124 VPN |
|
||||
| CN2-1124 代理 | 有服务器同时接入 CN2-1124 和本地内网 |
|
||||
| SASE 打通 | 不能直接访问 CN2-1124,但可访问公网 |
|
||||
|
||||
---
|
||||
|
||||
## 七、安全运营
|
||||
|
||||
- 重大安全事件:边处置、边报告
|
||||
- 重大安全风险:及时排查、整改、反馈
|
||||
- 日志保留 ≥ 6 个月
|
||||
- **【禁止】** 研发云与接入系统间批量同步用户信息、项目信息、用户角色和权限
|
||||
@@ -0,0 +1,98 @@
|
||||
# 13-快速检查清单
|
||||
|
||||
> Python 开发日常自查
|
||||
|
||||
---
|
||||
|
||||
## 开工前 Check
|
||||
|
||||
- [ ] 代码在云电脑内编写(**代码不出研发云**)
|
||||
- [ ] 技术选型符合统一技术栈要求
|
||||
- [ ] Git 仓库已创建,`.gitignore` 已配置
|
||||
- [ ] 需求文档已评审通过
|
||||
|
||||
---
|
||||
|
||||
## 编码中 Check
|
||||
|
||||
### Python 编码
|
||||
- [ ] 命名:类用驼峰,函数/变量全小写+下划线
|
||||
- [ ] 缩进:4 个空格,无 Tab
|
||||
- [ ] 每行 ≤ 80 字符
|
||||
- [ ] 导入顺序:标准库 → 第三方 → 应用
|
||||
- [ ] 禁止隐式相对导入
|
||||
- [ ] 函数有文档字符串(Args/Returns/Raises)
|
||||
- [ ] `if foo is None:` 而非 `== None`
|
||||
- [ ] 禁止循环中用 `+` 拼接字符串
|
||||
- [ ] 常量在左、变量在右
|
||||
|
||||
### 安全
|
||||
- [ ] 无硬编码密码/密钥
|
||||
- [ ] 口令哈希已加盐(盐 ≥ 8 字节随机数,≥ 50000 次迭代)
|
||||
- [ ] 使用强随机数
|
||||
- [ ] 日志不输出敏感信息
|
||||
- [ ] 用户输入已验证(服务端验证)
|
||||
- [ ] 错误消息不暴露系统信息
|
||||
- [ ] 无后门代码/调试入口
|
||||
|
||||
### 数据库
|
||||
- [ ] 表名/字段名全小写+下划线
|
||||
- [ ] 表和字段已添加注释
|
||||
- [ ] 无外键
|
||||
- [ ] WHERE 条件列有索引
|
||||
- [ ] 无 `SELECT *`
|
||||
- [ ] DELETE/UPDATE 带 WHERE 条件
|
||||
- [ ] 无隐式类型转换
|
||||
- [ ] DDL 已提前通知 DBA
|
||||
|
||||
---
|
||||
|
||||
## 提交前 Check
|
||||
|
||||
### Git
|
||||
- [ ] Commit message 格式:`type(scope): subject` + `%workItemId`
|
||||
- [ ] 已精简合并 commit(≤ 5 个)
|
||||
- [ ] 无敏感信息(密码/密钥/账号)
|
||||
- [ ] 无二进制文件 > 10MB
|
||||
- [ ] 无 PDF/DOC/压缩包/音视频
|
||||
- [ ] 第三方依赖来自制品库(非直接提交)
|
||||
|
||||
### 测试
|
||||
- [ ] 单元测试已编写
|
||||
- [ ] 测试覆盖率达标
|
||||
- [ ] 无致命/严重缺陷未关闭
|
||||
|
||||
---
|
||||
|
||||
## 流水线 Check
|
||||
|
||||
- [ ] 代码质量扫描通过(无阻断/严重级问题)
|
||||
- [ ] 代码安全扫描通过
|
||||
- [ ] 构建成功
|
||||
- [ ] 制品已上传统一制品库
|
||||
|
||||
---
|
||||
|
||||
## 部署前 Check
|
||||
|
||||
- [ ] 测试报告已提交
|
||||
- [ ] 部署计划/实施方案已准备
|
||||
- [ ] 回退方案已准备
|
||||
- [ ] 制品已从快照版本转为正式版本
|
||||
- [ ] K8S 镜像未使用 `latest` 标签
|
||||
- [ ] 部署审批已通过
|
||||
|
||||
---
|
||||
|
||||
## 安全红线(一票否决)
|
||||
|
||||
| 问题 | 后果 |
|
||||
|------|------|
|
||||
| 代码中包含硬编码密码/密钥 | 禁止上线 |
|
||||
| 使用弱加密算法(MD5/DES/SHA1) | 禁止上线 |
|
||||
| 日志打印用户密码/敏感信息 | 禁止上线 |
|
||||
| 存在高危安全漏洞未修复 | 禁止上线 |
|
||||
| 未通过代码安全扫描 | 禁止上线 |
|
||||
| 代码存储在外部云服务 | 违规 |
|
||||
| 未经审批部署到生产环境 | 违规 |
|
||||
| 直接连接生产数据库 | 违规 |
|
||||
Reference in New Issue
Block a user