feat: add China Telecom R&D project template

This commit is contained in:
v6ole
2026-07-28 22:30:20 +08:00
commit b6a1fd85d8
51 changed files with 11196 additions and 0 deletions
@@ -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 | 需 1124VPNJDK 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 | 禁止上线 |
| 日志打印用户密码/敏感信息 | 禁止上线 |
| 存在高危安全漏洞未修复 | 禁止上线 |
| 未通过代码安全扫描 | 禁止上线 |
| 代码存储在外部云服务 | 违规 |
| 未经审批部署到生产环境 | 违规 |
| 直接连接生产数据库 | 违规 |